Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Megjegyzés
Azure AI Keresés a Azure portálon, REST API-kon és Azure SDK-k keresztül érhető el. Emellett a Foundry IQ-t is támogatja, amely a vállalati tartalmakat újrafelhasználható, engedélytudatos tudásbázisokká alakítja át az Microsoft Foundry portálon található ügynökök számára.
Fontos
Az (előzetes verzióban) megjelölt funkciókra, képességekre vagy tulajdonságokra nem vonatkozik szolgáltatási szintű szerződés, nem ajánlott éles számítási feladatokhoz, és az általános elérhetővé válásuk előtt változhatnak vagy korlátozhatók. Az Azure AI Keresés előzetes verziójú kifejezések az összes előzetes verziós funkcióra vonatkoznak, függetlenül attól, hogy önálló vagy egy általánosan elérhető funkció része.
Egy ügynöki lekérési folyamatban a lekérési művelet egy tudásbázis párhuzamos lekérdezésfeldolgozását hívja meg. A lekérési műveletet közvetlenül a Search Service REST API-kkal vagy egy Azure SDK hívhatja meg. Minden tudásbázis egy Model Context Protocol (MCP) végpontot is elérhetővé tesz az MCP-kompatibilis ügynökök általi felhasználáshoz.
Ez a cikk bemutatja, hogyan hívhatja meg mindkét lekérési metódust opcionális engedélykényszerítéssel. Először a lekérési műveletet, majd később az MCP-végpontot fedi le, mivel az MCP eszköz eredménye jelenleg eltér a REST és az SDK válaszalakzatától.
Ha olyan folyamatot szeretne beállítani, amely az Azure AI Keresés-et a Foundry Agent Service-hez csatlakoztatja MCP-n keresztül, tekintse meg a Tutorial: Végpontok közötti ügynöki lekérési megoldás létrehozása útmutatót.
Használat támogatása
| Azure Portál | Microsoft Foundry portál | .NET SDK | Python SDK | Java SDK | JavaScript SDK | REST API |
|---|---|---|---|---|---|---|
| ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
Előfeltételek
Azure AI Keresés szolgáltatás egy tudásbázissal.
A megosztott modellhez való hozzáféréssel és az ügyfélbeállítással kapcsolatban tekintse meg a tudásbázis létrehozásának előfeltételeit.
Tudásbázisok lekérdezésének engedélye. Konfigurálja a kulcs nélküli hitelesítést a felhasználói fiókhoz rendelt Keresési index adatolvasó szerepkörrel (ajánlott), vagy használjon lekérdezési API-kulcsot.
Ha az AZURE OpenAI Responses API-val hívja meg az MCP-végpontot, a következőkre van szüksége:
Üzembe helyezett LLM és Cognitive Services OpenAI felhasználói szerepkör (vagy API-kulcs) az Foundry-erőforráson. Szükség esetén újra felhasználhatja a tudásbázisban megadott LLM-et és erőforrást.
A
Azure.AI.OpenAIcsomag:dotnet add package Azure.AI.OpenAI
Kötelező
Azure.Search.Documentscsomag:A(z)
2026-08-01-previewfunkciókhoz a legújabb előzetes csomag:dotnet add package Azure.Search.Documents --prereleaseA(z)
2026-04-01funkciókhoz a legújabb stabil csomag:dotnet add package Azure.Search.Documents
Kulcs nélküli hitelesítés esetén a
Azure.Identitycsomag:dotnet add package Azure.Identity
Ha az AZURE OpenAI Responses API-val hívja meg az MCP-végpontot, a következőkre van szüksége:
Üzembe helyezett LLM és Cognitive Services OpenAI felhasználói szerepkör (vagy API-kulcs) az Foundry-erőforráson. Szükség esetén újra felhasználhatja a tudásbázisban megadott LLM-et és erőforrást.
A
openaicsomag:pip install openai
Kötelező
azure-search-documentscsomag:A(z)
2026-08-01-previewfunkciókhoz a legújabb előzetes csomag:pip install --pre azure-search-documentsA(z)
2026-04-01funkciókhoz a legújabb stabil csomag:pip install azure-search-documents
Kulcs nélküli hitelesítés esetén a
azure-identitycsomag:pip install azure-identity
A Search Service REST API szükséges verziója:
Előzetes verziójú funkciók: 2026-08-01-preview
Általánosan elérhető funkciók: 2026-04-01
Kulcs nélküli hitelesítéshez minden HTTP-kérés fejlécében adjon meg egy
Authorization.
Limitations
A keresési index tudásforrásai esetében, ha engedélyezi az újrarangsorolást, a lekérés a tudásforrás szemantikai konfigurációját használja. Nem alkalmazza a mögöttes index pontozási profiljait, beleértve a(z) defaultScoringProfile elemet is. A válaszok lekérése sem jeleníti meg a(z) @search.rerankerBoostedScore elemet.
A lekérési művelet meghívása
A lekérési műveletet egy tudásbázisban adhatja meg. A kérelem törzse tartalmazza a lekérdezési bemenetet és a megcélozandó tudásbázisok opcionális listáját.
Az 2026-04-01 API-verzió csak a bemenetet és a intents minimális, kinyerő lekérést támogatja. A csak előzetes verziójú képességek, beleértve a bemenetet, a lekérdezéstervezést, a messages válaszszintézist és a konfigurálható érvelési erőfeszítéseket, nem támogatottak. A teljes funkcionalitás használatához használja a(z) 2026-08-01-preview elemet.
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
);
Referencia: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)
Referencia: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"
}
]
}
Referencia:Tudáslekérés – Lekérés
Képek biztosítása a szintézis megválaszolásához (előzetes verzió)
Blobok, indexelt OneLake és indexelt SharePoint eszköztárolóval konfigurált tudásbázisok esetén a szöveg mellett dokumentumba ágyazott képeket is megadhat az alsóbb rétegbeli válaszszintézis-modellhez. A(z) enableImageServing megfelelő bejegyzésén állítsa be a(z) knowledgeSourceParams elemet, hogy felülírja a tudásbázis-definícióban beállított alapértelmezett értéket. A lekérési válasz nem tartalmaz dedikált mezőket a modellhez megadott egyedi képelérési útvonalakhoz vagy képbájtokhoz.
A rendszerképek kiszolgálása csak akkor működik, ha a(z) outputMode értéke answerSynthesis, és nem támogatott az olyan tudásforrások esetében, amelyek a(z) ingestionPermissionOptions elemet konfigurálják. A beállítás lépéseiről, az elsőbbségi táblázatról, valamint a képkiszolgálási statisztikák ellenőrzéséről lásd: A dokumentumba ágyazott képek megjelenítése agentikus visszakeresésben (előzetes verzió).
A tudásforrás újrarangsorolásának letiltása (előzetes verzió)
A(z) 2026-08-01-preview API-verziótól kezdve állítsa be a(z) "resultsProcessing": "none" értéket egy knowledgeSourceParams bejegyzésnél, hogy megkerülje egy adott tudásforrás újrarangsorolását, és megőrizze annak eredeti eredménysorrendjét. A resultsProcessing elemet alapértelmezettként is tárolhatja a tudásforráson. Ezt a tulajdonságot minden tudásbázistípus támogatja.
Az alábbi példa egy lekérési kérés esetén kihagyja az product-catalog-ks újrarangsorolását.
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)}");
Referencia: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)
Referencia: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"
}
]
}
Referencia:Tudáslekérés – Lekérés
Állítsa be "resultsProcessing": "rerank", vagy hagyja ki, ha nincs tárolt alapértelmezett érték az újrarankálási folyamat használatához. Az Azure AI Keresés ebben a sorrendben határozza meg az egyes források érvényes értékét:
-
resultsProcessinga lekérési kérelemknowledgeSourceParamsrészében. -
resultsProcessinga tudásbázisban tárolva. -
rerankha egyik tulajdonság sem található.
McP-kiszolgálói tudásbázis esetén az resultsProcessing egyes eszközökre beállított érték elsőbbséget élvez a kéréssel és a tárolt értékekkel szemben.
Jótanács
resultsProcessing az eredmények feldolgozásának módját módosítja, és nem azt, hogy mely források legyenek lekérdezve. Állítsa a(z) alwaysQuerySource értékét true értékre, ha le kell kérdezni a tudásforrást.
Ha a tényleges érték a következő none:
- A tudásbázisból származó hivatkozások kihagyják
rerankerScore, és az eredmények megtartják a mögöttes sorrendet a forrás lekérési tevékenységén belül. - Ha bármely forrás megkerüli az újrarangsorolást, az Azure AI Keresés körkörös sorrendben osztja szét a végleges eredményeket a tevékenységek között, a tudásforrások deklarálási sorrendjét követve. Az újrarangsorolt tevékenységek pontszám szerint rendezettek maradnak.
- A deduplikáció és a forrásonkénti, dokumentum- és tokenkorlátok továbbra is érvényesek, így nem minden beolvasott eredmény jelenik meg a válaszban.
Azure AI Keresés ebben a sorrendben érvényesítirerankerThreshold:
- A Search a lekérési kérelemből és a tárolt tudásforrás-értékből oldja fel a
resultsProcessingelemet. - Ha a feloldott érték
none, és a kérés tartalmazza a következőt:rerankerThreshold, a Search400 Bad Requestértéket adja vissza. - McP-kiszolgálóeszköz esetén a Keresés az eszközszintű
resultsProcessingértéket alkalmazza a kérés érvényesítése után.
Ennek eredményeképpen az MCP eszközbeállítás nem módosítja, hogy a kérés megfelel-e az ellenőrzésnek. Az eszközszintű none érték nem okoz küszöbérték-hibát, és az eszközszintű rerank érték nem akadályozza meg a hibát, ha a kérés vagy a tárolt érték none lesz.
Annak ellenőrzéséhez, hogy melyik mód futott, ellenőrizze, hogy a tudásbázis hivatkozásai tartalmazzák-e a következőket rerankerScore. Ne hagyatkozzon a(z) semanticConfigurationName elemre, mert az null lehet az elhagyás helyett.
Keresési index viselkedése
A keresési indexet megcélozó tudásbázisok esetében a hallgatólagos lekérdezés típusa semanticaz, és nincs keresési mód. Az újrarangsorolási futások során a lekérdezés végrehajtása a(z) semanticConfigurationName elemet használja. Az egyéb forrásbeállítások, beleértve searchFields és sourceDataFields, mindkét módban érvényesek.
Az agentikus lekérdezés nem fogad el scoringProfile vagy scoringParameters bemenetet. Ha az indexelt tudásforrások esetén frissességi torzításra van szüksége, az indexpontozási profil helyett használja a frissességtudatos lekérést (előzetes verzió).
Ha az index vektormezőket tartalmaz, érvényes vektorizáló-definícióra van szükség, hogy az ügynöki lekérési motor vektorizálhassa a lekérdezési bemeneteket. Ellenkező esetben a vektormezők figyelmen kívül lesznek hagyva.
További információ: Index létrehozása ügynöki lekéréshez.
Adatfolyam-lekérés eredményei (előzetes verzió)
Az API-verziótól 2026-08-01-preview kezdve a lekérési eredményeket a kiszolgáló által küldött események streamjeként (SSE) kaphatja meg ahelyett, hogy egyetlen JSON-válaszra vár. A streamelés használatával az ügyfél megjelenítheti a lekérdezéstervezést, a forrástevékenységet és a szintetizált választ vagy a kinyert választ abban a sorrendben, ahogy az egyes részeket elérhetővé válik.
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}");
}
Referencia: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}")
Referencia:KnowledgeBaseRetrievalClient
Ha csatlakozni szeretne a streameléshez, adja meg a Accept: text/event-stream fejlécet egy lekéréses kérelemben. E fejléc nélkül a lekérési művelet a szokásos JSON-választ adja vissza.
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
}
]
}
Referencia:Tudáslekérés – Lekérés
Esemény életciklusa
Egyetlen válasz visszaadása helyett a szolgáltatás egyetlen HTTP-kapcsolatot tart nyitva (tartalomtípus text/event-stream; charset=utf-8), és események sorozatát küldi el, amint az adatok elérhetővé válnak. Minden eseménynek van egy event: olyan sora, amely az esemény típusát, egy data: JSON-értéket tartalmazó sort és egy üres sort, amely az esemény végét jelöli.
A sikeres stream a következő életciklust használja:
| Event | Az elküldés időpontja | Mit tartalmaz? |
|---|---|---|
retrieval.started |
Minden streamelt kéréshez tartozó első esemény. | A kérelemazonosító, a tudásbázis neve, a kimeneti mód és az érvényes következtetési ráfordítás, miután a szolgáltatás feloldja a kéréshez és a tudásbázishoz tartozó alapértelmezett értékeket. Ha az érvényes kind értéke auto, az esemény auto értéket jelez; ez nem jelzi előre a későbbi eszkalációt. |
activity.started |
Amikor a szolgáltatás megkezdi a lekérdezés-tervezést, a forrás- vagy a modelltevékenységet. Egy korábbi tevékenység befejeződése előtt több tevékenység is elkezdhető. | A tevékenység id, a typekezdési időpont és az opcionális tudásbázisnév. |
activity.completed |
Amikor a tevékenység befejeződik. Kapcsolja az activity.started eseményhez a(z) id egyeztetésével. |
A befejezett tevékenységi rekord. |
answer.completed |
Egyszer, csak akkor, ha outputMode van answerSynthesis. |
messageIndex azonosítja az üzenet pozícióját a végső választömbben, és message tartalmazza a teljes szintetizált választ. Nincs tokenenkénti deltaesemény. |
references.completed |
Az összes hivatkozás feloldása után. | Az eseményadatok a teljes hivatkozási tömb, objektumburkoló nélkül. |
response.completed |
A sikeres vagy részben sikeres stream termináleseménye. |
200 vagy 206 állapotkód és a lekérési válasz teljes törzse, amelynek a struktúrája megegyezik egy nem streamelő JSON-híváséval. Az egyes állapotkódok jelentését a lekérési művelet hibaelhárítása című témakörben találja. |
error |
references.completed helyett response.completed, ha a lekérés a stream megnyitása után meghiúsul. |
A hiba és a meghibásodás előtt befejeződött tevékenységrekordok. |
Az események sorrendben érkeznek. Minden activity.started esemény megelőzi az azonos activity.completed-vel rendelkező id eseményt, de a tevékenységek összefonódhatnak. A befejezett tevékenységrekordok a completedAtkezdési és befejezésistartedAt időbélyegeket is tartalmazzák. Amíg a stream tétlen, a kiszolgáló körülbelül 15 másodpercenként küld megjegyzést : heartbeat a kapcsolat nyitva tartásához. Az SSE-ügyfelek figyelmen kívül hagyhatják ezeket a megjegyzéseket.
Az alábbi példa egy folyamatosan továbbított választ szemléltet, ahol az adatcsomagok az olvashatóság érdekében rövidített formában jelennek meg.
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":{}}
Hibák, megszakítások és tartalékmegoldások kezelése
Elővizsgálati hibák: Ha a kérés érvényesítése sikertelen a stream megnyitása előtt, például hibásan formázott kérelemtörzs esetén, a lekérési művelet normál JSON-hibaválaszt ad vissza, és soha nem nyitja meg a streamet.
Stream közbeni hibák: Ha a lekérdezés a stream megnyitása után meghiúsul, a terminálesemény
error, nem pedigresponse.completedésreferences.completed. Az esemény tartalmazhat minden olyan tevékenységrekordot, amely a hiba előtt befejeződött. A HTTP-állapotkód a stream elindítása után is megmarad200, ezért a sikeresség megállapításához ellenőrizze a termináleseményt, ne a HTTP-állapotkódot.Lemondás vagy a kapcsolat megszakadása: Ha a kliens lemondja a kérést, vagy az adatfolyam befejezése előtt megszakítja a kapcsolatot, a szolgáltatás leállítja a lekérést, és záró esemény nélkül lezárja az adatfolyamot. A lemondás vagy a kapcsolat bontása előtt kapott eseményeket befejezetlennek kell tekinteni.
JSON-visszaállás: A hiányzó
Acceptfejléc a2026-08-01-previewhasználatakor, illetve az olyan értékek, mint aapplication/json,*/*,text/*vagytext/event-stream;q=0, a A válasz áttekintése részben ismertetett szabványos JSON-választ adják vissza. Atext/event-streamkérés egy korábbi API-verziótól ad vissza406 Not Acceptable.
Keresési index tudásforrásának szűrése lekérdezéskor
A keresési index tudásbázisából való lekéréskor oData-szűrőt alkalmazhat lekérdezéskor, hogy az eredményeket meghatározott dokumentumokra vagy mezőkre szűkítse. A szűrőkifejezés OData szintaxist használ, és a filterAddOn paraméteren keresztül továbbítja.
Szintaxis és példák szűrése
A filterAddOn paraméter OData-szűrőkifejezéseket fogad el. Példák a következőkre:
-
Metaadatmezők:
city eq 'Phoenix',status eq 'active' -
Dátumtartományok:
publishDate ge 2024-01-01 and publishDate le 2024-12-31 -
Numerikus tartományok:
price ge 100 and price le 5000 -
Szövegmegfeleltetés:
substringof('climate', description),indexof(title, 'urgent') ge 0 -
Logikai operátorok:
(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'"
}
]
}
Többszűrős példa
Az eredmények további finomításához több szűrőt is kombinálhat.
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"
}
Tárolt lekérdezési tippek felülbírálása lekérdezéskor (előzetes verzió)
A(z) 2026-08-01-preview API-verziótól kezdve felülbírálhatja a keresési index ismeretforrásában tárolt lekérdezési tippeket egyetlen lekérési kéréshez úgy, hogy beállítja a queryHintOverrides értéket annak knowledgeSourceParams bejegyzésén.
A felülbírálás a teljes tárolt queryHints objektumot teljes egészében felülírja ahelyett, hogy bejegyzésenként egyesítené, ezért adjon meg minden olyan útmutatást, amelyet alkalmazni szeretne. Ne használja queryHintOverrides a tárolt tippeket.
Amikor a lekérési következtetési erőfeszítés nem minimal, a HTTP 400-as válasz a tárolt szűrési útmutatásoktól függ, nem a felülbírálási tartalomtól vagy a kiemelési típustól. A szolgáltatás alkalmazás előtt ellenőrzi a tárolt szűrőmutatókat a tudásbázismodellen queryHintOverrides. Ezért a GPT-4o vagy GPT-4.1 modellcsaládba tartozó modell akkor is elutasítja a kérést, ha a felülbírálás üres, vagy csak boostokat tartalmaz. A tárolt ráerősítések önmagukban nem váltják ki ezt az érvényesítést. Használjon kompatibilis modellt, vagy távolítsa el először a tárolt szűrőmutatókat.
Az alábbi példa az összes tárolt tippet egy fieldValue boosttal helyettesíti a japán nyelvű tartalomhoz. A szolgáltatás nem alkalmaz tárolt szűrőt vagy egyéb tárolt lökést erre a kérésre.
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);
Referencia: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)
Referencia: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
}
Referencia:Tudáslekérés – Lekérés
Annak megerősítéséhez, hogy a szolgáltatás alkalmazta a felülbírálást, állítsa be a kérésben a(z) includeActivity értéket, és ellenőrizze a visszaadott searchIndex tevékenységet. Az queryHintProcessing objektum azt jelenti, hogy a modell mit hozott létre. Ebben a példában van egy generatedBoost a nyelvi erősítéshez, de nincs generatedFilter, mert a felülbírálás felülírta a tárolt szűrési tippet. Mivel a lekérdezési tippek csak tájékoztató jellegűek, ezt a műveletet inkább megerősítésként kezelje, ne pedig egy pontos kifejezés ellenőrzéseként.
{
"type": "searchIndex",
"queryHintProcessing": {
"generatedBoost": "language:(ja\\-JP)^2"
},
"searchIndexArguments": {
"queryType": "full"
}
}
A tárolt definícióval, a támogatott tipptípusokkal és a determinisztikus szűrőkkel való összeállítással kapcsolatban lásd a lekérdezési tippek konfigurálása (előzetes verzió) című témakört.
Engedélyek kényszerítése lekérdezéskor (előzetes verzió)
A(z) 2026-08-01-preview rendszeren kívül beállított hozzáférési engedélyek módosításainak a(z) 2026-08-01-preview lekérési eredményeiben való megjelenése eltarthat egy ideig.
Ha a tudásbázis engedélyekkel védett tartalmat tartalmaz, adja át a végfelhasználó identitását a lekérési kérelemben, hogy minden felhasználó csak a hozzáférésre jogosult tartalmat láthassa. Indexelt források esetén a lekérési motor ezt az identitást használja az eredmények szűrésére, és szűretlen eredményeket ad vissza, ha nincs megadva. A távoli források a lekérési kérelemből származó engedélyezést is használják, de engedélyeket kényszerítenek ki a forrásnál, és szükség lehet egy forrásspecifikus jogkivonatra és fejlécre.
Az engedélyek kényszerítése két részből áll:
Betöltési idő: Csak indexelt tudásbázisok esetén állítsa be
ingestionPermissionOptionsaz engedély metaadatainak betöltését a tartalom mellett.Lekérdezési idő: Adja meg a felhasználó engedélyét a tudásbázis által igényelt fejlécben. A legtöbb forrás használja
x-ms-query-source-authorization. Ez alól kivételt képez a Work IQ, amely a következőt használjax-ms-query-work-iq-source-authorization: .
Betöltési idő konfigurációja
Az alábbi táblázat azt mutatja be, hogy mely tudásbázisok igényelnek betöltési idejű konfigurációt, és hogy az egyes források hogyan kényszerítik ki az engedélyeket.
| Tudásbázis | Megköveteli ingestionPermissionOptions |
Engedélyek kikényszerítése |
|---|---|---|
| Blob vagy ADLS Gen2 | ✅ | A betöltött RBAC-hatókörök, ACL-ek vagy Microsoft Purview egyeznek a felhasználói identitással. |
| OneLake | ✅ | A beolvasott dokumentum Microsoft Purview bizalmassági címkéi a felhasználó identitásával lettek összevetve. |
| Indexelt SharePoint | ✅ | Betöltött SharePoint ACL-eket vagy Microsoft Purview bizalmassági címkéket, amelyek megfelelnek a felhasználói identitásnak. |
| Külső SharePoint | ❌ | A Copilot Visszakeresési API lekérdezéseket hajt végre közvetlenül a felhasználó jogkivonatával a SharePointtal. |
| Fabric adatügynök | ❌ | A lekérési motor a felhasználó tokenjét egy, a Microsoft Fabric hatókörére érvényes tokenre cseréli, és a felhasználó nevében lekérdezést küld az adatügynöknek. |
| Fabric ontológia | ❌ | A visszakereső motor a felhasználó tokenjét egy, a Microsoft Fabric hatókörére érvényes tokenre cseréli, és a felhasználó nevében lekérdezi az ontológiaelemet. |
| Munkahelyi IQ | ❌ | A lekérdező motor a(z) x-ms-query-work-iq-source-authorization alkalmazásközönségre vonatkozó felhasználói állítást Work IQ-hatókörű tokenre cseréli. |
Ha nem konfigurálja ingestionPermissionOptions az indexelt tudásbázis létrehozásakor, az index nem tartalmaz engedély metaadatokat. A rendszer a fejléctől függetlenül szűretlen eredményt ad vissza. A probléma megoldásához hozza létre újra a tudásbázist a megfelelő ingestionPermissionOptions értékekkel.
Lekérdezési idő engedélyezése
A nem a Work IQ-hoz tartozó tudásforrások esetén adja át a végfelhasználó identitását úgy, hogy a lekérési kérésben megad egy, a https://search.azure.com/.default hatókörére korlátozott hozzáférési tokent. Ez a token különbözik a keresési szolgáltatás elérésére használt hitelesítő adatoktól. Nincs szüksége keresési szolgáltatás engedélyére, és csak azt a felhasználót jelöli, akinek a tartalomhozzáférése kiértékelve van. További információ: Lekérdezési időalapú ACL és RBAC-kényszerítés.
A Work IQ-alapú tudásbázisok esetében ez a szakasz nem érvényes. Használja a Munkahelyi IQ-specifikus felhasználói érvényesítési folyamatot, amelyet az Engedélyek kényszerítése lekérdezéskor című szakaszban ismertet.
A .NET SDK-ben adja át a token-t a querySourceAuthorization paraméterként a RetrieveAsync-en.
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);
Referencia:KnowledgeBaseRetrievalClient, KnowledgeBaseRetrievalRequest
A Python SDK-ban adja át a jogkivonatot query_source_authorization paraméterként 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)
Referencia:KnowledgeBaseRetrievalClient, KnowledgeBaseRetrievalRequest
A REST API-ban adja meg a x-ms-query-source-authorization fejlécet a felhasználó hozzáférési jogkivonatával:
@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?"
}
]
}
]
}
Referencia:Tudáslekérés – Lekérés
A válasz áttekintése
A lekérési művelet három fő összetevőt ad vissza:
- Kinyert válasz vagy szintetizált válasz (előzetes verzió) (a kimeneti módtól függően)
- Tevékenységtömb
- Hivatkozások tömb
Kinyert válasz
A kinyert válasz egy egységes sztring, amelyet általában egy LLM-nek ad át. Az LLM a karakterláncot alapvető adatként alkalmazza, és válaszkészítésre használja. Az LLM-hez irányuló API-hívás tartalmazza az egységes sztringet és a modell utasításait, például azt, hogy a földelést kizárólag vagy kiegészítőként használja-e.
A válasz törzse a csevegőüzenet stílusának formátumában van felépítve, a tartalom pedig szerializált 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>\"}]"
}
]
}
]
Főbb pontok:
content.typeegy érvényes értékkel rendelkezik:text.content.textA keresési indexben található legrelevánsabb dokumentumokat (vagy adattömböket) tartalmazó JSON-kódolt sztring a lekérdezési és csevegési előzmények bemenetei alapján. Ez a karakterlánc az az alapadat, amelyet egy LLM használ a felhasználó kérdésére adott válasz megfogalmazásához.A válasz ezen része legfeljebb 200 darabból áll, kizárva azokat az eredményeket, amelyek nem felelnek meg a minimális 2,5-ös reranker-pontszám küszöbértékének.
A sztring az adattömb referenciaazonosítójával kezdődik (idézési célokra), valamint a célindex szemantikai konfigurációjában megadott mezőkkel. Ebben a példában tegyük fel, hogy a célindex szemantikai konfigurációja tartalmaz egy "title" mezőt, egy "terms" mezőt és egy "content" mezőt.
A lekérési válaszok nem tartalmazzák a(z)
@search.rerankerBoostedScoreelemet.A lekérési kérelem
maxOutputSizeInTokenstulajdonsága (maxOutputSizea(z)2026-05-01-previewés újabb verziókban) határozza meg a karakterlánc hosszát.- A kimeneti költségvetést meghaladó
maxOutputSizeInTokensdokumentum kihagyható a válaszból. A tevékenységtömb figyelmeztetést tartalmaz, ha a legrelevánsabb dokumentum meghaladja a maximális kimeneti méretet. További tartalom megőrzéséhez növelje a elemetmaxOutputSizeInTokens. További információ: Üres válaszok.
- A kimeneti költségvetést meghaladó
Tevékenység sorozat
A tevékenységtömb kimenete a lekérdezési terv, amely működési átláthatóságot biztosít a műveletek nyomon követéséhez, a számlázási következményekhez és az erőforrás-meghívásokhoz. A lekérési folyamatnak küldött allekérdezéseket is tartalmazza. Egy 206 Partial Content válasz esetén a tömb a sikertelen tudásforrásokra vonatkozó hibákat tartalmaz. Előfordulhat, hogy a 502 Bad Gateway válasz csak a legfelső szintű hiba hibaadatait adja meg.
A tevékenységtömb a következő összetevőket tartalmazza:
| Szakasz | Leírás |
|---|---|
| Forrásspecifikus tevékenység | A lekérdezésben szereplő minden egyes tudásbázis esetében ez a szakasz az eltelt időről és a lekérdezésben használt argumentumokról számol be, beleértve a szemantikai rangsorolót is. A tudásbázis-típusok közé tartoznak a searchIndex, azureBlobés egyéb támogatott tudásbázisok. |
agenticReasoning |
Ez a szakasz a lekérés során végzett ügynöki érvelés tokenfelhasználásáról számol be, amely a megadott lekérési érvelési erőfeszítéstől (előzetes verzió) függ. |
modelQueryPlanning |
Azoknál a tudásbázisoknál, amelyek a lekérdezéstervezéshez LLM-et használnak, ez a szakasz a bemenethez használt tokenek számáról és az allekérdezések tokenszámáról ad tájékoztatást. Tartalmaz egy model mezőt, amely egy modelName mezőt tartalmaz a tevékenységet futtató modell nyilvános nevével, nem pedig a telepítési nevével. |
modelAnswerSynthesis |
Azoknál a tudásbázisoknál, amelyek válaszszintézist (előzetes verzió) használnak, ez a szakasz megjeleníti a válasz megfogalmazásához felhasznált tokenek számát és a kimeneti válasz tokenszámát. Tartalmaz egy model mezőt, amely egy modelName mezőt tartalmaz a tevékenységet futtató modell nyilvános nevével, nem pedig a telepítési nevével. |
modelWebSummarization |
A webes összefoglalást használó tudásbázisok esetében ez a szakasz a webes találatok összefoglalásához kapcsolódó tokenfelhasználásról ad tájékoztatást. Tartalmaz egy model mezőt, amely egy modelName mezőt tartalmaz a tevékenységet futtató modell nyilvános nevével, nem pedig a telepítési nevével. |
model |
A modell által támogatott tevékenységrekordok esetében ez a szakasz a tevékenység végrehajtásához használt modellt azonosítja. Ez a szakasz csak akkor jelenik meg, ha a(z) includeActivity értékét true értékre állítja. |
imageServing |
Az olyan tudásforrások esetében, amelyeknél engedélyezve van a képkiszolgálás (előzetes verzió), ez a szakasz imagesRetrieved, imagesSentToModel, totalImageSizeBytes és azt jelzi, hogy az indexeléskori verbalizationUsed be volt-e kapcsolva. Vizsgálja meg verbalizationUsed és imagesSentToModel függetlenül. A válasz a verbalizationUsed elemet true értékként adhatja meg, és továbbra is küldhet képeket a lejjebb lévő modellnek. Az eldobott képek számának megállapításához vonja ki a(z) imagesSentToModel értéket a(z) imagesRetrieved értékből. |
Az alábbi példa a tevékenységtömböt mutatja be.
"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
}
]
Hivatkozások tömb
A hivatkozási tömb közvetlenül a mögöttes földelési adatokból származik. Tartalmazza a sourceData válasz létrehozásához használt és az ügynöki lekérési motor által talált és szemantikailag rangsorolt összes dokumentumot.
A hivatkozási tömb a következő összetevőket tartalmazza:
| Field | Leírás |
|---|---|
type |
A referenciát előállító tudásforrás típusa, például searchIndex. |
id |
A válaszon belüli elem referencia-azonosítója. Ez nem a keresési index dokumentumkulcsa. Használja hivatkozások megadásához. |
activitySource |
Kereszthivatkozást hoz létre arra a tevékenységbejegyzésre, amely létrehozta a id hivatkozást, ami hasznos az idézethivatkozások összekapcsolásához. |
docKey |
Indexelt hivatkozás esetén a háttérbeli keresési index dokumentumkulcsa. |
sourceData |
A válasz létrehozásához használt földelési adatok. Indexelt referencia esetén a mezők egy id mezőt és szemantikai mezőket is tartalmazhatnak, például a következőket: title, terms és content. Az alakzat referenciatípusonként változik. |
citationUrl (előzetes verzió) |
A szolgáltatás által létrehozott, csak olvasható URL-cím, amely a háttérindexben a hivatkozás dokumentumára mutat. Csak indexelt tudásforrások esetén érhető vissza. Az URL-cím követéséhez tekintse meg az idézet URL-címeivel (előzetes verzió) rendelkező dokumentumok keresése című témakört. |
Az alábbi példa a hivatkozástömböt mutatja be.
"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
}
]
Dokumentumok keresése idézet URL-címekkel (előzetes verzió)
A 2026-08-01-preview API-verziótól kezdve az indexelt tudásforrásból származó hivatkozás tartalmazhat egy citationUrl elemet a lekérési válaszban. Ezzel az URL-címvel lekérheti az indexelt mezőket az adott hivatkozáshoz, például title és content, így megjelenítheti az idézet előnézetét, amely megmutatja, honnan érkezett a válasz az eredeti forrásdokumentum megnyitása nélkül. Ez citationUrl egy hitelesített lekérdezés a háttérben lévő indexbe, elkülönülve a forrás docUrl és blobUrl elemektől.
Az alábbi példa egy fertőtlenített idézet URL-címét mutatja be.
"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"
A kijelölt mezők és azok sorrendje az indexelt forrástól és a lekérési konfigurációtól függ.
Fontos
Kövesse a válasz szó szerinti teljes URL-címét, és renderelje az alkalmazásban a visszaadott JSON-mezőket. Az URL-címet ne hozza létre, ne elemezje vagy normalizálja.
Az idézet URL-címe alapján az alábbi példák egy hozzáférési jogkivonatot kapnak a keresési szolgáltatáshoz. Az URL-t a fejlécben lévő Authorization tokennel hívják meg. A bejelentkezett identitásnak a Keresési index adatolvasó szerepkörre van szüksége.
Azure AI Keresés SDK-dokumentumkeresési módszereknek külön bemenetként kell megadniuk a végpontot, az index nevét, a dokumentumkulcsot, a kijelölt mezőket és az API-verziót. Nem fogadnak el abszolút idézet URL-címet. Ezek a példák hitelesített HTTP GET használatával őrzik meg a szolgáltatás által generált TELJES URL-címet.
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);
Hivatkozás: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))
Hivatkozás:DefaultAzureCredential
GET {{citation-url}}
Authorization: Bearer {{search-access-token}}
Referencia:Dokumentumok – Lekérés
A dokumentumkeresés A kijelölt indexmezőket JSON-ként adja vissza:
{
"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"
}
Idézet URL-címének használatakor tartsa szem előtt az alábbiakat:
Az idézethivatkozás megjelenítése előtt ellenőrizze, hogy van-e
citationUrl. Előfordulhat, hogy a válasz nem tartalmaz hivatkozásokat, vagy a szolgáltatás nem tudja feloldani a háttérindexet vagy a dokumentumkulcsot.Ha a lekérési kérelem dokumentumszintű hozzáférés-vezérlést tartalmaz
x-ms-query-source-authorization, használja ugyanazt a felhasználói jogkivonatot az URL-cím követésekor.Az URL-cím csak akkor marad érvényes, ha a háttérindex és a dokumentumkulcs változatlan marad.
Bizalmassági címke metaadatainak vizsgálata a válaszban (előzetes verzió)
A lekérdezési időponthoz tartozó engedélyek kikényszerítésében leírt időzítési viselkedés itt is érvényes: a külső 2026-08-01-preview hozzáférési engedélyek módosítása időt vehet igénybe a válaszokban 2026-08-01-preview való megjelenéshez.
Amikor olyan tudásbázist kérdez le, amely feldolgozza a Microsoft Purview érzékenységi címkéket, a lekérdezésre adott válasz két szinten tartalmazza a címkék metaadatait:
| Elhelyezkedés | Field | Leírás |
|---|---|---|
| Hivatkozásonként | sensitivityLabelInfo |
A(z) references tömbben visszaadott egyes dokumentumokra alkalmazott bizalmassági címke. |
| Response | metadata.responseSensitivityLabelInfo |
Összesített címke, amely a válasz összes hivatkozott dokumentumában a legmagasabb prioritású bizalmassági címkét jelöli. Hasznos ügyféloldali bannerek megjelenítéséhez és szabályzatok érvényesítéséhez. |
A Microsoft Graph az egyes hivatkozások címkéiből a Microsoft Purview címkeöröklési szabályai alapján számítja ki a válaszszintű címkét. Általában a legkorlátozóbb címke nyer.
Az alábbi példában egy lekéréses válasz látható két hivatkozott dokumentummal (egy Confidential, egy Internal) és az eredményként kapott válaszszintű címkével.
{
"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
}
}
}
A bizalmassági címkéket megjelenítő hivatkozástípusok
A címke metaadatainak mezőneve és elérhetősége az egyes hivatkozásokat előállító tudásbázistípustól függ.
Hivatkozás type |
Címkemező | Akkor érhető el, ha... |
|---|---|---|
azureBlob |
sensitivityLabelInfo |
A blobismeretforrás tartalmazza a(z) sensitivityLabel elemet itt: ingestionPermissionOptions. |
indexedOneLake |
sensitivityLabelInfo |
A OneLake tudásforrás sensitivityLabel alatt tartalmazza a(z) ingestionPermissionOptions elemet. |
indexedSharePoint |
sensitivityLabelInfo |
A SharePoint által indexelt tudásforrás tartalmazza a(z) sensitivityLabel elemet itt: ingestionPermissionOptions. |
searchIndex |
sensitivityLabelInfo |
A mögöttes indexben a purviewEnabled értéke true értékre van állítva, és egy mező sensitivityLabel: true értékkel van megjelölve. |
Ajánlások megjelenítése és ellenőrzése
A
sensitivityLabelInfo.labelIdhasználatával megkeresheti a teljes címkedefiníciót a Microsoft Graph bizalmassági címke API-kkal, ha további tulajdonságokra, például szabályzatvezérlőkre vagy engedélyekre van szüksége.A
metadata.responseSensitivityLabelInfohasználatával válaszszintű érzékenységi szalagcímet jeleníthet meg, vagy szabályzati vezérlőket alkalmazhat – például letilthatja a másolást és a megosztást – a teljes válaszon.Ha a tudásforrás egy adattömbös indexre mutat, például egy integrált vektorizálással vagy egy egyéni szövegfelosztási képességgel, győződjön meg arról, hogy a képességkészlet az egyes adattömbsorok bizalmassági címkéjét jeleníti meg. A leképezés nélkül az adattömbszintű hivatkozások nem lesznek megfelelően szűrve a lekérdezési időpontban.
A címkézett tartalomhoz biztosított auditálható rendszergazdai hozzáféréssel kapcsolatban lásd: Emelt szintű olvasási jogosultság rendszergazdai vizsgálatokhoz.
MCP-kiszolgáló viselkedése
Az egyes tudásbázisok által közzétett MCP-végpont ugyanazokat a bizalmassági címkemezőket jeleníti meg, mint a REST API. Amikor egy MCP-kompatibilis ügyfél meghívja az knowledge_base_retrieve eszközt, az eszköz eredménye ugyanazt a referencia sensitivityLabelInfo - és válaszszintet metadata.responseSensitivityLabelInfo tartalmazza, amelyet a szakasz korábbi részében dokumentált. Az MCP-ügyfelek e mezők alapján érvényesítik a címkefüggő megjelenítést és a szabályzatvezérlést.
Példák lekérése műveletre (előzetes verzió)
Az alábbi példák különböző módokon hívják meg a lekérési műveletet az 2026-08-01-preview API-verzió használatával. Ez a verzió támogatja a teljes funkciókészletet, beleértve a válaszszintézist és a konfigurálható érvelési erőfeszítéseket. A 2026-04-01 használatáról lásd az előző szakaszokat.
- Modellnevek vizsgálata tevékenységnaplókban
- Tudásbázis megkövetelése a sikerességhez
- Tudásbázis kizárása egy kérelemből
- Kandidátus dokumentumok hangolása tudásforrásonként
- Végleges alapdokumentumok korlátozása
- A tudásbázis alapértelmezett lekérésének ellenőrzése
- Az alapértelmezett érvelési munka felülbírálása és a kérelmek korlátainak beállítása
- Hagyja, hogy a szolgáltatás válassza ki az érvelési erőfeszítést
- Hivatkozások beállítása az egyes tudásbázisokhoz
- Minimális érvelési erőfeszítés használata
Modellnevek vizsgálata tevékenységnaplókban
Állítsa a(z) includeActivity értékét erre: true , hogy a modellalapú tevékenységrekordokban szereplő modellazonosító-mezőket adja vissza. Ezekkel a mezőkkel ellenőrizheti, hogy melyik konfigurált modell kezelte a lekérdezéstervezést, a válaszszintézist vagy a webes összegzést egy lekéréses kérelem során. Az alábbi példa felülbírálja a kérelemben kiválasztott forrás tárolt eredményfeldolgozását.
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}");
}
}
Referencia: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,
)
Referencia: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"
}
]
}
Referencia:Tudáslekérés – Lekérés
A következő válaszrészlet a beágyazott modell identitását mutatja be:
{
"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
}
]
}
Tudásbázis megkövetelése a sikerességhez
Állítsa be a(z) failOnError értéket itt: knowledgeSourceParams, hogy kötelezőként jelöljön meg egy tudásforrást. Ezt a paramétert akkor használja, ha egy részleges válasz félrevezető vagy nem megfelelő, ha a forrás nem érhető el. A kérés akkor is visszatér 502 Bad Gateway , ha egy szükséges forrás meghiúsul, még akkor is, ha egy másik forrás sikeres. A kezelési útmutatót a lekérési művelet hibaelhárítása című témakörben találja.
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);
Referencia: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)
Referencia: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"
}
]
}
Referencia:Tudáslekérés – Lekérés
Tudásbázis kizárása egy kérelemből
A(z) 2026-08-01-preview API-verziótól kezdve állítsa a(z) true értékét neverQuerySource értékre minden egyes tudásforrás esetében, amelyet ki szeretne zárni egy lekérési kérésből. A kérés időpontjában megadott neverQuerySource felülírja az adott kéréshez tárolt alwaysQuerySource értéket anélkül, hogy a tárolt érték megváltozna.
Az alábbi példa egy olyan tudásbázist kérdez le, amely product-docs-ks és troubleshooting-ks elemeket tartalmaz, a kérésből pedig kizárja a(z) troubleshooting-ks elemet.
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);
Referencia: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)
Referencia: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
}
]
}
Referencia:Tudáslekérés – Lekérés
Jelölt dokumentumok hangolása tudásforrásonként
A(z) maxOutputDocuments területen állítsa be a(z) knowledgeSourceParams értékét, hogy korlátozza, egy adott tudásforrás legfeljebb hány jelölt dokumentummal járulhat hozzá a végső eredmény kiválasztása előtt. Ezt a paramétert akkor használja, ha az egyik forrás bemenetét a folyamathoz szeretné kötni anélkül, hogy másokat érinteni szeretne.
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);
Referencia: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)
Referencia: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
}
]
}
Referencia:Tudáslekérés – Lekérés
Végleges alapdokumentumok korlátozása
A legfelső szintű maxOutputDocuments paraméter azt határozza meg, hogy a rendszer hány földelési dokumentumot ad vissza a végső lekérési válaszban. Ezt a paramétert akkor használja, ha az alkalmazásnak kiszámítható idézetre vagy hivatkozásszámra van szüksége.
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);
Referencia: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)
Referencia: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
}
Referencia:Tudáslekérés – Lekérés
Az alábbi táblázat bemutatja, hogyan működik együtt a(z) maxOutputDocuments és a(z) maxOutputSizeInTokens mind a négy kombinációban.
maxOutputDocuments |
maxOutputSizeInTokens |
Viselkedés |
|---|---|---|
| Meghatározatlan | Meghatározatlan | Az alapértelmezett maxOutputSizeInTokens válaszkorlát viselkedését használja. |
| Meghatározatlan | Meghatározott | A hasznos adatméret korlátjának elérése után elveti a dokumentumokat. |
| Meghatározott | Meghatározatlan | A megadott számú alapdokumentumot adja vissza, és nem alkalmaz korlátot maxOutputSizeInTokens . |
| Meghatározott | Meghatározott | Legfeljebb maxOutputDocuments dokumentumot ad vissza, vagy annyit, amennyi belefér a(z) maxOutputSizeInTokens korlátba, attól függően, hogy melyik korlát érvényesül előbb. |
A tudásbázis alapértelmezett lekérési beállításainak ellenőrzése
A tudásbázis a kérelemszintű alapértelmezett értékeket a következőben retrieveDefaultstárolhatja: . Küldjön két lekéréses kérelmet az öröklés és a kérelemspecifikus felülbírálások ellenőrzéséhez.
Mielőtt hozzákezdene, végezze el az alapértelmezett lekérési korlátok (előzetes verzió) konfigurálását. Az első kérés nem adja meg a teljes kérésre vonatkozó mindhárom korlátot, így a tárolt 45 másodperces, nyolc dokumentumos és 12 000 tokenes értékek érvényesek. A második kérés ezeket 20 másodpercre, egy dokumentumra és 5 000 tokenre írja felül.
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");
Referencia: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")
Referencia:KnowledgeBaseRetrievalClient, KnowledgeBaseRetrievalRequest
Először küldjön egy kérelmet, amely kihagyja a három kérelemszintű korlátmezőt.
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."
}
]
}
Ezután felülbírálja a három értéket egy kérelemnél.
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
}
Referencia:Tudáslekérés – Lekérés
A referenciaszám azt mutatja, hogy a tárolt vagy a kérelemszintű maxOutputDocuments érték érvényes-e: az első válasz legfeljebb nyolc hivatkozást tartalmaz, a második pedig legfeljebb egyet. A válaszok kevesebb hivatkozást tartalmazhatnak, ha kevesebb dokumentum egyezik. A válasz nem jelenti az érvényes futtatókörnyezeti vagy kimeneti jogkivonat költségvetését, de ezek az értékek továbbra is szabályozzák a kérések feldolgozását. A kérelmek felülbírálása nem módosítja a tárolt alapértelmezett értékeket.
Az alapértelmezett érvelési munka felülbírálása és a kérelmek korlátainak beállítása
Az alábbi példa a válaszszintézist határozza meg, ezért a visszakeresési érvelés ráfordítása csak low vagy medium lehet. Emellett beállítja a maxOutputSizeInTokens értéket a lekérdezés futási idejének korlátozására, valamint a maxRuntimeInSeconds értéket a válasz hasznos adatméretének korlátozására.
maxRuntimeInSeconds 10 és 600 másodperc közötti értékeket fogad el, alapértelmezett értéke pedig 90 másodperc. A 600 másodperces (10 perces) maximális érték csak a Azure AI Keresés lekéréses kérelemre vonatkozik.
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
);
Referencia: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)
Referencia: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
}
Referencia:Tudáslekérés – Lekérés
Hagyja, hogy a szolgáltatás válassza ki az érvelési erőfeszítést
A tudásbázis alapértelmezett beállításának felülbírálásához egy lekérési kérelemben állítsa auto értékét erre: retrievalReasoningEffort.kind. Az automatikus érveléssel kapcsolatos további információkért lásd: A lekéréshez kapcsolódó érvelési ráfordítás beállítása (előzetes verzió).
{
"retrievalReasoningEffort": {
"kind": "auto"
}
}
Referencia:Tudáslekérés – Lekérés
Hivatkozások beállítása az egyes tudásbázisokhoz
A includeReferences elemben a includeReferenceSourceData és a knowledgeSourceParams használatával szabályozhatja, hogy mely források jelenjenek meg a references tömbben, és hogy az egyes bejegyzések mennyi forrásadatot tartalmazzanak. Az alábbi példa a tudásbázis alapértelmezett érvelési törekvését használja.
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
);
Referencia: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)
Referencia: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
}
]
}
Referencia:Tudáslekérés – Lekérés
Minimális érvelési erőfeszítés használata
Az alábbi példában nincs LLM az intelligens lekérdezéstervezéshez vagy a válaszszintézishez. A lekérdezési sztring a kulcsszókereső vagy hibrid kereső ügynöki lekérési motorhoz kerül.
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
);
Referencia: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)
Referencia: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"
}
]
}
Referencia:Tudáslekérés – Lekérés
A lekérési művelet hibaelhárítása
A 2026-08-01-previewválasz állapota azt jelzi, hogy a lekérés sikeres, részben sikeres vagy sikertelen volt-e, és hogy mi a következő lépés. Az alábbi táblázat segítségével párosítsa az egyes állapotokat a jelentésükkel, majd tekintse meg a hibaelhárítási útmutató megfelelő szakaszát.
| Status | Meaning |
|---|---|
200 OK |
A lekérés sikerült. A dokumentum továbbra is elhagyható, ha tartalma meghaladja a kimeneti költségvetést. További információ: Üres válaszok. |
400 Bad Request |
A lekérési kérelem ellenőrzése sikertelen volt a lekérés megkezdése előtt. |
206 Partial Content |
Legalább egy forrás sikeres volt, és a rendszer nem jelölt failOnErrormeg sikertelen forrást. A válasz a sikeres forrásokból származó eredményeket tartalmazza. |
502 Bad Gateway |
Minden kijelölt forrás sikertelen volt, vagy egy megjelölt failOnError: true forrás sikertelen volt. |
Bármely nem-200 válasz esetén rögzítse az API-verziót, az időbélyeget, az érzékeny adatoktól megtisztított kéréstörzset, a válaszfejléceket, valamint a kérés- vagy korrelációs azonosítót. Ezek a részletek segítenek diagnosztizálni a hibát, és szükség esetén megosztani a problémát a támogatással.
400 Bad Request
Használja a legfelső szintű hibát az érvénytelen kérelemtulajdonság azonosításához. A gyakori kiváltó okok között a következőket találjuk:
- A
knowledgeSourceNameitt:knowledgeSourceParamsnincs a tudásbázishoz csatolva, vagy a(z)kindnem egyezik a csatolt forrással. - A kérelem értéke kívül esik a támogatott tartományon, vagy egy beállításhoz egy másik, nem engedélyezett beállítás szükséges. Ehhez például
includeReferenceSourceDataszükségesincludeReferences. -
retrievalReasoningEffort.kindértékeauto, de a kérés a(z)2026-08-01-preview-nél korábbi API-verziót használja. - A kérés a
auto,lowvagymediumelemet használja, de a tudásbázis nem definiál modellt. - A forráskizárás a kérés időpontjában (előzetes verzió) esetében ugyanez a bejegyzés a
alwaysQuerySourceés aneverQuerySourceértékét istrueértékre állítja, vagy az összes csatolt tudásforrás ki van zárva.
A kérés újrapróbálkozása előtt javítsa ki a legfelső szintű hiba által azonosított tulajdonságot.
206 Partial Content
Vizsgáljon meg minden activity elemet tartalmazó error bejegyzést. A forráslekérési tevékenység azonosítja a sikertelen tudásforrást, a modelltevékenység pedig a sikertelen feldolgozási szakaszt. A válasz törzse továbbra is tartalmazza a sikeres eredményeket.
A forráslekérési tevékenység hibáinak gyakori okai a következők:
- Érvénytelen lekérdezési idő beírása, például helytelen formátumú
filterAddOnkifejezés. - A tudásbázis- vagy indexkonfiguráció eltérése, például átnevezett mező, hiányzó szemantikai konfiguráció vagy érvénytelen vektorizáló.
- Hiányzó vagy érvénytelen függőségi engedélyezés, vagy nem megfelelő engedélyek a forrás lekérdezéséhez használt identitáshoz.
- A függőségekhez kapcsolódó korlátozás, időtúllépés vagy átmeneti rendelkezésre állási problémák.
Modelltevékenység-hiba esetén a tevékenység type használatával azonosíthatja a sikertelen feldolgozási szakaszt. Egy hiba például azt jelzi, modelWebSummarization hogy a webes eredmények összegzése sikertelen volt.
Ha az alkalmazás részleges eredményeket engedélyez, dolgozza fel a sikeres eredményeket, és rögzítse az egyes sikertelen forrás- vagy modellszakaszokat. Az újrapróbálkozás előtt javítsa ki a konfigurációs, engedélyezési és engedélyhibákat. Szabályozás, időtúllépés vagy átmeneti rendelkezésre állási hibák esetén használjon korlátozott újrapróbálkozást a visszalépéssel.
Ha az eredmények nem biztonságosak egy adott forrás nélkül, és a forrástípus támogatja alwaysQuerySource, állítsa be mindkettőt alwaysQuerySource és failOnError. Az első beállítás biztosítja, hogy a forrás ki legyen választva, a második pedig kemény hibát ad vissza, ha a lekérdezés sikertelen. Az MCP-kiszolgáló tudásbázisai (előzetes verzió) nem támogatottakalwaysQuerySource; failOnError ezekre a forrásokra csak a forrás kiválasztásakor vonatkozik.
failOnError nem vonatkozik a modelltevékenység-hibákra.
502 Bad Gateway
A felső szintű hiba két sikertelen elérési út egyikét írja le:
- Minden kijelölt forrás nem sikerült: Minden kijelölt forrás hibát adott vissza. A nulla egyező dokumentummal sikeresen befejezett forrás nem hibás forrás. Vizsgálja meg a megosztott konfigurációval, engedélyezéssel, függőségsel vagy rendelkezésre állással kapcsolatos minden forráshibát.
-
Egy
failOnErrorforrás használata sikertelen volt: Nem sikerült lekérdezni egy szükséges forrást. Más források is sikeresek lehetnek, de a szolgáltatás nem ad vissza részleges eredményt, mert a szükséges forrás nem sikerült.
A mögöttes forráshibák általában ugyanazok, mint a következők esetében 206 Partial Contentleírtak: érvénytelen forrásspecifikus bemenet, forrás- vagy indexkonfiguráció eltérése, függőségi engedélyezés vagy engedélyek, szabályozás, időtúllépések vagy átmeneti függőségek rendelkezésre állása.
Előfordulhat, hogy egy kemény 502 válasz kihagyja a activity tömböt, és csak a legfelső szintű hibaüzenetben adja meg a forrásnevet és a mögöttes hibát. Az újrapróbálkozás előtt javítsa ki a konfigurációs, engedélyezési és engedélyhibákat. A korlátozott újrapróbálkozások csak szabályozási, időtúllépési vagy átmeneti rendelkezésreállási hibák esetén használhatók visszalépéssel. Ne értelmezze a 502 Bad Gateway választ Azure AI Keresés kimaradásként a mögöttes forráshiba vizsgálata nélkül.
Üres válaszok
Előfordulhat, hogy a keresési lépés talál egy dokumentumot, de a szolgáltatás továbbra is kihagyhatja azt a végső válaszból, ha az alapozott tartalma meghaladja a maxOutputSizeInTokens kimeneti költségvetést (maxOutputSize benne 2026-05-01-preview és később). Ha ez a feltétel bekövetkezik, a tevékenységtömb azt mutatja, hogy egyezések találhatók, és a tevékenységrekord figyelmeztetést tartalmaz arra vonatkozóan, hogy a legrelevánsabb dokumentum túllépte a maximális kimeneti méretet. A hivatkozások tömbje és a megalapozott válasz tartalma ennél a dokumentumnál üres. További tartalom megőrzéséhez növelje a elemet maxOutputSizeInTokens.
A viselkedés elkerülése érdekében a nagyméretű forrásdokumentumokat kisebb adattömbökként indexelje stabil azonosítókkal és forrás metaadatokkal. Ez különösen a hosszú kézikönyvekre, szabályzatokra vagy tudásbáziscikkekre vonatkozik.
Az MCP-végpont meghívása
Warning
Az MCP-implementációk érzékenyek a kockázatokra, például a támadásokra, a kaszkádolt hibákra és az emberi felügyelet elvesztésére. Ezeket a kockázatokat az MCP-kiszolgálók biztonsági és megbízhatósági vizsgálatával, Microsoft ajánlott eljárásainak és adustry ajánlott eljárásainak követésével, valamint jóváhagyási mechanizmusok implementálásával és a kaszkádolt viselkedések monitorozásával csökkentheti.
Az MCP egy nyílt protokoll, amely szabványosítja az AI-alkalmazások külső adatforrásokhoz és eszközökhöz való kapcsolódását.
A Azure AI Keresés minden tudásbázis egy különálló MCP-kiszolgáló, amely a knowledge_base_retrieve eszközt teszi elérhetővé. Bármely MCP-kompatibilis ügyfél, beleértve a Foundry Agent Service, GitHub Copilot, Claude és Cursor, meghívhatja ezt az eszközt a tudásbázis lekérdezéséhez.
Hitelesítés az MCP-végponton
Minden tudásbázishoz tartozik egy MCP-végpont a következő URL-címen:
https://<search-service-name>.search.windows.net/knowledgebases/<knowledge-base-name>/mcp?api-version=<api-version>
A megadott API-verzió határozza meg, hogy a kapcsolat mit ad vissza. A használatával 2026-08-01-previewa tudásbázis szintetizált válaszokat ad vissza, ha az alapul szolgáló tudásbázist LLM-sel és kompatibilis érvelési munkával konfigurálják. A(z) 2026-04-01 használatával az adatlekérés mindig minimális és kivonatoló jellegű, és a kapcsolat csak megalapozó adatokat ad vissza.
A végpont hitelesítésének menete az MCP-ügyféltől függ. Ha az Azure OpenAI Responses API-t a knowledge_base_retrieve MCP-eszközzel használja, akkor hitelesíti mind az Azure OpenAI felé irányuló Responses API-hívást, mind az Azure AI Keresésnek küldött MCP-kérelmet. Ha az MCP-ügyfél közvetlenül hívja meg ezt a végpontot, csak az Azure AI Keresés szolgáltatásnál kell hitelesítenie magát.
A Azure AI Keresés hitelesítéshez használja az alábbi módszerek egyikét:
-
Adjon meg egy bearer tokent a
Authorizationfejlécben (ajánlott) -
Rendszergazdai kulcs átadása a
api-keyfejlécben
Megjegyzés
Az MCP-ügyfelek másképp konfigurálják az egyéni fejléceket. Például a Foundry Agent Service projektkapcsolatokon át szúr be fejléceket, míg az olyan kliensek, mint a GitHub Copilot, az MCP-kiszolgáló JSON-konfigurációjában igénylik a fejléceket.
Tulajdonosi jogkivonat használata MCP-hitelesítéshez
Az MCP-hitelesítés ajánlott módszere egy tulajdonosi jogkivonat, amely megakadályozza a bizalmas kulcsok konfigurációs fájlokban való tárolását. A jogkivonat mögötti identitáshoz hozzá kell rendelni a Keresési index adatolvasó szerepkört a keresési szolgáltatáshoz. További információ: Az alkalmazás csatlakoztatása az Azure AI Keresés-hez identitások használatával.
#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());
Referencia:Az Azure OpenAI Responses API használata
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)
Referencia:Az Azure OpenAI Responses API használata
// This code snippet is currently unavailable.
Rendszergazdai kulcs használata MCP-hitelesítéshez
A rendszergazdai kulcs teljes olvasási-írási hozzáférést biztosít a keresési szolgáltatáshoz, ezért csak fejlesztési környezetekben vagy akkor használja, ha egy tulajdonosi jogkivonat nem érhető el. További információ: Csatlakozás Azure AI Keresés API-kulcsokkal.
Jótanács
Az alábbi példa csak azt a fejlécet mutatja be, amely eltér a bearer tokenes példában szereplőtől. A teljes beállításért lásd: Tulajdonosi jogkivonat használata AZ MCP-hitelesítéshez.
#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)
);
Referencia:Az Azure OpenAI Responses API használata
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",
}
]
Referencia:Az Azure OpenAI Responses API használata
// This code snippet is currently unavailable.
Az MCP-válasz áttekintése
Amikor egy MCP-ügyfél meghívja a knowledge_base_retrieve elemet, a lekérési művelet response, activity és references borítéka helyett egy MCP-eszköz eredményét kapja. Sok MCP-ügyfél az eszköz eredményét egy legfelső szintű result objektumban jeleníti meg, ezért a várt hasznos adat a következő: 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>\"}]"
}
]
}
}
Főbb pontok:
result.content[]A tudásbázis által visszaadott MCP-eszközkimenetet tartalmazza.result.content[].typeaztext.result.content[].textA lekért földelési adatokat JSON-kódolt sztringként tartalmazza.A lekérési művelettől eltérően az aktuális MCP-válasz nem ad vissza külön
activityvagyreferencestömböket, és nem tölti kiresourcea visszaadott tartalom bejegyzéseit.
Kapcsolódó tartalom
- Ügynöki lekérdezés az Azure AI Keresés-ben
- Lekérdezési idejű ACL- és RBAC-érvényesítés (előzetes verzió)
- Az RBAC-hatókörök metaadatainak betöltése blobindexelő vagy tudásbázis használatával (előzetes verzió)
- Agentic RAG: Érvelési és keresési motor építése az Azure AI Keresés használatával (YouTube-videó)
- Azure OpenAI-bemutató ügynöki lekérés funkcióval