第1章:提示链 Prompt Chaining

提示链模式概述

提示链(Prompt Chaining),有时也被称为管道模式(Pipeline Pattern),是一种在利用大型语言模型(LLMs)处理复杂任务时非常强大的范式。与其期望LLM通过单一、整体的步骤解决复杂问题,不如采用提示链所倡导的分而治之策略。其核心思想是将原本令人望而却步的问题分解为一系列较小且更易处理的子问题。每个子问题通过专门设计的提示单独解决,并将一个提示生成的输出有策略地作为输入传递到链中的下一个提示。

这种顺序处理技术本质上为与LLM的交互引入了模块化和清晰性。通过分解复杂任务,可以更容易理解和调试每个单独的步骤,从而使整个过程更加稳健和可解释。链中的每一步都可以被精心设计和优化,专注于解决较大问题的某一特定方面,从而生成更准确且更具针对性的输出。

一个步骤的输出作为下一个步骤的输入是至关重要的。这种信息传递建立了一个依赖链,因此得名“提示链”。在这个链中,前一步操作的上下文和结果会指导后续的处理。这使得LLM能够基于之前的工作进行构建,逐步完善其理解,最终更接近所需的解决方案。

此外,提示链不仅仅是关于问题分解,它还支持外部知识和工具的集成。在每一步中,可以指示LLM与外部系统、API或数据库进行交互,从而扩展其内部训练数据之外的知识和能力。这种能力极大地扩展了LLM的潜力,使其不仅能够作为孤立的模型运行,还可以作为更广泛、更智能系统的核心组件。

提示链的重要性不仅限于简单的问题解决,它还是构建复杂AI智能体的基础技术。这些智能体可以利用提示链在动态环境中自主规划、推理和行动。通过战略性地构建提示序列,智能体能够处理需要多步骤推理、规划和决策的任务。这种智能体工作流可以更接近模拟人类的思维过程,从而在复杂领域和系统中实现更自然、更高效的交互。

单一提示的局限性: 对于多方面的任务,使用单一复杂提示可能效率低下,导致模型难以处理约束和指令,从而可能出现以下问题:指令忽略(instruction neglect),即提示的部分内容被忽略;上下文漂移(contextual drift),即模型失去对初始上下文的跟踪;错误传播(error propagation),即早期错误被放大;需要更长上下文窗口的提示(prompts which require a longer context window),即模型无法获得足够的信息进行响应;以及幻觉(hallucination),即认知负担增加导致错误信息的可能性加大。例如,一个要求分析市场研究报告、总结发现、识别数据点趋势并撰写电子邮件的查询可能会失败,因为模型可能会很好地总结报告,但无法正确提取数据或撰写电子邮件。

通过顺序分解提升可靠性: 提示链通过将复杂任务分解为专注的顺序工作流,显著提高了可靠性和控制力。以上述例子为例,可以通过以下方式描述一个管道或链式方法:

  1. 初始提示(摘要):“总结以下市场研究报告的关键发现:[文本]。”该模型专注于摘要任务,提高初始步骤的准确性。
  2. 第二提示(趋势识别):“根据摘要,识别三个主要的新兴趋势,并提取支持每个趋势的具体数据点:[第一步的输出]。”此提示更加具体,直接基于经过验证的输出构建。
  3. 第三提示(邮件撰写):“撰写一封简洁的邮件,向营销团队概述以下趋势及其支持数据:[第二步的输出]。”

这种分解方法允许对流程进行更细化的控制。每一步任务更简单且明确,从而减轻模型的认知负担,最终提高输出的准确性和可靠性。这种模块化方法类似于计算管道,其中每个功能执行特定操作,然后将结果传递到下一步。为了确保每个具体任务的准确响应,可以在每个阶段为模型分配一个明确的角色。例如,在给定场景中,初始提示可以被指定为“市场分析师”,后续提示可以是“贸易分析师”,第三个提示可以是“专业文档撰写员”等。

结构化输出的作用: 提示链的可靠性高度依赖于步骤之间传递数据的完整性。如果某一步的输出模糊或格式不佳,后续提示可能会因输入错误而失败。为减轻这种情况,指定结构化输出格式(如 JSON 或 XML)非常重要。

例如,趋势识别步骤的输出可以格式化为 JSON 对象:

