Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Nota
Questa funzionalità di recupero agente è generalmente disponibile nella versione dell'API REST 2026-04-01 tramite accesso programmatico. Il portale di Azure e il portale Foundry di Microsoft continueranno a fornire l'accesso in anteprima a tutte le funzionalità di recupero agentico. Per indicazioni sulla migrazione, vedere Eseguire la migrazione del codice di recupero agenti alla versione più recente.
In una pipeline di recupero agentico, l'azione di recupero richiama l'elaborazione parallela delle query da una Knowledge Base. È possibile chiamare l'azione di recupero direttamente usando le API REST del servizio di ricerca o un Azure SDK. Ogni Knowledge Base espone anche un endpoint MCP (Model Context Protocol) per l'utilizzo da parte di agenti compatibili con MCP.
Questo articolo illustra come chiamare entrambi i metodi di recupero con l'imposizione delle autorizzazioni facoltative e interpretare la risposta a tre livelli. Per configurare una pipeline che connette Azure AI Search al servizio Agente Foundry tramite MCP, vedere Tutorial: Creare una soluzione di recupero agentico end-to-end.
Prerequisiti
Servizio Azure AI Search con una base di conoscenza.
Autorizzazioni per eseguire query sulla Knowledge Base. Configurare l'autenticazione senza chiave con il ruolo lettore dati dell'indice di ricerca assegnato all'account utente (scelta consigliata) o usare una chiave API.
Se la knowledge base specifica un LLM, il servizio di ricerca deve avere una managed identity con permessi Utente di Servizi Cognitivi sulla risorsa Microsoft Foundry.
Pacchetto Azure.Search.Documents obbligatorio:
Per le funzionalità di anteprima del 2025-11-01, il pacchetto di anteprima più recente:
dotnet add package Azure.Search.Documents --prereleasePer le funzionalità 2026-04-01, il pacchetto stabile più recente:
dotnet add package Azure.Search.Documents
Pacchetto azure-search-documents obbligatorio:
Per le funzionalità di anteprima del 2025-11-01, il pacchetto di anteprima più recente:
pip install azure-search-documents --prePer le funzionalità 2026-04-01, il pacchetto stabile più recente:
pip install azure-search-documents
Versione dell'API REST necessaria:
Per le funzionalità di anteprima: Servizio di ricerca 2025-11-01-preview
Per le funzionalità disponibili a livello generale: Servizio di ricerca 2026-04-01
Chiamare l'azione di recupero
Specificare l'azione di recupero in una knowledge base. Il corpo della richiesta include l'input della query e un elenco facoltativo di fonti di conoscenza da destinare.
using Azure.Identity;
using Azure.Search.Documents.KnowledgeBases;
using Azure.Search.Documents.KnowledgeBases.Models;
// Create knowledge base retrieval client
var kbClient = new KnowledgeBaseRetrievalClient(
endpoint: new Uri("<YOUR SEARCH SERVICE URL>"),
knowledgeBaseName: "<YOUR KNOWLEDGE BASE NAME>",
tokenCredential: new DefaultAzureCredential()
);
var retrievalRequest = new KnowledgeBaseRetrievalRequest();
retrievalRequest.Messages.Add(
new KnowledgeBaseMessage(
content: new[] {
new KnowledgeBaseMessageTextContent(
"You can answer questions about the Earth at night. "
+ "Sources have a JSON format with a ref_id that must be cited in the answer. "
+ "If you do not have the answer, respond with 'I do not know'."
)
}
) { Role = "assistant" }
);
retrievalRequest.Messages.Add(
new KnowledgeBaseMessage(
content: new[] {
new KnowledgeBaseMessageTextContent(
"Why is the Phoenix nighttime street grid so sharply visible from space, "
+ "whereas large stretches of the interstate between midwestern cities remain comparatively dim?"
)
}
) { Role = "user" }
);
var result = await kbClient.RetrieveAsync(retrievalRequest);
Console.WriteLine(
(result.Value.Response[0].Content[0] as KnowledgeBaseMessageTextContent)!.Text
);
Reference:KnowledgeBaseRetrievalClient, KnowledgeBaseRetrievalRequest
from azure.identity import DefaultAzureCredential
from azure.search.documents.knowledgebases import KnowledgeBaseRetrievalClient
from azure.search.documents.knowledgebases.models import (
KnowledgeBaseMessage,
KnowledgeBaseMessageTextContent,
KnowledgeBaseRetrievalRequest,
SearchIndexKnowledgeSourceParams,
)
# Create knowledge base retrieval client
kb_client = KnowledgeBaseRetrievalClient(
endpoint="<YOUR SEARCH SERVICE URL>",
knowledge_base_name="<YOUR KNOWLEDGE BASE NAME>",
credential=DefaultAzureCredential(),
)
request = KnowledgeBaseRetrievalRequest(
messages=[
KnowledgeBaseMessage(
role="assistant",
content=[
KnowledgeBaseMessageTextContent(
text="You can answer questions about the Earth at night. "
"Sources have a JSON format with a ref_id that must be cited in the answer. "
"If you do not have the answer, respond with 'I do not know'."
)
],
),
KnowledgeBaseMessage(
role="user",
content=[
KnowledgeBaseMessageTextContent(
text="Why is the Phoenix nighttime street grid so sharply visible from space, "
"whereas large stretches of the interstate between midwestern cities remain comparatively dim?"
)
],
),
],
knowledge_source_params=[
SearchIndexKnowledgeSourceParams(
knowledge_source_name="earth-at-night-blob-ks",
)
],
)
result = kb_client.retrieve(retrieval_request=request)
print(result.response[0].content[0].text)
Reference:KnowledgeBaseRetrievalClient, KnowledgeBaseRetrievalRequest
@search-url = <YOUR SEARCH SERVICE URL> // Example: https://my-service.search.windows.net
@accessToken = <YOUR ACCESS TOKEN> // Run: az account get-access-token --scope https://search.azure.com/.default --query accessToken -o tsv
POST {{search-url}}/knowledgebases/{{knowledge-base-name}}/retrieve?api-version=2025-11-01-preview
Content-Type: application/json
Authorization: Bearer {{accessToken}}
{
"messages": [
{
"role": "assistant",
"content": [
{
"type": "text",
"text": "You can answer questions about the Earth at night. Sources have a JSON format with a ref_id that must be cited in the answer. If you do not have the answer, respond with 'I do not know'."
}
]
},
{
"role": "user",
"content": [
{
"type": "text",
"text": "Why is the Phoenix nighttime street grid so sharply visible from space, whereas large stretches of the interstate between midwestern cities remain comparatively dim?"
}
]
}
],
"knowledgeSourceParams": [
{
"knowledgeSourceName": "earth-at-night-blob-ks",
"kind": "searchIndex"
}
]
}
Riferimento:Recupero della Conoscenza - Recupero
Importante
La versione dell'API 2026-04-01 supporta solo l'input intents e il recupero estrattivo minimale. Le capacità di sola anteprima, tra cui l'input messages, la pianificazione delle query, la sintesi delle risposte e il ragionamento configurabile, non sono supportate. Per la funzionalità completa, usare 2025-11-01-preview.
Filtrare in fase di query (indice di ricerca)
Quando si recupera da una knowledge source dell'indice di ricerca, è possibile applicare un filtro OData al momento della query per restringere i risultati a documenti o campi specifici. L'espressione di filtro usa la sintassi OData e viene passata tramite il filterAddOn parametro .
Sintassi di filtro ed esempi
Il filterAddOn parametro accetta espressioni di filtro OData. I modelli di esempio includono:
-
Campi dei metadati:
city eq 'Phoenix',status eq 'active' -
Intervalli di date:
publishDate ge 2024-01-01 and publishDate le 2024-12-31 -
Intervalli numerici:
price ge 100 and price le 5000 -
Corrispondenza del testo:
substringof('climate', description),indexof(title, 'urgent') ge 0 -
Operatori logici:
(category eq 'News' or category eq 'Analysis') and status eq 'published'
Espressioni di filtro di esempio:
status eq 'published'created ge 2025-01-01city eq 'Redmond' and department eq 'Engineering'(priority eq 'High' or priority eq 'Critical') and resolved eq false
Esempi in base alla lingua
using Azure.Identity;
using Azure.Search.Documents.KnowledgeBases;
using Azure.Search.Documents.KnowledgeBases.Models;
var kbClient = new KnowledgeBaseRetrievalClient(
endpoint: new Uri("<YOUR SEARCH SERVICE URL>"),
knowledgeBaseName: "<YOUR KNOWLEDGE BASE NAME>",
tokenCredential: new DefaultAzureCredential()
);
var retrievalRequest = new KnowledgeBaseRetrievalRequest();
retrievalRequest.Messages.Add(
new KnowledgeBaseMessage(
content: new[] {
new KnowledgeBaseMessageTextContent(
"You are a support agent. Answer questions based on published documentation. "
+ "If you don't know the answer, say so."
)
}
) { Role = "assistant" }
);
retrievalRequest.Messages.Add(
new KnowledgeBaseMessage(
content: new[] {
new KnowledgeBaseMessageTextContent(
"What is the process for submitting an expense report?"
)
}
) { Role = "user" }
);
// Apply a filter to search only published documents
var searchIndexParams = new SearchIndexKnowledgeSourceParams(
knowledgeSourceName: "internal-documentation-ks"
);
searchIndexParams.FilterAddOn = "status eq 'published'";
retrievalRequest.KnowledgeSourceParams.Add(searchIndexParams);
var result = await kbClient.RetrieveAsync(retrievalRequest);
Console.WriteLine(
(result.Value.Response[0].Content[0] as KnowledgeBaseMessageTextContent)!.Text
);
from azure.identity import DefaultAzureCredential
from azure.search.documents.knowledgebases import KnowledgeBaseRetrievalClient
from azure.search.documents.knowledgebases.models import (
KnowledgeBaseMessage,
KnowledgeBaseMessageTextContent,
KnowledgeBaseRetrievalRequest,
SearchIndexKnowledgeSourceParams,
)
kb_client = KnowledgeBaseRetrievalClient(
endpoint="<YOUR SEARCH SERVICE URL>",
knowledge_base_name="<YOUR KNOWLEDGE BASE NAME>",
credential=DefaultAzureCredential(),
)
request = KnowledgeBaseRetrievalRequest(
messages=[
KnowledgeBaseMessage(
role="assistant",
content=[
KnowledgeBaseMessageTextContent(
text="You are a support agent. Answer questions based on published documentation. "
"If you don't know the answer, say so."
)
],
),
KnowledgeBaseMessage(
role="user",
content=[
KnowledgeBaseMessageTextContent(
text="What is the process for submitting an expense report?"
)
],
),
],
knowledge_source_params=[
SearchIndexKnowledgeSourceParams(
knowledge_source_name="internal-documentation-ks",
# Apply a filter to search only published documents
filter_add_on="status eq 'published'",
)
],
)
result = kb_client.retrieve(retrieval_request=request)
print(result.response[0].content[0].text)
POST https://<YOUR SEARCH SERVICE>.search.windows.net/knowledgebases/<YOUR KNOWLEDGE BASE NAME>/retrieve?api-version=2025-11-01-preview
Content-Type: application/json
Authorization: Bearer <YOUR ACCESS TOKEN>
{
"messages": [
{
"role": "assistant",
"content": [
{
"type": "text",
"text": "You are a support agent. Answer questions based on published documentation. If you don't know the answer, say so."
}
]
},
{
"role": "user",
"content": [
{
"type": "text",
"text": "What is the process for submitting an expense report?"
}
]
}
],
"knowledgeSourceParams": [
{
"knowledgeSourceName": "internal-documentation-ks",
"kind": "searchIndex",
"filterAddOn": "status eq 'published'"
}
]
}
Esempio di filtro multiplo
È possibile combinare più filtri per perfezionare ulteriormente i risultati:
searchIndexParams.FilterAddOn = "(status eq 'published' or status eq 'internal') and created ge 2025-01-01";
filter_add_on="(status eq 'published' or status eq 'internal') and created ge 2025-01-01"
{
"knowledgeSourceName": "internal-documentation-ks",
"kind": "searchIndex",
"filterAddOn": "(status eq 'published' or status eq 'internal') and created ge 2025-01-01"
}
Parametri della richiesta
Passa i seguenti parametri per eseguire l'azione di recupero.
| Nome | Descrizione | Digitare | Modificabile | Obbligatorio |
|---|---|---|---|---|
messages |
Contiene la cronologia della conversazione di chat inviata alla pipeline di recupero agentico. LLM determina la query dalla cronologia delle conversazioni. Il formato del messaggio è simile a Azure API OpenAI. Supportato solo se lo sforzo di ragionamento del recupero è basso o medio. | Oggetto | Sì | No |
messages.role |
Definisce la provenienza del messaggio, ad esempio assistant o user. Il modello usato determina quali ruoli sono validi. |
Stringa | Sì | No |
messages.content |
Messaggio o prompt inviato all'LLM. Deve essere testo. | Stringa | Sì | No |
knowledgeSourceParams |
Esegue l'override delle impostazioni di recupero predefinite per ogni origine delle informazioni. Utile per personalizzare la query o la risposta in fase di query. | Oggetto | Sì | No |
Recupero da un indice di ricerca
Per le fonti di conoscenza destinate a un indice di ricerca, tutti i searchable campi sono inclusi nell'ambito delle query. Il tipo di query implicito è semantice non esiste alcuna modalità di ricerca.
Se l'indice include campi vettoriali, è necessaria una definizione di vettore valida in modo che il motore di recupero agentico possa vettorizzare gli input di query. In caso contrario, i campi vettoriali vengono ignorati.
Per altre informazioni, vedere Creare un indice per il recupero agentico.
Chiamare l'endpoint MCP
MCP è un protocollo aperto che standardizza il modo in cui le applicazioni di intelligenza artificiale si connettono a origini dati e strumenti esterni.
In Azure AI Search ogni Knowledge Base è un server MCP autonomo che espone lo strumento knowledge_base_retrieve. Qualsiasi client compatibile con MCP, incluso Foundry Agent Service, GitHub Copilot, Claude e Cursor, può richiamare questo strumento per eseguire query sulla Knowledge Base.
Formato endpoint MCP
Ogni Knowledge Base ha un endpoint MCP all'URL seguente:
https://<your-service-name>.search.windows.net/knowledgebases/<your-knowledge-base-name>/mcp?api-version=<api-version>
La versione dell'API specificata determina il risultato della connessione. Con 2025-11-01-preview, la base di conoscenza può restituire risposte sintetizzate quando la base di conoscenza sottostante è configurata con un LLM e un sistema di ragionamento compatibile. Con 2026-04-01, il recupero è sempre minimo ed estratto e la connessione restituisce solo i dati di base.
Eseguire l'autenticazione all'endpoint MCP
L'endpoint MCP richiede l'autenticazione tramite intestazioni personalizzate. Sono disponibili due opzioni:
(Scelta consigliata) Passare un token di tipo bearer nell'header
Authorization. L'identità dietro il token deve avere il ruolo Lettore Dati Indice di Ricerca assegnato nel servizio di ricerca. Questo approccio evita di archiviare le chiavi nei file di configurazione. Per altre informazioni, vedere Connettere l'app a Azure AI Search usando identità.Passare una chiave amministratore nell'intestazione
api-key. Una chiave di amministrazione fornisce l'accesso in lettura/scrittura completo al servizio di ricerca, quindi usarla con cautela. Per ulteriori informazioni, vedere Connettiti ad Azure AI Search utilizzando le chiavi API.
Suggerimento
Ogni client MCP configura intestazioni personalizzate in modo diverso. Per esempio:
In Foundry Agent Service si configura l'autenticazione tramite una connessione di progetto e si aggiunge lo strumento MCP a un agente. Il servizio inserisce automaticamente le intestazioni necessarie nelle richieste MCP.
In GitHub Copilot, Claude Desktop e client simili vengono configurate le intestazioni nel file JSON del server MCP, ad esempio
mcp.json.
Applicare le autorizzazioni in fase di query
Nota
Anche se il recupero delle informazioni è disponibile a livello generale, l'imposizione delle autorizzazioni rimane in anteprima. È necessario usare la versione dell'API 2025-11-01-preview sia per la configurazione in fase di inserimento che in fase di query. Le funzionalità di anteprima vengono fornite senza un contratto di servizio e non sono consigliate per i carichi di lavoro di produzione. Per ulteriori informazioni, consultare Condizioni aggiuntive per l'utilizzo di Microsoft Azure per le anteprime.
Se le origini conoscenze contengono contenuto protetto da autorizzazioni, il motore di recupero può filtrare i risultati in modo che ogni utente visualizzi solo i documenti a cui è autorizzato ad accedere. Per abilitare il filtro, passa l'identità dell'utente finale alla richiesta di recupero. Senza il token di identità, i risultati delle fonti di conoscenza con autorizzazioni abilitate sono restituiti senza filtro.
L'applicazione delle autorizzazioni ha due parti:
Tempo di inserimento: Solo per le origini della conoscenza indicizzate, impostare
ingestionPermissionOptionsper ingerire i metadati delle autorizzazioni insieme al contenuto.Tempo di query: passare il token di accesso dell'utente nell'intestazione
x-ms-query-source-authorization.
Configurazione al momento dell'ingestione
La tabella seguente illustra le origini delle informazioni che richiedono la configurazione in fase di inserimento e il modo in cui ogni origine applica le autorizzazioni.
| Origine delle conoscenze | Richiede ingestionPermissionOptions |
Modalità di applicazione delle autorizzazioni |
|---|---|---|
| BLOB o ADLS Gen2 | ✅ | Ambiti RBAC o ACL inseriti e confrontati con l'identità dell'utente. |
| OneLake | ✅ | Ambiti RBAC o ACL ingeriti confrontati con l'identità dell'utente. |
| Indexed SharePoint | ✅ | Gli elenchi di controllo di accesso di SharePoint elaborati sono corrisposti all'identità utente. |
| Remote SharePoint | ❌ | L'API di recupero di Copilot interroga direttamente SharePoint usando il token dell'utente. |
Importante
Se ingestionPermissionOptions non è stato configurato quando è stata creata la fonte di conoscenza indicizzata, nell'indice non esistono metadati sui permessi. I risultati vengono restituiti senza filtro, indipendentemente dall'intestazione. Per risolvere questo problema, aggiorna o ricrea l'origine di conoscenza con i valori appropriati ingestionPermissionOptions e reindicizza.
Autorizzazione in fase di query
Per passare l'identità dell'utente finale, includere un token di accesso con ambito https://search.azure.com/.default nella richiesta di recupero. Questo token è separato dalle credenziali del servizio usate per accedere al servizio di ricerca. Non sono necessarie autorizzazioni del servizio di ricerca e rappresenta solo l'utente il cui accesso al contenuto viene valutato. Per ulteriori informazioni, consultare l'applicazione di ACL e RBAC durante la fase di interrogazione.
Nell'SDK di .NET passare il token come parametro xMsQuerySourceAuthorization in RetrieveAsync:
using Azure;
using Azure.Identity;
using Azure.Search.Documents.KnowledgeBases;
using Azure.Search.Documents.KnowledgeBases.Models;
// Service credential: Authenticates to the search service
var serviceCredential = new DefaultAzureCredential();
// User identity token: Represents the end user for document-level permissions filtering
var userTokenContext = new Azure.Core.TokenRequestContext(
new[] { "https://search.azure.com/.default" }
);
string userToken = (await serviceCredential.GetTokenAsync(userTokenContext)).Token;
// Create the retrieval client with the service credential
var kbClient = new KnowledgeBaseRetrievalClient(
endpoint: new Uri("<YOUR SEARCH SERVICE URL>"),
knowledgeBaseName: "<YOUR KNOWLEDGE BASE NAME>",
tokenCredential: serviceCredential
);
var request = new KnowledgeBaseRetrievalRequest();
request.Messages.Add(
new KnowledgeBaseMessage(
content: new[] {
new KnowledgeBaseMessageTextContent(
"What companies are in the financial sector?")
}
) { Role = "user" }
);
// Pass the user identity token for permissions filtering
var result = await kbClient.RetrieveAsync(
request, xMsQuerySourceAuthorization: userToken);
var text = (result.Value.Response[0].Content[0] as KnowledgeBaseMessageTextContent)!.Text;
Console.WriteLine(text);
Reference:KnowledgeBaseRetrievalClient, KnowledgeBaseRetrievalRequest
Nell'SDK di Python passare il token come parametro x_ms_query_source_authorization in retrieve:
from azure.identity import DefaultAzureCredential, get_bearer_token_provider
from azure.search.documents.knowledgebases import KnowledgeBaseRetrievalClient
from azure.search.documents.knowledgebases.models import (
KnowledgeBaseMessage, KnowledgeBaseMessageTextContent,
KnowledgeBaseRetrievalRequest,
)
# Service credential: Authenticates to the search service
service_credential = DefaultAzureCredential()
# User identity token: Represents the end user for document-level permissions filtering
user_token_provider = get_bearer_token_provider(
service_credential, "https://search.azure.com/.default")
user_token = user_token_provider()
# Create the retrieval client with the service credential
kb_client = KnowledgeBaseRetrievalClient(
endpoint="<YOUR SEARCH SERVICE URL>",
knowledge_base_name="<YOUR KNOWLEDGE BASE NAME>",
credential=service_credential,
)
request = KnowledgeBaseRetrievalRequest(
messages=[
KnowledgeBaseMessage(
role="user",
content=[KnowledgeBaseMessageTextContent(
text="What companies are in the financial sector?")],
)
]
)
# Pass the user identity token for permissions filtering
result = kb_client.retrieve(
retrieval_request=request, x_ms_query_source_authorization=user_token)
print(result.response[0].content[0].text)
Reference:KnowledgeBaseRetrievalClient, KnowledgeBaseRetrievalRequest
Nell'API REST includere l'intestazione x-ms-query-source-authorization con il token di accesso dell'utente:
@search-url = <YOUR SEARCH SERVICE URL>
@accessToken = <YOUR ACCESS TOKEN> // Service credential
@userAccessToken = <USER ACCESS TOKEN> // User identity token
POST {{search-url}}/knowledgebases/{{knowledge-base-name}}/retrieve?api-version=2025-11-01-preview
Authorization: Bearer {{accessToken}}
Content-Type: application/json
x-ms-query-source-authorization: {{userAccessToken}}
{
"messages": [
{
"role": "user",
"content": [
{
"type": "text",
"text": "What companies are in the financial sector?"
}
]
}
]
}
Riferimento:Recupero della Conoscenza - Recupero
Esaminare la risposta
Un recupero eseguito con successo restituisce un codice di stato 200 OK. Se la Knowledge Base non riesce a recuperare da una o più origini informazioni, il servizio restituisce un 206 Partial Content codice di stato. La risposta include solo i risultati delle fonti di successo. I dettagli sulla risposta parziale vengono visualizzati come errori nella matrice di attività.
L'azione di recupero restituisce tre componenti principali:
- Risposta estratta o risposta sintetizzata (a seconda della modalità di output)
- Matrice di attività
- Matrice riferimenti
Risposta estratta
La risposta estratta è una singola stringa unificata che in genere viene passata a un LLM. LLM utilizza la stringa come dati di base e la usa per formulare una risposta. La chiamata all'API all'LLM include la stringa unificata e le istruzioni per il modello, ad esempio se usare il contesto esclusivamente o come supplemento.
Il corpo della risposta è strutturato nel formato dello stile del messaggio della chat e il contenuto viene serializzato IN FORMATO JSON.
"response": [
{
"role": "assistant",
"content": [
{
"type": "text",
"text": "[{\"ref_id\":\"0\",\"title\":\"Urban Structure\",\"terms\":\"Location of Phoenix, Grid of City Blocks, Phoenix Metropolitan Area at Night\",\"content\":\"<content chunk redacted>\"}]"
}
]
}
]
Punti chiave:
content.typeha un valore valido:text.content.textè una stringa con codifica JSON contenente i documenti più rilevanti (o blocchi) trovati nell'indice di ricerca, in base agli input della query e della cronologia delle chat. Questa stringa è i dati di base usati da un LLM per formulare una risposta alla domanda dell'utente.Questa parte della risposta è costituita da 200 blocchi o meno, escludendo eventuali risultati che non soddisfano la soglia minima di un punteggio di 2,5 reranker.
La stringa inizia con l'ID di riferimento del blocco (usato per scopi di citazione) ed eventuali campi specificati nella configurazione semantica dell'indice di destinazione. In questo esempio si supponga che la configurazione semantica nell'indice di destinazione abbia un campo "title", un campo "terms" e un campo "content".
La
maxOutputSizeInTokensproprietà (maxOutputSizein 2025-11-01-preview) nella richiesta di recupero determina la lunghezza della stringa.Importante
Un documento che supera il
maxOutputSizeInTokensbudget di output può essere omesso automaticamente dalla risposta senza alcun avviso. Per altre informazioni, vedere Risolvere i problemi relativi alle risposte vuote.
Matrice di attività
La matrice di attività restituisce il piano di query, che fornisce trasparenza operativa per tenere traccia delle operazioni, delle implicazioni di fatturazione e delle chiamate alle risorse. Include anche le sottoquery inviate alla pipeline di recupero e gli errori per eventuali guasti di recupero, ad esempio fonti di conoscenza inaccessibili.
L'output include i componenti seguenti:
| Sezione | Descrizione |
|---|---|
| modelQueryPlanning | Per le knowledge base che usano un LLM per la pianificazione delle query, in questa sezione vengono riportati i conteggi dei token usati per l'input e il numero di token per le sottoquery. |
| attività specifica dell'origine | Per ogni fonte di conoscenza inclusa nella query, in questa sezione viene riportato il tempo trascorso e gli argomenti usati nella query, incluso il ranker semantico. I tipi di origine delle informazioni includono searchIndex, azureBlobe altre origini di conoscenza supportate. |
| ragionamento agente | In questa sezione viene riportato il consumo di token per il ragionamento agentico durante il recupero, che dipende dall'impegno di ragionamento del recupero specificato. |
| modelAnswerSynthesis | Per le knowledge base che usano la sintesi delle risposte, questa sezione riporta il numero di token per la simulazione della risposta e il numero di token dell'output della risposta. |
Nota
Le modelQueryPlanning sezioni e modelAnswerSynthesis non vengono visualizzate nella matrice di attività 2026-04-01 perché la pianificazione delle query e la sintesi delle risposte sono funzionalità di sola anteprima. Per l'output completo dell'attività, usare 2025-11-01-preview.
Ecco un esempio della matrice di attività:
"activity": [
{
"type": "modelQueryPlanning",
"id": 0,
"inputTokens": 2302,
"outputTokens": 109,
"elapsedMs": 2396
},
{
"type": "searchIndex",
"id": 1,
"knowledgeSourceName": "demo-financials-ks",
"queryTime": "2025-11-04T19:25:23.683Z",
"count": 26,
"elapsedMs": 1137,
"searchIndexArguments": {
"search": "List of companies in the financial sector according to SEC GICS classification",
"filter": null,
"sourceDataFields": [ ],
"searchFields": [ ],
"semanticConfigurationName": "en-semantic-config"
}
},
{
"type": "searchIndex",
"id": 2,
"knowledgeSourceName": "demo-healthcare-ks",
"queryTime": "2025-11-04T19:25:24.186Z",
"count": 17,
"elapsedMs": 494,
"searchIndexArguments": {
"search": "List of companies in the financial sector according to SEC GICS classification",
"filter": null,
"sourceDataFields": [ ],
"searchFields": [ ],
"semanticConfigurationName": "en-semantic-config"
}
},
{
"type": "agenticReasoning",
"id": 3,
"retrievalReasoningEffort": {
"kind": "low"
},
"reasoningTokens": 103368
},
{
"type": "modelAnswerSynthesis",
"id": 4,
"inputTokens": 5821,
"outputTokens": 344,
"elapsedMs": 3837
}
]
Array di riferimenti
La matrice di riferimenti proviene direttamente dai dati di terra sottostanti. Include l'oggetto sourceData usato per generare la risposta ed è costituito da ogni documento che il motore di recupero agentica trova e classifica semanticamente. I campi nell'oggetto sourceData includono un campo id e campi semantici: title, terms, e content.
funge id da ID riferimento per un elemento all'interno di una risposta specifica. Non è la chiave del documento nell'indice di ricerca. Lo usi per fornire citazioni. Il activitySource campo fa riferimento incrociato alla id voce dell'attività che ha prodotto il riferimento, utile per il collegamento di citazione.
Ecco un esempio della matrice di riferimenti:
"references": [
{
"type": "searchIndex",
"id": "0",
"activitySource": 2,
"docKey": "earth_at_night_508_page_104_verbalized",
"sourceData": null
},
{
"type": "searchIndex",
"id": "1",
"activitySource": 2,
"docKey": "earth_at_night_508_page_105_verbalized",
"sourceData": null
}
]
Esempi
Gli esempi seguenti illustrano diversi modi per chiamare l'azione di recupero usando la versione dell'API 2025-11-01-preview, che supporta il set di funzionalità completo, inclusa la sintesi delle risposte e un lavoro di ragionamento configurabile. Per l'utilizzo 2026-04-01, vedere le sezioni precedenti.
- Eseguire l'override del ragionamento predefinito e impostare i limiti delle richieste
- Impostare i riferimenti per ogni origine delle informazioni
- Usare uno sforzo minimo di ragionamento
Eseguire l'override del ragionamento predefinito e impostare i limiti delle richieste
In questo esempio viene specificata la sintesi delle risposte, pertanto l'impegno di ragionamento del recupero deve essere basso o medio.
var retrievalRequest = new KnowledgeBaseRetrievalRequest();
retrievalRequest.Messages.Add(
new KnowledgeBaseMessage(
content: new[] {
new KnowledgeBaseMessageTextContent("What companies are in the financial sector?")
}
) { Role = "user" }
);
retrievalRequest.RetrievalReasoningEffort = new KnowledgeRetrievalLowReasoningEffort();
retrievalRequest.OutputMode = "answerSynthesis";
retrievalRequest.MaxRuntimeInSeconds = 30;
retrievalRequest.MaxOutputSize = 6000;
var result = await kbClient.RetrieveAsync(retrievalRequest);
Console.WriteLine(
(result.Value.Response[0].Content[0] as KnowledgeBaseMessageTextContent)!.Text
);
Reference:KnowledgeBaseRetrievalClient, KnowledgeBaseRetrievalRequest
from azure.search.documents.knowledgebases.models import KnowledgeRetrievalLowReasoningEffort
request = KnowledgeBaseRetrievalRequest(
messages=[
KnowledgeBaseMessage(
role="user",
content=[KnowledgeBaseMessageTextContent(text="What companies are in the financial sector?")],
)
],
retrieval_reasoning_effort=KnowledgeRetrievalLowReasoningEffort(),
output_mode="answerSynthesis",
max_runtime_in_seconds=30,
max_output_size=6000,
)
result = kb_client.retrieve(retrieval_request=request)
print(result.response[0].content[0].text)
Reference:KnowledgeBaseRetrievalClient, KnowledgeBaseRetrievalRequest
POST {{search-url}}/knowledgebases/kb-override/retrieve?api-version=2025-11-01-preview
Authorization: Bearer {{accessToken}}
Content-Type: application/json
{
"messages": [
{
"role": "user",
"content": [
{ "type": "text", "text": "What companies are in the financial sector?" }
]
}
],
"retrievalReasoningEffort": { "kind": "low" },
"outputMode": "answerSynthesis",
"maxRuntimeInSeconds": 30,
"maxOutputSize": 6000
}
Riferimento:Recupero della Conoscenza - Recupero
Impostare i riferimenti per ogni origine delle informazioni
In questo esempio viene utilizzato lo sforzo di ragionamento predefinito specificato nella base di conoscenza. L'obiettivo di questo esempio è la specifica della quantità di informazioni da includere nella risposta.
var retrievalRequest = new KnowledgeBaseRetrievalRequest();
retrievalRequest.Messages.Add(
new KnowledgeBaseMessage(
content: new[] {
new KnowledgeBaseMessageTextContent("What companies are in the financial sector?")
}
) { Role = "user" }
);
retrievalRequest.IncludeActivity = true;
retrievalRequest.KnowledgeSourceParams.Add(
new SearchIndexKnowledgeSourceParams("demo-financials-ks")
{
IncludeReferences = true,
IncludeReferenceSourceData = true
}
);
retrievalRequest.KnowledgeSourceParams.Add(
new SearchIndexKnowledgeSourceParams("demo-communicationservices-ks")
{
IncludeReferences = false,
IncludeReferenceSourceData = false
}
);
retrievalRequest.KnowledgeSourceParams.Add(
new SearchIndexKnowledgeSourceParams("demo-healthcare-ks")
{
IncludeReferences = true,
IncludeReferenceSourceData = false,
AlwaysQuerySource = true
}
);
var result = await kbClient.RetrieveAsync(retrievalRequest);
Console.WriteLine(
(result.Value.Response[0].Content[0] as KnowledgeBaseMessageTextContent)!.Text
);
Reference:KnowledgeBaseRetrievalClient, KnowledgeBaseRetrievalRequest
from azure.search.documents.knowledgebases.models import SearchIndexKnowledgeSourceParams
request = KnowledgeBaseRetrievalRequest(
messages=[
KnowledgeBaseMessage(
role="user",
content=[KnowledgeBaseMessageTextContent(text="What companies are in the financial sector?")],
)
],
include_activity=True,
knowledge_source_params=[
SearchIndexKnowledgeSourceParams(
knowledge_source_name="demo-financials-ks",
include_references=True,
include_reference_source_data=True,
),
SearchIndexKnowledgeSourceParams(
knowledge_source_name="demo-communicationservices-ks",
include_references=False,
include_reference_source_data=False,
),
SearchIndexKnowledgeSourceParams(
knowledge_source_name="demo-healthcare-ks",
include_references=True,
include_reference_source_data=False,
always_query_source=True,
),
],
)
result = kb_client.retrieve(retrieval_request=request)
print(result.response[0].content[0].text)
Reference:KnowledgeBaseRetrievalClient, SearchIndexKnowledgeSourceParams
POST {{search-url}}/knowledgebases/kb-medium-example/retrieve?api-version=2025-11-01-preview
Authorization: Bearer {{accessToken}}
Content-Type: application/json
{
"messages": [
{
"role": "user",
"content": [
{ "type": "text", "text": "What companies are in the financial sector?" }
]
}
],
"includeActivity": true,
"knowledgeSourceParams": [
{
"knowledgeSourceName": "demo-financials-ks",
"kind": "searchIndex",
"includeReferences": true,
"includeReferenceSourceData": true
},
{
"knowledgeSourceName": "demo-communicationservices-ks",
"kind": "searchIndex",
"includeReferences": false,
"includeReferenceSourceData": false
},
{
"knowledgeSourceName": "demo-healthcare-ks",
"kind": "searchIndex",
"includeReferences": true,
"includeReferenceSourceData": false,
"alwaysQuerySource": true
}
]
}
Riferimento:Recupero della Conoscenza - Recupero
Nota
Per origini di informazioni indicizzate di OneLake o di SharePoint, impostare includeReferenceSourceData su true per includere gli URL dei documenti di origine nelle citazioni.
Usare uno sforzo minimo di ragionamento
In questo esempio non esiste alcun LLM per la pianificazione intelligente delle query o la sintesi delle risposte. La stringa di query passa al motore di recupero agentico per la ricerca di parole chiave o la ricerca ibrida.
var retrievalRequest = new KnowledgeBaseRetrievalRequest();
retrievalRequest.Intents.Add(
new KnowledgeRetrievalSemanticIntent("what is a brokerage")
);
var result = await kbClient.RetrieveAsync(retrievalRequest);
Console.WriteLine(
(result.Value.Response[0].Content[0] as KnowledgeBaseMessageTextContent)!.Text
);
Reference:KnowledgeBaseRetrievalClient, KnowledgeBaseRetrievalRequest
from azure.search.documents.knowledgebases.models import (
KnowledgeBaseRetrievalRequest,
KnowledgeRetrievalSemanticIntent,
)
request = KnowledgeBaseRetrievalRequest(
intents=[
KnowledgeRetrievalSemanticIntent(
search="what is a brokerage",
)
]
)
result = kb_client.retrieve(retrieval_request=request)
print(result.response[0].content[0].text)
Reference:KnowledgeBaseRetrievalClient, KnowledgeBaseRetrievalRequest
POST {{search-url}}/knowledgebases/kb-minimal/retrieve?api-version=2025-11-01-preview
Authorization: Bearer {{accessToken}}
Content-Type: application/json
{
"intents": [
{
"type": "semantic",
"search": "what is a brokerage"
}
]
}
Riferimento:Recupero della Conoscenza - Recupero
Risolvere i problemi relativi alle risposte vuote
È possibile trovare un documento durante il passaggio di ricerca, ma può comunque essere omesso dalla risposta finale se il contenuto di base supera il budget di output maxOutputSizeInTokens (budget di output maxOutputSize nel 2025-11-01-preview). In questo caso, l'array delle attività indica che sono state trovate corrispondenze, ma l'array dei riferimenti e il contenuto della risposta consolidato sono vuoti per quel documento. Non viene restituito alcun avviso di troncamento o errore esplicito.
Per evitare questo comportamento, indicizzare documenti di origine di grandi dimensioni come blocchi più piccoli con identificatori stabili e metadati di origine. Questo vale soprattutto per i manuali lunghi, i criteri o gli articoli della Knowledge Base.
Contenuto correlato
- recupero agentico in Azure AI Search
- Applicazione dell'ACL in fase di query e controllo degli accessi in base al ruolo
- Usare un indicizzatore BLOB o un'origine di conoscenza per inserire i metadati degli ambiti di controllo degli accessi in base al ruolo
- Agentic RAG: Creare un motore di recupero di ragionamento con Azure AI Search (video di YouTube)
- demo Azure OpenAI con recupero agente