Note
Azure AI 検索は、Azure ポータル、REST API、およびAzure SDKから使用できます。 また、Foundry IQ は、エンタープライズ コンテンツを、Microsoft Foundry ポータルのエージェントの再利用可能なアクセス許可に対応したナレッジ ベースに変換するマネージド ナレッジ レイヤーです。
Important
機能、またはマークされたプロパティ (プレビュー) は、サービス レベル アグリーメントの対象ではなく、運用環境のワークロードには推奨されず、一般公開される前に変更または制約される可能性があります。 Azure AI 検索 プレビューの用語は、スタンドアロンでも一般公開されている機能の一部でも、すべてのプレビュー機能に適用されます。
ファイル ナレッジ ソース (プレビュー) では、小規模から中規模のファイル セットをエージェント型検索のために Azure AI 検索 に直接アップロードします。 ナレッジ ソース は個別に作成され、 ナレッジ ベースで参照され、実行時にナレッジ ベースの クエリが実行されるときに、グラウンド データとして使用されます。
ファイル ナレッジ ソースは、Azure Storageのプロビジョニング、アクセスの構成、外部コンテナー経由でのインデクサー パイプラインの作成の代わりに、マネージド アップロード エクスペリエンスが必要な場合に便利です。 Azure AI 検索は、抽出されたコンテンツをナレッジ ベースから取得できるように、アップロードされたファイルを処理します。
ファイルが既にAzure Blob StorageまたはAzure Data Lake Storage Gen2にある場合、ファイル セットがファイル ナレッジ ソースの制限を超えている、または超過する可能性がある場合、またはスケジュールされたインジェストが必要な場合は、代わりに BLOB ナレッジ ソースを使用します。 また、Azure Blob Storage ライフサイクル管理ポリシーを使用してソース BLOB を管理する場合や、Azure Storageのアクセス許可に基づいてドキュメント レベルのアクセス許可 (プレビュー) が必要な場合にも、BLOB ナレッジ ソースを使用します。
使用サポート
| Azure Portal | Microsoft Foundry ポータル | .NET SDK | Python SDK | Java SDK | JavaScript SDK | REST API |
|---|---|---|---|---|---|---|
| ❌ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
Prerequisites
エージェント検索を提供する任意のリージョンの Azure AI 検索 サービス。 ファイルナレッジソースは、専用価格モデルとサーバーレス価格モデルの両方をサポートします。 モデルとレベルの詳細については、「 価格モデルとサービス レベルの選択」を参照してください。
Azure AI 検索 のコストを確認する。 モデル呼び出し、ベクター化、その他の AI 処理では、個別の料金が発生する可能性があります。
サーバーレスでは、ファイル インジェスト操作が成功すると、課金対象のコンピューティングが消費されます。 失敗したアップロードでは、サーバーレス コンピューティング料金は発生しません。
毎月の無料許容量を超える有料エージェント検索が必要な場合は、 標準のエージェント検索プランを有効にします。
knowledgeRetrieval=standard設定は、サーバーレス コンピューティングとストレージの料金とは別であり、価格モデルは選択されません。サポートされている形式のファイル。
ナレッジソースを作成する権限。 ユーザー アカウントに割り当てられた Search Service 共同作成者ロール (推奨) を使用してキーレス認証を構成するか、管理者 API キーを使用します。
ナレッジ ソースが埋め込み用の Azure OpenAI モデルを指定する場合、検索サービスには、Microsoft Foundry リソースに対する 管理 IDCognitive Services User アクセス許可が必要です。
- Foundry リソースでパブリック ネットワーク アクセスが無効になっている場合は、検索サービスから Foundry リソースへの
foundry_account共有プライベート リンクを作成し、信頼されたサービス リスト設定でリソースの [Azure サービスを許可する] 設定を有効のままにします。
- Foundry リソースでパブリック ネットワーク アクセスが無効になっている場合は、検索サービスから Foundry リソースへの
ナレッジ ソースで
standardコンテンツ抽出モードが指定されている場合は、Azure Content Understanding スキルの要件を確認します。
最新の
Azure.Search.Documentsプレビュー パッケージ:dotnet add package Azure.Search.Documents --prereleaseキーレス認証の場合、
Azure.Identityパッケージは次のようになります。dotnet add package Azure.Identity
最新の
azure-search-documentsプレビュー パッケージ:pip install --pre azure-search-documentsキーレス認証の場合、
azure-identityパッケージは次のようになります。pip install azure-identity
Search Service REST API の 2026-08-01-preview バージョン。
キーレス認証の場合は、各 HTTP 要求の
AuthorizationヘッダーにMicrosoft Entra ID トークンを含めます。
ファイルのサポートと制限
ファイルナレッジソースを作成する前に、ファイルのアップロード、抽出、管理に影響する要件と制限を確認してください。
サポートされているコンテンツ タイプ
ファイルナレッジソースは、検出されたコンテンツタイプに基づいてファイルを受け入れます。 呼び出し元が指定したコンテンツ タイプは、検出をオーバーライドしません。
サポートされているコンテンツ タイプは次のとおりです。
- Word (
.doc、.docx) - PowerPoint (
.ppt、.pptx) - Excel (
.xls、.xlsx) - JSON
- シェル スクリプト
-
.md、.html、text/*、.csvなど、.txtとして検出されたコンテンツ
サポートされている抽出モード
一覧表示されているコンテンツ タイプでは、
2026-05-01-previewと2026-08-01-previewの両方でminimalがサポートされます。standardは、2026-08-01-previewでのみ使用できます。image/*として検出されたコンテンツは、2026-05-01-previewではサポートされていません。2026-08-01-previewでは、standard抽出を使用します。minimal抽出では、両方のバージョンで HTTP 状態415が返されます。
制限とファイル操作
制限とサポートされるファイル操作は、API のバージョンによって異なります。
| 能力 | 2026-05-01-preview |
2026-08-01-preview |
|---|---|---|
| ナレッジソースあたりの最大ファイル数 | 100 | 200 |
| ファイルの最大サイズ | サポートされているすべての価格レベルで 50 MB | Free および Basic では 50 MB。サポートされている他の専用レベルとサーバーレスで 100 MB |
| 処理期間 | アップロードは最大 180 秒間実行できます | アップロードと更新は最大 180 秒間実行できます |
| コンテンツとメタデータをアップロードする | 未加工ファイルの内容 | 生のファイル コンテンツ、またはメタデータ付きのマルチパート コンテンツ |
| アップロードされたファイルを一覧表示する | ファイルを一覧表示する | パスまたはファイル名でフィルター処理し、より豊富なファイルの詳細を返す |
| 既存のファイル の内容を置き換える | 削除して再アップロードする | 更新操作を使用する |
| ファイル操作へのブラウザー アクセス | CORS は使用できません | CORS を構成する |
Note
- 生成された検索インデックスには、アップロードされたコンテンツが格納されます。 価格レベル別のストレージ制限の合計については、「 サービスの制限」を参照してください。
- アップロードされたコンテンツをチャンクまたはベクター化するようにファイル ナレッジ ソースを構成する場合は、モデルとダウンストリームの処理の制限も適用されます。
既存のナレッジ ソースを確認する
ナレッジ ソースは、最上位の再利用可能なオブジェクトです。 既存のナレッジ ソースについて知ることは、新しいオブジェクトを再利用または名前付けする場合に役立ちます。
次のコードを実行して、名前と種類でナレッジ ソースを一覧表示します。
// 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}}
リファレンス:ナレッジ ソース - リスト
名前で 1 つのナレッジ ソースを返して、その 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}}
リファレンス:ナレッジ ソース - 取得
次の JSON は、ファイル ナレッジ ソースに対する応答の例です。
{
"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"
}
}
}
}
}
ナレッジ ソースを作成する
アップロードされたコンテンツのベクター化に使用する埋め込みモデルを指定するファイル ナレッジ ソースを作成します。
各ファイル ナレッジ ソースはインデックスを作成しますが、インデクサーやスケジュールは作成しません。
fileParameters.ingestionParameters オブジェクトを含める必要があります。 サービスは、 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"
}
}
}
リファレンス:ナレッジ ソース - 作成または更新
標準抽出を構成する
2026-08-01-preview API バージョン以降、standard抽出では Content Understanding を使用して、アップロードされたファイルを抽出、意味的にチャンク、エンリッチします。 Azure AI 検索はナレッジ ソースの一部としてこの処理を管理し、Content Understanding の料金は個別に適用されます。
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}}"
}
}
}
}
リファレンス:ナレッジ ソース - 作成または更新
ファイル操作用の CORS
ブラウザベースのファイル操作を許可するには、アプリケーション用の信頼済みオリジンと最大プリフライトキャッシュ期間を指定して、corsOptions をファイルナレッジソースに設定します。
Important
2026-08-01-preview API バージョンでは、corsOptionsは、抽出モードとは別に、ファイルのアップロード、一覧表示、更新、および削除エンドポイントに適用されます。
corsOptionsを省略した場合、ファイル ナレッジ ソースにはブラウザーのクロスオリジン ポリシーはありません。 CORS は要求を承認しません。 配信元を有効にすると、ブラウザー コンテキストでサービス操作とデータが公開され、セキュリティ リスクが発生する可能性があります。 信頼できる配信元のみを指定し、運用環境ではワイルドカードの配信元を使用しないでください。 ブラウザーからの要求には、必要最小限のロールを使用して Microsoft Entra トークン認証を使用します。 ブラウザー コードでアクセス トークンやサービス キーを公開しないでください。
ファイルをアップロードする
ナレッジ ソースを作成したら、ファイルを直接アップロードします。 各アップロードは同期呼び出しです。Azure AI 検索コンテンツを抽出し、チャンクし、必要に応じ埋め込みを作成し、チャンクのインデックスを作成し、呼び出しが返される前にファイル メタデータを保持します。 個別のインジェスト パイプラインを構成または実行する必要はありません。
ファイルのアップロードと管理に関連するエラーのヘルプについては、「 ファイル操作のトラブルシューティング」を参照してください。
生ファイルをアップロードする
未加工のアップロードの場合、一覧表示されている fileName は Content-Disposition: attachment; filename="..." ヘッダーから取得されます。 REST 呼び出しと .NET SDK は、このヘッダーを直接設定しますが、Python SDK は filename パラメーターを受け取り、ヘッダーを自動的にビルドします。 ファイル名を指定しない場合、サービスは自動生成された fileNameを割り当てます。
ファイル名には、 manuals/installation-guide.pdfなどの相対パスを含めることができます。 このサービスは、バックスラッシュをフォワードスラッシュに正規化します。 絶対パス、空のパス セグメント、 . または .. セグメント、コロンを含むセグメント、および 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}");
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}")
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>
リファレンス:ナレッジ ソース - ファイルのアップロード
オプションのメタデータを含むファイルをアップロードする
2026-08-01-preview API バージョン以降では、マルチパート要求を使用して、オプションのカスタム メタデータを含む 1 つのバイナリ ファイルをアップロードします。 要求には、1 つの content 部分と省略可能な JSON metadata 部分が含まれます。
両方の名前を指定した場合、 metadata.fileName は content 部分のファイル名よりも優先されます。 どちらも指定されていない場合、サービスは自動生成されたファイル名を割り当てます。
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}");
リファレンス: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}")
リファレンス: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--
リファレンス:ナレッジ ソース - ファイルのアップロード
Note
同じ fileNameを再利用しても、ファイルをアップロードしても既存のファイルは置き換えられません。 アップロードが成功するたびに、独自の fileIdを持つ新しいファイルが作成されるため、アップロードされたファイルの一覧には、 fileNameを共有する複数のエントリを含めることができます。
2026-05-01-previewでは、前のファイルを削除し、置換をアップロードして、コンテンツを置き換えます。
2026-08-01-previewでは、更新操作を使用します。
アップロードされたファイルを一覧表示する
ナレッジ ソース上のファイルを一覧表示して、アップロードされたファイル セットを検査します。
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}");
}
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}")
GET {{search-endpoint}}/knowledgesources/my-file-ks/files?api-version=2026-08-01-preview
Authorization: Bearer {{search-access-token}}
リファレンス:ナレッジ ソース - リスト ファイル
応答には、アップロードされた各ファイルのメタデータが含まれます。 正常に一覧表示されたファイルのnullの値はerrorMessageです。
{
"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
}
]
}
新しいアップロードが失敗した場合、要求はエラーを返し、ファイル メタデータ レコードは作成しません。 失敗したアップロードは、後の一覧の結果には表示されず、課金されません。
モデル アクセス エラーが発生し、埋め込みモデルをホストする Foundry リソースがプライベート ネットワークを使用している場合は、共有プライベート リンク foundry_account が承認され、信頼されたサービスバイパスが有効になっていることを確認します。 無効なバイパスは 403 Public access is disabledを返します。 セットアップの詳細については、「 前提条件」を参照してください。
ファイルの一覧表示とフィルター処理
2026-08-01-preview API バージョン以降では、prefixを使用して相対パスでファイルをフィルター処理するか、ファイル名プレフィックスでフィルター処理するsearchを使用します。 結果の数を制御するには、 pageSize を設定します。
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})");
}
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})")
GET {{search-endpoint}}/knowledgesources('my-file-ks')/files?api-version=2026-08-01-preview&prefix=manuals/&pageSize=100
Authorization: Bearer {{search-access-token}}
リファレンス:ナレッジ ソース - リスト ファイル
応答には、サービスによって選択された解析モードと抽出モード、およびファイル管理用のユーザー メタデータが含まれます。 ユーザー メタデータは検索またはフィルター処理できません。
{
"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>"
}
すべての結果を取得するには、@odata.nextLink が存在しなくなるまでそれをたどってください。 クエリ パラメーターを変更せずに、返されたとおりに完全な URL を送信します。
アップロードしたファイルを更新する
2026-08-01-preview API バージョン以降では、fileIdでファイルを更新します。 マルチパート要求には、バイナリ content 部分が必要です。 メタデータ JSON 部分は省略可能であるため、コンテンツのみの更新がサポートされます。 メタデータのみの更新はサポートされていません。
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}");
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}")
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--
リファレンス:ナレッジ ソース - ファイルの更新
更新が失敗した場合、前のメタデータ レコードは残ります。 更新によってインデックス付きコンテンツがトランザクションによって変更されるとは想定しないでください。
アップロードしたファイルを削除する
取得可能でなくなったファイルをナレッジ ソースから削除します。
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");
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")
DELETE {{search-endpoint}}/knowledgesources/my-file-ks/files/file-abc123?api-version=2026-08-01-preview
Authorization: Bearer {{search-access-token}}
リファレンス:ナレッジ ソース - ファイルの削除
ナレッジ ベースに割り当てる
ナレッジ ソースに満足している場合は、 ナレッジ ベースに追加します。
ナレッジ ベースのクエリを実行する
ナレッジ ベースが構成されたら、 取得アクションまたは MCP エンドポイントを呼び出 してナレッジ ソースにクエリを実行します。
ナレッジ ソースを削除する
ナレッジ ソースを削除する前に、ナレッジ ソースを参照するすべてのナレッジ ベースを削除するか、ナレッジ ベース定義を更新して参照を削除する必要があります。 インデックスとインデクサー パイプラインを生成するナレッジ ソースの場合、 生成されたすべてのオブジェクト も削除されます。 ただし、既存のインデックスを使用してナレッジ ソースを作成した場合、インデックスは削除されません。
使用中のナレッジ ソースを削除しようとすると、アクションは失敗し、影響を受けるナレッジ ベースの一覧が返されます。
ナレッジ ソースを削除するには:
検索サービスのすべてのナレッジ ベースの一覧を取得します。
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
応答の例は次のようになります。
{ "@odata.context": "https://my-search-service.search.windows.net/$metadata#knowledgebases(name)", "value": [ { "name": "my-kb" }, { "name": "my-kb-2" } ] }個別のナレッジベース定義を取得して、ナレッジソースの参照を確認する。
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
応答の例は次のようになります。
{ "Name": "earth-knowledge-base", "KnowledgeSources": [ { "Name": "earth-knowledge-source" } ], "Models": [ {} ], "RetrievalReasoningEffort": {}, "OutputMode": {}, "ETag": "\u00220x8DE278629D782B3\u0022", "EncryptionKey": null, "Description": null, "RetrievalInstructions": null, "AnswerInstructions": null }ナレッジ ベースを削除するか、複数のナレッジ ソースがある場合は、ナレッジ ベースを更新してソースを削除します。 この例では、削除を示します。
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
ナレッジ ソースを削除します。
await indexClient.DeleteKnowledgeSourceAsync(knowledgeSourceName); System.Console.WriteLine($"Knowledge source '{knowledgeSourceName}' deleted successfully.");Reference:SearchIndexClient
検索サービスのすべてのナレッジ ベースの一覧を取得します。
# 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
応答の例は次のようになります。
{ "@odata.context": "https://my-search-service.search.windows.net/$metadata#knowledgebases(name)", "value": [ { "name": "my-kb" }, { "name": "my-kb-2" } ] }個別のナレッジベース定義を取得して、ナレッジソースの参照を確認する。
# 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
応答の例は次のようになります。
{ "name": "my-kb", "description": null, "retrievalInstructions": null, "answerInstructions": null, "outputMode": null, "knowledgeSources": [ { "name": "my-blob-ks" } ], "models": [], "encryptionKey": null, "retrievalReasoningEffort": { "kind": "low" } }ナレッジ ベースを削除するか、複数のナレッジ ソースがある場合は、ナレッジ ベースを更新してソースを削除します。 この例では、削除を示します。
# 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
ナレッジ ソースを削除します。
# 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
検索サービスのすべてのナレッジ ベースの一覧を取得します。
### Get knowledge bases GET {{search-url}}/knowledgebases?api-version={{api-version}}&$select=name Authorization: Bearer {{token}}リファレンス:ナレッジ ベース - リスト
応答の例は次のようになります。
{ "@odata.context": "https://my-search-service.search.windows.net/$metadata#knowledgebases(name)", "value": [ { "name": "my-kb" }, { "name": "my-kb-2" } ] }個別のナレッジベース定義を取得して、ナレッジソースの参照を確認する。
### Get a knowledge base definition GET {{search-url}}/knowledgebases/{{knowledge-base-name}}?api-version={{api-version}} Authorization: Bearer {{token}}リファレンス:ナレッジ ベース - 取得
応答の例は次のようになります。
{ "name": "my-kb", "description": null, "retrievalInstructions": null, "answerInstructions": null, "outputMode": null, "knowledgeSources": [ { "name": "my-blob-ks" } ], "models": [], "encryptionKey": null, "retrievalReasoningEffort": { "kind": "low" } }ナレッジ ベースを削除するか、複数のナレッジ ソースがある場合は、ナレッジ ベースを更新してソースを削除します。 この例では、削除を示します。
### Delete a knowledge base DELETE {{search-url}}/knowledgebases/{{knowledge-base-name}}?api-version={{api-version}} Authorization: Bearer {{token}}リファレンス:ナレッジ ベース - 削除
ナレッジ ソースを削除します。
### Delete a knowledge source DELETE {{search-url}}/knowledgesources/{{knowledge-source-name}}?api-version={{api-version}} Authorization: Bearer {{token}}リファレンス:ナレッジ ソース - 削除
ファイル操作のトラブルシューティング
次の状態コードは、ファイル ナレッジ ソースの操作に固有です。
| ステータスコード | 原因とアクション |
|---|---|
400 |
ファイルが空であるか、抽出可能なテキストが含まれていないか、安全でない相対パスを含んでいるか、または無効な継続リクエストです。 ファイルがサポートされ、読み取り可能なコンテンツと有効なファイル名を確認します。 リスト操作の場合は、返されたとおりに @odata.nextLink に従います。
$skiptokenをsearchやpageSizeと組み合わせないでください。 |
409 |
ファイル ナレッジ ソースが API バージョンのファイル制限に達しました。 さらにアップロードする前にファイルを削除します。 |
415 |
サポートされていない MIME の種類が検出されたか、ナレッジ ソースが最小限の抽出を使用している間に画像が検出されました。 サポートされている形式を使用します。 画像の場合は、標準の抽出を使用します。 呼び出し元が指定したコンテンツ タイプのみを変更しても、検出はオーバーライドされません。 |
429 |
処理キューがいっぱいです。 境界並列処理を使用し、指数バックオフで再試行します。 このサービスでは、 Retry-After ヘッダーは保証されません。 |
504 |
ファイルのアップロードまたは更新中に処理が 180 秒を超えました。 ファイル サイズまたは複雑さを減らして、もう一度やり直してください。 |