资讯动态

研发 Agent 架构设计:先拆需求,再谈模型与框架选型

发布时间:2026/9/18 13:44:12 来源:尧图企业网站定制
Agent 架构设计先解决三个没说出口的需求再谈技术选型我接手企业内部研发 Agent 这个项目时第一反应是兴奋。第二反应是需求文档上只有一句话做一个能帮研发提效的 Agent。这种需求我见过太多次了——越宏大越模糊后期撕扯越凶。做企业级研发 Agent真正难的不是大模型调用不是 LangChain 或 Dify 选型而是把提效这个模糊的期望翻译成具体的场景、边界、评估标准和架构约束。我从需求梳理到整体架构落地前后花了三个多月中间推翻过两版设计踩了不少坑。这篇就把从需求拆解到架构设计的完整链路拉一遍重点讲清楚每个环节我为什么这么决策以及哪些地方最容易翻车。1. 先别急着画架构图研发 Agent 的需求到底长什么样大多数团队做 Agent 失败不是技术不行而是需求阶段偷了懒。研发 Agent 不是加一个大模型聊天框那么简单的功能它的需求牵涉到研发流程的每个环节每个环节对智能的容忍度完全不一样。如果不先把这些差异摸清楚后面的架构设计就是空中楼阁。1.1 需求方口中的智能研发助手往往不是一个东西我去和业务方聊需求时发现一个很有意思的情况。产品经理说想要一个能自动写代码的助手研发总监说想要一个能自动化处理重复事务的助手测试负责人说想要一个能自动生成测试用例的助手运维说想要一个出了问题能自动排查的助手。这些人嘴上说的是同一个词心里想的完全是不同的产品。如果我把这些需求汇总成一个无所不能的研发 Agent那基本就宣告项目要延期了。正确的做法是在需求阶段就把这些诉求拆开识别出不同的使用场景和用户角色然后分层匹配。架构设计必须能同时支撑不同复杂度、不同风险等级、不同交互深度的任务模式。有些场景适合全自动执行有些场景必须人工审批后再执行架构上就要预留这个控制开关。1.2 从业务语言翻译成技术能力的三个维度把业务需求翻译成技术能力我有三个惯用的维度来收敛任务类型、自动化程度、风险容忍度。任务类型决定了 Agent 的核心能力是什么。是自然语言理解主导的比如问答、知识检索还是规划决策主导的比如多步任务拆解、代码生成还是操作执行主导的比如调用工具、修改文件、触发流水线。自动化程度决定了交互设计。是单轮对话、多轮对话还是人在环上的人工审批。风险容忍度决定了权限边界和审核机制。改动一行代码和触发生成环境发布风险等级完全不同必须给 Agent 设置不同层级的操作闸门。我拿这三张表去和每一个需求方对齐反复打磨之后得到了一组相对明确的需求画像这才具备进入架构设计的基本前提。1.3 需求优先级排序哪些能力必须自研哪些可以接现成第二件重要的事是需求排序。我当时列了一张能力需求清单把所有业务方提到的能力都写上去然后一个个过哪些是刚需、哪些是伪需求、哪些现阶段必须自研、哪些可以调用外部能力先顶上。一个典型的例子是代码补全。当时有需求方提出要支持 IDE 插件级别的实时代码补全。这个能力如果要自研需要投入大量精力在 IDE 插件适配、上下文裁剪和延迟优化上短期内根本做不完。但需求方真正想要的其实是写代码更省力。所以我的方案是先用现有的 AI 编程助手能力顶上把自研精力集中在更核心的研发流程自动化上。这个决策虽然当时有人不理解但后来验证是对的——先把真正有壁垒的流程规划能力做扎实边界能力后面再慢慢补。2. 研发 Agent 与普通自动化工具的本质区别为什么必须重新设计架构需求梳理清楚之后团队里有人提了个很实在的问题这些需求用脚本不是也能做吗写个自动化工具把代码审查、测试执行、发布触发的流程串起来不也能解决大部分问题吗为什么要搞得像个智能体这个问题的答案直接决定了架构设计的走向。2.1 从固定流程到动态规划Agent 的核心不是能对话而是会变通传统自动化工具的本质是流程固定、步骤预设。你告诉它第一步做什么、第二步做什么它按部就班执行。好处是稳定、可控、容易理解坏处是遇到需求之外的状况就抓瞎一旦流程发生变化就要改代码重新发布。研发场景恰恰充满了不确定性。同一个需求代码评审发现的问题可能完全不同同一个报错信息背后的原因每次都不一样。这些东西没法穷举成固定规则所以传统自动化工具只能覆盖那些高度标准化的场景剩下的大量灵活工作还是得靠人。Agent 的核心价值恰恰在于它是目标导向而不是流程导向。你给它一个目标比如帮我查一下线上这个报错的原因它能自己拆解步骤先查日志、再定位异常堆栈、然后搜索关联代码、最后给出可能的根因。每走一步它根据上一步的结果决定下一步干什么。这才是 Agent 和普通自动化工具有本质区别的地方——动态规划能力。2.2 先统一概念Agent、Skill、Tool、Harness 到底怎么分工概念不统一架构就开始混乱。我在设计前先把团队的概念模型对齐了这样才能聊到同一个频道上。Agent智能体核心决策单元负责任务理解、步骤规划、调用决策。Skill技能面向特定场景的能力打包一个 Skill 内部可以包含多个步骤、多个 LLM 调用和工具调用。Tool工具原子操作的最小单元比如执行一个 Shell 命令调用一个 API读取一个文件。Harness执行框架/容器Agent 运行时的执行环境负责管理上下文、调用 LLM、执行工具、处理异常、控制循环。把这几个概念分清楚之后团队里的讨论效率高了很多。后来我看到网上有人问harness 和 agent 的区别skill 和 agent 的区别其实本质都是概念混淆——Agent 是大脑Harness 是身体Skill 是动作模式Tool 是肌肉。2.3 一个反直觉的架构原则Agent 越薄越好用很多团队做 Agent 喜欢把逻辑全塞进智能体里觉得这样才显得聪明。我的经验恰恰相反Agent 本体应该尽量保持轻薄。所有可以被规则化、被固定的流程逻辑尽量下沉到 Skill 和 Tool 层用确定性的代码去实现Agent 只处理那些真正需要实时推理和决策的部分。原因很简单大模型的推理存在不确定性同一个问题每次生成的步骤可能都不一样这在研发场景里是个很大的隐患。如果让 Agent 用自然语言去描述每一步操作然后自己执行自然语言描述的步骤任何一个环节的理解偏差都可能让整个流程跑偏。相比之下把确定的逻辑写成代码让 Agent 在这个框架里做决策既保留了灵活性又大幅提升了稳定性。当时团队有人不理解说这样不够Agent。后来跑通了第一个端到端场景大家才意识到这个设计是对的。3. 从需求到架构的映射我的整体分层方案前面说了那么多为什么现在聊怎么做。我最终落地的架构是标准的分层设计每一层只做一件事层与层之间通过明确的接口通信。这样设计的好处是出问题时能快速定位替换或升级某一层时不会影响其他层。3.1 接入层先想清楚用户从哪个口子进来接入层是用户与 Agent 交互的入口。我在设计时没有把它做成单一入口而是根据前面需求梳理时的场景差异做了三个入口。第一是 IM 对话入口。这个是使用门槛最低的入口用户在企业 IM 里直接 Agent 提问适合碎片化问答、知识检索、轻量级任务。第二是研发平台嵌入式入口。在代码仓库、流水线、项目管理页面嵌入 Agent 入口用户在具体研发场景里能上下文感知地触达。第三是 API 入口。给自动化脚本和其他系统调用用的适合批量性、程序化的任务。这里特别要提醒一点入口多不是问题但不同入口背后的 Agent 实例应该是同一个后端。如果每个入口都单独开发一套交互逻辑和状态管理后面维护成本高得吓人。所以我在接入层只做协议转换和会话管理业务逻辑全部下沉到后面的编排层。3.2 决策编排层Agent 的大脑是怎么工作的这是整个架构的核心也是我花心思最多的部分。决策编排层主要包括四个模块意图理解模块、规划模块、上下文管理模块、工具调用模块。意图理解模块负责把用户输入转化为结构化指令。比如用户说帮我查一下订单服务最近一小时内的错误日志它需要提取出查询对象订单服务、时间范围一小时、日志类型错误日志这些关键要素。规划模块负责把任务拆解成多步执行计划产出的每一步都要绑定具体的 Skill 或 Tool。上下文管理模块负责维护整个会话过程中的状态包括历史消息、中间结果、用户偏好等。工具调用模块负责实际执行规划中的每一步并处理不同工具间的数据传递和错误恢复。这四个模块里上下文管理是最容易出问题的后面我会专门讲坑。规划模块的设计上我坚持简单优先——能用硬编码流程解决的坚决不靠模型规划。在架构上预留了流程模板和自由规划两种模式前者先用到稳定场景上后者是演进方向。3.3 工具执行层集成边界划在哪直接决定后续改造成本工具执行层承载了 Agent 调用外部系统能力的所有逻辑。研发场景下Agent 主要需要这些工具能力代码操作类读取、创建、修改代码文件、命令行执行类执行 Shell 命令、运行测试、DevOps 集成类触发流水线、查询部署状态、获取日志、知识库检索类搜索内部文档、历史工单、代码注释。以及沟通通知类在 IM 里发送消息、创建任务提醒。每个工具都被包装成统一的接口格式包含名称、描述、输入输出参数、执行方式这样 Agent 才能通过统一的规范去选择并调用工具。接口设计上不能把每个系统的差异直接暴露给 Agent而是要做一层工具适配器。把 GitLab 的 API、Jenkins 的 API、内部文档库的 API 都适配成同一套接口上层感知不到具体系统的差异。这里还有一个关键决策与需求阶段的权限安全直接相关。工具执行层里我加了一个审批网关。所有高风险操作比如触发生产环境发布、删除文件、修改权限都必须经过审批网关审批通过后才真正执行。这一步不是技术问题是信任问题——如果 Agent 连安全边界都无法保证业务方根本不敢把核心流程交给它。3.4 数据反馈与评估层没有度量体系的 Agent 就是黑盒很多 Agent 项目跑着跑着就废了根本原因是说不清楚 Agent 到底有没有用。所以我从架构一开始就设计了数据反馈与评估层让 Agent 的每一次执行都可度量、可评估、可复盘。评估分两层。第一层是执行层评估每次工具调用的耗时、成功率、错误类型、需要人工介入的次数。第二层是结果层评估任务完成率、用户留存率、用户手动修正频率、真实关闭率任务真正完成而不是用户放弃。有了这些数据团队可以构建 Agent 的效能基线持续追踪优化。除了评估维度反馈层还要负责数据回流和标注入库。Agent 执行过程中的成功案例和失败案例都会被记录下来经过人工筛选后沉淀为新的评测集和训练样本。这个数据闭环是 Agent 持续变聪明的关键——不把反馈数据用起来Agent 就永远停留在初始版本。4. 架构落地中的关键转角与排坑记录架构图只是第一步真正的挑战是落地过程中那些想不到的程序崩溃。我选出五个绕不过去的坑每个都是拿实际代价换来的强烈建议你们设计时早点考虑。4.1 上下文管理低成本对话背后暗藏高成本的 Token 开销研发任务往往需要多轮交互Agent 需要记住用户说过什么、已经做过什么。如果架构上不做任何状态管理Agent 就会在每一步都忘事任务根本跑不完。但如果每一步都把完整历史全量发给大模型成本又高得离谱。我的应对方案是分层上下文管理。短期会话状态存在内存里实时更新最近几轮的关键信息。中期任务状态存在独立的存储中比如任务 ID、当前执行步骤、中间产物路径。长期偏好和配置信息存在配置中心里覆盖用户的个性化偏好。每一次请求上下文管理器只把当前任务相关的信息打包给大模型而不是把所有历史无脑塞进去。为了控制 Token 消耗我还设计了自动摘要机制当一个会话的上下文快达到上限时自动总结前面的内容用摘要替代原始对话。这套机制落地后成本直接降了一半多。4.2 工具调用的稳定性一次失败的调用比没调用更可怕工具调用是 Agent 和外部系统交互的桥梁也是最容易出错的地方。我见过最典型的问题Agent 在执行 Shell 命令时正常输出和错误输出混在一起导致它错误地判断命令执行成功了某个工具 API 临时不可用Agent 没有自动重试机制结果整个任务流程就中断了。工具调用的架构设计必须包含明确的超时控制、重试策略、降级方案和失败归因逻辑。一个工具调用失败后Agent 要能区分是工具本身的问题还是环境的问题前者重试后者换方案。此外建议为每个工具增加幂等设计确保重复执行不会造成副作用为关键工具增加 Mock 模式方便在测试环境调试流程而不影响真实系统。4.3 权限与安全边界不是技术选项而是业务的准入许可研发 Agent 的权限边界比普通软件系统更复杂。因为它不仅拥有信息访问权还拥有操作执行权。在技术架构上通常是按角色-权限-资源的模型来控制。比如某个 Agent 实例只允许在测试环境操作只允许访问代码仓库的特定分支只允许触发非生产环境的流水线。但比技术实现更重要的问题是权限申请的流程。如果权限管得过严Agent 什么也做不了价值无法体现如果权限给得太宽业务方不敢用。所以我把权限模型设计成了最小够用原则。先让 Agent 跑通只读类和测试类任务积累信任后逐步放开更高风险的操作权限。同时所有操作全程留痕方便审计回溯。4.4 评估体系没有评测就没有优化研发 Agent 的迭代优化必须建立在可量化的评估之上。没有评测机制的 Agent 项目后期一定会陷入感觉回答质量提升了但又说不出哪里提升了的混沌状态。我落地了一个三层评测体系。第一层是离线评测用固定的测试集跑批量任务对比不同模型、不同参数的输出差异。这个层面主要解决 模型选型和提示词调优 的问题。第二层是线上灰度评测小流量放给真实用户使用采集执行数据和用户反馈。第三层是回归评测每次更新之后用历史积累的问题集验证没有被改坏的能力。因为有了这套评估体系后续每次模型升级、提示词调整、工具逻辑优化我都能用数据说明到底变好了没有。4.5 稳定性压测Agent 不是跑通就行要能扛得住并发最后还有一个很容易被忽略的坑——并发和压测。研发 Agent 一旦接入团队使用频率会很快上来。如果底层架构没有做好并发处理会出现 Redis 连接池耗尽、LLM 调用限流、任务队列堆积等问题。我当时是在压测中发现问题并解决的。架构上一定要带上异步任务队列水平扩展的能力避免在每轮对话中都做大量的同步等待对 LLM 调用层做限流和排队数据库和缓存扛不住热点时进行垂直拆表、水平分片。最好在开发环境提前跑一遍压测脚本把请求峰值时的资源消耗算清楚而不是等到生产环境爆了再补救。5. 技术选型背后的真实理由Model、框架与存储的取舍好的架构不只是一个框架或一堆工具的组合而是在每个选择上都有为什么的决策过程。我按模块逐个拆下选型逻辑和取舍。5.1 模型选型大模型不是越强越好而是越合适越好模型选型是研发 Agent 的第一个关键决策点。我当时评估了三个方向通用大模型如 DeepSeek、GPT 等、编程垂直模型如 DeepSeek-Coder 等、微调定制模型。对于研发 Agent我最终采用了多个模型分工而非单一大模型包打天下的思路。规划决策部分用通用大模型负责理解需求、拆解步骤代码生成部分用垂直模型代码的理解和生成质量明显更优轻量任务比如标题生成、文本摘要用更便宜的小模型降低成本。复杂的多步推理任务再调更强的模型形成按需调度的经济型模型策略。5.2 框架选型要不要用现成的 Agent 框架工程界关于要不要用 LangChain 之类的 Agent 框架争论很久了。我的观点是早期可以用于快速验证但不要把它放在核心链路里。原因是框架抽象层会掩盖太多的系统行为一旦出了问题你需要花大量时间排查到底是框架的哪一层出了问题。研发 Agent 的场景需要高可控性每一步执行、每一次上下文组装、每一个错误处理都必须可观测、可干预。所以我反过来做了个决定核心流程自研把框架能力当作参考实现。这样微调空间更大排查问题也更快。5.3 存储与缓存设计会话、状态、知识库需要不同存储方案研发 Agent 的存储需求是多样化的我用了一套组合方案来应对。会话与任务状态放在 Redis 和 MySQL 中。Redis 处理高频读写和短期会话状态MySQL 存持久化任务记录。上下文快照放在对象存储中因为上下文数据量大、结构松散且适合用低成本的存储方案。向量数据库用于知识库检索。内部文档、历史工单等非结构化数据需要 embedding 后存入向量库支撑语义检索。日志全部走标准日志采集中间件统一沉淀到日志平台里方便追踪全链路。特别要说明的是 Redis 的缓存设计。研发 Agent 会高频查询代码仓库信息比如获取项目结构、读取 README、查询分支列表。这些请求如果每次都打到后端仓库系统既慢又容易被限流。我就在 Redis 里为高频查询加了一层缓存并设计了合适的过期和更新策略效果立竿见影。5.4 评测体系建设从人工看效果到自动化跑分评测体系的工程化是很多团队最容易忽略的部分。一开始团队是在小范围里人工看 Agent 的回答好不好后来人越来越多了人工看效果根本忙不过来。然后我搭建了一个自动化的评测平台把历史积累的典型问题按规则整理成评测集写入标准答案和评分标准。每次 Agent 更新后自动跑一遍评测集生成分数报告。评测分数具体用来指导什么呢第一个明确作用是在 Prompt 调整时看涨跌第二个作用是在多个候选模型之间做选择对比第三个作用是生成回归报告版本迭代时倒推哪些能力变弱了。这套平台建设好后Agent 的迭代速度明显加快因为再也不用靠感觉做决策了。6. 落地路径从最能体现价值且风险可控的场景切入架构设计做完最大的问题变成了从哪里开始切是做一个大而全的 Agent还是从一个很小的场景先跑起来我的选择是后者。6.1 场景选择优先级不是看哪个“智能”而是看哪个“可度量”很多团队选择第一个场景时会选那些看起来很炫酷的功能比如自动写代码。但在企业场景里第一个落地场景最重要的标准是可度量、风险可控、使用频率高。如果第一炮就打不响业务方就很难再信任 Agent。三个参考原则是高频团队每天都在做的、低风险失败后影响面小、反馈快做完后立刻能知道效果。基于这个标准我当时推荐的第一批场景是知识库问答、代码仓库信息查询、自动化测试辅助、发布前检查单生成。6.2 冷启动的架构平滑演进不要为第一版做过度设计第一版做的时候不用把上面的架构全部实现。我建议先做垂直切片从接入层到工具执行层全链路打通一个最简单的场景。等验证完可行性后再逐步扩大场景覆盖把更多的组件模块补齐。演进路线要清晰阶段一是单场景闭环先跑通一个高频场景验证架构核心链路阶段二是多场景并行沉淀通用编排能力验证框架复用性阶段三是跨场景协同 Agents 开始跨任务调度验证多 Agent 协作机制。最后才是全流程智能覆盖研发全生命周期。6.3 组织层面Agent 项目能不能成取决于有没有人管最后说一个很多人忽略但非常重要的点Agent 项目不能只靠技术团队。它需要业务方深度参与需要有一个长期维护的运营团队。Agent 的流程规则、权限策略、反馈标注、效益分析都需要有人持续跟进。如果把这个项目定位成一次性交付那大概率是失败的。我这边是拉了一个虚拟团队包含产品、研发、测试和运维四个角色产品负责梳理场景和评估规则研发负责模型和框架开发测试负责评测集建设运维负责部署和监控。这个团队推动下来项目才真正步入了正轨。在整套架构设计里技术组件是可替换的但架构的骨架和决策逻辑需要稳定。无论未来大模型换成了哪个版本框架换成了哪个更流行的方案只要分层清晰、边界明确、数据闭环持续运转这个 Agent 系统就能持续迭代下去。关于这一点我在实际落地中感受最深的是架构设计的本质不是把先进技术堆上去而是在不确定性中建立起足够稳的框架让所有角色都能在这个框架里有序协作。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价