77
88"""
99DESCRIPTION:
10- Demonstrates Knowledge Source and Knowledge Base CRUD operations and
11- a minimal retrieval query using a semantic intent.
10+ Demonstrates the end-to-end agentic retrieval scenario: create a knowledge
11+ source over an existing search index, create a knowledge base that
12+ references it, query the knowledge base with a semantic intent, and clean
13+ up.
14+
15+ For knowledge source / knowledge base CRUD details (get, update, list),
16+ see sample_knowledge_source_crud.py and sample_knowledge_base_crud.py.
1217
1318USAGE:
1419 python sample_agentic_retrieval.py
2429import os
2530
2631from azure .core .credentials import AzureKeyCredential
27- from azure .core .exceptions import ResourceNotFoundError
2832from azure .search .documents .indexes import SearchIndexClient
2933from azure .search .documents .knowledgebases import KnowledgeBaseRetrievalClient
3034from azure .search .documents .knowledgebases .models import (
3135 KnowledgeBaseRetrievalRequest ,
3236 KnowledgeRetrievalSemanticIntent ,
33- KnowledgeRetrievalMinimalReasoningEffort ,
3437)
3538from azure .search .documents .indexes .models import (
3639 KnowledgeBase ,
3740 KnowledgeSourceReference ,
38- SearchIndexFieldReference ,
3941 SearchIndexKnowledgeSource ,
4042 SearchIndexKnowledgeSourceParameters ,
4143)
4850knowledge_base_name = "hotels-sample-knowledge-base"
4951
5052
51- def create_knowledge_source ():
52- # [START create_knowledge_source]
53+ def setup_knowledge_base ():
5354 index_client = SearchIndexClient (service_endpoint , AzureKeyCredential (key ))
5455
5556 knowledge_source = SearchIndexKnowledgeSource (
5657 name = knowledge_source_name ,
5758 search_index_parameters = SearchIndexKnowledgeSourceParameters (search_index_name = index_name ),
5859 )
59-
6060 index_client .create_or_update_knowledge_source (knowledge_source = knowledge_source )
6161 print (f"Created: knowledge source '{ knowledge_source_name } '" )
62- # [END create_knowledge_source]
63-
64-
65- def get_knowledge_source ():
66- # [START get_knowledge_source]
67- index_client = SearchIndexClient (service_endpoint , AzureKeyCredential (key ))
68-
69- knowledge_source = index_client .get_knowledge_source (knowledge_source_name )
70- print (f"Retrieved: knowledge source '{ knowledge_source .name } '" )
71- # [END get_knowledge_source]
72-
73-
74- def update_knowledge_source ():
75- # [START update_knowledge_source]
76- index_client = SearchIndexClient (service_endpoint , AzureKeyCredential (key ))
77-
78- knowledge_source = SearchIndexKnowledgeSource (
79- name = knowledge_source_name ,
80- search_index_parameters = SearchIndexKnowledgeSourceParameters (
81- search_index_name = index_name ,
82- source_data_fields = [
83- SearchIndexFieldReference (name = "HotelId" ),
84- SearchIndexFieldReference (name = "HotelName" ),
85- SearchIndexFieldReference (name = "Description" ),
86- SearchIndexFieldReference (name = "Category" ),
87- SearchIndexFieldReference (name = "Tags" ),
88- ],
89- ),
90- )
91-
92- index_client .create_or_update_knowledge_source (knowledge_source = knowledge_source )
93- print (f"Updated: knowledge source '{ knowledge_source_name } '" )
94- # [END update_knowledge_source]
95-
96-
97- def delete_knowledge_source ():
98- # [START delete_knowledge_source]
99- index_client = SearchIndexClient (service_endpoint , AzureKeyCredential (key ))
100- try :
101- index_client .delete_knowledge_source (knowledge_source_name )
102- print (f"Deleted: knowledge source '{ knowledge_source_name } '" )
103- except ResourceNotFoundError :
104- print (f"Skipped: knowledge source '{ knowledge_source_name } ' not found" )
105- # [END delete_knowledge_source]
106-
107-
108- def create_knowledge_base ():
109- # [START create_knowledge_base]
110- index_client = SearchIndexClient (service_endpoint , AzureKeyCredential (key ))
11162
11263 knowledge_base = KnowledgeBase (
11364 name = knowledge_base_name ,
11465 knowledge_sources = [KnowledgeSourceReference (name = knowledge_source_name )],
11566 )
116-
11767 index_client .create_or_update_knowledge_base (knowledge_base )
11868 print (f"Created: knowledge base '{ knowledge_base_name } '" )
119- # [END create_knowledge_base]
120-
121-
122- def get_knowledge_base ():
123- # [START get_knowledge_base]
124- index_client = SearchIndexClient (service_endpoint , AzureKeyCredential (key ))
125-
126- knowledge_base = index_client .get_knowledge_base (knowledge_base_name )
127- print (f"Retrieved: knowledge base '{ knowledge_base .name } '" )
128- # [END get_knowledge_base]
129-
130-
131- def update_knowledge_base ():
132- # [START update_knowledge_base]
133- index_client = SearchIndexClient (service_endpoint , AzureKeyCredential (key ))
134-
135- knowledge_base = KnowledgeBase (
136- name = knowledge_base_name ,
137- knowledge_sources = [KnowledgeSourceReference (name = knowledge_source_name )],
138- retrieval_reasoning_effort = KnowledgeRetrievalMinimalReasoningEffort (),
139- )
140-
141- index_client .create_or_update_knowledge_base (knowledge_base )
142- print (f"Updated: knowledge base '{ knowledge_base_name } '" )
143- # [END update_knowledge_base]
14469
14570
14671def retrieve_knowledge_base ():
14772 # [START retrieve_knowledge_base]
14873 retrieval_client = KnowledgeBaseRetrievalClient (
14974 service_endpoint ,
15075 credential = AzureKeyCredential (key ),
76+ knowledge_base_name = knowledge_base_name ,
15177 )
15278
15379 request = KnowledgeBaseRetrievalRequest (intents = [KnowledgeRetrievalSemanticIntent (search = "hotels with free wifi" )])
15480
155- result = retrieval_client .retrieve (knowledge_base_name = knowledge_base_name , retrieval_request = request )
81+ result = retrieval_client .retrieve (request )
15682 print ("Results: knowledge base retrieval" )
15783
15884 response_parts = []
@@ -162,9 +88,7 @@ def retrieve_knowledge_base():
16288 response_parts .append (content .text )
16389
16490 if response_parts :
165- response_content = "\n \n " .join (response_parts )
166-
167- items = json .loads (response_content )
91+ items = json .loads ("\n \n " .join (response_parts ))
16892 for i , item in enumerate (items [:5 ], start = 1 ):
16993 print (f" Result { i } :" )
17094 print (f" Title: { item .get ('title' )} " )
@@ -174,24 +98,15 @@ def retrieve_knowledge_base():
17498 # [END retrieve_knowledge_base]
17599
176100
177- def delete_knowledge_base ():
178- # [START delete_knowledge_base]
101+ def cleanup ():
179102 index_client = SearchIndexClient (service_endpoint , AzureKeyCredential (key ))
180- try :
181- index_client .delete_knowledge_base (knowledge_base_name )
182- print (f"Deleted: knowledge base '{ knowledge_base_name } '" )
183- except ResourceNotFoundError :
184- print (f"Skipped: knowledge base '{ knowledge_base_name } ' not found" )
185- # [END delete_knowledge_base]
103+ index_client .delete_knowledge_base (knowledge_base_name )
104+ print (f"Deleted: knowledge base '{ knowledge_base_name } '" )
105+ index_client .delete_knowledge_source (knowledge_source_name )
106+ print (f"Deleted: knowledge source '{ knowledge_source_name } '" )
186107
187108
188109if __name__ == "__main__" :
189- create_knowledge_source ()
190- get_knowledge_source ()
191- update_knowledge_source ()
192- create_knowledge_base ()
193- get_knowledge_base ()
194- update_knowledge_base ()
110+ setup_knowledge_base ()
195111 retrieve_knowledge_base ()
196- delete_knowledge_base ()
197- delete_knowledge_source ()
112+ cleanup ()
0 commit comments