实战从零开始构建一个Coding Agent:Violin

核心结论(一句话)

Coding Agent 的最小内核是一个可控的 Agent Loop:问模型、执行工具、把结果写回上下文、继续询问,直到完成或触发边界。 模型适配、工具注册、Session、compaction、Skill 注入、插件和客户端协议,都是围绕这个循环补齐可用性、可扩展性和安全边界。

分类提炼

知识节点(10 个独立概念)

关联图谱

上游(基于 / 来自)

下游(应用于 / 验证于)

同级(横向 / 并列)

正文要点

  1. Agent Loop 是所有上层能力的汇聚点:最简形式是 while (turn < max_turns),调用模型、检查 tool call、执行工具、把结果回写消息;max_turns 防止无限循环,错误分类决定重试策略。
  2. 三层边界控制变化传播:模型适配层不让 Provider 差异污染 loop;agent-core 不管理持久化;product/agent.zig 把历史加载、ContextOverflow 重试和新消息保存接起来。
  3. 模型的“能力”必须转成契约:Tool 不只是函数,还要给出可供模型理解的名称、描述和 JSON Schema;注册表负责工具可见性与执行分派。
  4. 上下文治理是长期运行的前提:Session 用 JSONL 保留可恢复历史,compaction 用字符数/4 估算 token,在默认 100K 预算下保留最近 10 条消息并生成约 500 token 摘要。
  5. 规则和 Skill 是外部记忆与行为约束:Resources 按项目优先、全局兜底的路径加载 AGENTS.md / CLAUDE.md / SKILL.md,将可复用规范注入每次模型调用。
  6. 插件系统把事件变成控制面:Lua 可以在工具开始前阻止危险命令、修改参数,在工具结束后修改结果,在上下文阶段注入规则,也可以拦截 Agent 启动或会话压缩。
  7. 协议化让 Agent 入口可替换:Zig daemon 不绑定 Python UI,TCP + JSON Lines 通过 handshakechatturn_startdeltatool_starttool_endturn_endresult 等消息承载运行状态。
  8. 作者主动标出生产缺口:tools 参数未序列化会导致模型收不到工具定义;Lua 没有权限隔离;ACP 尚未接入。toy project 的价值是验证架构假设,而不是宣称已经生产就绪。

对 Seetong / Agent 工程的借鉴

相关链接

透明玻璃自检:wiki 10 节点;digest 8 个核心观点 + 7 个分析角度、21 个钩子;原文图片资源已保留,图片文字未 OCR;文章中的工具清单只确认“6 个基本工具”,未凭空补写名称。