agent-native架构设计:从意图契约到五个支点,老系统如何平滑迁移

发布时间:2026/9/28 16:22:11
agent-native架构设计:从意图契约到五个支点,老系统如何平滑迁移 跟做平台架构的朋友聊“agent-native”我发现一个特别普遍的理解偏差很多人把它当成“在现有的系统上加一个大模型入口让用户用自然语言对话”。这大概就是把 AI-native 和 agent-native 混为一谈了。这中间差的不是一层 API 壳子而是整个系统设计的基本假设要换一套。agent-native 不是说系统里跑着一个 agent而是从数据模型、接口契约、权限体系到交互界面整个系统一开始就是为“自主行动”的智能体设计的。这篇文章我把自己的理解和落地经验整理出来适合正在做 AI 应用架构、平台改造或者准备把手头老系统往 agent 方向演进的朋友看完你会知道该从哪下手也会知道哪些坑我替你踩过了。1. 从“AI-native”到“agent-native”一次架构范式的位移聊 agent-native 之前先明确它不是什么。它不是一个框架不是 LangGraph、CrewAI 这类具体工具也不是某个 SDK 能解决的问题。它是一组架构决策的集合描述的是“系统以 agent 为第一公民”的设计理念。这个词的命名方式其实是借了 cloud-native 的梗。cloud-native 并不是“把应用部署到云上”而是应用从诞生第一天起就按云的弹性、分布式、不可变基础设施来设计。照这个逻辑agent-native 也不是“在现有系统上接一个 agent”而是整个系统从数据表结构到 API 边界从权限模型到交互方式都预设了“运行主体是一个具有目标、状态和行动能力的智能体”而不是一个“收到请求就返回固定结果的程序”。普通系统和 agent-native 系统在设计假设上差在哪我列一个自己的对比清单维度传统系统的基本假设agent-native 的基本假设调用方确定性程序参数在运行时可校验意图驱动的智能体参数由模型生成天然带概率性状态短事务用完即弃长程推理跨多轮会话、跨任务维护目标与记忆接口为程序调用设计字段固定为能力发现设计可描述、可协商、可容错编排固定流程BPM、ETL 这类确定性链路动态路径由 agent 根据上下文决定下一步权限权限绑定到人权限绑定到 agent 实例并叠加工具级限制交互GUI 是唯一入口对话式 CUI 与 GUI 并存人可随时介入举一个具体例子你就明白了。传统 CRM 系统里“创建销售线索”这个 API 接收 owner_id、company_name、amount 几个字段前端下拉框把值限制得死死的后端 trust 请求方的逻辑。agent-native 的 CRM 里同样的能力被打包成一个 tool工具描述写清楚“什么时候该调用这个工具、字段的格式要求”agent 自己去判断要不要调用、传什么参数系统在权限层再兜底校验一次甚至允许 agent 在缺少信息时主动反问用户。系统不再假设调用方“懂规矩”而是把自己设计成“能被不完美的调用方安全地使用”。所以agent-native 的核心转变只有一个把确定性契约换成意图契约。这不是放不放大模型的问题是你敢不敢把系统的控制权交给一个会推理、会犯错、会自己变通的运行主体。想明白这件事后面的所有设计决策都有了原点。2. 为什么老系统喂不饱 agent单体应用的四道天花板很多团队会说“我们有 API让 agent 调不就行了”结果一接就发现处处别扭。这不是 API 数量不够而是老系统的设计逻辑和 agent 的运行逻辑根本不在一个频道上。2.1 第一道天花板API 契约容不下“意图”传统 API 是为程序设计的程序不会说“帮我找一个靠谱的供应商”程序只会说“GET /suppliers?regionCNpage1”。你要让 agent 完成前者它得自己拆解目标、决定查哪些参数、处理缺参数的情况。问题在于绝大多数现有 API 的自然语言描述都是缺失的字段命名也是给工程师看的不是给模型看的。我见过一个订单系统的接口参数叫 tx_flagagent 在调用时根本无法理解这该填 0 还是 1于是每一次调用都像在猜谜。这就是典型的“能力存在但不可发现”。老系统的 API 更像一本没有目录、没有说明书的字典而 agent 需要的是“能力目录 调用规范 异常处理说明”三者齐备的工具接口。2.2 第二道天花板状态管理撑不起长程任务传统系统的状态是围绕“一次请求”设计的。用户下单、支付、回调几个步骤走完状态机就终结了。但 agent 的典型场景是用户说“帮我规划下周的出差”agent 要查日程、查航班、查酒店、比价、提交审批中间可能等用户回复也可能自己执行任务持续几个小时甚至几天。这个过程中 agent 需要记住用户的偏好靠窗座位、低星级酒店、预算上限、记住自己做到哪一步机票订了、酒店还没选这些信息散落在不同的表、不同的服务里传统系统的会话状态根本覆盖不住。没有持久化和层级化的记忆设计agent 就只能在每一轮对话里“失忆”用户得反复重复需求体验立刻崩掉。2.3 第三道天花板编排逻辑没有“灰度空间”传统工作流最大的问题是确定性太强。订单流程就是下单→支付→发货中间哪个环节失败就回滚或人工介入。但 agent 的自主性恰恰体现在“路径不确定”第一次尝试的 API 挂了它能不能换一条路供应商 A 没档期它能不能自动查供应商 B传统流程引擎把每一个分支都画死了而 agent 需要的是“目标确定、路径开放”的编排空间只在关键的合规节点上设置 check point。老系统给不了这种弹性硬改流程引擎的成本高到劝退。2.4 第四道天花板权限模型分不清“人”和“agent”传统权限体系的单位是“用户”RABC 模型里角色绑定给人再绑定到权限。agent 打破了这套模型一个 agent 可能同时服务多个用户它在不同任务里有不同的授权范围而且它可能在凌晨三点没人看管时自己执行操作。等于说你在老系统里给一个 agent 开账号要么权限太大要么权限太小完全没有“按会话按工具临时授权”的粒度。这四道天花板决定了agent-native 不是靠加一层封装层能解决的你得触碰老系统最底层的设计决策。这也是为什么我说这轮改造中最难的部分往往不是模型本身而是怎么让旧世界的“确定性”和新世界的“非确定性”在同一套系统里共存。3. agent-native 的五个设计支点状态、工具、编排、交互与观测下面是我认为一套 agent-native 系统必须想清楚的五个支点。这不是从某个框架里抄来的而是我改造过两套业务系统之后沉淀出来的设计清单你可以直接拿去做架构评审的 check list。3.1 状态与记忆让 agent 有“上下文连续”的能力agent-native 系统的状态设计要分三层我习惯叫它们工作记忆、情景记忆和语义记忆。工作记忆working memory对应当前任务的上下文包括用户当前目标、已经执行到哪一步、还没完成的子任务通常放在会话级存储里时间短、更新快。情景记忆episodic memory是 agent 历次执行任务留下的经验轨迹比如“上次用户拒绝了推荐靠走廊的座位”存到向量库或事件表里跨会话生效。语义记忆semantic memory是领域知识比如公司的差旅政策、供应商的合同条款通常来自知识库或配置中心。三层记忆再配合一套写入策略会话结束时提炼本轮 key events汇总后决定哪些进情景记忆重要信息在写入前做一次“是否反应用户真实偏好”的规则校验避免把模型的胡说八道也存进去。没有这套分层agent 百度的“记忆”就是一堆无法区分轻重、过期不失效的噪音。3.2 工具抽象把能力变成可发现、可校验的实体这是 agent-native 系统里最值得花时间的地方。一次工具调用的失误可能比模型输出幻觉更致命因为工具调用直接触达真实世界。我给出的工具设计规范是五件套自然语言描述、参数 JSON Schema、幂等设计、细粒度权限、沙箱或审核机制。自然语言描述决定 agent“什么时候想到用它”JSON Schema 决定参数合法性幂等设计保证网络抖动重试时不出两笔订单权限和审核则保证最坏情况可控。这里有个我自己的硬性要求每一个 tool 都要有一个description字段写清楚触发条件还要有failure_description告诉 agent 什么情况下这个工具不能用。比如一个查天气的工具你写“查询全球任一城市的实时天气”就够了但如果你写“查询天气”agent 可能把用户随口一句“今天外面冻死了”也误解成要调它。工具描述本质上是给 agent 写的说明书写得好不好直接影响体验上限。3.3 编排策略workflow、plan-execute 与自主循环的梯度设计编排不等于“让 agent 自由发挥”。我目前把编排分成三档新系统建议从第一档起步按比例慢慢往第三档释放第一档确定性 workflow。核心链路是固定的比如“下单→支付→通知”每一步都是事先画好的 DAG。适合合规敏感、错误代价高的场景。agent 只负责在节点之间做判断和填充参数。第二档plan-execute。agent 先做任务拆解生成计划plan然后逐步执行每完成一步再修正计划。适合中等复杂度任务比如“调研竞品并生成报告”。第三档自主循环。完整的 ReAct 模式agent 感知到新信息就触发新一轮推理和行动。灵活度最高也最烧钱、最难兜底只适合探索型任务。我的经验比例是 70% 的流量走 workflow20% 走 plan-execute剩下 10% 才开放自主循环。不是说自主循环不好而是工程上要对它的失控兜底成本极高。后面第五部分我会展开讲为什么。3.4 交互界面CUI 与 GUI 并存让过程可干预agent-native 系统的交互设计有一个容易被忽略的原则把 agent 的思考过程可视化并且允许用户随时叫停。对话式 CUI 是入口但如果只有对话用户会非常焦虑因为 agent 在后台干了什么他完全看不见。我建议在 GUI 旁做一个“运行轨迹面板”实时展示 agent 当前在调哪个工具、读取了哪些数据、下一步打算干嘛。用户看到轨迹就能说“这个方向不对重新来”。这比事后看结果再纠正要省太多时间。换句话说agent-native 不等于全自动人机协同的“人在回路”设计才是生产级系统的标配。3.5 可观测性记录决策轨迹而不只是记录结果传统日志只记录“调用了什么、返回了什么”但 agent-native 系统要记录“为什么调用”和“为什么选这条路”。我落地的方式是给每个会话一个 traceId把每一步的输入、模型推理摘要、工具调用参数、返回结果、token 消耗、延迟全部串成一条 JSON Lines 事件流。存储成本换来的是调试效率和评测能力非常值。一套可观测体系至少要在日志里包含四个字段意图快照agent 认为自己当前在完成什么、决策原因为什么选这个工具、工具返回摘要不用存全量存关键字段、人工干预记录用户在哪个节点踩了刹车打印。有了这些后面才能做离线重放和回归测试。4. 迁移路径先改造工具层而不是先上大模型六次经验里我学到最大的一点就是别上来就选模型、搭框架先把你的能力层变成“agent 友好的工具层”。这一步做好了后面所有工作都顺做不好后面全是给之前的仓促还债。我建议的迁移步骤是这样的你可以照着排迭代计划4.1 第一步做一次能力盘点圈出“会被 agent 直接调用的能力”把你系统里的每个 API、每个服务方法看一遍问一个问题如果 agent 要完成一个用户目标它最可能用到哪几个能力通常答案是查询类、操作类、计算类三大块。先圈出最小可用集不要试图一次把所有 API 都工具化。我见过有团队第一迭代就把 200 个接口全包成 tool结果 tool 目录比 API 目录还难维护agent 也经常选错。用 20% 的核心 API 覆盖 80% 的典型任务这才是稳妥的起步姿势。4.2 第二步为每个核心能力补“工具说明书”这一步是基本功也最容易被赶进度跳过。给圈出来的每个 API 写一份结构化描述内容包括触发条件、输入参数说明每个参数都给示例值、输出说明、失败说明、权限要求、幂等性说明。这些描述最终会成为 tool 定义里的 description 和 JSON Schema直接喂给模型。写描述有几条经验一是描述里要有“当用户想要……时”这样的触发句式二是每个枚举值给一句人话解释不要只给状态码三是明确写清失败场景防止 agent 在工具失败后反复重试同一个包栈。4.3 第三步搭建 AI Gateway统一管模型和工具的鉴权agent-native 系统里不能每个服务自己接模型接口那样成本、权限、审计全乱了。我会先搭一个 AI Gateway统一负责三件事模型路由不同任务走不同模型便宜的干粗活贵的干细活、租户隔离不同业务线的 agent 之间互相不影响、安全审核内容输入输出的敏感词和合规检查都在这层过一道。Gateway 这层做了后续换模型、加模型对上游业务都是透明的agent-native 架构才不会锁死在某个模型厂商上。4.4 第四步记忆层与编排层并行建设记忆层落地的顺序是先做工作记忆会话级再逐步加情景记忆跨会话语义记忆最后再接。编排层的顺序是先用 workflow 把最小可用集跑通再在部分流程里换成 plan-execute最后才试点自主循环。两条线要并行推进因为记忆是给编排提供“连续性”的底座编排反过来决定记忆要存什么。4.5 第五步改造交互层上线可视化和干预入口最后一步才是把 GUI 加对话入口。我特意把它放在第四步之后是因为如果没有工具层和编排层的支撑对话入口就是个“花架子”用户问了问题agent 也答不好。交互层的上线节奏也建议先做“轨迹面板 用户确认按钮”再做全自动执行。整个迁移过程里最忌讳的一件事就是一开始就买个大模型框架然后把所有业务逻辑堆在 agent prompt 里。框架只是个壳子地基还是你自己的工具抽象和状态设计。5. 实战中反复踩的四个坑编排失控、记忆污染、成本爆炸与评测失灵单独掏出这四个坑是因为它们每个我都付出过真金白银的代价而且非常有普遍性。5.1 坑一工具描述不清agent 在测试环境和生产环境“乱窜”我接手过一套加了 agent 的工单系统调试时发现 agent 经常把测试环境的数据当成真实数据反馈给用户。定位到最后原因是“查工单”这个工具的描述里没有环境隔离说明agent 在对话里发现两个 API 都能满足意图时完全凭字符串相似度选了一个结果选了测试库。修复方式是在工具描述里强制加environment字段并规定 agent 在不确定时要反问用户“你指哪个环境”。从那以后凡是暴露给 agent 的工具必须明确标环境、标数据范围这个失误再没出现过。5.2 坑二记忆不设防向量库变成垃圾场早期我做记忆层策略简单粗暴每轮对话结束把聊天记录全塞进向量库。一个月后检索出来的全是“用户中途随口说的抱怨”和“无关的寒暄”。后来我加了写入过滤先给每条候选记忆打分包含用户明确偏好、任务决策、可执行的约束信息才算有效再按主题做一次聚类去重重复内容只保留最新版本最后做时间衰减超过 90 天没再次被引用的情景记忆自动降级。清理完之后检索质量明显提升。记忆不是缓存写进去的每一条都会影响后续决策质量把关必须前置。5.3 坑三token 成本失控自主循环反而不敢用我第一次让一个自主循环的 agent 跑一个竞品分析任务它调了近 40 次工具中间有 10 多次是完全重复的查询一次任务烧掉了大概 30 万 token。当时整个人就清醒了。后来成本控制我用了三招一是设置工具调用步数上限默认 15 步超出必须请求人工批准二是优先用 plan-execute先把计划列出来再执行比全自主循环平均节省 40% 的调用次数三是对重复查询做结果缓存agent 连续多次查询同一参数时直接返回缓存结果。成本问题我不建议靠“换更便宜的模型”来解决那是治标不治本。真正有用的还是限制决策空间和缓存中间结果。5.4 坑四评测失灵单测全绿集成全崩传统单测测的是“给定参数断言返回”但 agent 系统里的任务是开放式的同一个需求可能走出完全不同的路径。早期我按传统思路写了一堆“调用工具 X→断言返回 Y”的用例结果全部通过一上真实对话就崩。后来我改成围绕“任务成功率 路径合理性”来设计评测给每个典型任务准备 5 到 10 个变体 prompt跑完自动比对是否达到目标再通过日志体系做离线重放把某次线上失败的会话喂回测试环境看新版本的 agent 是否走出更好的路径。评测体系跟主架构一样必须从“结果导向”转到“过程 结果双导向”。6. agent-native 系统的五维评估我不再只看“回答对不对”最后分享一下我现在用来评估一套 agent-native 系统做得好不好的指标表。这个表格迭代过三轮目前是我觉得最贴合实际生产价值的版本维度核心指标我的参考线说明有效性任务成功率、部分成功率核心任务成功率 ≥ 85%允许部分成功比如“机票订好了酒店没定”算部分成功效率工具调用步数、响应延迟、单次任务 token 成本步数上限 15p95 延迟 8s关注“用最少动作达成目标”的能力鲁棒性输入扰动容错、工具故障自愈率故障后可自动换路率 ≥ 70%关键 API 挂了agent 会不会找替代方案安全性越权调用次数、高危操作拦截率、敏感信息泄露率高危操作拦截 100%这是底线不是目标人机体验用户干预频率、无人工介入完成率核心场景无干预完成率 ≥ 60%用户越少“抢方向盘”体验越顺说实话任务成功率当然重要但我会更看重“人工干预频率”这个指标。它直接反映了两件事agent 的自主性是否够用以及你的编排和工具设计是否让用户足够放心。一个成功率很高但每次执行都要用户在旁边微调的系统很难说 agent-native 的价值真正兑现了。这套指标想要落地依赖的就是前文说的可观测性体系。没有完整的 trace 日志你连“工具故障自愈率”都算不出来更别提离线重放回归了。所以如果只让我给一条最优先的建议我会说可观测性先行没有 trace 的 agent 系统不要上线。我自己这几轮的体感是agent-native 的改造最难的从来不是模型能力而是你怎么把一个“会自己行动的实体”安全地嵌入到现有的组织流程和技术栈里。每个团队的具体情况不同但路数是通的先把能力工具化把过程观测化把干预当成必备功能再一步步扩大自主范围。它的价值不在于系统变得多自动而在于你终于可以把“目标任务”交给运行主体去拆解自己只负责设定边界、盯住关键节点。这个转变一旦完成产品形态和团队协作方式都会跟着变影响的广度远超过一次普通的技术升级。