作者:互联网 时间: 2026-07-14 09:11:00
从固定链路到自定目标的逐级放权 · 一张表看懂自主性与可控性的权衡

面试里一句"你这个系统算不算 Agent",常常把人问住。有人把只会调一次 API 的脚本叫 Agent,也有人非要"能自己定目标"才承认。其实这两端之间不是有无之分,而是一条连续的放权光谱。理解 Agent 的关键,就是理解你到底把多少决策权交给了模型——从"每一步都写死"到"连目标都让它自己定",逐级递进。这篇用一张分级表把这条光谱讲透。
传统程序里,控制流由开发者用if/else、循环、状态机写死;模型(如果有)只是流水线上一个被调用的函数。而所谓 Agent,本质是让大模型来接管一部分原本由代码把控的决策。交出去的决策越多、越关键,系统就越"自主"。
把这条光谱拆开,可以按"模型能决定什么"分成四级放权:
每往上一级,你收获的是灵活性和处理开放问题的能力,付出的是可预测性、可测试性和安全边界。这就是贯穿全文的主线——自主性 ↔ 可控性的权衡。
L1 固定链路(Fixed Chain)。 流程完全由代码编排,模型只在预定的空位里生成内容。典型如"检索 → 塞进模板 → 生成回答"的经典 RAG,或"翻译 → 润色 → 输出"的定长流水线。走哪几步、什么顺序全部写死,模型无权更改路线。
L2 模型选分支(Routing)。 开发者仍然预定义好所有可能的路径,但把"走哪条"这个选择权交给模型。比如客服系统让模型先分类意图,再路由到"退款流程 / 查询流程 / 转人工"。分支集合是封闭的、可穷举的,模型只是在有限选项里做选择题。
L3 模型定工具(Tool-Calling Loop)。 这是当下最主流的 Agent 形态。给模型一组工具,它在一个循环里自己决定:这一步调不调工具、调哪个、传什么参数、拿到结果后要不要接着调、什么时候停。控制流不再由代码写死,而是由模型在运行时动态生成。ReAct、函数调用(function calling)、大多数"能查库能算数能搜网"的助手都属于这一级。
L4 模型自定目标(Autonomous / Planner)。 放权到顶:给一个高层目标甚至只给一个方向,模型自己拆解子目标、规划步骤、自我评估、必要时调整计划乃至衍生新任务。AutoGPT 式的自主智能体、能自主拆解并派活的多智能体系统属于此列。灵活性最强,但也最难预测和约束——它可能跑偏、绕圈、烧掉一大笔 token 还没收敛。
# 同一个"查天气并提醒"任务,在不同级别下谁做主L1 固定链路:get_weather(city) -> format(template) -> reply# 步骤写死L2 选分支:if model.route()=="天气": weather_flow() else ...# 模型选路L3 定工具:while not done: tool = model.decide(tools, history) # 模型定工具与循环L4 自定目标:goal="照顾好我的出行"; model.plan_and_execute(goal)# 模型自定子目标
把四级并排对比,那条"自主性 ↔ 可控性"的权衡就一目了然:
| 级别 | 谁做决策 | 模型能决定什么 | 典型形态 | 可控性 / 风险 |
|---|---|---|---|---|
| L1 固定链路 | 开发者 | 只填内容,不改流程 | 定长流水线、经典 RAG | 最可控,几乎可完全测试 |
| L2 模型选分支 | 开发者定路径,模型选 | 在封闭分支里选一条 | 意图路由、分类分发 | 较可控,分支可穷举 |
| L3 模型定工具 | 模型(在工具集内) | 调哪个工具、传什么参、是否循环、何时停 | ReAct、函数调用 Agent | 中等,需管控工具权限与停机 |
| L4 自定目标 | 模型主导 | 拆解子目标、规划、自评、衍生任务 | AutoGPT、自主多智能体 | 最难控,易跑偏、绕圈、失控 |
规律很清晰:级别越往上,能处理的问题越开放、越灵活,但可预测性、可测试性和安全边界越弱。L1 你能写单元测试断言每一步;到了 L4,同一个输入两次运行都可能走出完全不同的轨迹。
这套分级不是学术分类,而是工程选型的标尺。核心原则是:用能解决问题的最低自主级别。能用 L1/L2 固定编排搞定的,就别上 L3;能用 L3 工具循环搞定的,绝大多数场景都不该跳到 L4。