Tworzenie indeksowanego źródła wiedzy Azure SQL (wersja zapoznawcza)

Note

Wyszukiwanie AI platformy Azure jest dostępna za pośrednictwem portalu Azure, interfejsów API REST i Azure SDKs. Jest także podstawą Foundry IQ — zarządzanej warstwy wiedzy, która przekształca treści przedsiębiorstwa w bazy wiedzy wielokrotnego użytku z uwzględnieniem uprawnień dla agentów w portalu Microsoft Foundry.

Ważna

Te funkcje i możliwości stanowią część interfejsu API REST 2026-08-01-preview. Licencja 2026-08-01-preview jest licencjonowana na Ciebie w ramach subskrypcji Azure i podlega warunkom mającym zastosowanie do "wersji zapoznawczych" w warunkach produktu Microsoft, dodatku Microsoft Products and Services Data Protection ("DPA") oraz uzupełniających warunków użytkowania dla wersji zapoznawczych Microsoft Azure.

Wersja zapoznawcza 2026-08-01 obsługuje połączenia z innymi usługami usługi firmy Microsoft i usługami innych firm. Korzystanie z tych usług podlega odpowiednim warunkom i może spowodować przetwarzanie lub przechowywanie danych poza granicą zgodności Azure, a także dane przepływające do granicy zgodności Azure.

Do Ciebie należy decydowanie o tym, czy dane będą przepływać poza granice zgodności i granice geograficzne organizacji, oraz o wszelkich związanych z tym konsekwencjach, a także zapewnienie odpowiednich uprawnień, ograniczeń i zatwierdzeń.

Odpowiadasz za staranne przeglądanie i testowanie aplikacji, które tworzysz w kontekście konkretnych przypadków użycia, oraz podejmowanie wszelkich odpowiednich decyzji i dostosowań. Obejmuje to implementowanie własnych odpowiedzialnych środków zaradczych dotyczących sztucznej inteligencji, takich jak metaprompty, filtry zawartości lub inne systemy bezpieczeństwa oraz zapewnienie, że aplikacje spełniają odpowiednią jakość, niezawodność, bezpieczeństwo i standardy wiarygodności. Aby uzyskać więcej informacji, zobacz Wyszukiwanie AI platformy Azure Transparency Note.

indeksowane źródło wiedzy Azure SQL (wersja zapoznawcza) pozyskuje wiersze z usługi Azure SQL Database lub Azure SQL Managed Instance do potoku wyszukiwania agentowego w usłudze Wyszukiwanie AI platformy Azure. Źródła wiedzy są tworzone niezależnie, przywoływane w bazie wiedzy i używane jako dane uziemienia, gdy baza wiedzy jest odpytywane w czasie wykonywania zapytań.

W przeciwieństwie do źródeł wiedzy opartych na plikach, takich jak Azure Blob Storage i OneLake, każdy wiersz SQL jest traktowany jako jeden dokument logiczny. Schemat indeksu można kierować za pomocą jawnych mapowań kolumn, a nie przy użyciu stałego schematu dokumentu.

Podczas tworzenia indeksowanego źródła wiedzy Azure SQL należy określić źródło danych SQL, opcjonalne mapowania kolumn i opcjonalne modele, aby automatycznie wygenerować następujące obiekty Wyszukiwanie AI platformy Azure:

  • Źródło danych reprezentujące tabelę LUB widok SQL.
  • Indeks, którego pola pochodzą z mapowań kolumn.
  • Zestaw umiejętności generujący osadzenia wektorowe. Usługa tworzy zestaw umiejętności tylko wtedy, gdy określisz wartość embeddingColumns.
  • Indeksator, który używa poprzednich obiektów do sterowania potokiem przetwarzania.

Wygenerowany indeksator jest zgodny z indeksatorem Azure SQL, którego wymagania wstępne, zasady wykrywania zmian i ograniczenia dotyczą również indeksowanych źródeł wiedzy Azure SQL. Aby uzyskać więcej informacji, zobacz dokumentację indeksatora Azure SQL.

Wsparcie użytkowania

Portal Azure Portal Microsoft Foundry SDK platformy .NET SDK Python SDK Java JavaScript SDK API REST
✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️

