Agent 架构决策记录:用 ADR 解释五个关键取舍 @ Lin | 2026-09-09T10:00:00+08:00 | 3 分钟阅读 | 更新于 2026-09-12T10:00:00+08:00

围绕流程、存储、协议、并发和模型路由记录约束、代价与重新评估条件。

本文于 2026-09-12 补充整理,按 2026-09 专题归档。示例为方案设计,参数用于说明方法,不代表已上线项目或实测成果。

ADR 记录的是为什么这样做

架构图能告诉读者有哪些模块,却很难解释为什么没有采用另一种方案。ADR,即架构决策记录,可以把背景、选择、代价和重新评估条件放在一起。

下面是企业知识库与工单助手的五项候选决策。状态均为“设计建议”,尚未经过真实项目验证;它们用于演示如何形成可讨论的技术判断。

决策一:固定流程与自主循环并存

背景: 查工单状态的路径明确,综合排障则依赖中间结果。

选择: 固定查询直接调用服务;知识问答使用确定性检索流程;开放式排障使用有预算的 Agent 循环。

代价: 需要维护路由与不同验收规则。路由失败时要澄清,不能把所有请求无条件送给自主循环。

重新评估条件: 固定流程无法覆盖的有效请求持续增加,且自主循环在同预算对照中确有收益。模式区分可参考 Anthropic 的 workflow 与 agent 讨论

决策二:先模块化单体,再按瓶颈拆分

背景: 初期团队规模和负载尚未证明独立部署的必要性。

选择: 代码中隔离任务、知识、工具与模型适配,先共用部署单元;异步 Worker 可独立扩展。

代价: 进程故障影响面较大,模块资源隔离需要主动设计。共享数据库也可能形成隐性耦合。

重新评估条件: 文档处理明显干扰问答、独立团队需要发布自主权,或某个模块的故障反复影响其他业务。

决策三:持久化任务状态,而不是只保存对话

背景: 对话中写着“已创建”,不能证明下游实际完成;长任务还会跨越进程重启。

选择: 任务状态、提案、审批、操作账本分别持久化。对话用于交互,工具终态来自业务系统。

代价: 存储与恢复逻辑更复杂,需要处理旧版本任务。

重新评估条件: 若产品收缩为完全无副作用、无需恢复的短问答,可以简化状态模型。不能仅为了减少表数量,就删除仍有业务意义的状态。

决策四:MCP 放在集成边界

背景: 存量 Java 服务内部调用已经有稳定类型和治理体系,外部工具生态需要协议接入。

选择: 对外工具接入采用 MCP 适配,内部领域服务保留类型化接口;协议对象不直接进入核心领域模型。

代价: 需要维护映射和契约测试,无法把所有 SDK 示例原样复制进业务层。

重新评估条件: 跨语言和跨团队复用明显增加,统一协议带来的收益超过适配成本。授权边界仍需依据 MCP 授权规范和业务策略共同实现。

决策五:并发机制与资源预算分开

背景: 模型调用主要等待网络,但供应商和数据库资源有限。

选择: 对阻塞式 Java 21 链路评估虚拟线程,同时通过许可、限流和截止时间约束资源;已有响应式链路按实测决定是否保留。

代价: 需要同时理解线程调度与资源池,不能只调整一个“最大线程数”。

重新评估条件: 实测瓶颈变化、JDK 升级或依赖库变化。每次重评都应固定负载和下游配额,避免比较条件不同。

怎样让决策记录持续有用

每项 ADR 还应补充负责人、日期、状态和相关实验文件。实施后把“设计建议”改为“已采纳”,并链接实际变更;被新决策替代时保留旧记录和替代关系。

面试表达时可以用一项决策展开:当时有哪些约束,选择牺牲了什么,出现什么证据会改变看法。承认适用边界,并不削弱方案;它让选择可以被验证和修正。


查看系列导读与阅读路线

© 2019 - 2026 Lin 的博客

Powered by Hugo with theme Dream.

avatar
关于我

Lin 的 ❤️ 博客

技术专题:Java Agent 工程化:从知识库问答到可靠业务执行。围绕 RAG、工具治理、任务恢复与 Java 平台架构整理设计思路和验证方法。

记录一些 🌈 生活上,技术上的事

  • 🛠️ 技术阵地: 深耕 Java 开发 ,目前向 AI 应用领域探索与拓展。这里主要记录我从后端架构到 AI 赋能的进阶之路、技术思考以及日常的 debug 血泪史。始终致力于写出优雅且没有 bug 的代码(尽量)。
  • 🌈 生活侧写: 偶尔脱下极客的外衣,我也会在这里分享生活中的灵光一现。不管是好用的效率工具,还是周末的一场骑行,都是构成我真实生活的一部分。