Skip to content

Commit 45f0098

Browse files
committed
agentic-search-rest-python
1 parent d5b24ec commit 45f0098

File tree

4 files changed

+149
-175
lines changed

4 files changed

+149
-175
lines changed

articles/search/includes/quickstarts/agentic-retrieval-python.md

Lines changed: 55 additions & 91 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ author: haileytap
44
ms.author: haileytapia
55
ms.service: azure-ai-search
66
ms.topic: include
7-
ms.date: 05/30/2025
7+
ms.date: 6/13/2025
88
---
99

1010
[!INCLUDE [Feature preview](../previews/preview-generic.md)]
@@ -21,101 +21,35 @@ This quickstart is based on the [Quickstart-Agentic-Retrieval](https://github.co
2121

2222
+ An [Azure AI Search service](../../search-create-service-portal.md) on the Basic tier or higher with [semantic ranker enabled](../../semantic-how-to-enable-disable.md).
2323

24-
+ An [Azure OpenAI resource](/azure/ai-services/openai/how-to/create-resource).
24+
+ An [Azure AI Foundry resource](/azure/ai-services/openai/how-to/create-resource).
2525

2626
+ [Visual Studio Code](https://code.visualstudio.com/download) with the [Python extension](https://marketplace.visualstudio.com/items?itemName=ms-python.python) and [Jupyter package](https://pypi.org/project/jupyter/).
2727

28-
## Deploy models
28+
+ Install the [Azure CLI](/cli/azure/install-azure-cli) used for keyless authentication with Microsoft Entra ID.
2929

30-
To run agentic retrieval, you must deploy the following models to your Azure OpenAI resource:
31-
32-
+ An LLM for query planning.
33-
34-
+ An LLM for answer generation.
35-
36-
+ (Optional) An embedding model for vector queries.
37-
38-
Agentic retrieval [supports several models](../../search-agentic-retrieval-how-to-create.md#supported-models), but this quickstart assumes `gpt-4o-mini` for both LLMs and `text-embedding-3-large` for the embedding model.
39-
40-
To deploy the Azure OpenAI models:
41-
42-
1. Sign in to the [Azure AI Foundry portal](https://ai.azure.com/?cid=learnDocs) and select your Azure OpenAI resource.
43-
44-
1. From the left pane, select **Model catalog**.
45-
46-
1. Select **gpt-4o-mini**, and then select **Use this model**.
47-
48-
1. Specify a deployment name. To simplify your code, we recommend **gpt-4o-mini**.
49-
50-
1. Accept the defaults.
51-
52-
1. Select **Deploy**.
53-
54-
1. Repeat the previous steps for **text-embedding-3-large**.
55-
56-
## Configure role-based access
57-
58-
Azure AI Search needs access to your Azure OpenAI models. For this task, you can use API keys or Microsoft Entra ID with role assignments. Keys are easier to start with, but roles are more secure. This quickstart assumes roles.
59-
60-
To configure the recommended role-based access:
61-
62-
1. Sign in to the [Azure portal](https://portal.azure.com/).
63-
64-
1. [Enable role-based access](../../search-security-enable-roles.md) on your Azure AI Search service.
65-
66-
1. [Create a system-assigned managed identity](../../search-howto-managed-identities-data-sources.md#create-a-system-managed-identity) on your Azure AI Search service.
67-
68-
1. On your Azure AI Search service, [assign the following roles](../../search-security-rbac.md#how-to-assign-roles-in-the-azure-portal) to yourself.
69-
70-
+ **Search Service Contributor**
71-
72-
+ **Search Index Data Contributor**
73-
74-
+ **Search Index Data Reader**
75-
76-
1. On your Azure OpenAI resource, assign **Cognitive Services User** to the managed identity of your search service.
77-
78-
## Get endpoints
79-
80-
In your code, you specify the following endpoints to establish connections with Azure AI Search and Azure OpenAI. These steps assume that you configured role-based access in the previous section.
81-
82-
To obtain your service endpoints:
83-
84-
1. Sign in to the [Azure portal](https://portal.azure.com/).
85-
86-
1. On your Azure AI Search service:
87-
88-
1. From the left pane, select **Overview**.
89-
90-
1. Copy the URL, which should be similar to `https://my-service.search.windows.net`.
91-
92-
1. On your Azure OpenAI resource:
93-
94-
1. From the left pane, select **Resource Management** > **Keys and Endpoint**.
95-
96-
1. Copy the URL, which should be similar to `https://my-resource.openai.azure.com`.
30+
[!INCLUDE [Setup](./agentic-retrieval-setup.md)]
9731

9832
## Connect from your local system
9933

100-
You configured role-based access to interact with Azure AI Search and Azure OpenAI. From the command line, use the Azure CLI to sign in to the same subscription and tenant for both services. For more information, see [Quickstart: Connect without keys](../../search-get-started-rbac.md).
34+
You configured role-based access to interact with Azure AI Search and Azure OpenAI.
10135

102-
```azurecli
103-
az account show
36+
Run the following Azure CLI command and sign in with your Azure account. If you have multiple subscriptions, select the one that contains your Azure AI Search service and Azure AI Foundry project.
10437

105-
az account set --subscription <PUT YOUR SUBSCRIPTION ID HERE>
106-
107-
az login --tenant <PUT YOUR TENANT ID HERE>
38+
```azurecli
39+
az login
10840
```
10941

42+
For more information, see [Quickstart: Connect without keys](../../search-get-started-rbac.md).
43+
11044
## Install packages and load connections
11145

11246
Before you run any code, install Python packages and define credentials, endpoints, and deployment details for connections to Azure AI Search and Azure OpenAI. These values are used in subsequent operations.
11347

11448
To install the packages and load the connections:
11549

116-
1. In Visual Studio Code, create a `.ipynb` file.
50+
1. Open Visual Studio Code and create a `.ipynb` file. For example, you can name the file `quickstart-agentic-retrieval.ipynb`.
11751

118-
1. Install the following packages.
52+
1. In the first code cell, paste the following code to install the required packages.
11953

12054
```Python
12155
! pip install azure-search-documents==11.6.0b12 --quiet
@@ -126,7 +60,9 @@ To install the packages and load the connections:
12660
! pip install requests --quiet
12761
```
12862

129-
1. In another code cell, paste the following import statements and variables.
63+
You can run this cell by selecting the **Run Cell** button or pressing `Shift+Enter`.
64+
65+
1. Add another code cell and paste the following import statements and variables.
13066

13167
```Python
13268
from azure.identity import DefaultAzureCredential, get_bearer_token_provider
@@ -135,26 +71,28 @@ To install the packages and load the connections:
13571
endpoint = "PUT YOUR SEARCH SERVICE ENDPOINT HERE"
13672
credential = DefaultAzureCredential()
13773
token_provider = get_bearer_token_provider(credential, "https://search.azure.com/.default")
138-
azure_openai_endpoint = "PUT YOUR AZURE OPENAI ENDPOINT HERE"
139-
azure_openai_gpt_deployment = "gpt-4o-mini"
140-
azure_openai_gpt_model = "gpt-4o-mini"
74+
azure_openai_endpoint = "PUT YOUR AZURE AI FOUNDRY ENDPOINT HERE"
75+
azure_openai_gpt_deployment = "gpt-4.1-mini"
76+
azure_openai_gpt_model = "gpt-4.1-mini"
14177
azure_openai_api_version = "2025-03-01-preview"
14278
azure_openai_embedding_deployment = "text-embedding-3-large"
14379
azure_openai_embedding_model = "text-embedding-3-large"
14480
index_name = "earth_at_night"
14581
agent_name = "earth-search-agent"
146-
answer_model = "gpt-4o-mini"
82+
answer_model = "gpt-4.1-mini"
14783
api_version = "2025-05-01-Preview"
14884
```
14985

150-
1. Replace `endpoint` and `azure_openai_endpoint` with the values you obtained in [Get endpoints](#get-endpoints).
86+
1. Replace `endpoint` and `azure_openai_endpoint` with the values you obtained in [Get endpoints](#get-endpoints). Set `endpoint` to your Azure AI Search service endpoint, which looks like `https://<your-search-service-name>.search.windows.net`, and `azure_openai_endpoint` to your Azure AI Foundry endpoint, which looks like `https://<your-foundry-resource-name>.openai.azure.com`.
15187

15288
1. To verify the variables, run the code cell.
15389

15490
## Create a search index
15591

15692
In Azure AI Search, an index is a structured collection of data. The following code defines an index named `earth_at_night`, which you specified using the `index_name` variable in the previous section.
15793

94+
Add and run a new code cell in the `quickstart-agentic-retrieval.ipynb` notebook with the following code:
95+
15896
```Python
15997
from azure.search.documents.indexes.models import SearchIndex, SearchField, VectorSearch, VectorSearchProfile, HnswAlgorithmConfiguration, AzureOpenAIVectorizer, AzureOpenAIVectorizerParameters, SemanticSearch, SemanticConfiguration, SemanticPrioritizedFields, SemanticField
16098
from azure.search.documents.indexes import SearchIndexClient
@@ -215,6 +153,8 @@ The index schema contains fields for document identification and page content, e
215153

216154
Currently, the `earth_at_night` index is empty. Run the following code to populate the index with JSON documents from NASA's Earth at Night e-book. As required by Azure AI Search, each document conforms to the fields and data types defined in the index schema.
217155

156+
Add and run a new code cell in the `quickstart-agentic-retrieval.ipynb` notebook with the following code:
157+
218158
```Python
219159
from azure.search.documents import SearchIndexingBufferedSender
220160
import requests
@@ -230,10 +170,12 @@ print(f"Documents uploaded to index '{index_name}'")
230170

231171
## Create a knowledge agent
232172

233-
To connect Azure AI Search to your `gpt-4o-mini` deployment and target the `earth_at_night` index at query time, you need a knowledge agent. The following code defines a knowledge agent named `earth-search-agent`, which you specified using the `agent_name` variable in a previous section.
173+
To connect Azure AI Search to your `gpt-4.1-mini` deployment and target the `earth_at_night` index at query time, you need a knowledge agent. The following code defines a knowledge agent named `earth-search-agent`, which you specified using the `agent_name` variable in a previous section.
234174

235175
To ensure relevant and semantically meaningful responses, `default_reranker_threshold` is set to exclude responses with a reranker score of `2.5` or lower.
236176

177+
Add and run a new code cell in the `quickstart-agentic-retrieval.ipynb` notebook with the following code:
178+
237179
```Python
238180
from azure.search.documents.indexes.models import KnowledgeAgent, KnowledgeAgentAzureOpenAIModel, KnowledgeAgentTargetIndex, KnowledgeAgentRequestLimits, AzureOpenAIVectorizerParameters
239181

@@ -266,6 +208,8 @@ The next step is to define the knowledge agent instructions and conversation con
266208

267209
For now, create the following assistant message, which instructs `earth-search-agent` to answer questions about the Earth at night, cite sources using their `ref_id`, and respond with "I don't know" when answers are unavailable.
268210

211+
Add and run a new code cell in the `quickstart-agentic-retrieval.ipynb` notebook with the following code:
212+
269213
```Python
270214
instructions = """
271215
An Q&A agent that can answer questions about the Earth at night.
@@ -287,6 +231,8 @@ You're ready to initiate the agentic retrieval pipeline. The input for this pipe
287231

288232
The following code sends a two-part user query to `earth-search-agent`, which deconstructs the query into subqueries, runs the subqueries against both text fields and vector embeddings in the `earth_at_night` index, and ranks and merges the results. The response is then appended to the `messages` array.
289233

234+
Add and run a new code cell in the `quickstart-agentic-retrieval.ipynb` notebook with the following code:
235+
290236
```Python
291237
from azure.search.documents.agent import KnowledgeAgentRetrievalClient
292238
from azure.search.documents.agent.models import KnowledgeAgentRetrievalRequest, KnowledgeAgentMessage, KnowledgeAgentMessageTextContent, KnowledgeAgentIndexParams
@@ -315,7 +261,9 @@ messages.append({
315261

316262
### Review the response, activity, and results
317263

318-
To output the response, activity, and results of the retrieval pipeline, run the following code.
264+
Now you want to display the response, activity, and results of the retrieval pipeline.
265+
266+
Add and run a new code cell in the `quickstart-agentic-retrieval.ipynb` notebook with the following code:
319267

320268
```Python
321269
import textwrap
@@ -335,7 +283,7 @@ The output should be similar to the following example, where:
335283

336284
+ `Response` provides a text string of the most relevant documents (or chunks) in the search index based on the user query. As shown later in this quickstart, you can pass this string to an LLM for answer generation.
337285

338-
+ `Activity` tracks the steps that were taken during the retrieval process, including the subqueries generated by your `gpt-4o-mini` deployment and the tokens used for query planning and execution.
286+
+ `Activity` tracks the steps that were taken during the retrieval process, including the subqueries generated by your `gpt-4.1-mini` deployment and the tokens used for query planning and execution.
339287

340288
+ `Results` lists the documents that contributed to the response, each one identified by their `doc_key`.
341289

@@ -391,7 +339,9 @@ Results
391339

392340
## Create the Azure OpenAI client
393341

394-
To extend the retrieval pipeline from answer *extraction* to answer *generation*, set up the Azure OpenAI client to interact with your `gpt-4o-mini` deployment, which you specified using the `answer_model` variable in a previous section.
342+
To extend the retrieval pipeline from answer *extraction* to answer *generation*, set up the Azure OpenAI client to interact with your `gpt-4.1-mini` deployment, which you specified using the `answer_model` variable in a previous section.
343+
344+
Add and run a new code cell in the `quickstart-agentic-retrieval.ipynb` notebook with the following code:
395345

396346
```Python
397347
from openai import AzureOpenAI
@@ -407,7 +357,9 @@ client = AzureOpenAI(
407357

408358
### Use the Responses API to generate an answer
409359

410-
You can now use the Responses API to generate a detailed answer based on the indexed documents. The following code sends the `messages` array, which contains the conversation history, to your `gpt-4o-mini` deployment.
360+
You can now use the Responses API to generate a detailed answer based on the indexed documents. The following code sends the `messages` array, which contains the conversation history, to your `gpt-4.1-mini` deployment.
361+
362+
Add and run a new code cell in the `quickstart-agentic-retrieval.ipynb` notebook with the following code:
411363

412364
```Python
413365
response = client.responses.create(
@@ -419,7 +371,7 @@ wrapped = textwrap.fill(response.output_text, width=100)
419371
print(wrapped)
420372
```
421373

422-
The output should be similar to the following example, which uses the reasoning capabilities of `gpt-4o-mini` to provide contextually relevant answers.
374+
The output should be similar to the following example, which uses the reasoning capabilities of `gpt-4.1-mini` to provide contextually relevant answers.
423375

424376
```
425377
Suburban belts often exhibit larger December brightening than urban cores primarily because of the type of development and light distribution in those areas. Suburbs tend to have more uniform and expansive lighting, making them more visible in nighttime satellite images. In contrast, urban cores, although having higher absolute light levels, often contain dense building clusters that can cause light to be obscured or concentrated in smaller areas, leading to less visible brightening when viewed from space. Regarding the visibility of the Phoenix nighttime street grid from space, it is attributed to the city's grid layout and the intensity of its street lighting. The grid pattern of the streets and the significant development around them create a stark contrast against less developed areas. Conversely, large stretches of interstate in the Midwest may remain dimmer due to fewer densely populated structures and less intensive street lighting, resulting in less illumination overall. For more detailed insights, you can refer to the sources: [0] and [1].
@@ -429,6 +381,8 @@ Suburban belts often exhibit larger December brightening than urban cores primar
429381

430382
Alternatively, you can use the Chat Completions API for answer generation.
431383

384+
Add and run a new code cell in the `quickstart-agentic-retrieval.ipynb` notebook with the following code:
385+
432386
```Python
433387
response = client.chat.completions.create(
434388
model=answer_model,
@@ -449,6 +403,8 @@ Suburban belts tend to display larger December brightening than urban cores, des
449403

450404
Continue the conversation by sending another user query to `earth-search-agent`. The following code reruns the retrieval pipeline, fetching relevant content from the `earth_at_night` index and appending the response to the `messages` array. However, unlike before, you can now use the Azure OpenAI client to generate an answer based on the retrieved content.
451405

406+
Add and run a new code cell in the `quickstart-agentic-retrieval.ipynb` notebook with the following code:
407+
452408
```Python
453409
messages.append({
454410
"role": "user",
@@ -469,7 +425,9 @@ messages.append({
469425

470426
### Review the new response, activity, and results
471427

472-
To output the latest response, activity, and results of the retrieval pipeline, run the following code.
428+
Now you want to display the response, activity, and results of the retrieval pipeline.
429+
430+
Add and run a new code cell in the `quickstart-agentic-retrieval.ipynb` notebook with the following code:
473431

474432
```Python
475433
import textwrap
@@ -489,6 +447,8 @@ print(json.dumps([r.as_dict() for r in retrieval_result.references], indent=2))
489447

490448
Now that you've sent multiple user queries, use the Responses API to generate an answer based on the indexed documents and conversation history, which is captured in the `messages` array.
491449

450+
Add and run a new code cell in the `quickstart-agentic-retrieval.ipynb` notebook with the following code:
451+
492452
```Python
493453
response = client.responses.create(
494454
model=answer_model,
@@ -513,6 +473,8 @@ In the Azure portal, you can find and manage resources by selecting **All resour
513473

514474
### Delete the knowledge agent
515475

476+
Add and run a new code cell in the `quickstart-agentic-retrieval.ipynb` notebook with the following code:
477+
516478
```Python
517479
index_client = SearchIndexClient(endpoint=endpoint, credential=credential)
518480
index_client.delete_agent(agent_name)
@@ -521,6 +483,8 @@ print(f"Knowledge agent '{agent_name}' deleted successfully")
521483

522484
### Delete the search index
523485

486+
Add and run a new code cell in the `quickstart-agentic-retrieval.ipynb` notebook with the following code:
487+
524488
```Python
525489
index_client = SearchIndexClient(endpoint=endpoint, credential=credential)
526490
index_client.delete_index(index_name)

0 commit comments

Comments
 (0)