1. 主要ページへ移動
  2. メニューへ移動
  3. ページ下へ移動

QES ブログ

記事公開日

【Azure AI Search】ファイル ナレッジ ソースでファイルを直接アップロードしてインデックスを作成する

  • このエントリーをはてなブックマークに追加

この記事のポイント

Azure AI Search に、ファイルを直接アップロードするだけでエージェント検索のグラウンドデータにできる「ファイル ナレッジ ソース(プレビュー)」が追加されています。本記事では、実際に試した結果を整理します。

  • ストレージアカウントもインデクサーも不要:PDFやWordなどのファイルを直接アップロードするだけで、抽出・チャンク化・埋め込み生成まで検索サービス側が自動で行います。
  • サーバーレス検索サービスでは使えない:ファイル ナレッジ ソースは専用モデルの検索サービスが前提で、サーバーレスモデルでは使用できません。
  • 小〜中規模のファイル集合が対象:1ファイルあたり最大50MB、1ナレッジソースあたり最大100ファイルという上限があります。大量データや既存のBlobストレージ資産がある場合はBlobナレッジソースの方が適しています。

今回は、Azure AI Search の「ファイル ナレッジ ソース」を試してみます。
※本機能は、2026/08時点でプレビュー機能として用意されており、その時点の仕様をもとに記載しています。

社内のちょっとしたマニュアルやFAQをAIエージェントに参照させたいとき、これまでは「Blob Storageを用意して、コンテナにアップロードして、インデクサーを組んで……」という一連の準備が必要でした。ファイル ナレッジ ソースは、この前段部分を丸ごと省略できるのが魅力です。

ファイル ナレッジ ソースとは

ファイル ナレッジ ソース(プレビュー)は、小規模〜中規模のファイル集合を、エージェント検索のために Azure AI Search へ直接アップロードできる機能です。

ナレッジ ソースは単体で作成され、ナレッジ ベースから参照されて、実行時にナレッジ ベースへクエリが実行される際のグラウンドデータとして使われます。ファイル ナレッジ ソースは、この「ナレッジ ソース」の一種で、Azure Storageのプロビジョニング・アクセス構成・外部コンテナー経由のインデクサー パイプライン構築の代わりに、マネージドなアップロード体験を提供します。アップロードされたファイルからのコンテンツ抽出・チャンク化・(必要に応じた)埋め込み生成は、すべてAzure AI Search側が担当します。

すでにコンテンツがAzure Blob StorageやADLS Gen2にある場合や、大規模な取り込み・ストレージアカウントの機能が必要な場合は、代わりにBlobナレッジ ソースを使う方が適しています。

前提条件と気をつけたいポイント

  • 専用モデルの検索サービスが必要:エージェント型取得を提供するリージョンにある、任意の専用モデルの検索サービスが必要です。ファイル ナレッジ ソースはサーバーレスモデルではサポートされていません。
  • 認証はキーレスを推奨:ナレッジ ソースを作成する権限として、ユーザーアカウントに割り当てた「Search Service 共同作成者」ロールによるキーレス認証(推奨)か、APIキーのいずれかが必要です。
  • 埋め込みモデル用の Azure OpenAIリソースが必要:埋め込みモデルをデプロイしたAzure OpenAIリソースが必要です。アクセスはAPIキーまたはマネージドID(要Cognitive Services User権限)のいずれかで行います。

対応形式と上限

ファイル ナレッジ ソースがサポートするファイル形式は次のとおりです。

カテゴリ 拡張子
テキスト .txt .md .html .json .csv
コード .c .cs .cpp .java .py .js .ts .php .rb .sh
ドキュメント .pdf .docx .pptx .doc


また、次の上限も適用されます。

項目 上限
1回のアップロードあたりの最大ファイルサイズ 50 MB
1つのファイル ナレッジ ソースあたりの最大ファイル数 100

アップロードされたコンテンツは生成された検索インデックスに格納されるため、価格レベルごとのストレージ上限にも影響します。ナレッジソース単位でファイル数の上限があるため、大量のファイルを扱う用途には向きません。

