2026-05-20 21:39:12 +08:00

3.3 KiB

Visual Agent Phase 0 PoC

验证 "截屏 → 火山 VLM → 解析 → nut.js 点击/粘贴 → 发送" 端到端链路在微信 4.x 文件传输助手能不能跑通。

用什么模型

读取 netaclaw_model_channel id=2 的火山引擎配置(doubao-seed-2-0-pro-260215,2026-02 多模态)。

当前火山 channel 未配置 doubao-1.5-ui-tars-250428。如果 Seed 2.0 Pro 成功率 ≥ 80%,直接进 Phase A;若 < 80%,先去火山控制台开 UI-TARS 模型,再用 MODEL_NAME=doubao-1.5-ui-tars-250428 环境变量重跑。

准备

  1. 打开 PC 微信 4.x 并登录
  2. 在微信里打开"文件传输助手"对话(主窗口可见,不要最小化到托盘)
  3. 让微信窗口在屏幕上清晰可见,最好最大化或大窗口
  4. 关闭其他可能弹窗的程序(防止抢前台)
  5. 确保仓库已 pnpm install 过(backend 依赖已就绪,需要 node-screenshots / @nut-tree-fork/nut-js / clipboardy / koffi / openai)

安装 PoC 需要的额外依赖

PoC 用的几个原生模块当前不在 backend deps 里,先装上:

cd packages/backend
pnpm add node-screenshots @nut-tree-fork/nut-js clipboardy koffi

(这一步等于 plan v2 的 Task 1 — 提前做也无所谓,反正后续要装。)

跑 PoC

# 在仓库根目录
pnpm --filter @neta/backend exec tsx ../../tools/visual_agent_probe/run-once.ts 3
  • 参数 3 = 跑 3 次(快速验证用)
  • 完整门禁验证应跑 20

启动后:

  • 控制台打印环境信息和窗口句柄
  • 倒计时 3 秒,期间不要碰键盘鼠标
  • 之后每次自动:Ctrl+1(聊天 tab)→ Ctrl+F(搜索)→ 输入"文件传输助手"→ 回车 → 截图 + VLM 验证已进群 → 粘贴 [probe-i-ts] → 回车 → 截图 + VLM 验证消息已发送
  • 两次 VLM 调用 / 条
  • 每条间 cooldown 3 秒

看什么

控制台最后会输出 Summary:

Summary
  total runs:        3
  successes:         3
  success rate:      100.0%
  ...

门禁标准:

  • success rate >= 80% → 可进 Phase A,把脚本里录到的 VLM raw 输出转成 Task 3 的测试 fixtures
  • success rate < 80% → STOP,讨论:
    • doubao-1.5-ui-tars-250428 试一次(在火山控制台先开通)
    • 或换 Claude Sonnet 4.6 vision
    • 或调整 prompt
    • 或放弃视觉路线

原始报告

完整 raw results(含每次的动作 trace 和 VLM 原始输出)落盘到: docs/superpowers/followups/2026-05-14-visual-agent-poc-raw.json

这份文件后续用来:

  • 生成 Phase A Task 3 的 50+ fixture 测试用例
  • 校验 spec §7.3 的成本估算表
  • 失败模式分析

失败排查

失败状态 含义 怎么办
window-missing 没找到微信进程 确保微信已打开,窗口未最小化到托盘
verify-failed (step 4) Ctrl+F 搜索没生效 / 未进入文件传输助手 手动验一遍快捷键是否被微信支持;不行则改路线(直接点击)
verify-failed (step 7) 消息确实没发出去 / VLM 没看到 看 trace 里 vlm-2 的 raw 输出,可能是 prompt 太严
model-failed VLM API 调用失败 检查 apiKey + baseUrl 是否对,网络是否能通火山
exception 截屏/键鼠/koffi 异常 看 error 字段
action-failed 模型输出无法解析 看 raw 输出,可能不是合法 JSON