SuperAPI AI 工具集

visual-feedback-loop

编程与开发

查看项目

更新于 10-16 02:21

技能介绍

Visual Feedback Loop 是一个用于网页应用迭代开发的智能体视觉反馈闭环技能,核心目标是让 AI 智能体能够捕获、查看和比较运行中网页应用的视觉输出。

用途

当你在迭代视觉相关代码(UI、canvas、3D、SVG、图表、动画)并需要真正看到渲染结果时使用该技能。它解决的是智能体无法直接访问浏览器的问题,通过服务端进行中转。

工作原理

智能体(CLI)无法直接访问浏览器,服务端承担中转角色:

  1. 智能体发起 GET /api/dev-screenshot(可带参数)。
  2. 服务端通过 SSE 向浏览器发送 "capture" 通知。
  3. 浏览器捕获 canvas 并 POST 回传 { dataUrl }。
  4. 服务端写入 .screenshots/{UTC}.webp、.screenshots/{UTC}.json(元数据)、.screenshots/latest.webp(便利副本)。
  5. GET 请求返回 { ok, path, latest }。

使用方式

捕获当前视图:

curl http://localhost:3000/api/dev-screenshot

带参数捕获(参数由应用特定的浏览器客户端解释):

curl 'http://localhost:3000/api/dev-screenshot?component=header&theme=dark' curl 'http://localhost:3000/api/dev-screenshot?letter=б&depth=0.8'

读取结果:Read .screenshots/latest.webp

视觉回归(像素差异)

使用 ImageMagick 与基准截图比较:

magick compare -metric RMSE .screenshots/ground-truth.webp .screenshots/latest.webp .screenshots/diff.webp

RMSE 输出说明:0.01 表示约 1% 差异(渲染噪声),0.03+ 表示可见变化。保存 diff 图像以供检查。

元数据附属文件

每张截图都会生成同名 UTC 时间戳的 JSON 附属文件:

{ "timestamp": "2026-02-25T08:22:12.655Z", "git": { "commit": "0a5726f", "dirty": true }, "params": { "letter": "о", "chamferModel": "membrane", "cameraView": "front" }, "format": "webp", "file": "2026-02-25T08-22-12-655Z.webp" }

可用于追溯某张截图对应的代码状态与参数,在多次代码变更间迭代时尤为关键。

A/B 比较工作流

  1. 捕获基准:curl '...?letter=о',记下 {UTC}.webp 文件名。
  2. 修改代码,刷新浏览器。
  3. 再次捕获:curl '...?letter=о'。
  4. 比较:magick compare -metric RMSE .screenshots/{ground-truth}.webp .screenshots/latest.webp .screenshots/diff.webp。
  5. 读取 diff 图像并检查 RMSE 数值。

控制台后备方案:await window.__takeDevScreenshot()

规则

  • 捕获后始终 Read .screenshots/latest.webp,绝不假设渲染正确。
  • 浏览器标签页必须停留在应用 URL。超时即意味着没有 SSE 连接,需请用户刷新。
  • 一次只允许一个请求。第二个 GET 返回 409。需等待第一个请求完成(成功/错误/10 秒超时)。
  • 错误会立即返回,而非以超时形式出现。客户端会把错误 POST 回来:{ ok: false, error: "..." }。
  • HMR 容错:把服务端 SSE 状态存放在 globalThis 上,以便在模块重载后存活。EventSource 在客户端会自动重连。若代码变更后截图仍失败,请用户刷新。
  • HMR 不会更新离屏渲染路径。useEffect 中的闭包会捕获过时的模块引用。修改渲染逻辑后,始终请用户硬刷新(macOS 为 Cmd+Shift+R,Windows/Linux 为 Ctrl+Shift+R)。

故障排查

  • 超时:浏览器未响应 → 在浏览器中打开/刷新应用。
  • 409:已有请求进行中 → 等待超时(10 秒)。
  • 黑色/空白图像 → 刷新浏览器标签页。
  • 能用一次后超时 → HMR 破坏了 SSE,刷新标签页(若使用 globalThis 模式则较少出现)。
  • 代码变更未反映在截图中 → HMR 不更新离屏渲染器,需硬刷新。
  • 比较不同代码状态的截图 → 检查 JSON 附属文件中的 git commit 与 dirty 标志。

完整错误参考见 references/errors.md。

安装/集成设置

该模式与框架无关,只要求具有 GET/POST 路由和 SSE 的 HTTP 服务器。参考实现使用 Next.js,但同样适用于 Express、Fastify、Hono、Vite 开发服务器插件或任何 Node.js HTTP 服务器。完整 Next.js 实现(API 路由、SSE 监听器、WebMCP 注册)见 references/setup-nextjs.md。将路由处理器适配到你的框架即可,客户端 SSE 监听器与捕获逻辑无论服务端框架如何都相同。

限制

官方资料未提供收费、价格或具体平台支持范围等信息,暂未提供。