{
  "trends": [
    {
      "trend_name": "AI驱动的个性化",
      "supporting_data": "73%的消费者更倾向于与使用个人信息使购物体验更相关的品牌进行交易。"
    },
    {
      "trend_name": "可持续和道德品牌",
      "supporting_data": "过去五年中,具有ESG相关声明的产品销售额增长了28%,而没有相关声明的产品增长了20%。"
    }
  ]
}

这种结构化格式确保数据是机器可读的,并且可以精确解析并无歧义地插入到下一个提示中。这种实践最大限度地减少了因自然语言解释而可能产生的错误,是构建稳健的多步骤基于LLM的系统的关键组成部分。

实际应用与使用场景

提示链是一种多功能模式,适用于构建智能体系统时的多种场景。其核心作用在于将复杂问题分解为连续的、可管理的步骤。以下是几个实际应用和使用场景:

1. 信息处理工作流: 许多任务需要通过多个转换步骤处理原始信息。例如,摘要文档、提取关键实体,然后使用这些实体查询数据库或生成报告。提示链可能如下:

  • 提示1:从给定的URL或文档中提取文本内容。
  • 提示2:总结清理后的文本。
  • 提示3:从摘要或原始文本中提取特定实体(如姓名、日期、地点)。
  • 提示4:使用这些实体搜索内部知识库。
  • 提示5:生成包含摘要、实体和搜索结果的最终报告。

这种方法应用于自动内容分析、AI驱动的研究助手开发以及复杂报告生成领域。

2. 复杂问题解答: 解答需要多步骤推理或信息检索的复杂问题是一个主要使用场景。例如,“1929年股市崩盘的主要原因是什么,政府政策如何应对?”

  • Prompt 1: Identify the core sub-questions in the user's query (causes of crash, government response).
  • Prompt 2: Research or retrieve information specifically about the causes of the 1929 crash.
  • Prompt 3: Research or retrieve information specifically about the government's policy response to the 1929 stock market crash.
  • Prompt 4: Synthesize the information from steps 2 and 3 into a coherent answer to the original query.

这种顺序处理方法对于开发能够进行多步骤推理和信息综合的人工智能系统至关重要。当一个查询无法通过单一数据点回答,而是需要一系列逻辑步骤或整合来自不同来源的信息时,这种方法尤为重要。

例如,一个自动化研究智能体设计用于生成关于特定主题的综合报告时,会执行混合计算工作流。系统首先检索大量相关文章。随后,从每篇文章中提取关键信息的任务可以并行执行,以提高效率。这一阶段非常适合并行处理,其中独立的子任务同时运行以最大化效率。

然而,一旦完成单独的信息提取,过程就变得本质上是顺序的。系统必须首先汇总提取的数据,然后将其综合成一个连贯的草稿,最后审查并完善该草稿以生成最终报告。后续阶段的每一步都逻辑上依赖于前一步的成功完成。这就是提示链的应用:汇总的数据作为综合提示的输入,生成的综合文本成为最终审查提示的输入。因此,复杂操作通常结合了独立数据收集的并行处理和综合与完善的依赖步骤的提示链。

3. 数据提取与转换: 将非结构化文本转换为结构化格式通常通过迭代过程实现,需要顺序修改以提高输出的准确性和完整性。

  • Prompt 1: 尝试从发票文档中提取特定字段(例如,姓名、地址、金额)。
  • 处理:检查是否提取了所有必需字段,并且是否符合格式要求。
  • Prompt 2(条件性):如果字段缺失或格式错误,设计一个新的提示,要求模型专门查找缺失/格式错误的信息,并提供失败尝试的上下文。
  • 处理:再次验证结果。如有必要,重复此过程。
  • 输出:提供提取、验证后的结构化数据。

这种顺序处理方法特别适用于从非结构化来源(如表单、发票或电子邮件)中提取和分析数据。例如,解决复杂的光学字符识别(OCR)问题,如处理 PDF 表单,通过分解的多步骤方法更为有效。

首先,使用大型语言模型从文档图像中执行初步文本提取。随后,模型处理原始输出以规范化数据,这一步可能包括将数字文本(例如“one thousand and fifty”)转换为其数字等价形式 1050。大型语言模型在执行精确的数学计算方面面临显著挑战。因此,在随后的步骤中,系统可以将任何所需的算术操作委托给外部计算工具。语言模型识别必要的计算,将规范化的数字传递给工具,然后整合精确结果。这种链式的文本提取、数据规范化和外部工具使用序列能够实现最终准确的结果,而这通常难以通过单一语言模型查询可靠地获得。

