大语言模型天生不靠谱。上一篇文章聊了为什么需要 Agent 编排。这篇聊编排的核心:怎么约束 Agent 的行为。

跑了大半年 Agent 系统,我最大的体会:prompt 靠不住,体系才靠得住。

只靠 prompt 约束模型的输出,等于用劝说管理一个不稳定的系统。不是没用,是不够用。

那真正可靠的是什么?我总结了三层约束体系,从软到硬。越靠下越可靠。

第一层:软约束:prompt、角色设定、原则说明

这是最常用的手段。

写好 system prompt,告诉 Agent “你是资深编辑"“不要使用填充词"“遇到不确定的不要瞎编”。

有没有用?有用。但有多可靠?不保证。

举个例子:我在写作 Agent 的 prompt 里明确写了"不要用破折号”。结果它照样用,有时候一篇里冒出来七八个。你告诉它"输出不要超过 500 字”,它写 800 字。不是它故意不听,是 prompt 里塞了太多规则,中间的那些容易被忽略。

上一篇文章聊过这个问题:给模型 20 条规则,它会对中间的看心情。Prompt 对模型注意力的影响是概率性的,没有模型能把所有规则"同等对待"。

所以软约束的作用是"倾向性引导",不是保障。

第二层:结构化约束:task card、schema、checklist

这层就不是"建议"了,而是要求。

Task card 明确输入输出的格式。Schema 规定回复必须符合什么结构。Checklist 在生成后做一次格式化检查。

为什么这层比软约束更可靠?

因为格式本身就是一个检查点。如果要求 Agent 必须输出 JSON,格式不对系统直接重试。如果要求回复必须包含三个段落,缺一段它就自动补。如果要求 checklist 逐项打勾,没打的项系统会标记。

这不是概率性的。是确定性的。

大语言模型天生适合做"按照模板填充"的事情。给它一个结构化的槽位让它填,它犯错的概率远低于让它自由发挥。

比如我现在的写作 Agent:输出必须是"开头+问题+分析+观点+总结"的固定结构。看似死板,但结构性翻车确实少了很多。

第三层:硬约束:skill、平台状态机、权限控制

到了这一层,已经不是在"劝"模型了。是流程上堵死绕过的可能。

Skill 脚本是对单个 Agent 行为的硬限制。Agent 能调用哪些工具、能访问哪些数据、能执行哪些操作,都由 Skill 定义了范围。想越界?没有对应的工具。想跳过步骤?流程脚本不给你这个选项。

平台状态机管的是多 Agent 之间的流转。一个写作 Agent 可以自由写稿,但它写完后必须经过审稿 Agent,否则不能进入发布。想跳过?平台直接拦。

这不是教模型"你应该怎么做"。这是规定"你只能这么做"。

就像写代码时的类型系统。TypeScript 不是在"劝"你变量类型要对,它是编译阶段就报错。

硬约束的质量取决于你能把流程抽象到什么程度。流程越清晰,硬约束越准确。

三层一起用,缺一不可

既然硬约束最可靠,前两层是不是多余?

不是。因为三层各管各的事。

软约束能传递目标和品味。你可以用 prompt 告诉 Agent “写口语化一点"“像和朋友聊天”。这些东西没法写进状态机,但它决定了输出的质感。

硬约束保证底线。工具权限、流程卡点、状态流转,这些确保 Agent 不会做出格的事。

结构化约束在中间,把软约束的"意图"翻译成硬约束能检查的"格式”。

缺了软的,输出正确但没灵魂。缺了硬的,偶尔正确但随时翻车。缺了中间的,两头脱节。

编排从来不是一层的事情。


下一篇:「什么时候该拆 Agent」——分裂不是模拟组织架构,是上下文过载的必然结果。