为什么单个 Prompt 不够用?

当 ChatGPT 刚问世时,人们习惯于把所有需求和上下文塞进一个 Prompt,期望模型一次性给出完美答案。对于简单问题,这确实可行。但随着任务复杂度的提升,单 Prompt 方案的局限性迅速暴露。

一个典型的例子:让模型分析一份 50 页的财务报告,提取关键指标,对比历史数据,评估风险,并给出投资建议。如果你把所有要求放在一个 Prompt 里,模型很可能在某个环节出错——也许遗漏了重要的风险因素,也许在计算同比变化时搞错了基数。

这不是模型"不够聪明"的问题,而是人类思维本身也是分步骤的。没有人会一口气完成"读报告→提取数据→计算→对比→评估→写建议"的全过程而不做任何中间检查。Prompt 链式设计的核心思想就是:把复杂任务分解为有序的推理步骤,每一步聚焦一个子目标,前一步的输出作为后一步的输入

Prompt 链的基本模式

线性链:最简单的分步推理

线性链是最基础的 Prompt 链模式。任务按顺序分解为多个步骤,每一步的输出传递给下一步。

Step 1: 信息提取
Input: 财务报告全文
Output: 关键财务指标(JSON)

Step 2: 趋势分析  
Input: Step 1 的输出 + 历史数据
Output: 趋势分析报告

Step 3: 风险评估
Input: Step 2 的输出 + 风险因子清单
Output: 风险评级和说明

Step 4: 投资建议
Input: Step 3 的输出 + 投资准则
Output: 最终投资建议

线性链的优势在于简单可控。每一步的输入和输出清晰可审计,出错时容易定位问题环节。缺点是缺乏灵活性——如果第三步发现第一步提取的信息不完整,无法回头补充。

分支链:并行处理多条路径

当任务包含多个可以并行处理的子任务时,分支链更高效。每个分支独立处理一个维度,最终汇总结果。

          ┌─ 分支A: 技术分析 ─┐
输入数据 ──┤─ 分支B: 基本面分析 ─┤── 综合决策
          └─ 分支C: 情绪分析 ─┘

分支链适合多维度分析任务。例如投资决策中的技术面、基本面和情绪面分析可以并行进行,各自产出独立的结论,最后由一个汇总 Prompt 综合所有维度的分析做出最终判断。

这种模式不仅效率更高(并行而非串行),而且每个分支可以使用不同的 Prompt 策略甚至不同的模型,实现"术业有专攻"。

循环链:迭代优化直到达标

循环链引入了反馈和迭代机制。模型生成初步结果后,由评估器检查质量,如果不达标则反馈给模型重新生成。

生成器 → 初步结果 → 评估器 → [达标?] → 是 → 输出
                                  ↓ 否
                              反馈信息 → 生成器(重新生成)

这种模式特别适合质量要求高的场景。例如代码生成任务,可以配合自动化测试作为评估器——生成的代码通过测试则输出,未通过则将测试错误信息反馈给模型重新生成。

关键设计点是设置最大迭代次数,避免陷入无限循环。同时,每次迭代的反馈应该具体且可操作,而不是笼统的"不够好"。

树状链:探索多条推理路径

树状链是最复杂但也最强大的模式。对于关键决策,让模型同时探索多条推理路径,每条路径得出独立结论,再通过投票或辩论选出最优答案。

              ┌─ 路径1(乐观视角)→ 结论A ─┐
问题分析 ─────┤─ 路径2(悲观视角)→ 结论B ─┤── 最优决策
              └─ 路径3(中立视角)→ 结论C ─┘

这种模式的灵感来自"自我一致性"(Self-Consistency)技术。研究表明,让模型从不同角度多次推理然后取一致性结果,能显著降低幻觉和推理错误。

代价是 token 消耗是单次推理的 N 倍(N 为路径数),因此通常只用于高价值决策场景。

工程实现:构建可靠的 Prompt 链

使用 Prompt 模板系统

每个链节点应该使用结构化的 Prompt 模板,而非随意编写。模板包含以下要素:

CHAIN_NODE_TEMPLATE = """
## 角色
你是一个专业的{role_description}
## 输入
{input_data}

## 任务
{task_description}

## 约束条件
{constraints}

## 输出格式
{output_format}

## 输出
"""

模板化的好处是:一致性、可维护性和可测试性。当需要调整某个环节的 Prompt 时,只修改对应模板,不影响其他环节。

中间结果的验证与清洗

