Skip to content

Commit 81a96af

Browse files
hizixinCopilot
andauthored
[Search] Refresh azure-search-documents samples for 2026-04-01 GA (#46677)
- Add sample_knowledge_source_crud(.py/_async.py) and sample_knowledge_base_crud(.py/_async.py) as CRUD reference samples. - Refocus sample_agentic_retrieval(.py/_async.py) on the end-to-end retrieval flow (setup KS+KB, retrieve, cleanup) and cross-reference the CRUD samples for full lifecycle coverage. - Unify sample resource naming on the hotels-sample-* convention across alias, vector profile/HNSW configs, KS, KB, semantic config, and indexer data source samples. - Fix sample_query_vector(.py/_async.py) post-upload race by polling get_document_count before issuing the first query. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
1 parent a4541c2 commit 81a96af

12 files changed

Lines changed: 610 additions & 249 deletions

sdk/search/azure-search-documents/samples/sample_agentic_retrieval.py

Lines changed: 18 additions & 103 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,13 @@
77

88
"""
99
DESCRIPTION:
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
1318
USAGE:
1419
python sample_agentic_retrieval.py
@@ -24,18 +29,15 @@
2429
import os
2530

2631
from azure.core.credentials import AzureKeyCredential
27-
from azure.core.exceptions import ResourceNotFoundError
2832
from azure.search.documents.indexes import SearchIndexClient
2933
from azure.search.documents.knowledgebases import KnowledgeBaseRetrievalClient
3034
from azure.search.documents.knowledgebases.models import (
3135
KnowledgeBaseRetrievalRequest,
3236
KnowledgeRetrievalSemanticIntent,
33-
KnowledgeRetrievalMinimalReasoningEffort,
3437
)
3538
from azure.search.documents.indexes.models import (
3639
KnowledgeBase,
3740
KnowledgeSourceReference,
38-
SearchIndexFieldReference,
3941
SearchIndexKnowledgeSource,
4042
SearchIndexKnowledgeSourceParameters,
4143
)
@@ -48,111 +50,35 @@
4850
knowledge_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

14671
def 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

188109
if __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

Comments
 (0)