Alibaba-NLP/WebAgent

⭐ 2,982 🍴 203 Python📄 MIT License GitHubで見る →

主な特徴

  • **段階的進化アーキテクチャ**:ベンチマーク→自律検索→高度推論の3段階構成
  • **最先端性能**:GAIA、BrowseComp等の難関ベンチマークでSOTA達成
  • **完全な学習パイプライン**:データ構築から強化学習まで4段階の訓練手法
  • **マルチエージェントメモリ管理**:長文脈Web探索のための革新的アプローチ
  • **ReActフレームワーク**:Thought→Action→Observationサイクルによる構造化推論
  • **新規アルゴリズム**:DUPO(Duplicating Sampling Policy Optimization)によるRL効率化
  • **実用的なツール統合**:Google Search、Jina APIなど実サービスとの連携

リポジトリ解析: Alibaba-NLP/WebAgent

基本情報

  • リポジトリ名: Alibaba-NLP/WebAgent
  • 主要言語: Python
  • スター数: 2,982
  • フォーク数: 203
  • 最終更新: 2025年(活発に開発中)
  • ライセンス: MIT License
  • トピックス: web-agent, information-seeking, autonomous-agent, llm, web-traversal, reinforcement-learning

概要

一言で言うと

AlibabaのTongyi Labが開発した、Web情報検索のための先進的なエージェントフレームワーク。ベンチマーク(WebWalker)、自律検索エージェント(WebDancer)、高度推論エージェント(WebSailor)の3つの進化的コンポーネントで構成される。

詳細説明

WebAgentは、複雑なWeb情報検索タスクを解決するための包括的なフレームワークです。プロジェクトは段階的に進化する3つのコンポーネントから構成されています:

  1. WebWalker:LLMのWeb探索能力をベンチマークするフレームワークとデータセット
  2. WebDancer:自律的な情報検索を行うネイティブエージェント型検索推論モデル
  3. WebSailor:極めて複雑なタスクに対応する最先端の推論エージェント

これらのコンポーネントは、単なるプロンプトベースのアプローチから、強化学習を活用した自律的なエージェントシステムへと進化しており、オープンソースでありながら商用システムに匹敵する性能を達成しています。

主な特徴

  • 段階的進化アーキテクチャ:ベンチマーク→自律検索→高度推論の3段階構成
  • 最先端性能:GAIA、BrowseComp等の難関ベンチマークでSOTA達成
  • 完全な学習パイプライン:データ構築から強化学習まで4段階の訓練手法
  • マルチエージェントメモリ管理:長文脈Web探索のための革新的アプローチ
  • ReActフレームワーク:Thought→Action→Observationサイクルによる構造化推論
  • 新規アルゴリズム:DUPO(Duplicating Sampling Policy Optimization)によるRL効率化
  • 実用的なツール統合:Google Search、Jina APIなど実サービスとの連携

使用方法

インストール

前提条件

  • Python 3.12以上
  • CUDA対応GPU(モデル実行用)
  • API キー:Google Search(Serper/SerpAPI)、Jina API、Dashscope API

インストール手順

# 方法1: リポジトリのクローンと環境構築
git clone https://github.com/Alibaba-NLP/WebAgent.git
cd WebAgent/WebDancer

# Conda環境の作成
conda create -n webdancer python=3.12
conda activate webdancer
pip install -r requirements.txt

# 方法2: モデルのダウンロード(HuggingFaceから)
# WebDancer-QwQ-32Bモデルをダウンロード
git lfs clone https://huggingface.co/Alibaba-NLP/WebDancer-32B

基本的な使い方

Hello World相当の例

# WebWalkerを使った基本的なWeb検索タスク
from webwalker.agent import WebWalkerAgent
from webwalker.tools import GoogleSearchTool, JinaReaderTool

# エージェントの初期化
agent = WebWalkerAgent(
    llm_config={
        "model": "qwen-plus",
        "api_key": "YOUR_DASHSCOPE_API_KEY"
    },
    tools=[
        GoogleSearchTool(api_key="YOUR_SERPER_API_KEY"),
        JinaReaderTool(api_key="YOUR_JINA_API_KEY")
    ]
)

# 簡単な質問に回答
response = agent.run(
    "What is the latest version of Python?"
)
print(response)

実践的な使用例

# WebDancerデモの起動例
import os
from demos.gui.web_ui import create_demo
from demos.agents.search_agent import SearchAgent

# 環境変数の設定
os.environ["GOOGLE_SEARCH_KEY"] = "YOUR_SERPER_API_KEY"
os.environ["JINA_API_KEY"] = "YOUR_JINA_API_KEY"
os.environ["DASHSCOPE_API_KEY"] = "YOUR_DASHSCOPE_API_KEY"

# エージェントの初期化
agent = SearchAgent(
    model_endpoint="http://localhost:30000/v1",
    model_name="WebDancer-32B",
    temperature=0.7,
    max_steps=15,
    parallel_search=True
)