Wymagania wstępne

  • Usługa Wyszukiwanie AI platformy Azure w dowolnym regionie, która zapewnia autonomiczne wyszukiwanie.

  • Ukończenie wymagań wstępnych indeksatora Azure SQL, w tym:

    • Azure SQL Database lub Azure SQL Managed Instance z tabelą lub widokiem do pozyskania danych.

    • Klucz podstawowy o pojedynczej wartości w tabeli źródłowej lub widoku.

    • W przypadku widoków kolumna odpowiednia do wykrywania zmian znacznika wysokiego poziomu wody. Zdecydowanie zalecamy kolumnę rowversion .

  • Uprawnienie do tworzenia źródeł wiedzy. Skonfiguruj uwierzytelnianie bez klucza przy użyciu ról Współautor usługi wyszukiwania i Współautor danych indeksu wyszukiwania przypisanych do konta użytkownika (zalecane) lub użyj klucza interfejsu API administratora.

  • Jeśli określisz embeddingColumns, usługa wyszukiwania musi mieć zarządzaną tożsamość z uprawnieniami Użytkownik usług Cognitive Services w zasobie Microsoft Foundry, który hostuje model osadzeń.

  • Jeśli ustawisz networkAccessMode na private, upewnij się, że spełniono następujące wymagania:

    • Użyj usługi wyszukiwania S2, S3, L1 lub L2.

    • Utwórz i zatwierdź udostępnione łącze prywatne do serwera SQL z identyfikatorem grupy sqlServer. W przypadku SQL Managed Instance użyj identyfikatora managedInstance grupy.

    • Użyj uwierzytelniania SQL lub uwierzytelniania tożsamości zarządzanej. W przypadku tożsamości zarządzanej należy przyznać jej wymagane role platformy Azure i role bazy danych oraz użyć parametrów połączenia z Database=<database-name> i identyfikatorem zasobu serwera SQL lub Wystąpienia zarządzanego SQL. Ustaw ingestionParameters.identity tylko dla tożsamości przypisanej przez użytkownika. Jeśli go pominięto, indeksator używa tożsamości przypisanej przez system usługi wyszukiwania.

    • Utwórz i zatwierdź udostępniony link prywatny dla każdego chronionego punktu końcowego modelu. Użyj openai_account jako identyfikatora grupy dla punktów końcowych Azure OpenAI oraz foundry_account dla punktów końcowych zasobów Foundry.

  • Najnowszy pakiet Azure.Search.Documents wersji zapoznawczej: dotnet add package Azure.Search.Documents --prerelease

  • W przypadku uwierzytelniania bezkluczowego pakiet Azure.Identity: dotnet add package Azure.Identity

  • Najnowszy pakiet azure-search-documents wersji zapoznawczej: pip install --pre azure-search-documents

  • W przypadku uwierzytelniania bezkluczowego pakiet azure-identity: pip install azure-identity

Ograniczenia i zagadnienia

  • Źródło wiedzy może pobierać dane dokładnie z jednej tabeli lub jednego widoku.
  • Tabela źródłowa lub widok musi mieć klucz podstawowy o pojedynczej wartości. Klucze złożone nie są obsługiwane.
  • Klucz podstawowy jest automatycznie wykrywany i nie można go zastąpić.
  • contentExtractionMode obsługuje tylko "minimal".
  • Wyodrębnianie obrazów i werbalizacja obrazów nie są obsługiwane.
  • Synchronizacja w czasie rzeczywistym nie jest obsługiwana. Wygenerowany indeksator jest oparty na harmonogramie.
  • Pobieranie sql w czasie rzeczywistym nie jest obsługiwane. Źródło wiedzy jest źródłem indeksowanym, a nie zdalnym.

Przygotowywanie wygenerowanego indeksatora

Indeksowane źródło wiedzy Azure SQL automatycznie tworzy indeksator na potrzeby pozyskiwania danych. Przed utworzeniem źródła wiedzy zapoznaj się z poniższymi szczegółami.

Wykrywanie zmian

Wygenerowany indeksator używa standardowego Azure SQL wykrywania zmian indeksatora:

Uwierzytelnianie

Wygenerowany indeksator obsługuje dwie opcje uwierzytelniania:

  • SQL authentication: Podaj nazwę użytkownika i hasło w parametry połączenia.

  • Uwierzytelnianie za pomocą tożsamości zarządzanej: Użyj tożsamości zarządzanej przypisanej przez system lub użytkownika, która ma role platformy Azure w modelu RBAC oraz role na poziomie bazy danych dla zasobu SQL.

Informacje o formatach parametrów połączenia, wymaganiach dotyczących ról i krokach konfiguracji można znaleźć w artykułach Wymagania wstępne indeksatora Azure SQL i Łączenie za pomocą tożsamości zarządzanej.

Sprawdzanie istniejących źródeł wiedzy

Źródłem wiedzy jest obiekt najwyższego poziomu wielokrotnego użytku. Znajomość istniejących źródeł wiedzy jest przydatna w przypadku ponownego użycia lub nazewnictwa nowych obiektów.

Uruchom następujący kod, aby wyświetlić listę źródeł wiedzy według nazwy i typu.

// List knowledge sources by name and type
using Azure.Search.Documents.Indexes;

