第1章:提示链
学习如何使用顺序提示处理将复杂任务分解为可管理的子问题
第1章:提示链
提示链模式概述
提示链,有时被称为管道模式,代表了在使用大语言模型(LLM)处理复杂任务时的一种强大范式。与其期望LLM在单一的整体步骤中解决复杂问题,提示链倡导分而治之的策略。核心思想是将原始、令人望而生畏的问题分解为一系列更小、更易管理的子问题。每个子问题通过专门设计的提示单独处理,一个提示生成的输出被策略性地作为输入传递给链中的下一个提示。
这种顺序处理技术本质上为与LLM的交互引入了模块化和清晰度。通过分解复杂任务,更容易理解和调试每个单独的步骤,使整个过程更加健壮和可解释。链中的每个步骤都可以精心制作和优化,专注于更大问题的特定方面,从而产生更准确和专注的输出。
一个步骤的输出作为下一个步骤的输入是至关重要的。这种信息传递建立了依赖链,因此得名,其中先前操作的上下文和结果指导后续处理。这允许LLM在其先前工作的基础上构建,完善其理解,并逐步接近期望的解决方案。
此外,提示链不仅仅是分解问题;它还使外部知识和工具的集成成为可能。在每个步骤中,可以指示LLM与外部系统、API或数据库交互,丰富其知识和能力,超越其内部训练数据。这种能力极大地扩展了LLM的潜力,使它们不仅能够作为孤立的模型,而且能够作为更广泛、更智能系统的组成部分。
提示链的意义超越了简单的问题解决。它作为构建复杂AI智能体的基础技术。这些智能体可以利用提示链在动态环境中自主规划、推理和行动。通过策略性地构建提示序列,智能体可以参与需要多步推理、规划和决策的任务。这种智能体工作流可以更紧密地模拟人类思维过程,允许与复杂领域和系统进行更自然和有效的交互。
单一提示的局限性: 对于多方面的任务,使用单一、复杂的提示对LLM来说可能是低效的,导致模型在约束和指令方面挣扎,可能导致指令忽略(提示的部分被忽视)、上下文漂移(模型失去对初始上下文的跟踪)、错误传播(早期错误被放大)、需要更长上下文窗口的提示(模型获得的信息不足)以及幻觉(认知负载增加错误信息的可能性)。例如,一个要求分析市场研究报告、总结发现、用数据点识别趋势并起草电子邮件的查询可能会失败,因为模型可能总结得很好,但无法正确提取数据或起草电子邮件。
通过顺序分解增强可靠性: 提示链通过将复杂任务分解为专注的顺序工作流来解决这些挑战,这显著提高了可靠性和控制。给定上面的例子,管道或链式方法可以描述如下:
- 初始提示(总结):"总结以下市场研究报告的关键发现:[文本]。" 模型只专注于总结,提高了这个初始步骤的准确性。
- 第二个提示(趋势识别):"使用摘要,识别前三个新兴趋势并提取支持每个趋势的具体数据点:[步骤1的输出]。" 这个提示现在更加受限,直接建立在验证的输出之上。
- 第三个提示(电子邮件撰写):"起草一封简洁的电子邮件给营销团队,概述以下趋势及其支持数据:[步骤2的输出]。"
这种分解允许对过程进行更细粒度的控制。每个步骤都更简单、更不模糊,这减少了模型的认知负载,并导致更准确和可靠的最终输出。这种模块化类似于计算管道,其中每个函数在将其结果传递给下一个之前执行特定操作。为了确保每个特定任务的准确响应,可以在每个阶段为模型分配不同的角色。例如,在给定场景中,初始提示可以指定为"市场分析师",后续提示为"交易分析师",第三个提示为"专家文档编写者",等等。
结构化输出的作用: 提示链的可靠性高度依赖于步骤之间传递的数据的完整性。如果一个提示的输出是模糊的或格式不良的,后续提示可能会因错误的输入而失败。为了缓解这种情况,指定结构化输出格式(如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年股市崩盘的主要原因是什么,政府政策如何回应?"
- 提示1:识别用户查询中的核心子问题(崩盘原因、政府回应)。
- 提示2:专门研究或检索关于1929年崩盘原因的信息。
- 提示3:专门研究或检索关于政府对1929年股市崩盘的政策回应的信息。
- 提示4:将步骤2和3的信息综合成对原始查询的连贯回答。
这种顺序处理方法对于开发能够进行多步推理和信息综合的AI系统是必不可少的。当查询无法从单个数据点回答,而是需要一系列逻辑步骤或整合来自不同来源的信息时,就需要这样的系统。
例如,一个设计用于生成特定主题综合报告的自动化研究智能体执行混合计算工作流。最初,系统检索大量相关文章。随后从每篇文章中提取关键信息的任务可以并发地为每个来源执行。这个阶段非常适合并行处理,其中独立的子任务同时运行以最大化效率。
然而,一旦个别提取完成,过程就变得本质上是顺序的。系统必须首先整理提取的数据,然后将其综合成连贯的草稿,最后审查和完善这个草稿以产生最终报告。这些后期阶段中的每一个在逻辑上都依赖于前一个的成功完成。这就是应用提示链的地方:整理的数据作为综合提示的输入,产生的综合文本成为最终审查提示的输入。因此,复杂操作经常将独立数据收集的并行处理与综合和完善的依赖步骤的提示链相结合。
3. 数据提取和转换: 将非结构化文本转换为结构化格式通常通过迭代过程实现,需要对输出进行顺序修改以提高准确性和完整性。
- 提示1:尝试从发票文档中提取特定字段(如姓名、地址、金额)。
- 处理:检查是否提取了所有必需字段以及它们是否符合格式要求。
- 提示2(条件性):如果字段缺失或格式错误,制作一个新的提示,要求模型专门查找缺失/格式错误的信息,可能提供来自失败尝试的上下文。
- 处理:再次验证结果。如有必要,重复。
- 输出:提供提取的、验证的结构化数据。
这种顺序处理方法特别适用于从非结构化来源(如表单、发票或电子邮件)进行数据提取和分析。例如,解决复杂的光学字符识别(OCR)问题,如处理PDF表单,通过分解的多步方法更有效地处理。
最初,使用大语言模型从文档图像中执行主要文本提取。随后,模型处理原始输出以标准化数据,在这一步骤中,它可能将数字文本(如"一千零五十")转换为其数值等价物1050。LLM的一个重大挑战是执行精确的数学计算。因此,在后续步骤中,系统可以将任何所需的算术操作委托给外部计算器工具。LLM识别必要的计算,将标准化的数字提供给工具,然后整合精确的结果。这种文本提取、数据标准化和外部工具使用的链式序列实现了最终、准确的结果,这通常很难从单个LLM查询中可靠地获得。
4. 内容生成工作流: 复杂内容的创作是一个程序性任务,通常分解为不同的阶段,包括初始构思、结构大纲、起草和后续修订
- 提示1:基于用户的一般兴趣生成5个主题想法。
- 处理:允许用户选择一个想法或自动选择最佳想法。
- 提示2:基于所选主题,生成详细大纲。
- 提示3:基于大纲中的第一点写草稿部分。
- 提示4:基于大纲中的第二点写草稿部分,提供前一部分的上下文。对所有大纲点继续此过程。
- 提示5:审查和完善完整草稿的连贯性、语调和语法。
这种方法用于一系列自然语言生成任务,包括创意叙述、技术文档和其他形式的结构化文本内容的自动创作。
5. 带状态的对话智能体: 虽然全面的状态管理架构采用比顺序链接更复杂的方法,但提示链为保持对话连续性提供了基础机制。这种技术通过将每个对话轮次构建为系统性地整合对话序列中先前交互的信息或提取实体的新提示来维护上下文。
- 提示1:处理用户话语1,识别意图和关键实体。
- 处理:用意图和实体更新对话状态。
- 提示2:基于当前状态,生成响应和/或识别下一个所需的信息片段。
- 对后续轮次重复,每个新的用户话语启动一个利用累积对话历史(状态)的链。
这个原则对于对话智能体的开发是基础的,使它们能够在扩展的多轮对话中保持上下文和连贯性。通过保留对话历史,系统可以理解并适当回应用户输入,这些输入依赖于先前交换的信息。
6. 代码生成和完善: 功能代码的生成通常是一个多阶段过程,需要将问题分解为一系列离散的逻辑操作,这些操作逐步执行
- 提示1:理解用户对代码函数的请求。生成伪代码或大纲。
- 提示2:基于大纲编写初始代码草稿。
- 提示3:识别代码中的潜在错误或改进领域(可能使用静态分析工具或另一个LLM调用)。
- 提示4:基于识别的问题重写或完善代码。
- 提示5:添加文档或测试用例。
在AI辅助软件开发等应用中,提示链的效用源于其将复杂编码任务分解为一系列可管理子问题的能力。这种模块化结构减少了每个步骤中大语言模型的操作复杂性。关键的是,这种方法还允许在模型调用之间插入确定性逻辑,在工作流中实现中间数据处理、输出验证和条件分支。通过这种方法,原本可能导致不可靠或不完整结果的单一、多方面请求被转换为由底层执行框架管理的结构化操作序列。
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可以被不同模型提供商的适当包替代。随后,执行环境必须配置所选语言模型提供商的必要API凭据,如OpenAI、Google Gemini或Anthropic。
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()
# 确保在.env文件中设置了OPENAI_API_KEY
# 初始化语言模型(推荐使用ChatOpenAI)
llm = ChatOpenAI(temperature=0)
# --- 提示1:提取信息 ---
prompt_extract = ChatPromptTemplate.from_template(
"从以下文本中提取技术规格:\n\n{text_input}"
)
# --- 提示2:转换为JSON ---
prompt_transform = ChatPromptTemplate.from_template(
"将以下规格转换为JSON对象,以'cpu'、'memory'和'storage'作为键:\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 Expression Language(LCEL)用于优雅地将这些提示和语言模型链接在一起。第一个链extraction_chain提取规格。full_chain然后获取提取的输出并将其用作转换提示的输入。提供了描述笔记本电脑的示例输入文本。full_chain使用此文本调用,通过两个步骤处理它。最终结果,包含提取和格式化规格的JSON字符串,然后被打印。
上下文工程和提示工程
上下文工程(见图1)是在令牌生成之前为AI模型设计、构建和传递完整信息环境的系统学科。这种方法断言模型输出的质量较少依赖于模型架构本身,更多依赖于提供的上下文的丰富性。

图1:上下文工程是为AI构建丰富、全面的信息环境的学科,因为这种上下文的质量是启用高级智能体性能的主要因素。
它代表了从传统提示工程的重大演进,传统提示工程主要专注于优化用户即时查询的措辞。上下文工程扩展了这个范围,包括几个信息层,如系统提示,这是定义AI操作参数的基础指令集——例如,"你是一名技术作家;你的语调必须正式和精确。" 上下文进一步丰富了外部数据。这包括检索文档,其中AI主动从知识库获取信息以告知其响应,如拉取项目的技术规格。它还整合了工具输出,这些是AI使用外部API获取实时数据的结果,如查询日历以确定用户的可用性。这种显式数据与关键的隐式数据相结合,如用户身份、交互历史和环境状态。核心原则是,即使高级模型在提供有限或构建不良的操作环境视图时也会表现不佳。
因此,这种做法将任务从仅仅回答问题重新定义为为智能体构建全面的操作图景。例如,一个上下文工程的智能体不仅会响应查询,还会首先整合用户的日历可用性(工具输出)、与电子邮件收件人的专业关系(隐式数据)以及先前会议的笔记(检索文档)。这允许模型生成高度相关、个性化和实用有用的输出。"工程"组件涉及创建健壮的管道以在运行时获取和转换这些数据,并建立反馈循环以持续改进上下文质量。
为了实现这一点,可以使用专门的调优系统来自动化大规模改进过程。例如,Google的Vertex AI提示优化器等工具可以通过系统性地根据一组示例输入和预定义评估指标评估响应来增强模型性能。这种方法对于在不同模型之间适应提示和系统指令而不需要大量手动重写是有效的。通过为这样的优化器提供示例提示、系统指令和模板,它可以程序化地完善上下文输入,为实施复杂上下文工程所需的反馈循环提供结构化方法。
这种结构化方法是将原始AI工具与更复杂和上下文感知的系统区分开来的关键。它将上下文本身视为主要组件,对智能体知道什么、何时知道以及如何使用该信息给予关键重要性。这种做法确保模型对用户的意图、历史和当前环境有全面的理解。最终,上下文工程是将无状态聊天机器人推进为高度能力、情境感知系统的关键方法。
一览
什么: 复杂任务在单一提示中处理时经常使LLM不堪重负,导致严重的性能问题。模型上的认知负载增加了错误的可能性,如忽视指令、失去上下文和生成错误信息。单一提示难以有效管理多个约束和顺序推理步骤。这导致不可靠和不准确的输出,因为LLM无法解决多方面请求的所有方面。
为什么: 提示链通过将复杂问题分解为一系列更小、相互关联的子任务提供标准化解决方案。链中的每个步骤使用专注的提示执行特定操作,显著提高可靠性和控制。一个提示的输出作为下一个的输入传递,创建逐步构建到最终解决方案的逻辑工作流。这种模块化的分而治之策略使过程更易管理、更易调试,并允许在步骤之间集成外部工具或结构化数据格式。这种模式是开发能够规划、推理和执行复杂工作流的复杂多步智能体系统的基础。
经验法则: 当任务对单一提示过于复杂、涉及多个不同的处理阶段、需要在步骤之间与外部工具交互,或构建需要执行多步推理和维护状态的智能体系统时使用此模式。
视觉总结

图2:提示链模式:智能体从用户接收一系列提示,每个智能体的输出作为链中下一个的输入。
关键要点
以下是一些关键要点:
- 提示链将复杂任务分解为一系列更小、专注的步骤。这有时被称为管道模式。
- 链中的每个步骤涉及LLM调用或处理逻辑,使用前一步的输出作为输入。
- 这种模式提高了与语言模型复杂交互的可靠性和可管理性。
- LangChain/LangGraph和Google ADK等框架提供健壮的工具来定义、管理和执行这些多步序列。
结论
通过将复杂问题解构为一系列更简单、更易管理的子任务,提示链为引导大语言模型提供了健壮的框架。这种"分而治之"策略通过一次专注于一个特定操作,显著增强了输出的可靠性和控制。作为基础模式,它使开发能够进行多步推理、工具集成和状态管理的复杂AI智能体成为可能。最终,掌握提示链对于构建能够执行超出单一提示能力的复杂工作流的健壮、上下文感知系统至关重要。
参考文献
- LangChain关于LCEL的文档:https://python.langchain.com/v0.2/docs/core_modules/expression_language/
- LangGraph文档:https://langchain-ai.github.io/langgraph/
- 提示工程指南 - 链接提示:https://www.promptingguide.ai/techniques/chaining
- OpenAI API文档(一般提示概念):https://platform.openai.com/docs/guides/gpt/prompting
- Crew AI文档(任务和过程):https://docs.crewai.com/
- Google AI for Developers(提示指南):https://cloud.google.com/discover/what-is-prompt-engineering?hl=en
- Vertex提示优化器 https://cloud.google.com/vertex-ai/generative-ai/docs/learn/prompts/prompt-optimizer