agent-q
基于 MCTS + 自我批评 + DPO 微调的 Web Agent,让 AI 在真实互联网上自主执
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
基于 MCTS + 自我批评 + DPO 微调的 Web Agent,让 AI 在真实互联网上自主执
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
想象一下这样的场景:你对 AI 说「帮我去 LinkedIn 上找纽约地区 5 年以上经验的数据科学家,发一封求职意向邮件」,然后 AI 真的打开了浏览器,像真人一样滚动页面、点击按钮、填写表单——这不是演示视频,而是 Agent Q 正在做的事。
Agent Q(GitHub,507 ⭐)是 2024 年 UC Santa Cruz 等机构发布的论文《Agent Q: Advanced Reasoning and Learning for Autonomous AI Agents》的开源实现。它让大语言模型不仅能聊天,还能在真实网站上执行复杂的多步骤任务——投简历、订机票、查数据,真正变成一个可以「替你上网」的智能助手。

图1:Agent Q 项目 GitHub 主页
大语言模型(LLM)在对话、写作、代码生成上表现出色,但长期以来存在一个核心短板:缺乏真正在现实世界中执行任务的能力。论文指出,LLM 在开放域网站(如真实电商、招聘平台)上的成功率往往只有 20%~30%,远低于实用门槛。
传统方法依赖大量人工标注数据,成本高昂且泛化能力有限。Agent Q 提出了三条技术路线的组合拳:
最终在 WebShop 基准上,Agent Q 达到了 67.5% 的成功率(GPT-4o),远超基线方法的 29.1%。
Agent Q 的代码实现了一套精心设计的有限状态机(FSM)架构,包含 5 种不同角色的 Agent,由 Orchestrator 统一调度:
┌─────────────────────────────────────────────────────┐
│ Orchestrator │
│ (状态机调度器 / Event Loop / Playwright Manager) │
└────────────┬──────────────────────────────────────────┘
│
┌─────────┼──────────┬────────────┐
▼ ▼ ▼ ▼
Planner Browser AgentQ Actor/Critic
Agent Navigator Base (MCTS Loop)
(规划) (执行) (主Agent)
Vision DPO训练数据生成
Agent
| Agent 角色 | 文件 | 职责 |
|---|---|---|
| PlannerAgent | planner_agent.py | 分析用户目标,拆解为可执行的任务步骤 |
| BrowserNavAgent | browser_nav_agent.py | 操作浏览器:点击、输入、滚动、提取内容 |
| AgentQ | agentq.py | 单一 Agent 模式下的主执行器 |
| AgentQActor | agentq_actor.py | MCTS 中的「行动者」,执行具体动作 |
| AgentQCritic | agentq_critic.py | MCTS 中的「批评者」,评估行动质量 |
| VisionAgent | vision_agent.py | 处理截图,理解页面视觉信息 |
关键在于 orchestrator.py 中的状态机设计:Agent 之间通过 State 枚举(PLAN / BROWSE / COMPLETED 等)切换上下文,实现「规划→执行→评估→再规划」的闭环。
# 核心依赖(pyproject.toml 摘要)
python = ">=3.10,<4.0" # 类型提示 + 异步支持
litellm = "^1.42.9" # 多模型统一调用(OpenAI/Together/...)
pydantic = "^2.8.2" # 结构化输出 + 运行时校验
instructor = "^1.4.0" # 让 LLM 返回 Pydantic 模型
openai = "^1.40.1" # GPT-4o 调用(结构化输出依赖)
playwright-stealth = "^1.0.6" # 反检测浏览器自动化
flask = "^3.0.3" # REST API 服务(server.py)
langsmith = "^0.1.104" # 推理链路追踪
几个值得注意的设计决策:
最有趣的部分在 browser_mcts.py(近 20KB),实现了完整的 MCTS 搜索 + DPO 数据生成流程:
# 简化的 MCTS 工作流
class BrowserWorldModel(WorldModel[BrowserState, BrowserAction, str]):
async def step(self, state, action):
# 执行动作 → 获取新状态 + 奖励
...
# DPO 训练对生成
class BrowserDPODataGenerator:
def generate_pairs(self, tasks):
# MCTS 探索 → 收集 (好轨迹, 坏轨迹) 对
# 写入 dpo_pairs.jsonl 供下游微调
dpo_pairs.jsonl 文件即为 MCTS 探索产生的偏好数据,可用于微调开源模型(如 Llama)。这个设计让 Agent Q 不仅仅是一个演示系统,更是一个可训练的 AI Agent 训练框架。
# 1. 安装 poetry(项目推荐的包管理器)
# 2. 克隆仓库并安装
git clone https://github.com/sentient-engineering/agent-q
cd agent-q
poetry install
# 3. 启动 Chrome DevTools(独立浏览器实例)
google-chrome --remote-debugging-port=9222
# 4. 配置 .env(必填 OpenAI Key,可选 Langfuse)
cp .env.example .env
# 编辑 .env 填入 API Key
# 5. 运行(交互模式 / 评测模式)
python -u -m agentq
# 6. 或者通过 API
python server.py
# GET http://localhost:8000/execute?goal=你的任务
playwright install chromium(需要一次性安装).env 文件需妥善管理,不应提交到 GitLangfuse 追踪虽然可禁用,但注释代码有一定工作量(README 里有说明)。对于只是想跑 demo 的用户,这是额外门槛。
Agent Q 并非完美解决方案:
Agent Q 的开源实现证明了三点:
sentient 框架(浏览器控制 SDK),项目间有协同效应如果你在构建需要「在真实网站上操作」的 AI 系统(如 RPA、自动化测试、智能爬虫),Agent Q 的架构和代码值得深入研究。如果你只是需要一个能聊天的 AI,Agent Q 显然过于复杂了。
项目地址:https://github.com/sentient-engineering/agent-q