var indexClient = new SearchIndexClient(new Uri(searchEndpoint), credential);
var knowledgeSources = indexClient.GetKnowledgeSourcesAsync();

Console.WriteLine("Knowledge Sources:");

await foreach (var ks in knowledgeSources)
{
    Console.WriteLine($"  Name: {ks.Name}, Type: {ks.GetType().Name}");
}

Reference:SearchIndexClient

# List knowledge sources by name and type
from azure.core.credentials import AzureKeyCredential
from azure.search.documents.indexes import SearchIndexClient

index_client = SearchIndexClient(endpoint = "search_url", credential = AzureKeyCredential("api_key"))

for ks in index_client.list_knowledge_sources():
    print(f"  - {ks.name} ({ks.kind})")

Reference:SearchIndexClient

### List knowledge sources by name and type
GET {{search-url}}/knowledgesources?api-version={{api-version}}&$select=name,kind
Authorization: Bearer {{token}}

Dokumentacja:Źródła wiedzy — lista

Możesz również zwrócić pojedyncze źródło wiedzy według nazwy, aby przejrzeć jego definicję JSON.

using Azure.Search.Documents.Indexes;
using System.Text.Json;

var indexClient = new SearchIndexClient(new Uri(searchEndpoint), credential);

// Specify the knowledge source name to retrieve
string ksNameToGet = "earth-knowledge-source";

// Get its definition
var knowledgeSourceResponse = await indexClient.GetKnowledgeSourceAsync(ksNameToGet);
var ks = knowledgeSourceResponse.Value;

// Serialize to JSON for display
var jsonOptions = new JsonSerializerOptions 
{ 
    WriteIndented = true,
    DefaultIgnoreCondition = System.Text.Json.Serialization.JsonIgnoreCondition.Never
};
Console.WriteLine(JsonSerializer.Serialize(ks, ks.GetType(), jsonOptions));

Reference:SearchIndexClient

# Get a knowledge source definition
from azure.core.credentials import AzureKeyCredential
from azure.search.documents.indexes import SearchIndexClient
import json

index_client = SearchIndexClient(endpoint = "search_url", credential = AzureKeyCredential("api_key"))

ks = index_client.get_knowledge_source("knowledge_source_name")
print(json.dumps(ks.as_dict(), indent = 2))

Reference:SearchIndexClient

### Get a knowledge source definition
GET {{search-url}}/knowledgesources/{{knowledge-source-name}}?api-version={{api-version}}
Authorization: Bearer {{token}}

Dokumentacja:Źródła wiedzy — Pobierz

Poniższy kod JSON to przykładowa odpowiedź dla indeksowanego źródła wiedzy Azure SQL.

{
  "name": "indexedsqlks",
  "kind": "indexedSql",
  "description": "Sample indexed Azure SQL knowledge source.",
  "encryptionKey": null,
  "indexedSqlParameters": {
    "connectionString": "<sql-connection-string>",
    "tableOrView": "dbo.tbl_hotels",
    "contentColumns": [
      { "name": "hotelName", "sourceField": "HotelName", "searchFieldType": "Edm.String" },
      { "name": "description", "sourceField": "Description", "searchFieldType": "Edm.String" }
    ],
    "embeddingColumns": [
      { "name": "descriptionVector", "sourceField": "Description" }
    ],
    "ingestionParameters": {
      "contentExtractionMode": "minimal",
      "embeddingModel": {
        "kind": "azureOpenAI",
        "azureOpenAIParameters": {
          "resourceUri": "<aoai-endpoint>",
          "deploymentId": "text-embedding-3-large",
          "modelName": "text-embedding-3-large"
        }
      },
      "createdResources": {
        "datasource": "indexedsqlks-datasource",
        "indexer": "indexedsqlks-indexer",
        "skillset": "indexedsqlks-skillset",
        "index": "indexedsqlks-index"
      }
    }
  }
}

Tworzenie źródła wiedzy

Uruchom następujący kod, aby utworzyć indeksowany Azure SQL źródło wiedzy.

using Azure.Identity;
using Azure.Search.Documents.Indexes;
using Azure.Search.Documents.Indexes.Models;
using Azure.Search.Documents.KnowledgeBases.Models;

var indexClient = new SearchIndexClient(new Uri(searchEndpoint), new DefaultAzureCredential());

var embeddingParams = new AzureOpenAIVectorizerParameters
{
    ResourceUri = new Uri(aoaiEndpoint),
    DeploymentName = aoaiEmbeddingDeployment,
    ModelName = aoaiEmbeddingModel
};

var ingestionParams = new KnowledgeSourceIngestionParameters
{
    NetworkAccessMode = KnowledgeSourceNetworkAccessMode.Public,
    ContentExtractionMode = "minimal",
    EmbeddingModel = new KnowledgeSourceAzureOpenAIVectorizer
    {
        AzureOpenAIParameters = embeddingParams
    }
};

