Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Azure AI SearchでAgentic Retreival

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
Avatar for takatori takatori
October 30, 2025
790

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のもとで公開します。 出典‧ライセンス