4. 内容生成工作流程:

复杂内容的创作是一项程序化任务,通常分解为几个独立的阶段,包括初步构思、结构化大纲、草稿撰写以及后续修订。

  • 提示 1:根据用户的一般兴趣生成 5 个主题想法。
  • 处理:允许用户选择一个主题或自动选择最佳主题。
  • 提示 2:基于选定的主题生成详细的大纲。
  • 提示 3:根据大纲中的第一点撰写草稿部分。
  • 提示 4:根据大纲中的第二点撰写草稿部分,并提供上一部分作为上下文。对所有大纲点重复此过程。
  • 提示 5:审查并优化完整草稿的连贯性、语调和语法。

此方法适用于多种自然语言生成任务,包括创意叙事、技术文档以及其他形式的结构化文本内容的自动创作。


5. 具有状态的对话智能体:

尽管全面的状态管理架构采用了比顺序链接更复杂的方法,提示链提供了一种基础机制,用于保持对话的连续性。该技术通过构建每次对话轮次为一个新提示,并系统性地结合对话序列中前几次交互的信息或提取的实体来维护上下文。

  • 提示 1:处理用户的第一个语句,识别意图和关键实体。
  • 处理:使用意图和实体更新对话状态。
  • 提示 2:基于当前状态生成响应和/或识别下一个需要的信息。
  • 对后续轮次重复此过程,每次新的用户语句都会启动一个链条,利用累积的对话历史(状态)。

这一原则是开发对话智能体的基础,使其能够在扩展的多轮对话中保持上下文和连贯性。通过保留对话历史,系统可以理解并适当地回应依赖于之前信息的用户输入。


6. 代码生成与优化:

生成功能性代码通常是一个多阶段的过程,需要将问题分解为一系列离散的逻辑操作并逐步执行。

  • 提示 1:理解用户对代码功能的请求,生成伪代码或大纲。
  • 提示 2:根据大纲编写初始代码草稿。
  • 提示 3:识别代码中的潜在错误或改进区域(可能使用静态分析工具或另一个大型语言模型调用)。
  • 提示 4:根据识别的问题重写或优化代码。
  • 提示 5:添加文档或测试用例。

在人工智能辅助软件开发等应用中,提示链的实用性源于其能够将复杂的编码任务分解为一系列可管理的子问题。这种模块化结构降低了每一步对大型语言模型的操作复杂性。关键是,这种方法还允许在模型调用之间插入确定性逻辑,从而实现中间数据处理、输出验证以及工作流中的条件分支。通过这种方法,一个可能导致不可靠或不完整结果的单一复杂请求被转换为由底层执行框架管理的结构化操作序列。


7. 多模态与多步骤推理:

分析包含多种模态的数据集需要将问题分解为较小的基于提示的任务。例如,解释一张包含嵌入文本的图片,其中有标签标注特定文本段,以及解释每个标签的表格数据,都需要采用这种方法。

  • 提示 1:从用户的图像请求中提取并理解文本内容。
  • 提示 2:将提取的图像文本与其对应的标签关联起来。
  • 提示 3:通过表格解释收集的信息以确定所需输出。

实践代码示例

实现提示链可以通过脚本中的直接顺序函数调用,也可以通过专门设计用于管理控制流、状态和组件集成的框架来完成。LangChain、LangGraph、Crew AI 和 Google Agent Development Kit (ADK) 等框架提供了构建和执行这些多步骤流程的结构化环境,这对于复杂的架构特别有优势。

为了演示目的,LangChain 和 LangGraph 是合适的选择,因为它们的核心 API 专门设计用于组合操作链和图。LangChain 提供了线性序列的基础抽象,而 LangGraph 扩展了这些功能以支持有状态和循环计算,这对于实现更复杂的智能体行为是必要的。本示例将重点展示一个基本的线性序列。

以下代码实现了一个两步提示链,作为数据处理管道。初始阶段旨在解析非结构化文本并提取特定信息。随后的阶段接收此提取的输出并将其转换为结构化数据格式。

要复制此过程,首先需要安装所需的库。这可以使用以下命令完成:

