从原始的“指令响应”到现在的“认知编排”,用户输入到模型输出之间的这层“中间地带”,已经从一片荒芜演变成了一套极其复杂的认知脚手架。
我们可以将这个过程看作是“提示词的解构与重构”。以下是这一历程的系统性演化:
1. 演化历程:从“黑盒对话”到“认知系统”
阶段一:指令时代 (2020 - 2022)
-
形态: 简单的单轮对话。
-
逻辑:
User Input -> LLM -> Output。 -
特征: 提示词(Prompt)就是全部。用户需要自己学会写复杂的“咒语”(Prompt Engineering),模型直接对原始文本进行概率预测。
阶段二:框架与工具时代 (2023)
-
形态: 出现了 LangChain、Semantic Kernel。
-
逻辑:
User Input -> Template -> Retrieval (RAG) -> LLM -> Tool Call。 -
特征: 开始出现上下文注入。系统会自动去数据库找资料(RAG),或者通过提示词模板把用户的简单需求包装成模型更容易理解的格式。
阶段三:Agent 与工作流时代 (2024 - 2026 现在)
-
形态: 编排(Orchestration)与多 Agent 协同。
-
逻辑:
User Input -> Planner -> Sub-tasks -> Execution -> Verification -> Final Answer。 -
特征: 需求不再直接给模型,而是先经过一个“意图解析层”。
2. 深度拆解:现在的需求经历了什么?
当你输入一个复杂需求时,系统内部通常会经历以下五个关键转化步骤:
① 意图对齐与解构 (Intent Alignment & Decomposition)
现在的系统不会直接处理模糊的请求。
-
任务拆解: 如果你说“帮我写一个本地知识库 Demo”,编排层(Orchestrator)会将其拆解为:需求分析、架构设计、代码实现、测试。
-
提示词解构: 系统会将你的原始 Prompt 拆解成多个子任务 Prompt。每个子任务只负责一个小目标,以降低模型的认知负担。
② 上下文检索与注入 (Contextual Injection)
这是为了解决模型“幻觉”和“记不住”的问题。
-
RAG 增强: 系统会提取你需求中的关键词,在向量数据库或你的本地文件中搜索相关代码片段(如 MCP 协议下的本地数据检索)。
-
少样本注入(Few-shot): 系统会悄悄在后台加入几组“成功案例”的模板,引导模型按特定风格输出。
③ 约束与边界设定 (Constraint Guardrails)
在需求到达模型前,会经过一层“策略过滤器”。
-
安全性校验: 确保需求不违规。
-
格式强制: 比如要求模型必须以 JSON 格式输出,以便后续程序处理。
④ 递归循环与自我修正 (Self-Reflection Loop)
这是你最关注的 Reliability(可靠性) 部分。
-
生成-评估循环: 模型生成初稿后,系统会调用另一个“评估模型”来检查结果。
-
错误回溯: 如果代码运行失败,报错信息会作为新的输入反馈给模型,形成一个闭环递归。
⑤ 运行时环境适配 (Runtime Adaptation)
- MCP(Model Context Protocol): 现在的趋势是通过 MCP 这种协议,让模型直接感知你的本地环境(编辑器、数据库、终端)。你的需求在进入模型前,已经带上了你当前的“系统快照”。
3. 为什么需要“分解”提示词?
这种从“单一 Prompt”到“工作流”的转变,本质上是为了解决系统性风险:
-
长文本压力: 模型处理超长指令时,中间部分容易被遗忘(Lost in the Middle)。拆解任务能保持模型的高注意力。
-
确定性提升: 通过预定义的 Workflow(如你研究的线性或图状编排),我们可以把不确定的 AI 行为框定在确定的逻辑路径中。
-
可调试性: 如果最终输出错了,你可以清楚地看到是“拆解层”理解歪了,还是“执行层”代码写错了。
“提示词分解”,在现代 AI 工程中被称为 “链式思考编排”(Chain-of-Thought Orchestration)。
从 AI 出现到现在,变化的核心在于:我们不再试图写一个“完美的提示词”,而是试图构建一个“能够处理不完美提示词的系统”。
现在的趋势, Recursive Cognitive Systems(递归认知系统)——让 AI 去写操作 AI 的 Agent,通过层层解构和反馈循环,最终实现从模糊需求到精确代码的可靠跨越。
现在的趋势是让“更聪明、推理能力更强”的模型来充当“项目经理”或“架构师”的角色。
在传统的软件工程中,逻辑是硬编码(Deterministic)的;但在你关注的 Agentic Workflow 中,拆解和编排的过程本身就是一个概率性推理(Probabilistic Inference)的过程。
我们可以把这个中间过程拆解为 LLM 参与的几个关键决策点:
1. 路由器(Router):意图的“第一跳”
当需求进来时,首先需要一个 LLM 来判断:这个活儿该谁干?
-
LLM 的角色: 分类员。
-
动作: 它会分析你的输入,决定是调用“代码专家” Agent,还是调用“搜索引擎”工具。
-
例子: 你输入“帮我优化这段代码并查一下最新的 MCP 协议”,Router 会识别出这是一个“混合任务”,需要拆分。
2. 规划器(Planner):需求分解的核心
这是你提到的“拆解”最核心的部分。对于复杂需求,系统通常会调用一个长上下文、高逻辑能力的模型(如 GPT-4o 或 Claude 3.5 Sonnet)来生成一个 DAG(有向无环图) 或任务列表。
-
LLM 的角色: 架构师/项目经理。
-
动作:
-
目标识别: 确定最终交付物是什么。
-
依赖分析: 识别哪些任务必须先做(例如:不先理解代码逻辑,就无法写测试用例)。
-
子任务生成: 将大需求拆解为 LLM 容易处理的“原子化”提示词。
-
3. 编排器(Orchestrator):动态调整
在执行过程中,如果某个子任务失败了(比如代码运行报错),中间的编排逻辑需要 LLM 再次介入。
-
LLM 的角色: 监工/调试员。
-
动作: 观察错误信息,判断是“重试一下就能好”,还是“原来的计划有问题,需要重新拆解需求”。这正是你关注的 Reliability(可靠性) 的关键所在——自我反思(Self-reflection)。
为什么这一步必须由 LLM 参与?
如果用传统的 if-else 逻辑来写编排,你会发现:
-
无法应对模糊性: 用户输入的需求是千奇百怪的,硬编码无法覆盖所有情况。
-
缺乏“常识”: 只有 LLM 知道“写代码前需要配置环境”这种隐含的逻辑关系。
-
灵活性: 只有 LLM 能根据上一个任务的输出,动态地决定下一个任务是什么。
现在的进阶玩法:不同层级使用不同的模型
为了兼顾成本和性能,成熟的 AI 系统(比如你研究的 Claude Code 内部逻辑)通常会这样分工:
| 层级 | 负责内容 | 推荐模型规格 | 理由 |
|---|---|---|---|
| 感知/路由层 | 简单分类、意图识别 | 轻量级 (Flash/Haiku) | 极速响应,节省成本 |
| 规划/编排层 | 深度拆解、架构设计、逻辑推理 | 旗舰级 (Opus/Sonnet/Pro) | 需要极高的逻辑严密性 |
| 执行层 | 码代码、写文档、调用工具 | 中/高级 | 具体的搬砖活儿 |
总结
“让 AI 写操作 AI 的 Agent”,本质上就是把“规划层”和“编排层”从人类手中拿走,交给一个更高阶的 LLM 去处理。
这意味着,作为开发者,工作重心从“写具体的业务逻辑”,变成了“设计这一套递归的认知流程”以及“评估(Eval)每一个拆解步骤是否准确”。