如何让 AI 编码 Agent 从同步等待变成异步工作流?Agent Chat Bridge 实战
引言:AI Agent 的同步等待陷阱
用过 VS Code Copilot Chat 或 Windsurf Cascade 的开发者应该深有体会:你给 Agent 发了一条消息,它开始思考、生成代码、执行命令——然后你只能干等着。期间你不能做其他事,因为 Agent 的回复可能包含你需要处理的信息。
这种同步阻塞模式在简单任务上还好,当涉及耗时操作时就很痛苦了:
- 等待构建/编译完成:Agent 等着构建结束,你等着 Agent
- 等待 API 响应:外部接口可能几秒到几分钟才返回
- 等待用户确认:Agent 问了你好几个问题,你不能一次性回答完
- 定时检查:Agent 需要每 10 分钟检查一次日志,但你不能一直陪着它
Agent Chat Bridge 就是为了解决这个问题而生——它让你把任何 AI Agent 聊天会话变成异步 Agent。你只需要注册一个定时器、shell 命令或 webhook,Agent 可以结束当前会话。当触发器触发时,Bridge 会自动带着你预设的提示词唤醒 Agent 继续工作。
安装
Agent Chat Bridge 以 VS Code 扩展的形式运行,支持 VS Code 和 Windsurf:
# 下载 VSIX 后,VS Code code --install-extension agent-chat-bridge-*.vsix --force # Windsurf windsurf --install-extension agent-chat-bridge-*.vsix --force
安装后重新加载窗口(Cmd+Shift+P → Developer: Reload Window)。
扩展启动后,Bridge 会在本地 9801 端口启动一个 HTTP 服务器。你可以在 VS Code 状态栏右下角看到一个 ⚡ Bridge :9801 图标,点击即可打开管理面板。
核心概念:一套 API,三种触发器
Agent Chat Bridge 的核心是 /jobs API。整个工作流只有两步:
- Agent 创建 Job:Agent 在工作结束时,向
POST /jobs注册一个触发器 - Agent 结束会话:Agent 正常结束(不会阻塞)
- 触发器触发:定时器到点、命令执行完毕、或 webhook 收到请求
- 重复提示词:Bridge 自动把预设的提示词发回给 Agent 的会话
- Agent 苏醒继续工作:Agent 看到提示词,接着干活
1. 定时器模式:最简单的异步测试
最基础的使用:告诉 Agent “10 秒后回来看看我”。
Agent 在工作快结束时执行:
curl --noproxy localhost -X POST http://localhost:9801/jobs \
-H 'Content-Type: application/json' \
-d '{
"session_id": "YOUR_SESSION_ID",
"prompt": "10 秒定时器已触发。检查上次运行的测试结果,如果有失败就修复它们。",
"seconds": 10
}'
10 秒后,这个提示会自动出现在 Agent 的聊天窗口中,Agent 就会接着工作。
💡 提示:在公司网络环境中,务必使用
--noproxy localhost,否则 curl 会通过公司代理发请求,代理无法访问你本地的localhost:9801。
2. Shell 命令模式:等待编译完成
这是最实用的场景。Agent 启动一个长时间运行的任务(如编译、测试、部署),但不想一直阻塞等着:
# Agent 注册一个 job:等待编译完成后继续
curl --noproxy localhost -X POST http://localhost:9801/jobs \
-H 'Content-Type: application/json' \
-d '{
"session_id": "YOUR_SESSION_ID",
"prompt": "TypeScript 编译已完成。分析编译输出中的错误和警告,逐个修复它们。",
"command": "npx tsc --noEmit 2>&1 | tee /tmp/tsc_output.txt"
}'
Agent 结束当前会话。当 npx tsc 执行完毕后,Agent Chat Bridge 自动带着输出结果和你的提示词重新唤醒 Agent。Agent 醒来后可以直接分析 /tmp/tsc_output.txt 的内容,不需要重新构建环境。
3. Webhook 模式:外部事件驱动
当你需要等待外部系统的响应时(如 CI 构建完成、PR 被 Review、部署到测试环境),webhook 模式是最灵活的选择:
# Agent 注册一个 webhook job
curl --noproxy localhost -X POST http://localhost:9801/jobs \
-H 'Content-Type: application/json' \
-d '{
"session_id": "YOUR_SESSION_ID",
"prompt": "CI 构建已触发完成。检查构建状态,如果有通过就合并 PR。",
"webhook": true
}'
返回的 job 会有一个 webhook_url,你可以把这个 URL 配置到 GitHub Actions 或 CI 系统中。当 CI 完成时,CI 系统 POST 到这个 URL,Agent Chat Bridge 就会自动唤醒 Agent。
读取 Agent 的回复
当你配置好一个异步 Job 后,Agent 的回复不会自动显示在你的 IDE 中(因为它已经结束会话了)。但你可以通过轮询 API 获取回复:
curl --noproxy localhost http://localhost:9801/jobs/JOB_ID
如果 Agent 已经回复,你会看到:
{
"status": "responded",
"response_text": "我检查了 TypeScript 编译输出,发现 3 个类型错误..."
}
实战场景
场景一:夜间批量代码审查
SOP(标准操作流程):
- Agent 提取今日所有 PR diff
- 逐个评审,对每个文件注册一个 webhook job
- Agent 结束会话,你回家
- CI 触发 webhook,Agent 在后台逐文件审查
- 第二天早上,你批量检查评审结果
场景二:分阶段大型重构
大型重构通常需要多步操作(改类型 → 改逻辑 → 跑测试 → 改文档),每一步都可能因为出乎意料的错误而中断。用 Agent Chat Bridge 可以把它们串起来:
# 阶段 1:改完类型定义后,跑测试
curl --noproxy localhost -X POST http://localhost:9801/jobs \
-H 'Content-Type: application/json' \
-d '{
"session_id": "SESSION_ID",
"prompt": "测试运行完毕。如果有失败,修复相关代码后重新跑测试;如果全部通过,进入下一步:更新相关文档",
"command": "npm test 2>&1 | tee /tmp/test_results.txt"
}'
场景三:Agent 驱动的监控回路
让 Agent 定时检查某个指标:
# Agent 启动一个每 15 分钟检查一次的循环
curl --noproxy localhost -X POST http://localhost:9801/jobs \
-H 'Content-Type: application/json' \
-d '{
"session_id": "SESSION_ID",
"prompt": "检查 /tmp/server_health.json 中的 CPU 和内存使用率。如果超过 80%,分析日志找出原因并生成优化建议。然后重新注册一个 15 分钟后检查的 Job。",
"seconds": 900
}'
管理面板
Agent Chat Bridge 内置了一个网页管理面板。在 VS Code 中按 Cmd+Shift+P → Agent Chat Bridge: Open Dashboard,或者在浏览器中打开 http://localhost:9801/ui。
面板中你可以看到:
- 所有正在运行和已完成的 Job
- 每个 Job 的状态(pending/running/completed/responded)
- Agent 回复的内容
- 手动取消或重试 Job
注意事项
- 会话 ID 的获取:不同 IDE 获取当前会话 ID 的方式不同。VS Code ≥ 1.96 版本支持
chatSessionsAPI,可以直接在管理面板中看到会话列表。更早版本需要手动查找。 - 没有超时:目前 Job 没有自动超时,如果 Agent 没有回复,Job 会一直处于 pending 状态。需要定期检查或手动清理。
- 一次一个回复:一个 Job 只能触发一次唤醒。如果你需要循环检查(如每 15 分钟),需要让 Agent 在每次回复中重新注册新的 Job。
总结
Agent Chat Bridge 解决的是 AI Agent 开发中一个很实际的问题——同步等待。它用一种极简的方式(一个 POST /jobs 调用)把 Agent 变成异步工作流,极大提升了开发效率。
从个人体验来说,最有价值的使用场景是长耗时任务(编译、测试、部署)和定时批量任务。在这些场景下,你不必坐在屏幕前等着 Agent 慢慢处理——你可以去做其他事,Agent 处理完后会自动来叫你。
如果你经常用 AI 编码 Agent 做复杂任务,试试给 Agent 加上异步能力——可能比你想象中简单得多。