三亩地 三亩地SAN MU DI · CODE DIARY
ARTICLE DETAIL

日记详情

真实记录编程学习的某一天,欢迎挑你感兴趣的翻一翻。

从零构建企业级 Coding Agent 的架构设计与工程实践

从零构建企业级 Coding Agent 的架构设计与工程实践

一、为什么需要自建 Coding Agent?

2024 年至今,Coding Agent 经历了从「概念验证」到「生产力工具」的跃迁。Gemini CLI 起步,Claude Code 探索,再到 Codex、OpenCode、PI、Qoder 等百花齐放,Agent 不再是 LLM 的附属品,而是模型能力的放大器,成为 AI 工程化的关键载体。

一个值得关注的趋势是:市面上绝大多数业务 Agent(客服、数据分析、工作流编排)本质上都是 Coding Agent 的泛化变种。理解 Coding Agent 的构建原理,等于掌握了理解所有 Agent 的通用钥匙。

本文将完整拆解一个自研 Coding Agent 的架构设计与实现细节,为正在考虑自建 Agent 平台的团队提供可落地的参考路径。

二、定位与能力边界

该 Agent 已实现的核心能力包括:

  • 多模态交互:支持文本、图片输入与流式输出
  • Skill 系统:可加载自定义技能模板,适配不同开发场景
  • 插件扩展:通过 EventBus 机制支持第三方插件接入
  • 多模型切换:OpenAI、Anthropic、Dashscope 等主流模型一键切换

三、整体架构:五层分离与语言异构

3.1 架构设计哲学

其架构深度借鉴了 PI 的三层分离思想(模型适配层 / 内核层 / 产品层),并在此基础上扩展为五层:

层级职责实现语言核心目标
L1 AI Layer统一多模型 API 差异Zig协议标准化
L2 Agent Core执行引擎(Loop + EventBus + Tools)Zig运行时性能
L3 Product Layer会话管理、资源加载、上下文压缩Zig产品化封装
L4 Server LayerTCP Server + JSON Line 协议Zig跨语言解耦
L5 Client Layer终端交互 UIPython生态快速迭代

关键设计决策:语言异构。Agent Loop、模型适配、会话管理等底层引擎用 Zig 实现,追求极致性能与内存可控性;Client 端用 Python 实现,利用其生态快速搭建终端交互。两者通过 TCP + JSON Line 协议通信,Server 端完全不关心 Client 的实现语言。

3.2 为什么选 Zig?

不是「为了用 Zig 而用 Zig」,而是基于以下工程考量:

  • 内存安全:无 GC,编译期内存管理,适合长时运行的 Agent 服务
  • C 级性能:Agent Loop 需要高频调用模型与工具,性能瓶颈在运行时
  • 跨语言友好:编译为静态库或独立进程,通过 TCP 协议与 Python Client 解耦

四、分层实现详解

4.1 Agent Loop:一切的核心

Agent Loop 的本质是一个状态机,在「调用模型」与「执行工具」之间循环,直到模型给出最终答案。

