用 WorkBuddy 从零手搓一个自主 AI 编程 Agent:180 行核心循环 + 7 个工具 + 100 万上下文
#WorkBuddy开发者分享季
项目背景
CNB 平台 有一个内置的 NPC(AI 编程助手),但它功能受限、不可定制。我想给它造一个「完全自主版」——能自己读代码、写代码、跑命令、发评论、甚至派生子 Agent 并行干活,全程无需人工干预。
项目地址:https://cnb.cool/Bring/NPC/Agent
一句话概括
CNB NPC Agent:一个运行在 CNB 平台上的自主 AI 编程 Agent,以 Docker 镜像发布。用户在 Issue/PR 中 @Agent,它接管任务→调 LLM→执行工具→循环直到完成→把结果评论回仓库。

技术栈
- 运行时: Node.js 22 + TypeScript
- AI 协议: OpenAI 兼容 SSE 流式接口
- 部署形态: Docker 镜像,多阶段构建(28MB 最终镜像)
- 工具: git, ripgrep, cnb-cli
- 开发工具: CodeBuddy(全程)
架构亮点
1. 纯手写 agentic loop——180 行 while(true)
没有引入任何 Agent 框架(LangChain、AutoGPT 等),核心逻辑就是一个 while(true) 循环:
用户指令 → 构建 prompt → while(true):
├─ 调 LLM(SSE 流式 + 自动重试)
├─ 上下文 >75% 窗口 → 用 flash 模型压缩
├─ 有工具调用 → 并发/串行调度执行 → 回填结果 → continue
└─ 无工具调用 → Hermes 自审 → 确认完成后退出
工具调度的并发/串行判定:每个工具声明 concurrent 字段——bash/write/edit/comment 有副作用,串行执行;read/vision/skill 只读,Promise.all 并发。调度器按 LLM 返回的原始顺序组装结果,确保一致性。

2. Hermes 自审——AI 会撒谎,我们不会
LLM 经常在回复里写「任务已完成」,实际上 comment 根本没发。Hermes 自审机制:
- 从消息历史的
tool_calls字段统计每个工具实际调用了多少次 - 把这个不可推翻的系统日志注入给审校模型
- 强制二元判断:「完成」or「遗漏:xxx」
- 遗漏时自动反馈给主 Agent,继续循环补全
这种设计杜绝了 AI「用文字欺骗自己说做完了」的经典问题。
3. 后台子 Agent——真正的并行开发
主 Agent 可以派生子 Agent 去后台独立完成任务(比如:主 Agent 修 Bug,子 Agent 同步更新文档)。子 Agent 有自己的消息栈和工具集(不含 agent 工具,结构上防止递归派生),通过 Promise.race 和事件通知机制与主 Agent 通信。
4. 动态工具注册
新增一个工具不需要改任何注册代码——把 .ts 文件丢进 tools/ 目录,导出 tool 对象即可。系统提示词里的工具列表也由此动态生成。
5. 上下文压缩
当 token 用量超过窗口 75% 时,用一个轻量 flash 模型把中间历史压缩成 300 字以内的执行摘要,保留系统消息、首条用户消息和最近 3 轮。压缩失败时插入占位提示,而不是静默丢历史。
WorkBuddy 帮了大忙
整个项目是在 WorkBuddy 里完成的,几个特别爽的点:
-
流式 thinking 打印到日志:调试 agentic loop 最大的痛点是不知 AI 为什么选了某个工具。WorkBuddy 的 SSE 流式能力让我用 50 行就实现了 thinking 内容的实时输出,出了问题秒定位。
-
Skills 系统:我把 npm 发布、Docker 镜像构建等重复操作做成了 Skills,一键触发,告别每次手动敲命令。
-
上下文窗口够大:100 万 token 的上下文意味着整本《JavaScript 高级程序设计》塞进去都没问题,Agent 读整个仓库代码完全无压力。
-
代码审查:写完怀疑有边界条件 bug?直接把代码和问题描述扔给 Agent,它跑一遍路径推演就能指出遗漏的
switch分支没有 break。
成果数据
- 核心代码: agent 层 ~1800 行 TypeScript,7 个工具模块
- 工具调用: 支持并发+串行混合调度
- 自审能力: Hermes 双轮兜底,杜绝「假装完成」
- 部署: 一行
include即可接入任意 CNB 仓库 - 测试: config/session/dispatcher/subagent 完整单元测试覆盖

写在最后
WorkBuddy 的核心价值不是帮你写代码,而是让你从「工具使用者」变成「工具设计者」。当你有了一个足够聪明的编程伙伴,你的想象力就是唯一的瓶颈。
如果你也有类似的自建 AI Agent 的想法,WorkBuddy 是个不错的起点——它能帮你把「这个轮子能转吗」的问题,从几周缩短到几天。
更多推荐
所有评论(0)