Alma eylemini veya MCP uç noktasını kullanarak bilgi bankasını sorgulama

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

  • 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.Documents paketi:

    • 2026-08-01-preview özellikleri için en son önizleme paketi: dotnet add package Azure.Search.Documents --prerelease

    • 2026-04-01 özellikleri için en son kararlı paket: dotnet add package Azure.Search.Documents

  • Anahtarsız kimlik doğrulaması için Azure.Identity paket: 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-documents paketi:

    • 2026-08-01-preview özellikleri için en son önizleme paketi: pip install --pre azure-search-documents

    • 2026-04-01 özellikleri için en son kararlı paket: pip install azure-search-documents

  • Anahtarsız kimlik doğrulaması için azure-identity paket: pip install azure-identity

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:

  1. resultsProcessing, alma isteğinde knowledgeSourceParams içinde.
  2. resultsProcessing bilgi kaynağında depolanır.
  3. rerank her 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:

  1. Arama, alma isteğinden ve depolanan bilgi kaynağı değerinden resultsProcessing öğesini çözümler.
  2. Çözümlenen değer ise none ve istek içeriyorsa rerankerThreshold, Search döndürür 400 Bad Request.
  3. Bir MCP sunucu aracı için Search, isteği doğruladıktan sonra araç düzeyi resultsProcessing değ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.completed ve references.completed yerine error olur. Olay, hatadan önce tamamlanan tüm etkinlik kayıtlarını içerebilir. Akış başladıktan sonra HTTP durum kodu kalır 200 , 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-preview ile, eksik bir Accept üst bilgisi veya */*, text/*, application/json ya da text/event-stream;q=0 gibi 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ünden text/event-stream istendiğinde, 406 Not Acceptable dö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 ingestionPermissionOptions belirleyin.

  • 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-authorization kullanan 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

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.type geç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.rerankerBoostedScore içermez.

  • retrieve isteğindeki maxOutputSizeInTokens özelliği (2026-05-01-preview ve sonraki sürümlerde maxOutputSize) dizenin uzunluğunu belirler.

    • Çıktı bütçesini maxOutputSizeInTokens aş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çin maxOutputSizeInTokens artırın. Daha fazla bilgi için bkz . Boş yanıtlar.

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 citationUrl olup 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-authorization belge 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.labelId aracı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

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:

  • knowledgeSourceName içindeki bir knowledgeSourceParams, bilgi tabanına ekli değil veya kind değ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, includeReferenceSourceData gerektirir includeReferences.
  • retrievalReasoningEffort.kind, auto durumundadır, ancak istek 2026-08-01-preview sürümünden daha eski bir API sürümü kullanıyor.
  • İstek auto, veya lowmediumkullanır, ancak bilgi bankası bir model tanımlamaz.
  • İstek zamanında kaynak dışlama (önizleme) için aynı giriş, hem neverQuerySource hem de true değerini alwaysQuerySource olarak 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ş filterAddOn ifade 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 failOnError baş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:

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());

Başvuru:Azure OpenAI Yanıtları API'sini kullanma

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)

Başvuru:Azure OpenAI Yanıtları API'sini kullanma

// 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)
);

Başvuru:Azure OpenAI Yanıtları API'sini kullanma

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",
    }
]

Başvuru:Azure OpenAI Yanıtları API'sini kullanma

// 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[].text alınan topraklama verilerini JSON ile kodlanmış bir dize olarak içerir.

  • Alma işleminden farklı olarak, mevcut MCP yanıtı ayrı activity veya references dizilerini döndürmez ve döndürülen içerik için resource girişlerini doldurmaz.