1. 从“能跑”到“敢用”:企业级Agent的评判标准已经变了
过去一年,我参与过好几个企业内部的Agent项目评审,也帮朋友的公司做过Agent选型咨询。一个特别明显的感受是:2024年上半年大家还在兴奋地讨论“Agent能自己规划任务了”“Agent能调用工具了”,到了下半年,尤其是进入生产环境之后,讨论的重心完全变了。技术群里聊的不再是“你的Agent能做什么”,而是“你的Agent出错了我怎么知道”“它为什么走了那条路径”“我能不能让它只走这条路”。
这个转变背后是一个很朴素的商业逻辑:企业买的是结果,不是能力展示。一个Demo级的Agent,能自主拆解任务、能调用API、能生成报告,大家会觉得很酷。但一个企业级的Agent,如果它今天用A路径完成任务,明天用B路径,后天因为模型更新走了C路径,而且每次路径都不可预测、不可复现、不可审计,那这个Agent在企业环境里就是不可用的。因为企业要的不是“它能做”,而是“它每次都能按我认可的方式做,并且我能证明它做了”。
所以标题里说的“不是自治,而是可控的结果生意”,我理解的核心是:自治是手段,可控才是目的。企业级Agent的关键不在于它有多自主,而在于它的自主行为是否被约束在一个可预期、可验证、可追溯的边界内。这个边界不是限制Agent的能力,而是让Agent的能力变得可信。
我见过太多团队在Agent开发上踩同一个坑:花大量精力优化Agent的规划能力、工具调用准确率、多轮对话体验,但上线之后发现业务方根本不关心这些指标。业务方只问三个问题:第一,这个Agent处理一单要多久?第二,它处理的结果我能不能抽检?第三,如果它处理错了,我能不能找到原因并让它下次不再犯?这三个问题,没有一个跟“自治”有关,全部跟“可控”有关。
这也是为什么“Agent评测”这个词最近热度这么高。评测不是学术意义上的跑分,而是企业验收Agent时的核心动作。评测什么?评测的不是Agent有多聪明,而是它在给定输入下是否稳定输出符合预期的结果,以及在异常情况下是否可控地失败。一个企业级Agent的评测报告,应该像一份设备验收报告,而不是一份能力展示PPT。
2. 可控性的三层含义:边界、过程、结果
2.1 边界可控:Agent能做什么、不能做什么,必须是白名单
企业级Agent和通用Agent最大的区别在于,通用Agent追求“什么都能做”,企业级Agent追求“该做的能做,不该做的绝对不做”。这个“不该做”的边界,不是靠Prompt里写一句“请不要做XX”就能实现的,而是要靠架构层面的硬约束。
我见过一个典型的反面案例:某公司的客服Agent,Prompt里明确写了“不要承诺退款金额”,但上线第一周就出现了Agent自行承诺退款的情况。原因很简单:模型在特定上下文下会“创造性”地绕过Prompt约束。后来他们的解决方案是在Agent和业务系统之间加了一层“动作网关”,所有涉及金额、权限、状态变更的操作,必须经过网关的规则校验,校验不通过直接拦截,Agent连调用机会都没有。
这就是边界可控的核心思路:不依赖模型的自觉,依赖系统的强制。具体来说,边界可控包含几个层面:
- 工具白名单:Agent只能调用注册在案的工具,每个工具明确输入输出格式和权限等级。未注册的工具,即使模型知道怎么调,也没有调用入口。
- 参数约束:每个工具的参数有类型、范围、枚举值约束。比如“查询订单”工具的订单号必须是特定格式,“修改地址”工具的新地址必须通过地址库校验。
- 频率与配额:单个Agent实例在单位时间内的调用次数、Token消耗、外部API请求数都有硬上限。超过上限自动降级或转人工,而不是无限重试。
- 数据权限:Agent能访问的数据范围由系统权限决定,而不是由Prompt决定。销售Agent看不到财务数据,客服Agent看不到其他客户的订单,这是系统层面的隔离。
注意:边界可控不是一次性配置,而是需要持续运营的。业务规则变了,边界也要跟着变。我建议把边界规则做成可配置的,而不是硬编码在代码里,这样业务方自己就能调整,不需要每次找开发。
2.2 过程可控:Agent的每一步决策都要有迹可循
过程可控解决的是“为什么”的问题。当Agent输出一个结果时,企业需要知道它是怎么得出这个结果的。这不是为了满足好奇心,而是为了在出问题时能定位原因,在审计时能提供证据,在优化时能找到改进点。
一个过程可控的Agent,应该能输出完整的执行轨迹。这个轨迹不是简单的日志,而是结构化的决策链。我通常建议至少包含以下信息:
| 轨迹字段 | 说明 | 用途 |
|---|---|---|
| 步骤序号 | 当前是第几步 | 定位问题环节 |
| 步骤类型 | 规划、工具调用、推理、输出 | 区分决策性质 |
| 输入摘要 | 该步骤的输入内容 | 复现问题 |
| 输出摘要 | 该步骤的输出内容 | 验证结果 |
| 工具名称 | 调用的工具标识 | 审计工具使用 |
| 工具参数 | 实际传入的参数 | 排查参数错误 |
| 耗时 | 该步骤消耗时间 | 性能分析 |
| 置信度 | 模型对该步骤的置信评分 | 风险预警 |
| 异常标记 | 是否出现异常及类型 | 快速筛选 |
有了这个轨迹,当业务方说“这个结果不对”时,你能快速定位是规划错了、工具调错了、还是数据源有问题。而不是像黑盒一样,只能重新跑一遍看能不能复现。
过程可控还有一个容易被忽略的点:中间状态的可干预。企业级Agent不应该是一个“提交任务后等结果”的黑盒,而应该允许在关键节点人工介入。比如Agent规划了一个涉及大额退款的操作,系统可以在执行前暂停,推送给主管审批,审批通过后再继续。这种“人在回路”的设计,不是降低自动化程度,而是让自动化变得可接受。
2.3 结果可控:输出必须可验证、可复现、可追责
结果可控是最终目标。企业级Agent的输出,不能是“看起来差不多就行”,而必须是“符合明确标准”。这个标准需要在Agent设计阶段就定义清楚,而不是上线后靠人工判断。
我通常把结果可控拆成三个维度:
可验证:每个输出都有对应的验证规则。比如生成合同摘要的Agent,验证规则可能是“摘要必须包含甲乙方名称、合同金额、生效日期、终止日期四个要素,且金额与原文一致”。这些规则可以由业务方定义,系统自动校验,不通过则标记异常。
可复现:相同的输入,在相同配置下,应该得到相同或高度相似的结果。这要求Agent的随机性被控制在合理范围内。具体做法包括:固定模型版本、固定温度参数、固定工具版本、固定知识库快照。如果模型或知识库更新,需要重新评测并记录版本变更。
可追责:每个结果都能追溯到具体的执行实例、执行时间、执行环境、操作人员(如果是人工触发)。这在合规要求高的行业尤其重要。金融、医疗、法律领域的Agent,如果输出无法追责,基本不可能通过合规审查。
3. 为什么“自治”在企业场景里是个伪命题
3.1 自治的成本被严重低估
很多Agent框架和平台在宣传时,把“自治”包装成一个核心卖点。但实际落地时你会发现,自治带来的不是效率提升,而是成本转移。Agent自主规划任务,意味着它可能选择一条你没想到的路径,这条路径可能消耗更多Token、调用更多工具、产生更多不可控的中间状态。这些成本最终都要企业来承担。
我做过一个粗略的测算:一个完全自治的Agent,在处理复杂任务时,平均Token消耗是受约束Agent的3到5倍。因为自治意味着Agent会尝试多种路径、会自我反思、会重试,这些在Demo里看起来很智能的行为,在生产环境里都是真金白银。更麻烦的是,自治Agent的响应时间不可预测,有时几秒,有时几分钟,这对有SLA要求的业务场景是致命的。
3.2 自治与可审计天然冲突
企业环境里,任何影响业务结果的操作都需要可审计。审计的核心要求是:操作有依据、过程有记录、结果可验证。而自治Agent的决策过程往往是黑盒的,即使有日志,也很难解释“为什么它选择了这个工具而不是那个”“为什么它认为这个参数是正确的”。
这不是技术问题,而是逻辑问题。自治的本质是让Agent在不确定的情况下做决策,而审计的本质是要求决策有确定依据。两者在根本上是矛盾的。所以企业级Agent的可行路径不是追求完全自治,而是在关键决策点引入确定性约束,把自治限制在低风险、可验证的范围内。
3.3 企业真正需要的是“有限自治”
我观察到的成功案例,几乎都是“有限自治”模式。具体来说,就是把Agent的能力分成几个层级:
- 完全受控层:涉及资金、权限、合规的操作,Agent只能按预设流程执行,没有自主决策空间。
- 半受控层:涉及信息查询、内容生成、建议推荐的操作,Agent可以在一定范围内自主决策,但输出需要经过规则校验。
- 自由层:涉及内部草稿、探索性分析的操作,Agent可以较自由地发挥,但结果不直接对外。
这种分层设计的逻辑是:自治程度与风险等级成反比。风险越高的操作,自治程度越低;风险越低的操作,自治程度越高。这样既保留了Agent的灵活性,又控制了整体风险。
4. 企业级Agent评测:评什么、怎么评、谁来评
4.1 评测的核心不是准确率,而是稳定性
很多团队做Agent评测,第一反应是算准确率。但企业级Agent的评测,准确率只是基础指标,更重要的是稳定性。一个准确率90%但波动很大的Agent,和一个准确率85%但非常稳定的Agent,企业通常选后者。因为稳定的85%意味着可预期、可规划、可兜底,而波动的90%意味着你永远不知道下一次会不会掉到60%。
稳定性怎么评?我通常建议看几个指标:
- 方差:同一批测试用例多次运行,结果的波动范围。方差越小越稳定。
- 尾部表现:最差的那10%的用例表现如何。企业级Agent不能只看平均值,要看最差情况是否可接受。
- 异常恢复率:当出现工具调用失败、数据缺失、超时等异常时,Agent能否可控地降级或转人工,而不是崩溃或产生错误结果。
- 边界一致性:在边界条件下的表现是否一致。比如输入为空、输入超长、输入包含特殊字符时,Agent的行为是否可预期。
4.2 评测集的设计比评测本身更重要
我见过很多团队的评测集就是随便找几十条对话记录,跑一遍看结果。这种评测的参考价值很低,因为评测集本身没有代表性。一个好的企业级Agent评测集,应该覆盖以下几类用例:
正常用例:覆盖主要业务场景的典型输入,验证基本功能。这类用例占40%左右。
边界用例:输入长度边界、参数边界、权限边界、并发边界。这类用例占20%左右,是发现问题的重点区域。
异常用例:工具超时、数据源不可用、模型返回异常、网络抖动。这类用例占20%左右,验证Agent的容错能力。
对抗用例:Prompt注入、恶意输入、诱导性提问。这类用例占10%左右,验证Agent的安全边界。
回归用例:历史出过问题的场景,每次评测必须跑。这类用例占10%左右,防止老问题复发。
评测集不是一次性的,而是需要持续维护的。每次发现新问题,就把对应场景加入评测集;每次业务规则变更,就更新相关用例。我建议把评测集当成代码一样管理,有版本、有变更记录、有负责人。
4.3 评测要自动化,但不能全自动
企业级Agent的评测,理想状态是自动化跑完所有用例,自动生成报告。但实际操作中,有些维度很难完全自动化。比如“输出语气是否得体”“建议是否合理”这类主观判断,还是需要人工抽检。
我的做法是:机器评客观指标,人评主观指标。客观指标包括格式正确率、要素完整率、工具调用准确率、响应时间等,这些可以100%自动化。主观指标包括内容质量、语气适配、逻辑连贯等,按比例抽检,比如每批抽10%。
另外,评测结果不能只看通过率,还要看失败用例的分布。如果失败集中在某个场景,说明那个场景的设计有问题;如果失败分散,说明整体稳定性不够。这两种情况的改进方向完全不同。
5. 从架构层面保障可控性的几个关键设计
5.1 编排层与执行层分离
我强烈建议企业级Agent采用编排层与执行层分离的架构。编排层负责规划、决策、调度,执行层负责具体工具调用和数据处理。这样做的核心好处是:编排层可以灵活调整策略,执行层保持稳定;执行层的异常不会直接冲击编排层;两层可以独立评测、独立升级。
具体来说,编排层输出的是“任务计划”,执行层接收计划并执行。计划本身是结构化的,包含步骤、工具、参数、预期结果。执行层按计划执行,遇到异常按预设规则处理。这种分离让Agent的行为变得可预测,因为计划是显式的,不是隐式的。
5.2 状态机约束Agent的执行路径
对于流程固定的业务场景,用状态机约束Agent的执行路径是最可靠的方式。Agent不是自由规划,而是在状态机的框架内决策。每个状态有明确的入口条件、出口条件、允许的操作。Agent只能在当前状态允许的操作中选择,不能跳状态、不能逆状态。
这种方式看起来限制了Agent的灵活性,但实际上大幅提升了可控性。而且对于大多数企业场景来说,业务流程本身就是相对固定的,不需要Agent自由发挥。状态机约束反而让Agent更容易被业务方理解和接受。
5.3 输出校验前置而非后置
很多团队的做法是Agent先生成输出,然后再校验。但更好的做法是校验前置:在Agent生成输出之前,就把校验规则注入到生成过程中。比如生成合同摘要时,不是先生成再检查要素是否完整,而是在生成时就要求模型按结构化格式输出,每个要素单独生成,生成后立即校验,不通过则重新生成该要素。
这种前置校验的好处是:减少无效生成,降低Token消耗;问题在生成阶段就暴露,不用等到最后;校验规则可以更细粒度地控制生成过程。
6. 实际落地中的几个坑和应对经验
6.1 模型版本更新导致行为漂移
这是最容易被忽略的坑。你评测通过的Agent,在模型版本更新后可能行为完全变了。我遇到过好几次:模型小版本更新后,Agent的工具调用准确率下降了十几个百分点,原因是模型对工具描述的理解变了。
应对方法:固定模型版本,不要自动跟随最新版本。如果必须更新,先跑完整评测集,对比新旧版本的表现,确认没有退化再切换。同时保留回滚能力,一旦发现问题可以快速切回旧版本。
6.2 工具描述模糊导致调用错误
Agent调用工具出错,很多时候不是模型的问题,而是工具描述的问题。工具描述太简短、参数说明不清晰、示例不充分,都会导致模型理解偏差。
我的经验是:工具描述要像写给新员工看一样详细。每个工具要有明确的用途说明、参数说明、返回值说明、使用示例、常见错误。参数说明要包含类型、范围、是否必填、默认值。示例要覆盖典型场景和边界场景。这些描述不是写给开发看的,是写给模型看的,所以要特别注重清晰度和完整性。
6.3 多轮对话中的状态丢失
企业级Agent经常需要多轮交互,但多轮对话中状态丢失是常见问题。用户在第一轮提供的信息,到第三轮Agent就忘了;或者Agent在第二轮做的决策,到第四轮自己推翻了。
应对方法:显式维护对话状态,而不是依赖模型的上下文记忆。每一轮对话的关键信息抽取出来,存到结构化状态里,下一轮把状态注入到Prompt中。这样即使上下文被截断,状态也不会丢失。同时,状态变更要有记录,方便追溯。
6.4 并发场景下的资源竞争
企业级Agent往往需要处理并发请求,但并发场景下会出现资源竞争问题。比如多个Agent实例同时调用同一个工具,导致工具限流;或者多个Agent同时修改同一份数据,导致状态不一致。
应对方法:在架构层面引入队列和锁机制。工具调用通过队列串行化,避免瞬时并发过高;数据修改通过乐观锁或悲观锁控制,避免冲突。同时,Agent实例要无状态化,状态统一存到外部存储,这样实例可以水平扩展,也避免了实例间的状态不一致。
7. 关于“结果生意”的一点个人理解
“结果生意”这个词我觉得特别精准。企业级Agent本质上做的不是技术生意,而是结果生意。客户不为你的Agent架构买单,不为你的模型选型买单,不为你的编排框架买单,客户只为Agent产出的结果买单。这个结果必须是可预期的、可验证的、可追责的。
这就意味着,企业级Agent的竞争力不在于技术有多先进,而在于结果有多可靠。一个用简单规则实现的Agent,如果结果稳定可靠,比一个用最先进框架实现的但结果飘忽不定的Agent更有商业价值。这也是为什么我一直建议团队在Agent项目上“先做窄、再做深、最后做广”。先把一个场景做透,把可控性做扎实,把评测体系建起来,然后再扩展到更多场景。而不是一上来就追求大而全的自治Agent,那样大概率会陷入“Demo很惊艳、上线很崩溃”的困境。
我在实际项目中的体会是:企业级Agent的成败,70%取决于可控性设计,20%取决于评测体系,10%取决于模型能力。这个比例可能因场景而异,但大方向是不会错的。把主要精力放在可控性上,比放在追求自治上,回报率高得多。