OpenDeepResearchをAPIとして利用する
はじめに
2025年2月3日、OpenAIはChatGPTの新機能として「Deep Research」をリリースしました。この機能は、ユーザーが指定したトピックに関して、ウェブ上の情報を自律的に収集・分析し、詳細なレポートを生成するエージェント型のツールです。
その後、他の主要なAIベンダーも同様の機能を発表しています。例えば、2024年12月11日、Googleは新しいAIリサーチツール「Gemini Deep Research」をリリースしました。このツールは、ユーザーの質問に基づいて自律的にリサーチ計画を立案し、ウェブ上の膨大な情報源から必要なデータを収集・分析し、詳細なレポートを提供するものです。さらに、2025年1月15日には、Gemini Deep Researchの日本語対応が発表され、日本のユーザーも利用可能となりました。
最近では「Deep Research」という用語が広く一般的に使用されるようになりました。一般的な言葉として定着してきた感があります。
Deep ResearchをAPIとして使いたい
現時点で、Deep ResearchはAPIとしての提供は行われていません。APIとして利用できれば、業務範囲が広がり、以下のような活用が期待できると考えています。
- カレンダー連携:スケジュール管理と組み合わせて、会議前の迅速な情報収集や資料作成が可能となります。
- 業務アプリとの統合:既存の業務システムと連携し、必要な情報を自動で取得・解析することで、業務効率の向上が期待できます。
近い未来ではOpenAIやGoogleなどからAPIの提供開始も期待されますが、現時点ではAPIとして利用ができないため自作したいと思います。
OpenDeepResearchについて
このようなニーズに応える形で、LangChainはOSS版のDeepResearchである「OpenDeepResearch」を提供しています。この仕組みは、調べたいトピックを指定するとDeepResearchと同様のレポートを作成してくれます。
OpenDeepResearchを活用することで、Deep Researchのような高度なリサーチ機能をAPI化し、独自のシステムやアプリケーションに組み込むことができそうです。この技術を利用してDeepResearchのAPIを構築してみましょう。
早速API化してみる
Deep Researchの機能を自作でAPI化するために、LangChainが提供するオープンソースのアシスタント「OpenDeepResearch」を参考に構築を行いました。
具体的には、リポジトリ内のgraph.ipynbに記載されている内容をベースに開発を進め、APIの構築にはFastAPIを利用しています。
実装内容
今回作成したAPIのソースコードについて概要を解説します。
main.py
は、FastAPIを利用して構築されたAPIのエントリポイントとなるファイルです。このファイルでは、/run_search
というHTTPエンドポイントが作成されています。このエンドポイントは、トピック(topic
)と追加の調査指示(resume_command
)という2つのクエリパラメータを受け取ります。これらのパラメータを受け取ると、内部的にはgraph.py
で定義された非同期関数run_graph
が呼び出され、実際のDeep Research処理が実行されます。一連の処理が完了すると、指定したトピックに関するリサーチレポートがレスポンスとしてユーザーに返される仕組みです。
import asyncio
from fastapi import FastAPI
from graph import run_graph
app = FastAPI()
@app.get("/run_search")
async def root(topic: str = "日本の自転車製造業界の現状",
resume_command: str = "自転車の市場規模の大きさや最近注目されている領域についても調べて"):
# graph.pyのrun_graph関数を直接実行(非同期関数なのでawaitする)
report = await run_graph(topic=topic, resume_command=resume_command)
# 処理完了後のレスポンス
return {"message": f"トピック「{topic}」のリサーチが完了しました。", "report": report}
続いてgraph.pyについてです。graph.py
は、OpenDeepResearchのJupyter Notebook (graph.ipynb
) に記載されているロジックをPythonスクリプト化したファイルで、実際にDeep Researchのリサーチ処理を実行するコア機能を提供します。
- 具体的なリサーチの流れは以下の通りです:
- 入力されたトピックに基づいて、自動でリサーチ計画(調査範囲やレポートの構造)を作成します。
- 作成された計画に基づき、ウェブ検索やデータ収集を実行します(ここでは検索APIとして
tavily
を利用)。 - 調査途中で追加指示(
resume_command
)を受け取り、リサーチの方向性や範囲を適宜修正しつつ進めます。Notebookでは対話的に利用することができますが、今回は検証でありワンクリックで実行できるようにしたかったため、実行時に渡す仕様にしています。(resume_commandの良い使い方についてはまだ理解できていない・・・・) - 最終的に取得した情報をもとにレポートを作成し、その内容をMarkdown形式で保存します。
- 作成されたレポート内容は最終的に
main.py
に戻され、APIのレスポンスとして提供されます。
import asyncio
import json
import uuid
from pathlib import Path
import open_deep_research
from IPython.display import Image, Markdown, display
from langgraph.checkpoint.memory import MemorySaver
from langgraph.types import Command
from open_deep_research.graph import builder
memory = MemorySaver()
graph = builder.compile(checkpointer=memory)
from dotenv import load_dotenv
load_dotenv()
REPORT_STRUCTURE = """Use this structure to create a report on the user-provided topic:
always make the report in Japanese.
1. Introduction (no research needed)
- Brief overview of the topic area
2. Main Body Sections:
- Each section should focus on a sub-topic of the user-provided topic
3. Conclusion
- Aim for 1 structural element (either a list or table) that distills the main body sections
- Provide a concise summary of the report"""
thread = {
"configurable": {
"thread_id": str(uuid.uuid4()),
"search_api": "tavily",
"planner_provider": "openai",
"planner_model": "o3-mini",
"writer_provider": "anthropic",
"writer_model": "claude-3-5-sonnet-latest",
"max_search_depth": 1,
"report_structure": REPORT_STRUCTURE,
}
}
async def run_graph(topic, resume_command):
# Notebook Cell 6: 非同期ストリーミング処理でグラフの実行(途中の中断表示をMarkdownで出力)
print("グラフ実行開始(ストリーミング処理中)...")
async for event in graph.astream({"topic": topic}, thread, stream_mode="updates"):
if '__interrupt__' in event:
# NotebookではIPython.display.Markdownを利用して表示していました
interrupt_value = event['__interrupt__'][0].value
print("Interrupt event:", interrupt_value)
# Notebook Cell 7: フィードバックを渡して報告書プランを更新
print("報告書プランの更新中...")
async for event in graph.astream(Command(resume=resume_command), thread, stream_mode="updates"):
if '__interrupt__' in event:
# NotebookではMarkdown表示していました
print("Feedback applied.")
# Notebook Cell 8: 報告書プランの承認
print("報告書プランの承認中...")
async for event in graph.astream(Command(resume=True), thread, stream_mode="updates"):
print("Event:", event)
# Notebook Cell 9: 最終状態の取得と報告書の表示
final_state = graph.get_state(thread)
report = final_state.values.get('final_report')
output_path = Path("final_report.md")
with open(output_path, "w", encoding="utf-8") as f:
f.write("# 最終報告書\n\n")
f.write(report)
print(f"最終報告書を {output_path} に保存しました。")
return report
出力のサンプル
実行結果として作成されたレポートは以下のようになります。参照元のWebページ情報が記載されているため、ファクトチェックが簡単にできるのが嬉しいですね!
出力されたレポート全文
最終報告書
日本の自転車製造業界の現状
日本の自転車製造業界は、グローバル化と技術革新の波の中で大きな転換期を迎えています。国内生産は縮小傾向にある一方で、電動アシスト自転車を中心とした高付加価値製品や高精度部品製造において、日本企業は世界をリードする存在として確固たる地位を築いています。
本報告書では、市場動向、技術革新、主要企業の競争状況を分析し、日本の自転車製造業界が直面する課題と機会を明らかにします。特に、環境意識の高まりや高齢化社会への対応など、社会変化に伴う新たな展開に注目して検証を行います。
市場概況と生産動態
日本の自転車市場は、2024年の国内出荷台数が前年比0.1%増の508万台を記録しています。しかし、国内生産比率は13.2%と低く、大部分を輸入に依存している状況です[1]。
国内生産は2024年に前年比6.2%減の67万台、金額ベースでは3.8%減の595億円となりました。注目すべきは電動アシスト自転車で、国内生産の81.4%を占め、54.5万台(前年比5.5%減)を生産しています[1]。
自転車市場は2011年の1055万台をピークに、保有台数の飽和により減少傾向にあります。新型コロナ禍では"密"を避ける移動手段として需要が高まりましたが、近年は原材料高による値上げで需要が鈍化しています[1]。
生産面では、多くの自転車メーカーが中国を生産拠点として活用する一方、商社経由で中国製の低価格自転車が流通しています。ただし、高精度な自転車部品では日本メーカーが依然として高い国際競争力を保持しています[1]。
Sources
[1] 自転車・関連製品・部品業界 市場規模・動向や企業情報 | Nikkei Compass - 日本経済新聞: https://www.nikkei.com/compass/industry_s/0302
技術革新と製品動向
電動アシスト自転車市場は、環境意識の高まりと技術革新により着実な成長を遂げており、2024年から2032年にかけて年平均5.35%の成長が予測されています[1]。
技術開発の最前線では、AIを活用したオートマチック7段変速機能が注目を集めています。この技術は、ペダルトルク、回転数、速度、路面状況を自動で検知し、最適なギアを選択します[2]。また、自動車部品メーカーの参入も活発化しており、ジヤトコは自動車で培ったギア技術を活かし、モーターと3段変速機構を一体化した革新的なドライブユニットを開発中です[3]。
さらに、ボッシュが日本市場に参入を果たし、独自のモーター、バッテリー、ディスプレーを統合したシステムを展開[4]。一方、ヤマハ発動機は電動アシスト技術を車いすなど新領域へ応用展開しており[5]、シマノは独自の電動変速システム「Di2」と内装変速システム「Nexus」を組み合わせた製品を提供しています[6]。
Sources
[1] 日本の電動アシスト自転車市場:推進タイプ別(ペダルアシスト、スピードペダル、スロットルアシスト)、用途別2024年~2032年: https://www.marketreport.jp/insight/japan-e-bike-market-report-imarc/
[2] 外部充電不要の電動アシスト自転車も! 急速に進化する自転車の最新テック: https://www.bcnretail.com/market/detail/20241101_465254.html
[3] ジヤトコ、電動アシスト自転車ビジネスの事業領域拡大を発表: https://www.jatco.co.jp/release/2025/20250326_1866.html
[4] 世界最大の自動車部品メーカー、電動自転車用システムで日本参入: https://newswitch.jp/p/10041
[5] 自転車から始まった電動アシスト技術を新領域へ、ヤマ発が新方針: https://monoist.itmedia.co.jp/mn/articles/2411/01/news090.html
[6] 主な電動アシスト自転車のユニット製造メーカーまとめ: https://www.ebikenavi.com/topics/3a31txs582/
競争環境と企業事例
自転車・関連製品・部品業界において、日本企業は独自のポジションを確立しています。国内の自転車生産は縮小傾向にありますが、高精度な部品製造では世界をリードする企業が存在します[1]。
特に株式会社シマノは、変速機やブレーキなどの部品で世界シェア8割を占める圧倒的な存在感を示しています[2]。ロードバイク部品市場では、シマノはイタリアのカンパーニョロ、米国のSRAMと共に世界市場のほとんどを占めています[3]。
電動アシスト自転車市場では、ブリヂストンサイクル、ミヤタサイクル、パナソニックサイクルテック、丸石サイクルなどが競争を展開しています。ヤマハ発動機は子育て世代や高齢者向けに新製品を投入し、欧州でも部品生産を開始するなど、グローバル展開を強化しています[1]。
日本の電動自転車市場は今後も成長が見込まれ、2029年までに年平均成長率12.56%で拡大すると予測されています[4]。
Sources
[1] 自転車・関連製品・部品業界 市場規模・動向や企業情報: https://www.nikkei.com/compass/industry_s/0302
[2] スポーツバイク部品で世界1位!株式会社シマノの海外進出の: https://www.provej.jp/column/st/shimano/
[3] 激変する自転車部品業界でシマノを襲う二つの波: https://bizgate.nikkei.com/article/DGXMZO3305731017072018000000
[4] 日本 E-自転車市場の規模とシェア分析: https://www.mordorintelligence.com/ja/industry-reports/japan-e-bike-market
結論
日本の自転車製造業界は、国内生産の縮小と輸入依存という構造的課題に直面する一方で、技術革新と高付加価値化により新たな成長機会を見出しています。
分野 | 現状 | 今後の展望 |
---|---|---|
国内生産 | 全体の13.2%、67万台/年 | 高付加価値製品へ特化 |
電動アシスト | 国内生産の81.4%を占める | 年率5.35%で成長予測 |
部品製造 | シマノが世界シェア8割 | AI活用など技術革新加速 |
競争環境 | 中国製品との価格競争 | 異業種からの参入増加 |
今後の展望として、電動アシスト自転車を軸とした成長戦略の推進、AIやIoTを活用した製品開発の加速、そして自動車部品メーカーなど異業種との協業による新たな価値創造が期待されます。日本企業は、高精度部品製造やシステム開発での強みを活かし、グローバル市場でのプレゼンス維持・拡大を目指すべき段階にあります。
今後に向けて
今回の取り組みで、Deep Research的な体験をAPI化することができました。次のステップとしてはGoogleカレンダーとの連携などを試してみたいと考えています。MTG情報から顧客名を自動的に特定し、その情報をもとに事前リサーチを行ってくれるような体験が構築できれば活用の幅も広がりそうですね。
ハルシネーションが発生しないかなど気になる点もありますが、検証してみたいと思います。
最後に宣伝
Solvio株式会社は、生成AIを軸に企業の課題解決を行う会社です。これまでの支援の中でもHumanが行っていた業務を生成AIエージェントに置き換えて、業務効率を高めた事例もあります。少人数のチームであるためリソースに限りはありますが、生成AIを活用して業務改善を行いたい企業の方がいらっしゃればお気軽にご連絡いただけると幸いです!
お問い合わせページ:
Discussion