Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Opmerking
Azure AI Zoeken is beschikbaar via de Azure-portal, REST API's en Azure-SDK's. Het vormt ook een basis voor Foundry IQ, de beheerde kennislaag die bedrijfsinhoud transformeert in herbruikbare, machtigingsbewuste knowledge bases voor agents in de Microsoft Foundry-portal.
Belangrijk
Functies, mogelijkheden of eigenschappen die zijn gemarkeerd (preview) vallen niet onder een service level agreement, worden niet aanbevolen voor productieworkloads en kunnen worden gewijzigd of beperkt voordat ze algemeen beschikbaar worden. De Azure AI Zoeken preview-voorwaarden zijn van toepassing op alle preview-functionaliteit, ongeacht of deze zelfstandig is of deel uitmaakt van een algemeen beschikbare functie.
In een agentisch gegevens terughaalproces roept de actie ophalen parallelle queryverwerking aan vanuit een Knowledge Base. U kunt de actie ophalen rechtstreeks aanroepen met behulp van de REST API's van de zoekservice of een Azure SDK. Elke Knowledge Base maakt ook een MCP-eindpunt (Model Context Protocol) beschikbaar voor gebruik door MCP-compatibele agents.
In dit artikel wordt uitgelegd hoe u beide ophaalmethoden aanroept, waarbij machtigingen optioneel worden afgedwongen. Het bespreekt eerst de ophaalactie en pas later het MCP-eindpunt, omdat de uitvoer van het MCP-hulpprogramma momenteel verschilt van de structuur van de REST- en SDK-respons.
Zie Tutorial: Een end-to-end oplossing voor het ophalen van agents bouwen als u een pijplijn wilt instellen die Azure AI Zoeken met de Foundry-agentservice via MCP verbindt.
Gebruiksondersteuning
| Azure-portal | Microsoft Foundry-portal | .NET SDK | Python SDK | Java SDK | JavaScript SDK | REST API |
|---|---|---|---|---|---|---|
| ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
Voorwaarden
Een Azure AI Zoeken-service met een knowledge base.
Zie Vereisten voor het maken van een knowledge base voor toegang tot gedeelde modellen en het instellen van clients.
Machtiging om query's uit te voeren op knowledge bases. Configureer sleutelloze verificatie met de rol Search Index Data Reader die is toegewezen aan uw gebruikersaccount (aanbevolen) of gebruik een query-API-sleutel.
Als u het MCP-eindpunt aanroept via de Azure OpenAI-antwoorden-API, hebt u het volgende nodig:
Een geïmplementeerde LLM en de OpenAI-gebruikersrol van Cognitive Services (of een API-sleutel) in de Foundry-resource. U kunt de LLM en de resource die is opgegeven in uw Knowledge Base opnieuw gebruiken, indien van toepassing.
Het
Azure.AI.OpenAIpakket:dotnet add package Azure.AI.OpenAI
Vereiste
Azure.Search.Documents-pakket:Voor
2026-08-01-previewfuncties is het nieuwste preview-pakket beschikbaar:dotnet add package Azure.Search.Documents --prereleaseVoor
2026-04-01functies is het meest recente stabiele pakket:dotnet add package Azure.Search.Documents
Voor sleutelloze verificatie is het
Azure.Identitypakket:dotnet add package Azure.Identity
Als u het MCP-eindpunt aanroept via de Azure OpenAI-antwoorden-API, hebt u het volgende nodig:
Een geïmplementeerde LLM en de OpenAI-gebruikersrol van Cognitive Services (of een API-sleutel) in de Foundry-resource. U kunt de LLM en de resource die is opgegeven in uw Knowledge Base opnieuw gebruiken, indien van toepassing.
Het
openaipakket:pip install openai
Vereiste
azure-search-documents-pakket:Voor
2026-08-01-previewfuncties is het nieuwste preview-pakket beschikbaar:pip install --pre azure-search-documentsVoor
2026-04-01functies is het meest recente stabiele pakket:pip install azure-search-documents
Voor sleutelloze verificatie is het
azure-identitypakket:pip install azure-identity
Vereiste REST API-versie van zoekservice:
Voor preview-functies: 2026-08-01-preview
Voor algemeen beschikbare functies: 2026-04-01
Neem voor sleutelloze verificatie een Microsoft Entra ID token op in de
Authorizationheader van elke HTTP-aanvraag.
Limitations
Voor kennisbronnen voor zoekindexen maakt ophalen, wanneer u reranking inschakelt, gebruik van de semantische configuratie van de kennisbron. Het past de scoreprofielen van de onderliggende index niet toe, inclusief defaultScoringProfile. Opgehaalde antwoorden worden ook niet weergegeven @search.rerankerBoostedScore.
De actie Ophalen aanroepen
U specificeert de ophalen-actie op een kennisbank. Het aanvraaglichaam bevat de queryinvoer en een optionele lijst met kennisbronnen die moeten worden aangesproken.
De 2026-04-01 API-versie ondersteunt alleen de intents input en minimale, extractieve gegevensophaling. Preview-mogelijkheden, waaronder de messages invoer, queryplanning, antwoordsynthese en configureerbare redeneerinspanning, worden niet ondersteund. Gebruik 2026-08-01-preview voor volledige functionaliteit.
using Azure.Identity;
using Azure;
using Azure.Search.Documents.KnowledgeBases;
using Azure.Search.Documents.KnowledgeBases.Models;
// Create knowledge base retrieval client
var kbClient = new KnowledgeBaseRetrievalClient(
endpoint: new Uri("<search-endpoint>"),
knowledgeBaseName: "<knowledge-base-name>",
credential: 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
);
Naslaginformatie: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="<search-endpoint>",
knowledge_base_name="<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(request)
print(result.response[0].content[0].text)
Naslaginformatie:KnowledgeBaseRetrievalClient, KnowledgeBaseRetrievalRequest
@search-endpoint = <search-endpoint> // Example: https://my-service.search.windows.net
@search-access-token = <search-access-token> // Run: az account get-access-token --scope https://search.azure.com/.default --query accessToken -o tsv
POST {{search-endpoint}}/knowledgebases/{{knowledge-base-name}}/retrieve?api-version=2026-08-01-preview
Content-Type: application/json
Authorization: Bearer {{search-access-token}}
{
"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"
}
]
}
Naslaginformatie:Kennis ophalen - Ophalen
Afbeeldingen leveren om synthese te beantwoorden (preview)
Voor blob, geïndexeerde OneLake en geïndexeerde SharePoint kennisbronnen die u configureert met een assetarchief, kunt u document-ingesloten afbeeldingen leveren aan het downstream-antwoordsynthesemodel naast tekst. Stel enableImageServing in op de overeenkomende vermelding knowledgeSourceParams om de standaardwaarde te overschrijven die is ingesteld op de definitie van de Knowledge Base. Het antwoord van de ophaalbewerking bevat geen afzonderlijke velden voor de individuele afbeeldingspaden of afbeeldingsbytes die aan het model zijn doorgegeven.
Het aanbieden van afbeeldingen werkt alleen wanneer outputMode is answerSynthesis en wordt niet ondersteund voor kennisbronnen waarvoor ingestionPermissionOptions is geconfigureerd. Zie Maak in documenten ingesloten afbeeldingen beschikbaar in agentische retrieval (preview) voor configuratiestappen, de prioriteitstabel en hoe u statistieken voor het aanbieden van afbeeldingen kunt inzien.
Herordenen uitschakelen voor een kennisbron (preview-versie)
Vanaf de 2026-08-01-preview API-versie stelt u "resultsProcessing": "none" een knowledgeSourceParams vermelding in om de herrankering voor een specifieke kennisbron te omzeilen en de onderliggende resultaatvolgorde te behouden. U kunt resultsProcessing ook als standaard opslaan in de kennisbron. Alle soorten kennisbronnen ondersteunen deze eigenschap.
In het volgende voorbeeld wordt de reranking voor product-catalog-ks bij één ophaalaanvraag omzeild.
using System;
using System.Linq;
using Azure.Identity;
using Azure.Search.Documents.Indexes.Models;
using Azure.Search.Documents.KnowledgeBases;
using Azure.Search.Documents.KnowledgeBases.Models;
var client = new KnowledgeBaseRetrievalClient(
new Uri("<search-endpoint>"),
"product-catalog-kb",
new DefaultAzureCredential());
var request = new KnowledgeBaseRetrievalRequest
{
IncludeActivity = true
};
request.Intents.Add(
new KnowledgeRetrievalSemanticIntent(
"Find the power adapter for SKU 88421."));
request.KnowledgeSourceParams.Add(
new SearchIndexKnowledgeSourceParams("product-catalog-ks")
{
AlwaysQuerySource = true,
IncludeReferences = true,
ResultsProcessing = KnowledgeSourceResultsProcessing.None
});
var result = await client.RetrieveAsync(request);
Console.WriteLine(
$"References with a reranker score: "
+ $"{result.Value.References.Count(x => x.RerankerScore.HasValue)}");
Naslaginformatie:KnowledgeBaseRetrievalClient, SearchIndexKnowledgeSourceParams
from azure.identity import DefaultAzureCredential
from azure.search.documents.knowledgebases import (
KnowledgeBaseRetrievalClient,
)
from azure.search.documents.knowledgebases.models import (
KnowledgeBaseRetrievalRequest,
KnowledgeRetrievalSemanticIntent,
SearchIndexKnowledgeSourceParams,
)
client = KnowledgeBaseRetrievalClient(
endpoint="<search-endpoint>",
knowledge_base_name="product-catalog-kb",
credential=DefaultAzureCredential(),
)
request = KnowledgeBaseRetrievalRequest(
intents=[
KnowledgeRetrievalSemanticIntent(
search="Find the power adapter for SKU 88421."
)
],
include_activity=True,
knowledge_source_params=[
SearchIndexKnowledgeSourceParams(
knowledge_source_name="product-catalog-ks",
always_query_source=True,
include_references=True,
results_processing="none",
)
],
)
result = client.retrieve(request)
reranked_count = sum(
reference.reranker_score is not None
for reference in result.references
)
print("References with a reranker score:", reranked_count)
Naslaginformatie:KnowledgeBaseRetrievalClient, SearchIndexKnowledgeSourceParams
@search-endpoint = <search-endpoint>
@search-access-token = <search-access-token> // Run: az account get-access-token --scope https://search.azure.com/.default --query accessToken -o tsv
@knowledge-base-name = product-catalog-kb
POST {{search-endpoint}}/knowledgebases/{{knowledge-base-name}}/retrieve?api-version=2026-08-01-preview
Content-Type: application/json
Authorization: Bearer {{search-access-token}}
{
"intents": [
{
"type": "semantic",
"search": "Find the power adapter for SKU 88421."
}
],
"includeActivity": true,
"knowledgeSourceParams": [
{
"knowledgeSourceName": "product-catalog-ks",
"kind": "searchIndex",
"alwaysQuerySource": true,
"includeReferences": true,
"resultsProcessing": "none"
}
]
}
Naslaginformatie:Kennis ophalen - Ophalen
Stel "resultsProcessing": "rerank" in, of laat het weg wanneer er geen opgeslagen standaardwaarde bestaat, om de reranking-pijplijn te gebruiken. Azure AI Zoeken bepaalt de effectieve waarde voor elke bron in deze volgorde:
-
resultsProcessinginknowledgeSourceParamsop het ophaalverzoek. -
resultsProcessingopgeslagen op de kennisbron. -
rerankwanneer geen van beide eigenschappen aanwezig is.
Voor een MCP-serverkennisbron heeft een resultsProcessing waarde die is ingesteld op een afzonderlijk hulpprogramma voorrang op de aanvraag en opgeslagen waarden.
Tip
resultsProcessing wijzigt hoe resultaten worden verwerkt, niet welke bronnen worden opgevraagd. Stel alwaysQuerySource in op true als de kennisbron moet worden geraadpleegd.
Wanneer de effectieve waarde is none:
- Verwijzingen uit de kennisbron laten
rerankerScoreachterwege, en resultaten behouden hun oorspronkelijke volgorde binnen de ophaalactiviteit van de kennisbron. - Wanneer een willekeurige bron de herrangschikking omzeilt, verdeelt Azure AI Zoeken de uiteindelijke resultaten over activiteiten in round-robinvolgorde, volgens de declaratievolgorde van de kennisbronnen. Geherrankeerde activiteiten blijven gerangschikt op score.
- Ontdubbeling en limieten per bron, document en token zijn nog steeds van toepassing, dus niet elk opgehaald resultaat wordt weergegeven in het antwoord.
Azure AI Zoeken valideert rerankerThreshold in deze volgorde:
- Search bepaalt
resultsProcessingop basis van de retrieve-aanvraag en de opgeslagen waarde van de kennisbron. - Als de opgeloste waarde
noneis en de aanvraagrerankerThresholdbevat, retourneert Search400 Bad Request. - Voor een MCP-serverprogramma past Search de waarde op hulpprogrammaniveau
resultsProcessingtoe na het valideren van de aanvraag.
Als gevolg hiervan verandert een MCP-hulpprogramma-instelling niet of de aanvraag wordt gevalideerd. Een waarde op hulpprogrammaniveau none veroorzaakt geen drempelwaardefout en een waarde op hulpprogrammaniveau rerank voorkomt geen fout wanneer de aanvraag of opgeslagen waarde wordt omgezet in none.
Om te controleren welke modus is gebruikt, controleert u of de verwijzingen van de kennisbron rerankerScore bevatten. Vertrouw niet op semanticConfigurationName, want dit kan null zijn in plaats van te worden weggelaten.
Gedrag van zoekindex
Voor kennisbronnen die gericht zijn op een zoekindex, is semantichet impliciete querytype en is er geen zoekmodus. Wanneer runs opnieuw worden gerangschikt, wordt voor het uitvoeren van query's semanticConfigurationName gebruikt. Andere broninstellingen, waaronder searchFields en sourceDataFields, zijn van toepassing in beide modi.
Agentische retrieval accepteert geen invoer van het type scoringProfile of scoringParameters. Als u een voorkeur voor recentere informatie in geïndexeerde kennisbronnen nodig hebt, gebruikt u in plaats van een indexscoreprofiel actualiteitsbewuste gegevensophaling (preview).
Als de index vectorvelden bevat, hebt u een geldige vectorizerdefinitie nodig, zodat de agentische ophaalengine query-invoer kan vectoriseren. Anders worden vectorvelden genegeerd.
Zie Een index maken voor agentische retrieval voor meer informatie.
Streamresultaten ophalen (preview)
Vanaf de 2026-08-01-preview API-versie kunt u resultaten ophalen als een stroom van server-verzonden gebeurtenissen (SSE) in plaats van te wachten op één JSON-antwoord. Door streaming te gebruiken, kan uw client de queryplanning, bronactiviteit en gesynthetiseerde antwoord of geëxtraheerde reactie in die volgorde weergeven wanneer elk onderdeel beschikbaar komt.
using Azure.Identity;
using Azure.Search.Documents.Indexes.Models;
using Azure.Search.Documents.KnowledgeBases;
using Azure.Search.Documents.KnowledgeBases.Models;
var client = new KnowledgeBaseRetrievalClient(
new Uri("<search-endpoint>"),
"<knowledge-base-name>",
new DefaultAzureCredential());
var request = new KnowledgeBaseRetrievalRequest
{
OutputMode = KnowledgeRetrievalOutputMode.ExtractiveData,
RetrievalReasoningEffort =
new KnowledgeRetrievalMinimalReasoningEffort(),
IncludeActivity = true,
};
request.Intents.Add(
new KnowledgeRetrievalSemanticIntent("What is the return policy?"));
request.KnowledgeSourceParams.Add(
new SearchIndexKnowledgeSourceParams(
"<knowledge-source-name>")
{
ResultsProcessing = KnowledgeSourceResultsProcessing.None,
IncludeReferences = true,
});
var eventCounts = new Dictionary<string, int>();
await foreach (var item in client.RetrieveStreamAsync(request))
{
eventCounts.TryGetValue(item.EventType, out var count);
eventCounts[item.EventType] = count + 1;
}
foreach (var (eventType, count) in eventCounts)
{
Console.WriteLine($"{eventType}: {count}");
}
Naslaginformatie:KnowledgeBaseRetrievalClient
from collections import Counter
from azure.identity import DefaultAzureCredential
from azure.search.documents.indexes.models import (
KnowledgeSourceResultsProcessing,
)
from azure.search.documents.knowledgebases import (
KnowledgeBaseRetrievalClient,
)
from azure.search.documents.knowledgebases.models import (
KnowledgeBaseRetrievalRequest,
KnowledgeRetrievalMinimalReasoningEffort,
KnowledgeRetrievalOutputMode,
KnowledgeRetrievalSemanticIntent,
SearchIndexKnowledgeSourceParams,
)
client = KnowledgeBaseRetrievalClient(
endpoint="<search-endpoint>",
knowledge_base_name="<knowledge-base-name>",
credential=DefaultAzureCredential(),
)
request = KnowledgeBaseRetrievalRequest(
intents=[
KnowledgeRetrievalSemanticIntent(
search="What is the return policy?"
)
],
output_mode=KnowledgeRetrievalOutputMode.EXTRACTIVE_DATA,
retrieval_reasoning_effort=KnowledgeRetrievalMinimalReasoningEffort(),
include_activity=True,
knowledge_source_params=[
SearchIndexKnowledgeSourceParams(
knowledge_source_name="<knowledge-source-name>",
results_processing=KnowledgeSourceResultsProcessing.NONE,
include_references=True,
)
],
)
event_counts = Counter()
with client.retrieve_stream(request) as stream:
for event in stream:
event_counts[event.event_type] += 1
for event_type, count in event_counts.items():
print(f"{event_type}: {count}")
Naslaginformatie:KnowledgeBaseRetrievalClient
Als u zich wilt aanmelden voor streaming, neemt u de Accept: text/event-stream header op in een ophaalaanvraag. Zonder deze header retourneert de actie ophalen het standaard-JSON-antwoord.
POST {{search-endpoint}}/knowledgebases/{{knowledge-base-name}}/retrieve?api-version=2026-08-01-preview
Content-Type: application/json
Accept: text/event-stream
Authorization: Bearer {{search-access-token}}
{
"intents": [
{
"type": "semantic",
"search": "What is the return policy?"
}
],
"outputMode": "extractiveData",
"retrievalReasoningEffort": {
"kind": "minimal"
},
"includeActivity": true,
"knowledgeSourceParams": [
{
"knowledgeSourceName": "{{knowledge-source-name}}",
"kind": "searchIndex",
"resultsProcessing": "none",
"includeReferences": true
}
]
}
Naslaginformatie:Kennis ophalen - Ophalen
Levenscyclus van gebeurtenissen
In plaats van één antwoord te retourneren, houdt de service één HTTP-verbinding open (inhoudstype text/event-stream; charset=utf-8) en verzendt een reeks gebeurtenissen wanneer gegevens beschikbaar komen. Elke gebeurtenis heeft een event: regel met de naam van het gebeurtenistype, een data: regel met een JSON-waarde en een lege regel die het einde van de gebeurtenis markeert.
Een geslaagde stream maakt gebruik van de volgende levenscyclus:
| Event | Wanneer het wordt verzonden | Wat het bevat |
|---|---|---|
retrieval.started |
Eerste gebeurtenis bij elke streamingaanvraag. | Het verzoek-id, de naam van de kennisbank, de uitvoermodus en de effectieve redeneerinspanning nadat de service de standaardwaarden voor het verzoek en de kennisbank heeft bepaald. Als de daadwerkelijke kindauto is, rapporteert de gebeurtenis auto; het voorspelt geen latere escalatie. |
activity.started |
Wanneer de service een queryplannings-, bron- of modelactiviteit start. Meerdere activiteiten kunnen beginnen voordat een eerdere activiteit is voltooid. | De activiteit id, typede begintijd en de optionele naam van de kennisbron. |
activity.completed |
Wanneer deze activiteit is voltooid. Koppel deze aan de bijbehorende activity.started-gebeurtenis door id te matchen. |
De voltooide activiteitsrecord. |
answer.completed |
Eenmaal, alleen wanneer outputModeanswerSynthesis is. |
messageIndex identificeert de positie van het bericht in de uiteindelijke antwoordmatrix en message bevat het volledige gesynthetiseerde antwoord. Er is geen token-by-token-deltagebeurtenis. |
references.completed |
Nadat alle verwijzingen zijn opgelost. | De gebeurtenisgegevens zijn de matrix met volledige verwijzingen, zonder een object-wrapper. |
response.completed |
De eindgebeurtenis van een succesvolle of gedeeltelijk succesvolle stream. |
200- of 206-statuscode en de volledige responsbody van de retrieve-aanroep, die dezelfde structuur heeft als een niet-streamende JSON-aanroep. Zie Problemen met de ophaalactie oplossen voor meer informatie over wat elke statuscode betekent. |
error |
In plaats van references.completed en response.completed wanneer het ophalen mislukt nadat de stream is geopend. |
De fout en alle activiteitsrecords die vóór de fout zijn voltooid. |
Gebeurtenissen komen op volgorde binnen. Elke activity.started gebeurtenis komt vóór de activity.completed gebeurtenis met hetzelfde id, maar activiteiten kunnen door elkaar lopen. Voltooide activiteitsrecords bevatten ook startedAttijdstempelscompletedAt. Terwijl de stream niet actief is, verzendt de server ongeveer elke 15 seconden een : heartbeat opmerking om de verbinding open te houden. SSE-clients kunnen deze opmerkingen negeren.
Het volgende voorbeeld toont een streamingantwoord, waarbij payloads zijn ingekort om de leesbaarheid te verbeteren.
event: retrieval.started
data: {"requestId":"<request-id>","outputMode":"answerSynthesis"}
event: activity.started
data: {"id":0,"type":"searchIndex","startedAt":"<timestamp>"}
: heartbeat
event: activity.completed
data: {"id":0,"startedAt":"<start>","completedAt":"<end>"}
event: answer.completed
data: {"messageIndex":0,"message":{"content":[{"type":"text","text":"..."}]}}
event: references.completed
data: [{"type":"searchIndex","id":"0","activitySource":0}]
event: response.completed
data: {"statusCode":200,"response":{}}
Fouten, annulering en terugval afhandelen
Preflight-fouten: als de aanvraagvalidatie mislukt voordat de stream wordt geopend, zoals voor een ongeldige aanvraagbody, retourneert de actie ophalen een standaard JSON-foutreactie en wordt de stream nooit geopend.
Midstream-fouten: als het ophalen mislukt nadat de stream is geopend, is
errorde terminal-gebeurtenis in plaats vanreferences.completedenresponse.completed. De gebeurtenis kan alle activiteitsrecords bevatten die vóór de fout zijn voltooid. De HTTP-statuscode blijft200ongewijzigd zodra de stream start, dus controleer de eindgebeurtenis, niet de HTTP-statuscode, om te bepalen of dit succesvol was.Annuleren of verbreken: als uw client de aanvraag annuleert of de verbinding verbreekt voordat de stream is voltooid, annuleert de service het ophalen en beëindigt de stream zonder een terminal-gebeurtenis. Behandel alle gebeurtenissen die zijn ontvangen vóór annulering of verbinding verbreken als onvolledig.
JSON-terugval: Met
2026-08-01-preview, een ontbrekendeAcceptheader of een waarde zoalsapplication/json,text/**/*oftext/event-stream;q=0retourneert het standaard JSON-antwoord dat wordt beschreven in Het antwoord controleren. Het aanvragen vantext/event-streamvanuit een eerdere API-versie geeft406 Not Acceptableterug.
Zoekindexkennisbronnen filteren op querytijd
Wanneer u gegevens opvraagt uit een kennisbron van een zoekindex, kunt u een OData-filter op het moment van de query toepassen om de resultaten te beperken tot specifieke documenten of velden. De filterexpressie maakt gebruik van OData-syntaxis en wordt doorgegeven via de filterAddOn parameter.
Filtersyntaxis en voorbeelden
De filterAddOn parameter accepteert OData-filterexpressies. Voorbeelden van patronen zijn:
-
Metagegevensvelden:
city eq 'Phoenix',status eq 'active' -
Datumbereiken:
publishDate ge 2024-01-01 and publishDate le 2024-12-31 -
Numerieke bereiken:
price ge 100 and price le 5000 -
Overeenkomende tekst:
substringof('climate', description),indexof(title, 'urgent') ge 0 -
Logische operators:
(category eq 'News' or category eq 'Analysis') and status eq 'published'
using Azure;
using Azure.Search.Documents.KnowledgeBases;
using Azure.Search.Documents.KnowledgeBases.Models;
var kbClient = new KnowledgeBaseRetrievalClient(
endpoint: new Uri("<search-endpoint>"),
knowledgeBaseName: "<knowledge-base-name>",
credential: 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="<search-endpoint>",
knowledge_base_name="<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(request)
print(result.response[0].content[0].text)
POST {{search-endpoint}}/knowledgebases/{{knowledge-base-name}}/retrieve?api-version=2026-08-01-preview
Content-Type: application/json
Authorization: Bearer {{search-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'"
}
]
}
Voorbeeld van meerdere filters
U kunt meerdere filters combineren om de resultaten verder te verfijnen.
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"
}
Opgeslagen queryhints overschrijven tijdens het uitvoeren van de query (preview)
Vanaf de API-versie 2026-08-01-preview kunt u de query-hints die zijn opgeslagen in de knowledge source van een zoekindex voor één afzonderlijk retrieve-verzoek overschrijven door queryHintOverrides in te stellen voor de vermelding knowledgeSourceParams.
De overschrijving vervangt het volledig opgeslagen queryHints-object in plaats van dit item voor item samen te voegen, dus neem alle hints op die u wilt toepassen. Laat queryHintOverrides weg om de opgeslagen hints te gebruiken.
Wanneer de redeneerinspanning voor ophalen niet minimal is, is een HTTP 400-antwoord afhankelijk van de opgeslagen filterhints, niet van de inhoud van de overschrijving of het type boost. De service valideert opgeslagen filterhints op basis van het Knowledge Base-model voordat deze wordt toegepast queryHintOverrides. Daarom weigert een model uit de GPT-4o- of GPT-4.1-familie het verzoek, zelfs wanneer de overschrijving leeg is of alleen boosts bevat. Opgeslagen boosts op zichzelf leiden niet tot deze validatie. Gebruik eerst een compatibel model of verwijder eerst de opgeslagen filterhints.
In het volgende voorbeeld worden alle opgeslagen hints vervangen door één fieldValue boost voor Japanse inhoud. De service past geen opgeslagen filter of een andere opgeslagen boost toe op deze aanvraag.
using System;
using Azure.Identity;
using Azure.Search.Documents.Indexes.Models;
using Azure.Search.Documents.KnowledgeBases;
using Azure.Search.Documents.KnowledgeBases.Models;
var endpoint = new Uri("<search-endpoint>");
var retrievalClient = new KnowledgeBaseRetrievalClient(
endpoint,
"product-kb",
new DefaultAzureCredential());
var languageBoost =
new SearchIndexKnowledgeSourceFieldValueBoost(
"language",
2.0);
languageBoost.FieldValues.Add("ja-JP");
var queryHintOverrides =
new SearchIndexKnowledgeSourceQueryHints();
queryHintOverrides.Boosts.Add(languageBoost);
var request = new KnowledgeBaseRetrievalRequest
{
RetrievalReasoningEffort =
new KnowledgeRetrievalLowReasoningEffort(),
IncludeActivity = true
};
request.Messages.Add(
new KnowledgeBaseMessage([
new KnowledgeBaseMessageTextContent(
"Find Japanese service guidance for Model-X200.")
])
{
Role = "user"
});
request.KnowledgeSourceParams.Add(
new SearchIndexKnowledgeSourceParams(
"product-docs-ks")
{
QueryHintOverrides = queryHintOverrides
});
var result = await retrievalClient.RetrieveAsync(request);
Naslaginformatie:KnowledgeBaseRetrievalClient, SearchIndexKnowledgeSourceParams
from azure.identity import DefaultAzureCredential
from azure.search.documents.indexes.models import (
SearchIndexKnowledgeSourceFieldValueBoost,
SearchIndexKnowledgeSourceQueryHints,
)
from azure.search.documents.knowledgebases import (
KnowledgeBaseRetrievalClient,
)
from azure.search.documents.knowledgebases.models import (
KnowledgeBaseMessage,
KnowledgeBaseMessageTextContent,
KnowledgeBaseRetrievalRequest,
KnowledgeRetrievalLowReasoningEffort,
SearchIndexKnowledgeSourceParams,
)
retrieval_client = KnowledgeBaseRetrievalClient(
endpoint="<search-endpoint>",
credential=DefaultAzureCredential(),
knowledge_base_name="product-kb",
)
query_hint_overrides = SearchIndexKnowledgeSourceQueryHints(
boosts=[
SearchIndexKnowledgeSourceFieldValueBoost(
field="language",
field_values=["ja-JP"],
boost=2.0,
)
]
)
request = KnowledgeBaseRetrievalRequest(
messages=[
KnowledgeBaseMessage(
role="user",
content=[
KnowledgeBaseMessageTextContent(
text="Find Japanese service guidance for Model-X200."
)
],
)
],
knowledge_source_params=[
SearchIndexKnowledgeSourceParams(
knowledge_source_name="product-docs-ks",
query_hint_overrides=query_hint_overrides,
)
],
retrieval_reasoning_effort=(
KnowledgeRetrievalLowReasoningEffort()
),
include_activity=True,
)
result = retrieval_client.retrieve(request)
Naslaginformatie:KnowledgeBaseRetrievalClient, SearchIndexKnowledgeSourceParams
POST {{search-endpoint}}/knowledgebases('product-kb')/retrieve?api-version=2026-08-01-preview
Content-Type: application/json
Authorization: Bearer {{search-access-token}}
{
"messages": [{
"role": "user",
"content": [{
"type": "text",
"text": "Find Japanese service guidance for Model-X200."
}]
}],
"knowledgeSourceParams": [{
"knowledgeSourceName": "product-docs-ks",
"kind": "searchIndex",
"queryHintOverrides": {
"boosts": [{
"kind": "fieldValue",
"field": "language",
"fieldValues": ["ja-JP"],
"boost": 2.0
}]
}
}],
"retrievalReasoningEffort": {"kind": "low"},
"includeActivity": true
}
Naslaginformatie:Kennis ophalen - Ophalen
Om te bevestigen dat de service uw overschrijving heeft toegepast, stelt u includeActivity in voor de aanvraag en controleert u de geretourneerde searchIndex-activiteit. Het queryHintProcessing object rapporteert wat het model heeft gegenereerd. In dit voorbeeld bevat het een generatedBoost voor de taalboost, maar geen generatedFilter omdat de overschrijving de opgeslagen filterhint heeft vervangen. Omdat query hints naar beste vermogen werken, moet u deze activiteit als een bevestiging beschouwen in plaats van te controleren op een exacte formulering.
{
"type": "searchIndex",
"queryHintProcessing": {
"generatedBoost": "language:(ja\\-JP)^2"
},
"searchIndexArguments": {
"queryType": "full"
}
}
Zie Hints configureren (preview) voor de opgeslagen definitie, ondersteunde hinttypen en samenstelling met deterministische filters.
Machtigingen afdwingen wanneer query’s worden uitgevoerd (preview)
Wijzigingen in toegangsrechten die u buiten 2026-08-01-preview instelt, kunnen enige tijd nodig hebben voordat ze in de ophaalresultaten van 2026-08-01-preview worden weergegeven.
Als uw kennisbronnen inhoud bevatten die is beveiligd met machtigingen, geeft u de identiteit van de eindgebruiker door aan de ophaalaanvraag, zodat elke gebruiker alleen inhoud ziet waartoe ze gemachtigd zijn. Voor geïndexeerde bronnen gebruikt de ophaalengine deze identiteit om resultaten te filteren en niet-gefilterde resultaten te retourneren als deze wordt weggelaten. Externe bronnen gebruiken ook autorisatie van de ophaalaanvraag, maar dwingen machtigingen bij de bron af en vereisen mogelijk een bronspecifiek token en header.
Het afdwingen van machtigingen heeft twee onderdelen:
Opnametijd: Alleen voor geïndexeerde kennisbronnen, configureer
ingestionPermissionOptionsom autorisatie-metadata naast de inhoud op te nemen.Querytijd: geef de autorisatie van de gebruiker door in de header die de kennisbron vereist. De meeste bronnen gebruiken
x-ms-query-source-authorization. De uitzondering is Work IQ, die gebruikmaakt vanx-ms-query-work-iq-source-authorization.
Ingestietijdsconfiguratie
In de volgende tabel ziet u welke kennisbronnen de opnametijdconfiguratie vereisen en hoe elke bron machtigingen afdwingt.
| Kennisbron | Vereist ingestionPermissionOptions |
Hoe machtigingen worden afgedwongen |
|---|---|---|
| Blob of ADLS Gen2 | ✅ | Opgenomen RBAC-bereiken, ACL's of Microsoft Purview vergeleken met de gebruikersidentiteit. |
| OneLake | ✅ | Opgenomen document met Microsoft Purview-gevoeligheidslabels gekoppeld aan gebruikersidentiteit. |
| Geïndexeerde SharePoint | ✅ | Opgenomen SharePoint ACL's of Microsoft Purview vertrouwelijkheidslabels die overeenkomen met de gebruikersidentiteit. |
| Extern SharePoint | ❌ | Opvragingen van de Copilot Retrieval API halen SharePoint rechtstreeks op met de gebruikers-token. |
| Fabric Data-agent | ❌ | De ophaalengine wisselt het token van de gebruiker in voor een token met het bereik van Microsoft Fabric en bevraagt namens de gebruiker de data-agent. |
| Fabric-ontologie | ❌ | De ophaalengine wisselt het token van de gebruiker in voor een token met het bereik van Microsoft Fabric en voert namens deze gebruiker een query uit op het ontologie-item. |
| Iq voor werk | ❌ | De retrieval-engine wisselt een gebruikersassertie voor een app-doelgroep uit x-ms-query-work-iq-source-authorization in voor een token met Work IQ-bereik. |
Als u niet configureert ingestionPermissionOptions wanneer u de geïndexeerde kennisbron maakt, bevat de index geen machtigingsmetagegevens. Het systeem retourneert resultaten die niet zijn gefilterd, ongeacht de header. U kunt dit probleem oplossen door de kennisbron opnieuw te maken met de juiste ingestionPermissionOptions waarden.
Autorisatie op vraagtijdbasis
Geef voor niet-Work IQ-kennisbronnen de identiteit van de eindgebruiker door door een toegangstoken met bereik https://search.azure.com/.default op te nemen in het ophaalverzoek. Dit token staat los van de servicereferenties die worden gebruikt voor toegang tot de zoekservice. Er zijn geen zoekservicemachtigingen nodig en vertegenwoordigt alleen de gebruiker waarvan de toegang tot inhoud wordt geëvalueerd. Zie voor meer informatie afdwinging van ACL en RBAC tijdens querytijd.
Voor Werk IQ-kennisbronnen is deze sectie niet van toepassing. Gebruik de werk-IQ-specifieke gebruikersverklaringsstroom die wordt beschreven in Machtigingen afdwingen tijdens het uitvoeren van query's.
Geef in de .NET SDK het token door als de parameter querySourceAuthorization op 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("<search-endpoint>"),
knowledgeBaseName: "<knowledge-base-name>",
credential: 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, querySourceAuthorization: userToken);
var text = (result.Value.Response[0].Content[0] as KnowledgeBaseMessageTextContent)!.Text;
Console.WriteLine(text);
Naslaginformatie:KnowledgeBaseRetrievalClient, KnowledgeBaseRetrievalRequest
Geef in de Python SDK het token door als de parameter query_source_authorization op 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="<search-endpoint>",
knowledge_base_name="<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, query_source_authorization=user_token)
print(result.response[0].content[0].text)
Naslaginformatie:KnowledgeBaseRetrievalClient, KnowledgeBaseRetrievalRequest
Neem in de REST API de x-ms-query-source-authorization header op met het toegangstoken van de gebruiker:
@search-endpoint = <search-endpoint>
@search-access-token = <search-access-token> // Service credential
@user-access-token = <user-access-token> // User identity token
POST {{search-endpoint}}/knowledgebases/{{knowledge-base-name}}/retrieve?api-version=2026-08-01-preview
Authorization: Bearer {{search-access-token}}
Content-Type: application/json
x-ms-query-source-authorization: {{user-access-token}}
{
"messages": [
{
"role": "user",
"content": [
{
"type": "text",
"text": "What companies are in the financial sector?"
}
]
}
]
}
Naslaginformatie:Kennis ophalen - Ophalen
Het antwoord controleren
De ophaalactie retourneert drie hoofdonderdelen.
- Geëxtraheerd antwoord of gesynthetiseerd antwoord (preview) ( afhankelijk van de uitvoermodus)
- Activiteitsmatrix
- Verwijzingsmatrix
Geëxtraheerd antwoord
Het geëxtraheerde antwoord is één uniforme tekenreeks die u doorgaans doorgeeft aan een LLM. De LLM gebruikt de tekenreeks als grondgegevens en gebruikt deze om een antwoord te formuleren. Uw API-aanroep naar de LLM bevat de uniforme string en instructies voor het model, zoals of de basisinformatie uitsluitend of als aanvulling moet worden gebruikt.
De hoofdtekst van het antwoord is gestructureerd in het stijlformat van chatberichten en de inhoud is geserialiseerd als 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>\"}]"
}
]
}
]
Belangrijkste punten:
content.typeheeft één geldige waarde:text.content.textis een met JSON gecodeerde tekenreeks die de meest relevante documenten (of segmenten) bevat die in de zoekindex zijn gevonden, gezien de invoer van de query- en chatgeschiedenis. Deze tekenreeks is uw basisgegevens die een LLM gebruikt om een antwoord te formuleren op de vraag van de gebruiker.Dit gedeelte van het antwoord bestaat uit 200 segmenten of minder, met uitzondering van eventuele resultaten die niet voldoen aan de minimumdrempel van een herrankeerscore van 2,5.
De tekenreeks begint met de referentie-id van het segment (gebruikt voor bronvermeldingsdoeleinden) en alle velden die zijn opgegeven in de semantische configuratie van de doelindex. In dit voorbeeld wordt ervan uitgegaan dat de semantische configuratie in de doelindex een titelveld, een termenveld en een inhoudsveld bevat.
Ophaalresponsen bevatten geen
@search.rerankerBoostedScore.De
maxOutputSizeInTokenseigenschap (maxOutputSizein2026-05-01-previewen hoger) voor de ophaalaanvraag bepaalt de lengte van de tekenreeks.- Een document dat het
maxOutputSizeInTokensuitvoerbudget overschrijdt, kan worden weggelaten uit het antwoord. De activiteitenmatrix bevat een waarschuwing wanneer het meest relevante document de maximale uitvoergrootte overschrijdt. Als u meer inhoud wilt behouden, verhoogt umaxOutputSizeInTokens. Zie Lege antwoorden voor meer informatie.
- Een document dat het
Activiteitsmatrix
De activiteitenmatrix voert het queryplan uit, dat operationele transparantie biedt voor het bijhouden van bewerkingen, gevolgen voor facturering en resource-aanroepen. Het bevat ook subquery’s die naar de retrievalpijplijn zijn verzonden. Voor een 206 Partial Content antwoord bevat de matrix fouten voor mislukte kennisbronnen. Een 502 Bad Gateway-antwoord bevat mogelijk alleen foutdetails in de fout op hoofdniveau.
De activiteitenmatrix bevat de volgende onderdelen:
| Sectie | Beschrijving |
|---|---|
| Bronspecifieke activiteit | Voor elke kennisbron die in de query is opgenomen, rapporteert deze sectie over verstreken tijd en welke argumenten zijn gebruikt in de query, inclusief semantische rangschikking. Kennisbrontypen zijn onder andere searchIndex, azureBloben andere ondersteunde kennisbronnen. |
agenticReasoning |
In deze sectie wordt gerapporteerd over het tokenverbruik voor agentisch redeneren tijdens het ophalen, dat afhankelijk is van de opgegeven redeneerinspanning voor ophalen (preview). |
modelQueryPlanning |
Voor knowledge bases die een LLM gebruiken voor het plannen van query's, rapporteert deze sectie over het aantal tokens dat wordt gebruikt voor invoer en het tokenaantal voor de subquery's. Het bevat een model veld met een modelName veld met de naam van het openbare model, niet de implementatienaam, van het model waarop de activiteit is uitgevoerd. |
modelAnswerSynthesis |
Voor knowledge bases die antwoordsynthese (preview) gebruiken, rapporteert deze sectie over het aantal tokens voor het formuleren van het antwoord en het tokenaantal van de antwoorduitvoer. Het bevat een model veld met een modelName veld met de naam van het openbare model, niet de implementatienaam, van het model waarop de activiteit is uitgevoerd. |
modelWebSummarization |
Voor knowledge bases die gebruikmaken van websamenvatting, rapporteert deze sectie over tokenverbruik voor het samenvatten van webresultaten. Het bevat een model veld met een modelName veld met de naam van het openbare model, niet de implementatienaam, van het model waarop de activiteit is uitgevoerd. |
model |
Voor records met model-ondersteunde activiteiten identificeert deze sectie het model dat wordt gebruikt om de activiteit uit te voeren. Deze sectie wordt alleen weergegeven wanneer u includeActivity instelt op true. |
imageServing |
Voor kennisbronnen waarvoor afbeeldingsweergave (preview) is ingeschakeld, worden in deze sectie imagesRetrieved, imagesSentToModel, totalImageSizeBytes en of verbalizationUsed tijdens het indexeren was ingeschakeld, gerapporteerd. Inspecteer verbalizationUsed en imagesSentToModel onafhankelijk. Een antwoord kan verbalizationUsed als true aangeven en toch afbeeldingen naar het onderliggende model sturen. Als u het aantal verwijderde afbeeldingen wilt vinden, trekt u imagesSentToModel af van imagesRetrieved. |
In het volgende voorbeeld ziet u de activiteitenmatrix.
"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
}
]
Verwijzingsmatrix
De referentiematrix komt rechtstreeks uit de onderliggende grondgegevens. Het bevat de sourceData die wordt gebruikt voor het genereren van het antwoord en bestaat uit elk document dat door de agentieve ophaalengine wordt gevonden en semantisch wordt gerangschikt.
De referentiematrix bevat de volgende onderdelen:
| Veld | Beschrijving |
|---|---|
type |
Het type kennisbron dat de verwijzing heeft geproduceerd, zoals searchIndex. |
id |
De referentie-id voor een item in een antwoord. Dit is niet de documentsleutel in de zoekindex. Gebruik deze om bronvermeldingen op te geven. |
activitySource |
Kruisverwijzingen naar de id activiteitsvermelding die de verwijzing heeft geproduceerd, wat handig is voor het koppelen van bronvermeldingen. |
docKey |
Voor een geïndexeerde verwijzing: de documentsleutel in de onderliggende zoekindex. |
sourceData |
De grondgegevens die worden gebruikt om het antwoord te genereren. Voor een geïndexeerde verwijzing kunnen velden een id en semantische velden bevatten, zoals title, termsen content. De vorm varieert per referentietype. |
citationUrl (voorbeeld) |
Een door de service gegenereerde alleen-lezen-URL die verwijst naar het document van de referentie in de onderliggende index. Alleen geretourneerd voor geïndexeerde kennisbronnen. Zie Documenten opzoeken met bronvermeldings-URL's (preview) om de URL te volgen. |
In het volgende voorbeeld ziet u de verwijzingsmatrix.
"references": [
{
"type": "searchIndex",
"id": "0",
"activitySource": 2,
"docKey": "policy=aug-2026",
"citationUrl": "https://my-search-service.search.windows.net/indexes/my-index/docs/policy%3Daug-2026?$select=title%2Ccontent%2Ccategory%2Cid%2Clanguage&api-version=2026-08-01-preview",
"sourceData": null
},
{
"type": "searchIndex",
"id": "1",
"activitySource": 2,
"docKey": "2",
"citationUrl": "https://my-search-service.search.windows.net/indexes/my-index/docs/2?$select=title%2Ccontent%2Ccategory%2Cid%2Clanguage&api-version=2026-08-01-preview",
"sourceData": null
}
]
Documenten opzoeken met bronvermeldings-URL's (preview)
Vanaf API-versie 2026-08-01-preview kan een verwijzing uit een geïndexeerde kennisbron een citationUrl bevatten in het retrieve-antwoord. Gebruik deze URL om de geïndexeerde velden voor die verwijzing op te halen, zoals title en content, zodat u een voorbeeld van een bronvermelding kunt weergeven waarin wordt weergegeven waar een antwoord vandaan komt zonder het oorspronkelijke brondocument te openen. Het citationUrl is een geverifieerde zoekopdracht in de backing-index, gescheiden van de bron docUrl en blobUrl.
In het volgende voorbeeld ziet u een opgeschoonde bronvermeldings-URL.
"citationUrl": "https://my-search-service.search.windows.net/indexes/my-index/docs/policy%3Daug-2026?$select=title%2Ccontent%2Ccategory%2Cid%2Clanguage&api-version=2026-08-01-preview"
De geselecteerde velden en hun volgorde zijn afhankelijk van de geïndexeerde bron en de configuratie voor het ophalen.
Belangrijk
Volg de volledige URL uit de exacte bewoordingen van het antwoord en geef de geretourneerde JSON-velden weer in uw app. Construeer, parseer of normaliseer de URL niet.
Op basis van een bronvermeldings-URL krijgen de volgende voorbeelden een toegangstoken voor de zoekservice. Ze roepen de URL aan met die token in de Authorization-header. De aangemelde identiteit heeft de rol Search Index Data Reader nodig.
Azure AI Zoeken SDK-methoden voor het opzoeken van documenten vereisen het eindpunt, de indexnaam, de documentsleutel, de geselecteerde velden en de API-versie als afzonderlijke invoer. Ze accepteren geen absolute bronvermeldings-URL. In deze voorbeelden wordt een geverifieerde HTTP GET gebruikt om de volledige door de service gegenereerde URL te behouden.
using System;
using System.Net.Http;
using System.Net.Http.Headers;
using Azure.Core;
using Azure.Identity;
// citationUrl comes from a retrieve response
string citationUrl = "<citation-url>";
var credential = new DefaultAzureCredential();
AccessToken token = await credential.GetTokenAsync(
new TokenRequestContext(
new[] { "https://search.azure.com/.default" }));
using var httpClient = new HttpClient();
httpClient.DefaultRequestHeaders.Authorization =
new AuthenticationHeaderValue("Bearer", token.Token);
string document = await httpClient.GetStringAsync(citationUrl);
Console.WriteLine(document);
Naslaginformatie:DefaultAzureCredential
import json
from urllib.request import Request, urlopen
from azure.identity import DefaultAzureCredential
# citation_url comes from a retrieve response
citation_url = "<citation-url>"
credential = DefaultAzureCredential()
token = credential.get_token("https://search.azure.com/.default")
document_request = Request(
citation_url,
headers={"Authorization": f"Bearer {token.token}"},
)
with urlopen(document_request) as response:
document = json.load(response)
print(json.dumps(document, indent=2))
Naslaginformatie:DefaultAzureCredential
GET {{citation-url}}
Authorization: Bearer {{search-access-token}}
Naslaginformatie:Documenten - Ophalen
De documentzoekactie retourneert de geselecteerde indexvelden als JSON:
{
"id": "policy=aug-2026",
"title": "Escaped citation key",
"content": "Citation interoperability uses an escaped document key for the August preview.",
"category": "release",
"language": "en-US"
}
Houd rekening met het volgende wanneer u een bronvermeldings-URL gebruikt:
Controleer of
citationUrlaanwezig is voordat u een bronvermelding weergeeft. Het kan ontbreken als het antwoord verwijzingen weglaat of de service de onderliggende index of documentsleutel niet kan achterhalen.Als de ophaalaanvraag betrekking heeft
x-ms-query-source-authorizationop toegangsbeheer op documentniveau, gebruikt u hetzelfde gebruikerstoken wanneer u de URL volgt.De URL blijft alleen geldig terwijl de back-upindex en documentsleutel ongewijzigd blijven.
Metagegevens van vertrouwelijkheidslabel controleren in de reactie (preview)
Hetzelfde tijdsinstellingsgedrag dat wordt beschreven in Machtigingen afdwingen tijdens query's , is hier van toepassing: wijzigingen in toegangsmachtigingen die u buiten 2026-08-01-preview instellen, kunnen even duren voordat ze worden weergegeven in 2026-08-01-preview antwoorden ophalen.
Wanneer u een query uitvoert op een knowledge base die Microsoft Purview vertrouwelijkheidslabels opneemt, bevat het antwoord labelmetagegevens op twee niveaus:
| Locatie | Veld | Beschrijving |
|---|---|---|
| Per verwijzing | sensitivityLabelInfo |
Het vertrouwelijkheidslabel dat wordt toegepast op elk document dat in de references matrix wordt geretourneerd. |
| Antwoord | metadata.responseSensitivityLabelInfo |
Een geaggregeerd label dat het vertrouwelijkheidslabel met de hoogste prioriteit vertegenwoordigt voor alle documenten waarnaar wordt verwezen in het antwoord. Nuttig voor aan clientzijde weergegeven banners en beleidshandhaving. |
Microsoft Graph berekent het label op reactieniveau op basis van de labels van de afzonderlijke verwijzingen volgens de Microsoft Purview-regels voor labelovererving. Meestal wint het meest beperkende label.
In het volgende voorbeeld wordt een ophaalreactie getoond met twee gerefereerde documenten (één met Confidential, één met Internal) en het resulterende label op reactieniveau.
{
"response": [
{
"role": "assistant",
"content": [
{ "type": "text", "text": "[ ... grounding data ... ]" }
]
}
],
"references": [
{
"type": "azureBlob",
"id": "0",
"activitySource": 1,
"docKey": "contract-2026.pdf",
"sensitivityLabelInfo": {
"labelId": "<label-guid>",
"labelName": "Confidential",
"color": "#FF0000",
"tooltip": "Confidential — Recipients can read but not forward.",
"isEncrypted": true,
"priority": 3
},
"sourceData": null
},
{
"type": "azureBlob",
"id": "1",
"activitySource": 1,
"docKey": "policy-overview.pdf",
"sensitivityLabelInfo": {
"labelId": "<label-guid>",
"labelName": "Internal",
"color": "#FFA500",
"tooltip": "For internal use only.",
"isEncrypted": false,
"priority": 1
},
"sourceData": null
}
],
"metadata": {
"responseSensitivityLabelInfo": {
"labelId": "<label-guid>",
"labelName": "Confidential",
"color": "#FF0000",
"tooltip": "Confidential — Recipients can read but not forward.",
"isEncrypted": true,
"priority": 3
}
}
}
Referentietypen die vertrouwelijkheidslabels weergeven
De veldnaam en beschikbaarheid van labelmetagegevens zijn afhankelijk van het kennisbrontype dat elke verwijzing heeft geproduceerd.
Referentie type |
Veld voor label | Beschikbaar wanneer... |
|---|---|---|
azureBlob |
sensitivityLabelInfo |
De blobkennisbron bevat sensitivityLabel in ingestionPermissionOptions. |
indexedOneLake |
sensitivityLabelInfo |
De OneLake-kennisbron bevat sensitivityLabel in ingestionPermissionOptions. |
indexedSharePoint |
sensitivityLabelInfo |
De SharePoint-geïndexeerde kennisbron bevat sensitivityLabel in ingestionPermissionOptions. |
searchIndex |
sensitivityLabelInfo |
De onderliggende index is purviewEnabled ingesteld op true en een veld dat is gemarkeerd met sensitivityLabel: true. |
Aanbevelingen weergeven en controleren
Gebruik
sensitivityLabelInfo.labelIdom de volledige labeldefinitie op te zoeken via de Microsoft Graph vertrouwelijkheidslabel-API's wanneer u aanvullende eigenschappen nodig hebt, zoals beleidsbesturingselementen of machtigingen.Gebruik
metadata.responseSensitivityLabelInfodit om een gevoeligheidsbanner op antwoordniveau weer te geven of beleidsbesturingselementen toe te passen, zoals het uitschakelen van kopiëren en delen in het antwoord.Als uw kennisbron verwijst naar een gesegmenteerde index, zoals een index die is gevuld via geïntegreerde vectorisatie of een aangepaste vaardigheid voor tekst splitsen, moet u ervoor zorgen dat de vaardighedenset het vertrouwelijkheidslabel naar elke segmentrij projecteert. Zonder deze toewijzing worden verwijzingen op chunkniveau niet correct gefilterd tijdens het uitvoeren van een query.
Zie Verhoogd lezen voor administratieve onderzoeken voor controleerbare administratieve toegang tot gelabelde inhoud.
GEDRAG VAN MCP-server
Het MCP-eindpunt dat door elke Knowledge Base wordt weergegeven, bevat dezelfde velden voor vertrouwelijkheidslabels als de REST API. Wanneer een MCP-compatibele client het hulpprogramma knowledge_base_retrieve aanroept, bevat het resultaat van het hulpprogramma dezelfde verwijzingsspecifieke sensitivityLabelInfo en responsniveau-metadata.responseSensitivityLabelInfo als eerder in deze sectie zijn gedocumenteerd. MCP-clients passen labelafhankelijke weergave en beleidscontroles toe op basis van deze velden.
Voorbeelden van acties ophalen (preview)
In de volgende voorbeelden ziet u verschillende manieren om de actie ophalen aan te roepen met behulp van de 2026-08-01-preview API-versie. Deze versie ondersteunt de volledige functieset, waaronder antwoordsynthese en een configureerbare redenering. Zie de vorige secties voor 2026-04-01 gebruik.
- Modelnamen controleren in activiteitenlogboeken
- Een kennisbron vereisen om te slagen
- Een kennisbron uitsluiten van een aanvraag
- Kandidaatdocumenten per kennisbron afstemmen
- Definitieve grondingsdocumenten beperken
- Controleren of de standaardinstellingen voor knowledge base worden opgehaald
- Standaardredeneringsinspanning overschrijven en aanvraaglimieten instellen
- Laat de service de redeneringsinspanning kiezen
- Verwijzingen instellen voor elke kennisbron
- Minimale redeneringsinspanning gebruiken
Modelnamen controleren in activiteitenlogboeken
Stel includeActivity in op true om identiteitsvelden van het model te retourneren in door het model ondersteunde activiteitsrecords. Gebruik deze velden om te bevestigen welk geconfigureerd model queryplanning, antwoordsynthese of websamenvatting heeft verwerkt tijdens een ophaalaanvraag. In het volgende voorbeeld wordt de opgeslagen resultaatverwerking voor de geselecteerde bron in de aanvraag overschreven.
using Azure.Identity;
using Azure.Search.Documents.Indexes.Models;
using Azure.Search.Documents.KnowledgeBases;
using Azure.Search.Documents.KnowledgeBases.Models;
var kbClient = new KnowledgeBaseRetrievalClient(
new Uri("<search-endpoint>"),
"<knowledge-base-name>",
new DefaultAzureCredential()
);
var retrievalRequest = new KnowledgeBaseRetrievalRequest();
retrievalRequest.Messages.Add(
new KnowledgeBaseMessage(
content: new[]
{
new KnowledgeBaseMessageTextContent(
"Which policy applies to returns?"
)
}
) { Role = "user" }
);
retrievalRequest.IncludeActivity = true;
retrievalRequest.KnowledgeSourceParams.Add(
new SearchIndexKnowledgeSourceParams(
"<knowledge-source-name>"
)
{
ResultsProcessing = KnowledgeSourceResultsProcessing.None
}
);
var result = await kbClient.RetrieveAsync(retrievalRequest);
foreach (var activity in result.Value.Activity)
{
KnowledgeBaseActivityRecordModel? model = activity switch
{
KnowledgeBaseModelQueryPlanningActivityRecord queryPlanning =>
queryPlanning.Model,
KnowledgeBaseModelAnswerSynthesisActivityRecord answerSynthesis =>
answerSynthesis.Model,
KnowledgeBaseModelWebSummarizationActivityRecord webSummarization =>
webSummarization.Model,
_ => null
};
if (model is not null)
{
Console.WriteLine(
$"modelName={model.ModelName}, deploymentId={model.DeploymentId}");
}
}
Naslaginformatie:KnowledgeBaseRetrievalClient, KnowledgeBaseRetrievalRequest
from azure.identity import DefaultAzureCredential
from azure.search.documents.knowledgebases import (
KnowledgeBaseRetrievalClient,
)
from azure.search.documents.knowledgebases.models import (
KnowledgeBaseMessage,
KnowledgeBaseMessageTextContent,
KnowledgeBaseModelAnswerSynthesisActivityRecord,
KnowledgeBaseModelQueryPlanningActivityRecord,
KnowledgeBaseModelWebSummarizationActivityRecord,
KnowledgeBaseRetrievalRequest,
SearchIndexKnowledgeSourceParams,
)
kb_client = KnowledgeBaseRetrievalClient(
"<search-endpoint>",
DefaultAzureCredential(),
knowledge_base_name="<knowledge-base-name>",
)
model_activity_types = (
KnowledgeBaseModelQueryPlanningActivityRecord,
KnowledgeBaseModelAnswerSynthesisActivityRecord,
KnowledgeBaseModelWebSummarizationActivityRecord,
)
request = KnowledgeBaseRetrievalRequest(
messages=[
KnowledgeBaseMessage(
role="user",
content=[
KnowledgeBaseMessageTextContent(
text="Which policy applies to returns?"
)
],
)
],
include_activity=True,
knowledge_source_params=[
SearchIndexKnowledgeSourceParams(
knowledge_source_name="<knowledge-source-name>",
results_processing="none",
)
],
)
result = kb_client.retrieve(request)
for entry in result.activity or []:
if isinstance(entry, model_activity_types) and entry.model:
print(
"modelName=", entry.model.model_name,
"deploymentId=", entry.model.deployment_id,
)
Naslaginformatie:KnowledgeBaseRetrievalClient, KnowledgeBaseRetrievalRequest
POST {{search-endpoint}}/knowledgebases/{{knowledge-base-name}}/retrieve?api-version=2026-08-01-preview
Authorization: Bearer {{search-access-token}}
Content-Type: application/json
{
"messages": [
{
"role": "user",
"content": [
{ "type": "text", "text": "Which policy applies to returns?" }
]
}
],
"includeActivity": true,
"knowledgeSourceParams": [
{
"knowledgeSourceName": "{{knowledge-source-name}}",
"kind": "searchIndex",
"resultsProcessing": "none"
}
]
}
Naslaginformatie:Kennis ophalen - Ophalen
In het volgende fragment van het antwoord wordt de identiteit van het geneste model weergegeven:
{
"activity": [
{
"type": "modelQueryPlanning",
"id": 0,
"model": {
"modelName": "gpt-5-mini",
"deploymentId": "gpt-5-mini-deployment"
},
"inputTokens": 1842,
"outputTokens": 87,
"elapsedMs": 1923
},
{
"type": "searchIndex",
"id": 1,
"knowledgeSourceName": "operations-ks",
"count": 12,
"elapsedMs": 234
},
{
"type": "modelAnswerSynthesis",
"id": 2,
"model": {
"modelName": "gpt-5-mini",
"deploymentId": "gpt-5-mini-deployment"
},
"inputTokens": 2418,
"outputTokens": 179,
"elapsedMs": 931
}
]
}
Een kennisbron vereisen om te slagen
Stel failOnError in knowledgeSourceParams in om een kennisbron als vereist te markeren. Gebruik deze parameter wanneer een gedeeltelijk antwoord misleidend of niet-compatibel is als die bron niet beschikbaar is. De aanvraag retourneert 502 Bad Gateway als een vereiste bron mislukt, zelfs als een andere bron slaagt. Raadpleeg Problemen met de ophaalactie oplossen voor richtlijnen voor de afhandeling.
var retrievalRequest = new KnowledgeBaseRetrievalRequest();
retrievalRequest.Messages.Add(
new KnowledgeBaseMessage(
content: new[] {
new KnowledgeBaseMessageTextContent("Which HR policy applies?")
}
) { Role = "user" }
);
retrievalRequest.KnowledgeSourceParams.Add(
new SearchIndexKnowledgeSourceParams("hr-policy-ks")
{
FailOnError = true,
AlwaysQuerySource = true
}
);
retrievalRequest.KnowledgeSourceParams.Add(
new SearchIndexKnowledgeSourceParams("hr-faq-ks")
);
var result = await kbClient.RetrieveAsync(retrievalRequest);
Referentie:SearchIndexKnowledgeSourceParams
request = KnowledgeBaseRetrievalRequest(
messages=[
KnowledgeBaseMessage(
role="user",
content=[KnowledgeBaseMessageTextContent(text="Which HR policy applies?")],
)
],
knowledge_source_params=[
SearchIndexKnowledgeSourceParams(
knowledge_source_name="hr-policy-ks",
fail_on_error=True,
always_query_source=True,
),
SearchIndexKnowledgeSourceParams(
knowledge_source_name="hr-faq-ks",
),
],
)
result = kb_client.retrieve(request)
Referentie:SearchIndexKnowledgeSourceParams
POST {{search-endpoint}}/knowledgebases/{{knowledge-base-name}}/retrieve?api-version=2026-08-01-preview
Authorization: Bearer {{search-access-token}}
Content-Type: application/json
{
"messages": [
{
"role": "user",
"content": [
{ "type": "text", "text": "Which HR policy applies?" }
]
}
],
"knowledgeSourceParams": [
{
"knowledgeSourceName": "hr-policy-ks",
"kind": "searchIndex",
"failOnError": true,
"alwaysQuerySource": true
},
{
"knowledgeSourceName": "hr-faq-ks",
"kind": "searchIndex"
}
]
}
Naslaginformatie:Kennis ophalen - Ophalen
Een kennisbron uitsluiten van een aanvraag
Vanaf de 2026-08-01-preview API-versie stelt u neverQuerySource in op true voor elke kennisbron die u wilt uitsluiten van een ophaalverzoek. Aanvraagtijd neverQuerySource overschrijft een opgeslagen alwaysQuerySource waarde voor die aanvraag zonder de opgeslagen waarde te wijzigen.
In het volgende voorbeeld wordt een kennisbank bevraagd die product-docs-ks en troubleshooting-ks bevat, waarbij troubleshooting-ks van de aanvraag wordt uitgesloten.
var retrievalRequest = new KnowledgeBaseRetrievalRequest();
retrievalRequest.Messages.Add(
new KnowledgeBaseMessage(
content: new[] {
new KnowledgeBaseMessageTextContent(
"Explain the official SSO provisioning steps.")
}
) { Role = "user" }
);
retrievalRequest.KnowledgeSourceParams.Add(
new SearchIndexKnowledgeSourceParams("product-docs-ks")
);
retrievalRequest.KnowledgeSourceParams.Add(
new SearchIndexKnowledgeSourceParams("troubleshooting-ks")
{
NeverQuerySource = true
}
);
var result = await kbClient.RetrieveAsync(retrievalRequest);
Referentie:SearchIndexKnowledgeSourceParams
request = KnowledgeBaseRetrievalRequest(
messages=[
KnowledgeBaseMessage(
role="user",
content=[
KnowledgeBaseMessageTextContent(
text="Explain the official SSO provisioning steps."
)
],
)
],
knowledge_source_params=[
SearchIndexKnowledgeSourceParams(
knowledge_source_name="product-docs-ks",
),
SearchIndexKnowledgeSourceParams(
knowledge_source_name="troubleshooting-ks",
never_query_source=True,
),
],
)
result = kb_client.retrieve(request)
Referentie:SearchIndexKnowledgeSourceParams
POST {{search-endpoint}}/knowledgebases/{{knowledge-base-name}}/retrieve?api-version=2026-08-01-preview
Authorization: Bearer {{search-access-token}}
Content-Type: application/json
{
"messages": [
{
"role": "user",
"content": [
{
"type": "text",
"text": "Explain the official SSO provisioning steps."
}
]
}
],
"knowledgeSourceParams": [
{
"knowledgeSourceName": "product-docs-ks",
"kind": "searchIndex"
},
{
"knowledgeSourceName": "troubleshooting-ks",
"kind": "searchIndex",
"neverQuerySource": true
}
]
}
Naslaginformatie:Kennis ophalen - Ophalen
Kandidaatdocumenten per kennisbron afstemmen
Stel maxOutputDocuments in knowledgeSourceParams in om te beperken hoeveel kandidaatdocumenten een specifieke kennisbron aanlevert vóór de uiteindelijke resultatenselectie. Gebruik deze parameter als u de invoer van één bron aan de pijplijn wilt koppelen zonder dat dit van invloed is op andere bronnen.
var retrievalRequest = new KnowledgeBaseRetrievalRequest();
retrievalRequest.Messages.Add(
new KnowledgeBaseMessage(
content: new[] {
new KnowledgeBaseMessageTextContent("What safety procedures apply?")
}
) { Role = "user" }
);
retrievalRequest.KnowledgeSourceParams.Add(
new SearchIndexKnowledgeSourceParams("operations-ks")
{
MaxOutputDocuments = 50
}
);
var result = await kbClient.RetrieveAsync(retrievalRequest);
Referentie:SearchIndexKnowledgeSourceParams
request = KnowledgeBaseRetrievalRequest(
messages=[
KnowledgeBaseMessage(
role="user",
content=[KnowledgeBaseMessageTextContent(text="What safety procedures apply?")],
)
],
knowledge_source_params=[
SearchIndexKnowledgeSourceParams(
knowledge_source_name="operations-ks",
max_output_documents=50,
),
],
)
result = kb_client.retrieve(request)
Referentie:SearchIndexKnowledgeSourceParams
POST {{search-endpoint}}/knowledgebases/operations-kb/retrieve?api-version=2026-08-01-preview
Authorization: Bearer {{search-access-token}}
Content-Type: application/json
{
"messages": [
{
"role": "user",
"content": [
{ "type": "text", "text": "What safety procedures apply?" }
]
}
],
"knowledgeSourceParams": [
{
"knowledgeSourceName": "operations-ks",
"kind": "searchIndex",
"maxOutputDocuments": 50
}
]
}
Naslaginformatie:Kennis ophalen - Ophalen
Beperk definitieve onderbouwingsdocumenten
De parameter op het hoogste niveau maxOutputDocuments stelt een limiet aan het aantal groundingdocumenten dat wordt geretourneerd in de uiteindelijke retrieve-respons. Gebruik deze parameter wanneer uw toepassing een voorspelbaar bronvermeldings- of verwijzingsaantal nodig heeft.
var retrievalRequest = new KnowledgeBaseRetrievalRequest();
retrievalRequest.Messages.Add(
new KnowledgeBaseMessage(
content: new[] {
new KnowledgeBaseMessageTextContent("What is the return policy?")
}
) { Role = "user" }
);
retrievalRequest.OutputMode = "extractedData";
retrievalRequest.MaxOutputDocuments = 3;
retrievalRequest.MaxOutputSizeInTokens = 6000;
var result = await kbClient.RetrieveAsync(retrievalRequest);
Naslaginformatie:KnowledgeBaseRetrievalRequest
request = KnowledgeBaseRetrievalRequest(
messages=[
KnowledgeBaseMessage(
role="user",
content=[KnowledgeBaseMessageTextContent(text="What is the return policy?")],
)
],
output_mode="extractedData",
max_output_documents=3,
max_output_size_in_tokens=6000,
)
result = kb_client.retrieve(request)
Naslaginformatie:KnowledgeBaseRetrievalRequest
POST {{search-endpoint}}/knowledgebases/{{knowledge-base-name}}/retrieve?api-version=2026-08-01-preview
Authorization: Bearer {{search-access-token}}
Content-Type: application/json
{
"messages": [
{
"role": "user",
"content": [
{ "type": "text", "text": "What is the return policy?" }
]
}
],
"outputMode": "extractedData",
"maxOutputDocuments": 3,
"maxOutputSizeInTokens": 6000
}
Naslaginformatie:Kennis ophalen - Ophalen
In de volgende tabel ziet u hoe maxOutputDocuments en maxOutputSizeInTokens in alle vier de combinaties op elkaar inwerken.
maxOutputDocuments |
maxOutputSizeInTokens |
Gedrag |
|---|---|---|
| Onbepaald | Onbepaald | Maakt gebruik van het standaardgedrag maxOutputSizeInTokens van de responslimiet. |
| Onbepaald | Opgegeven | Verwijdert documenten zodra de limiet voor de payloadgrootte is bereikt. |
| Opgegeven | Onbepaald | Geeft maximaal het opgegeven aantal onderbouwende documenten terug en past geen maxOutputSizeInTokenslimiet toe. |
| Opgegeven | Opgegeven | Geeft maximaal maxOutputDocuments documenten terug, of zoveel documenten als er binnen maxOutputSizeInTokens passen, afhankelijk van welke limiet het eerst wordt bereikt. |
Controleren of de standaardinstellingen voor knowledge base worden opgehaald
Een Knowledge Base kan standaardinstellingen voor de hele aanvraag opslaan in retrieveDefaults. Stuur twee ophaalverzoeken om overerving en verzoekspecifieke overschrijvingen te verifiëren.
Voltooi voordat u begint de standaardlimieten voor ophalen configureren (preview). Bij de eerste aanvraag worden alle drie de limieten voor de hele aanvraag weggelaten, zodat de opgeslagen waarden van 45 seconden, acht documenten en 12.000 tokens van toepassing zijn. De tweede aanvraag overschrijft deze met 20 seconden, één document en 5000 tokens.
using System;
using Azure.Identity;
using Azure.Search.Documents;
using Azure.Search.Documents.KnowledgeBases;
using Azure.Search.Documents.KnowledgeBases.Models;
string searchEndpoint = "<search-endpoint>";
var options = new SearchClientOptions(
SearchClientOptions.ServiceVersion.V2026_08_01_Preview);
var kbClient = new KnowledgeBaseRetrievalClient(
new Uri(searchEndpoint),
"your-knowledge-base",
new DefaultAzureCredential(),
options);
KnowledgeBaseRetrievalRequest CreateRequest()
{
var request = new KnowledgeBaseRetrievalRequest();
request.Intents.Add(new KnowledgeRetrievalSemanticIntent(
"Summarize the latest support guidance."));
return request;
}
var inherited = await kbClient.RetrieveAsync(CreateRequest());
Console.WriteLine(
$"Stored defaults: {inherited.Value.References.Count} references");
KnowledgeBaseRetrievalRequest overriddenRequest = CreateRequest();
overriddenRequest.MaxRuntimeInSeconds = 20;
overriddenRequest.MaxOutputDocuments = 1;
overriddenRequest.MaxOutputSize = 5000;
var overridden = await kbClient.RetrieveAsync(overriddenRequest);
Console.WriteLine(
$"Request overrides: {overridden.Value.References.Count} references");
Naslaginformatie:KnowledgeBaseRetrievalClient, KnowledgeBaseRetrievalRequest
from azure.identity import DefaultAzureCredential
from azure.search.documents.knowledgebases import KnowledgeBaseRetrievalClient
from azure.search.documents.knowledgebases.models import (
KnowledgeBaseRetrievalRequest,
KnowledgeRetrievalSemanticIntent,
)
kb_client = KnowledgeBaseRetrievalClient(
endpoint="<search-endpoint>",
knowledge_base_name="your-knowledge-base",
credential=DefaultAzureCredential(),
api_version="2026-08-01-preview",
)
def create_request(**limits):
return KnowledgeBaseRetrievalRequest(
intents=[
KnowledgeRetrievalSemanticIntent(
search="Summarize the latest support guidance.",
)
],
**limits,
)
inherited = kb_client.retrieve(create_request())
print(f"Stored defaults: {len(inherited.references or [])} references")
overridden = kb_client.retrieve(
create_request(
max_runtime_in_seconds=20,
max_output_documents=1,
max_output_size=5000,
)
)
print(f"Request overrides: {len(overridden.references or [])} references")
Naslaginformatie:KnowledgeBaseRetrievalClient, KnowledgeBaseRetrievalRequest
Verzend eerst een aanvraag die de drie limietvelden voor de hele aanvraag weglaat.
POST {{search-endpoint}}/knowledgebases/your-knowledge-base/retrieve?api-version=2026-08-01-preview
Content-Type: application/json
Authorization: Bearer {{search-access-token}}
{
"intents": [
{
"type": "semantic",
"search": "Summarize the latest support guidance."
}
]
}
Vervolgens overschrijft u alle drie de waarden voor één verzoek.
POST {{search-endpoint}}/knowledgebases/your-knowledge-base/retrieve?api-version=2026-08-01-preview
Content-Type: application/json
Authorization: Bearer {{search-access-token}}
{
"intents": [
{
"type": "semantic",
"search": "Summarize the latest support guidance."
}
],
"maxRuntimeInSeconds": 20,
"maxOutputDocuments": 1,
"maxOutputSize": 5000
}
Naslaginformatie:Kennis ophalen - Ophalen
Het referentieaantal geeft aan of de opgeslagen waarde of de waarde op aanvraagniveau van toepassing is op maxOutputDocuments: het eerste antwoord bevat maximaal acht referenties en het tweede antwoord maximaal één. Een antwoord kan minder verwijzingen bevatten wanneer er minder documenten overeenkomen. Het antwoord rapporteert niet het effectieve runtime- of uitvoertokenbudget, maar deze waarden bepalen nog steeds de verwerking van aanvragen. Bij overschrijvingen van aanvragen worden de opgeslagen standaardinstellingen niet gewijzigd.
Standaardredeneringsinspanning overschrijven en aanvraaglimieten instellen
In het volgende voorbeeld wordt antwoordsynthese gespecificeerd, dus moet de redeneerinspanning voor het ophalen low of medium zijn. Het stelt ook maxRuntimeInSeconds in om de uitvoeringstijd voor het ophalen te beperken en maxOutputSizeInTokens om de payloadgrootte van de reactie te beperken.
maxRuntimeInSeconds accepteert waarden van 10 tot en met 600 seconden en wordt standaard ingesteld op 90 seconden. Het maximum van 600 seconden (10 minuten) is alleen van toepassing op de Azure AI Zoeken aanvraag ophalen.
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.MaxOutputSizeInTokens = 6000;
var result = await kbClient.RetrieveAsync(retrievalRequest);
Console.WriteLine(
(result.Value.Response[0].Content[0] as KnowledgeBaseMessageTextContent)!.Text
);
Naslaginformatie:KnowledgeBaseRetrievalClient, KnowledgeBaseRetrievalRequest
from azure.search.documents.knowledgebases.models import (
KnowledgeRetrievalLowReasoningEffort,
KnowledgeRetrievalOutputMode,
)
request = KnowledgeBaseRetrievalRequest(
messages=[
KnowledgeBaseMessage(
role="user",
content=[KnowledgeBaseMessageTextContent(text="What companies are in the financial sector?")],
)
],
retrieval_reasoning_effort=KnowledgeRetrievalLowReasoningEffort(),
output_mode=KnowledgeRetrievalOutputMode.ANSWER_SYNTHESIS,
max_runtime_in_seconds=30,
max_output_size_in_tokens=6000,
)
result = kb_client.retrieve(request)
print(result.response[0].content[0].text)
Naslaginformatie:KnowledgeBaseRetrievalClient, KnowledgeBaseRetrievalRequest
POST {{search-endpoint}}/knowledgebases/kb-override/retrieve?api-version=2026-08-01-preview
Authorization: Bearer {{search-access-token}}
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,
"maxOutputSizeInTokens": 6000
}
Naslaginformatie:Kennis ophalen - Ophalen
Laat de service de redeneringsinspanning kiezen
Stel retrievalReasoningEffort.kind in op auto in een ophaalverzoek om de standaardwaarde van de kennisbank te overschrijven. Zie De redeneerinspanning voor ophalen instellen (preview) voor meer informatie over automatisch redeneren.
{
"retrievalReasoningEffort": {
"kind": "auto"
}
}
Naslaginformatie:Kennis ophalen - Ophalen
Verwijzingen instellen voor elke kennisbron
Gebruik includeReferences en includeReferenceSourceData in knowledgeSourceParams om te bepalen welke bronnen worden weergegeven in de matrix met verwijzingen en hoeveel brongegevens elke vermelding bevat. In het volgende voorbeeld wordt de standaardredenering van de Knowledge Base gebruikt.
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
);
Naslaginformatie: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(request)
print(result.response[0].content[0].text)
Naslaginformatie:KnowledgeBaseRetrievalClient, SearchIndexKnowledgeSourceParams
POST {{search-endpoint}}/knowledgebases/kb-medium-example/retrieve?api-version=2026-08-01-preview
Authorization: Bearer {{search-access-token}}
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
}
]
}
Naslaginformatie:Kennis ophalen - Ophalen
Minimale redeneringsinspanning gebruiken
In het volgende voorbeeld is er geen LLM voor intelligente queryplanning of antwoordsynthese. De querytekenreeks gaat naar de agentische ophaalengine voor trefwoordzoekopdrachten of hybride zoekopdrachten.
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
);
Naslaginformatie:KnowledgeBaseRetrievalClient, KnowledgeBaseRetrievalRequest
from azure.search.documents.knowledgebases.models import (
KnowledgeBaseRetrievalRequest,
KnowledgeRetrievalSemanticIntent,
)
request = KnowledgeBaseRetrievalRequest(
intents=[
KnowledgeRetrievalSemanticIntent(
search="what is a brokerage",
)
]
)
result = kb_client.retrieve(request)
print(result.response[0].content[0].text)
Naslaginformatie:KnowledgeBaseRetrievalClient, KnowledgeBaseRetrievalRequest
POST {{search-endpoint}}/knowledgebases/kb-minimal/retrieve?api-version=2026-08-01-preview
Authorization: Bearer {{search-access-token}}
Content-Type: application/json
{
"intents": [
{
"type": "semantic",
"search": "what is a brokerage"
}
]
}
Naslaginformatie:Kennis ophalen - Ophalen
Problemen met de ophaalactie oplossen
In 2026-08-01-previewde antwoordstatus wordt aangegeven of het ophalen is geslaagd, gedeeltelijk is geslaagd of mislukt en wat er vervolgens moet worden uitgevoerd. Gebruik de volgende tabel om elke status toe te wijzen aan de betekenis en bekijk vervolgens de bijbehorende sectie voor hulp bij het oplossen van problemen.
| Status | Meaning |
|---|---|
200 OK |
Ophalen is voltooid. Een document kan nog steeds worden weggelaten als de inhoud groter is dan het uitvoerbudget. Zie Lege antwoorden voor meer informatie. |
400 Bad Request |
De validatie van de ophaalaanvraag is mislukt voordat het ophalen is gestart. |
206 Partial Content |
Er is ten minste één bron geslaagd en er is geen mislukte bron gemarkeerd failOnError. Het antwoord bevat resultaten van de bronnen die zijn geslaagd. |
502 Bad Gateway |
Elke geselecteerde bron is mislukt of een bron die is gemarkeerd failOnError: true , is mislukt. |
Noteer voor elke respons die geen 200 is de API-versie, tijdstempel, opgeschoonde aanvraagtekst, responsheaders en aanvraag- of correlatie-id. Deze details helpen u bij het diagnosticeren van de fout en het probleem delen met ondersteuning, indien nodig.
400 Bad Request
Gebruik de fout op het hoogste niveau om de ongeldige aanvraageigenschap te identificeren. Veelvoorkomende oorzaken zijn onder andere:
- Een
knowledgeSourceNameinknowledgeSourceParamsis niet gekoppeld aan de knowledge base ofkindkomt niet overeen met de gekoppelde bron. - Een aanvraagwaarde valt buiten het ondersteunde bereik of een optie vereist een andere optie die niet is ingeschakeld. Bijvoorbeeld,
includeReferenceSourceDatavereistincludeReferences. -
retrievalReasoningEffort.kindisauto, maar de aanvraag maakt gebruik van een API-versie ouder dan2026-08-01-preview. - De aanvraag maakt gebruik
autovan ,lowofmedium, maar de knowledge base definieert geen model. - Voor bronuitsluiting tijdens de aanvraag (preview) stelt dezelfde vermelding zowel
alwaysQuerySourcealsneverQuerySourcein optrue, anders wordt elke gekoppelde kennisbron uitgesloten.
Voordat u de aanvraag opnieuw probeert uit te voeren, corrigeert u de eigenschap die is geïdentificeerd door de fout op het hoogste niveau.
206 Partial Content
Controleer elke activity vermelding die een error bevat. Een bron ophalen activiteit identificeert de mislukte kennisbron en een modelactiviteit identificeert de mislukte verwerkingsfase. De hoofdtekst van het antwoord bevat nog steeds de resultaten die zijn geslaagd.
Voor fouten bij bronophaalactiviteiten zijn veelvoorkomende oorzaken:
- Ongeldige invoer tijdens de query, zoals een ongeldig opgemaakte
filterAddOn-expressie. - Afwijking van kennisbron- of indexconfiguratie, zoals een hernoemd veld, ontbrekende semantische configuratie of ongeldige vectorizer.
- Ontbrekende of ongeldige afhankelijkheidsautorisatie of onvoldoende machtigingen voor de identiteit die wordt gebruikt om een query uit te voeren op de bron.
- Afhankelijkheidsbeperking, time-out of tijdelijke beschikbaarheidsfouten.
Voor een modelactiviteitsfout gebruikt u de activiteit type om de fase voor mislukte verwerking te identificeren. Een fout geeft bijvoorbeeld modelWebSummarization aan dat samenvatting van webresultaten is mislukt.
Als uw toepassing gedeeltelijke resultaten toestaat, verwerkt u de geslaagde resultaten en registreert u elke mislukte bron- of modelfase. Corrigeer configuratie-, autorisatie- en machtigingsfouten voordat u het opnieuw probeert. Gebruik bij snelheidsbeperking, time-out of tijdelijke beschikbaarheidsfouten een beperkt aantal nieuwe pogingen met oplopende wachttijd.
Als de resultaten niet veilig zijn zonder een specifieke bron en het brontype alwaysQuerySource ondersteunt, stelt u zowel alwaysQuerySource als failOnError in. De eerste optie zorgt ervoor dat de bron is geselecteerd en de tweede retourneert een harde fout als het uitvoeren van een query mislukt.
McP-serverkennisbronnen (preview) bieden geen ondersteuning alwaysQuerySource; voor deze bronnen failOnError geldt alleen wanneer de bron is geselecteerd.
failOnError is niet van toepassing op fouten in modelactiviteiten.
502 Bad Gateway
De fout op het hoogste niveau beschrijft een van de twee paden voor harde fouten:
- Elke geselecteerde bron is mislukt: Elke geselecteerde bron heeft een fout geretourneerd. Een bron die succesvol is voltooid zonder overeenkomende documenten, is geen mislukte bron. Inspecteer elke bronfout voor een gedeelde configuratie, autorisatie, afhankelijkheid of beschikbaarheidsprobleem.
-
Een
failOnErrorbron is mislukt: een vereiste bron kan niet worden opgevraagd. Andere bronnen zijn mogelijk geslaagd, maar de service retourneert geen gedeeltelijk resultaat omdat de vereiste bron is mislukt.
De onderliggende bronstoringen zijn over het algemeen dezelfde typen als die welke zijn beschreven voor 206 Partial Content: ongeldige, bronspecifieke invoer, afwijkingen in de bron- of indexconfiguratie, autorisatie of machtigingen voor afhankelijkheden, snelheidsbeperking, time-outs of tijdelijke onbeschikbaarheid van afhankelijkheden.
Een harde 502 reactie kan de activity matrix weglaten en alleen de bronnaam en de onderliggende fout opgeven in het foutbericht op het hoogste niveau. Corrigeer configuratie-, autorisatie- en machtigingsfouten voordat u het opnieuw probeert. Gebruik alleen een beperkt aantal nieuwe pogingen met oplopende wachttijd bij snelheidsbeperking, time-outs of tijdelijke beschikbaarheidsproblemen. Interpreteer geen 502 Bad Gateway antwoord als een Azure AI Zoeken storing zonder de onderliggende bronfout te onderzoeken.
Lege antwoorden
De zoekstap kan een document vinden, maar de service kan het nog steeds weglaten uit het uiteindelijke antwoord als de geaarde inhoud het maxOutputSizeInTokens uitvoerbudget (maxOutputSize in 2026-05-01-preview en later) overschrijdt. Wanneer deze voorwaarde optreedt, geeft de activiteitmatrix aan dat overeenkomsten zijn gevonden en bevat de activiteitsrecord een waarschuwing dat het meest relevante document de maximale uitvoergrootte heeft overschreden. De verwijzingsmatrix- en geaarde antwoordinhoud zijn leeg voor dat document. Als u meer inhoud wilt behouden, verhoogt u maxOutputSizeInTokens.
U kunt dit gedrag voorkomen door grote brondocumenten te indexeren als kleinere segmenten met stabiele id's en bronmetagegevens. Dit geldt met name voor lange handleidingen, beleidsregels of knowledge base-artikelen.
Het MCP-eindpunt aanroepen
Warning
MCP-implementaties zijn vatbaar voor risico's, zoals aanvallen, trapsgewijze fouten en verlies van menselijk toezicht. U kunt deze risico's beperken door MCP-servers te controleren op beveiliging en betrouwbaarheid, door de aanbevolen procedures van Microsoft en industry best practices te volgen en goedkeuringsmechanismen te implementeren en trapsgewijs gedrag te controleren.
MCP is een open protocol dat standaardiseert hoe AI-toepassingen verbinding maken met externe gegevensbronnen en hulpprogramma's.
In Azure AI Zoeken is elke Knowledge Base een zelfstandige MCP-server die het hulpprogramma knowledge_base_retrieve beschikbaar maakt. Elke MCP-compatibele client, waaronder Foundry Agent Service, GitHub Copilot, Claude en Cursor, kan dit hulpprogramma aanroepen om een query uit te voeren op de knowledge base.
Verifiëren bij het MCP-eindpunt
Elke Knowledge Base heeft een MCP-eindpunt op de volgende URL:
https://<search-service-name>.search.windows.net/knowledgebases/<knowledge-base-name>/mcp?api-version=<api-version>
De API-versie die u opgeeft, bepaalt wat de verbinding retourneert. Door de knowledge base te gebruiken 2026-08-01-preview, worden gesynthetiseerde antwoorden geretourneerd wanneer de onderliggende knowledge base is geconfigureerd met een LLM en een compatibele redeneringsinspanning. Door 2026-04-01 te gebruiken, is de ophaling altijd minimaal en extractief, en geeft de verbinding alleen onderbouwende gegevens terug.
Hoe u zich bij dit eindpunt verifieert, is afhankelijk van uw MCP-client. Wanneer u de Azure OpenAI Responses API gebruikt met het knowledge_base_retrieve MCP-hulpprogramma, authenticeert u zowel de Responses API-aanroep naar Azure OpenAI als de MCP-aanvraag naar Azure AI Zoeken. Als uw MCP-client dit eindpunt rechtstreeks aanroept, verifieert u zich alleen bij Azure AI Zoeken.
Gebruik voor Azure AI Zoeken verificatie een van de volgende methoden:
-
Geef een bearer-token door in de
Authorizationheader (aanbevolen) -
Een beheerderssleutel doorgeven in de
api-keyheader
Opmerking
MCP-clients configureren aangepaste headers anders. Foundry Agent Service injecteert bijvoorbeeld headers via projectverbindingen, terwijl clients zoals GitHub Copilot headers in MCP-server-JSON vereisen.
Een Bearer-token gebruiken voor MCP-verificatie
De aanbevolen methode voor MCP-verificatie is een Bearer-token, waardoor gevoelige sleutels niet in configuratiebestanden worden opgeslagen. Aan de identiteit achter het token moet de rol Search Index Data Reader zijn toegewezen aan de zoekservice. Voor meer informatie, zie Verbind uw app met Azure AI Zoeken met behulp van identiteiten.
#pragma warning disable OPENAI001
using Azure.AI.OpenAI;
using Azure.Core;
using Azure.Identity;
using OpenAI.Responses;
using System;
using System.Collections.Generic;
string openAiEndpoint = Environment.GetEnvironmentVariable("AZURE_OPENAI_ENDPOINT")!; // Example: https://<resource-name>.openai.azure.com
string mcpServerUrl = Environment.GetEnvironmentVariable("AZURE_SEARCH_MCP_ENDPOINT")!; // Example: https://<search-service-name>.search.windows.net/knowledgebases/<knowledge-base-name>/mcp?api-version=<api-version>
DefaultAzureCredential credential = new();
// Create the Azure OpenAI Responses client
AzureOpenAIClient azureClient = new(new Uri(openAiEndpoint), credential);
ResponsesClient openAIClient = azureClient.GetResponsesClient();
// Get a bearer token for Azure AI Search
string searchToken = credential.GetToken(
new TokenRequestContext(new[] { "https://search.azure.com/.default" })
).Token;
// Configure the MCP tool for knowledge base retrieval
McpTool mcpTool = ResponseTool.CreateMcpTool(
serverLabel: "search_kb",
serverUri: new Uri(mcpServerUrl),
headers: new Dictionary<string, string>
{
["Authorization"] = $"Bearer {searchToken}",
},
allowedTools: new McpToolFilter { ToolNames = { "knowledge_base_retrieve" } },
toolCallApprovalPolicy: new McpToolCallApprovalPolicy(
GlobalMcpToolCallApprovalPolicy.NeverRequireApproval)
);
// Build the response request with the MCP tool attached
CreateResponseOptions options = new()
{
Model = "MODEL_NAME",
InputItems =
{
ResponseItem.CreateUserMessageItem(
"What causes the strongest nighttime brightness patterns in this dataset?")
},
Tools = { mcpTool }
};
ResponseResult response = await openAIClient.CreateResponseAsync(options);
Console.WriteLine(response.GetOutputText());
Naslaginformatie:De Azure OpenAI-antwoorden-API gebruiken
import os
from azure.identity import DefaultAzureCredential, get_bearer_token_provider
from openai import AzureOpenAI
openai_endpoint = os.environ["AZURE_OPENAI_ENDPOINT"] # Example: https://<resource-name>.openai.azure.com
mcp_server_url = os.environ["AZURE_SEARCH_MCP_ENDPOINT"] # Example: https://<search-service-name>.search.windows.net/knowledgebases/<knowledge-base-name>/mcp?api-version=<api-version>
credential = DefaultAzureCredential()
# Create token providers for Azure OpenAI and Azure AI Search
openai_token_provider = get_bearer_token_provider(
credential, "https://cognitiveservices.azure.com/.default"
)
search_token_provider = get_bearer_token_provider(
credential, "https://search.azure.com/.default"
)
# Create the Azure OpenAI client
client = AzureOpenAI(
azure_endpoint=openai_endpoint,
azure_ad_token_provider=openai_token_provider,
api_version=os.environ["OPENAI_API_VERSION"], # Example: 2025-04-01-preview
)
# Create a response using the MCP tool configuration
response = client.responses.create(
model="MODEL_NAME",
input="What causes the strongest nighttime brightness patterns in this dataset?",
tools=[
{
"type": "mcp",
"server_label": "search_kb",
"server_url": mcp_server_url,
"allowed_tools": ["knowledge_base_retrieve"],
"headers": {
"Authorization": f"Bearer {search_token_provider()}"
},
"require_approval": "never",
}
],
)
print(response.output_text)
Naslaginformatie:De Azure OpenAI-antwoorden-API gebruiken
// This code snippet is currently unavailable.
Een beheersleutel gebruiken voor MCP-verificatie
Een beheerderssleutel verleent volledige lees-/schrijftoegang tot de zoekservice, dus gebruik deze alleen in ontwikkelomgevingen of wanneer een Bearer-token niet beschikbaar is. Zie Connect to Azure AI Zoeken using API keys voor meer informatie.
Tip
In het volgende voorbeeld ziet u alleen de header die verschilt van het bearer-tokenvoorbeeld. Zie Een Bearer-token gebruiken voor MCP-verificatie voor de volledige installatie.
#pragma warning disable OPENAI001
using OpenAI.Responses;
using System;
using System.Collections.Generic;
string mcpServerUrl = Environment.GetEnvironmentVariable("AZURE_SEARCH_MCP_ENDPOINT")!; // Example: https://<search-service-name>.search.windows.net/knowledgebases/<knowledge-base-name>/mcp?api-version=<api-version>
string searchAdminKey = Environment.GetEnvironmentVariable("AZURE_SEARCH_ADMIN_KEY")!; // Example: <search-api-key>
McpTool mcpTool = ResponseTool.CreateMcpTool(
serverLabel: "search_kb",
serverUri: new Uri(mcpServerUrl),
headers: new Dictionary<string, string> { ["api-key"] = searchAdminKey },
allowedTools: new McpToolFilter { ToolNames = { "knowledge_base_retrieve" } },
toolCallApprovalPolicy: new McpToolCallApprovalPolicy(
GlobalMcpToolCallApprovalPolicy.NeverRequireApproval)
);
Naslaginformatie:De Azure OpenAI-antwoorden-API gebruiken
import os
mcp_server_url = os.environ["AZURE_SEARCH_MCP_ENDPOINT"] # Example: https://<search-service-name>.search.windows.net/knowledgebases/<knowledge-base-name>/mcp?api-version=<api-version>
search_admin_key = os.environ["AZURE_SEARCH_ADMIN_KEY"] # Example: <search-api-key>
tools = [
{
"type": "mcp",
"server_label": "search_kb",
"server_url": mcp_server_url,
"allowed_tools": ["knowledge_base_retrieve"],
"headers": {"api-key": search_admin_key},
"require_approval": "never",
}
]
Naslaginformatie:De Azure OpenAI-antwoorden-API gebruiken
// This code snippet is currently unavailable.
Het MCP-antwoord controleren
Wanneer een MCP-client knowledge_base_retrieve aanroept, ontvangt deze het resultaat van een MCP-hulpprogramma in plaats van de omhulling van de retrieve-actie met response, activity en references. Veel MCP-clients plaatsen dat toolresultaat onder een top-level `result`-object, dus de payload die u kunt verwachten is `result.content[]`.
{
"result": {
"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>\"}]"
}
]
}
}
Belangrijkste punten:
result.content[]bevat de uitvoer van de MCP-tool die door de kennisbank wordt geretourneerd.result.content[].typeistext.result.content[].textbevat de opgehaalde grondgegevens als een met JSON gecodeerde tekenreeks.In tegenstelling tot de ophaalactie retourneert het huidige MCP-antwoord geen afzonderlijke
activity- ofreferences-arrays en vult het geenresource-items in voor de geretourneerde inhoud.
Verwante inhoud
- Agentisch ophalen in Azure AI Zoeken
- ACL- en RBAC-afdwinging tijdens query-uitvoering (preview)
- Een blob-indexer of kennisbron gebruiken om metagegevens van RBAC-scopes op te nemen (preview)
- Agentic RAG: Bouw een redeneringsengine met Azure AI Zoeken (YouTube-video)
- Azure OpenAI-demo met agentisch ophalen