Gemini産DeepResearchのオープンソースをAzure OpenAIに置き換える方法
2025.06.19

目次
最近、GoogleがDeepResearchのオープンソースを公開しました。
この記事では、そのコードをAzure OpenAIで利用するための方法やメリット、修正箇所について解説します。
注意:本記事で紹介する「DeepResearch」は、GoogleがGitHub上で公開している google-gemini/gemini-fullstack-langgraph-quickstart プロジェクトを基にしています。一方、「DeepResearch」はOpenAIでも同名の機能として存在するため、混同にご注意ください。本記事ではGoogleのGitHubプロジェクトに基づき、Azure OpenAIへ移植する手順を解説しています。1. Azure OpenAIに移植するメリット
-
セキュリティと管理性の向上 Azure OpenAIは企業向けに設計されており、認証、ログ管理、アクセス制御などが充実しています。
-
コスト最適化 Azureの利用料金体系やリソース管理が柔軟で、利用状況に応じた最適化が可能です。
-
既存Azureサービスとの連携 Azure StorageやAzure Functionsなど、他のAzureサービスと連携しやすい点も大きなメリットです。
-
安定運用とサポート Microsoftのサポート体制が整っており、ビジネス用途でも安心して利用できます。
2. オープンソースとGoogle Geminiの違い
-
オープンソース版DeepResearch オープンソースとして公開されているDeepResearchは、基本的なリサーチエージェント機能やウェブ検索、ファイル解析、Python実行などの機能が備わっていますが、Google独自の拡張や最新モデル(Gemini)との連携機能は含まれていません。
-
Google Gemini版 実際にGoogleが運用しているDeepResearchは、Geminiモデルを活用した高度な推論や最新の情報収集、Google独自のサービス連携など、より強力な機能が実装されています。 オープンソース版はこれらの独自機能や最新モデルへのアクセスが制限されています。
3.Azure OpenAI用への主なコード修正点
ここではAzureOpenAIとして動かすまでに必要な修正箇所を要点に絞って解説します。 対象:gemini-fullstack-langgraph-quickstart-main/backend/src/agent 配下のPythonコード3-1. LLM(大規模言語モデル)の差し替え
graph.pyにあるGeminiで使っていたChatGoogleCenerativeAIを以下のように変更します。 元コード(Gemini版):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
from google.genai import Client from langchain_google_genai import ChatGoogleGenerativeAI if os.getenv("GEMINI_API_KEY") is None: raise ValueError("GEMINI_API_KEY is not set") ~~~~~ genai_client = Client(api_key=os.getenv("GEMINI_API_KEY")) ~~~~~ llm = ChatGoogleGenerativeAI( model=configurable.query_generator_model, temperature=1.0, max_retries=2, api_key=os.getenv("GEMINI_API_KEY"), ) |
1 2 3 4 5 6 7 8 9 10 11 12 |
from langchain_openai import AzureChatOpenAI ~~~~~ llm = AzureChatOpenAI( api_version=os.getenv("AZURE_OPENAI_API_VERSION"), azure_endpoint=os.getenv("AZURE_OPENAI_API_ENDPOINT"), api_key=os.getenv("AZURE_OPENAI_API_KEY"), azure_deployment=os.getenv("AZURE_OPENAI_MODEL"), temperature=1.0, ) |
3-2. Google Search → Bing Groundingエージェントへの切り替え
元のコードでは、GeminiとGoogle Search連携によるコンテンツ生成が行われています。これをAzureのBing検索エージェントで置き換えるには、エージェントの多段構成が有効です。エージェントの構築手順は以下URLを参考にしてください。
Azure AI Foundryに新機能「接続されたエージェント」登場 – 株式会社ディープコム
構成例:
1 2 3 4 5 6 7 |
呼び出し元エージェント ↓ 中間Bing検索エージェント ↓ Bing Groundingエージェント |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
project_client = AIProjectClient( credential=DefaultAzureCredential(), endpoint=os.getenv("AZURE_AI_PROJECT_URL")) agent = project_client.agents.get_agent(os.getenv("AZURE_AI_PROJECT_AGENT_ID")) thread = project_client.agents.threads.create() project_client.agents.messages.create( thread_id=thread.id, role="user", content=formatted_prompt ) run = project_client.agents.runs.create( thread_id=thread.id, agent_id=agent.id) # Poll the run as long as run status is queued or in progress while run.status in ["queued", "in_progress", "requires_action"]: # Wait for a second time.sleep(1) run = project_client.agents.runs.get(thread_id=thread.id, run_id=run.id) messages = project_client.agents.messages.list(thread_id=thread.id) |
1 2 3 4 5 6 7 8 9 10 |
message = "" annotations = [] for msg in messages: if msg.text_messages: last_text = msg.text_messages[-1] message = last_text.text.value annotations = last_text.text.annotations project_client.agents.threads.delete(thread.id) |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
sorted_annotations = sorted(annotations, key=lambda a: a['start_index'], reverse=True) for ann in sorted_annotations: start = ann['start_index'] end = ann['end_index'] display_text = ann['text'] url = ann['url_citation']['url'] # Markdownリンク形式に変換 linked_text = f"[{display_text}]({url})" # テキストを置換 message = message[:start] + linked_text + message[end:] |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
sources_gathered = [] for citation in annotations: # " " のような形式から label を抽出 segment = { "label": citation["url_citation"]["title"], "short_url": citation["url_citation"]["url"] } sources_gathered.append(segment) # "url_citation" を持つアノテーションだけ対象にして、URLを抽出 urls = [ann['url_citation']['url'] for ann in annotations if 'url_citation' in ann] sources_gathered |
1 2 3 4 5 6 7 |
return { "sources_gathered": sources_gathered, "search_query": [state["search_query"]], "web_research_result": [message], } |
4. 実行結果の例
LangChainではGPT-4o-mini、WebResearchで実行したAzureAIAgentではGPT-4oを使用しました。
まとめ
Googleが公開したDeepResearchオープンソースプロジェクトは、Azure OpenAIでも十分に活用できます。 Azureへの移植によって、以下の利点が得られます:- セキュリティ・コスト・運用性の向上
- Azureエコシステムとの親和性
- 商用利用への適応力の強化
- LLMの差し替え(Gemini → AzureChatOpenAI)
- Web検索処理の切り替え(Google Search → Bing Grounding)
- Web検索応答整形のロジック変更(Markdown・引用対応)
以上、最後までご愛読いただき
ありがとうございました。
お問い合わせは、
以下のフォームへご連絡ください。