実践:C#でナレッジ ソースを作成し、ファイルをアップロードする

1. 既存のナレッジ ソースを確認する

ナレッジ ソースは最上位の再利用可能なオブジェクトです。新しく作る前に、既存のものを一覧確認しておくと名前の重複や再利用の判断がしやすくなります。

using Azure.Search.Documents.Indexes;

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

// 検索サービス内のナレッジソースを名前・種類つきで列挙する
await foreach (var source in indexClient.GetKnowledgeSourcesAsync())
{
    Console.WriteLine($"{source.Name} / {source.GetType().Name}");
}

 

2. ナレッジ ソースを作成する

アップロードしたコンテンツをベクター化するための埋め込みモデルを指定して、ファイル ナレッジ ソースを作成します。

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

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

// 埋め込みに使うAzure OpenAIデプロイの情報
var embeddingParams = new AzureOpenAIVectorizerParameters
{
    ResourceUri = new Uri(aoaiEndpoint),
    DeploymentName = aoaiEmbeddingDeployment,
    ModelName = aoaiEmbeddingModel
};

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

var fileKnowledgeSource = new FileKnowledgeSource(
    name: "<ナレッジソース名>",
    fileParameters: new FileKnowledgeSourceParameters { IngestionParameters = ingestionParams })
{
    Description = "<ナレッジソースの説明>"
};

await indexClient.CreateOrUpdateKnowledgeSourceAsync(fileKnowledgeSource);
Console.WriteLine($"ナレッジソース '{fileKnowledgeSource.Name}' を作成しました。");
ナレッジソースが作成できると、Azure Portal上で確認ができます。種類は「ファイル」となります。

Azure Portalから「ナレッジソースの追加」を新規作成しようとしても、「ファイルナレッジソース」は種類として選べません。(2026年8月時点) 

3. ファイルをアップロードする

ナレッジ ソースができたら、ファイルを直接アップロードします。アップロードは同期呼び出しで、抽出・チャンク化・埋め込み生成まで完了してから応答が返るため、別途インジェストパイプラインを組む必要はありません。

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

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

string fileName = "<ファイル名>";
byte[] fileBytes = await File.ReadAllBytesAsync(fileName);
string contentDisposition = $"attachment; filename=\"{fileName}\"";

var uploaded = (await indexClient.UploadKnowledgeSourceFileAsync(
    "<ナレッジソース名>",
    contentDisposition,
    BinaryData.FromBytes(fileBytes))).Value;

Console.WriteLine($"アップロード完了。File ID: {uploaded.FileId}");

 

Note

同じ fileName で再アップロードしても、既存のファイルは置き換わりません。アップロードのたびに新しい fileId を持つファイルが作成されるため、同名ファイルが複数残ることがあります。内容を更新したい場合は、古い fileId を明示的に削除してください。


4. アップロード済みファイルを一覧・削除する

ナレッジ ソース上のファイル一覧を確認し、不要になったファイルは個別に削除できます。

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

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

// アップロード済みファイルの一覧を確認
await foreach (var file in indexClient.GetKnowledgeSourceFilesAsync("<ナレッジソース名>"))
{
    Console.WriteLine($"{file.FileName} ({file.FileSizeBytes} bytes) error={file.ErrorMessage}");
}

// 不要になったファイルを削除
await indexClient.DeleteKnowledgeSourceFileAsync("<ナレッジソース名>", "<ファイルID>");

 

errorMessagenull であれば処理は成功しています。サポート対象外の形式や抽出エラー、モデルへのアクセス不可、クォータ超過などがあると、ここにエラー内容が入ります。

生成されたインデックスの中身を覗いてみる

ファイル ナレッジ ソースは、アップロードしたファイルのコンテンツ抽出・チャンク化・埋め込み生成の結果を、内部的に生成される検索インデックスに格納します。この生成されたインデックス自体は、ナレッジ ソース専用の管理画面はなくても、Azure Portalの通常の「インデックス」画面や検索エクスプローラーから中身を確認できます。

