Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥

Azure AI SearchでAgentic Retreival

Avatar for takatori takatori
October 30, 2025
680

Azure AI SearchでAgentic Retreival

Search Engineering Tech Talk 2025 Autumnで発表した内容です
https://search-tech.connpass.com/event/370754/

Avatar for takatori

takatori

October 30, 2025
Tweet

Transcript

  1. © LayerX Inc. Azure AI SearchでAgentic Retreival 2025/10/30 LayerX Ai

    Workforce事業部 R&D(データ検索基盤)鷹取 敏志
  2. © LayerX Inc. 2 鷹取 敏志 • 2025/10よりLayerXで検索エンジニアとして働いています • 前職ではVespaを使っていた

    ◦ 検索エンジンをVespaへ移⾏しています - Speaker Deck • 福岡在住 • アカウント ◦ X: @takatorisatoshi ◦ Github: takatori ⾃⼰紹介
  3. ⽬次 Agenda • Agentic RAGについて • Azure AI Searchとは •

    実践: Agentic Retrieval • 所感とまとめ
  4. © LayerX Inc. 5 Agentic RAG 従来のRAGでは現実世界の複雑なクエリに対応できない場合がある RAGからAgentic RAGへ 従来のRAG

    Agentic RAG 検索 → 生成 計画 → 検索 → 生成 → 反省 → 再検索 単発の情報取得 状況に応じて再検索・修正 静的なフロー 動的なフロー
  5. © LayerX Inc. 7 Agentic RAG • 検索エンジニアとしてはやりがいがあるが... • 開発するものがたくさんある

    • 運⽤コストも⾼そう • そもそも、ビジネス的な価値を提供できるのか? 結構⼤変そう?🤔
  6. © LayerX Inc. 9 Azure AI Search • Microsoft が提供するクラウド型の検索基盤サービス

    • フルマネージドで、インフラ構築不要‧スケーラブルな検索環境を提供 • テキスト検索‧ベクトル検索‧ハイブリッド検索が可能 • semantic rerankerなどLLMをつかった機能も続々リリースされている Azure AI Searchとは
  7. © LayerX Inc. 13 実践: Agentic Retrieval • 以下のステップで構築 ◦

    indexの作成 ▪ フィールド定義 ▪ ベクトル検索定義 ▪ Semantic検索定義 ◦ indexerの作成 ▪ datastore定義 ▪ skillmaps定義 ▪ mapping定義 ◦ Knowledge Agentの作成 • データセットは JQaRA[https://github.com/hotchpotch/JQaRA]を利⽤させていただきました 実際にAzure AI SearchでAgentic Retrievalをやってみる
  8. © LayerX Inc. 15 実践: Agentic Retrieval フィールドの定義 Index作成 fields

    = [ SearchField(name="id", type="Edm.String", key=True, filterable=True, sortable=True), SearchField(name="raw_id", type="Edm.String", filterable=True, sortable=True), SearchField(name="title", type="Edm.String", searchable=True, analyzer_name=LexicalAnalyzerName.JA_LUCENE), SearchField(name="text", type="Edm.String", searchable=True, analyzer_name=LexicalAnalyzerName.JA_LUCENE), SearchField( name="text_vector", type="Collection(Edm.Single)", searchable=True, vector_search_dimensions=3072, vector_search_profile_name="aoai-hnsw", ), ]
  9. © LayerX Inc. 16 実践: Agentic Retrieval ベクトル検索設定 セマンティック検索設定 Index作成

    vector_search = VectorSearch( # アルゴリズムはHNSWかexhaustiveKNNを指定可能 algorithms=[HnswAlgorithmConfiguration(name="hnsw")], # クエリ時の自動ベクトル化 vectorizers=[ AzureOpenAIVectorizer( vectorizer_name="aoai-vectorizer", parameters=AzureOpenAIVectorizerParameters( resource_url=AOAI_ENDPOINT, deployment_name=AOAI_EMBEDDING_DEPLOYMENT, model_name="text-embedding-3-large"))], profiles=[ VectorSearchProfile( name="aoai-hnsw", algorithm_configuration_name="hnsw", vectorizer_name="aoai-vectorizer")] ) semantic_search = SemanticSearch( default_configuration_name="semantic_config", configurations=[ SemanticConfiguration( name="semantic_config", prioritized_fields=SemanticPrioritizedFields( title_field=SemanticField(field_name="title"), content_fields=[SemanticField(field_name="text")] ), ) ], )
  10. © LayerX Inc. 18 実践: Agentic Retrieval datastoreの定義 skillsetを登録 Indexer作成

    container = SearchIndexerDataContainer( name=BLOB_CONTAINER, query=BLOB_PREFIX, # "docs" 以下だけ取り込む。コンテナ全体なら None ) # データソースを作成 data_source = SearchIndexerDataSourceConnection( name=DATA_SOURCE_NAME, type=SearchIndexerDataSourceType.AZURE_BLOB, connection_string=AZURE_STORAGE_CONNECTION_STRING, container=container, description="JQaRA JSONs in Blob Storage", ) # indexerにデータソースを登録 indexer_client.create_or_update_data_source_connection(data_source) embedding_skill = AzureOpenAIEmbeddingSkill( context="/document", resource_url=AOAI_ENDPOINT, deployment_name=AOAI_EMBEDDING_DEPLOYMENT, model_name="text-embedding-3-large", dimensions=3072, inputs=[ InputFieldMappingEntry(name="text", source="/document/textt"), ], outputs=[ OutputFieldMappingEntry(name="embedding", target_name="text_vector") ]) skillset = SearchIndexerSkillset(name=SKILLSET_NAME,skills=[embedding_skill]) indexer_client.create_or_update_skillset(skillset)
  11. © LayerX Inc. 19 実践: Agentic Retrieval DatasourceのフィールドとSkillSetのアウトプットフィールドを検索エンジンのフィールドにマッピング Indexerの作成 indexer

    = SearchIndexer( name=INDEXER_NAME, data_source_name=DATA_SOURCE_NAME, target_index_name=INDEX_NAME, skillset_name=SKILLSET_NAME, field_mappings=[ FieldMapping(source_field_name="id", target_field_name="id"), FieldMapping(source_field_name="raw_id", target_field_name="raw_id"), FieldMapping(source_field_name="title", target_field_name="title"), FieldMapping(source_field_name="text", target_field_name="text"), ], output_field_mappings=[FieldMapping(source_field_name="/document/text_vector", target_field_name="text_vector")], parameters=IndexingParameters(configuration={"parsingMode": "jsonLines"}) ) indexer_client.create_or_update_indexer(indexer)
  12. © LayerX Inc. 21 実践: Agentic Retrieval Knowledge Agentの定義 Knowledge

    Agentの作成 # KnowledgeSource定義 ks = SearchIndexKnowledgeSource( name=KNOWLEDGE_SOURCE_NAME, search_index_parameters=SearchIndexKnowledgeSourceParameters(search_index_name=INDEX_NAME, source_data_select="id,raw_id,title,text"), ) index_client.create_or_update_knowledge_source(knowledge_source=ks, api_version=SEARCH_API_VERSION) # KnowledgeAgent定義 aoai_params = AzureOpenAIVectorizerParameters(resource_url=AOAI_ENDPOINT, deployment_name=AOAI_GPT_DEPLOYMENT, model_name="gpt-5-mini") output_cfg = KnowledgeAgentOutputConfiguration(modality=KnowledgeAgentOutputConfigurationModality.ANSWER_SYNTHESIS, include_activity=True) agent = KnowledgeAgent( name=KNOWLEDGE_AGENT_NAME, models=[KnowledgeAgentAzureOpenAIModel(azure_open_ai_parameters=aoai_params)], knowledge_sources=[KnowledgeSourceReference(name=KNOWLEDGE_SOURCE_NAME,reranker_threshold=2.5)], output_configuration=output_cfg, ) index_client.create_or_update_agent(agent, api_version=SEARCH_API_VERSION)
  13. © LayerX Inc. 22 実践: Agentic Retrieval Knowledge Agentへリクエストを送る 試してみる

    agent_client = KnowledgeAgentRetrievalClient(endpoint=SEARCH_ENDPOINT, agent_name=KNOWLEDGE_AGENT_NAME, credential=credential) query = """ 目の愛護デーは何月何日でしょう?また、耳の日は何月何日でしょう?その理由も教えてください。 When is the International Day of Nonviolence? さらに、それぞれの日に何をすれば良いか教えてください """ messages.append({"role": "user", "content": query}) req = KnowledgeAgentRetrievalRequest( messages=[KnowledgeAgentMessage( role=m["role"], content=[KnowledgeAgentMessageTextContent(text=m["content"])] ) for m in messages if m["role"] != "system"], knowledge_source_params=[SearchIndexKnowledgeSourceParams(knowledge_source_name=KNOWLEDGE_SOURCE_NAME, kind="searchIndex")], ) result = agent_client.retrieve(retrieval_request=req, api_version=SEARCH_API_VERSION)
  14. © LayerX Inc. 23 実践: Agentic Retrieval 結果 == Response

    == 目の愛護デーは毎年10月10日です。[ref_id:9][ref_id:0] 理 由は、数字の「10」を横に倒すと眉と目に見えることからと言 われています。[ref_id:0][ref_id:3] 当日は目の健康を維持するための各種啓発行事が行われ、 厚生労働省主催の活動や眼科医による早期受診の呼びかけ などが行われますので、定期検診や目の異常があれば早め に受診するなどの参加が推奨されます。[ref_id:0][ref_id:3] 耳の日は毎年3月3日です。[ref_id:2] 理由は「3」の字が耳の 形に似ていることと、「み(3)み(3)」の語呂合わせによるもので す。[ref_id:8][ref_id:2] 当日は耳や耳の病気への関心を高め、健康な耳への感謝や 良い音楽で耳を楽しませること、耳の不自由な人々への社会 的関心を高めるといった啓発や配慮を行うのが適切です。 [ref_id:8] 国際非暴力デーは毎年10月2日です。[ref_id:4][ref_id:15] これはマハトマ・ガンディーの誕生日に因んで(中略) == Activity == [{"id": 0,"type": "modelQueryPlanning", "elapsed_ms": 11455,"input_tokens": 2075,"output_tokens": 1189}, { "id": 1, "type": "searchIndex", "elapsed_ms": 1044, "query_time": "2025-10-26T08:03:18.165Z", "count": 5,"search_index_arguments": { "search": "目の愛護デー 日付 理由 当日にできること" }}, {"id": 2,"type": "searchIndex", "elapsed_ms": 1073, "query_time": "2025-10-26T08:03:19.239Z", "count": 4, "search_index_arguments": { "search": "耳の日 日付 理由 当日にできること"}}, {"id": 3, "type": "searchIndex", "elapsed_ms": 937, "query_time": "2025-10-26T08:03:20.176Z", "count": 9,"search_index_arguments": { "search": "International Day of Nonviolence date reason what to do on that day"}}, { "id": 4, "type": "semanticReranker","input_tokens": 21534 }, { "id": 5, "type": "modelAnswerSynthesis", "elapsed_ms": 14974,] == References == [ { "type": "searchIndex", "id": "0", "activity_source": 1, "reranker_score": 2.8578153, "doc_key": "QA20QBIK-1731_5495013" }, { "type": "searchIndex", "id": "3", "activity_source": 1, "reranker_score": 2.4909399, "doc_key": "QA20CAPR-1851_184480" }, ... ]
  15. © LayerX Inc. 25 Agentic RAG • Pros ◦ 設定だけでAgenticな検索が簡単に実現できる

    ◦ Microsoftの技術を活⽤できる ◦ AI関連の機能が続々リリースされていて今後も期待できる • Cons ◦ まだpublic preview ◦ あまりカスタマイズができない ◦ Azure⾃体の使い⽅を学ぶ必要がある(特にAzure Foundry) 所感
  16. © LayerX Inc. 26 Agentic RAG • RAGからAgentic RAGへ進化している •

    Agentic RAGシステムの構築‧運⽤はやることがたくさんある • Azure AI SearchのAgentic Retreivalで簡単に実現可能 まとめ
  17. © LayerX Inc. 28 • JQaRA: Japanese Question Answering with

    Retrieval Augmentation ◦ 検索拡張(RAG)評価のための⽇本語Q&Aデータセット ◦ 作者: Yuichi Tateno ◦ URL: https://huggingface.co/datasets/hotchpotch/JQaRA ◦ ライセンス: CC BY-SA 4.0 • 本スライドは上記データを改変して作成し、CC BY-SA 4.0のもとで公開します。 出典‧ライセンス