var sqlParams = new IndexedSqlKnowledgeSourceParameters(
    connectionString: sqlConnectionString,
    tableOrView: "dbo.tbl_hotels")
{
    ContentColumns =
    {
        new ContentColumnMapping("hotelName", "HotelName", "Edm.String"),
        new ContentColumnMapping("description", "Description", "Edm.String")
    },
    EmbeddingColumns =
    {
        new EmbeddingColumnMapping("descriptionVector", "Description")
    },
    IngestionParameters = ingestionParams
};

var knowledgeSource = new IndexedSqlKnowledgeSource(
    name: "indexedsqlks",
    indexedSqlParameters: sqlParams)
{
    Description = "Indexed Azure SQL knowledge source."
};

await indexClient.CreateOrUpdateKnowledgeSourceAsync(knowledgeSource);
Console.WriteLine($"Knowledge source '{knowledgeSource.Name}' created or updated successfully.");

Reference:SearchIndexClient, IndexedSqlKnowledgeSource

from azure.identity import DefaultAzureCredential
from azure.search.documents.indexes import SearchIndexClient
from azure.search.documents.indexes.models import (
    AzureOpenAIVectorizerParameters,
    ContentColumnMapping,
    EmbeddingColumnMapping,
    IndexedSqlKnowledgeSource,
    IndexedSqlKnowledgeSourceParameters,
)
from azure.search.documents.knowledgebases.models import (
    KnowledgeSourceAzureOpenAIVectorizer,
    KnowledgeSourceIngestionParameters,
    KnowledgeSourceNetworkAccessMode,
)

index_client = SearchIndexClient(endpoint="<search-endpoint>", credential=DefaultAzureCredential())

embedding_params = AzureOpenAIVectorizerParameters(
    resource_url="<aoai-endpoint>",
    deployment_name="<aoai-embedding-deployment>",
    model_name="<aoai-embedding-model>",
)

ingestion_params = KnowledgeSourceIngestionParameters(
    network_access_mode=KnowledgeSourceNetworkAccessMode.PUBLIC,
    content_extraction_mode="minimal",
    embedding_model=KnowledgeSourceAzureOpenAIVectorizer(
        azure_open_ai_parameters=embedding_params
    ),
)

knowledge_source = IndexedSqlKnowledgeSource(
    name="indexedsqlks",
    description="Indexed Azure SQL knowledge source.",
    indexed_sql_parameters=IndexedSqlKnowledgeSourceParameters(
        connection_string="Server=tcp:{server}.database.windows.net,1433;Database={db};...;",
        table_or_view="dbo.tbl_hotels",
        content_columns=[
            ContentColumnMapping(
                name="hotelName",
                source_field="HotelName",
                search_field_type="Edm.String",
            ),
            ContentColumnMapping(
                name="description",
                source_field="Description",
                search_field_type="Edm.String",
            ),
        ],
        embedding_columns=[
            EmbeddingColumnMapping(
                name="descriptionVector",
                source_field="Description",
            )
        ],
        ingestion_parameters=ingestion_params,
    ),
)

index_client.create_or_update_knowledge_source(knowledge_source=knowledge_source)
print(f"Knowledge source '{knowledge_source.name}' created or updated successfully.")

Reference:SearchIndexClient

### Create an indexed Azure SQL knowledge source
PUT {{search-endpoint}}/knowledgesources/indexedsqlks?api-version=2026-08-01-preview
Authorization: Bearer {{search-access-token}}
Content-Type: application/json

{
  "name": "indexedsqlks",
  "kind": "indexedSql",
  "description": "Indexed Azure SQL knowledge source.",
  "indexedSqlParameters": {
    "connectionString": "Server=tcp:{server}.database.windows.net,1433;Database={db};...;",
    "tableOrView": "dbo.tbl_hotels",
    "contentColumns": [
      { "name": "hotelName", "sourceField": "HotelName", "searchFieldType": "Edm.String" },
      { "name": "description", "sourceField": "Description", "searchFieldType": "Edm.String" }
    ],
    "embeddingColumns": [
      { "name": "descriptionVector", "sourceField": "Description" }
    ],
    "ingestionParameters": {
      "networkAccessMode": "public",
      "contentExtractionMode": "minimal",
      "embeddingModel": {
        "kind": "azureOpenAI",
        "azureOpenAIParameters": {
          "resourceUri": "{{aoai-endpoint}}",
          "deploymentId": "{{aoai-embedding-deployment}}",
          "modelName": "{{aoai-embedding-model}}"
        }
      }
    }
  }
}