# Gradioデモの起動
demo = create_demo(agent)
demo.launch(server_name="0.0.0.0", server_port=7860)

高度な使い方

# WebSailorの複雑なタスク実行例(概念的コード)
from websailor.agent import WebSailorAgent
from websailor.tools import MultiThreadSearchTool
from websailor.memory import LongContextMemory

# 高度な設定でエージェントを初期化
agent = WebSailorAgent(
    model_config={
        "model": "websailor-72b",
        "endpoint": "http://localhost:30000/v1",
        "temperature": 0.7,
        "max_tokens": 4096
    },
    tools=[
        MultiThreadSearchTool(
            max_threads=5,
            search_apis=["serper", "serpapi"],
            retry_attempts=3
        )
    ],
    memory=LongContextMemory(
        max_context_length=32768,
        compression_ratio=0.3
    ),
    reasoning_config={
        "use_dupo": True,  # DUPOアルゴリズムを使用
        "exploration_rate": 0.2,
        "max_thinking_steps": 10
    }
)

# 複雑な多段階タスクの実行
complex_query = """
Find and compare the latest research papers on quantum computing 
applications in drug discovery from the top 3 conferences in 2024, 
summarize their key findings, and identify potential commercial applications.
"""

# ストリーミングレスポンスで実行
for chunk in agent.run_streaming(complex_query):
    print(chunk.content, end="", flush=True)
    
# 実行履歴とメトリクスの取得
history = agent.get_execution_history()
metrics = agent.get_performance_metrics()
print(f"\n\nSteps taken: {metrics['total_steps']}")
print(f"Searches performed: {metrics['search_count']}")
print(f"Pages visited: {metrics['pages_visited']}")

ドキュメント・リソース

公式ドキュメント

  • README.md: プロジェクト全体の概要とクイックスタート
  • WebWalker/README.md: ベンチマークフレームワークの詳細
  • WebDancer/readme.md: 自律エージェントの実装詳細
  • WebSailor/README.md: 高度推論エージェントの説明

サンプル・デモ

  • WebDancer/demos/: インタラクティブなGradioデモ
    • search_agent.py: 検索エージェントの実装
    • web_ui.py: Webインターフェース
  • WebWalker/src/app.py: Streamlitベースのベンチマークアプリ
  • dataset/: サンプルデータセット
    • sailorfog-QA.jsonl: 高難度QAサンプル
    • sample_qa.jsonl: 基本的なQAサンプル

チュートリアル・ガイド

  • モデルデプロイメントガイド(scripts/deploy_model.sh)
  • デモ実行ガイド(scripts/run_demo.sh)
  • 論文(arXiv):実装の理論的背景

技術的詳細

アーキテクチャ

全体構造

WebAgentは、段階的に複雑性が増す3層アーキテクチャを採用:

  1. 基盤層(WebWalker):評価とベンチマーク
  2. 実行層(WebDancer):自律的なタスク実行
  3. 推論層(WebSailor):高度な思考と探索

各層は独立して動作可能でありながら、上位層は下位層の機能を活用する設計。

ディレクトリ構成

WebAgent/
├── WebWalker/              # ベンチマークフレームワーク
│   ├── src/
│   │   ├── agent.py       # 基本エージェント実装
│   │   ├── app.py         # Streamlitアプリ
│   │   ├── evaluate.py    # 評価システム
│   │   └── utils.py       # ユーティリティ
│   └── README.md
├── WebDancer/             # 自律検索エージェント
│   ├── demos/            # デモアプリケーション
│   │   ├── agents/      # エージェント実装
│   │   ├── gui/         # UIコンポーネント
│   │   ├── llm/         # LLM統合
│   │   └── tools/       # ツール実装
│   ├── datasets/        # 訓練・評価データ
│   └── scripts/         # デプロイスクリプト
├── WebSailor/           # 高度推論エージェント
│   ├── dataset/         # SailorFog-QAデータセット
│   └── assets/          # ドキュメント資料
└── assets/              # 共通リソース

主要コンポーネント

  • ReActエージェント: 思考・行動・観察のサイクル実装

    • 場所: WebDancer/demos/agents/search_agent.py
    • 依存: Qwen-Agent フレームワーク
    • インターフェース: run(), run_streaming()
  • ツールシステム: モジュラーなツール実装

    • 場所: WebDancer/demos/tools/
    • 依存: 各種外部API
    • インターフェース: Tool基底クラス
  • メモリ管理: 長文脈処理のためのマルチエージェント

    • 場所: WebWalker/src/agent.py
    • 依存: LLMバックエンド
    • インターフェース: MemoryManager

技術スタック

コア技術

  • 言語: Python 3.12+
  • LLMフレームワーク: Qwen-Agent
  • モデルサービング: SGLang
  • 主要ライブラリ:
    • transformers(モデル処理)
    • gradio(デモUI)
    • streamlit(ベンチマークUI)
    • asyncio(非同期処理)