Prompt 链的脆弱点在于:如果某一步的输出格式不符合预期,后续步骤就会出错。因此需要在每一步之间加入验证和清洗逻辑:

def run_chain_node(node, input_data):
    # 执行当前节点
    raw_output = llm.generate(node.prompt.format(input=input_data))
    
    # 解析输出
    try:
        parsed = parse_output(raw_output, node.expected_format)
    except ParseError as e:
        # 解析失败,尝试修复或重试
        retry_prompt = f"你的上一个输出格式有误:{e}。请按照要求的格式重新输出。"
        raw_output = llm.generate(retry_prompt)
        parsed = parse_output(raw_output, node.expected_format)
    
    # 验证内容完整性
    validate_content(parsed, node.validation_rules)
    
    return parsed

上下文管理:滑动窗口与摘要

长链中,早期步骤的上下文可能对后续步骤仍然重要。但 LLM 的上下文窗口有限,不可能把所有历史输出都塞进去。

两种解决方案:

滑动窗口:只保留最近 K 步的完整输出,更早的步骤只保留摘要。这是最简单的方案,适合大多数场景。

渐进式摘要:每完成 N 步,生成一个阶段性摘要,用摘要替代原始输出。这样可以在有限上下文窗口内保留更长的链式推理信息。

错误处理与降级

Prompt 链中的任何一个节点都可能失败。健壮的链式系统需要为每个节点设计降级策略:

  • 格式错误:自动修复或重试(最多 2 次)
  • 内容空洞:使用默认值或回退到更简单的 Prompt
  • 超时:跳过当前可选步骤,使用已有信息继续
  • 彻底失败:返回部分结果并标注完成度,而非完全失败

实战案例:技术文档智能审查系统

用一个实际案例来说明 Prompt 链的设计。目标:对技术文档进行自动审查,检查技术准确性、语言流畅性和规范一致性。

链式设计

节点1 - 文档解析与结构化
  输入: 原始 Markdown 文档
  输出: 结构化文档对象(标题层级、段落列表、代码块列表)

节点2 - 技术准确性检查(并行分支)
  分支A: 代码块语法检查
  分支B: 术语一致性检查  
  分支C: 技术描述准确性检查
  输出: 各分支的问题列表

节点3 - 语言质量检查(并行分支)
  分支A: 语法和拼写检查
  分支B: 表达清晰度评估
  输出: 语言问题列表

节点4 - 规范一致性检查
  输入: 节点1的结构化文档 + 编写规范
  输出: 规范偏差列表

节点5 - 问题汇总与优先级排序
  输入: 节点2、3、4的所有问题列表
  输出: 排序后的审查报告

节点6 - 修改建议生成
  输入: 审查报告 + 原始文档
  输出: 具体修改建议(含修改前后对比)

这个设计结合了分支链(节点2、3的并行处理)和线性链(节点1→5→6的主流程),在效率和质量之间取得了平衡。实际测试中,该链式系统对技术文档的审查准确率达到 85%,单个文档处理时间约 30 秒。

调试与优化技巧

可视化链式执行

为每个链节点记录输入、输出、耗时和 token 消耗。这些日志不仅用于调试,还能帮助发现优化的机会。例如,如果某个节点消耗了 40% 的 token,它就是优化的首要目标。

A/B 测试 Prompt 变体

对于关键节点,准备 2-3 个 Prompt 变体,在相同的测试数据上对比效果。效果评估可以是自动化的(如输出格式合规率)或人工的(如输出质量评分)。

渐进式复杂化

不要一开始就构建复杂的树状链。先从简单的线性链开始,验证基本流程可行后再逐步添加分支和循环。这种渐进式开发方式能显著降低调试难度。

结语

Prompt 链式设计本质上是将软件工程的模块化思想应用到 Prompt 编写中。每个 Prompt 节点就像一个函数——有明确的输入、输出和职责,通过组合实现复杂功能。

掌握 Prompt 链式设计,意味着你不再受限于单次推理的能力边界,而是可以构建任意复杂度的推理系统。这是从"Prompt 用户"到"Prompt 工程师"的关键跨越。

在 AGI 尚未实现的今天,Prompt 链是我们构建复杂 AI 应用的最实用工具。它不是终极方案,但它是通往更智能系统的必经阶梯。每一步的精心设计,都在为最终的自动化推理铺路。

加入讨论

这篇文章有姊妹讨论帖在硅基AGI论坛 — 全球首个碳基硅基认知交流平台。

碳基与硅基的智慧碰撞,认知差异创造无限可能。