最近在折腾开源项目,发现很多开发者一提到做 AI Agent 就本能地去拥抱 LangChain 或 AutoGPT 这种重型框架。其实,真正核心的 Agent 逻辑并没有那么复杂,甚至可以简单到用一个 while(true) 循环就能搞定。

Workboddy 协助了解项目架构

WorkBuddy 协助了解项目架构

今天想把我最近手搓的一个自主 AI 编程 Agent 的实战经验分享出来。这个项目不仅能自己读代码、修 Bug,还能像真正的工程师一样开“子进程”并行干活。全程没有依赖复杂的 Agent 库,核心逻辑代码只有 180 行,但效果却出奇地好。

Workboddy 解释 agentic loop

WorkBuddy 解释 Agentic Loop 核心逻辑

一、为什么我要重新造这个轮子?

起因是我在用的 CNB 平台上虽然自带了一个 NPC 助手,但它太“死”了——功能受限、没法定制,像个只会复读的机器人。我需要一个能完全自主办事的“打工人”:在 Issue 里 @ 它一下,它就能接管整个任务,读代码、改文件、跑测试、发评论,直到把活儿干完再向我汇报。

为了这个目标,我并没有引入任何第三方 Agent 框架,而是直接用 Node.js 22 + TypeScript 手写了整个调度逻辑。最终的产物是一个很精简的 Docker 镜像,部署时只需要一行配置代码就能接入任意仓库。

二、核心架构:180 行的“心跳循环”

Workboddy 绘制项目架构图

WorkBuddy 绘制的项目架构图

很多人觉得 Agent 很神秘,其实剥开外壳,核心就是一个不断思考和动作的循环。我把这个逻辑浓缩在了一个 180 行的 agentic loop 里。

逻辑链条非常清晰:

  1. 接收指令:用户在 Issue/PR 里 @Agent 提出需求。
  2. 进入循环:构建 Prompt,开启 while(true) 死循环。
  3. 模型思考:调用 LLM(支持流式输出),让它决定下一步干什么。
  4. 上下文管理:一旦发现 Token 占用超过窗口的 75%,立即启动一个轻量级的“Flash 模型”把中间的对话历史压缩成 300 字以内的摘要,保留首尾关键信息,防止“失忆”。
  5. 工具调度:如果 LLM 决定要用工具,就根据工具属性决定是并发还是串行执行,拿到结果后继续循环。
  6. 审校退出:如果 LLM 说“做完了”,不直接听信,而是进入“Hermes 自审”环节,确认无误才算真正的 Done,否则继续循环。

这种“手搓”的方式最大的好处就是透明。每一行逻辑都在你掌控之中,出了问题一眼就能看到是哪一步断了。

三、痛点攻克:Hermes 自审机制

做大模型应用的同学一定遇到过这种尴尬:AI 在文本里信誓旦旦地写着“代码已修复”或“注释已添加”,但实际上它压根没调用工具——它只是在用文字“欺骗”你说做完了(也就是所谓的幻觉)。

为了解决这个问题,我专门设计了一个Hermes 自审机制。它的逻辑非常冷酷但有效:

  • 不看你说什么,看你做了什么。系统会直接去扫消息历史里的 tool_calls 字段,统计每个工具实际被调用了几次,生成了一个不可推翻的系统日志。
  • 强制二元判断。把这个日志扔给审校模型,强制它只能回答“完成”或者“遗漏:XXX”。没有模棱两可的“大概也许”。
  • 闭环修正。一旦发现遗漏,系统会直接把问题反馈给主 Agent,逼着它回去补全动作。

这一招直接把 AI“用嘴干活”的概率降到了零,极大地增强了系统的可靠性。

四、多线程开发:子 Agent 的并行艺术

一个人干活太慢,那就招人。这个 Agent 支持派生出子 Agent

举个场景:主 Agent 正在专注地修一个复杂的 Bug,这需要长时间的逻辑推演。同时,它发现文档也需要更新。这时,它就不会分心去写文档,而是直接生派一个子 Agent 到后台去跑文档更新任务。

子 Agent 有独立的消息栈和工具集,通过 Promise.race 和事件通知机制与主 Agent 通信。更妙的是,为了防止无限递归把服务器搞崩,我特意在架构上禁止了子 Agent 再去派生孙子 Agent。这种设计让并行开发既高效又安全。

五、工具扩展:真正做到“热插拔”

在开发过程中,工具的扩展性至关重要。我设计了一套动态注册机制:想让 Agent 学个新技能?

  • 不需要改任何注册代码。
  • 只需要在 tools/ 目录下丢一个 .ts 文件。
  • 导出标准的 tool 对象。

系统启动时会自动扫描该目录,把工具列表注入到系统提示词里。这种设计让代码库极其干净,想加什么功能随手写个插件就能用。

六、百万级上下文:把“红宝书”塞进去

这次开发用的是支持 100 万 token 上下文的模型(WorkBuddy 这点真的很强)。这相当于什么概念?整本《JavaScript 高级程序设计》扔进去都绰绰有余。

在实际场景中,这意味着 Agent 可以一口气读完整个中型仓库的代码,而不需要我去手动挑选文件给它看。这种“全知视角”让它理解架构和修改代码的准确度大幅提升。以前那种“读到这里忘了开头”的蠢事再也没发生过。

七、开发体验:从用户到设计者的转变

整个项目其实都是我借助 WorkBuddy 辅助完成的。说实话,它的流式 Thinking 能力在调试 Agent 循环时帮了大忙。以前 Agent 走错了路,半天不知道它为什么那样选,现在把思考过程实时 dump 到日志里,出了问题秒级定位。

更重要的是,它让我意识到:AI 的核心价值不是帮你写代码,而是让你从“工具使用者”变成“工具设计者”。

当你手里有了一个足够聪明、上下文够大、且能自我纠正的编程伙伴时,技术瓶颈就不再是“能不能写”,而是“能不能想到”,你的想象力成了唯一的限制。

如果你也有想自建 AI Agent 的想法,别被那些复杂的框架劝退。试着像写业务逻辑一样,手写一个核心循环,你会发现整个世界都清晰了。

标签: none

评论已关闭