Tworzenie źródła wiedzy o pliku (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

Funkcje, możliwości lub właściwości oznaczone (wersja zapoznawcza) nie są objęte umową dotyczącą poziomu usług, nie są zalecane w przypadku obciążeń produkcyjnych i mogą ulec zmianie lub ograniczeniu, zanim staną się one ogólnie dostępne. Warunki Wyszukiwanie AI platformy Azure wersji zapoznawczej mają zastosowanie do wszystkich funkcji w wersji zapoznawczej, niezależnie od tego, czy jest ona autonomiczna, czy częścią ogólnie dostępnej funkcji.

Źródło wiedzy oparte na plikach (wersja zapoznawcza) przesyła małe i średnie zestawy plików bezpośrednio do Wyszukiwanie AI platformy Azure na potrzeby wyszukiwania agentowego. Ź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ń.

Źródła wiedzy dotyczące plików są przydatne, gdy chcesz korzystać z zarządzanego środowiska przekazywania zamiast aprowizować Azure Storage, konfigurować dostęp i tworzyć potok indeksatora za pośrednictwem kontenera zewnętrznego. Wyszukiwanie AI platformy Azure przetwarza przekazane pliki, aby ich wyodrębniona zawartość mogła zostać pobrana z bazy wiedzy.

Zamiast tego użyj źródła wiedzy typu blob, gdy pliki znajdują się już w usłudze Azure Blob Storage lub Azure Data Lake Storage Gen2, gdy zestaw plików przekracza lub prawdopodobnie przekroczy limity źródła wiedzy plików, albo gdy potrzebujesz planowego pozyskiwania danych. Użyj również źródła wiedzy Blob, jeśli chcesz zarządzać źródłowymi obiektami Blob za pomocą zasad zarządzania cyklem życia usługi Azure Blob Storage lub jeśli potrzebujesz uprawnień na poziomie dokumentu (wersja zapoznawcza) na podstawie uprawnień w usłudze Azure Storage.

Wsparcie użytkowania

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

Wymagania wstępne

  • Usługa Wyszukiwanie AI platformy Azure w dowolnym regionie, która zapewnia autonomiczne wyszukiwanie. Źródła wiedzy dotyczące plików obsługują modele cen dedykowane i bezserwerowe. Aby uzyskać szczegółowe informacje o modelu i warstwie, zobacz Wybieranie modelu cenowego i warstwy usług.

  • Przejrzyj koszty Wyszukiwanie AI platformy Azure. Wywołania modelu, wektoryzacja i inne przetwarzanie sztucznej inteligencji mogą powodować naliczanie oddzielnych opłat.

  • W środowisku Serverless pomyślne operacje przesyłania plików zużywają płatne zasoby obliczeniowe. Nieudane przekazywanie nie powoduje naliczania opłat za zasoby obliczeniowe bezserwerowe.

  • Jeśli potrzebujesz płatnego wyszukiwania agentowego po przekroczeniu miesięcznego bezpłatnego limitu, włącz plan standardowy wyszukiwania agentowego. Ustawienie knowledgeRetrieval=standard jest niezależne od opłat za bezserwerowe zasoby obliczeniowe i magazynowanie i nie służy do wyboru modelu cenowego.

  • Pliki w obsługiwanym formacie.

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

  • Jeśli źródło wiedzy określa model Azure OpenAI do tworzenia osadzeń, usługa wyszukiwania musi mieć zarządzaną tożsamość z uprawnieniami Użytkownik usług Cognitive Services do zasobu Microsoft Foundry.

    • Jeśli zasób Foundry ma wyłączony dostęp do sieci publicznej, utwórz foundry_accountwspółdzielone łącze prywatne z usługi wyszukiwania do zasobu Foundry i pozostaw włączone ustawienie Zezwalaj usługom platformy Azure z listy zaufanych usług.
  • Jeśli źródło wiedzy określa standard tryb wyodrębniania zawartości, zapoznaj się z wymaganiami dotyczącymi umiejętności Azure Content Understanding.

    • Opłaty za użycie są naliczane zgodnie z cennikiem Azure Content Understanding w narzędziach Foundry dla zasobu Foundry skonfigurowanego za pośrednictwem aiServices.

    • Dzienny bezpłatny limit 20 dokumentów dostępny dla niektórych wbudowanych umiejętności nie obowiązuje.

    • W przykładzie opisanym w tym artykule potrzebne są punkt końcowy i klucz zasobu Foundry, a także informacje o modelu osadzania Azure OpenAI oraz modelu ukończeń czatu.

  • 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

Obsługa plików i limity

Przed utworzeniem źródła wiedzy o pliku zapoznaj się z wymaganiami i limitami, które mają wpływ na przekazywanie, wyodrębnianie i zarządzanie plikami.

Obsługiwane typy zawartości

Źródła wiedzy dotyczące plików akceptują pliki na podstawie wykrytego typu zawartości. Typ zawartości dostarczonej przez obiekt wywołujący nie zastępuje wykrywania.

Obsługiwane typy zawartości obejmują:

  • PDF
  • Słowo (.doc, .docx)
  • PowerPoint (.ppt, .pptx)
  • Excel (.xls, .xlsx)
  • JSON
  • Skrypty powłoki
  • Wykryto treść jako text/*, taką jak .txt, .md, .html i .csv

Obsługiwane tryby wyodrębniania

  • W przypadku wymienionych typów treści zarówno 2026-05-01-preview, jak i 2026-08-01-preview obsługują minimal. standard jest dostępny tylko w programie 2026-08-01-preview.

  • Zawartość wykryta jako image/* nie jest obsługiwana w programie 2026-05-01-preview. W pliku 2026-08-01-preview użyj wyodrębniania standard. minimal Ekstrakcja zwraca kod stanu HTTP 415 w obu wersjach.

Limity i operacje na plikach

Limity i obsługiwane operacje na plikach różnią się wersją interfejsu API.

Zdolność 2026-05-01-preview 2026-08-01-preview
Maksymalna liczba plików na źródło wiedzy 100 200
Maksymalny rozmiar pliku 50 MB we wszystkich obsługiwanych warstwach cenowych 50 MB w warstwie Bezpłatna i Podstawowa; 100 MB w innych obsługiwanych warstwach dedykowanych i bezserwerowych
Czas trwania przetwarzania Przesyłanie może trwać do 180 sekund Przesyłanie i aktualizacja mogą trwać do 180 sekund
Przekazywanie zawartości i metadanych Nieprzetworzona zawartość pliku Nieprzetworzona zawartość pliku lub zawartość wieloczęściowa z metadanymi
Wyświetl listę przesłanych plików Lista plików Filtruj według ścieżki lub nazwy pliku i zwracaj bardziej zaawansowane szczegóły pliku
Zamień istniejącą zawartość pliku Usuwanie i ponowne przekazywanie Użyj operacji aktualizacji
Dostęp przeglądarki do operacji na plikach Mechanizm CORS nie jest dostępny Konfigurowanie mechanizmu CORS

Note

  • Wygenerowany indeks wyszukiwania przechowuje przekazaną zawartość. Aby uzyskać łączne limity magazynu według warstwy cenowej, zobacz Limity usług.
  • Jeśli skonfigurujesz plikowe źródło wiedzy tak, aby dzieliło przesłaną zawartość na fragmenty lub poddawało ją wektoryzacji, obowiązują również limity modelu i przetwarzania na dalszych etapach.

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 źródła wiedzy pliku.

{
  "name": "my-file-ks",
  "kind": "file",
  "description": "A sample file knowledge source.",
  "encryptionKey": null,
  "fileParameters": {
    "ingestionParameters": {
      "contentExtractionMode": "minimal",
      "embeddingModel": {
        "kind": "azureOpenAI",
        "azureOpenAIParameters": {
          "resourceUri": "<REDACTED>",
          "deploymentId": "text-embedding-3-large",
          "modelName": "text-embedding-3-large"
        }
      }
    }
  }
}

Tworzenie źródła wiedzy

Utwórz plikowe źródło wiedzy, które określa model osadzeń używany do wektoryzacji przesłanej zawartości.

Każde źródło wiedzy o pliku tworzy indeks, ale nie indeksator ani harmonogram. Należy dołączyć obiekt fileParameters.ingestionParameters. Usługa odrzuca żądania określające wartość networkAccessMode.

using Azure.Identity;
using Azure.Search.Documents.Indexes;
using Azure.Search.Documents.Indexes.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
{
    ContentExtractionMode = "minimal",
    EmbeddingModel = new KnowledgeSourceAzureOpenAIVectorizer
    {
        AzureOpenAIParameters = embeddingParams
    }
};

var fileParams = new FileKnowledgeSourceParameters
{
    IngestionParameters = ingestionParams
};

var knowledgeSource = new FileKnowledgeSource(
    name: "my-file-ks",
    fileParameters: fileParams
)
{
    Description = "This knowledge source uses directly uploaded product manuals."
};

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

Reference:SearchIndexClient

from azure.identity import DefaultAzureCredential
from azure.search.documents.indexes import SearchIndexClient
from azure.search.documents.indexes.models import (
    AzureOpenAIVectorizerParameters,
    FileKnowledgeSource,
    FileKnowledgeSourceParameters,
)
from azure.search.documents.knowledgebases.models import (
    KnowledgeSourceAzureOpenAIVectorizer,
    KnowledgeSourceIngestionParameters,
)

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(
    content_extraction_mode="minimal",
    embedding_model=KnowledgeSourceAzureOpenAIVectorizer(
        azure_open_ai_parameters=embedding_params
    ),
)

knowledge_source = FileKnowledgeSource(
    name="my-file-ks",
    description="This knowledge source uses directly uploaded product manuals.",
    file_parameters=FileKnowledgeSourceParameters(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

PUT {{search-endpoint}}/knowledgesources/my-file-ks?api-version=2026-08-01-preview
Authorization: Bearer {{search-access-token}}
Content-Type: application/json
Prefer: return=representation

{
  "name": "my-file-ks",
  "kind": "file",
  "description": "This knowledge source uses directly uploaded product manuals.",
  "encryptionKey": null,
  "fileParameters": {
    "ingestionParameters": {
      "embeddingModel": {
        "kind": "azureOpenAI",
        "azureOpenAIParameters": {
          "resourceUri": "{{aoai-endpoint}}",
          "deploymentId": "{{aoai-embedding-deployment}}",
          "modelName": "{{aoai-embedding-model}}"
        }
      },
      "contentExtractionMode": "minimal"
    }
  }
}

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

Skonfiguruj ekstrakcję standardową

Od wersji interfejsu API 2026-08-01-preview ekstrakcja standard wykorzystuje usługę Content Understanding do wyodrębniania danych, semantycznego dzielenia na fragmenty i wzbogacania przesłanych plików. Wyszukiwanie AI platformy Azure zarządza tym przetwarzaniem w ramach źródła wiedzy, a opłaty za usługę Content Understanding są stosowane oddzielnie.

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 embeddingParameters = new AzureOpenAIVectorizerParameters
{
  ResourceUri = new Uri(aoaiEndpoint),
  DeploymentName = aoaiEmbeddingDeployment,
  ModelName = aoaiEmbeddingModel
};

var ingestionParameters = new KnowledgeSourceIngestionParameters
{
  ContentExtractionMode = KnowledgeSourceContentExtractionMode.Standard,
  AiServices = new AIServices(new Uri(foundryEndpoint)) { ApiKey = foundryKey },
  EmbeddingModel = new KnowledgeSourceAzureOpenAIVectorizer
  {
    AzureOpenAIParameters = embeddingParameters
  },
  ChatCompletionModel = new KnowledgeBaseAzureOpenAIModel(
    new AzureOpenAIVectorizerParameters
    {
      ResourceUri = new Uri(aoaiEndpoint),
      DeploymentName = aoaiChatDeployment,
      ModelName = aoaiChatModel
    })
};

var knowledgeSource = new FileKnowledgeSource(
  "my-file-ks",
  new FileKnowledgeSourceParameters { IngestionParameters = ingestionParameters });

await indexClient.CreateOrUpdateKnowledgeSourceAsync(knowledgeSource);
Console.WriteLine($"Configured standard extraction for '{knowledgeSource.Name}'.");

Reference:SearchIndexClient

from azure.identity import DefaultAzureCredential
from azure.search.documents.indexes import SearchIndexClient
from azure.search.documents.indexes.models import (
  AzureOpenAIVectorizerParameters,
  FileKnowledgeSource,
  FileKnowledgeSourceParameters,
  KnowledgeBaseAzureOpenAIModel,
)
from azure.search.documents.knowledgebases.models import (
  AIServices,
  KnowledgeSourceAzureOpenAIVectorizer,
  KnowledgeSourceIngestionParameters,
)

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

embedding_parameters = AzureOpenAIVectorizerParameters(
  resource_url="<aoai-endpoint>",
  deployment_name="<aoai-embedding-deployment>",
  model_name="<aoai-embedding-model>",
)
ingestion_parameters = KnowledgeSourceIngestionParameters(
  content_extraction_mode="standard",
  ai_services=AIServices(
    uri="<foundry-resource-endpoint>",
    api_key="<foundry-resource-key>",
  ),
  embedding_model=KnowledgeSourceAzureOpenAIVectorizer(
    azure_open_ai_parameters=embedding_parameters
  ),
  chat_completion_model=KnowledgeBaseAzureOpenAIModel(
    azure_open_ai_parameters=AzureOpenAIVectorizerParameters(
      resource_url="<aoai-endpoint>",
      deployment_name="<aoai-gpt-deployment>",
      model_name="<aoai-gpt-model>",
    )
  ),
)
knowledge_source = FileKnowledgeSource(
  name="my-file-ks",
  file_parameters=FileKnowledgeSourceParameters(
    ingestion_parameters=ingestion_parameters
  ),
)

index_client.create_or_update_knowledge_source(knowledge_source)
print(f"Configured standard extraction for '{knowledge_source.name}'.")

Reference:SearchIndexClient

PUT {{search-endpoint}}/knowledgesources/my-file-ks?api-version=2026-08-01-preview
Content-Type: application/json
Authorization: Bearer {{search-access-token}}
Prefer: return=representation

{
  "name": "my-file-ks",
  "kind": "file",
  "description": "This knowledge source uses standard extraction.",
  "fileParameters": {
    "ingestionParameters": {
      "embeddingModel": {
        "kind": "azureOpenAI",
        "azureOpenAIParameters": {
          "resourceUri": "{{aoai-endpoint}}",
          "deploymentId": "{{aoai-embedding-deployment}}",
          "modelName": "{{aoai-embedding-model}}"
        }
      },
      "chatCompletionModel": {
        "kind": "azureOpenAI",
        "azureOpenAIParameters": {
          "resourceUri": "{{aoai-endpoint}}",
          "deploymentId": "{{aoai-gpt-deployment}}",
          "modelName": "{{aoai-gpt-model}}"
        }
      },
      "contentExtractionMode": "standard",
      "aiServices": {
        "uri": "{{foundry-resource-endpoint}}",
        "apiKey": "{{foundry-resource-key}}"
      }
    }
  }
}

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

MECHANIZM CORS dla operacji na plikach

Aby zezwolić na operacje na plikach w przeglądarce, ustaw corsOptions w źródle wiedzy o plikach, podając zaufane źródła pochodzenia oraz maksymalny czas przechowywania odpowiedzi preflight w pamięci podręcznej dla aplikacji.

Ważna

W wersji API corsOptions element 2026-08-01-preview ma zastosowanie do endpointów przesyłania plików, listowania, aktualizacji i usuwania, niezależnie od trybu ekstrakcji. Jeśli pominięto corsOptions, źródło wiedzy pliku nie ma zasad między źródłami przeglądarki. Mechanizm CORS nie autoryzuje żądań. Włączenie źródeł może uwidaczniać operacje usług i dane w kontekście przeglądarki i wprowadzać zagrożenia bezpieczeństwa. Określ tylko zaufane źródła pochodzenia i nie używaj originu wieloznacznego w produkcji. W przypadku żądań z przeglądarki użyj uwierzytelniania tokenem Microsoft Entra z minimalną wymaganą rolą. Nigdy nie ujawniaj tokenów dostępu lub kluczy usługi w kodzie przeglądarki.

Przekaż pliki

Po utworzeniu źródła wiedzy przekaż pliki bezpośrednio do niego. Każde przekazywanie jest synchronicznym wywołaniem: Wyszukiwanie AI platformy Azure wyodrębnia zawartość, fragmentuje ją, tworzy osadzanie w razie potrzeby, indeksuje fragmenty i utrwala metadane pliku przed zwróceniem wywołania. Nie trzeba konfigurować ani uruchamiać oddzielnego potoku ingestii danych.

Aby uzyskać pomoc dotyczącą błędów związanych z przekazywaniem plików i zarządzaniem nimi, zobacz Rozwiązywanie problemów z operacjami na plikach.

Prześlij plik RAW

W przypadku surowego przesyłania wymieniony element fileName pochodzi z nagłówka Content-Disposition: attachment; filename="...". Wywołania REST i zestaw SDK .NET ustawiają ten nagłówek bezpośrednio, podczas gdy zestaw SDK Python akceptuje parametr filename i automatycznie kompiluje nagłówek. Jeśli nie podasz nazwy pliku, usługa przypisze wygenerowaną automatycznie nazwę fileName.

Nazwy plików mogą zawierać ścieżkę względną, taką jak manuals/installation-guide.pdf. Usługa zamienia ukośniki odwrotne na ukośniki proste. Odrzuca ścieżki bezwzględne, puste segmenty ścieżki, segmenty .. lub ., segmenty zawierające dwukropki oraz nieprawidłowe znaki w nazwach plików, ze stanem HTTP 400.

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

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

string fileName = "installation-guide.pdf";
byte[] fileBytes = await File.ReadAllBytesAsync(fileName);
string contentDisposition = $"attachment; filename=\"{fileName}\"";

KnowledgeSourceFile uploadedFile = (await indexClient.UploadKnowledgeSourceFileAsync(
    "my-file-ks",
    contentDisposition,
    BinaryData.FromBytes(fileBytes))).Value;

Console.WriteLine($"Uploaded file ID: {uploadedFile.FileId}");

Reference:SearchIndexClient.UploadKnowledgeSourceFileAsync

from pathlib import Path

from azure.identity import DefaultAzureCredential
from azure.search.documents.indexes import SearchIndexClient

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

file_path = Path("installation-guide.pdf")
uploaded_file = index_client.upload_knowledge_source_file(
    "my-file-ks",
    file_path.read_bytes(),
    filename=file_path.name,
)
print(f"Uploaded file ID: {uploaded_file.file_id}")

Dokumentacja:SearchIndexClient.upload_knowledge_source_file

POST {{search-endpoint}}/knowledgesources/my-file-ks/files?api-version=2026-08-01-preview
Authorization: Bearer {{search-access-token}}
Content-Type: application/octet-stream
Content-Disposition: attachment; filename="installation-guide.pdf"

<binary file content>

Informacje referencyjne:Źródła wiedzy - Prześlij plik

Przekazywanie pliku z opcjonalnymi metadanymi

Począwszy od wersji interfejsu 2026-08-01-preview API, użyj żądania wieloczęściowego, aby przekazać jeden plik binarny z opcjonalnymi niestandardowymi metadanymi. Żądanie zawiera dokładnie jedną content część i opcjonalną część JSON metadata .

Jeśli określono obie nazwy, metadata.fileName ma pierwszeństwo przed nazwą pliku w części content. Jeśli żadna z nich nie zostanie określona, usługa przypisuje automatycznie wygenerowaną nazwę pliku.

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

var indexClient = new SearchIndexClient(new Uri(searchEndpoint), new DefaultAzureCredential());
var metadata = new FileUploadMetadata
{
  FileName = "installation-guide.pdf",
  Metadata =
  {
    ["department"] = "support",
    ["product"] = "contoso-100"
  }
};

#pragma warning disable SCME0004
var request = new UploadKnowledgeSourceFileMultipartRequest(
  metadata,
  "installation-guide.pdf");
KnowledgeSourceFile uploadedFile = (await indexClient
  .UploadKnowledgeSourceFileMultipartAsync("my-file-ks", request)).Value;
#pragma warning restore SCME0004

Console.WriteLine($"Uploaded file ID: {uploadedFile.FileId}");

Reference:SearchIndexClient.UploadKnowledgeSourceFileMultipartAsync

from pathlib import Path

from azure.identity import DefaultAzureCredential
from azure.search.documents.indexes import SearchIndexClient
from azure.search.documents.indexes.models import (
  FileUploadMetadata,
  UploadKnowledgeSourceFileMultipartRequest,
)

index_client = SearchIndexClient(endpoint="<search-endpoint>", credential=DefaultAzureCredential())
file_path = Path("installation-guide.pdf")
request = UploadKnowledgeSourceFileMultipartRequest(
  metadata=FileUploadMetadata(
    file_name=file_path.name,
    metadata={"department": "support", "product": "contoso-100"},
  ),
  content=(file_path.name, file_path.read_bytes(), "application/pdf"),
)

uploaded_file = index_client.upload_knowledge_source_file_multipart(
  name="my-file-ks",
  body=request,
)
print(f"Uploaded file ID: {uploaded_file.file_id}")

Dokumentacja:SearchIndexClient.upload_knowledge_source_file_multipart

POST {{search-endpoint}}/knowledgesources('my-file-ks')/files?api-version=2026-08-01-preview
Authorization: Bearer {{search-access-token}}
Content-Type: multipart/form-data; boundary=file-boundary

--file-boundary
Content-Disposition: form-data; name="metadata"
Content-Type: application/json

{
  "fileName": "installation-guide.pdf",
  "metadata": {
    "department": "support",
    "product": "contoso-100"
  }
}
--file-boundary
Content-Disposition: form-data; name="content"; filename="installation-guide.pdf"
Content-Type: application/octet-stream

< ./installation-guide.pdf
--file-boundary--

Informacje referencyjne:Źródła wiedzy - Prześlij plik

Note

Przekazywanie pliku nie zastępuje istniejącego pliku, nawet jeśli używasz tego samego pliku fileName. Każde pomyślne przesłanie tworzy nowy plik z własnym fileId, więc lista przesłanych plików może zawierać wiele wpisów, które mają ten sam fileName.

Za pomocą 2026-05-01-preview zastąp zawartość, usuwając poprzedni plik i przesyłając plik zastępczy. W programie 2026-08-01-previewużyj operacji aktualizacji.

Wyświetl listę przesłanych plików

Wyświetlanie listy plików w źródle wiedzy w celu sprawdzenia przekazanego zestawu plików.

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

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

await foreach (KnowledgeSourceFile file in indexClient.GetKnowledgeSourceFilesAsync("my-file-ks"))
{
    Console.WriteLine($"{file.FileName} ({file.FileSizeBytes} bytes) error={file.ErrorMessage}");
}

Reference:SearchIndexClient.GetKnowledgeSourceFilesAsync

from azure.identity import DefaultAzureCredential
from azure.search.documents.indexes import SearchIndexClient

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

for file in index_client.list_knowledge_source_files("my-file-ks"):
    print(f"{file.file_name} ({file.file_size_bytes} bytes) error={file.error_message}")

Dokumentacja:SearchIndexClient.list_knowledge_source_files

GET {{search-endpoint}}/knowledgesources/my-file-ks/files?api-version=2026-08-01-preview
Authorization: Bearer {{search-access-token}}

Informacje referencyjne:Źródła wiedzy — wyświetlanie listy plików

Odpowiedź zawiera metadane dla każdego przekazanego pliku. Pliki, które zostały pomyślnie wyświetlone, mają wartość errorMessagenull.

{
  "value": [
    {
      "fileId": "file-abc123",
      "fileName": "installation-guide.pdf",
      "fileSizeBytes": 1048576,
      "createdAt": "2026-05-07T18:10:00Z",
      "lastUpdatedAt": "2026-05-07T18:14:00.803Z",
      "errorMessage": null
    }
  ]
}

Jeśli nowe przekazywanie nie powiedzie się, żądanie zwróci błąd i nie utworzy rekordu metadanych pliku. Przesłanie, które zakończyło się niepowodzeniem, nie pojawia się w wynikach kolejnych wywołań listy i nie jest za nie naliczana opłata.

Jeśli wystąpi błąd dostępu do modelu, a zasób Foundry obsługujący model osadzeń korzysta z sieci prywatnej, upewnij się, że współdzielone łącze prywatne foundry_account jest zatwierdzone, a obejście dla zaufanych usług jest włączone. Wyłączone obejście zwraca wartość 403 Public access is disabled. Aby uzyskać szczegółowe informacje o konfiguracji, zobacz Wymagania wstępne.

Wyświetlanie listy i filtrowanie plików

Począwszy od wersji interfejsu 2026-08-01-preview API, użyj polecenia prefix , aby filtrować pliki według ścieżki względnej lub search filtrować według prefiksu nazwy pliku. Ustaw pageSize wartość , aby kontrolować liczbę wyników.

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

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

await foreach (KnowledgeSourceFile file in indexClient.GetKnowledgeSourceFilesAsync(
  "my-file-ks",
  prefix: "manuals/",
  pageSize: 100))
{
  Console.WriteLine($"{file.FileName} ({file.FileId})");
}

Reference:SearchIndexClient.GetKnowledgeSourceFilesAsync

from azure.identity import DefaultAzureCredential
from azure.search.documents.indexes import SearchIndexClient

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

files = index_client.list_knowledge_source_files(
  "my-file-ks",
  prefix="manuals/",
  page_size=100,
)
for file in files:
  print(f"{file.file_name} ({file.file_id})")

Dokumentacja:SearchIndexClient.list_knowledge_source_files

GET {{search-endpoint}}/knowledgesources('my-file-ks')/files?api-version=2026-08-01-preview&prefix=manuals/&pageSize=100
Authorization: Bearer {{search-access-token}}

Informacje referencyjne:Źródła wiedzy — wyświetlanie listy plików

Odpowiedź obejmuje tryby analizowania i wyodrębniania wybranych przez usługę, a także metadanych użytkownika na potrzeby zarządzania plikami. Metadane użytkownika nie można przeszukiwać ani filtrować.

{
  "value": [
    {
      "fileId": "file-abc123",
      "fileName": "manuals/installation-guide.md",
      "prefix": "manuals/",
      "metadata": {
        "department": "support",
        "product": "contoso-100"
      },
      "parsingMode": "markdown",
      "extractionMode": "minimal",
      "fileSizeBytes": 1048576,
      "createdAt": "2026-08-03T18:10:00Z",
      "lastUpdatedAt": "2026-08-03T18:14:00Z",
      "errorMessage": null
    }
  ],
  "@odata.nextLink": "<service-generated continuation URL>"
}

Aby pobrać wszystkie wyniki, postępuj zgodnie z @odata.nextLink instrukcjami, aż nie będzie ono nieobecne. Wyślij pełny adres URL dokładnie tak, jak został zwrócony, bez zmieniania parametrów zapytania.

Aktualizuj przesłany plik

Począwszy od wersji interfejsu 2026-08-01-preview API, zaktualizuj plik przy użyciu polecenia fileId. Żądanie wieloczęściowe wymaga części binarnej content . Część metadanych w formacie JSON jest opcjonalna, więc obsługiwana jest aktualizacja samej zawartości. Aktualizacja tylko dla metadanych nie jest obsługiwana.

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

var indexClient = new SearchIndexClient(new Uri(searchEndpoint), new DefaultAzureCredential());
var metadata = new FileUploadMetadata
{
  FileName = "installation-guide.pdf",
  Metadata =
  {
    ["department"] = "support",
    ["product"] = "contoso-200"
  }
};

#pragma warning disable SCME0004
var request = new UpdateKnowledgeSourceFileRequest(
  metadata,
  "installation-guide.pdf");
KnowledgeSourceFile updatedFile = (await indexClient.UpdateKnowledgeSourceFileAsync(
  fileId,
  "my-file-ks",
  request)).Value;
#pragma warning restore SCME0004

Console.WriteLine($"Updated file ID: {updatedFile.FileId}");

Reference:SearchIndexClient.UpdateKnowledgeSourceFileAsync

from pathlib import Path

from azure.identity import DefaultAzureCredential
from azure.search.documents.indexes import SearchIndexClient
from azure.search.documents.indexes.models import (
  FileUploadMetadata,
  UpdateKnowledgeSourceFileRequest,
)

index_client = SearchIndexClient(endpoint="<search-endpoint>", credential=DefaultAzureCredential())
file_path = Path("installation-guide.pdf")
request = UpdateKnowledgeSourceFileRequest(
  metadata=FileUploadMetadata(
    file_name=file_path.name,
    metadata={"department": "support", "product": "contoso-200"},
  ),
  content=(file_path.name, file_path.read_bytes(), "application/pdf"),
)

updated_file = index_client.update_knowledge_source_file(
  name="my-file-ks",
  file_id=file_id,
  body=request,
)
print(f"Updated file ID: {updated_file.file_id}")

Dokumentacja:SearchIndexClient.update_knowledge_source_file

PUT {{search-endpoint}}/knowledgesources('my-file-ks')/files('{{file-id}}')?api-version=2026-08-01-preview
Authorization: Bearer {{search-access-token}}
Content-Type: multipart/form-data; boundary=file-boundary

--file-boundary
Content-Disposition: form-data; name="metadata"
Content-Type: application/json

{
  "fileName": "installation-guide.pdf",
  "metadata": {
    "department": "support",
    "product": "contoso-200"
  }
}
--file-boundary
Content-Disposition: form-data; name="content"; filename="installation-guide.pdf"
Content-Type: application/octet-stream

< ./installation-guide.pdf
--file-boundary--

Dokumentacja:Źródła wiedzy — plik aktualizacji

Jeśli aktualizacja nie powiedzie się, poprzedni rekord metadanych pozostanie. Nie zakładaj, że aktualizacja zmienia indeksowaną zawartość transakcyjnie.

Usuń przesłane pliki

Usuń pliki ze źródła wiedzy, gdy nie chcesz już ich pobierać.

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

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

await indexClient.DeleteKnowledgeSourceFileAsync("my-file-ks", "file-abc123");

Reference:SearchIndexClient.DeleteKnowledgeSourceFileAsync

from azure.identity import DefaultAzureCredential
from azure.search.documents.indexes import SearchIndexClient

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

index_client.delete_knowledge_source_file("my-file-ks", "file-abc123")

Dokumentacja:SearchIndexClient.delete_knowledge_source_file

DELETE {{search-endpoint}}/knowledgesources/my-file-ks/files/file-abc123?api-version=2026-08-01-preview
Authorization: Bearer {{search-access-token}}

Dokumentacja:Źródła wiedzy — usuwanie pliku

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

Rozwiązywanie problemów z operacjami na plikach

Poniższe kody stanu dotyczą operacji związanych z plikowym źródłem wiedzy.

Kod stanu Przyczyna i akcja
400 Plik jest pusty, nie zawiera tekstu możliwego do wyodrębnienia, ma niebezpieczną ścieżkę względną lub ma nieprawidłowe żądanie kontynuacji. Sprawdź, czy plik ma obsługiwaną, czytelną zawartość i prawidłową nazwę pliku. W przypadku operacji listy postępuj @odata.nextLink zgodnie z zwracaną wartością. Nie należy łączyć $skiptoken z search ani z pageSize.
409 Źródło wiedzy dotyczące plików osiągnęło limit liczby plików dla tej wersji interfejsu API. Usuń pliki przed przesłaniem kolejnych.
415 Usługa wykryła nieobsługiwany typ MIME lub wykryła obraz, gdy źródło wiedzy używa minimalnego wyodrębniania. Użyj obsługiwanego formatu. W przypadku obrazów użyj standardowej ekstrakcji. Zmiana tylko typu zawartości dostarczonego przez obiekt wywołujący nie zastępuje wykrywania.
429 Kolejka przetwarzania jest pełna. Użyj ograniczonej równoległości i ponawiaj próby z wykładniczo rosnącymi odstępami. Usługa nie gwarantuje nagłówka Retry-After.
504 Przetwarzanie przekroczyło 180 sekund podczas przekazywania lub aktualizowania pliku. Zmniejsz rozmiar pliku lub złożoność i spróbuj ponownie.