ナレッジソース名 + [-index] の名前でインデックスが生成されています。
テキストが格納される [snippet] ですが、既定でアナライザーが  [standard.lucene] になっていました。
日本語を検索する場合は、日本語系アナライザーに変更した方が良さそうです。ただし、インデックスの既存フィールドに設定された analyzer は後から変更できないため、変更するには次の手順が必要です。
  1. 生成されたインデックスのJSON定義をコピーする
  2. そのインデックスを一度削除する
  3. コピーしたJSONの analyzer 部分だけを日本語アナライザー(ja.lucene や ja.microsoft など)に書き換える
  4. 同じ名前で、書き換えたJSON定義をもとにインデックスを再作成する

実際にアップロードしたファイルがどう取り込まれているかを見てみると、おおむね次のような構成のドキュメントが生成されていることが確認できます。

  • チャンク単位のドキュメント:1ファイルがまるごと1件になるのではなく、内容がいくつかのチャンクに分割され、チャンクごとに1検索ドキュメントとして格納されます。
  • チャンクを一意に識別するキー [uid]:チャンクIDにあたるフィールドが主キーとして割り当てられます。
  • 元ファイルを指す参照 [snippet_parent_id または、metadata_storage_path(以下の画面キャプチャでは表示を省略)]:どのアップロード元ファイルから生成されたチャンクかを示す、親ドキュメント側の参照が保持されます。
  • 本文テキスト [snippet]と 埋め込みベクター[snippet_vector]:抽出された本文(可読なテキスト)と、埋め込みモデルを指定していた場合はそのベクター表現の両方が格納されます。

検索エクスプローラーで実際にクエリを投げてみると、アップロードした資料の該当する部分だけが返ってくることを確認できます。「ファイルをアップロードしたら、裏側ではこの粒度まで分解されて検索対象になっている」ことが視覚的にわかると、ナレッジ ベース側の RetrievalInstructionsmaxOutputDocuments のチューニングもイメージしやすくなります。

Note

生成されたインデックスの名前やフィールド構成は、ナレッジ ソースの内部実装として自動的に決まるものです。今後のアップデートで変わる可能性があるため、フィールド名を直接前提にしたコードを書くよりは、ナレッジ ベース経由の取得アクションやMCPエンドポイントを介して利用する使い方を基本に考えておくのが無難です。

ナレッジ ソースを削除する

検証が終わったナレッジ ソースは、次のコードで削除できます。

using Azure.Search.Documents.Indexes;

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

await indexClient.DeleteKnowledgeSourceAsync("<ナレッジソース名>");
Console.WriteLine("ナレッジソースを削除しました。");

 

Note

ファイル ナレッジ ソースは、既存のインデックスを指定して作成するオプションがなく、常にアップロード専用のインデックスを自動生成する仕組みです。そのため、ナレッジ ソースを削除すると、裏側で自動生成されたインデックスも必ずあわせて削除されます。ナレッジ ソース単体で完結する分、後片付けは楽ですが、逆に言えば「インデックスだけ残しておく」ことはできません。

なお、前のセクションで日本語アナライザーに変更するために手動で作り直したインデックスについてもナレッジソースの削除と連動して削除されることを確認しました。

Foundry ポータルからの操作

ここまでは、APIでナレッジソースの作成、ファイル登録を行ってきました。Azure ポータルは未対応ですが、Foundry ポータルからの操作は可能です。
Foundry ポータルからは、ナレッジソースのみの作成はできず、ナレッジベースの作成が必要になります。

1. ナレッジベースの作成

(1) Foundry ポータルから作成する場合は、「ビルド」(作成)メニューを選択し、「ナレッジ」を選択する。


(2) ナレッジベースタブを選択し、使用するAI Search リソースに接続する。


(3) ナレッジベースの作成をクリックする。


(4) 基本構成で必要な項目を入力し、ナレッジソース欄の「ファイルのアップロード」をクリックする。