while (turn < max_turns) { // 1. 调用模型 assistant = model.complete(messages, tools); // 2. 检查是否触发工具调用 if (!assistant.hasToolCalls()) break; // 3. 执行工具并将结果回写 for (tool_call in assistant.toolCalls()) { result = tool_registry.execute(tool_call.name, tool_call.args); messages.append(result); // 关键:模型需要看到结果才能决策下一步 } }

三个必须回答的工程问题:

  • 为什么必须设 max_turns?模型可能陷入「工具调用循环」(例如反复读取同一个文件)。max_turns 是安全阀,默认设为 15 轮。
  • 为什么工具结果必须 append 回 messages?这是 ReAct 范式的核心,模型需要基于工具返回的观测结果(Observation)进行下一步推理。没有回写,Loop 就失去了连续性。
  • 为什么 tools 定义要传入 complete()?现代 LLM 的 Function Calling 需要在请求体中携带 tools 字段,模型据此决定何时触发工具。这是「模型自主决策」的前提。

4.2 错误分类与重试策略

Agent Loop 只关心循环本身,错误处理由上层封装。我们将错误分为四类,每类有独立的处理策略:

错误类型处理位置重试策略关键特征
网络错误retryComplete 内部指数退避 ×3请求未发出
Context Overflowagent.zig压缩上下文 → 整轮重试不是 retry,是 compact+restart
LLM 返回 errorretryComplete 内部指数退避 ×3请求成功,内容异常
工具调用错误封装为 ToolResult喂回给模型,由模型自主决策文件不存在、命令报错等

工程启示:不要把所有错误都交给「重试」解决。Context Overflow 的根治方案是上下文压缩,而非简单重试;工具错误应该让模型看到失败信息并自主调整策略,而不是在框架层静默兜底。

4.3 AI 模型适配层:把供应商差异拍平

不同模型 API 对工具调用、流式协议、错误码的表达各不相同。通过适配器模式统一为四个核心抽象:

  • Message:统一消息格式
  • Tool:统一工具定义
  • AssistantMessageEvent:统一助手响应事件
  • streamSimple():统一流式接口

上层 Agent Loop 完全不感知「这是 Anthropic 的 tool_use 还是 OpenAI 的 function call」,只处理统一后的toolCall内容块。

当前适配的协议:

适配器请求端点响应格式流式协议
OpenAI/chat/completionsChat CompletionSSE data:
Anthropic/v1/messagesMessages APISSE event:

两个适配器代码量接近(531 vs 558 行),差异集中在:

  • 请求体格式(messages[] vs content[])
  • 工具调用结构(tool_calls[] vs content[] 中的 tool_use block)
  • 流式协议前缀(data: vs event:)

流式输出的实现路径:

模型适配器收到 SSE chunk → 调用 stream_callback → Agent Loop 通过 EventBus 发射 message_update 事件 → Client 实时追加到终端

系统不内置任何模型,全部从~/.agent/models.json动态加载,实现「配置即模型」:

{ "providers": { "openai": { "base_url": "https://api.openai.com/v1", "api": "openai-completions", "api_key": "$OPENAI_API_KEY", "models": [{"id": "gpt-4o", "contextWindow": 128000}] } } }

4.4 Tool System:Agent 的手和脚

工具系统的核心抽象:

pub const Tool = struct { name: []const u8, description: []const u8, parameters: []const u8, // JSON Schema execute: ToolExecuteFn, };

系统内置 6 个基础工具,覆盖 Coding Agent 的最小可用集合:

工具功能典型场景
read读取文件内容代码审查、上下文理解
bash执行 shell 命令构建、测试、环境检查
edit编辑代码文件增量修改、Bug 修复
write写入新文件生成代码、创建配置
grep文本搜索代码定位、日志检索
find文件查找项目结构探索

工具注册表(ToolRegistry)采用懒加载设计:Agent 启动时只注册工具定义(供模型决策),实际执行时才加载工具实现。这种「定义与实现分离」的设计让第三方插件可以动态注册工具而不影响核心运行时。

4.5 Product 层:从 Demo 到生产工具

写一个能跑的 Agent Loop 只需半天,但把它变成团队每天可用的开发工具,需要解决五个「麻烦但关键」的问题:

能力工程价值实现要点
会话 JSONL 持久化重启后可恢复;支持任意节点回滚分支基于 JSON Line 的增量写入
资源加载自动加载项目规则、技能模板、扩展约定目录结构 + 热更新监听
内置工具集读文件、执行命令、编辑代码沙箱执行 + 权限白名单
上下文压缩防止长会话爆窗基于 Token 计数的智能截断 + 摘要生成
插件系统权限门、远程执行、定制 UIEventBus + 动态库加载

4.6 Event System:插件化的基础设施

采用 EventBus 实现全链路事件驱动,核心事件类型:

  • session.started/session.ended:会话生命周期
  • message.update:流式消息增量
  • tool.calling/tool.completed:工具执行过程
  • agent.thinking:模型推理过程(用于调试)

为什么用 EventBus 而不是回调链?

  • 解耦:Loop、适配器、工具、插件互不依赖
  • 可观测:所有关键节点都可被外部监听,便于日志、监控、审计
  • 扩展:新插件只需订阅事件,无需修改核心代码

4.7 网络层与 Client 实现

Server 端暴露 TCP Server(默认端口 9876),采用 JSON Line 协议:

  • 全双工通信:Client 可随时发送steer(干预)或abort(中断)指令
  • 流式推送:Server 通过 EventBus 将事件实时推送到 Client
  • 语言无关:Python Client 只是官方实现,理论上任何语言都可对接

Python Client 的职责:

  • 终端 UI 渲染(基于 Rich 库)
  • 用户输入捕获与指令解析
  • 会话状态本地缓存
  • 插件的 Python 端实现

五、关键工程决策复盘

5.1 上下文压缩策略

长会话场景下,上下文窗口溢出是必现问题。我们的解决方案不是简单截断,而是分层压缩:

  • 首轮保留:系统提示词(System Prompt)永远保留
  • 近期保留:最近 N 轮对话完整保留(N 可配置,默认 6)
  • 历史摘要:更早的对话通过 LLM 生成摘要,替换原始消息
  • 工具结果压缩:过期的工具返回结果只保留「是否成功 + 关键输出」

5.2 安全与权限设计

Coding Agent 拥有文件读写和命令执行能力,安全是不可回避的话题:

  • 沙箱执行:bash 工具默认在隔离进程中运行,可配置 chroot
  • 权限门:敏感操作(如rm -rf、git push)需要用户显式确认
  • 操作审计:所有工具调用记录到本地日志,支持回放
  • 模型无关:安全策略在 Product 层实现,不依赖特定模型的「善良」

5.3 多模型切换的工程意义

支持运行时切换模型,这在企业场景中有实际价值:

  • 成本优化:简单任务用轻量模型,复杂任务用强模型
  • 容错降级:主模型不可用时自动切换到备用模型
  • A/B 测试:同一任务用不同模型执行,对比效果

六、总结:自建 Agent 的 checklist

如果你正在考虑团队内部自建 Coding Agent,以下问题需要在架构设计阶段回答清楚:

  • Loop 层:你的 Agent Loop 是否支持「模型决策 → 工具执行 → 结果回写」的完整闭环?错误分类是否足够精细?
  • 适配层:是否预留了新模型接入的扩展点?流式输出是否全链路打通?
  • 工具层:工具定义与实现是否解耦?是否支持动态注册?安全边界在哪里?
  • 产品层:会话能否持久化?上下文压缩策略是什么?插件机制是否足够开放?
  • 协议层:Client 与 Server 的通信协议是否语言无关?是否支持流式事件推送?

这套架构的实现证明:Coding Agent 的核心复杂度不在「调用模型」,而在「工程化封装」:状态管理、错误处理、协议统一、安全隔离、可观测性,这些才是决定一个 Agent 能否从 Demo 走向生产的关键。

学AI大模型的正确顺序,千万不要搞错了

🤔2026年AI风口已来!各行各业的AI渗透肉眼可见,超多公司要么转型做AI相关产品,要么高薪挖AI技术人才,机遇直接摆在眼前!

有往AI方向发展,或者本身有后端编程基础的朋友,直接冲AI大模型应用开发转岗超合适!

就算暂时不打算转岗,了解大模型、RAG、Prompt、Agent这些热门概念,能上手做简单项目,也绝对是求职加分王🔋

📝给大家整理了超全最新的AI大模型应用开发学习清单和资料,手把手帮你快速入门!👇👇

学习路线:

✅大模型基础认知—大模型核心原理、发展历程、主流模型(GPT、文心一言等)特点解析
✅核心技术模块—RAG检索增强生成、Prompt工程实战、Agent智能体开发逻辑
✅开发基础能力—Python进阶、API接口调用、大模型开发框架(LangChain等)实操
✅应用场景开发—智能问答系统、企业知识库、AIGC内容生成工具、行业定制化大模型应用
✅项目落地流程—需求拆解、技术选型、模型调优、测试上线、运维迭代
✅面试求职冲刺—岗位JD解析、简历AI项目包装、高频面试题汇总、模拟面经

以上6大模块,看似清晰好上手,实则每个部分都有扎实的核心内容需要吃透!

我把大模型的学习全流程已经整理📚好了!抓住AI时代风口,轻松解锁职业新可能,希望大家都能把握机遇,实现薪资/职业跃迁~

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

← 返回列表