pip install langchain langchain-community langchain-openai langgraph

注意,langchain-openai 可以替换为适用于其他模型提供商的相应包。随后,执行环境必须配置所选语言模型提供商(如 OpenAI、Google Gemini 或 Anthropic)的必要 API 凭证。

import os
from langchain_openai import ChatOpenAI
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser

## 为了更好的安全性,从 .env 文件加载环境变量
## from dotenv import load_dotenv
## load_dotenv()
## 确保你的 OPENAI_API_KEY 已在 .env 文件中设置

## 初始化语言模型(推荐使用 ChatOpenAI)
llm = ChatOpenAI(temperature=0)

## --- 提示 1:提取信息 ---
prompt_extract = ChatPromptTemplate.from_template(
    "从以下文本中提取技术规格:\n\n{text_input}"
)

## --- 提示 2:转换为 JSON ---
prompt_transform = ChatPromptTemplate.from_template(
    "将以下规格转换为一个包含 'cpu'、'memory' 和 'storage' 作为键的 JSON 对象:\n\n{specifications}"
)

## --- 使用 LCEL 构建链 ---
## StrOutputParser() 将 LLM 的消息输出转换为简单字符串。
extraction_chain = prompt_extract | llm | StrOutputParser()

## 完整链将提取链的输出传递到转换提示的 'specifications' 变量中。
full_chain = (
    {"specifications": extraction_chain}
    | prompt_transform
    | llm
    | StrOutputParser()
)

## --- 运行链 ---
input_text = "新款笔记本电脑型号配备了 3.5 GHz 八核处理器、16GB RAM 和 1TB NVMe SSD。"

## 使用输入文本字典执行链。
final_result = full_chain.invoke({"text_input": input_text})

print("\n--- 最终 JSON 输出 ---")
print(final_result)

这段 Python 代码演示了如何使用 LangChain 库来处理文本。代码中使用了两个独立的提示:一个用于从输入字符串中提取技术规格,另一个用于将这些规格格式化为 JSON 对象。ChatOpenAI 模型用于语言模型交互,而 StrOutputParser 确保输出为可用的字符串格式。LangChain 表达语言(LCEL)被用来优雅地将这些提示和语言模型串联起来。第一个链 extraction_chain 用于提取规格,而 full_chain 则将提取结果作为输入,用于转换提示。代码提供了一个描述笔记本电脑的示例输入文本。full_chain 被调用处理该文本,通过两个步骤生成最终结果。最终结果是一个包含提取和格式化规格的 JSON 字符串,并将其打印出来。

上下文工程与提示工程

上下文工程(见图 1)是一门系统化的学科,旨在设计、构建并在生成 token 之前向 AI 模型提供完整的信息环境。这一方法论认为,模型输出的质量与模型架构本身的关系较小,而更多地取决于所提供上下文的丰富程度。

图 1:上下文工程是一门为 AI 构建丰富、全面的信息环境的学科,因为上下文的质量是实现高级智能性能的主要因素。

图 1:上下文工程是一门为 AI 构建丰富、全面的信息环境的学科,因为上下文的质量是实现高级智能性能的主要因素。

上下文工程相较于传统的提示工程有显著的进步,后者主要关注优化用户即时查询的措辞。而上下文工程则扩展了这一范围,包括多个信息层,例如 系统提示,它是定义 AI 操作参数的基础指令,例如 “你是一名技术写作者;你的语气必须正式且精确。” 上下文还可以通过外部数据进一步丰富。这包括检索的文档,AI 从知识库中主动获取信息以支持其响应,例如提取项目的技术规格。上下文还结合了工具输出,即 AI 使用外部 API 获取实时数据的结果,例如查询日历以确定用户的可用时间。这些显性数据与重要的隐性数据相结合,例如用户身份、交互历史和环境状态。核心原则是,即使是高级模型,如果提供的操作环境视图有限或构建不良,其性能也会下降。

因此,这种实践将任务从简单回答问题重新定义为为智能体构建全面的操作图景。例如,一个经过上下文工程设计的智能体不仅会回答查询,还会首先整合用户的日历可用性(工具输出)、与电子邮件收件人的职业关系(隐性数据)以及之前会议的笔记(检索的文档)。这使得模型能够生成高度相关、个性化且实用的输出。“工程”部分包括创建稳健的管道以在运行时获取和转换这些数据,并建立反馈循环以持续改进上下文质量。