Dokumentacja:Źródła wiedzy — tworzenie lub aktualizowanie

Użyj indexedSqlParameters do zidentyfikowania tabeli SQL lub widoku, z którego mają zostać pozyskane dane, oraz do zdefiniowania mapowań kolumn, które staną się polami w wygenerowanym indeksie. W przypadku widoków określ kolumnę znacznika wysokiego poziomu używaną do wykrywania zmian.

Mapowanie kolumn

Użyj contentColumns, aby mapować tekstowe kolumny SQL na pola z możliwością przeszukiwania w wygenerowanym indeksie Wyszukiwanie AI platformy Azure. Każde mapowanie kolumn zawartości nazywa pole indeksu docelowego, źródłową kolumnę SQL i typ pola Wyszukiwanie AI platformy Azure. Dla contentColumns użyj Edm.String.

Mapowanie osadzania

Służy embeddingColumns do mapowania kolumn tekstowych SQL na wygenerowane pola wektorów. Określ model osadzania w ingestionParameters, jeśli używasz kolumn osadzania.

W przypadku indeksowanych źródeł wiedzy Azure SQL "minimal" musi mieć wartość contentExtractionMode, ponieważ pozyskiwanie danych z SQL odbywa się na poziomie wierszy i nie wyodrębnia zawartości z dokumentów binarnych. Wyodrębnianie obrazów i opisywanie obrazów nie są obsługiwane, więc ustawienia chatCompletionModel, assetStore, aiServices oraz ustawienia związane z obrazami nie mają żadnego efektu.

Ustawianie wartości domyślnych i reguły walidacji

Następujące wartości domyślne mają zastosowanie podczas tworzenia indeksowanego Azure SQL źródła wiedzy.

  • Jeśli pominiesz contentColumns, usługa automatycznie mapuje kolumny SQL, które można bezpiecznie reprezentować jako tekst, na pola Edm.String w wygenerowanym indeksie, używając mapowania 1:1, gdzie name jest równe sourceField.

  • Jeśli pominięto embeddingColumns, usługa nie tworzy pól wektorowych i nie konfiguruje umiejętności osadzania.

  • embeddingColumns jest niezależny od contentColumns. Aby wektory odpowiadały tekstowi możliwemu do pobrania, uwzględnij tę samą kolumnę SQL w obu tablicach.

  • Klucz podstawowy tabeli źródłowej lub widoku jest automatycznie wykrywany. Jawne zastąpienia nie są obsługiwane, a źródło musi mieć jednowartościowy klucz podstawowy.

Ogranicz pozyskiwanie danych do sieci prywatnej

Począwszy od wersji interfejsu API 2026-08-01-preview, networkAccessMode kontroluje środowisko sieciowe, w którym działa wygenerowany indeksator dla indeksowanego źródła wiedzy Azure SQL. To ustawienie wpływa tylko na indeksowanie i nie zmienia żądań ani odpowiedzi pobierania z bazy wiedzy.

networkAccessMode wartość domyślna to public, która zachowuje istniejące zachowanie sieci publicznej. Gdy parametr networkAccessMode ma wartość private, wygenerowany indeksator działa w prywatnym środowisku wykonywania. Używa zatwierdzonych prywatnych linków udostępnionych do uzyskiwania dostępu do źródłowego połączenia z usługą Azure SQL Database lub SQL Managed Instance oraz do obsługiwanych zależności platformy Azure, takich jak modele Azure OpenAI i zasoby Microsoft Foundry.

Aby skonfigurować i zweryfikować dostęp do sieci prywatnej:

  1. Wypełnij wymagania wstępne dotyczące sieci prywatnej.

  2. Ustaw networkAccessMode na private w żądaniu utworzenia źródła wiedzy. Tę właściwość można ustawić tylko podczas tworzenia. Aby zmienić je później, usuń i ponownie utwórz źródło wiedzy.

    Tworzenie może zakończyć się niepowodzeniem, jeśli warstwa usługi lub środowisko uruchomieniowe nie obsługuje wykonywania prywatnego lub jeśli wymagany udostępniony link prywatny nie istnieje.

  3. Upewnij się, że wygenerowany indeksator executionEnvironment ma wartość private.

  4. Upewnij się, że każde wymagane współdzielone łącze prywatne zostało zatwierdzone i wskazuje właściwą zależność. Samo pomyślne utworzenie nie potwierdza zatwierdzenia linku ani kierowania.

  5. Sonduj stan źródła wiedzy, dopóki lastSynchronizationState.endTime nie ma wartości. Potwierdź, że itemsUpdatesFailed to 0, a następnie zweryfikuj zawartość źródłową związaną z danym łącznikiem. Synchronizacja kończy się niepowodzeniem, jeśli zależność nie jest osiągalna.

