Microsoft Build 2025で追加されたAzure AI SearchのPreview機能、Agentic Searchのメモ。
Agentic SearchはAzure AI Search単体でユーザー入力・会話履歴をもとにインデックスから検索・結果を結合して返すエージェント的な検索動作を行える機能です。
エージェンティック検索 – Azure AI Search | Microsoft Learn より引用
よくあるRAGでは、これまでの会話などからキーワードを抽出してベクター検索して回答の根拠を複数取得したあと結合して最終的な回答を返すわけですが、この機能はその大部分をAzure AI Searchが担ってくれるようになります。
Azure AI SearchはAgentic Searchという新しいクエリーパイプラインでこの機能を提供します。ストアドみたいな感じです。
各サブクエリーはセマンティック構成に従いリランクもしてくれます。
Agentic Searchの登録
現状はREST APIかPreview版のAzure AI Searchのパッケージを使って登録・削除などの操作を行います。登録する際に対象検索インデックスに関する情報(Previewだと1つ)、パイプライン内(Agentic Search内)で使用するLLMの情報を渡して登録します。(C#だと CreateOrUpdateKnowledgeAgentAsync() )
注意点としては対象インデックスに埋め込み用のLLMの情報などベクター検索関連の情報があること、セマンティック構成の設定が追加されていること、セマンティック構成の既定値が設定されていること、あたりでしょうか。
特にセマンティック構成の既定値はAzureポータルから登録したり、インデックスの構成を編集したりすると消えてしまったり登録されないので注意が必要です。
対象の検索インデックスの SemanticSearch.DefaultConfigurationName プロパティに追加しているセマンティック構成の名称を指定しておきましょう。(JSONだと semantic の defaultConfiguration プロパティ)
現状、登録されたAgentic Searchの情報はAPIからしか見れないので注意しましょう。
使い方
このあたりを参考に:ナレッジ エージェントを使用してデータを取得する – Azure AI Search | Microsoft Learn
検索インデックスの作成から含めてチュートリアルはこちら
- Quickstart: Agentic Retrieval Using Python or REST APIs – Azure AI Search | Microsoft Learn
- 【Build 2025 速報】Azure AI Search が Agentic retrieval を実装しマネージド Agentic RAG が可能に ほか #OpenAI – Qiita
C#だと簡単に言えば登録したAgentic Searchの名前を指定して KnowledgeAgentRetrievalClient のインスタンスを生成、RetriveAsync() メソッドで検索を実行するだけですね。
RetriveAsync() の結果としてResponses、Activity、Referencesが得られるので根拠となる情報が不要ならResponsesの内容にまとめられた結果のテキストを使って、最終的なユーザーへの回答をLLMなりで整形して出せばOKです。
根拠となるドキュメントはResponses内で紐づけられたIDで Referencesにあるのでそちらを使います。
基本的にドキュメントのIDしか入ってませんが他の情報が必要ならAgentic Search 登録時やクエリー時で指定する KnowledgeAgentTargetIndex の DefaultIncludeReferenceSourceData プロパティ を true にすれば SourceData 辞書に含まれるようになります。(セマンティック構成で指定したフィールドが入るっぽい?)
チュートリアルは長々と書いてるのでぱっとみ分かりづらいかもしれませんが、 RetrieveAsync() 呼べば回答を一発で得られるので全体としてはすごく簡単になると思います。
あと注意点としてはAgentic Searchの呼び出しが管理者キーを必要としていることでしょうか、、、(Previewだけかもしれませんが)
エンドユーザーから直接呼ばせるのは避けたほうがいいかもしれません。
※C#のコードでAPIキー利用の場合だとQueryキーだと403になる
コストなど
ドキュメントにもありますが、サブクエリ毎にセマンティックリランカーのコスト、ベクター埋め込みのコスト、LLMのコストが追加でかかります。取得するチャンク(ドキュメント)の数など注意しないとAgentic Searchの1回のコストが結構いきそうです。
まとめ
これまでユーザー入力と履歴をもとにした検索ワードの生成、ベクター埋め込み、複数検索、結果の結合といった一連の処理を自前で行うことが普通でしたがこの機能を使うことで簡単にRAGの実装できそうですね。