Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Not
Azure Yapay Zeka Arama Azure portalı, REST API'leri ve Azure SDK’ları aracılığıyla kullanılabilir. Ayrıca kuruluş içeriğini Microsoft Foundry portalındaki aracılar için yeniden kullanılabilir, izin kullanan bilgi bankalarına dönüştüren yönetilen bilgi katmanı Foundry IQ'yu temel alır.
Önemli
(önizleme) olarak işaretlenen özellikler, özellikler veya özellikler hizmet düzeyi sözleşmesi kapsamında değildir, üretim iş yükleri için önerilmez ve genel kullanıma sunulmadan önce değişebilir veya kısıtlanabilir. Azure Yapay Zeka Arama önizleme terimleri, tek başına veya genel kullanıma sunulan bir özelliğin parçası olsun, tüm önizleme işlevleri için geçerlidir.
Ajan odaklı bir alma işlem hattında, geri çağırma eylemi bir bilgi bankasından paralel sorgu işlemeyi başlatır. Arama Hizmeti REST API'lerini veya bir Azure SDK kullanarak alma eylemini doğrudan çağırabilirsiniz. Her bilgi bankası, MCP uyumlu aracılar tarafından kullanılmak üzere bir Model Bağlam Protokolü (MCP) uç noktasını da kullanıma sunar.
Bu makale, isteğe bağlı izin uygulamasıyla her iki alma yönteminin de nasıl çağrılacağını açıklar. MCP aracının sonucu şu anda REST ve SDK yanıt yapısından farklı olduğu için, önce getirme işlemini, ardından MCP uç noktasını ele alır.
Azure Yapay Zeka Arama'i MCP aracılığıyla Foundry Agent Service'e bağlayan bir boru hattı ayarlamak için Uçtan uca aracı tabanlı bilgi alma çözümü oluşturma rehberine bakın.
Kullanım desteği
| Azure portalı | Microsoft Foundry portalı | .NET SDK | Python SDK'sı | Java SDK | JavaScript SDK'sı | REST API |
|---|---|---|---|---|---|---|
| ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
Önkoşullar
bildirme tabanı olan bir Azure Yapay Zeka Arama hizmeti.
Paylaşılan model erişimi ve istemci kurulumu için bkz. Bilgi bankası oluşturma önkoşulları.
Bilgi bankalarını sorgulama izni. Kullanıcı hesabınıza atanan Arama Dizini Veri Okuyucusu rolüyle anahtarsız kimlik doğrulamasını yapılandırın (önerilir) veya bir sorgu API anahtarı kullanın.
AZURE OpenAI Yanıtlar API'sini aracılığıyla MCP uç noktasını çağırırsanız şunları yapmanız gerekir:
Foundry kaynağı üzerinde dağıtımı yapılmış bir LLM ve Cognitive Services OpenAI User rolü (veya bir API anahtarı). Varsa bilgi bankanızda belirtilen LLM'yi ve kaynağı yeniden kullanabilirsiniz.
Paket
Azure.AI.OpenAI:dotnet add package Azure.AI.OpenAI
Gerekli
Azure.Search.Documentspaketi:2026-08-01-previewözellikleri için en son önizleme paketi:dotnet add package Azure.Search.Documents --prerelease2026-04-01özellikleri için en son kararlı paket:dotnet add package Azure.Search.Documents
Anahtarsız kimlik doğrulaması için
Azure.Identitypaket:dotnet add package Azure.Identity
AZURE OpenAI Yanıtlar API'sini aracılığıyla MCP uç noktasını çağırırsanız şunları yapmanız gerekir:
Foundry kaynağı üzerinde dağıtımı yapılmış bir LLM ve Cognitive Services OpenAI User rolü (veya bir API anahtarı). Varsa bilgi bankanızda belirtilen LLM'yi ve kaynağı yeniden kullanabilirsiniz.
Paket
openai:pip install openai
Gerekli
azure-search-documentspaketi:2026-08-01-previewözellikleri için en son önizleme paketi:pip install --pre azure-search-documents2026-04-01özellikleri için en son kararlı paket:pip install azure-search-documents
Anahtarsız kimlik doğrulaması için
azure-identitypaket:pip install azure-identity
Gerekli Arama Hizmeti REST API sürümü:
Önizleme özellikleri için: 2026-08-01-preview
Genel kullanıma sunulan özellikler için: 2026-04-01
Anahtarsız kimlik doğrulaması için her HTTP isteğinin üst bilgisine
Authorizationbir Microsoft Entra ID belirteci ekleyin.
Limitations
Arama dizini bilgi kaynakları için, yeniden sıralamayı etkinleştirdiğinizde alma işlemi bilgi kaynağının anlamsal yapılandırmasını kullanır. Temel dizinin puanlama profillerini (dahil) defaultScoringProfileuygulamaz. Yanıtları alma işlemleri de @search.rerankerBoostedScore öğesini göstermez.
Alma eylemini çağırın
Bir bilgi tabanında geri alma işlemini belirtirsiniz. İstek gövdesi sorgu girişini ve hedeflene isteğe bağlı bilgi kaynaklarının listesini içerir.
2026-04-01 API sürümü yalnızca intents girdisini ve minimum düzeyde ayıklayıcı getirmeyi destekler. Yalnızca önizleme özellikleri, messages girişi, sorgu planlama, yanıt sentezi ve yapılandırılabilir sorgulama çabaları desteklenmez. Tam işlevsellik için kullanın 2026-08-01-preview .
using Azure.Identity;
using Azure;
using Azure.Search.Documents.KnowledgeBases;
using Azure.Search.Documents.KnowledgeBases.Models;
// Create knowledge base retrieval client
var kbClient = new KnowledgeBaseRetrievalClient(
endpoint: new Uri("<search-endpoint>"),
knowledgeBaseName: "<knowledge-base-name>",
credential: new DefaultAzureCredential()
);
var retrievalRequest = new KnowledgeBaseRetrievalRequest();
retrievalRequest.Messages.Add(
new KnowledgeBaseMessage(
content: new[] {
new KnowledgeBaseMessageTextContent(
"You can answer questions about the Earth at night. "
+ "Sources have a JSON format with a ref_id that must be cited in the answer. "
+ "If you do not have the answer, respond with 'I do not know'."
)
}
) { Role = "assistant" }
);
retrievalRequest.Messages.Add(
new KnowledgeBaseMessage(
content: new[] {
new KnowledgeBaseMessageTextContent(
"Why is the Phoenix nighttime street grid so sharply visible from space, "
+ "whereas large stretches of the interstate between midwestern cities remain comparatively dim?"
)
}
) { Role = "user" }
);
var result = await kbClient.RetrieveAsync(retrievalRequest);
Console.WriteLine(
(result.Value.Response[0].Content[0] as KnowledgeBaseMessageTextContent)!.Text
);
Reference:KnowledgeBaseRetrievalClient, KnowledgeBaseRetrievalRequest
from azure.identity import DefaultAzureCredential
from azure.search.documents.knowledgebases import KnowledgeBaseRetrievalClient
from azure.search.documents.knowledgebases.models import (
KnowledgeBaseMessage,
KnowledgeBaseMessageTextContent,
KnowledgeBaseRetrievalRequest,
SearchIndexKnowledgeSourceParams,
)
# Create knowledge base retrieval client
kb_client = KnowledgeBaseRetrievalClient(
endpoint="<search-endpoint>",
knowledge_base_name="<knowledge-base-name>",
credential=DefaultAzureCredential(),
)
request = KnowledgeBaseRetrievalRequest(
messages=[
KnowledgeBaseMessage(
role="assistant",
content=[
KnowledgeBaseMessageTextContent(
text="You can answer questions about the Earth at night. "
"Sources have a JSON format with a ref_id that must be cited in the answer. "
"If you do not have the answer, respond with 'I do not know'."
)
],
),
KnowledgeBaseMessage(
role="user",
content=[
KnowledgeBaseMessageTextContent(
text="Why is the Phoenix nighttime street grid so sharply visible from space, "
"whereas large stretches of the interstate between midwestern cities remain comparatively dim?"
)
],
),
],
knowledge_source_params=[
SearchIndexKnowledgeSourceParams(
knowledge_source_name="earth-at-night-blob-ks",
)
],
)
result = kb_client.retrieve(request)
print(result.response[0].content[0].text)
Reference:KnowledgeBaseRetrievalClient, KnowledgeBaseRetrievalRequest
@search-endpoint = <search-endpoint> // Example: https://my-service.search.windows.net
@search-access-token = <search-access-token> // Run: az account get-access-token --scope https://search.azure.com/.default --query accessToken -o tsv
POST {{search-endpoint}}/knowledgebases/{{knowledge-base-name}}/retrieve?api-version=2026-08-01-preview
Content-Type: application/json
Authorization: Bearer {{search-access-token}}
{
"messages": [
{
"role": "assistant",
"content": [
{
"type": "text",
"text": "You can answer questions about the Earth at night. Sources have a JSON format with a ref_id that must be cited in the answer. If you do not have the answer, respond with 'I do not know'."
}
]
},
{
"role": "user",
"content": [
{
"type": "text",
"text": "Why is the Phoenix nighttime street grid so sharply visible from space, whereas large stretches of the interstate between midwestern cities remain comparatively dim?"
}
]
}
],
"knowledgeSourceParams": [
{
"knowledgeSourceName": "earth-at-night-blob-ks",
"kind": "searchIndex"
}
]
}
Başvuru:Bilgi Getirme - Getirme
Sentez yanıtı için görseller sağlama (önizleme)
Bir varlık deposuyla yapılandırdığınız blob, dizinli OneLake ve dizinli SharePoint bilgi kaynakları için, metinle birlikte aşağı akış yanıt sentezi modeline belge eklenmiş görüntüler sağlayabilirsiniz. Bilgi bankası tanımında ayarlanan varsayılanı geçersiz kılmak için, enableImageServing içindeki eşleşen girdide knowledgeSourceParams ayarlayın. Alma yanıtı, tek tek görüntü yolları veya modele sağlanan görüntü baytları için ayrılmış alanlar içermez.
Görüntü sunumu yalnızca ingestionPermissionOptions, answerSynthesis olduğunda çalışır ve outputMode yapılandıran bilgi kaynakları için desteklenmez. Kurulum adımları, öncelik tablosu ve görüntü sunma istatistiklerini nasıl inceleyeceğiniz hakkında bilgi için bkz. Aracı destekli alımda belgeye gömülü görüntüleri ortaya çıkarma (önizleme).
Bilgi kaynağı için yeniden sıralamayı devre dışı bırakın (önizleme)
2026-08-01-preview API sürümünden itibaren, belirli bir bilgi kaynağı için yeniden sıralamayı atlamak ve altta yatan sonuç sırasını korumak üzere bir "resultsProcessing": "none" girişinde knowledgeSourceParams ayarlayın. Ayrıca, bilgi kaynağında varsayılan olarak depolayabilirsiniz resultsProcessing . Tüm bilgi kaynağı türleri bu özelliği destekler.
Aşağıdaki örnek, bir getirme isteğinde product-catalog-ks için yeniden sıralamayı atlar.
using System;
using System.Linq;
using Azure.Identity;
using Azure.Search.Documents.Indexes.Models;
using Azure.Search.Documents.KnowledgeBases;
using Azure.Search.Documents.KnowledgeBases.Models;
var client = new KnowledgeBaseRetrievalClient(
new Uri("<search-endpoint>"),
"product-catalog-kb",
new DefaultAzureCredential());
var request = new KnowledgeBaseRetrievalRequest
{
IncludeActivity = true
};
request.Intents.Add(
new KnowledgeRetrievalSemanticIntent(
"Find the power adapter for SKU 88421."));
request.KnowledgeSourceParams.Add(
new SearchIndexKnowledgeSourceParams("product-catalog-ks")
{
AlwaysQuerySource = true,
IncludeReferences = true,
ResultsProcessing = KnowledgeSourceResultsProcessing.None
});
var result = await client.RetrieveAsync(request);
Console.WriteLine(
$"References with a reranker score: "
+ $"{result.Value.References.Count(x => x.RerankerScore.HasValue)}");
Reference:KnowledgeBaseRetrievalClient, SearchIndexKnowledgeSourceParams
from azure.identity import DefaultAzureCredential
from azure.search.documents.knowledgebases import (
KnowledgeBaseRetrievalClient,
)
from azure.search.documents.knowledgebases.models import (
KnowledgeBaseRetrievalRequest,
KnowledgeRetrievalSemanticIntent,
SearchIndexKnowledgeSourceParams,
)
client = KnowledgeBaseRetrievalClient(
endpoint="<search-endpoint>",
knowledge_base_name="product-catalog-kb",
credential=DefaultAzureCredential(),
)
request = KnowledgeBaseRetrievalRequest(
intents=[
KnowledgeRetrievalSemanticIntent(
search="Find the power adapter for SKU 88421."
)
],
include_activity=True,
knowledge_source_params=[
SearchIndexKnowledgeSourceParams(
knowledge_source_name="product-catalog-ks",
always_query_source=True,
include_references=True,
results_processing="none",
)
],
)
result = client.retrieve(request)
reranked_count = sum(
reference.reranker_score is not None
for reference in result.references
)
print("References with a reranker score:", reranked_count)
Reference:KnowledgeBaseRetrievalClient, SearchIndexKnowledgeSourceParams
@search-endpoint = <search-endpoint>
@search-access-token = <search-access-token> // Run: az account get-access-token --scope https://search.azure.com/.default --query accessToken -o tsv
@knowledge-base-name = product-catalog-kb
POST {{search-endpoint}}/knowledgebases/{{knowledge-base-name}}/retrieve?api-version=2026-08-01-preview
Content-Type: application/json
Authorization: Bearer {{search-access-token}}
{
"intents": [
{
"type": "semantic",
"search": "Find the power adapter for SKU 88421."
}
],
"includeActivity": true,
"knowledgeSourceParams": [
{
"knowledgeSourceName": "product-catalog-ks",
"kind": "searchIndex",
"alwaysQuerySource": true,
"includeReferences": true,
"resultsProcessing": "none"
}
]
}
Başvuru:Bilgi Getirme - Getirme
Yeniden sıralama işlem hattını kullanmak için "resultsProcessing": "rerank" değerini ayarlayın veya depolanmış bir varsayılan yoksa bunu belirtmeyin. Azure Yapay Zeka Arama her kaynak için geçerli değeri şu sırayla çözümler:
-
resultsProcessing, alma isteğindeknowledgeSourceParamsiçinde. -
resultsProcessingbilgi kaynağında depolanır. -
rerankher iki özellik de mevcut olmadığında.
MCP sunucusu bilgi kaynağı için, tek bir araçta ayarlanan bir resultsProcessing değer istek ve depolanan değerlerden önceliklidir.
Tip
resultsProcessing hangi kaynakların sorgulandığını değil, sonuçların nasıl işlendiğini değiştirir. Bilgi kaynağının sorgulanması gerekiyorsa true değerini alwaysQuerySource olarak ayarlayın.
Etkin değer olduğunda none:
- Bilgi kaynağındaki referanslar
rerankerScoreögesini içermez ve sonuçlar, kaynağın getirme işlemi içinde altta yatan sıralamalarını korur. - Herhangi bir kaynak yeniden sıralamayı atladığında Azure Yapay Zeka Arama, bilgi kaynaklarının tanımlanma sırasını izleyerek nihai sonuçları etkinlikler arasında döngüsel sırayla dağıtır. Yeniden düzenlenmiş etkinlikler puana göre sıralı kalır.
- Yinelenenlerin kaldırılması ile kaynak, belge ve belirteç için tanımlı sınırlar hâlâ geçerliliğini koruduğundan, getirilen sonuçların tümü yanıtta yer almaz.
Azure Yapay Zeka Arama şu sırayla doğrularrerankerThreshold:
- Arama, alma isteğinden ve depolanan bilgi kaynağı değerinden
resultsProcessingöğesini çözümler. - Çözümlenen değer ise
noneve istek içeriyorsarerankerThreshold, Search döndürür400 Bad Request. - Bir MCP sunucu aracı için Search, isteği doğruladıktan sonra araç düzeyi
resultsProcessingdeğerini uygular.
Sonuç olarak, bir MCP araç ayarı isteğin doğrulamayı geçip geçmeyeceğini değiştirmez. Araç düzeyindeki none değeri bir eşik hatasına neden olmaz ve istek ya da depolanan değer none olarak çözümlendiğinde araç düzeyindeki rerank değeri bir hatayı engellemez.
Hangi modun çalıştığını doğrulamak için, bilgi kaynağının başvurularının rerankerScore öğesini içerip içermediğini denetleyin. atlanmak yerine semanticConfigurationName olabilen null öğesine güvenmeyin.
Arama dizini davranışı
Arama dizinini hedefleyen bilgi kaynakları için zımni sorgu türü şeklindedir semanticve arama modu yoktur. Yeniden sıralama çalıştığında, sorgu yürütme semanticConfigurationName kullanır.
sourceDataFields ve searchFields dahil olmak üzere diğer kaynak ayarları, her iki modda da geçerlidir.
Ajan tabanlı alma, scoringProfile veya scoringParameters girdilerini kabul etmez. Dizinlenmiş bilgi kaynakları için güncellik önyargısına ihtiyacınız varsa, dizin puanlama profili yerine güncelliğe duyarlı getirme (önizleme) kullanın.
Dizin vektör alanları içeriyorsa, aracılı alma altyapısının sorgu girişlerini vektörleştirebilmesi için geçerli bir vektörleştirici tanımına ihtiyacınız vardır. Aksi takdirde vektör alanları göz ardı edilir.
Daha fazla bilgi için bkz. Etkin aracılı alma için dizin oluşturma.
Akıştan sonuç alma (önizleme)
API sürümünden 2026-08-01-preview başlayarak, sonuçları tek bir JSON yanıtı beklemek yerine sunucu tarafından gönderilen olayların (SSE) akışı olarak alabilirsiniz. Akıştan yararlanarak istemciniz, her bir parça kullanılabilir hale geldikçe sorgu planlamasını, kaynak etkinliğini ve sentezlenmiş yanıtı veya ayıklanan yanıtı bu sırayla görüntüleyebilir.
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}");
}
Başvuru: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}")
Başvuru:KnowledgeBaseRetrievalClient
Akışı etkinleştirmek için alma isteğine Accept: text/event-stream üst bilgisini ekleyin. Bu üst bilgi olmadan, alma eylemi standart JSON yanıtını döndürür.
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
}
]
}
Başvuru:Bilgi Getirme - Getirme
Olay yaşam döngüsü
Hizmet, tek bir yanıt döndürmek yerine bir HTTP bağlantısını (içerik türü text/event-stream; charset=utf-8) açık tutar ve veriler kullanılabilir hale geldikçe bir olay dizisi gönderir. Her olayın olay türünü adlandıran bir event: satırı, JSON değerine sahip bir data: satırı ve olayın sonunu işaretleyen boş bir satırı vardır.
Başarılı bir akış aşağıdaki yaşam döngüsünü kullanır:
| Etkinlik | Gönderildiği zaman | Ne içerir |
|---|---|---|
retrieval.started |
Her akışlı istekteki ilk olay. | Hizmet istek ve bilgi bankası varsayılanlarını çözümledikten sonra istek kimliği, bilgi bankası adı, çıkış modu ve etkili mantık yürütme çalışması. Geçerli kindauto ise olay, auto olarak bildirilir; sonraki bir yükseltmeyi öngörmez. |
activity.started |
Hizmet bir sorgu planlama, kaynak veya model etkinliğine başladığında. Önceki bir etkinlik tamamlanmadan önce birden çok etkinlik başlayabilir. | etkinliği id, type, başlangıç zamanı ve isteğe bağlı bilgi kaynağı adı. |
activity.completed |
Bu etkinlik tamamlandığında.
activity.started ile eşleştirerek bunu id olayıyla ilişkilendirin. |
Tamamlanan etkinlik kaydı. |
answer.completed |
Bir kez, yalnızca outputMode, answerSynthesis olduğunda. |
messageIndex iletinin son yanıt dizisindeki konumunu tanımlar ve message sentezlenmiş yanıtın tamamını içerir. Belirteçler arası delta olayı yoktur. |
references.completed |
Tüm referanslar çözüldükten sonra. | Olay verileri, nesne sarmalayıcı olmadan tam başvuru dizisidir. |
response.completed |
Başarılı veya kısmen başarılı bir akışın sonlanma olayı. |
200 veya 206 durum kodu ve akışsız bir JSON çağrısıyla aynı yapıya sahip tam alma yanıt gövdesi. Durum kodlarının her birinin ne anlama geldiği hakkında bilgi için bkz. Alma eylemiyle ilgili sorunları giderme. |
error |
Akış açıldıktan sonra alma işlemi başarısız olduğunda references.completed ve response.completed yerine. |
Hata ve hatadan önce tamamlanan tüm etkinlik kayıtları. |
Olaylar sırayla gelir. Her activity.started olayı, aynı id değerine sahip activity.completed olayından önce gelir, ancak etkinlikler iç içe geçebilir. Tamamlanan etkinlik kayıtları ayrıca completedAt ve startedAt zaman damgalarını içerir. Akış boştayken, sunucu bağlantıyı açık tutmak için yaklaşık 15 saniyede bir bir açıklama : heartbeat gönderir. SSE istemcileri bu yorumları yok sayabilir.
Aşağıdaki örnekte, okunabilirlik için yüklerin kısaltılmış olduğu akışlı bir yanıt gösterilmektedir.
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":{}}
Hataları, iptali ve geri dönüş mekanizmalarını yönetin
Denetim öncesi hatalar: Akış açılmadan önce istek doğrulaması başarısız olursa (örneğin, hatalı biçimlendirilmiş bir istek gövdesi için), alma eylemi standart bir JSON hata yanıtı döndürür ve akışı hiçbir zaman açmaz.
Akış sırasında oluşan hatalar: Akış açıldıktan sonra veri alma başarısız olursa, terminal olay
response.completedvereferences.completedyerineerrorolur. Olay, hatadan önce tamamlanan tüm etkinlik kayıtlarını içerebilir. Akış başladıktan sonra HTTP durum kodu kalır200, bu nedenle başarılı olup olmadığını belirlemek için HTTP durum kodunu değil terminal olayını denetleyin.İptal veya bağlantıyı kesme: İstemciniz isteği iptal ederse veya akış tamamlanmadan bağlantıyı keserse, hizmet alma işlemini iptal eder ve akışı terminal olayı olmadan sonlandırır. İptal öncesinde alınan tüm olayları tamamlanmamış olarak değerlendirin.
JSON yedeği:
2026-08-01-previewile, eksik birAcceptüst bilgisi veya*/*,text/*,application/jsonya datext/event-stream;q=0gibi bir değer, Yanıtı gözden geçirme bölümünde açıklanan standart JSON yanıtını döndürür. Önceki bir API sürümündentext/event-streamistendiğinde,406 Not Acceptabledöndürülür.
Sorgu zamanında arama dizini bilgi kaynaklarını filtreleme
Arama dizini bilgi kaynağından alırken, sonuçları belirli belgelere veya alanlara daraltmak için sorgu zamanında bir OData filtresi uygulayabilirsiniz. Filtre ifadesi OData söz dizimini kullanır ve parametresi aracılığıyla filterAddOn geçirilir.
Filtre söz dizimi ve örnekleri
filterAddOn parametresi OData filtre ifadelerini kabul eder. Örnek desenler şunlardır:
-
Meta veri alanları:
city eq 'Phoenix',status eq 'active' -
Tarih aralıkları:
publishDate ge 2024-01-01 and publishDate le 2024-12-31 -
Sayısal aralıklar:
price ge 100 and price le 5000 -
Metin eşleştirme:
substringof('climate', description),indexof(title, 'urgent') ge 0 -
Mantıksal işleçler:
(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'"
}
]
}
Çok filtreli örnek
Sonuçları daha da daraltmak için birden çok filtreyi birleştirebilirsiniz.
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"
}
Depolanan sorgu ipuçlarını sorgu zamanında geçersiz kılma (önizleme)
2026-08-01-preview API sürümünden itibaren, tek bir getirme isteği için arama dizini bilgi kaynağında depolanan sorgu ipuçlarını, queryHintOverrides girişinde knowledgeSourceParams ayarlayarak geçersiz kılabilirsiniz.
Geçersiz kılma işlemi, girdileri tek tek birleştirmek yerine saklanan queryHints nesnesinin tamamını değiştirir; bu nedenle uygulamak istediğiniz tüm ipuçlarını ekleyin. Depolanan ipuçlarını kullanmak için queryHintOverrides ögesini atlayın.
Geri getirme akıl yürütme çabası minimal değilse, HTTP 400 yanıtı geçersiz kılma içeriğine veya artırma türüne değil, depolanan filtre ipuçlarına bağlıdır. Hizmet, uygulamadan önce depolanan filtre ipuçlarını bilgi bankası modeline karşı doğrular queryHintOverrides. Bu nedenle, geçersiz kılma ayarı boş olsa veya yalnızca güçlendirmeler içerse bile, GPT-4o ya da GPT-4.1 model ailesinden bir model isteği reddeder. Yalnızca depolanan artışlar bu doğrulamayı tetiklemez. Uyumlu bir model kullanın veya önce depolanan filtre ipuçlarını kaldırın.
Aşağıdaki örnek, depolanan tüm ipuçlarını Japonca içerik için tek bir fieldValue destekle değiştirir. Hizmet, bu isteğe herhangi bir saklı filtre veya başka bir depolanmış yükseltme uygulamaz.
using System;
using Azure.Identity;
using Azure.Search.Documents.Indexes.Models;
using Azure.Search.Documents.KnowledgeBases;
using Azure.Search.Documents.KnowledgeBases.Models;
var endpoint = new Uri("<search-endpoint>");
var retrievalClient = new KnowledgeBaseRetrievalClient(
endpoint,
"product-kb",
new DefaultAzureCredential());
var languageBoost =
new SearchIndexKnowledgeSourceFieldValueBoost(
"language",
2.0);
languageBoost.FieldValues.Add("ja-JP");
var queryHintOverrides =
new SearchIndexKnowledgeSourceQueryHints();
queryHintOverrides.Boosts.Add(languageBoost);
var request = new KnowledgeBaseRetrievalRequest
{
RetrievalReasoningEffort =
new KnowledgeRetrievalLowReasoningEffort(),
IncludeActivity = true
};
request.Messages.Add(
new KnowledgeBaseMessage([
new KnowledgeBaseMessageTextContent(
"Find Japanese service guidance for Model-X200.")
])
{
Role = "user"
});
request.KnowledgeSourceParams.Add(
new SearchIndexKnowledgeSourceParams(
"product-docs-ks")
{
QueryHintOverrides = queryHintOverrides
});
var result = await retrievalClient.RetrieveAsync(request);
Reference:KnowledgeBaseRetrievalClient, SearchIndexKnowledgeSourceParams
from azure.identity import DefaultAzureCredential
from azure.search.documents.indexes.models import (
SearchIndexKnowledgeSourceFieldValueBoost,
SearchIndexKnowledgeSourceQueryHints,
)
from azure.search.documents.knowledgebases import (
KnowledgeBaseRetrievalClient,
)
from azure.search.documents.knowledgebases.models import (
KnowledgeBaseMessage,
KnowledgeBaseMessageTextContent,
KnowledgeBaseRetrievalRequest,
KnowledgeRetrievalLowReasoningEffort,
SearchIndexKnowledgeSourceParams,
)
retrieval_client = KnowledgeBaseRetrievalClient(
endpoint="<search-endpoint>",
credential=DefaultAzureCredential(),
knowledge_base_name="product-kb",
)
query_hint_overrides = SearchIndexKnowledgeSourceQueryHints(
boosts=[
SearchIndexKnowledgeSourceFieldValueBoost(
field="language",
field_values=["ja-JP"],
boost=2.0,
)
]
)
request = KnowledgeBaseRetrievalRequest(
messages=[
KnowledgeBaseMessage(
role="user",
content=[
KnowledgeBaseMessageTextContent(
text="Find Japanese service guidance for Model-X200."
)
],
)
],
knowledge_source_params=[
SearchIndexKnowledgeSourceParams(
knowledge_source_name="product-docs-ks",
query_hint_overrides=query_hint_overrides,
)
],
retrieval_reasoning_effort=(
KnowledgeRetrievalLowReasoningEffort()
),
include_activity=True,
)
result = retrieval_client.retrieve(request)
Reference:KnowledgeBaseRetrievalClient, SearchIndexKnowledgeSourceParams
POST {{search-endpoint}}/knowledgebases('product-kb')/retrieve?api-version=2026-08-01-preview
Content-Type: application/json
Authorization: Bearer {{search-access-token}}
{
"messages": [{
"role": "user",
"content": [{
"type": "text",
"text": "Find Japanese service guidance for Model-X200."
}]
}],
"knowledgeSourceParams": [{
"knowledgeSourceName": "product-docs-ks",
"kind": "searchIndex",
"queryHintOverrides": {
"boosts": [{
"kind": "fieldValue",
"field": "language",
"fieldValues": ["ja-JP"],
"boost": 2.0
}]
}
}],
"retrievalReasoningEffort": {"kind": "low"},
"includeActivity": true
}
Başvuru:Bilgi Getirme - Getirme
Hizmetin geçersiz kılma ayarınızı uyguladığını doğrulamak için, istekte includeActivity öğesini ayarlayın ve döndürülen searchIndex etkinliğini inceleyin. Nesnesi queryHintProcessing , modelin ne ürettiğini bildirir. Bu örnekte, dil güçlendirmesi için bir generatedBoost bulunur, ancak geçersiz kılma işlemi depolanan filtre ipucunun yerini aldığı için generatedFilter yoktur. Sorgu ipuçları en iyi çaba olduğundan, tam ifadeyi denetlemek yerine bu etkinliği onay olarak değerlendirin.
{
"type": "searchIndex",
"queryHintProcessing": {
"generatedBoost": "language:(ja\\-JP)^2"
},
"searchIndexArguments": {
"queryType": "full"
}
}
Depolanan tanım, desteklenen ipucu türleri ve belirleyici filtrelerle oluşturma için bkz. Sorgu ipuçlarını yapılandırma (önizleme).
Sorgu sırasında izinleri uygula (önizleme)
2026-08-01-preview dışında ayarladığınız erişim izinlerindeki değişikliklerin 2026-08-01-preview getirme sonuçlarında görünmesi zaman alabilir.
Bilgi kaynaklarınız izin korumalı içerik içeriyorsa, her kullanıcının yalnızca erişim yetkisine sahip olduğu içeriği görmesi için alma isteğinde son kullanıcının kimliğini geçirin. Dizinlenmiş kaynaklarda alma motoru, sonuçları filtrelemek için bu kimliği kullanır; bu kimlik belirtilmezse filtrelenmemiş sonuçlar döndürür. Uzak kaynaklar da getirme isteğindeki yetkilendirmeyi kullanır, ancak izinleri kaynakta uygular ve kaynağa özgü bir belirteç ile başlık gerektirebilir.
İzinlerin uygulanmasının iki bölümü vardır:
Özümseme zamanı: Yalnızca dizine alınmış bilgi kaynakları için, içerikle birlikte izin meta verilerini özümseme ayarlamak için
ingestionPermissionOptionsbelirleyin.Sorgu süresi: Bilgi kaynağının gerektirdiği üst bilgide kullanıcının yetkilendirmesini geçirin. Çoğu kaynak kullanır
x-ms-query-source-authorization. İstisna,x-ms-query-work-iq-source-authorizationkullanan Work IQ’dur.
Alım zamanı yapılandırması
Aşağıdaki tabloda, hangi bilgi kaynaklarının alım zamanı yapılandırması gerektirdiği ve her kaynağın izinleri nasıl zorunlu kıldığı gösterilmektedir.
| Bilgi kaynağı | Gerektirir ingestionPermissionOptions |
İzinler nasıl uygulanır? |
|---|---|---|
| Blob veya ADLS 2. Nesil | ✅ | Alınan RBAC kapsamları, ACL'ler veya Microsoft Purview kullanıcı kimliğiyle eşleştirildi. |
| OneLake | ✅ | İçe aktarılan belge, Microsoft Purview duyarlılık etiketleriyle kullanıcı kimliğine göre eşleştirildi. |
| Dizinlenmiş SharePoint | ✅ | Alınan SharePoint ACL'leri veya kullanıcı kimliğiyle eşleşen Microsoft Purview duyarlılık etiketleri. |
| Uzaktan SharePoint | ❌ | Copilot Retrieval API, sorguları doğrudan kullanıcının belirtecini kullanarak SharePoint'e yönlendirir. |
| Fabric Veri Aracısı | ❌ | Alma motoru, kullanıcının belirtecini Microsoft Fabric kapsamına sahip bir belirteçle değiştirir ve veri aracısını kullanıcı adına sorgular. |
| Fabric Ontolojisi | ❌ | Alma sistemi, kullanıcının belirtecini Microsoft Fabric kapsamına sahip bir belirteçle değiş tokuş eder ve ontoloji öğesini kullanıcı adına sorgular. |
| İş IQ'su | ❌ | Alma motoru, x-ms-query-work-iq-source-authorization’den bir uygulama hedef kitlesine yönelik kullanıcı beyanını Work IQ kapsamındaki bir belirteç karşılığında alır. |
Dizine alınan bilgi kaynağını oluştururken yapılandırmazsanız ingestionPermissionOptions , dizin izin meta verilerini içermez. Sistem, üst bilgiden bağımsız olarak filtrelenmemiş sonuçlar döndürür. Bu sorunu çözmek için bilgi kaynağını uygun ingestionPermissionOptions değerlerle yeniden oluşturun.
Sorgu anında yetkilendirme
Work IQ dışındaki bilgi kaynakları için, retrieve isteğine kapsamı https://search.azure.com/.default olarak belirlenmiş bir erişim belirteci ekleyerek son kullanıcının kimliğini iletin. Bu belirteç, arama hizmetine erişmek için kullanılan hizmet kimlik bilgilerinden ayrıdır. Arama hizmeti izinlerine gerek yoktur ve yalnızca içerik erişimi değerlendirilen kullanıcıyı temsil eder. Daha fazla bilgi için bkz. Sorgu anında ACL ve RBAC zorlama.
İş IQ bilgi kaynakları için bu bölüm geçerli değildir. Sorgu zamanında izinleri zorunlu kılma bölümünde açıklanan İş IQ'ya özgü kullanıcı onay akışını kullanın.
.NET SDK'de tokeni querySourceAuthorization üzerinde RetrieveAsync parametresi şeklinde geçirin:
using Azure;
using Azure.Identity;
using Azure.Search.Documents.KnowledgeBases;
using Azure.Search.Documents.KnowledgeBases.Models;
// Service credential: Authenticates to the search service
var serviceCredential = new DefaultAzureCredential();
// User identity token: Represents the end user for document-level permissions filtering
var userTokenContext = new Azure.Core.TokenRequestContext(
new[] { "https://search.azure.com/.default" }
);
string userToken = (await serviceCredential.GetTokenAsync(userTokenContext)).Token;
// Create the retrieval client with the service credential
var kbClient = new KnowledgeBaseRetrievalClient(
endpoint: new Uri("<search-endpoint>"),
knowledgeBaseName: "<knowledge-base-name>",
credential: serviceCredential
);
var request = new KnowledgeBaseRetrievalRequest();
request.Messages.Add(
new KnowledgeBaseMessage(
content: new[] {
new KnowledgeBaseMessageTextContent(
"What companies are in the financial sector?")
}
) { Role = "user" }
);
// Pass the user identity token for permissions filtering
var result = await kbClient.RetrieveAsync(
request, querySourceAuthorization: userToken);
var text = (result.Value.Response[0].Content[0] as KnowledgeBaseMessageTextContent)!.Text;
Console.WriteLine(text);
Reference:KnowledgeBaseRetrievalClient, KnowledgeBaseRetrievalRequest
Python SDK'de, belirteci query_source_authorization olarak retrieve parametresinde iletin:
from azure.identity import DefaultAzureCredential, get_bearer_token_provider
from azure.search.documents.knowledgebases import KnowledgeBaseRetrievalClient
from azure.search.documents.knowledgebases.models import (
KnowledgeBaseMessage, KnowledgeBaseMessageTextContent,
KnowledgeBaseRetrievalRequest,
)
# Service credential: Authenticates to the search service
service_credential = DefaultAzureCredential()
# User identity token: Represents the end user for document-level permissions filtering
user_token_provider = get_bearer_token_provider(
service_credential, "https://search.azure.com/.default")
user_token = user_token_provider()
# Create the retrieval client with the service credential
kb_client = KnowledgeBaseRetrievalClient(
endpoint="<search-endpoint>",
knowledge_base_name="<knowledge-base-name>",
credential=service_credential,
)
request = KnowledgeBaseRetrievalRequest(
messages=[
KnowledgeBaseMessage(
role="user",
content=[KnowledgeBaseMessageTextContent(
text="What companies are in the financial sector?")],
)
]
)
# Pass the user identity token for permissions filtering
result = kb_client.retrieve(
retrieval_request=request, query_source_authorization=user_token)
print(result.response[0].content[0].text)
Reference:KnowledgeBaseRetrievalClient, KnowledgeBaseRetrievalRequest
REST API'de kullanıcı erişim belirteciyle birlikte x-ms-query-source-authorization başlığını ekleyin.
@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?"
}
]
}
]
}
Başvuru:Bilgi Getirme - Getirme
Yanıtı gözden geçirme
Alma eylemi üç ana bileşen döndürür:
- Ayıklanan yanıt veya sentezlenmiş yanıt (önizleme) ( çıkış moduna bağlı olarak)
- Etkinlik dizisi
- Referans dizisi
Ayıklanan yanıt
Ayıklanan yanıt, genellikle bir LLM'ye aktardığınız tek, birleşik bir dizedir. LLM, dizeyi dayanak verisi olarak kullanır ve bir yanıt oluşturur. LLM'ye yönelik API çağrınız, modelin birleşik dizesini ve yönergelerini içerir; örneğin, temel oluşturmanın özel olarak mı yoksa ek olarak mı kullanılacağı.
Yanıtın gövdesi sohbet iletisi stili biçiminde yapılandırılmıştır ve içerik JSON serileştirilmiştir.
"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>\"}]"
}
]
}
]
Önemli noktalar:
content.typegeçerli bir değere sahiptir:text.content.text, sorgu ve sohbet geçmişi girişleri göz önünde bulundurulduğunda arama dizininde bulunan en ilgili belgeleri (veya öbekleri) içeren JSON kodlu bir dizedir. Bu dize, LLM'nin kullanıcının sorusuna yanıt formüle etmek için kullandığı topraklama verilerinizdir.Yanıtın bu bölümü, 2,5 reranker puanının minimum eşiğini karşılayemeyen sonuçlar hariç olmak üzere 200 veya daha az öbekden oluşur.
Dize öbek başvuru kimliğiyle (alıntı amacıyla kullanılır) ve hedef dizinin anlamsal yapılandırmasında belirtilen tüm alanlarla başlar. Bu örnekte, hedef dizindeki anlamsal yapılandırmanın bir "başlık" alanına, "terimler" alanına ve "içerik" alanına sahip olduğunu varsayalım.
Yanıtları alma işlemleri
@search.rerankerBoostedScoreiçermez.retrieve isteğindeki
maxOutputSizeInTokensözelliği (2026-05-01-previewve sonraki sürümlerdemaxOutputSize) dizenin uzunluğunu belirler.- Çıktı bütçesini
maxOutputSizeInTokensaşan bir belge yanıttan atlanabilir. Etkinlik dizisi, en uygun belge en yüksek çıkış boyutunu aştığında bir uyarı içerir. Daha fazla içeriği korumak içinmaxOutputSizeInTokensartırın. Daha fazla bilgi için bkz . Boş yanıtlar.
- Çıktı bütçesini
Etkinlik dizisi
Etkinlik dizisi, izleme işlemleri, faturalama etkileri ve kaynak çağrıları için işlem saydamlığı sağlayan sorgu planının çıkışını verir. Ayrıca erişim işlem hattına gönderilen alt sorguları da içerir. Bir 206 Partial Content yanıtı için dizi, başarısız olan bilgi kaynaklarına ilişkin hataları içerir. Yanıt 502 Bad Gateway , hata ayrıntılarını yalnızca üst düzey hatada sağlayabilir.
Etkinlik dizisi aşağıdaki bileşenleri içerir:
| Bölüm | Açıklama |
|---|---|
| Kaynağa özgü etkinlik | Sorguya dahil edilen her bilgi kaynağı için bu bölüm geçen süreyi ve semantik dereceleyici de dahil olmak üzere sorguda hangi bağımsız değişkenlerin kullanıldığını bildirir. Bilgi kaynağı türleri , searchIndexve desteklenen diğer azureBlob. |
agenticReasoning |
Bu bölümde, geri getirme sırasında ajan tabanlı akıl yürütmeye yönelik belirteç tüketimi raporlanır; bu tüketim, belirtilen geri getirme akıl yürütme çabasına (önizleme) bağlıdır. |
modelQueryPlanning |
Sorgu planlaması için LLM kullanan bilgi bankaları için, bu bölüm giriş için kullanılan belirteç sayısını ve alt sorgular için belirteç sayısını bildirir. Etkinliği çalıştıran modelin dağıtım adını değil genel model adını içeren bir modelName alan içerirmodel. |
modelAnswerSynthesis |
Yanıt sentezi (önizleme) kullanan bilgi bankaları için bu bölümde yanıtın formülesine yönelik belirteç sayısı ve yanıt çıkışının belirteç sayısı bildirilir. Etkinliği çalıştıran modelin dağıtım adını değil genel model adını içeren bir modelName alan içerirmodel. |
modelWebSummarization |
Web özetlemesi kullanan bilgi bankaları için bu bölüm, web sonuçlarını özetlemek için belirteç tüketimini bildirir. Etkinliği çalıştıran modelin dağıtım adını değil genel model adını içeren bir modelName alan içerirmodel. |
model |
Model destekli etkinlik kayıtları için bu bölüm, etkinliği gerçekleştirmek için kullanılan modeli tanımlar. Bu bölüm yalnızca includeActivity öğesini true olarak ayarladığınızda görünür. |
imageServing |
Görüntü sunma (önizleme) özelliğinin etkinleştirildiği bilgi kaynakları için bu bölümde , imagesSentToModel, totalImageSizeBytesve dizin oluşturma süresinin verbalizationUsed açık olup olmadığı bildirilmiştirimagesRetrieved.
verbalizationUsed ve imagesSentToModel öğelerini bağımsız olarak inceleyin. Bir yanıt, true öğesini verbalizationUsed olarak bildirebilir ve yine de aşağı akış modeline görüntü gönderebilir. Çıkarılan görüntü sayısını bulmak için imagesSentToModel değerinden imagesRetrieved değerini çıkarın. |
Aşağıdaki örnekte etkinlik dizisi gösterilmektedir.
"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
}
]
Referanslar dizisi
Başvurular dizisi doğrudan temel verilerden gelir.
sourceData yanıtı oluşturmak için kullanılan öğeyi içerir ve ajan alım motorunun bulduğu ve anlamsal olarak sıraladığı her belgeden oluşur.
References dizisi aşağıdaki bileşenleri içerir:
| Alan | Açıklama |
|---|---|
type |
Başvuruyu oluşturan bilgi kaynağı türü, örneğin searchIndex. |
id |
Bir yanıt içindeki bir öğenin referans kimliği. Arama dizinindeki belge anahtarı bu değildir. Alıntı sağlamak için kullanın. |
activitySource |
Başvuruyu üreten etkinlik girdisinin id öğesine çapraz başvuru yapar; bu, atıf bağlantılandırması için kullanışlıdır. |
docKey |
Dizinlenmiş bir başvuru için, temel alınan arama dizinindeki belge anahtarı. |
sourceData |
Yanıtı oluşturmak için kullanılan dayanak verileri. Dizinlenmiş bir başvuru için alanlar, terms ve content, title ve id gibi anlamsal alanlar içerebilir. Şekil, başvuru türüne göre değişir. |
citationUrl (önizleme) |
Hizmet tarafından oluşturulan, salt okunur ve arka plandaki dizinde başvurunun belgesini işaret eden bir URL. Yalnızca dizine alınan bilgi kaynakları için döndürülür. URL'yi izlemek için bkz . Alıntı URL'leri (önizleme) içeren belgeleri arama. |
Aşağıdaki örnekte references dizisi gösterilmektedir.
"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
}
]
Alıntı URL'leri içeren belgeleri arama (önizleme)
2026-08-01-preview API sürümünden itibaren, dizine alınmış bir bilgi kaynağındaki bir referans, getirme yanıtında bir citationUrl içerebilir. Bu URL’yi kullanarak, örneğin content ve title gibi, o referans için indekslenmiş alanları getirebilir ve özgün kaynak belgeyi açmadan bir yanıtın nereden geldiğini gösteren bir atıf önizlemesi oluşturabilirsiniz.
citationUrl, kaynak docUrl ve blobUrl'den ayrı olarak, arka plandaki dizinde kimlik doğrulamalı bir sorgulamadır.
Aşağıdaki örnekte temizlenmiş bir alıntı URL'si gösterilmektedir.
"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"
Seçili alanlar ve bunların sırası dizine alınan kaynak ve alma yapılandırmasına bağlıdır.
Önemli
Yanıttaki tam URL’yi aynen izleyin ve döndürülen JSON alanlarını uygulamanızda görüntüleyin. URL'yi oluşturmayın, ayrıştırmayın veya normalleştirmeyin.
Alıntı URL'si verüldüğünde, aşağıdaki örnekler arama hizmeti için bir erişim belirteci alır. URL'yi, Authorization üst bilgisinde bu belirteçle çağırırlar. Oturum açmış kimliğin Arama Dizini Veri Okuyucusu rolüne ihtiyacı vardır.
Azure Yapay Zeka Arama SDK belge arama yöntemleri uç nokta, dizin adı, belge anahtarı, seçili alanlar ve API sürümünü ayrı girişler olarak gerektirir. Mutlak bir alıntı URL'si kabul etmedikleri için. Bu örneklerde, hizmet tarafından oluşturulan URL'nin tamamını korumak için kimliği doğrulanmış bir HTTP GET kullanılır.
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);
Referans: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))
Referans:DefaultAzureCredential
GET {{citation-url}}
Authorization: Bearer {{search-access-token}}
Başvuru:Belgeler - Get
Belge arama, seçili dizin alanlarını JSON olarak döndürür:
{
"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"
}
Bir alıntı URL'si kullandığınızda aşağıdakileri göz önünde bulundurun:
Atfı görüntülemeden önce
citationUrlolup olmadığını kontrol edin. Yanıt referansları içermiyorsa veya hizmet arka plandaki dizini ya da belge anahtarını çözümleyemiyorsa, bu bulunmayabilir.Alma isteği
x-ms-query-source-authorizationbelge düzeyi erişim denetimi içeriyorsa, URL'yi takip ederken aynı kullanıcı belirtecini kullanın.URL yalnızca yedekleme dizini ve belge anahtarı değişmeden kalırken geçerli kalır.
Yanıttaki duyarlılık etiketi meta verilerini inceleyin (önizleme)
Sorgu zamanında izinleri zorunlu kılma bölümünde açıklanan zamanlama davranışı burada da geçerlidir: dışında 2026-08-01-preview ayarladığınız erişim izinlerinde yapılan değişikliklerin yanıt alma işleminde 2026-08-01-preview görünmesi zaman alabilir.
Microsoft Purview duyarlılık etiketlerini alan bir bilgi bankasını sorguladığınızda, alma yanıtı iki düzeyde etiket meta verilerini içerir:
| Yer | Alan | Açıklama |
|---|---|---|
| Referans başına | sensitivityLabelInfo |
references dizisinde döndürülen her belgeye uygulanan duyarlılık etiketi. |
| Response | metadata.responseSensitivityLabelInfo |
Yanıtta başvurulan tüm belgeler genelinde en yüksek öncelikli duyarlılık etiketini temsil eden toplu etiket. İstemci tarafında görüntüleme afişleri ve ilke uygulaması için kullanılır. |
Microsoft Graph, Microsoft Purview etiket devralma kurallarını kullanarak başvuru başına etiketlerden yanıt düzeyi etiketini hesaplar. Genellikle en kısıtlayıcı etiket kazanır.
Aşağıdaki örnek, atıfta bulunulan iki belgeyi (biri Confidential, diğeri Internal) ve ortaya çıkan yanıt düzeyi etiketini içeren bir getirme yanıtını göstermektedir.
{
"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
}
}
}
Duyarlılık etiketlerini ortaya çıkaran başvuru türleri
Etiket meta verilerinin alan adı ve kullanılabilirliği, her başvuruyu oluşturan bilgi kaynağı türüne bağlıdır.
Referans type |
Etiket alanı | Şu durumlarda kullanılabilir:... |
|---|---|---|
azureBlob |
sensitivityLabelInfo |
Blob bilgi kaynağı, sensitivityLabel içinde ingestionPermissionOptions içerir. |
indexedOneLake |
sensitivityLabelInfo |
OneLake bilgi kaynağı, sensitivityLabel içinde ingestionPermissionOptions içerir. |
indexedSharePoint |
sensitivityLabelInfo |
SharePoint tarafından dizinlenen bilgi kaynağı, sensitivityLabel içinde ingestionPermissionOptions içerir. |
searchIndex |
sensitivityLabelInfo |
Temel alınan dizinde, purviewEnabled değeri true olarak ayarlanmış ve sensitivityLabel: true ile işaretlenmiş bir alan bulunur. |
Görüntüleme ve denetim önerileri
İlke denetimleri veya izinler gibi ek özelliklere ihtiyacınız olduğunda
sensitivityLabelInfo.labelIdaracılığıyla tam etiket tanımını aramak için kullanın.Yanıt düzeyinde bir duyarlılık başlığı oluşturmak veya yanıt genelinde kopyalama ve paylaşımı devre dışı bırakma gibi ilke denetimleri uygulamak için kullanın
metadata.responseSensitivityLabelInfo.Bilgi kaynağınız tümleşik vektörleştirme veya özel metin bölme becerisiyle doldurulmuş bir dizin gibi öbekli bir dizine işaret ederse, beceri kümesinin duyarlılık etiketini her öbek satırına gösterdiğinden emin olun. Bu eşleme olmadan, öbek düzeyi başvurular sorgu zamanında doğru filtrelenmez.
Etiketli içeriğe denetlenebilir yönetim erişimi için bkz. Yönetim araştırmaları için yükseltilmiş okuma.
MCP sunucusu davranışı
Her bilgi bankası tarafından kullanıma sunulan MCP uç noktası, REST API ile aynı duyarlılık etiketi alanlarını ortaya çıkartır. MCP uyumlu bir istemci knowledge_base_retrieve aracını çağırdığında, araç sonucu bu bölümün önceki kısımlarında belgelenen referans başına aynı sensitivityLabelInfo ile yanıt düzeyindeki aynı metadata.responseSensitivityLabelInfo öğelerini içerir. MCP istemcileri, bu alanlara dayalı olarak etiket farkındalığına sahip görüntüleme ve ilke denetimlerini uygular.
Eylem örneklerini alma (önizleme)
Aşağıdaki örneklerde, 2026-08-01-preview API sürümünü kullanarak alma işleminin farklı şekillerde nasıl çağrılacağı gösterilmektedir. Bu sürüm, yanıt sentezi ve yapılandırılabilir bir akıl yürütme çabası dahil olmak üzere tüm özellik kümesini destekler.
2026-04-01 kullanımı için önceki bölümlere bakın.
- Etkinlik günlüklerinde model adlarını inceleme
- Başarılı olması için bilgi kaynağı gerektir
- Bilgi kaynağını istekten dışlama
- Bilgi kaynağı başına aday belgeleri ayarlama
- Nihai dayanak belgelerini sınırla
- Bilgi tabanının varsayılanlarını almayı doğrulayın
- Varsayılan mantık yürütme çalışmasını geçersiz kılma ve istek sınırlarını ayarlama
- Akıl yürütme çabasını hizmetin seçmesine izin verin
- Her bilgi kaynağı için referansları belirleme
- En az mantık yürütme çabası kullanın
Etkinlik günlüklerinde model adlarını inceleme
Model destekli etkinlik kayıtlarında model kimliği alanlarını döndürmek için true değerini includeActivity olarak ayarlayın. Bir alma isteği sırasında hangi yapılandırılmış modelin sorgu planlaması, yanıt sentezi veya web özetlemesi işlediğini onaylamak için bu alanları kullanın. Aşağıdaki örnek, istekte seçili kaynak için depolanan sonuç işlemeyi geçersiz kılar.
using Azure.Identity;
using Azure.Search.Documents.Indexes.Models;
using Azure.Search.Documents.KnowledgeBases;
using Azure.Search.Documents.KnowledgeBases.Models;
var kbClient = new KnowledgeBaseRetrievalClient(
new Uri("<search-endpoint>"),
"<knowledge-base-name>",
new DefaultAzureCredential()
);
var retrievalRequest = new KnowledgeBaseRetrievalRequest();
retrievalRequest.Messages.Add(
new KnowledgeBaseMessage(
content: new[]
{
new KnowledgeBaseMessageTextContent(
"Which policy applies to returns?"
)
}
) { Role = "user" }
);
retrievalRequest.IncludeActivity = true;
retrievalRequest.KnowledgeSourceParams.Add(
new SearchIndexKnowledgeSourceParams(
"<knowledge-source-name>"
)
{
ResultsProcessing = KnowledgeSourceResultsProcessing.None
}
);
var result = await kbClient.RetrieveAsync(retrievalRequest);
foreach (var activity in result.Value.Activity)
{
KnowledgeBaseActivityRecordModel? model = activity switch
{
KnowledgeBaseModelQueryPlanningActivityRecord queryPlanning =>
queryPlanning.Model,
KnowledgeBaseModelAnswerSynthesisActivityRecord answerSynthesis =>
answerSynthesis.Model,
KnowledgeBaseModelWebSummarizationActivityRecord webSummarization =>
webSummarization.Model,
_ => null
};
if (model is not null)
{
Console.WriteLine(
$"modelName={model.ModelName}, deploymentId={model.DeploymentId}");
}
}
Reference:KnowledgeBaseRetrievalClient, KnowledgeBaseRetrievalRequest
from azure.identity import DefaultAzureCredential
from azure.search.documents.knowledgebases import (
KnowledgeBaseRetrievalClient,
)
from azure.search.documents.knowledgebases.models import (
KnowledgeBaseMessage,
KnowledgeBaseMessageTextContent,
KnowledgeBaseModelAnswerSynthesisActivityRecord,
KnowledgeBaseModelQueryPlanningActivityRecord,
KnowledgeBaseModelWebSummarizationActivityRecord,
KnowledgeBaseRetrievalRequest,
SearchIndexKnowledgeSourceParams,
)
kb_client = KnowledgeBaseRetrievalClient(
"<search-endpoint>",
DefaultAzureCredential(),
knowledge_base_name="<knowledge-base-name>",
)
model_activity_types = (
KnowledgeBaseModelQueryPlanningActivityRecord,
KnowledgeBaseModelAnswerSynthesisActivityRecord,
KnowledgeBaseModelWebSummarizationActivityRecord,
)
request = KnowledgeBaseRetrievalRequest(
messages=[
KnowledgeBaseMessage(
role="user",
content=[
KnowledgeBaseMessageTextContent(
text="Which policy applies to returns?"
)
],
)
],
include_activity=True,
knowledge_source_params=[
SearchIndexKnowledgeSourceParams(
knowledge_source_name="<knowledge-source-name>",
results_processing="none",
)
],
)
result = kb_client.retrieve(request)
for entry in result.activity or []:
if isinstance(entry, model_activity_types) and entry.model:
print(
"modelName=", entry.model.model_name,
"deploymentId=", entry.model.deployment_id,
)
Reference:KnowledgeBaseRetrievalClient, KnowledgeBaseRetrievalRequest
POST {{search-endpoint}}/knowledgebases/{{knowledge-base-name}}/retrieve?api-version=2026-08-01-preview
Authorization: Bearer {{search-access-token}}
Content-Type: application/json
{
"messages": [
{
"role": "user",
"content": [
{ "type": "text", "text": "Which policy applies to returns?" }
]
}
],
"includeActivity": true,
"knowledgeSourceParams": [
{
"knowledgeSourceName": "{{knowledge-source-name}}",
"kind": "searchIndex",
"resultsProcessing": "none"
}
]
}
Başvuru:Bilgi Getirme - Getirme
Aşağıdaki yanıt alıntısı, iç içe geçmiş model kimliğini gösterir:
{
"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
}
]
}
Başarılı olması için bilgi kaynağı gerektir
Bir bilgi kaynağını zorunlu olarak işaretlemek için failOnError içinde knowledgeSourceParams seçeneğini ayarlayın. Bu kaynak kullanılamıyorsa kısmi bir yanıt yanıltıcı veya uyumsuz olduğunda bu parametreyi kullanın. Başka bir kaynak başarılı olsa bile gerekli bir kaynak başarısız olursa istek döndürülüyor 502 Bad Gateway . İşleme ilişkin yönergeler için bkz. Alma eyleminde sorun giderme.
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);
Referans: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)
Referans: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"
}
]
}
Başvuru:Bilgi Getirme - Getirme
Bilgi kaynağını istekten dışlama
2026-08-01-preview API sürümünden itibaren, alma isteğinin dışında tutmak istediğiniz her bilgi kaynağı için neverQuerySource değerini true olarak ayarlayın. İstek süresi neverQuerySource , depolanan değeri değiştirmeden bu istek için depolanan alwaysQuerySource bir değeri geçersiz kılar.
Aşağıdaki örnek, troubleshooting-ks ve troubleshooting-ks içeren bir bilgi tabanını sorgular ve product-docs-ks öğesini isteğin dışında tutar.
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);
Referans: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)
Referans: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
}
]
}
Başvuru:Bilgi Getirme - Getirme
Bilgi kaynağı başına aday belgeleri ayarlama
Belirli bir bilgi kaynağının, nihai sonuç seçilmeden önce kaç aday belgeye katkı sağlayacağını sınırlamak için maxOutputDocuments içinde knowledgeSourceParams öğesini ayarlayın. Başkalarını etkilemeden bir kaynağın girişini işlem hattına bağlamayı istediğinizde bu parametreyi kullanın.
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);
Referans: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)
Referans: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
}
]
}
Başvuru:Bilgi Getirme - Getirme
Nihai dayanak belgelerini sınırla
Üst düzey maxOutputDocuments parametresi, nihai alma yanıtında döndürülen dayanak belgelerinin sayısını sınırlar. Uygulamanızın tahmin edilebilir bir alıntı veya başvuru sayısına ihtiyacı olduğunda bu parametreyi kullanın.
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);
Başvuru: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)
Başvuru: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
}
Başvuru:Bilgi Getirme - Getirme
Aşağıdaki tabloda, dört birleşimin tümünde nasıl maxOutputDocuments ve maxOutputSizeInTokens etkileşimde yer alır gösterilmektedir.
maxOutputDocuments |
maxOutputSizeInTokens |
Davranış |
|---|---|---|
| Belirtilmemiş | Belirtilmemiş | Varsayılan maxOutputSizeInTokens yanıt sınırı davranışını kullanır. |
| Belirtilmemiş | Belirtilen | Yük boyutu sınırına ulaşıldıktan sonra belgeleri atar. |
| Belirtilen | Belirtilmemiş | Belirtilen sayıya kadar dayanak belgesi döndürür ve maxOutputSizeInTokens sınırı uygulamaz. |
| Belirtilen | Belirtilen | En fazla maxOutputDocuments belgeyi veya maxOutputSizeInTokens sınırını aşmadan sığan belge sayısı kadar belgeyi, hangisine önce ulaşılırsa onu döndürür. |
Bilgi tabanı alma varsayılanlarını doğrulayın
Bilgi bankası istek genelindeki varsayılanları içinde retrieveDefaultsdepolayabilir. Devralmayı ve isteğe özel geçersiz kılmaları doğrulamak için iki getirme isteği gönderin.
Başlamadan önce Varsayılan alma sınırlarını yapılandırma (önizleme) bölümünü tamamlayın. İlk istek, istek genelindeki üç sınırı da atlar, bu nedenle 45 saniyelik depolanmış değerler, sekiz belge ve 12.000 belirteç uygulanır. İkinci istek bunları 20 saniye, bir belge ve 5.000 belirteçle geçersiz kılar.
using System;
using Azure.Identity;
using Azure.Search.Documents;
using Azure.Search.Documents.KnowledgeBases;
using Azure.Search.Documents.KnowledgeBases.Models;
string searchEndpoint = "<search-endpoint>";
var options = new SearchClientOptions(
SearchClientOptions.ServiceVersion.V2026_08_01_Preview);
var kbClient = new KnowledgeBaseRetrievalClient(
new Uri(searchEndpoint),
"your-knowledge-base",
new DefaultAzureCredential(),
options);
KnowledgeBaseRetrievalRequest CreateRequest()
{
var request = new KnowledgeBaseRetrievalRequest();
request.Intents.Add(new KnowledgeRetrievalSemanticIntent(
"Summarize the latest support guidance."));
return request;
}
var inherited = await kbClient.RetrieveAsync(CreateRequest());
Console.WriteLine(
$"Stored defaults: {inherited.Value.References.Count} references");
KnowledgeBaseRetrievalRequest overriddenRequest = CreateRequest();
overriddenRequest.MaxRuntimeInSeconds = 20;
overriddenRequest.MaxOutputDocuments = 1;
overriddenRequest.MaxOutputSize = 5000;
var overridden = await kbClient.RetrieveAsync(overriddenRequest);
Console.WriteLine(
$"Request overrides: {overridden.Value.References.Count} references");
Reference:KnowledgeBaseRetrievalClient, KnowledgeBaseRetrievalRequest
from azure.identity import DefaultAzureCredential
from azure.search.documents.knowledgebases import KnowledgeBaseRetrievalClient
from azure.search.documents.knowledgebases.models import (
KnowledgeBaseRetrievalRequest,
KnowledgeRetrievalSemanticIntent,
)
kb_client = KnowledgeBaseRetrievalClient(
endpoint="<search-endpoint>",
knowledge_base_name="your-knowledge-base",
credential=DefaultAzureCredential(),
api_version="2026-08-01-preview",
)
def create_request(**limits):
return KnowledgeBaseRetrievalRequest(
intents=[
KnowledgeRetrievalSemanticIntent(
search="Summarize the latest support guidance.",
)
],
**limits,
)
inherited = kb_client.retrieve(create_request())
print(f"Stored defaults: {len(inherited.references or [])} references")
overridden = kb_client.retrieve(
create_request(
max_runtime_in_seconds=20,
max_output_documents=1,
max_output_size=5000,
)
)
print(f"Request overrides: {len(overridden.references or [])} references")
Reference:KnowledgeBaseRetrievalClient, KnowledgeBaseRetrievalRequest
İlk olarak, istek genelindeki üç sınır alanını atlayan bir istek gönderin.
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."
}
]
}
Ardından, bir istek için üç değerin tümünü geçersiz kılın.
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
}
Başvuru:Bilgi Getirme - Getirme
Başvuru sayısı, depolanan veya istek düzeyi maxOutputDocuments değerinin geçerli olup olmadığını gösterir: ilk yanıt en fazla sekiz başvuru içerir ve ikincisi en fazla bir başvuru içerir. Daha az belge eşleştiğinde yanıt daha az başvuru içerebilir. Yanıt, etkin çalışma zamanı veya çıkış belirteci bütçesini raporlamaz, ancak bu değerler yine de istek işlemeyi yönetir. İstek düzeyindeki geçersiz kılmalar, kaydedilmiş varsayılanları değiştirmez.
Varsayılan mantık yürütme çalışmasını geçersiz kılma ve istek sınırlarını ayarlama
Aşağıdaki örnek yanıt sentezini belirtir, bu nedenle getirme akıl yürütme düzeyi medium veya low olmalıdır. Ayrıca, maxOutputSizeInTokens alma işlemi çalışma süresini sınırlamak ve maxRuntimeInSeconds yanıt yükü boyutunu sınırlamak için ayarlar.
maxRuntimeInSeconds 10 ile 600 saniye arasında değerleri kabul eder ve varsayılan olarak 90 saniyedir. En fazla 600 saniye (10 dakika) yalnızca Azure Yapay Zeka Arama alma isteği için geçerlidir.
var retrievalRequest = new KnowledgeBaseRetrievalRequest();
retrievalRequest.Messages.Add(
new KnowledgeBaseMessage(
content: new[] {
new KnowledgeBaseMessageTextContent("What companies are in the financial sector?")
}
) { Role = "user" }
);
retrievalRequest.RetrievalReasoningEffort = new KnowledgeRetrievalLowReasoningEffort();
retrievalRequest.OutputMode = "answerSynthesis";
retrievalRequest.MaxRuntimeInSeconds = 30;
retrievalRequest.MaxOutputSizeInTokens = 6000;
var result = await kbClient.RetrieveAsync(retrievalRequest);
Console.WriteLine(
(result.Value.Response[0].Content[0] as KnowledgeBaseMessageTextContent)!.Text
);
Reference:KnowledgeBaseRetrievalClient, KnowledgeBaseRetrievalRequest
from azure.search.documents.knowledgebases.models import (
KnowledgeRetrievalLowReasoningEffort,
KnowledgeRetrievalOutputMode,
)
request = KnowledgeBaseRetrievalRequest(
messages=[
KnowledgeBaseMessage(
role="user",
content=[KnowledgeBaseMessageTextContent(text="What companies are in the financial sector?")],
)
],
retrieval_reasoning_effort=KnowledgeRetrievalLowReasoningEffort(),
output_mode=KnowledgeRetrievalOutputMode.ANSWER_SYNTHESIS,
max_runtime_in_seconds=30,
max_output_size_in_tokens=6000,
)
result = kb_client.retrieve(request)
print(result.response[0].content[0].text)
Reference:KnowledgeBaseRetrievalClient, KnowledgeBaseRetrievalRequest
POST {{search-endpoint}}/knowledgebases/kb-override/retrieve?api-version=2026-08-01-preview
Authorization: Bearer {{search-access-token}}
Content-Type: application/json
{
"messages": [
{
"role": "user",
"content": [
{ "type": "text", "text": "What companies are in the financial sector?" }
]
}
],
"retrievalReasoningEffort": { "kind": "low" },
"outputMode": "answerSynthesis",
"maxRuntimeInSeconds": 30,
"maxOutputSizeInTokens": 6000
}
Başvuru:Bilgi Getirme - Getirme
Akıl yürütme çabasını hizmetin seçmesine izin verin
Bilgi bankası varsayılanını geçersiz kılmak için, bir alma isteğinde auto değerini retrievalReasoningEffort.kind olarak ayarlayın. Otomatik muhakeme hakkında daha fazla bilgi için bkz. Alma mantığı eforunu ayarlama (önizleme).
{
"retrievalReasoningEffort": {
"kind": "auto"
}
}
Başvuru:Bilgi Getirme - Getirme
Her bilgi kaynağı için referansları ayarla
includeReferences içinde, referanslar dizisinde hangi kaynakların görüneceğini ve her girdinin ne kadar kaynak verisi içereceğini kontrol etmek için includeReferenceSourceData ve knowledgeSourceParams kullanın. Aşağıdaki örnek, bilgi bankasının varsayılan akıl yürütme çabasını kullanır.
var retrievalRequest = new KnowledgeBaseRetrievalRequest();
retrievalRequest.Messages.Add(
new KnowledgeBaseMessage(
content: new[] {
new KnowledgeBaseMessageTextContent("What companies are in the financial sector?")
}
) { Role = "user" }
);
retrievalRequest.IncludeActivity = true;
retrievalRequest.KnowledgeSourceParams.Add(
new SearchIndexKnowledgeSourceParams("demo-financials-ks")
{
IncludeReferences = true,
IncludeReferenceSourceData = true
}
);
retrievalRequest.KnowledgeSourceParams.Add(
new SearchIndexKnowledgeSourceParams("demo-communicationservices-ks")
{
IncludeReferences = false,
IncludeReferenceSourceData = false
}
);
retrievalRequest.KnowledgeSourceParams.Add(
new SearchIndexKnowledgeSourceParams("demo-healthcare-ks")
{
IncludeReferences = true,
IncludeReferenceSourceData = false,
AlwaysQuerySource = true
}
);
var result = await kbClient.RetrieveAsync(retrievalRequest);
Console.WriteLine(
(result.Value.Response[0].Content[0] as KnowledgeBaseMessageTextContent)!.Text
);
Reference:KnowledgeBaseRetrievalClient, KnowledgeBaseRetrievalRequest
from azure.search.documents.knowledgebases.models import SearchIndexKnowledgeSourceParams
request = KnowledgeBaseRetrievalRequest(
messages=[
KnowledgeBaseMessage(
role="user",
content=[KnowledgeBaseMessageTextContent(text="What companies are in the financial sector?")],
)
],
include_activity=True,
knowledge_source_params=[
SearchIndexKnowledgeSourceParams(
knowledge_source_name="demo-financials-ks",
include_references=True,
include_reference_source_data=True,
),
SearchIndexKnowledgeSourceParams(
knowledge_source_name="demo-communicationservices-ks",
include_references=False,
include_reference_source_data=False,
),
SearchIndexKnowledgeSourceParams(
knowledge_source_name="demo-healthcare-ks",
include_references=True,
include_reference_source_data=False,
always_query_source=True,
),
],
)
result = kb_client.retrieve(request)
print(result.response[0].content[0].text)
Reference:KnowledgeBaseRetrievalClient, SearchIndexKnowledgeSourceParams
POST {{search-endpoint}}/knowledgebases/kb-medium-example/retrieve?api-version=2026-08-01-preview
Authorization: Bearer {{search-access-token}}
Content-Type: application/json
{
"messages": [
{
"role": "user",
"content": [
{ "type": "text", "text": "What companies are in the financial sector?" }
]
}
],
"includeActivity": true,
"knowledgeSourceParams": [
{
"knowledgeSourceName": "demo-financials-ks",
"kind": "searchIndex",
"includeReferences": true,
"includeReferenceSourceData": true
},
{
"knowledgeSourceName": "demo-communicationservices-ks",
"kind": "searchIndex",
"includeReferences": false,
"includeReferenceSourceData": false
},
{
"knowledgeSourceName": "demo-healthcare-ks",
"kind": "searchIndex",
"includeReferences": true,
"includeReferenceSourceData": false,
"alwaysQuerySource": true
}
]
}
Başvuru:Bilgi Getirme - Getirme
En az mantık yürütme çabası kullanın
Aşağıdaki örnekte akıllı sorgu planlaması veya yanıt sentezi için LLM yoktur. Sorgu dizesi, anahtar sözcük araması veya karma arama için aracılı alma altyapısına gider.
var retrievalRequest = new KnowledgeBaseRetrievalRequest();
retrievalRequest.Intents.Add(
new KnowledgeRetrievalSemanticIntent("what is a brokerage")
);
var result = await kbClient.RetrieveAsync(retrievalRequest);
Console.WriteLine(
(result.Value.Response[0].Content[0] as KnowledgeBaseMessageTextContent)!.Text
);
Reference:KnowledgeBaseRetrievalClient, KnowledgeBaseRetrievalRequest
from azure.search.documents.knowledgebases.models import (
KnowledgeBaseRetrievalRequest,
KnowledgeRetrievalSemanticIntent,
)
request = KnowledgeBaseRetrievalRequest(
intents=[
KnowledgeRetrievalSemanticIntent(
search="what is a brokerage",
)
]
)
result = kb_client.retrieve(request)
print(result.response[0].content[0].text)
Reference:KnowledgeBaseRetrievalClient, KnowledgeBaseRetrievalRequest
POST {{search-endpoint}}/knowledgebases/kb-minimal/retrieve?api-version=2026-08-01-preview
Authorization: Bearer {{search-access-token}}
Content-Type: application/json
{
"intents": [
{
"type": "semantic",
"search": "what is a brokerage"
}
]
}
Başvuru:Bilgi Getirme - Getirme
Alma eylemiyle ilgili sorunları giderme
içinde 2026-08-01-previewyanıt durumu, alma işleminin başarılı mı, kısmen başarılı mı yoksa başarısız mı olduğunu ve bundan sonra ne yapılıp yapılmayacağını gösterir. Her durumu anlamlarına eşlemek için aşağıdaki tabloyu kullanın ve ardından sorun giderme yönergeleri için ilgili bölüme bakın.
| Statü | Meaning |
|---|---|
200 OK |
Geri getirme başarılı oldu. İçeriği çıktı bütçesini aşarsa belge yine atlanabilir. Daha fazla bilgi için bkz . Boş yanıtlar. |
400 Bad Request |
Alma isteği, alma işlemi başlamadan önce doğrulamadan geçemedi. |
206 Partial Content |
En az bir kaynak başarılı oldu ve başarısız kaynak işaretlenmedi failOnError. Yanıt, başarılı olan kaynaklardan sonuçlar içerir. |
502 Bad Gateway |
Seçilen her kaynak başarısız oldu veya bir kaynak başarısız olarak işaretlendi failOnError: true . |
200 olmayan tüm yanıtlar için API sürümünü, zaman damgasını, temizlenmiş istek gövdesini, yanıt üst bilgilerini ve istek veya korelasyon kimliğini kaydedin. Bu ayrıntılar, hatayı tanılamanıza ve gerekirse sorunu destekle paylaşmanıza yardımcı olur.
400 Bad Request
Geçersiz istek özelliğini tanımlamak için en üst düzey hatayı kullanın. Yaygın nedenler şunlardır:
-
knowledgeSourceNameiçindeki birknowledgeSourceParams, bilgi tabanına ekli değil veyakinddeğeri ekli kaynakla eşleşmiyor. - İstek değeri desteklenen aralığın dışındadır veya bir seçenek etkinleştirilmemiş başka bir seçenek gerektirir. Örneğin,
includeReferenceSourceDatagerektiririncludeReferences. -
retrievalReasoningEffort.kind,autodurumundadır, ancak istek2026-08-01-previewsürümünden daha eski bir API sürümü kullanıyor. - İstek
auto, veyalowmediumkullanır, ancak bilgi bankası bir model tanımlamaz. -
İstek zamanında kaynak dışlama (önizleme) için aynı giriş, hem
neverQuerySourcehem detruedeğerinialwaysQuerySourceolarak ayarlar; aksi takdirde ekli tüm bilgi kaynakları dışlanır.
İsteği yeniden denemeden önce en üst düzey hatayla tanımlanan özelliği düzeltin.
206 Partial Content
activity içeren her error girdiyi inceleyin. Kaynak alma etkinliği başarısız bilgi kaynağını, model etkinliği ise başarısız işleme aşamasını tanımlar. Yanıt gövdesi yine de başarılı olan sonuçları içerir.
Kaynak alma etkinliği hataları için yaygın nedenler şunlardır:
- Hatalı biçimlendirilmiş
filterAddOnifade gibi geçersiz sorgu zamanı girişi. - Bilgi kaynağı veya dizin yapılandırmasındaki kayma; örneğin yeniden adlandırılmış bir alan, eksik anlamsal yapılandırma ya da geçersiz vektörleştirici.
- Eksik veya geçersiz bağımlılık yetkilendirmesi veya kaynağı sorgulamak için kullanılan kimlik için yetersiz izinler .
- Bağımlılık kısıtlaması, zaman aşımı veya geçici erişilebilirlik sorunları.
Model etkinliği hatası için type etkinliği kullanarak başarısız işleme aşamasını belirleyin. Örneğin, bir modelWebSummarization hata web sonucu özetlemenin başarısız olduğunu gösterir.
Uygulamanız kısmi sonuçlara izin verirse, başarılı sonuçları işleyin ve başarısız olan her kaynak veya model aşamasını kaydedin. Yeniden denemeden önce yapılandırma, yetkilendirme ve izin hatalarını düzeltin. Azaltma, zaman aşımı veya geçici kullanılabilirlik hataları için geri alma ile sınırlanmış yeniden denemeler kullanın.
Sonuçlar belirli bir kaynak olmadan güvenli değilse ve kaynak türü alwaysQuerySource destekliyorsa, hem alwaysQuerySource hem de failOnError değerini ayarlayın. İlk seçenek kaynağın seçili olmasını sağlar ve ikinci seçenek sorgu başarısız olursa sabit bir hata döndürür.
MCP sunucusu bilgi kaynakları (önizleme) desteklemez alwaysQuerySource; bu kaynaklar için yalnızca failOnError kaynak seçildiğinde geçerlidir.
failOnError model etkinliği hataları için geçerli değildir.
502 Bad Gateway
Üst düzey hata, iki sabit hata yolundan birini açıklar:
- Seçilen her kaynak başarısız oldu: Seçilen her kaynak bir hata döndürdü. Eşleşen belge sayısı sıfır olan ve başarıyla tamamlanan bir kaynak, başarısız bir kaynak değildir. Paylaşılan yapılandırma, yetkilendirme, bağımlılık veya kullanılabilirlik sorunu için her kaynak hatasını inceleyin.
-
Kaynak
failOnErrorbaşarısız oldu: Gerekli bir kaynak sorgulanamadı. Diğer kaynaklar başarılı olmuş olabilir, ancak gerekli kaynak başarısız olduğundan hizmet kısmi bir sonuç döndürmez.
Altta yatan kaynak hataları genellikle 206 Partial Content için açıklananlarla aynı türdendir: geçersiz kaynağa özgü girdi, kaynak veya dizin yapılandırmasındaki sapma, bağımlılık yetkilendirmesi veya izinleri, kısıtlama, zaman aşımları ya da bağımlılıkların geçici olarak kullanılamaması.
Katı bir 502 yanıtı, activity dizisini içermeyebilir ve kaynak adını ve altta yatan hatayı yalnızca üst düzey hata iletisinde belirtebilir. Yeniden denemeden önce yapılandırma, yetkilendirme ve izin hatalarını düzeltin. Sınırlı sayıda ve artan aralıklarla yeniden denemeyi yalnızca kısıtlama, zaman aşımı veya geçici erişilebilirlik sorunlarında kullanın. Altta yatan kaynak hatasını incelemeden, 502 Bad Gateway yanıtını Azure Yapay Zeka Arama kesintisi olarak yorumlamayın.
Boş yanıtlar
Arama adımı bir belge bulabilir, ancak dayanak oluşturan içeriği maxOutputSize çıkış bütçesini aşıyorsa hizmet yine de onu nihai yanıta dahil etmeyebilir (2026-05-01-preview, maxOutputSizeInTokens ve sonrası sürümlerde). Bu koşul oluştuğunda, etkinlik dizisi eşleşmelerin bulunduğunu gösterir ve etkinlik kaydı en uygun belgenin en büyük çıktı boyutunu aştığına ilişkin bir uyarı içerir. Başvuru dizisi ve topraklanmış yanıt içeriği bu belge için boş. Daha fazla içeriği korumak için maxOutputSizeInTokens artırın.
Bu davranışı önlemek için büyük kaynak belgeleri kararlı tanımlayıcılar ve kaynak meta verileriyle daha küçük öbekler olarak dizine alın. Bu, özellikle uzun kılavuzlar, ilkeler veya bilgi bankası makaleleri için geçerlidir.
MCP uç noktasını çağırma
Warning
MCP uygulamaları saldırılar, basamaklı hatalar ve insan gözetimi kaybı gibi risklere karşı hassastır. MCP sunucularını güvenlik ve güvenilirlik açısından değerlendirerek, Microsoft'un önerdiği uygulamaları ve sektördeki en iyi uygulamaları izleyerek ve onay mekanizmaları uygulayıp zincirleme davranışları izleyerek bu riskleri azaltabilirsiniz.
MCP , yapay zeka uygulamalarının dış veri kaynaklarına ve araçlarına nasıl bağlandığını standartlaştıran açık bir protokoldür.
Azure Yapay Zeka Arama'de her bilgi bankası, knowledge_base_retrieve aracını kullanıma sunan tek başına bir MCP sunucusudur.
Foundry Agent Service, GitHub Copilot, Claude ve Cursor gibi MCP uyumlu istemciler, bilgi bankasını sorgulamak için bu aracı çağırabilir.
MCP uç noktasında kimlik doğrulaması
Her bilgi bankasının aşağıdaki URL'de bir MCP uç noktası vardır:
https://<search-service-name>.search.windows.net/knowledgebases/<knowledge-base-name>/mcp?api-version=<api-version>
Belirttiğiniz API sürümü, bağlantının ne döndüreceğini belirler.
2026-08-01-preview kullanıldığında, altyapıdaki bilgi tabanı bir LLM ve uyumlu bir akıl yürütme düzeyiyle yapılandırılmışsa bilgi tabanı sentezlenmiş yanıtlar döndürür.
2026-04-01 kullanılarak getirme işlemi her zaman asgari düzeyde ve ayıklayıcıdır; bağlantı yalnızca dayanak verilerini döndürür.
Bu uç noktada kimlik doğrulama yönteminiz MCP istemcinize bağlıdır. Azure OpenAI Responses API’yi knowledge_base_retrieve MCP aracıyla kullandığınızda, hem Azure OpenAI’a yapılan Responses API çağrısı hem de Azure Yapay Zeka Arama’e yapılan MCP isteği için kimlik doğrulaması yaparsınız. MCP istemciniz bu uç noktayı doğrudan çağırırsa yalnızca Azure Yapay Zeka Arama için kimlik doğrulaması yaparsınız.
Azure Yapay Zeka Arama kimlik doğrulaması için aşağıdaki yöntemlerden birini kullanın:
-
Bir bearer belirtecini iletin
Authorizationbaşlığında (önerilir) -
Bir yönetici anahtarı iletin
api-keybaşlıkta
Not
MCP istemcileri özel üst bilgileri farklı yapılandırıyor. Örneğin, Foundry Agent Service üst bilgileri proje bağlantıları aracılığıyla eklerken, GitHub Copilot gibi istemciler MCP sunucusu JSON’unda üst bilgilerin belirtilmesini gerektirir.
MCP kimlik doğrulaması için taşıyıcı belirteci kullanma
MCP kimlik doğrulaması için önerilen yöntem, hassas anahtarların yapılandırma dosyalarında depolanmasını önleyen bir taşıyıcı belirtecidir. Belirtecin arkasındaki kimliğin arama hizmetinde Arama Dizini Veri Okuyucusu rolü atanmış olmalıdır. Daha fazla bilgi için bkz. Uygulamanızı kimlikleri kullanarak Azure Yapay Zeka Arama bağlama.
#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());
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)
// This code snippet is currently unavailable.
MCP kimlik doğrulaması için yönetici anahtarı kullanma
Yönetici anahtarı arama hizmetine tam okuma-yazma erişimi verir, bu nedenle bu erişimi yalnızca geliştirme ortamlarında veya taşıyıcı belirteci kullanılabilir olmadığında kullanın. Daha fazla bilgi için bkz. API anahtarlarını kullanarak Azure Yapay Zeka Arama bağlanma.
Tip
Aşağıdaki örnek, yalnızca bearer token örneğinden farklı olan başlığı gösterir. Tam kurulum için bkz. MCP kimlik doğrulaması için taşıyıcı belirteci kullanma.
#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)
);
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",
}
]
// This code snippet is currently unavailable.
MCP yanıtını gözden geçirin
Bir MCP istemcisi knowledge_base_retrieve öğesini çağırdığında, alma işleminin response, activity ve references sarmalı yerine bir MCP araç sonucu alır. Birçok MCP istemcisi, bu araç sonucunu en üst düzeydeki result nesnesi altında sunduğundan, beklemeniz gereken veri yükü result.content[] şeklindedir.
{
"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>\"}]"
}
]
}
}
Önemli noktalar:
result.content[]bilgi bankası tarafından döndürülen MCP aracı çıkışını içerir.result.content[].type,text'e eşittir.result.content[].textalınan topraklama verilerini JSON ile kodlanmış bir dize olarak içerir.Alma işleminden farklı olarak, mevcut MCP yanıtı ayrı
activityveyareferencesdizilerini döndürmez ve döndürülen içerik içinresourcegirişlerini doldurmaz.
İlgili içerik
- Azure Yapay Zeka Arama'te Agentic retrieval
- Sorgu sırasında ACL ve RBAC uygulanması (önizleme)
- RBAC kapsamı meta verilerini içeri aktarmak için blob dizinleyici veya bilgi kaynağı kullanın (önizleme)
- Agentik RAG: Azure AI Araması ile bir akıl yürütme alma motoru oluşturun (YouTube videosu)
- Ajan tabanlı alma özelliğine sahip Azure OpenAI tanıtımı