Sprawdź stan importowania danych

Uruchom następujący kod, aby monitorować postęp przetwarzania danych i kondycję, w tym rodzaj źródła wiedzy i szczegółowe błędy indeksowania dla źródeł wiedzy, które generują potok indeksatora i tworzą indeks wyszukiwania.

using Azure.Search.Documents.Indexes;
using System.Text.Json;

var indexClient = new SearchIndexClient(new Uri(searchEndpoint), new AzureKeyCredential(apiKey));

// Get knowledge source ingestion status
var statusResponse = await indexClient.GetKnowledgeSourceStatusAsync(knowledgeSourceName);
var status = statusResponse.Value;

// Serialize to JSON for display
var json = JsonSerializer.Serialize(status, new JsonSerializerOptions { WriteIndented = true });
Console.WriteLine(json);

Reference:SearchIndexClient

# Check knowledge source ingestion status
from azure.core.credentials import AzureKeyCredential
from azure.search.documents.indexes import SearchIndexClient
import json

index_client = SearchIndexClient(endpoint="search_url", credential=AzureKeyCredential("api_key"))

status = index_client.get_knowledge_source_status("knowledge_source_name")
print(json.dumps(status.as_dict(), indent=2))

Reference:SearchIndexClient

### Check knowledge source ingestion status
GET {{search-url}}/knowledgesources/{{knowledge-source-name}}/status?api-version={{api-version}}
Authorization: Bearer {{token}}
Content-Type: application/json 

Dokumentacja:Źródła wiedzy — pobieranie statusu

Odpowiedź na żądanie, która zawiera parametry pozyskiwania i aktywnie pozyskuje zawartość, może wyglądać jak poniższy przykład.

{
  "kind": "azureBlob",
  "synchronizationStatus": "active",
  "synchronizationInterval": "1d",
  "currentSynchronizationState": {
    "startTime": "2026-04-10T19:30:00Z",
    "itemUpdatesProcessed": 1100,
    "itemsUpdatesFailed": 100,
    "itemsSkipped": 1100,
    "errors": [
      {
        "key": "Item id 1",
        "docURL": "https://contoso.blob.core.windows.net/contracts/2024/Q4/doc-00023.csv",
        "statusCode": 400,
        "componentName": "DocumentExtraction.AzureBlob.MyDataSource",
        "errorMessage": "Could not read the value of column 'foo' at index '0'.",
        "details": "The file could not be parsed.",
        "documentationLink": "https://go.microsoft.com/fwlink/?linkid=2049388"
      }
    ]
  },
  "lastSynchronizationState": {
    "status": "partialSuccess",
    "startTime": "2026-04-09T19:30:00Z",
    "endTime": "2026-04-09T19:40:01Z",
    "itemUpdatesProcessed": 1100,
    "itemsUpdatesFailed": 100,
    "itemsSkipped": 1100,
    "errors": null
  },
  "statistics": {
    "totalSynchronizations": 25,
    "averageSynchronizationDuration": "00:15:20",
    "averageItemsProcessedPerSynchronization": 500
  }
}

Note

Właściwość kind i tablica currentSynchronizationState.errors[] ze szczegółami błędów na poziomie dokumentu są dostępne począwszy od wersji interfejsu API 2026-04-01. W przypadku wcześniejszych wersji interfejsu API te pola nie są zwracane. Pole lastSynchronizationState.status jest również nowe w 2026-04-01.

Przeglądanie wygenerowanych obiektów

Podczas tworzenia tego źródła wiedzy Wyszukiwanie AI platformy Azure automatycznie generuje źródło danych, zestaw umiejętności, indeksator i indeks. Odpowiedź na żądanie utworzenia wymienia każdy obiekt pod elementem createdResources.

Te obiekty są generowane zgodnie z ustalonym szablonem, a ich nazwy są oparte na nazwie źródła wiedzy. Nie można zmienić nazw obiektów. Unikaj bezpośredniego edytowania tych obiektów, ponieważ zmiany mogą powodować błędy lub niezgodności, które przerywają potok indeksatora.

Aby zweryfikować tworzenie obiektów, możesz użyć portalu Azure. Przepływ pracy to:

  1. Sprawdź indeksator pod kątem komunikatów o powodzeniu lub niepowodzeniu. Błędy połączenia lub limitu zostaną wyświetlone tutaj.

  2. Sprawdź źródło danych, aby zweryfikować połączenie z magazynem danych. Połączenie używa albo parametru połączenia, albo tożsamości zarządzanej, w zależności od tego, jak skonfigurowano źródło wiedzy.

  3. Sprawdź zestaw umiejętności, aby zobaczyć, jak treść jest dzielona na fragmenty i opcjonalnie wektoryzowana.

  4. Sprawdź indeks, aby zobaczyć, jak zawartość jest indeksowana i uwidoczniona na potrzeby pobierania, w tym pola, które można przeszukiwać i filtrować oraz które pola przechowują wektory na potrzeby wyszukiwania podobieństwa. Użyj Eksploratora wyszukiwania, aby uruchamiać zapytania względem wygenerowanego indeksu.