为了实现这一点,可以使用专门的调优系统来自动化大规模改进过程。例如,像 Google 的 Vertex AI 提示优化器这样的工具可以通过系统地根据一组样本输入和预定义的评估指标评估响应来增强模型性能。这种方法能够在不同模型之间调整提示和系统指令,而无需进行大量的手动重写。通过向优化器提供样本提示、系统指令和模板,它可以以编程方式优化上下文输入,为实现复杂的上下文工程所需的反馈循环提供结构化的方法。

这种结构化的方法是将初级 AI 工具与更复杂且具有上下文感知的系统区分开来的关键。它将上下文本身视为主要组件,重点关注智能体知道什么、何时知道以及如何使用这些信息。这种实践确保模型对用户意图、历史和当前环境有全面的理解。最终,上下文工程是将无状态聊天机器人转化为高度能力化、情境感知系统的重要方法论。

概览

定义(What)

复杂任务往往会在单一提示中使大型语言模型(LLM)不堪重负,导致显著的性能问题。模型的认知负荷增加了错误的可能性,例如忽略指令、丢失上下文以及生成错误信息。单一提示难以有效管理多个约束和顺序推理步骤,导致输出不可靠且不准确,因为 LLM 无法全面处理多方面的请求。

设计意图(Why)

提示链提供了一种标准化解决方案,通过将复杂问题分解为一系列较小的、相互关联的子任务来解决问题。链中的每一步都使用一个专注的提示来执行特定操作,从而显著提高可靠性和控制力。一个提示的输出作为输入传递给下一个提示,创建一个逻辑工作流,逐步构建最终解决方案。这种模块化的分而治之策略使过程更易于管理、更易于调试,并允许在步骤之间集成外部工具或结构化数据格式。这种模式是开发能够规划、推理和执行复杂工作流的高级多步骤智能体系统的基础。

使用原则(Rule of Thumb)

当任务过于复杂以至于单一提示无法处理时,涉及多个不同的处理阶段、需要在步骤之间与外部工具交互,或者在构建需要执行多步骤推理并维护状态的智能体系统时,可以使用这种模式。

图解 (Visual Summary)

图 2:提示链模式:智能体从用户接收一系列提示,每个智能体的输出作为链中下一个智能体的输入。

图 2:提示链模式:智能体从用户接收一系列提示,每个智能体的输出作为链中下一个智能体的输入。

关键要点

以下是一些关键要点:

  • 提示链将复杂任务分解为一系列较小且专注的步骤。这有时也被称为管道模式。
  • 链中的每一步包括一次 LLM 调用或处理逻辑,使用前一步的输出作为输入。
  • 这种模式提高了与语言模型进行复杂交互的可靠性和可管理性。
  • 像 LangChain/LangGraph 和 Google ADK 等框架提供了定义、管理和执行这些多步骤序列的强大工具。

结论

通过将复杂问题分解为一系列更简单、更易管理的子任务,提示链(Prompt Chaining)为引导大型语言模型提供了一个强大的框架。这种“分而治之”的策略显著提升了输出的可靠性和可控性,因为它使模型能够专注于一次完成一个特定操作。作为一种基础模式,它支持开发能够进行多步骤推理、工具集成以及状态管理的复杂 AI 智能体。最终,掌握提示链技术对于构建能够执行复杂工作流程的强大、上下文感知的系统至关重要,这些系统的能力远超单一提示所能实现的范围。

参考文献

  1. LangChain 关于 LCEL 的文档:https://python.langchain.com/v0.2/docs/core_modules/expression_language/
  2. LangGraph 文档:https://langchain-ai.github.io/langgraph/
  3. 提示工程指南 - 提示链:https://www.promptingguide.ai/techniques/chaining
  4. OpenAI API 文档(通用提示概念):https://platform.openai.com/docs/guides/gpt/prompting
  5. Crew AI 文档(任务与流程):https://docs.crewai.com/
  6. Google AI 开发者指南(提示工程指南):https://cloud.google.com/discover/what-is-prompt-engineering?hl=en
  7. Vertex 提示优化器:https://cloud.google.com/vertex-ai/generative-ai/docs/learn/prompts/prompt-optimizer

results matching ""

    No results matching ""