简介:本文围绕Agent开发中“确定性逻辑”与“模型自主决策”两类实现路径展开对比,分析二者在架构、接入成本、稳定性、适用场景上的核心差异,并给出选型建议与迁移注意事项,帮助开发者理解Agent为何输出不稳定,以及如何按业务需求选择更合适的实现方式。
很多开发者在初次接触 Agent 开发时,都会产生一种“怪怪的”感觉:Demo 跑起来很惊艳,一旦放到真实业务里,输出就开始飘忽不定。问题往往不在模型本身,而在于我们是否想清楚了一件事——哪些环节应该交给模型“推理”,哪些环节应该用确定性代码“兜底”。
本文围绕 Agent 开发中两条典型的实现路径展开对比:
二者并非互斥,而是适用边界不同。理解它们的差异,是让 Agent 从“能跑”走向“可靠”的关键一步。
Agent 的本质可以用一个公式概括:
Agent = LLM + 工具 + ReAct
这套机制的优势是灵活,能处理开放式任务;劣势也同样明显——每一轮都由模型重新决策,误差会累积。同一个问题问两次,可能走不同的工具路径,得到不同粒度的答案。这就是“输出不稳定”的根源。
而方案B的思路是:能用确定性方式回答的,绝不交给模型猜。在调用模型之前设置“前置闸门”,用纯代码完成判断,零 token 成本,也零不确定性。
方案A:模型自主决策路径
以 ReAct 循环为代表。每一步输出“思考(thought)”和“行动(action)”,行动产生“观察(observation)”,观察又作为下一步思考的输入。它与普通聊天机器人的分水岭在于:聊天机器人一次生成交卷,Agent 允许“先想、再做、看了结果再想”。
方案B:确定性逻辑前置路径
在模型调用之前,用普通代码完成分类、校验、路由。典型的三类判断包括:
| 判断类型 | 示例 | 动作 |
|---|---|---|
| 意图明确类 | 用户问的是固定指标口径 | 直接查预置结果 |
| 参数缺失类 | 缺少时间范围、维度 | 直接追问,不调模型 |
| 越权/非法类 | 请求超出权限或格式错误 | 直接拒绝或报错 |
这类判断零 token 消耗,结果完全可复现。
两者目标一致:都是为了让 Agent 完成“理解需求 → 获取信息 → 给出回答”的闭环。二者都依赖工具层能力,都需要考虑会话状态管理,也都可以组合使用。实际生产中,成熟的 Agent 往往是“前置闸门 + ReAct 循环”的混合体。
| 对比维度 | 方案A:模型自主决策 | 方案B:确定性逻辑前置 |
|---|---|---|
| 技术架构 | LLM 驱动多轮循环 | 代码路由 + 模型兜底 |
| 决策来源 | 模型推理 | 预定义规则 |
| 输出稳定性 | 存在波动 | 高度可复现 |
| 接入成本 | 需设计提示词、工具描述 | 需梳理业务规则 |
| 灵活度 | 高,可处理开放式问题 | 低,仅覆盖已知场景 |
| token 成本 | 每轮都消耗 | 命中前置逻辑时为零 |
| 可观测性 | 链路长,排查难 | 逻辑清晰,易定位 |
| 适用场景 | 探索型、开放型任务 | 高频、规则明确的任务 |
差异来源解读:
没有绝对更优的方案,只有更匹配当前阶段的方案:
从纯模型自主决策迁移到“前置 + 自主”混合模式时,需要关注:
Agent 开发“怪怪的”感觉,本质是把不确定的决策交给了不确定的模型。方案A提供了灵活性和开放性,方案B提供了稳定性和低成本。真正可靠的 Agent,不是二选一,而是先问清楚哪些问题根本不需要模型猜,把确定性逻辑前置,把开放式推理留给模型。理解了这条边界,Agent 的开发就从“碰运气”变成了“可工程化”。