自律型AIエージェント(Autonomous Agents)の最大の強みは、与えられた複雑な目標を細分化されたサブタスクへと自動分解し、試行錯誤しながら反復実行できる点にあります。しかし、エージェントを大規模言語モデル(LLM)の静的な学習データだけに依存させておくと、最新の製品価格、リアルタイムの技術ドキュメント、直近のニュースなどを調査することができません。オープンソースのブラウザ型エージェント基盤「AgentGPT」において、実用的な自律リサーチ環境を構築するには、Web検索APIの接続とWebページ解析ツールの拡張が不可欠です。
検索ツールが未設定のAgentGPTはモデル内の古い記憶から推測するしかなく、ハルシネーション(もっともらしい嘘)を引き起こしやすくなります。一方で、検索APIとブラウジング連携を正しく構成すれば、エージェントは自ら検索クエリを生成し、Google検索のリアルタイム結果を取得して、外部サイトのコンテンツを精査した上で構造化レポートを作成できるようになります。本記事では、クラウド環境およびDockerローカル環境でのSerper API設定手順、バックエンド拡張によるWebページ本文抽出ツールの組み込み方、そしてタスク逸脱(Task Drift)を防ぐプロンプト設計を詳しく解説します。
1. AgentGPTが外部Webと接続する基本アーキテクチャ
AgentGPTは、「思考(Think)- 計画(Plan)- 実行(Act)- 評価(Evaluate)」の再帰ループによって動作します。例えば「2026年時点の主要ベクトルデータベースの最新価格体系を調査する」といった課題を与えられると、エージェントは内部メモリ上でタスクを順次生成します。
外部の最新情報を必要とするタスクを実行する際、AgentGPTはPythonバックエンド(platform/reworkd_platform/web/api/agent/tools/)内に用意されたツールレイヤーを呼び出します。この内部実装にはLangChainのツール抽象化基盤が活用されています。
なぜSerper APIが標準採用されているのか
検索エンジンのHTMLを直接スクレイピングする手法は、CAPTCHA(人間検証)や頻繁なDOM構造変更により容易に停止してしまいます。そのため、AgentGPTは高速なGoogle検索APIサービスである Serper(serper.dev)を標準で推奨・採用しています。Serperには以下の利点があります:
- 構造化されたJSONレスポンス:オーガニック検索のスニペット、ページタイトル、URL、ナレッジグラフ情報のみを抽出し、無駄なHTMLコードを排除して返却します。
- Token消費の大幅な削減:プレーンな概要データのみをLLMに渡すため、コンテキストウィンドウの枯渇を防ぎます。
- 安定した耐スクレイピング処理:API側でプロキシ管理やCAPTCHA回避を行うため、エージェントの反復検索がブロックされません。
2. 検索APIの設定手順:クラウド版とセルフホスト版
Web検索機能の有効化は、クラウド版(ホスト環境)を利用するか、ローカル環境でDockerを用いてセルフホストするかによって設定方法が異なります。
方法A:Web UI(クラウド版:agentgpt.reworkd.ai)
- APIキーの発行:
- Serper でアカウントを作成し、APIキーを取得します(無料枠で2,500クエリが提供されます)。
- OpenAIのダッシュボードからAPIキーを用意します。
- 設定画面を開く:画面左側のサイドバーにある**設定(Settings)**アイコンをクリックします。
- モデルとAPIキーの入力:
- Model には
GPT-4またはgpt-4oを選択することを強く推奨します。GPT-3.5に比べ、上位モデルの方が「どのような検索キーワードを発行し、どの結果を引用すべきか」を正確に判断できます。 - OpenAI API Key を入力します。
- Serper API Key 欄に取得したキーを貼り付けます。
- Model には
- ループ制限(Loop Limit)の設定:実行上限回数を5〜15回程度に設定します。これにより、十分な調査深度を確保しながら、無限ループによるAPI利用料の高騰を防ぎます。
方法B:セルフホスト(Dockerローカル環境)
自社サーバーやローカルPC上で動作させる場合の手順です:
- リポジトリのクローン:
git clone https://github.com/reworkd/AgentGPT.git cd AgentGPT - 環境変数ファイルの作成:
プロジェクトルートにあるテンプレートファイルをコピーします:
cp .env.example .env - キーと実行制限の記述:
.envファイルを開き、以下の重要項目を設定します:# LLM認証 OPENAI_API_KEY=sk-your-openai-api-key-here # Web検索連携 SERPER_API_KEY=your-serper-api-key-here # エージェント最大反復回数 NEXT_PUBLIC_MAX_LOOPS=15 REWORKD_PLATFORM_MAX_LOOPS=15 - コンテナのビルドと起動:
付属のセットアップスクリプトまたはDocker Composeを実行します:
コンテナが起動したら、ブラウザで./setup.sh # または手動で起動: docker compose up --buildhttp://localhost:3000にアクセスします。FastAPIで構築されたバックエンド(ポート8000)が環境変数からSERPER_API_KEYを自動的に読み込み、検索ツール(search.py)にマウントします。
3. 発展:フルページブラウジングとスクレイピング機能の拡張
標準設定のSerper APIが返す検索スニペットは、通常100〜200文字程度です。APIの詳細仕様、ベンチマーク数値表、論文の本文などを詳しく検証する必要がある場合、スニペット情報だけでは不十分です。
検索スニペットと本文ブラウジングの違い
- 検索(Search):どのURLに目的の情報が存在するかを広範に特定する段階。
- ブラウジング(Browsing):特定したURLに実際にアクセスし、詳細な本文や仕様を読み込む段階。
カスタムブラウジングツールの実装パターン
AgentGPTのバックエンドツールディレクトリ(platform/reworkd_platform/web/api/agent/tools/)に独自のスクレイピングツールを追加することで、より深い調査が可能になります。
実装時に考慮すべき重要ポイント:
- 不要タグの除去:ヘッダー、ナビゲーション、フッター、広告スクリプトを削除し、本文のみを抽出する(
BeautifulSoupやtrafilaturaの活用)。 - Markdown変換:見出し構造やテーブル形式を保ちながらプレーンなMarkdownに変換する。
- トークン数の制限(トランケーション):長大なHTMLによってLLMのコンテキストウィンドウが溢れないよう、抽出文字数を一定量(例:3,000〜4,000文字)に制限する。
Pythonによる簡易ブラウジングツールの実装例:
from pydantic import BaseModel, Field
import httpx
from bs4 import BeautifulSoup
class BrowseInput(BaseModel):
url: str = Field(..., description="アクセスして本文を読み込む対象のHTTPS URL")
async def browse_page(url: str) -> str:
headers = {"User-Agent": "AgentGPT-ResearchBot/1.0"}
async with httpx.AsyncClient(timeout=10.0, follow_redirects=True) as client:
response = await client.get(url, headers=headers)
if response.status_code != 200:
return f"エラー: HTTPステータス {response.status_code} が返されました。"
soup = BeautifulSoup(response.text, "html.parser")
# 本文以外の要素を削除
for tag in soup(["script", "style", "nav", "footer", "header", "aside"]):
tag.decompose()
text = soup.get_text(separator="\n", strip=True)
# トークン消費を抑えるため先頭4000文字を返却
return text[:4000]
このツールを search.py と併せて登録することで、「SerperでURLを特定」→「ブラウジングツールで本文を精読」→「総合レポートを出力」という高精度なリサーチパイプラインが完成します。
4. 構造化プロンプト設計:タスク逸脱(Task Drift)の防止
自律型エージェント運用で最も頻発するトラブルが**タスク逸脱(Task Drift)**です。エージェントが些細な枝葉の検索クエリを生成し続けたり、同じサイトを何度も検証して無限ループに陥ったりします。これを防ぐには、制約条件を明記した初期ゴールプロンプトの設定が不可欠です。
優れたリサーチプロンプトの構成要素
- 調査対象の明確化:具体的なツール名、バージョン、比較項目を明記する。
- 時間軸の指定:「2026年現在の公開情報」など、対象期間を明確にする。
- 情報源の限定:公式サイト、公式ドキュメント、GitHubリポジトリを優先するよう指示する。
- 出力フォーマットの指定:Markdownの比較表や箇条書きでまとめるよう指定する。
実践プロンプトのサンプル
エージェント名: クラウドアーキテクチャ調査員
目標: Pinecone、Qdrant Cloud、Weaviate Cloud のベクトル検索課金モデルを横断比較調査する。
1. Web検索を使用し、2026年時点の最新無料枠、Serverless読み書き単価、月額クラスター費用を収集してください。
2. 各サービスのストレージ容量およびクエリユニット(Read/Write Units)の計算ロジックを確認してください。
3. 必要な情報を収集したら追加のタスク生成を停止し、結果をMarkdown比較表にまとめ、各サービスの公式URLを記載してください。
このゴールを与えられたAgentGPTは、無駄なタスクを増殖させることなく、以下の順序で着実に実行します:
タスク1:Pineconeの2026年Serverless価格体系とCU単価を検索。タスク2:Qdrant Cloudのノード費用とストレージ課金ルールを検索。タスク3:Weaviate Cloudのインスタンス料金とサポート階層を検索。タスク4:収集結果を比較し、Markdownテーブルを出力して完了。
5. トラブルシューティングと技術的留意点
| 症状 | 主な原因 | 対処方法 |
|---|---|---|
検索実行時に 403 Forbidden エラー | SERPER_API_KEY の未設定、誤字、または無料クレジットの枯渇。 | .env 内のキーに余計な引用符やスペースがないか確認。serper.dev 管理画面で残高を確認。 |
| 検索が無限ループして終わらない | 終了条件の指定漏れ、または最大ループ数が未設定。 | 設定画面または .env で MAX_LOOPS を10〜15に制限。「3サイト確認後に要約」とプロンプトに明記。 |
| 検索結果の誤読やハルシネーション | 推論能力の低いモデル(GPT-3.5など)によるJSONパースの失敗。 | エージェントの基盤モデルを GPT-4 や上位モデルに変更。 |
Docker環境で .env の変更が反映されない | コンテナ再作成時に古いイメージやキャッシュが使用されている。 | docker compose down && docker compose up --build で再ビルドを実行。 |
プロジェクトのメンテナンス状況について
開発元のReworkd社は2026年1月に reworkd/AgentGPT リポジトリをアーカイブ(読み取り専用化)し、現在はエンタープライズ向けのWebデータスクレイピング基盤事業にリソースを集中しています。AgentGPT自体への新規機能追加は停止していますが、ブラウザ上で動作する自律エージェントの代表的アーキテクチャとしての学習価値は依然として高いままです。商用環境で同様のシステムを新規構築する場合は、本構成の設計思想を参考にしつつ、LangGraph や CrewAI といった最新フレームワークへ移行し、スクレイピング層に Firecrawl などを組み合わせる構成が推奨されます。