在当前的 AI 浪潮中,很多人喜欢把 Agent(智能体)的“中控层”(Orchestrator / Controller)比作“大脑”。这个比喻很性感,但在工程落地时,它往往具有误导性。
如果你把中控层真的当成一个无所不能的“大脑”,指望它自己思考、自己决策、自己搞定一切,你的系统上线后大概率会是一场灾难:死循环、幻觉、高昂的 Token 消耗以及不可预测的行为。
在我过去十年的系统架构经验里,无论是传统的分布式系统,还是现在的 Agent 架构,核心原则从未变过:系统的稳定性来自于对不确定性的约束。
LLM(大语言模型)本质上是一个概率模型,它是不可靠的。因此,Agent 中控层的核心职责,不是“创造”,而是“约束”与“调度”。它更像是一个带着镣铐跳舞的项目经理,而不是天马行空的艺术家。
基于真实的工程落地经验,我们来拆解一下这个“中控层”到底该放什么,不该放什么。
一、 核心职能:将“自然语言”坍缩为“确定性指令”
中控层的第一要务,是处理“人”的模糊性与“机器”的严谨性之间的矛盾,这部分功能决定了 Agent 能不能跑通。
1. 意图识别与参数提取
很多开发者直接把用户的 Prompt 扔给 LLM,然后指望它直接调用工具。这是极其脆弱的。 在中控层,我们需要做的是语义清洗。
工程视角:不要只做关键词匹配。中控层需要判断用户的意图是否在系统的“能力边界”内。如果用户问“今天天气怎么样”,而你的 Agent 是个写代码的,中控层应该直接拦截并拒绝,或者转接闲聊模块,而不是让代码 Agent 去瞎编。
参数提取:这是最容易出错的地方。用户说“帮我订明天的票”,中控层必须把“明天”转化为具体的
YYYY-MM-DD格式。如果缺少关键参数(比如目的地),中控层必须触发“反问”逻辑,而不是让 LLM 猜一个。
2. 任务规划 —— 慎用 CoT
关于任务拆解,学术界很推崇 CoT(思维链)和 ReAct 模式。但在工业界,无脑上 CoT 意味着延迟增加和成本飙升。
工程视角:对于简单任务(如查询天气),直接路由即可,不需要规划。对于复杂任务(如策划旅行),中控层需要维护一个动态的任务队列(Task Queue)。
依赖管理:这是纯逻辑代码的工作。任务 A 的输出是任务 B 的输入,这种依赖关系最好由代码(Code)在 Python/Java 层控制,而不是完全依赖 Prompt 让 LLM 去“感觉”顺序。
3. 路由与分发
不要把所有的 Tool 定义都塞进一个 Prompt 里。Context Window 是有限的,更重要的是,干扰项越多,LLM 智商越低。
工程视角:中控层需要一个检索机制。先根据意图检索出 Top-5 最相关的工具,再把这 5 个工具的定义塞给 LLM。这叫“动态上下文加载”。
二、 高级职能:为“不可靠的模型”做兜底
如果说核心职能是进攻,那高级职能就是防守。在生产环境中,防守往往比进攻更重要。
1. 状态机与记忆管理 (State & Memory)
很多人混淆了“对话历史”和“状态”。
对话历史(Context):是给 LLM 看的,用于保持语境。
状态(State):是给中控层代码看的,用于控制流程。
工程视角:中控层必须维护一个有限状态机(FSM)。比如
[IDLE, COLLECTING_INFO, EXECUTING, FINISHED]。如果当前状态是EXECUTING(执行中),用户又发来一句闲聊,中控层应该根据策略决定是“挂起任务”还是“忽略闲聊”,而不是让 LLM 精神分裂。
2. 反思与纠错 (Reflection & Retry)
这是 Agent 与传统自动化最大的区别。传统程序报错就抛 Exception,Agent 需要尝试自愈。
工程视角:
格式校验:LLM 返回的 JSON 经常少个括号或字段名不对。中控层必须有一层强类型的校验(如 Pydantic)。
死循环熔断:我见过太多 Agent 在“规划-执行-失败-规划”的循环里把 Token 跑干。中控层必须有一个计数器,重试超过 3 次强制人工接管或报错。
3. 安全护栏 (Guardrails)
不要相信 Prompt 里的“Please do not...”。在 Prompt Injection(提示词注入)面前,这些都是纸老虎。
工程视角:
输出过滤:在 LLM 生成结果后,必须经过一层规则过滤(敏感词、数据合规性)。
权限隔离:中控层决定了当前用户是否有权调用
delete_database这个工具。这个判断逻辑必须写在代码里,绝对不能交给 LLM 判断。
三、 架构设计的“红线”
在设计中控层时,我见过很多团队犯错,以下是我的经验总结:
✅ 中控层应该放:
SOP(标准作业程序)的骨架:业务流程的硬逻辑。比如“先鉴权,再查询,最后记录日志”,这个顺序由代码写死,LLM 只负责填充每一步的内容。
全局上下文 (Global Context):
session_id,user_profile,trace_id等贯穿全链路的变量。决策模型:这里通常需要一个高智商的模型(如 GPT-4o 或 Claude 3.5 Sonnet)来做复杂的路由判断。
❌ 中控层绝对不该放:
具体的业务执行逻辑:不要在中控层里写“计算税率”的代码,也不要写“爬虫解析”的正则。这些必须封装成无状态的Tools。中控层只管调,不管怎么做。
万能 Prompt:不要试图用一个几千字的 System Prompt 解决所有问题。Prompt 必须模块化、动态化。
领域知识库:中控层不存储知识,它只负责连接向量数据库(RAG)。
四、 中控层是“项目经理”,不是“搬砖工”
如果把 Agent 系统看作一个建筑施工队:
Tools (工具)是挖掘机、电钻。
Sub-Agents (子智能体)是电工、木工。
中控层 (Controller)就是那个项目经理(PM)。
一个合格的项目经理(中控层)在工程落地中是这样的:
听懂人话(意图识别):搞清楚甲方到底是要盖楼还是修路。
派活(路由分发):喊电工去拉线,而不是喊木工去接电。
盯着进度(状态管理):记住墙砌到哪了,别第二天来全忘了。
验收与返工(反思纠错):墙砌歪了让人拆了重砌,但如果连拆三次还歪,就得停工报警(熔断)。
不亲自干活:项目经理绝对不会自己去搬砖。一旦中控层耦合了具体的执行代码,这个系统就离重构不远了。
最后送给大家一句话:Agent 的强大来自于 LLM 的泛化能力,但 Agent 的可靠性来自于中控层对这种泛化能力的工程化约束。不要迷信模型,要相信架构。