Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Poznámka
Azure AI Vyhledávač je k dispozici prostřednictvím portálu Azure, rozhraní REST API a Sady Azure SDK. Podporuje také Foundry IQ, spravovanou znalostní vrstvu, která transformuje podnikový obsah na opakovaně použitelné znalostní báze s podporou oprávnění pro agenty na portálu Microsoft Foundry.
Důležité
Na funkce, možnosti nebo vlastnosti označené jako (Preview) se nevztahuje smlouva o úrovni služeb, nejsou doporučené pro produkční úlohy a mohou se změnit nebo být omezeny dříve, než budou obecně k dispozici. Podmínky Azure AI Vyhledávač Preview platí pro všechny funkce ve verzi Preview, ať už jsou samostatné nebo součástí obecně dostupné funkce.
V systému pro agentní načítání akce načtení vyvolá paralelní zpracování dotazů ze znalostní báze. Akci načtení můžete použít přímo pomocí rozhraní REST API služby vyhledávání nebo Azure SDK. Každá znalostní báze také zveřejňuje koncový bod PROTOKOLU MCP (Model Context Protocol) pro použití agenty kompatibilními s MCP.
Tento článek vysvětluje, jak volat obě metody načítání s volitelným vynucením oprávnění. Popisuje nejprve akci načtení a koncový bod MCP později, protože výsledek nástroje MCP se v současné době liší od tvaru odpovědi REST a sady SDK.
Pokud chcete nastavit datový tok, který připojuje Azure AI Vyhledávač ke službě agenta Foundry přes MCP, přečtěte si téma Výukový program: Vytvoření komplexního agentického řešení pro vyhledávání.
Podpora využití
| portál Azure | Portál Microsoft Foundry | .NET SDK | Python SDK | Java SDK | JavaScript SDK | REST API |
|---|---|---|---|---|---|---|
| ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
Požadavky
Služba Azure AI Vyhledávač s bází znalostí.
Informace o přístupu ke sdíleném modelu a nastavení klienta najdete v tématu Požadavky pro vytvoření znalostní báze.
Oprávnění k dotazování znalostních bází Nakonfigurujte ověřování bez klíčů pomocí role Čtenář dat indexu vyhledávání přiřazenou k vašemu uživatelskému účtu (doporučeno) nebo použijte klíč rozhraní API pro dotazy.
Pokud koncový bod MCP voláte prostřednictvím rozhraní API pro odpovědi OpenAI Azure, potřebujete:
Nasazený model LLM a role uživatele OpenAI ve službě Cognitive Services (nebo klíč rozhraní API) pro prostředek Foundry. V případě potřeby můžete znovu použít LLM a prostředek zadaný ve znalostní bázi.
Balíček
Azure.AI.OpenAI:dotnet add package Azure.AI.OpenAI
Požadovaný balíček
Azure.Search.Documents:Pro funkce
2026-08-01-previewje k dispozici nejnovější balíček Preview:dotnet add package Azure.Search.Documents --prereleasePro funkce
2026-04-01: nejnovější stabilní balíček:dotnet add package Azure.Search.Documents
Balíček
Azure.Identitypro bezklíčové ověřování:dotnet add package Azure.Identity
Pokud koncový bod MCP voláte prostřednictvím rozhraní API pro odpovědi OpenAI Azure, potřebujete:
Nasazený model LLM a role uživatele OpenAI ve službě Cognitive Services (nebo klíč rozhraní API) pro prostředek Foundry. V případě potřeby můžete znovu použít LLM a prostředek zadaný ve znalostní bázi.
Balíček
openai:pip install openai
Požadovaný balíček
azure-search-documents:Pro funkce
2026-08-01-previewje k dispozici nejnovější balíček Preview:pip install --pre azure-search-documentsPro funkce
2026-04-01: nejnovější stabilní balíček:pip install azure-search-documents
Balíček
azure-identitypro bezklíčové ověřování:pip install azure-identity
Požadovaná verze rozhraní REST API vyhledávací služby:
Pro funkce ve verzi Preview: 2026-08-01-preview
Obecně dostupné funkce: 2026-04-01
Pro bezklíčové ověřování uveďte v
Authorizationhlavičce každého požadavku HTTP token Microsoft Entra ID.
Limitations
U zdrojů znalostí pro vyhledávací index operace načítání při povolení změny pořadí výsledků používá sémantickou konfiguraci zdroje znalostí. Nepoužije profily vyhodnocování podkladového indexu, včetně defaultScoringProfile. Odpovědi na načtení také nezobrazují @search.rerankerBoostedScore.
Spustit akci načtení
Určíte akci načtení ve znalostní bázi. Text požadavku obsahuje vstup dotazu a volitelný seznam zdrojů znalostí, na které se má zaměřit.
Verze rozhraní API 2026-04-01 podporuje pouze vstup intents a minimální extraktivní vyhledávání. Funkce dostupné pouze ve verzi Preview, včetně vstupu dat messages, plánování dotazů, syntézy odpovědí a konfigurovatelného úsilí o odůvodnění, nejsou podporovány. Použijte 2026-08-01-preview pro plnou funkčnost.
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
);
Reference:KnowledgeBaseRetrievalClient, KnowledgeBaseRetrievalRequest
from azure.identity import DefaultAzureCredential
from azure.search.documents.knowledgebases import KnowledgeBaseRetrievalClient
from azure.search.documents.knowledgebases.models import (
KnowledgeBaseMessage,
KnowledgeBaseMessageTextContent,
KnowledgeBaseRetrievalRequest,
SearchIndexKnowledgeSourceParams,
)
# Create knowledge base retrieval client
kb_client = KnowledgeBaseRetrievalClient(
endpoint="<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)
Reference: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"
}
]
}
Reference:Získávání znalostí – Získávání
Poskytnutí obrázků pro syntézu odpovědí (náhled)
U zdrojů znalostí blob, indexovaný OneLake a indexovaný SharePoint, které nakonfigurujete s úložištěm prostředků, můžete navazujícímu modelu pro syntézu odpovědí předat obrázky vložené v dokumentech spolu s textem. Nastavte enableImageServing u odpovídající položky v knowledgeSourceParams, aby se přepsalo výchozí nastavení definované v definici znalostní báze. Odpověď na dotazování neobsahuje vyhrazená pole pro jednotlivé cesty k obrázkům ani bajtová data obrázků poskytnutá modelu.
Zobrazování obrázků funguje pouze tehdy, když je outputModeanswerSynthesis, a není podporováno pro zdroje znalostí, které mají nakonfigurováno ingestionPermissionOptions. Postup nastavení, tabulku priorit a informace o tom, jak zkontrolovat statistiky poskytování obrázků, najdete v článku Zobrazení obrázků vložených v dokumentech v agentic retrieval (Preview).
Zakázat přeřazování pro zdroj znalostí (verze Preview)
Od verze rozhraní API 2026-08-01-preview nastavte u položky knowledgeSourceParams parametr "resultsProcessing": "none", aby se pro konkrétní zdroj znalostí obešla změna pořadí a zachovalo se jeho původní pořadí výsledků.
resultsProcessing můžete také uložit na zdroji znalostí jako výchozí hodnotu. Tuto vlastnost podporují všechny druhy zdrojů znalostí.
Následující příklad vynechává přeřazení pro product-catalog-ks u jednoho požadavku na načtení.
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)}");
Reference: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)
Reference: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"
}
]
}
Reference:Získávání znalostí – Získávání
Nastavte "resultsProcessing": "rerank", nebo jej vynechte, pokud neexistuje žádná uložená výchozí hodnota, aby se použila pipeline pro opětovné řazení. Azure AI Vyhledávač vyřeší efektivní hodnotu pro každý zdroj v tomto pořadí:
-
resultsProcessingvknowledgeSourceParamsv požadavku na načtení. -
resultsProcessinguložené ve zdroji znalostí. -
rerankkdyž není přítomna ani jedna z vlastností.
Pro zdroj resultsProcessingznalostí serveru MCP má hodnota nastavená na jednotlivém nástroji přednost před požadavkem a uloženými hodnotami.
Tip
resultsProcessing mění způsob zpracování výsledků, nikoli to, na které zdroje se dotazuje. Nastavte alwaysQuerySource na true, je-li nutné dotázat se zdroje znalostí.
Pokud je noneefektivní hodnota:
- Odkazy ze zdroje znalostí vynechávají
rerankerScorea výsledky udržují jejich základní pořadí v rámci aktivity načítání zdroje. - Když některý zdroj obejde reranking, Azure AI Vyhledávač rozdělí konečné výsledky mezi aktivity metodou round-robin podle pořadí deklarace zdrojů znalostí. Přeřazené aktivity zůstávají seřazené podle skóre.
- Deduplikace a omezení pro jednotlivé zdroje, dokumenty a tokeny stále platí, takže se v odpovědi neobjeví každý nalezený výsledek.
Azure AI Vyhledávač ověří rerankerThreshold v tomto pořadí:
- Vyhledávání určí
resultsProcessingz požadavku na načtení a z uložené hodnoty zdroje znalostí. - Pokud je výsledná hodnota
nonea požadavek obsahujererankerThreshold, Search vrátí400 Bad Request. - V případě nástroje serveru MCP použije Search po ověření požadavku hodnotu
resultsProcessingna úrovni nástroje.
V důsledku toho se nastavení nástroje MCP nezmění, jestli požadavek projde ověřením. Hodnota none na úrovni nástroje nezpůsobí chybu prahové meze a hodnota rerank na úrovni nástroje nezabrání chybě, když se požadavek nebo uložená hodnota vyhodnotí na none.
Pokud chcete ověřit, který režim se spustil, zkontrolujte, jestli odkazy zdroje znalostí obsahují rerankerScore. Nespoléhejte na semanticConfigurationName, protože může být null místo toho, aby bylo vynecháno.
Chování indexu vyhledávání
Pro zdroje znalostí, které cílí na index vyhledávání, je semanticimplicitní typ dotazu a neexistuje žádný režim vyhledávání. Při rerankingu se ke spouštění dotazu používá semanticConfigurationName. Jiná nastavení zdroje, včetně searchFields a sourceDataFields, platí v obou režimech.
Agentní vyhledávání nepřijímá vstupy scoringProfile ani scoringParameters. Potřebujete-li u indexovaných zdrojů znalostí upřednostnit novější obsah, použijte místo profilu hodnocení indexu vyhledávání zohledňující aktuálnost (Preview).
Pokud index obsahuje vektorová pole, potřebujete platnou definici vektorizátoru, aby modul načítání agentů mohl vektorizovat vstupy dotazu. V opačném případě se pole vektoru ignorují.
Další informace viz Vytvoření indexu pro agentické vyhledávání.
Načtení výsledků streamu (Preview)
Od verze 2026-08-01-preview rozhraní API můžete výsledky přijímat jako proud událostí odesílaných serverem (SSE) namísto čekání na jednu odpověď ve formátu JSON. Pomocí streamování může váš klient zobrazit plánování dotazů, zdrojovou aktivitu a syntetizovanou odpověď nebo extrahovanou odpověď v daném pořadí, jakmile bude každá část dostupná.
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}");
}
Referenční informace: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}")
Referenční informace:KnowledgeBaseRetrievalClient
Pokud se chcete přihlásit ke streamování, zahrňte hlavičku Accept: text/event-stream do žádosti o načtení. Bez této hlavičky vrátí akce načtení standardní odpověď JSON.
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
}
]
}
Reference:Získávání znalostí – Získávání
Životní cyklus události
Místo vrácení jedné odpovědi služba udržuje jedno připojení HTTP otevřené (typ text/event-stream; charset=utf-8obsahu) a odesílá posloupnost událostí, jakmile budou data k dispozici. Každá událost má event: řádek, který pojmenuje typ události, data: řádek s hodnotou JSON a prázdný řádek, který označuje konec události.
Úspěšný datový proud používá následující životní cyklus:
| Událost | Kdy se odešle | Co obsahuje |
|---|---|---|
retrieval.started |
První událost u každého streamovaného požadavku. | ID požadavku, název znalostní báze, výstupní režim a skutečně použitá úroveň úsilí při odvozování poté, co služba určí výchozí hodnoty požadavku a znalostní báze. Pokud je účinný autokind, událost hlásí auto; nepředpovídá pozdější eskalaci. |
activity.started |
Když služba zahájí plánování dotazů, zdrojovou nebo modelovou aktivitu. Než se dokončí předchozí aktivita, může začít více aktivit. | Aktivita id, typečas zahájení a volitelný název zdroje znalostí. |
activity.completed |
Po dokončení této aktivity. Přiřaďte ji k odpovídající události activity.started porovnáním id. |
Záznam dokončené aktivity. |
answer.completed |
Jednou, pouze pokud outputMode je answerSynthesis. |
messageIndex identifikuje pozici zprávy v konečném poli odpovědi a message obsahuje úplnou syntetizovanou odpověď. Neexistuje žádná událost delta po jednotlivých tokenech. |
references.completed |
Po vyřešení všech odkazů. | Data události tvoří celé pole references bez obalujícího objektu. |
response.completed |
Koncová událost pro úspěšný nebo částečně úspěšný proud. |
200 nebo 206 stavový kód a celý text odpovědi načíst, který má stejný tvar jako volání JSON bez streamování. Informace o tom, co jednotlivé stavové kódy znamenají, najdete v tématu Řešení potíží s akcí načtení. |
error |
Místo references.completed a response.completed, když se načítání po otevření datového proudu nezdaří. |
Chyba a všechny záznamy aktivit, které se dokončily před selháním. |
Události přicházejí v pořadí. Každá událost activity.started předchází události activity.completed se stejným id, ale aktivity se mohou prolínat. Záznamy o dokončených aktivitách také zahrnují časová razítka startedAt a completedAt. Když je stream nečinný, server odesílá komentář : heartbeat přibližně každých 15 sekund, aby připojení zůstalo otevřené. Klienti SSE můžou tyto komentáře ignorovat.
Následující příklad ukazuje streamovanou odpověď s zkrácenými datovými částmi pro čitelnost.
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":{}}
Zpracování chyb, zrušení a záložních řešení
Předletová selhání: Pokud ověření požadavku selže před otevřením datového proudu, například pro poškozený text požadavku, vrátí akce načtení standardní chybovou odpověď JSON a stream se nikdy neotevře.
Selhání během streamování: Pokud načítání selže po otevření datového proudu, ukončovací událostí je
errornamístoreferences.completedaresponse.completed. Událost může obsahovat všechny záznamy aktivit, které se dokončily před selháním. Stavový kód HTTP zůstane200po spuštění datového proudu, takže zkontrolujte událost terminálu, nikoli stavový kód HTTP, a zjistěte úspěch.Zrušení nebo odpojení: Pokud klient zruší požadavek nebo se odpojí před dokončením datového proudu, služba zruší načtení a ukončí stream bez události terminálu. Události přijaté před zrušením nebo odpojením považujte za neúplné.
Záložní formát JSON: Při použití
2026-08-01-previewse při chybějící hlavičceAcceptnebo při hodnotě, jako jeapplication/json,*/*,text/*nebotext/event-stream;q=0, vrátí standardní odpověď JSON popsaná v části Kontrola odpovědi. Požadavektext/event-streamze starší verze rozhraní API vrátí406 Not Acceptable.
Filtrování zdrojů znalostí indexu vyhledávání v době dotazu
Při načítání ze zdroje znalostí indexu vyhledávání můžete použít filtr OData v době dotazu, abyste výsledky zúžili na konkrétní dokumenty nebo pole. Výraz filtru používá syntaxi OData a předává se prostřednictvím parametru filterAddOn .
Syntaxe filtru a příklady
Parametr filterAddOn přijímá výrazy filtru OData. Mezi příklady vzorů patří:
-
Pole metadat:
city eq 'Phoenix',status eq 'active' -
Rozsahy dat:
publishDate ge 2024-01-01 and publishDate le 2024-12-31 -
Číselné rozsahy:
price ge 100 and price le 5000 -
Porovnávání textu:
substringof('climate', description),indexof(title, 'urgent') ge 0 -
Logické operátory:
(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'"
}
]
}
Příklad s více filtry
Pokud chcete výsledky dále upřesnit, můžete zkombinovat více filtrů.
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"
}
Přepsat uložené nápovědy dotazu při spuštění dotazu (verze Preview)
Počínaje verzí rozhraní API 2026-08-01-preview můžete pro jednotlivý požadavek na načtení přepsat parametry dotazu uložené ve zdroji znalostí vyhledávacího indexu nastavením queryHintOverrides u jeho položky knowledgeSourceParams.
Přepsání nahrazuje celý uložený queryHints objekt místo sloučení položky po položce, proto zahrňte všechny rady, které chcete použít. Vynechte queryHintOverrides, chcete-li použít uložené nápovědy.
Pokud míra uvažování při načítání není minimal, odpověď HTTP 400 závisí na uložených nápovědách filtru, nikoli na obsahu přepsání ani na typu posílení. Služba před použitím queryHintOverrides ověří uložené nápovědy filtru podle modelu znalostní báze. Proto model rodiny GPT-4o nebo GPT-4.1 požadavek odmítne, i když je přepsání prázdné nebo obsahuje pouze zvýšení. Samotné uložené zvýšení neaktivují toto ověření. Použijte kompatibilní model nebo nejprve odeberte uložené parametry filtru.
Následující příklad nahradí všechny uložené nápovědy jedním navýšením fieldValue pro japonský obsah. Služba na tuto žádost nepoužije žádný uložený filtr ani jiné uložené zvýšení.
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);
Reference: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)
Reference: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
}
Reference:Získávání znalostí – Získávání
Pokud chcete potvrdit, že služba použila vámi zadané přepsání, nastavte includeActivity v požadavku a zkontrolujte vrácenou aktivitu searchIndex. Jeho queryHintProcessing objekt hlásí, co model vygeneroval. Tento příklad obsahuje generatedBoost pro jazykové navýšení, ale ne generatedFilter, protože přepsání nahradilo uloženou nápovědu k filtru. Vzhledem k tomu, že nápovědy k dotazům jsou co nejlepší, zacházejte s touto aktivitou jako s potvrzením a nekontrolujte přesný výraz.
{
"type": "searchIndex",
"queryHintProcessing": {
"generatedBoost": "language:(ja\\-JP)^2"
},
"searchIndexArguments": {
"queryType": "full"
}
}
Informace o uložené definici, podporovaných typech nápovědy a složení s deterministickými filtry najdete v tématu Konfigurace tipů pro dotazy (Preview).
Vynucení oprávnění v době dotazu (Preview)
Změny přístupových oprávnění, které nastavíte mimo 2026-08-01-preview, se mohou ve výsledcích načítání v 2026-08-01-preview projevit až po určité době.
Pokud zdroje znalostí obsahují obsah chráněný oprávněním, předejte identitu koncového uživatele v žádosti o načtení, aby každý uživatel viděl pouze obsah, ke kterému má oprávnění k přístupu. U indexovaných zdrojů modul pro načítání používá tuto identitu k filtrování výsledků a vrací nefiltrované výsledky, pokud je vynechána. Vzdálené zdroje také používají autorizaci z požadavku na načtení, ale oprávnění vynucují na straně zdroje a mohou vyžadovat token a hlavičku specifické pro daný zdroj.
Vynucení oprávnění má dvě části:
Čas příjmu: Pouze pro indexované zdroje znalostí nastavte
ingestionPermissionOptionspro příjem metadat oprávnění společně s obsahem.Čas dotazu: Předejte autorizaci uživatele v hlavičce vyžadované zdrojem znalostí. Většina zdrojů používá
x-ms-query-source-authorization. Výjimkou je Work IQ, který používáx-ms-query-work-iq-source-authorization.
Konfigurace okamžiku načítání
Následující tabulka ukazuje, které zdroje znalostí vyžadují konfiguraci času příjmu dat a jak každý zdroj vynucuje oprávnění.
| Zdroj znalostí | Vyžaduje ingestionPermissionOptions |
Jak se vynucují oprávnění |
|---|---|---|
| Blob nebo ADLS Gen2 | ✅ | Načtené rozsahy oprávnění RBAC, seznamy ACL nebo Microsoft Purview porovnané s identitou uživatele. |
| OneLake | ✅ | Načtený dokument: popisky citlivosti Microsoft Purview porovnány s identitou uživatele. |
| Indexovaný SharePoint | ✅ | Importované seznamy ACL služby SharePoint nebo popisky citlivosti Microsoft Purview porovnané s identitou uživatele. |
| Vzdálený SharePoint | ❌ | Copilot dotazy rozhraní API pro načítání SharePoint přímo pomocí tokenu uživatele. |
| datový agent Fabric | ❌ | Modul pro načítání vymění token uživatele za token s rozsahem pro Microsoft Fabric a jeho jménem dotazuje datového agenta. |
| Fabric Ontologie | ❌ | Modul pro vyhledávání vymění token uživatele za token s rozsahem pro Microsoft Fabric a jménem uživatele odešle dotaz na položku ontologie. |
| IQ práce | ❌ | Modul pro načítání vymění z x-ms-query-work-iq-source-authorization uživatelské tvrzení pro publikum aplikace za token s rozsahem Work IQ. |
Pokud při vytváření indexovaného zdroje znalostí nenakonfigurujete ingestionPermissionOptions , index neobsahuje metadata oprávnění. Systém vrátí nefiltrované výsledky bez ohledu na záhlaví. Chcete-li tento problém vyřešit, vytvořte znovu zdroj znalostí s příslušnými ingestionPermissionOptions hodnotami.
Autorizace při zpracování dotazu
U zdrojů znalostí, které nejsou Work IQ, předejte identitu koncového uživatele tak, že do požadavku na načtení zahrnete přístupový token s rozsahem pro https://search.azure.com/.default. Tento token je oddělený od přihlašovacích údajů služby používaných pro přístup k vyhledávací službě. Nepotřebuje oprávnění vyhledávací služby a představuje pouze uživatele, jehož přístup k obsahu se vyhodnocuje. Další informace najdete v tématu ACL během dotazu a vynucení RBAC.
V případě zdrojů znalostí IQ pro práci se tato část nevztahuje. Použijte tok deklarace uživatele specifický pro Work IQ popsaný v části Vynucení oprávnění při dotazu.
V .NET SDK předejte token jako parametr querySourceAuthorization pro 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);
Reference:KnowledgeBaseRetrievalClient, KnowledgeBaseRetrievalRequest
V Python SDK předejte token jako parametr query_source_authorization v 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)
Reference:KnowledgeBaseRetrievalClient, KnowledgeBaseRetrievalRequest
V rozhraní REST API zahrňte hlavičku x-ms-query-source-authorization s přístupovým tokenem uživatele:
@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?"
}
]
}
]
}
Reference:Získávání znalostí – Získávání
Kontrola odpovědi
Akce načtení vrátí tři hlavní komponenty:
- Extrahovaná odpověď nebo syntetizovaná odpověď (Preview) ( v závislosti na výstupním režimu)
- Pole aktivit
- Pole odkazů
Extrahovaná odpověď
Extrahovaná odpověď je jeden sjednocený řetězec, který obvykle předáváte do LLM. LLM využívá řetězec jako základní data a používá ho k formulování odpovědi. Vaše volání na rozhraní API pro LLM zahrnuje jednotný řetězec a pokyny pro model, jako je například použití základních informací výhradně nebo jako doplněk.
Text odpovědi je strukturovaný ve formátu stylu zprávy chatu a obsah se serializuje ve formátu 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>\"}]"
}
]
}
]
Klíčové body:
content.typemá jednu platnou hodnotu:text.content.textje řetězec kódovaný ve formátu JSON obsahující nejrelevavantnější dokumenty (nebo bloky dat) nalezené v indexu vyhledávání s ohledem na vstupy historie dotazů a chatu. Tento řetězec představuje základní data, která LLM používá k formulování odpovědi na otázku uživatele.Tato část odpovědi se skládá z 200 bloků dat nebo menšího počtu, s výjimkou výsledků, které nesplňují minimální prahovou hodnotu skóre rerankeru 2,5.
Řetězec začíná referenčním ID bloku (používá se pro účely citace) a všechna pole zadaná v sémantické konfiguraci cílového indexu. V tomto příkladu předpokládejme, že sémantická konfigurace v cílovém indexu má pole "title", pole "terms" a pole "content".
Odpovědi při načtení neobsahují
@search.rerankerBoostedScore.Vlastnost
maxOutputSizeInTokens(maxOutputSizev2026-05-01-previewa novějších verzích) v žádosti o načtení určuje délku řetězce.- Dokument, který překračuje rozpočet výstupu
maxOutputSizeInTokens, lze z odpovědi vynechat. Pole aktivit obsahuje upozornění, když nejrelevavantnější dokument překročí maximální velikost výstupu. Chcete-li zachovat více obsahu, zvyštemaxOutputSizeInTokens. Další informace najdete v tématu Prázdné odpovědi.
- Dokument, který překračuje rozpočet výstupu
Seznam aktivit
Pole aktivit vypíše plán dotazu, který poskytuje provozní transparentnost pro sledování operací, fakturačních dopadů a vyvolání prostředků. To také zahrnuje vnořené dotazy odeslané do procesu načítání.
206 Partial Content Pro odpověď pole obsahuje chyby pro neúspěšné zdroje znalostí. Odpověď 502 Bad Gateway může obsahovat podrobnosti o selhání pouze v chybě nejvyšší úrovně.
Pole aktivit zahrnuje následující komponenty:
| Oddíl | Popis |
|---|---|
| Aktivita specifická pro zdroj | Pro každý zdroj znalostí zahrnutý v dotazu tato část hlásí uplynulý čas a argumenty, které byly použity v dotazu, včetně sémantického rankeru. Mezi typy zdrojů znalostí patří searchIndex, azureBloba další podporované zdroje znalostí. |
agenticReasoning |
Tato část uvádí spotřebu tokenů pro agentické uvažování během vyhledávání, která závisí na zadané míře uvažování při vyhledávání (Preview). |
modelQueryPlanning |
Pro znalostní báze, které k plánování dotazů používají LLM, tato část hlásí počet tokenů používaných pro vstup a počet tokenů pro poddotazy. Zahrnuje pole model s polem modelName, které obsahuje veřejný název modelu, nikoli název nasazení modelu, který aktivitu provedl. |
modelAnswerSynthesis |
V případě znalostních bází, které používají syntézu odpovědí (Preview), tato část hlásí počet tokenů pro formulaci odpovědi a počet tokenů výstupu odpovědi. Zahrnuje pole model s polem modelName, které obsahuje veřejný název modelu, nikoli název nasazení modelu, který aktivitu provedl. |
modelWebSummarization |
V případě znalostních bází, které používají sumarizaci webu, tato část hlásí spotřebu tokenů pro sumarizaci webových výsledků. Zahrnuje pole model s polem modelName, které obsahuje veřejný název modelu, nikoli název nasazení modelu, který aktivitu provedl. |
model |
V případě záznamů aktivit založených na modelu tato část identifikuje model použitý k provedení aktivity. Tato část se zobrazí pouze tehdy, když nastavíte includeActivity na true. |
imageServing |
Pro zdroje znalostí, které mají povolené zobrazování obrázků (Preview), tato část uvádí imagesRetrieved, totalImageSizeBytes, imagesSentToModel a to, zda byla při indexování zapnutá možnost verbalizationUsed. Kontrolovat verbalizationUsed a imagesSentToModel nezávisle na sobě. Odpověď může uvádět verbalizationUsed jako true a přesto odesílat obrázky do následného modelu. Pokud chcete zjistit počet vynechaných obrázků, odečtěte imagesSentToModel od imagesRetrieved. |
Následující příklad ukazuje pole aktivity.
"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
}
]
Pole odkazů
Pole odkazů pochází přímo ze základních podkladových dat. Zahrnuje sourceData používanou k generování odpovědi a skládá se z každého dokumentu, který agentický vyhledávací modul najde a sémanticky řadí.
Pole odkazů obsahuje následující komponenty:
| Pole | Popis |
|---|---|
type |
Typ zdroje znalostí, který vytvořil odkaz, například searchIndex. |
id |
Referenční ID položky v rámci odpovědi. Není to klíč dokumentu v indexu vyhledávání. Slouží k poskytování citací. |
activitySource |
Odkazuje na položku aktivity id, která tento odkaz vytvořila, což je užitečné pro propojování citací. |
docKey |
Pro indexovanou referenci klíč dokumentu v podkladovém vyhledávacím indexu. |
sourceData |
Podkladová data používaná k vygenerování odpovědi. U indexovaného odkazu můžou pole obsahovat id sémantická pole, například title, termsa content. Tvar se liší podle typu odkazu. |
citationUrl (náhled) |
Adresa URL generovaná službou a určená jen pro čtení, která odkazuje na dokument reference v podkladovém indexu. Vráceno pouze pro indexované zdroje znalostí. Pokud chcete postupovat podle adresy URL, přečtěte si téma Vyhledání dokumentů s adresami URL citace (Preview). |
Následující příklad ukazuje pole odkazů.
"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
}
]
Vyhledejte dokumenty pomocí adres URL citací (verze Preview)
Od verze rozhraní API 2026-08-01-preview může odkaz z indexovaného zdroje znalostí v odpovědi na načtení obsahovat citationUrl. Pomocí této adresy URL můžete načíst indexovaná pole pro tento odkaz, například title a content, abyste mohli vykreslit náhled citace zobrazující, odkud pochází odpověď bez otevření původního zdrojového dokumentu.
citationUrl je autentizované vyhledávání v podkladovém indexu, oddělené od zdrojových docUrl a blobUrl.
Následující příklad ukazuje sanitizovanou adresu URL citace.
"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"
Vybraná pole a jejich pořadí závisí na indexovaném zdroji a konfiguraci načítání.
Důležité
Použijte úplnou adresu URL z odpovědi beze změny a zobrazte vrácená pole JSON ve své aplikaci. Nevykonstruujte, parsujte ani normalizujte adresu URL.
Po zadání adresy URL citace získají následující příklady přístupový token pro vyhledávací službu. Volají adresu URL s tímto tokenem v hlavičce Authorization . Přihlášená identita musí mít roli Čtenář dat indexu vyhledávání.
Azure AI Vyhledávač metody vyhledávání dokumentů sady SDK vyžadují koncový bod, název indexu, klíč dokumentu, vybraná pole a verzi rozhraní API jako samostatné vstupy. Nepřijímají absolutní adresu URL citace. Tyto příklady používají ověřenou adresu HTTP GET k zachování úplné adresy URL generované službou.
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);
Reference: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))
Reference:DefaultAzureCredential
GET {{citation-url}}
Authorization: Bearer {{search-access-token}}
Reference:Dokumenty – získání
Vyhledávání dokumentu vrátí vybraná pole indexu ve formátu 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"
}
Při používání adresy URL citace mějte na paměti následující skutečnosti:
Než vykreslíte citaci, zkontrolujte přítomnost
citationUrl. Může chybět, pokud odpověď neobsahuje odkazy nebo služba nedokáže určit podkladový index či klíč dokumentu.Pokud požadavek na načtení obsahuje
x-ms-query-source-authorizationpro řízení přístupu na úrovni dokumentu, použijte při otevření dané adresy URL stejný uživatelský token.Adresa URL zůstane platná jenom v době, kdy záložní index a klíč dokumentu zůstanou beze změny.
Zkontrolovat metadata štítků citlivosti v odpovědi (Preview)
Stejné časové chování popsané v Vynucení oprávnění při dotazu platí i zde: změny přístupových oprávnění, které nastavíte mimo 2026-08-01-preview, se mohou v odpovědích na načtení v 2026-08-01-preview projevit až po určité době.
Při dotazování na znalostní bázi, která zpracovává popisky citlivosti Microsoft Purview, obsahuje odpověď při načtení metadata popisků na dvou úrovních:
| Umístění | Pole | Popis |
|---|---|---|
| Viz odkaz | sensitivityLabelInfo |
Popisek citlivosti použitý u každého dokumentu vráceného v poli references. |
| Response | metadata.responseSensitivityLabelInfo |
Souhrnný popisek, který představuje popisek citlivosti s nejvyšší prioritou napříč všemi dokumenty odkazovanými v odpovědi. Užitečné pro bannery zobrazované na straně klienta a vynucování zásad. |
Microsoft Graph vypočítá popisek na úrovni odpovědi z popisků jednotlivých odkazů pomocí pravidel dědičnosti popisků Microsoft Purview. Obvykle platí nejpřísnější štítek.
Následující příklad ukazuje odpověď na operaci retrieve se dvěma odkazovanými dokumenty (jeden Confidential, jeden Internal) a výsledný štítek na úrovni odpovědi.
{
"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
}
}
}
Referenční typy, které zobrazují štítky citlivosti
Název pole a dostupnost metadat popisků závisí na typu zdroje znalostí, který vytvořil každý odkaz.
Odkaz type |
Pole pro popisek | K dispozici, když... |
|---|---|---|
azureBlob |
sensitivityLabelInfo |
Zdroj znalostí blobu zahrnuje sensitivityLabel v ingestionPermissionOptions. |
indexedOneLake |
sensitivityLabelInfo |
Zdroj znalostí OneLake obsahuje sensitivityLabel v ingestionPermissionOptions. |
indexedSharePoint |
sensitivityLabelInfo |
Zdroj znalostí indexovaný v SharePointu zahrnuje sensitivityLabel v rámci ingestionPermissionOptions. |
searchIndex |
sensitivityLabelInfo |
Podkladový index má purviewEnabled nastaveno na true a pole označené sensitivityLabel: true. |
Zobrazení a auditování doporučení
Pomocí
sensitivityLabelInfo.labelIdvyhledejte úplnou definici popisku prostřednictvím rozhraní API popisků citlivosti Microsoft Graph, pokud potřebujete další vlastnosti, jako jsou například ovládací prvky zásad nebo oprávnění.Pomocí
metadata.responseSensitivityLabelInfomůžete zobrazit banner citlivosti pro celou odpověď nebo uplatnit zásady, například zakázat kopírování a sdílení, v celé odpovědi.Pokud váš zdroj znalostí odkazuje na index rozdělený na bloky, například index naplněný pomocí integrované vektorizace nebo vlastní dovednosti Text Split, ujistěte se, že sada dovedností promítne popisek citlivosti do každého řádku bloku. Bez tohoto mapování se odkazy na úrovni bloků dat v době dotazu nefiltrují správně.
Auditovatelný přístup správců k označenému obsahu najdete v článku Rozšířené oprávnění ke čtení pro správní šetření.
Chování serveru MCP
Koncový bod MCP vystavený jednotlivými znalostními bázemi zobrazí stejná pole popisků citlivosti jako rozhraní REST API. Když klient kompatibilní s MCP vyvolá nástroj knowledge_base_retrieve, výsledek nástroje obsahuje stejné položky sensitivityLabelInfo pro jednotlivé odkazy a položky metadata.responseSensitivityLabelInfo na úrovni odpovědi, které jsou popsány výše v této části. Klienti MCP vynucují řízení zobrazení a zásad s ohledem na štítky na základě těchto polí.
Načtení příkladů akcí (Preview)
Následující příklady ukazují různé způsoby volání akce načtení pomocí 2026-08-01-preview verze rozhraní API. Tato verze podporuje úplnou sadu funkcí, včetně syntézy odpovědí a konfigurovatelného úsilí o odůvodnění. Použití 2026-04-01 viz v předchozích částech.
- Kontrola názvů modelů v protokolech aktivit
- Vyžadovat zdroj znalostí pro úspěšné dokončení
- Vyloučení zdroje znalostí z požadavku
- Upravit dokumenty kandidátů podle zdroje znalostí
- Omezení konečných podkladových dokumentů
- Ověřit výchozí nastavení načítání znalostní báze
- Přepsat výchozí režim odvozování a nastavit omezení požadavků
- Nechte službu zvolit úroveň uvažování.
- Nastavení odkazů pro každý zdroj znalostí
- Používejte minimální úsilí o odůvodnění.
Kontrola názvů modelů v protokolech aktivit
Nastavte includeActivity na true, aby se v záznamech aktivit založených na modelu vracela pole identity modelu. Pomocí těchto polí můžete ověřit, který nakonfigurovaný model zpracovával plánování dotazů, syntézu odpovědí nebo shrnutí webu během žádosti o načtení. Následující příklad přepíše uložené zpracování výsledků pro vybraný zdroj na požadavku.
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}");
}
}
Reference: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,
)
Reference: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"
}
]
}
Reference:Získávání znalostí – Získávání
Následující výňatek odpovědi ukazuje identitu vnořeného modelu:
{
"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
}
]
}
Vyžadovat zdroj znalostí pro úspěšné dokončení
Nastavte failOnError v knowledgeSourceParams, aby byl znalostní zdroj označen jako povinný. Tento parametr použijte, pokud by částečná odpověď byla zavádějící nebo nedodržující předpisy, pokud tento zdroj není k dispozici. Požadavek se vrátí 502 Bad Gateway , pokud požadovaný zdroj selže, i když bude úspěšný jiný zdroj. Pokyny k manipulaci najdete v tématu Řešení potíží s akcí načtení.
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);
Reference: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)
Reference: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"
}
]
}
Reference:Získávání znalostí – Získávání
Vyloučení zdroje znalostí z požadavku
Počínaje verzí rozhraní API 2026-08-01-preview nastavte neverQuerySource na true pro každý zdroj znalostí, který chcete vyloučit z požadavku na načtení.
neverQuerySource v době požadavku má pro daný požadavek přednost před uloženou hodnotou alwaysQuerySource, aniž by se uložená hodnota změnila.
Následující příklad se dotazuje na znalostní bázi, která obsahuje product-docs-ks a troubleshooting-ks, přičemž z požadavku vylučuje troubleshooting-ks.
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);
Reference: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)
Reference: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
}
]
}
Reference:Získávání znalostí – Získávání
Ladění kandidátských dokumentů na zdroj znalostí
V maxOutputDocuments nastavte knowledgeSourceParams tak, aby omezovalo počet kandidátních dokumentů, které konkrétní zdroj znalostí dodá před konečným výběrem výsledků. Tento parametr použijte, pokud chcete svázat vstup jednoho zdroje do kanálu, aniž by to ovlivnilo ostatní.
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);
Reference: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)
Reference: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
}
]
}
Reference:Získávání znalostí – Získávání
Omezení konečných podkladových dokumentů
Parametr nejvyšší úrovně maxOutputDocuments určuje, kolik podkladových dokumentů se vrátí v konečné odpovědi na načtení. Tento parametr použijte, když vaše aplikace potřebuje předvídatelný počet citací nebo odkazů.
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);
Referenční informace: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)
Referenční informace: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
}
Reference:Získávání znalostí – Získávání
Následující tabulka ukazuje, jak maxOutputDocuments a maxOutputSizeInTokens interagujte ve všech čtyřech kombinacích.
maxOutputDocuments |
maxOutputSizeInTokens |
Chování |
|---|---|---|
| Nespecifikovaný | Nespecifikovaný | Používá výchozí chování limitu odpovědi maxOutputSizeInTokens. |
| Nespecifikovaný | Určeno | Jakmile je dosaženo limitu velikosti datového obsahu, dokumenty se zahazují. |
| Určeno | Nespecifikovaný | Vrátí až zadaný počet podkladových dokumentů a nepoužije maxOutputSizeInTokens limit. |
| Určeno | Určeno | Vrátí až maxOutputDocuments dokumentů nebo tolik dokumentů, kolik se jich vejde do maxOutputSizeInTokens, podle toho, který limit nastane dříve. |
Ověřit výchozí nastavení načítání znalostní báze
Znalostní báze může ukládat výchozí hodnoty v rámci požadavků .retrieveDefaults Odešlete dva požadavky na načtení pro ověření dědičnosti a přepsání na úrovni konkrétního požadavku.
Než začnete, dokončete konfiguraci výchozích limitů načítání (Preview). První požadavek vynechá všechny tři limity pro celou žádost, takže se použijí uložené hodnoty 45 sekund, osm dokumentů a 12 000 tokenů. Druhý požadavek je přepíše hodnotami 20 sekund, jednoho dokumentu a 5 000 tokenů.
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");
Reference: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")
Reference:KnowledgeBaseRetrievalClient, KnowledgeBaseRetrievalRequest
Nejprve odešlete požadavek, který vynechá tři pole limitu pro celý požadavek.
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."
}
]
}
Dále přepište všechny tři hodnoty v rámci jednoho požadavku.
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
}
Reference:Získávání znalostí – Získávání
Počet odkazů ukazuje, jestli se použije uložená hodnota nebo hodnota na úrovni maxOutputDocuments požadavku: první odpověď obsahuje maximálně osm odkazů a druhá obsahuje maximálně jednu. Odpověď může obsahovat méně odkazů, když se shoduje méně dokumentů. Odpověď nehlásí efektivní rozpočet modulu runtime nebo výstupního tokenu, ale tyto hodnoty stále řídí zpracování požadavků. Přepsání požadavků nemění uložená výchozí nastavení.
Přepsání výchozího úsilí o odůvodnění a nastavení limitů požadavků
Následující příklad určuje syntézu odpovědí, takže úsilí o načtení odůvodnění musí být low nebo medium. Také nastavuje maxRuntimeInSeconds k omezení doby načítání a maxOutputSizeInTokens k omezení velikosti dat odpovědi.
maxRuntimeInSeconds přijímá hodnoty od 10 do 600 sekund a výchozí hodnota je 90 sekund. Maximální hodnota 600 sekund (10 minut) se vztahuje pouze na Azure AI Vyhledávač požadavek na načtení.
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
);
Reference: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)
Reference: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
}
Reference:Získávání znalostí – Získávání
Nechte službu zvolit míru uvažování.
Nastavte retrievalReasoningEffort.kind na auto v požadavku na načtení, aby se přepsalo výchozí nastavení znalostní báze. Další informace o automatickém uvažování viz Nastavení úrovně úsilí při uvažování pro načítání (Preview).
{
"retrievalReasoningEffort": {
"kind": "auto"
}
}
Reference:Získávání znalostí – Získávání
Nastavení odkazů pro každý zdroj znalostí
Použijte includeReferences a includeReferenceSourceData v knowledgeSourceParams k určení, které zdroje se zobrazí v poli references a kolik dat o zdroji jednotlivé položky obsahují. Následující příklad používá výchozí úsilí o odůvodnění znalostní báze.
var retrievalRequest = new KnowledgeBaseRetrievalRequest();
retrievalRequest.Messages.Add(
new KnowledgeBaseMessage(
content: new[] {
new KnowledgeBaseMessageTextContent("What companies are in the financial sector?")
}
) { Role = "user" }
);
retrievalRequest.IncludeActivity = true;
retrievalRequest.KnowledgeSourceParams.Add(
new SearchIndexKnowledgeSourceParams("demo-financials-ks")
{
IncludeReferences = true,
IncludeReferenceSourceData = true
}
);
retrievalRequest.KnowledgeSourceParams.Add(
new SearchIndexKnowledgeSourceParams("demo-communicationservices-ks")
{
IncludeReferences = false,
IncludeReferenceSourceData = false
}
);
retrievalRequest.KnowledgeSourceParams.Add(
new SearchIndexKnowledgeSourceParams("demo-healthcare-ks")
{
IncludeReferences = true,
IncludeReferenceSourceData = false,
AlwaysQuerySource = true
}
);
var result = await kbClient.RetrieveAsync(retrievalRequest);
Console.WriteLine(
(result.Value.Response[0].Content[0] as KnowledgeBaseMessageTextContent)!.Text
);
Reference:KnowledgeBaseRetrievalClient, KnowledgeBaseRetrievalRequest
from azure.search.documents.knowledgebases.models import SearchIndexKnowledgeSourceParams
request = KnowledgeBaseRetrievalRequest(
messages=[
KnowledgeBaseMessage(
role="user",
content=[KnowledgeBaseMessageTextContent(text="What companies are in the financial sector?")],
)
],
include_activity=True,
knowledge_source_params=[
SearchIndexKnowledgeSourceParams(
knowledge_source_name="demo-financials-ks",
include_references=True,
include_reference_source_data=True,
),
SearchIndexKnowledgeSourceParams(
knowledge_source_name="demo-communicationservices-ks",
include_references=False,
include_reference_source_data=False,
),
SearchIndexKnowledgeSourceParams(
knowledge_source_name="demo-healthcare-ks",
include_references=True,
include_reference_source_data=False,
always_query_source=True,
),
],
)
result = kb_client.retrieve(request)
print(result.response[0].content[0].text)
Reference: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
}
]
}
Reference:Získávání znalostí – Získávání
Používejte minimální úsilí o odůvodnění.
V následujícím příkladu neexistuje žádný LLM pro inteligentní plánování dotazů ani syntézu odpovědí. Řetězec dotazu se odesílá do agentického vyhledávacího enginu pro vyhledávání klíčových slov nebo hybridní vyhledávání.
var retrievalRequest = new KnowledgeBaseRetrievalRequest();
retrievalRequest.Intents.Add(
new KnowledgeRetrievalSemanticIntent("what is a brokerage")
);
var result = await kbClient.RetrieveAsync(retrievalRequest);
Console.WriteLine(
(result.Value.Response[0].Content[0] as KnowledgeBaseMessageTextContent)!.Text
);
Reference:KnowledgeBaseRetrievalClient, KnowledgeBaseRetrievalRequest
from azure.search.documents.knowledgebases.models import (
KnowledgeBaseRetrievalRequest,
KnowledgeRetrievalSemanticIntent,
)
request = KnowledgeBaseRetrievalRequest(
intents=[
KnowledgeRetrievalSemanticIntent(
search="what is a brokerage",
)
]
)
result = kb_client.retrieve(request)
print(result.response[0].content[0].text)
Reference: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"
}
]
}
Reference:Získávání znalostí – Získávání
Řešení potíží s akcí načtení
Stav 2026-08-01-previewodpovědi indikuje, jestli bylo načtení úspěšné, částečně úspěšné nebo neúspěšné a co dělat dál. Následující tabulka slouží k namapování jednotlivých stavů na jejich význam a následným zobrazením odpovídající části s pokyny k řešení potíží.
| Stav | Význam |
|---|---|
200 OK |
Načtení proběhlo úspěšně. Dokument může být i nadále vynechán, pokud jeho obsah překročí rozpočet výstupu. Další informace najdete v tématu Prázdné odpovědi. |
400 Bad Request |
Požadavek na načtení neprošel ověřením ještě před zahájením načítání. |
206 Partial Content |
Alespoň jeden zdroj byl úspěšný a nebyl označen failOnErroržádný neúspěšný zdroj . Odpověď obsahuje výsledky ze zdrojů, které byly úspěšné. |
502 Bad Gateway |
Každý vybraný zdroj selhal nebo selhal zdroj označený značkou failOnError: true. |
U jakékoli odpovědi jiné než 200 zaznamenejte verzi rozhraní API, časové razítko, očištěné tělo požadavku, hlavičky odpovědi a ID požadavku nebo korelační ID. Tyto podrobnosti vám pomůžou diagnostikovat selhání a v případě potřeby sdílet problém s podporou.
400 Bad Request
Pomocí chyby nejvyšší úrovně identifikujte neplatnou vlastnost požadavku. Mezi běžné příčiny patří:
- Objekt
knowledgeSourceNameinknowledgeSourceParamsnení připojený ke znalostní bázi nebokindneodpovídá připojenému zdroji. - Hodnota požadavku je mimo její podporovaný rozsah nebo jedna možnost vyžaduje jinou možnost, která není povolená. Například
includeReferenceSourceDatavyžadujeincludeReferences. -
retrievalReasoningEffort.kindjeauto, ale požadavek používá verzi rozhraní API starší než2026-08-01-preview. - Požadavek používá
auto,lownebomedium, ale znalostní báze nedefinuje model. - Pro vyloučení zdroje v době požadavku (Preview) stejná položka nastaví jak
alwaysQuerySource, takneverQuerySourcenatrue, jinak se vyloučí všechny připojené zdroje znalostí.
Před opakováním požadavku opravte vlastnost identifikovanou chybou nejvyšší úrovně.
206 Partial Content
Zkontrolujte každou položku activity, která obsahuje error. Aktivita načítání zdroje identifikuje neúspěšný zdroj znalostí a aktivita modelu identifikuje neúspěšnou fázi zpracování. Text odpovědi stále obsahuje výsledky, které byly úspěšné.
Mezi běžné příčiny chyb aktivity načítání zdroje patří:
- Neplatný vstup při zpracování dotazu, například chybně vytvořený výraz
filterAddOn. - Posun konfigurace zdroje znalostí nebo indexu, například přejmenované pole, chybějící sémantická konfigurace nebo neplatný vektorizátor.
- Chybějící nebo neplatné oprávnění pro závislosti nebo nedostatečná oprávnění pro identitu používanou k dotazování na zdroj.
- Omezování závislostí, vypršení časového limitu nebo přechodné selhání dostupnosti
V případě chyby aktivity modelu použijte aktivitu type k identifikaci neúspěšné fáze zpracování. Například modelWebSummarization chyba značí, že souhrn výsledků webu selhal.
Pokud vaše aplikace povolí částečné výsledky, zpracujte úspěšné výsledky a poznamenejte si každou neúspěšnou fázi zdroje nebo modelu. Před opakováním opravte konfiguraci, autorizaci a chyby oprávnění. V případě omezování, vypršení časového limitu nebo přechodných selhání dostupnosti použijte omezené opakování s backoffem.
Pokud jsou výsledky nebezpečné bez konkrétního zdroje a jeho typ zdroje podporuje alwaysQuerySource, nastavte oba alwaysQuerySource a failOnError. První možnost zajistí, že je zdroj vybrán, a druhá vrátí těžkou chybu, pokud dotazování selže.
Zdroje znalostí serveru MCP (Preview) nepodporují alwaysQuerySource; pro tyto zdroje se failOnError použije pouze tehdy, když je zdroj vybraný.
failOnError se nevztahuje na selhání aktivit modelu.
502 Bad Gateway
Chyba nejvyšší úrovně popisuje jednu ze dvou cest pevného selhání:
- U každého vybraného zdroje došlo k chybě: Každý vybraný zdroj vrátil chybu. Zdroj, který se úspěšně dokončí bez odpovídajících dokumentů, není neúspěšný. Zkontrolujte všechny chyby zdroje pro problém se sdílenou konfigurací, autorizací, závislostí nebo dostupností.
-
Zdroj
failOnErrorse nezdařil: Požadovaný zdroj nelze dotazovat. Jiné zdroje mohly být úspěšné, ale služba nevrací částečný výsledek, protože požadovaný zdroj selhal.
Selhání základního zdroje jsou obecně stejného typu jako ta popsaná pro 206 Partial Content: neplatný vstup specifický pro zdroj, odchylky konfigurace zdroje nebo indexu, autorizace závislostí nebo oprávnění k přístupu, omezení rychlosti, vypršení časových limitů nebo dočasná nedostupnost závislostí.
Striktní 502 odpověď může vynechat pole activity a uvádět název zdroje a příčinu selhání pouze v chybové zprávě na nejvyšší úrovni. Před opakováním opravte konfiguraci, autorizaci a chyby oprávnění. Použijte opakované pokusy s omezeným počtem opakování a s prodlevou mezi pokusy pouze při omezení rychlosti, vypršení časového limitu nebo dočasných výpadcích dostupnosti. Nepovažujte odpověď 502 Bad Gateway za výpadek služby Azure AI Vyhledávač, aniž byste prozkoumali selhání podkladového zdroje.
Prázdné odpovědi
Krok hledání může najít dokument, ale služba ho stále může vynechat z konečné odpovědi, pokud jeho podkladový obsah překročí rozpočet výstupu maxOutputSizeInTokens (maxOutputSize v 2026-05-01-preview a později). Když dojde k této podmínce, pole aktivity ukazuje, že byly nalezeny shody, a záznam aktivity obsahuje upozornění, že nejrelevantní dokument překročil maximální velikost výstupu. Pole odkazů a obsah podložené odpovědi jsou pro tento dokument prázdné. Chcete-li zachovat více obsahu, zvyšte maxOutputSizeInTokens.
Abyste se tomuto chování vyhnuli, indexujte velké zdrojové dokumenty jako menší bloky dat se stabilními identifikátory a zdrojovými metadaty. To platí zejména pro dlouhé příručky, zásady nebo články znalostní báze.
Zavolejte koncový bod MCP
Warning
Implementace MCP jsou náchylné k rizikům, jako jsou útoky, kaskádové selhání a ztráta lidského dohledu. Tato rizika můžete zmírnit prověřováním serverů MCP z hlediska zabezpečení a spolehlivosti, dodržováním doporučených postupů společnosti Microsoft a osvědčených postupů v oboru a zavedením schvalovacích mechanismů a monitorování kaskádového chování.
MCP je otevřený protokol, který standardizuje, jak se aplikace umělé inteligence připojují k externím zdrojům dat a nástrojům.
V Azure AI Vyhledávač je každá znalostní báze samostatným serverem MCP, který zveřejňuje nástroj knowledge_base_retrieve. Jakýkoli klient kompatibilní s MCP, včetně služby Foundry Agent Service, GitHub Copilot, Claude a Cursor, může tento nástroj vyvolat pro dotazování do znalostní báze.
Ověřit se na endpoint MCP
Každá znalostní báze má koncový bod MCP na následující adrese URL:
https://<search-service-name>.search.windows.net/knowledgebases/<knowledge-base-name>/mcp?api-version=<api-version>
Zadaná verze rozhraní API určuje, co připojení vrací. Při použití 2026-08-01-previewvrátí znalostní báze syntetizované odpovědi, když je základní znalostní báze nakonfigurována s LLM a kompatibilním úsilím o odůvodnění. Při použití 2026-04-01 je vyhledávání vždy minimální a extraktivní a připojení vrací pouze podkladová data.
Způsob ověřování u tohoto koncového bodu závisí na klientovi MCP. Když používáte rozhraní Responses API služby Azure OpenAI s nástrojem knowledge_base_retrieve MCP, ověřujete jak volání rozhraní Responses API vůči službě Azure OpenAI, tak požadavek MCP vůči službě Azure AI Vyhledávač. Pokud váš klient MCP volá tento koncový bod přímo, ověříte se pouze pro Azure AI Vyhledávač.
Pro Azure AI Vyhledávač ověřování použijte jednu z následujících metod:
-
Předejte token nositele v hlavičce
Authorization(doporučeno) -
Předejte klíč správce v hlavičce
api-key
Poznámka
Klienti MCP konfigurují vlastní hlavičky odlišně. Služba Foundry Agent například vloží hlavičky prostřednictvím připojení projektu, zatímco klienti, jako je GitHub Copilot, vyžadují hlavičky ve formátu JSON serveru MCP.
Použijte token Bearer pro autentizaci MCP
Doporučená metoda ověřování MCP je nosný token, který zabraňuje ukládání citlivých klíčů do konfiguračních souborů. Identita za tokenem musí mít přiřazenou roli Čtenář dat indexu vyhledávání ve vyhledávací službě. Další informace najdete v tématu Pojení aplikace k Azure AI Vyhledávač pomocí identit.
#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());
Referenční informace:Použití rozhraní API pro odpovědi OpenAI Azure
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)
Referenční informace:Použití rozhraní API pro odpovědi OpenAI Azure
// This code snippet is currently unavailable.
Použití klíče správce pro ověřování MCP
Klíč správce uděluje vyhledávací službě úplný přístup pro čtení i zápis, takže ho používejte jenom ve vývojových prostředích nebo v případě, že nosný token není k dispozici. Další informace najdete v tématu Pojení k Azure AI Vyhledávač pomocí klíčů rozhraní API.
Tip
Následující příklad ukazuje pouze hlavičku, která se liší od příkladu s tokenem Bearer. Kompletní nastavení naleznete v tématu Použití tokenu typu bearer pro ověřování MCP.
#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)
);
Referenční informace:Použití rozhraní API pro odpovědi OpenAI Azure
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",
}
]
Referenční informace:Použití rozhraní API pro odpovědi OpenAI Azure
// This code snippet is currently unavailable.
Kontrola odpovědi MCP
Když klient MCP volá knowledge_base_retrieve, obdrží výsledek nástroje MCP místo obálky akce načtení tvořené prvky response, activity a references. Mnoho klientů MCP zobrazí výsledek nástroje pod objektem nejvyšší úrovně result , takže datová část, kterou byste měli očekávat, je 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>\"}]"
}
]
}
}
Klíčové body:
result.content[]obsahuje výstup nástroje MCP vrácený znalostní bázi.result.content[].typejetext.result.content[].textobsahuje načtená podkladová data jako řetězec kódovaný v JSON.Na rozdíl od akce retrieve aktuální odpověď MCP nevrací samostatná pole
activityanireferencesa nevyplňuje položkyresourcepro vrácený obsah.
Související obsah
- Agentic vyhledávání v Azure AI Vyhledávač
- Vynucování ACL a RBAC při dotazu (Preview)
- Použijte indexer blobů nebo zdroj znalostí k načtení metadat oblastí působnosti RBAC (verze Preview)
- Agentic RAG: Sestavte vyhledávací modul pro analytickou práci pomocí Azure AI Vyhledávač (YouTube video)
- Azure demonstrace OpenAI s pojmovým vyhledáváním