Agent S3 核心架构与设计原理深度解析
当 AI 开始”像人一样”用鼠标键盘操作你的电脑,它究竟是怎么思考的?Agent S3 给出了一个惊艳的答案:72.6% 的 OSWorld 得分,首次超越人类基线。
前言:GUI Agent 终于”看得见”也”动得准”
过去两年,AI Agent 的战场从文本对话蔓延到了浏览器(browser-use)、操作系统、办公软件。但真正能让 LLM 像人类一样用鼠标点击、键盘输入的”Computer-Use Agent”(CUA) 一直是块难啃的骨头:模型看不懂屏幕坐标、操作失败率高、长任务容易陷入循环。
2025 年 12 月,Simular AI 团队的 Agent S3 在 OSWorld 基准上拿到 72.6% 的成绩——首次超越人类基线(约 72%)。比 GPT-5 加持的 GTA1(63.4%)高出近 10 个百分点。
这篇博客会从架构、机制、原理三个层面拆解 Agent S3:
- 它如何把”看屏幕”和”做动作”拆成两个模型?
- Worker + Reflection 双 Agent 如何避免死循环?
- Behavior Best-of-N(bBoN)是怎么用 LLM-as-Judge 把单次成功率从 66% 拉到 72.6% 的?
- 和 OpenAI CUA、Anthropic Computer Use、UI-TARS 比起来设计上有何不同?
读完你不仅能理解 Agent S3 的设计精髓,更能把握当前 Computer-Use Agent 领域的核心方法论。
一、Agent S3 是什么?
1.1 定位与价值
Agent S 是 Simular AI 团队开源的通用 GUI Agent 框架,目标是让 LLM 像人一样通过观察屏幕截图、操作鼠标键盘来完成任意计算机任务。最新版本 Agent S3 配套论文 The Unreasonable Effectiveness of Scaling Agents for Computer Use(arXiv: 2510.02250)发表于 2025 年 10 月。
它的核心价值是解决 GUI Agent 的三个老大难问题:
| 痛点 | 传统方案 | Agent S3 的解法 |
|---|---|---|
| 长任务循环 | LLM 单步决策 | Worker + Reflection 双 Agent 协同 |
| 数据处理效率低 | 全靠 GUI 点点点 | 集成 Code Agent,可执行 Python/Bash |
| 单次成功率低 | 单一 rollout | Behavior Best-of-N(bBoN)多轨迹对比 |
1.2 OSWorld 基准表现
OSWorld 是当前最具挑战性的 Computer-Use 基准测试,包含 369 个真实任务(文件管理、浏览器操作、办公软件配置等)。
graph LR
A["OSWorld 基准<br/>369 个真实任务"] --> B["Agent S3<br/>单次 66%"]
A --> C["GTA1 + GPT-5<br/>63.4%"]
A --> D["Agent S3 + bBoN<br/>72.6%"]
A --> E["人类基线<br/>~72%"]
D -.->|"首次超越"| E
style A fill:#C7CEEA,stroke:#9FA8DA,color:#333
style B fill:#E8D5F5,stroke:#CE93D8,color:#333
style C fill:#FFDAB9,stroke:#FFAB76,color:#333
style D fill:#B5EAD7,stroke:#80CBC4,color:#333
style E fill:#FFB3C6,stroke:#F48FB1,color:#333更值得注意的是跨平台泛化能力:
| 基准 | 域 | Agent S3 单次 | + bBoN(选 3 轨迹) | 提升 |
|---|---|---|---|---|
| OSWorld | Linux 桌面 | 66.0% | 72.6% | +6.6% |
| WindowsAgentArena | Windows | 50.2% | 56.6% | +6.4% |
| AndroidWorld | Android | 68.1% | 71.6% | +3.5% |
零样本迁移意味着 OSWorld 上训练的策略在 Windows、Android 上同样有效——这才是 GUI Agent 走向通用的关键。
二、核心架构解析
2.1 整体架构
Agent S3 采用了经典的”分层协同”架构,但比 LangChain、AutoGen 简洁得多。整体分为三层:
graph TB
subgraph "用户层"
U["👤 用户<br/>自然语言指令"]
end
subgraph "决策层(Decider)"
W["⚙️ Worker Agent<br/>主决策器(GPT-5)"]
R["🔍 Reflection Agent<br/>反思器(共享主模型)"]
C["💻 Code Agent<br/>代码执行器(预算20步)"]
end
subgraph "执行层(Executor)"
A["🖱️ ACI 抽象<br/>UI 原子操作"]
GM["🎯 Grounding Model<br/>UI-TARS-1.5-7B"]
TS["📝 Text Span Agent<br/>文本→坐标"]
end
subgraph "评判层(Judge,仅 bBoN)"
BN["📖 Behavior Narrator<br/>轨迹叙述"]
CJ["⚖️ Comparative Judge<br/>LLM-as-Judge"]
end
U -->|"'关闭VS Code'"| W
W <-->|"每步反射"| R
W -->|"复杂数据任务"| C
W -->|"点击/输入"| A
A -->|"视觉定位"| GM
A -->|"文字定位"| TS
GM -.->|"坐标(x,y)"| A
TS -.->|"坐标(x,y)"| A
W -.->|"多 rollout"| BN
BN --> CJ
CJ -->|"最优轨迹"| U
style U fill:#C7CEEA,stroke:#9FA8DA,color:#333
style W fill:#E8D5F5,stroke:#CE93D8,color:#333
style R fill:#E8D5F5,stroke:#CE93D8,color:#333
style C fill:#E8D5F5,stroke:#CE93D8,color:#333
style A fill:#FFDAB9,stroke:#FFAB76,color:#333
style GM fill:#B5EAD7,stroke:#80CBC4,color:#333
style TS fill:#B5EAD7,stroke:#80CBC4,color:#333
style BN fill:#FFF9C4,stroke:#F9A825,color:#333
style CJ fill:#FFF9C4,stroke:#F9A825,color:#3332.2 核心模块职责
| 模块 | 文件 | 职责 |
|---|---|---|
| AgentS3 | agents/agent_s.py | 顶层入口,封装 Worker + 反思 |
| Worker | agents/worker.py | 主决策器,输出 pyautogui 代码 |
| Reflection Agent | memory/procedural_memory.py | 每步评判轨迹是否偏离 |
| OSWorldACI | agents/grounding.py | UI 原子操作封装(click/type/drag) |
| Grounding Model | core/mllm.py | 视觉/文本→坐标,独立 7B 模型 |
| Code Agent | agents/code_agent.py | 复杂数据任务的 Python/Bash 执行 |
| BehaviorNarrator | bbon/behavior_narrator.py | 把鼠标轨迹”翻译”成自然语言 |
| ComparativeJudge | bbon/comparative_judge.py | 多 rollout 时的 LLM-as-Judge |
2.3 一次完整的”决策—执行”数据流
sequenceDiagram
actor U as 👤 用户
participant W as ⚙️ Worker
participant R as 🔍 Reflection
participant C as 💻 Code Agent
participant A as 🖱️ ACI
participant G as 🎯 Grounding
participant OS as 🖥️ 操作系统
U->>W: "在 A1 写入 100"
W->>R: 上一步历史+截图
R-->>W: Reflection: "轨迹正常,继续"
W->>W: LLM 推理生成 plan
Note over W: Plan: click("A1 单元格")
W->>A: click(element_description="A1")
A->>G: generate_coords("A1", screenshot)
G-->>A: (450, 230)
A->>OS: pyautogui.click(450, 230)
OS-->>U: 屏幕变化
Note over W,C: 若任务复杂,Worker 调度 Code Agent
W->>C: call_code_agent(...)
C->>OS: python script execution
OS-->>C: result
C-->>W: 任务完成报告三、关键机制深挖
3.1 Worker + Reflection:避免”动作循环”
GUI Agent 最常见的问题是陷入重复动作循环——比如点错按钮后,模型反复点击同一个位置。Agent S3 的解法是每步调用 Reflection Agent 独立评判。
实现位于 gui_agents/s3/agents/worker.py:
1 | def _generate_reflection(self, instruction: str, obs: Dict) -> Tuple[str, str]: |
Reflection Agent 的 System Prompt(procedural_memory.py)有三种固定输出:
1 | Case 1. 轨迹偏离计划(动作循环 / 错误操作)→ 提醒修改策略 |
精妙之处:Reflection Agent 与 Worker 共享同一个主 LLM(如 GPT-5),但系统 prompt 完全独立——这避免了”自我感觉良好”的偏差。
3.2 坐标生成:双模型分工
Agent S3 显式分离了主决策 LLM(GPT-5 等)和Grounding Model(UI-TARS-1.5-7B)。原因是:
让 GPT-5 这样的通用大模型直接输出屏幕坐标,既贵又不准。专用 7B 模型做”看图定点”性价比高 10 倍。
Grounding 流程在 grounding.py:
1 | def generate_coords(self, ref_expr: str, obs: Dict) -> List[int]: |
同时文本定位走另一条路(OCR + LLM 选词):
1 | def generate_text_coords(self, phrase: str, obs: Dict) -> List[int]: |
这种”视觉坐标 + 文本坐标“双轨设计,让 click/type 操作的鲁棒性大幅提升。
3.3 Code Agent:用代码代替 GUI 点点点
GUI 操作在数据处理场景下极其低效。比如”求 A1:A10 的和”,用 GUI 输公式要 5 步,用 Python 1 行搞定。Agent S3 集成了独立的 Code Agent:
graph LR
A["Worker 检测任务"] --> B{"涉及数据处理?"}
B -->|"是"| C["调度 Code Agent<br/>call_code_agent()"]
B -->|"否"| D["直接走 GUI 操作"]
C --> E["Code Agent<br/>20 步预算"]
E --> F["执行 Python/Bash"]
F --> G["返回执行报告"]
G --> H["Worker 验证结果<br/>(仍走 GUI)"]
style A fill:#C7CEEA,stroke:#9FA8DA,color:#333
style B fill:#FFF9C4,stroke:#F9A825,color:#333
style C fill:#E8D5F5,stroke:#CE93D8,color:#333
style D fill:#FFDAB9,stroke:#FFAB76,color:#333
style E fill:#E8D5F5,stroke:#CE93D8,color:#333
style F fill:#B5EAD7,stroke:#80CBC4,color:#333
style G fill:#B5EAD7,stroke:#80CBC4,color:#333
style H fill:#FFB3C6,stroke:#F48FB1,color:#333关键工程细节(来自 procedural memory 中的 CODE_AGENT_PROMPT):
- 每步独立:Code Agent 每步都是独立代码片段,不会跨步保留变量
- 预算控制:默认 20 步,超出返回 BUDGET_EXHAUSTED
- 完成判定:返回 DONE/FAIL/BUDGET_EXHAUSTED 三种状态
- GUI 验证:Code Agent 完成后,Worker 必须走 GUI 重新验证(不能信任代码结果)
3.4 Behavior Best-of-N(bBoN):把单次成功率拉到极致
这是 Agent S3 的最大创新点。当单次 rollout 失败时,与其训练更好的模型,不如跑多次然后挑最好的。
核心思想
flowchart TD
START(["任务开始"]) --> R1["Rollout 1<br/>66% 成功"]
START --> R2["Rollout 2<br/>独立尝试"]
START --> R3["Rollout 3<br/>独立尝试"]
R1 --> DIR["轨迹目录"]
R2 --> DIR
R3 --> DIR
DIR --> BN["📖 Behavior Narrator<br/>提取鼠标轨迹+语义"]
BN --> FACTS["生成 fact captions<br/>如'用户点击了 X 按钮'"]
FACTS --> CJ["⚖️ Comparative Judge<br/>对比多条轨迹"]
CJ --> BEST["选择最优轨迹"]
BEST --> END(["返回最终结果"])
style START fill:#C7CEEA,stroke:#9FA8DA,color:#333
style R1 fill:#FFDAB9,stroke:#FFAB76,color:#333
style R2 fill:#FFDAB9,stroke:#FFAB76,color:#333
style R3 fill:#FFDAB9,stroke:#FFAB76,color:#333
style DIR fill:#E8D5F5,stroke:#CE93D8,color:#333
style BN fill:#B5EAD7,stroke:#80CBC4,color:#333
style FACTS fill:#B5EAD7,stroke:#80CBC4,color:#333
style CJ fill:#FFF9C4,stroke:#F9A825,color:#333
style BEST fill:#B5EAD7,stroke:#80CBC4,color:#333
style END fill:#C7CEEA,stroke:#9FA8DA,color:#333Behavior Narrator 的实现
难点:原始轨迹是 (x, y) 坐标序列,对 LLM 来说几乎不可读。Behavior Narrator 用图像标注把鼠标轨迹可视化:
1 |
|
然后调用 MLLM 生成事实性描述(fact captions):
1 | "The red circle labeled 'Click' marks the position where the mouse was clicked." |
这些 caption + 初始截图 + 最终截图,喂给 Comparative Judge 进行多模态对比。
为什么 bBoN 能从 66% 拉到 72.6%?
| 机制 | 提升原因 |
|---|---|
| 多 rollout 投票 | 单次失败的 hard 任务,二次/三次尝试可能成功 |
| 轨迹叙述降低 judge 难度 | 直接看坐标序列 LLM 选不准;转成自然语言后挑选准确率提升 |
| 避免重复错误 | 失败的 rollout 会被筛掉,不污染最终结果 |
计算开销:3 次 rollout 成本约 3×,但成功率提升 6.6%,对生产环境来说 ROI 极高。
3.5 上下文管理:长任务的内存优化
长任务时 Worker 的消息历史会爆炸(每步包含截图 + 文本)。Agent S3 实现了一套智能 flush 策略(worker.py 中的 flush_messages):
1 | def flush_messages(self): |
核心原则:图片是最大的 token 消耗(一张截图约 1000-2000 tokens),优先保文本、丢图片。
四、优缺点分析
4.1 架构简洁性 / 扩展性 / 易用性
| 维度 | 评价 | 说明 |
|---|---|---|
| 架构简洁性 | ✅ 优 | 三个 Agent(Worker/Reflection/Code)+ 一个 Judge,结构清晰 |
| 扩展性 | ✅ 优 | 通过 @agent_action 装饰器可快速添加新 UI 操作 |
| 易用性 | ⚠️ 中 | 需配置主模型 + Grounding 模型 + OCR,门槛较高 |
| 跨平台支持 | ✅ 优 | Linux/macOS/Windows/Android 均支持 |
| API 兼容性 | ✅ 优 | 同一 engine 接口支持 OpenAI/Anthropic/Gemini/vLLM/HF |
4.2 性能 / 复杂度 / 维护性
| 维度 | 评价 | 说明 |
|---|---|---|
| 任务成功率 | ✅ 优 | OSWorld 72.6% 超越人类 |
| 推理延迟 | ⚠️ 差 | 每步需 Worker + Reflection 两次 LLM 调用 |
| Token 消耗 | ⚠️ 差 | 每步含完整 screenshot,开销大 |
| 实现复杂度 | ⚠️ 中 | procedural_memory 中 26000+ 字符的 prompt 调优成本高 |
| 安全风险 | ❌ 差 | --enable_local_env 可执行任意 Python/Bash,需沙箱 |
4.3 与同类项目对比
| 维度 | Agent S3 | OpenAI CUA | Anthropic Computer Use | UI-TARS |
|---|---|---|---|---|
| 定位 | 通用 GUI Agent | 商业 Operator | Claude 内置功能 | 纯 Grounding 模型 |
| OSWorld 得分 | 72.6% | 38.1%(早期) | ~35% | 42.5%(仅 grounding) |
| 开源 | ✅ Apache 2.0 | ❌ 闭源 | ❌ 闭源 | ✅ 开源 |
| Grounding 模型 | UI-TARS 7B(外接) | 内置 o1/o3 | 内置 Claude | 自身 |
| 多 Agent 协同 | Worker + Reflection | 单一链 | 单一链 | 无 |
| 轨迹选择 | bBoN + LLM Judge | 无 | 无 | 无 |
| 代码执行 | 集成 Code Agent | 无 | 无 | 无 |
| 可本地部署 | ✅ | ❌ | ❌ | ✅ |
关键设计差异:
- OpenAI CUA/Anthropic Computer Use 是端到端单模型,Agent S3 是多模型协同(主决策 + 专用 Grounding)
- UI-TARS 只能输出坐标,Agent S3 在它之上构建了完整 Agent 框架
- bBoN + LLM Judge 是 Agent S3 独有的测试时计算扩展机制
五、快速上手:跑通一个最小示例
5.1 安装
1 | # 安装核心库 |
5.2 启动 UI-TARS Grounding 服务
1 | # 用 HuggingFace TGI 部署 UI-TARS-1.5-7B |
5.3 Python SDK 完整示例
1 | import pyautogui |
5.4 CLI 方式(最简)
1 | agent_s \ |
六、趋势展望
6.1 短期(2026)
- 测试时计算扩展成为主流:bBoN 类方法会从 Agent S3 扩散到更多框架
- Grounding 模型小型化:7B 模型做视觉定位已足够,主决策可换用更便宜的模型
- 多模态 RLHF:用人类对 rollout 的偏好直接训练 Worker
6.2 中期(2027-2028)
- 跨平台统一基座:Linux/Windows/macOS/Android 共享同一套 Grounding
- 垂直领域 Agent:办公、设计、开发各一套专用 System Prompt
- GUI Agent + RAG 融合:让 Agent 能”看文档”再操作
6.3 长期愿景
- AGI 的”手”:GUI Agent 是 LLM 与物理世界交互的关键拼图
- 数字员工:每个知识工作者都可能拥有定制化的 Agent S 实例
- 自主进化:Agent 自己发现并使用新的 API 完成任务
七、总结
Agent S3 给 GUI Agent 领域带来的核心启示:
| 启示 | 具体做法 |
|---|---|
| 分层协同胜过单一大模型 | Worker + Reflection + Grounding 三模型分工 |
| 测试时计算扩展是免费的午餐 | bBoN + LLM Judge 3 次 rollout 提升 6.6% |
| 专用模型做专用事 | UI-TARS 7B 做坐标,GPT-5 做决策 |
| Code Agent 是 GUI 的捷径 | 数据处理类任务用 Python 替代 GUI 点点点 |
| 轨迹叙述降低判断难度 | 坐标→自然语言让 LLM Judge 更准 |
如果你是 Agent 开发者:
- 学习 Agent S3 的多模型协同思想,不要试图用一个模型解决所有事
- 一定要实现Reflection 机制,哪怕是最简单的”每步让 LLM 复述一下当前状态”
- 关注Grounding 模型选型——7B 的 UI-TARS 性价比远超 GPT-4V 自身做定位
如果你是产品经理:
- Agent S3 的 72.6% 是 OSWorld 单次选最优轨迹后的结果
- 真实场景首次成功率约 66%,需要设计重试和兜底机制
- 任何涉及”执行代码”的 Agent 都必须运行在沙箱环境
Agent S 论文标题是 The Unreasonable Effectiveness of Scaling Agents for Computer Use。它告诉我们:在 LLM 能力接近饱和的今天,扩展 Agent 本身(多 rollout、多 Agent 协同)比单纯堆参数更有效。这或许是我们走向 AGI 的关键方法论。
参考资料
- 📄 Agent S3 论文:https://arxiv.org/abs/2510.02250
- 💻 GitHub 仓库:https://github.com/simular-ai/Agent-S
- 📊 OSWorld 基准:https://os-world.github.io
- 🤖 UI-TARS 模型:https://huggingface.co/ByteDance-Seed/UI-TARS-1.5-7B
- 📰 Simular 团队博客:https://www.simular.ai/articles/agent-s3
对比分析
Agent S3 的核心特征是”Worker + Reflection 双 Agent + Behavior Best-of-N”——以 OSWorld 72.6% 首次超越人类基线。在”Computer-Use Agent”赛道里,跟它最常被对比的项目是 OpenAI Operator、Anthropic Computer Use,以及 UI-TARS。下面对它们做一次横向对比。
维度一:执行范式
| 项目 | 决策循环 | 评测基准 | 关键创新 |
|---|---|---|---|
| Agent S3 (Simular) | Worker + Reflection + bBoN | OSWorld 72.6% | Behavior Best-of-N 提升单次成功率 |
| OpenAI Operator / CUA | 单一 CUA 模型端到端 | OSWorld 38.1%(CUA 早期) | 端到端 VLM + 浏览器 + 工具 |
| Anthropic Computer Use | Claude 直接看截图 + 工具 | OSWorld ~28-44% | 多模态原生 + Bash/Editor/浏览器 |
| UI-TARS (ByteDance) | 端到端 VLM | OSWorld 46.6%(UI-TARS-1.5) | 大规模 GUI 轨迹训练 + 推理时 CoT |
维度二:开源 vs 闭源
- Agent S3:开源 + 学术 paper + 评测脚本完整
- OpenAI Operator / CUA:闭源服务,Operator 走浏览器侧,OpenAI CUA SDK 已开放(受限)
- Anthropic Computer Use:闭源模型 + Claude API 暴露
- UI-TARS:模型权重开源(Apache 2.0),但框架集成仍以 SDK 为主
维度三:基准成绩与场景
- Agent S3:OSWorld 72.6% 首次超过人类基线 ~72%
- UI-TARS-1.5:OSWorld 46.6%、AndroidWorld 46.6%、ScreenSpot Pro 60+
- OpenAI CUA:OSWorld 38.1%(早期),Operator 闭源、效果强但难复现
- Claude Computer Use:OSWorld 28-44%(不同版本),稳定性高、生态最广
优缺点小结
- Agent S3:开源 + bBoN + Reflection 让单次成功率显著提升;缺点是依赖外接 VLM 推理,部署成本高
- OpenAI Operator / CUA:商业产品体验最好;缺点是闭源、难定制
- Anthropic Computer Use:API 体验最稳、生态最广;缺点是闭源、价格贵
- UI-TARS:模型权重开源 + 跨平台;缺点是框架集成与 bBoN 类增强少
何时选 Agent S3
- 你需要”开源 + 可复现 + 可定制”的 GUI Agent 方案
- 你能接受”Worker + Reflection”双 Agent 的推理成本
- 你正在做 OSWorld / OSWorld-X 类基准的研究与对比
何时不选 Agent S3
- 你要”开箱即用、零部署”的商业体验——OpenAI Operator / Claude Computer Use 更省心
- 你只关心”模型本身”——UI-TARS 权重可直接微调
- 你的目标是”低资源、低延迟”——双 Agent + bBoN 较重
参考资料
- Agent S3 论文:https://arxiv.org/abs/2510.02250
- Agent S GitHub:https://github.com/simular-ai/Agent-S
- OpenAI CUA:https://openai.com/index/operator-and-cua/
- Anthropic Computer Use:https://docs.anthropic.com/en/docs/agents-and-tools/tool-use/computer-use-tool
- UI-TARS:https://github.com/bytedance/UI-TARS
- OSWorld 基准:https://os-world.github.io