namiai《从零手写 Agent》学习笔记(EP01–07)
Stone 的学习笔记,2026-11-06。
说明:以下是我读完 EP01–07 后的个人理解与延伸,不是 namiai 原文的内容。原文导读见 《从零手写 Agent》导读。记录于 2026-11-06。
一、最小循环就是一个 double loop
外层给 LLM 输入 prompt,内层调用工具。当模型不再请求任何工具,它的结果就是最后的输出。
模型是没有状态的,所以每一次输入应该是前面的历史,加上人或工具的反馈。
有多少工具可以用,应该在系统 Prompt 里说明,或者用 MCP 调。skill 就是一段复杂的 prompt,有名字与介绍,这个要每次注入(名字与介绍),具体内容按需加载。
二、上下文:我的 quote-ai 做法
我第一次写的 AI 应用叫 quote-ai,主要是把人的语言转化为固定格式的 API 输入(JSON 格式)。我当时就觉得把所有的历史都作为上下文放进去特别傻,所以我的上下文就是:把没有完成的固定格式与用户的语言输入,让 AI 来填表;没有填完的,让 AI 问用户接着输入。
所以我的 prompt 就特别小:除了系统提示词,就是没有完成的输入表格,加上用户的口头输入语言。
作为一种特定任务的小 Agent 或工具,这种设计就足够了。不过这是任务形状固定才成立;通用任务形状不固定,上下文迟早会爆掉,还是得有压缩或摘要的策略。
三、Agent 的权限
我认为 Agent 能自己写工具、也能改 skill 是非常重要的,不然只能做特定的任务。所以不同类型的 agent 的 permission 是不一样的。
顺带说明:namiai 的 EP05 里 skill 是只读的,让 agent 自己改 skill 是我自己的主张,不是原文的说法。
权限比较大的 agent(比如 OpenClaw)最好放在沙盒里面。
一个新 Agent 刚开始用的时候可以少给一些权限,等慢慢用熟、框架成熟以后,权限可适当放宽——就像我们用一个新雇员,有一个适应与培训的过程,权限也是慢慢放给他的。
权限不光不能只靠 prompt,要靠代码与框架、电脑及网络 Permission 的设置。
如果需要用户执行的审批,可以这样:用户的审批是软件框架里的硬审批,点击以后就执行命令,不需要再回到 Agent。
四、接入聊天软件与 WorkBuddy 的界面
接入聊天软件,不同软件有不同的解法。架构应该有专门一层用于跟用户和软件交流,包括 authentication。
不同聊天窗口应有自己的 session 与工作区,也是挺好的设计。
我在考虑 WorkBuddy 外面的用户界面会是怎样:除了 command line,可以写个 web 界面,也可以写个聊天框,最好能接入团队聊天工具。
五、定时任务与心跳、无人值守
在我看来,定时任务与心跳是一回事儿:有结果就输出结果,没有结果就静默。大模型应该足够聪明,知道什么需要知会我、什么不用烦我;返回固定格式代码以便外面的框架识别处理。
无人值守的任务的确要事先给权限。如果发生需要额外权限的事情,安全起见最好等人上线审,因为这个说明这个任务超出了原来无人值守任务的范围。
六、做 AI 没有标准答案
我认为怎样做 AI 没有标准答案,不要让别人的做法限制住自己。最合适的办法,就是最好的办法。
补充(对照验收)
- 三层都讲清了:原理(double loop、无状态模型)、实现(quote-ai 填表式上下文、skill 按需加载)、trade-off(权限渐进放宽 vs 能力、沙箱 vs 自由度、硬审批 vs 每步确认)。
- 与原文的咬合:double loop 对应 EP18 主线“模型只提请求,执行由代码决定”;上下文最小化与 EP18 共识“上下文先便宜后贵”同向;权限渐进 + 硬审批 + 沙箱对应 EP03 权限分级,超出原文的是“新雇员适应期”类比与框架硬审批设计;心跳 = 定时任务对应 EP07;聊天接入分层对应 EP06。