Przypisywanie do bazy wiedzy

Jeśli źródło wiedzy jest zadowalające, dodaj je do bazy wiedzy.

Wykonywanie zapytań w bazie wiedzy

Po skonfigurowaniu bazy wiedzy wywołaj akcję pobierania lub punkt końcowy MCP , aby wysłać zapytanie do źródła wiedzy.

Usuwanie źródła wiedzy

Aby można było usunąć źródło wiedzy, należy usunąć dowolną bazę wiedzy, która odwołuje się do źródła wiedzy, lub zaktualizować definicję bazy wiedzy, aby usunąć odwołanie. W przypadku źródeł wiedzy, które generują potok indeksu i indeksatora, wszystkie wygenerowane obiekty również są usuwane. Jeśli jednak użyto istniejącego indeksu do utworzenia źródła wiedzy, indeks nie zostanie usunięty.

Jeśli spróbujesz usunąć używane źródło wiedzy, akcja zakończy się niepowodzeniem i zwróci listę baz wiedzy, których dotyczy problem.

Aby usunąć źródło wiedzy:

  1. Pobierz listę wszystkich baz wiedzy w usłudze wyszukiwania.

    using Azure.Search.Documents.Indexes;
    
    var indexClient = new SearchIndexClient(new Uri(searchEndpoint), credential);
    var knowledgeBases = indexClient.GetKnowledgeBasesAsync();
    
    Console.WriteLine("Knowledge Bases:");
    
    await foreach (var kb in knowledgeBases)
    {
        Console.WriteLine($"  - {kb.Name}");
    }
    

    Reference:SearchIndexClient

    Przykładowa odpowiedź może wyglądać następująco:

     {
         "@odata.context": "https://my-search-service.search.windows.net/$metadata#knowledgebases(name)",
         "value": [
         {
             "name": "my-kb"
         },
         {
             "name": "my-kb-2"
         }
         ]
     }
    
  2. Uzyskaj pojedynczą definicję bazy wiedzy, aby sprawdzić odwołania do źródeł wiedzy.

    using Azure.Search.Documents.Indexes;
    using System.Text.Json;
    
    var indexClient = new SearchIndexClient(new Uri(searchEndpoint), credential);
    
    // Specify the knowledge base name to retrieve
    string kbNameToGet = "earth-knowledge-base";
    
    // Get a specific knowledge base definition
    var knowledgeBaseResponse = await indexClient.GetKnowledgeBaseAsync(kbNameToGet);
    var kb = knowledgeBaseResponse.Value;
    
    // Serialize to JSON for display
    string json = JsonSerializer.Serialize(kb, new JsonSerializerOptions { WriteIndented = true });
    Console.WriteLine(json);
    

    Reference:SearchIndexClient

    Przykładowa odpowiedź może wyglądać następująco:

     {
       "Name": "earth-knowledge-base",
       "KnowledgeSources": [
         {
           "Name": "earth-knowledge-source"
         }
       ],
       "Models": [
         {}
       ],
       "RetrievalReasoningEffort": {},
       "OutputMode": {},
       "ETag": "\u00220x8DE278629D782B3\u0022",
       "EncryptionKey": null,
       "Description": null,
       "RetrievalInstructions": null,
       "AnswerInstructions": null
     }
    
  3. Usuń bazę wiedzy lub, jeśli masz wiele źródeł wiedzy, zaktualizuj bazę wiedzy, aby usunąć źródło. W tym przykładzie pokazano usunięcie.

    using Azure.Search.Documents.Indexes;
    var indexClient = new SearchIndexClient(new Uri(searchEndpoint), credential);
    
    await indexClient.DeleteKnowledgeBaseAsync(knowledgeBaseName);
    System.Console.WriteLine($"Knowledge base '{knowledgeBaseName}' deleted successfully.");
    

    Reference:SearchIndexClient

  4. Usuń źródło wiedzy.

    await indexClient.DeleteKnowledgeSourceAsync(knowledgeSourceName);
    System.Console.WriteLine($"Knowledge source '{knowledgeSourceName}' deleted successfully.");
    

    Reference:SearchIndexClient

  1. Pobierz listę wszystkich baz wiedzy w usłudze wyszukiwania.

    # Get knowledge bases
    from azure.core.credentials import AzureKeyCredential
    from azure.search.documents.indexes import SearchIndexClient
    
    index_client = SearchIndexClient(endpoint = "search_url", credential = AzureKeyCredential("api_key"))
    
    print("Knowledge Bases:")
    for kb in index_client.list_knowledge_bases():
        print(f"  - {kb.name}")
    

    Reference:SearchIndexClient

    Przykładowa odpowiedź może wyglądać następująco:

     {
         "@odata.context": "https://my-search-service.search.windows.net/$metadata#knowledgebases(name)",
         "value": [
         {
             "name": "my-kb"
         },
         {
             "name": "my-kb-2"
         }
         ]
     }
    
  2. Uzyskaj pojedynczą definicję bazy wiedzy, aby sprawdzić odwołania do źródeł wiedzy.

    # Get a knowledge base definition
    from azure.core.credentials import AzureKeyCredential
    from azure.search.documents.indexes import SearchIndexClient
    
    index_client = SearchIndexClient(endpoint = "search_url", credential = AzureKeyCredential("api_key"))
    kb = index_client.get_knowledge_base("knowledge_base_name")
    print(kb)
    

    Reference:SearchIndexClient

    Przykładowa odpowiedź może wyglądać następująco:

     {
       "name": "my-kb",
       "description": null,
       "retrievalInstructions": null,
       "answerInstructions": null,
       "outputMode": null,
       "knowledgeSources": [
         {
           "name": "my-blob-ks"
         }
       ],
       "models": [],
       "encryptionKey": null,
       "retrievalReasoningEffort": {
         "kind": "low"
       }
     }
    
  3. Usuń bazę wiedzy lub, jeśli masz wiele źródeł wiedzy, zaktualizuj bazę wiedzy, aby usunąć źródło. W tym przykładzie pokazano usunięcie.

    # Delete a knowledge base
    from azure.core.credentials import AzureKeyCredential 
    from azure.search.documents.indexes import SearchIndexClient
    
    index_client = SearchIndexClient(endpoint = "search_url", credential = AzureKeyCredential("api_key"))
    index_client.delete_knowledge_base("knowledge_base_name")
    print(f"Knowledge base deleted successfully.")
    

    Reference:SearchIndexClient

  4. Usuń źródło wiedzy.

    # Delete a knowledge source
    from azure.core.credentials import AzureKeyCredential 
    from azure.search.documents.indexes import SearchIndexClient
    
    index_client = SearchIndexClient(endpoint = "search_url", credential = AzureKeyCredential("api_key"))
    index_client.delete_knowledge_source("knowledge_source_name")
    print(f"Knowledge source deleted successfully.")
    

    Reference:SearchIndexClient

  1. Pobierz listę wszystkich baz wiedzy w usłudze wyszukiwania.

    ### Get knowledge bases
    GET {{search-url}}/knowledgebases?api-version={{api-version}}&$select=name
    Authorization: Bearer {{token}}
    

    Dokumentacja:Bazy wiedzy — lista

    Przykładowa odpowiedź może wyglądać następująco:

     {
         "@odata.context": "https://my-search-service.search.windows.net/$metadata#knowledgebases(name)",
         "value": [
         {
             "name": "my-kb"
         },
         {
             "name": "my-kb-2"
         }
         ]
     }
    
  2. Uzyskaj pojedynczą definicję bazy wiedzy, aby sprawdzić odwołania do źródeł wiedzy.

    ### Get a knowledge base definition
    GET {{search-url}}/knowledgebases/{{knowledge-base-name}}?api-version={{api-version}}
    Authorization: Bearer {{token}}
    

    Dokumentacja:Bazy wiedzy — pobieranie

    Przykładowa odpowiedź może wyglądać następująco:

     {
       "name": "my-kb",
       "description": null,
       "retrievalInstructions": null,
       "answerInstructions": null,
       "outputMode": null,
       "knowledgeSources": [
         {
           "name": "my-blob-ks"
         }
       ],
       "models": [],
       "encryptionKey": null,
       "retrievalReasoningEffort": {
         "kind": "low"
       }
     }
    
  3. Usuń bazę wiedzy lub, jeśli masz wiele źródeł wiedzy, zaktualizuj bazę wiedzy, aby usunąć źródło. W tym przykładzie pokazano usunięcie.

    ### Delete a knowledge base
    DELETE {{search-url}}/knowledgebases/{{knowledge-base-name}}?api-version={{api-version}}
    Authorization: Bearer {{token}}
    

    Dokumentacja:Bazy wiedzy — usuwanie

  4. Usuń źródło wiedzy.

    ### Delete a knowledge source
    DELETE {{search-url}}/knowledgesources/{{knowledge-source-name}}?api-version={{api-version}}
    Authorization: Bearer {{token}}
    

    Dokumentacja:Źródła wiedzy — usuwanie