開発・運用ツール

  • モデルデプロイ: SGLangベースのスクリプト
  • API統合: Serper/SerpAPI、Jina API
  • 評価: GPT-4ベースの自動評価システム
  • データ処理: JSONLフォーマット

設計パターン・手法

  • ReActパターン: 構造化された推論プロセス
  • エージェント・ツール分離: 清潔なアーキテクチャ
  • ストリーミングレスポンス: リアルタイム応答
  • 指数バックオフ: API信頼性の向上

データフロー・処理フロー

  1. ユーザークエリの受信
  2. ReActループの開始
    • Thought: 現在の状況を分析
    • Action: 適切なツールを選択・実行
    • Observation: 結果を観察・解釈
  3. メモリへの情報保存
  4. 終了条件の確認(答えが見つかったか、最大ステップ数到達)
  5. 最終回答の生成

API・インターフェース

公開API

エージェントAPI

  • 目的: Web検索タスクの実行
  • 使用例:
# 基本的な実行
response = agent.run("Your question here")

# ストリーミング実行
for chunk in agent.run_streaming("Your question here"):
    process_chunk(chunk)

ツールAPI

  • 目的: 検索、コンテンツ取得等の個別機能
  • 使用例:
# Google検索
search_tool = GoogleSearchTool(api_key="...")
results = search_tool.search("quantum computing 2024")

# Webページ要約
jina_tool = JinaReaderTool(api_key="...")
summary = jina_tool.summarize("https://example.com")

設定・カスタマイズ

設定ファイル

# config.py - エージェント設定例
AGENT_CONFIG = {
    "model": {
        "name": "WebDancer-32B",
        "endpoint": "http://localhost:30000/v1",
        "temperature": 0.7,
        "max_tokens": 4096,
        "top_p": 0.9
    },
    "tools": {
        "search": {
            "provider": "serper",  # or "serpapi"
            "max_results": 10,
            "region": "us"
        },
        "reader": {
            "provider": "jina",
            "timeout": 30,
            "max_length": 5000
        }
    },
    "execution": {
        "max_steps": 20,
        "parallel_search": True,
        "memory_compression": True
    }
}

拡張・プラグイン開発

新しいツールの追加例:

from demos.tools.base import Tool

class CustomTool(Tool):
    def __init__(self, config):
        super().__init__("custom_tool", "Description of tool")
        self.config = config
    
    async def execute(self, params):
        # ツールのロジック実装
        result = await self._perform_action(params)
        return {
            "status": "success",
            "data": result
        }

パフォーマンス・スケーラビリティ

パフォーマンス特性

  • ベンチマーク結果:
    • WebDancer: GAIA 64.1% (Pass@3)、WebWalkerQA 62.0%
    • WebSailor: BrowseComp-en 12.0%、GAIA 55.4%
  • 最適化手法:
    • 並列検索処理
    • メモリ圧縮
    • 効率的なコンテキスト管理

スケーラビリティ

  • 水平スケーリング: SGLangによる分散デプロイ対応
  • バッチ処理: 複数クエリの並行処理
  • リソース管理: GPU/CPUの動的割り当て

制限事項

  • モデルサイズ: 32B/72Bパラメータ(大規模GPU必要)
  • API依存: 外部サービス(Google、Jina)への依存
  • レート制限: 外部APIのレート制限に準拠

評価・所感

技術的評価

強み

  • 段階的アプローチ: ベンチマークから実装まで包括的なフレームワーク
  • 最先端性能: オープンソースでSOTA達成
  • 完全な学習パイプライン: データ生成からRLまでの一貫した手法
  • 実用性: 実サービスとの統合による即座の実用化
  • 革新的アルゴリズム: DUPOなど新規手法の提案

改善の余地

  • リソース要求: 大規模モデルのため高性能GPU必須
  • ドキュメント: より詳細な技術文書が必要
  • 日本語対応: 現状は英語・中国語のみ

向いている用途

  • 複雑な情報検索: 多段階の推論が必要なタスク
  • 研究開発: Webエージェントの研究プラットフォーム
  • エンタープライズ検索: 社内情報の高度な検索・分析
  • 自動調査: 市場調査、競合分析等の自動化

向いていない用途

  • リアルタイム処理: レイテンシ要求が厳しいタスク
  • 軽量環境: リソース制約のある環境
  • 単純なQ&A: オーバースペックとなる簡単なタスク

総評

WebAgentは、Web情報検索エージェントの分野において画期的なプロジェクトです。特に、ベンチマークから実装、さらに高度な推論まで段階的に進化する設計は、研究と実用の両面で優れています。オープンソースでありながら商用システムに匹敵する性能を達成している点は特筆すべきで、4段階の訓練パイプラインやDUPOアルゴリズムなどの技術的貢献も大きいです。ただし、大規模モデルのためリソース要求が高く、導入には相応の計算資源が必要です。それでも、複雑な情報検索タスクを自動化したい組織にとっては、非常に価値の高いツールと言えるでしょう。