(5) ナレッジソースの各項目を入力し、ナレッジとなるファイルをアップロードして、「作成」をクリックする。


(6) 「ナレッジベースの保存」をクリックし、作成を完了させる。


2. ナレッジベースの動作確認

ナレッジベースは、Azure ポータルで動作確認できます。
アップロードしたファイルは、ナレッジソース(ファイル)に登録されています。


ナレッジベースも登録されていることを確認できます。


ナレッジベースをクリックすると、ナレッジ検索のテストができます。 ナレッジベース作成時に出力モードを「抽出データ」とすると、検索したデータ(生データ)が得られます。プログラムからデータを取得して、後続処理につなげる場合に使用できます。


出力モードを「応答の合成」とすると、応答を組み合わせた自然言語での回答が得られます。簡易的なQAボットであれば、このナレッジ検索だけで完結させることができます。


3. 作成されたインデックスの確認

Foundry ポータルから作成したナレッジソースも APIで作成したものと同様の形で作成されています。


よくある質問(FAQ)

Q. ファイル ナレッジ ソースとBlobナレッジ ソース、どちらを使うべきですか?

数十〜100ファイル程度で、ストレージアカウントの準備自体を省略したい場合はファイル ナレッジ ソースが手軽です。一方、すでにAzure Blob StorageやADLS Gen2にコンテンツがある場合や、より大規模な取り込み・ストレージ機能が必要な場合はBlobナレッジ ソースの方が適しています。

Q. サーバーレスモデルの検索サービスでも使えますか?

いいえ。ファイル ナレッジ ソースは専用モデルの検索サービスが前提で、サーバーレスモデルはサポートされていません。この機能を試す場合は、Free・Basic・Standardなど専用モデルのサービスを用意してください。

Q. 同じファイル名で再アップロードすれば内容を更新できますか?

できません。アップロードのたびに新しい fileId を持つ別ファイルとして扱われるため、同名のファイルが複数残ります。内容を更新したい場合は、新しいファイルをアップロードする前後に、古い fileId を明示的に削除する必要があります。

まとめ

今回は、Azure AI Search の「ファイル ナレッジ ソース」について、概要と前提条件の整理から、C#での作成・アップロード・一覧・削除までの一連の流れを紹介しました。

  • ストレージ構築の手間を省ける:PDFやWordなどのファイルを直接アップロードするだけで、抽出からチャンク化・埋め込み生成までを検索サービスが完結させます。
  • サーバーレスとは組み合わせられない:専用モデルの検索サービスが前提のため、サーバーレスで検証を進めている場合は環境を分けて考える必要があります。
  • 小〜中規模のファイル集合に向く機能:最大100ファイル・1ファイル50MBという上限があるため、大規模な取り込みにはBlobナレッジ ソースを検討します。

社内マニュアルやFAQ集など、まとまった数のファイルをまずはさくっとエージェント検索に載せてみたい、というシーンでは有力な選択肢になりそうです。プレビュー機能のため、今後のAPIや制限事項の変更にも注目していきたいと思います。

QUICK E-Solutionsでは、AIを活用した業務効率化・システム導入のお手伝いをしております。
それ以外でも様々なアプリケーションの開発・導入を行っております。提供するサービス・ソリューションにつきましては こちら に掲載しております。
システム開発・構築でお困りの問題や弊社が提供するサービス・ソリューションにご興味を抱かれましたら、ぜひ一度 お問い合わせ ください。

※このブログで参照されている、Microsoft、Azure、Azure AI Search、Microsoft Learn、C#は、米国Microsoft Corporationの米国およびその他の国における商標または登録商標です。

  • このエントリーをはてなブックマークに追加

お問い合わせ

Contact

ご質問やご相談、サービスに関する詳細など、何でもお気軽にご連絡ください。下記のお問い合わせフォームよりお気軽に送信ください。

お問い合わせ

資料ダウンロード

Download

当社のサービスに関する詳細情報を掲載した資料を、下記のページよりダウンロードいただけます。より深く理解していただける内容となっております。ぜひご活用ください。

資料ダウンロード