讨论 AI 产品时,人们很容易把所有可见能力都归给模型:回答更准确,是模型更强;任务能执行,是模型学会了使用工具;交互更自然,也是模型变聪明了。这个叙事足够简洁,却会遮住真正决定产品质量的部分。模型生成的是候选输出,系统才负责把候选输出变成可接受、可执行、可恢复的行为。
先把“智能”拆成一条链
一个请求从进入产品到产生结果,通常会经过多种责任边界。它们不一定对应独立服务,但在分析时必须分开:
| 边界 | 负责的问题 | 失败时的表象 |
|---|---|---|
| 模型 | 根据上下文生成下一步候选 | 推理偏离、表达含混 |
| 上下文 | 选择哪些事实进入当前推理 | 遗漏约束、引用过期信息 |
| 运行时 | 调度工具、控制循环与预算 | 重复调用、无法收敛 |
| 状态层 | 保存任务、消息与中间结果 | 恢复后丢失进度 |
| 产品层 | 权限、反馈、确认与呈现 | 用户不知道系统正在做什么 |
这张表最重要的作用,是阻止我们用“模型幻觉”解释一切。答案引用了旧文件,可能不是模型不知道,而是检索层取错了版本;任务重复执行,可能不是模型固执,而是运行时没有稳定的幂等边界。
不要先问“用了哪个模型”,先问“哪一层拥有这个行为,又由哪一层承担失败”。
模型输出不是系统决策
模型可以提议一次写文件操作,但提议不等于授权。一个可靠的系统还要完成参数验证、权限判断、执行、结果读取与状态记录:
type ProposedAction = { tool: string; input: unknown }
async function commitAction(action: ProposedAction, context: TaskContext) {
const validated = validate(action)
await authorize(validated, context.permissions)
const result = await execute(validated)
return context.record(result)
}
这里的智能不是集中在某一行代码里。模型提供开放式判断,确定性代码收紧边界,运行时把两者组织成闭环。模型越有能力,系统越需要明确哪些决定可以自动提交,哪些决定必须等待用户,哪些失败可以重试。
Agent 是控制循环,不是角色扮演
把 Agent 理解成“会自主工作的模型”仍然太宽泛。更有用的定义是:它是一个持续读取状态、选择动作、观察结果并决定是否继续的控制循环。
- 读取目标、已有状态与当前约束;
- 生成下一步动作或结束判断;
- 在权限和资源预算内执行;
- 把结果写回可恢复的状态;
- 根据新状态继续、改道或停止。
循环质量取决于停止条件、错误分类、观测完整性和状态一致性。仅仅增加循环次数,通常不会自动提高完成率;如果观测本身错误,更多循环只会更坚定地沿错误路径前进。
模型决定“下一步可能是什么”,系统决定“这一步是否成立,以及失败之后怎么办”。
用边界定位改进空间
当一个 AI 产品表现不好时,可以沿着链路逐层提问:输入是否完整;上下文是否可追溯;工具返回是否被正确解释;副作用是否可重复;任务是否能从中断点恢复;用户是否能看见关键决定。这样得到的改进项通常比“换一个更强模型”更具体。
从模型到系统,不是削弱模型的重要性,而是把它放回正确的位置:模型是概率性的能力核心,产品则是一组让这种能力可以被信任的边界。真正成熟的 AI 工程,既要扩大模型能做什么,也要清楚系统绝不能把什么交给模型独自决定。