第 1 章:提示词链
提示词链模式概述
提示词链(Prompt Chaining),有时称为管道模式(Pipeline pattern),是处理复杂任务时利用大型语言模型(LLM)的强大范式。该方法摒弃了让LLM在单一整体化步骤中解决复杂问题的做法,采用分而治之策略:将原始复杂问题分解为更小、更易管理的子问题序列,每个子问题通过专门设计的提示词单独处理,输出作为输入传递给链中后续提示词。
这种顺序处理技术为与 LLM 的交互引入了模块化和清晰性。通过分解复杂任务,更容易理解和调试每个单独的步骤,使整个过程更加健壮和可解释。链中的每一步都可以精心设计和优化,专注于更大问题的特定方面,从而产生更准确和聚焦的输出。
一个步骤的输出作为下一个步骤的输入至关重要。这种信息传递建立了依赖链(因此得名),其中先前操作的上下文和结果指导后续处理。这使得 LLM 能够在其先前工作的基础上构建,完善理解,并逐步接近期望的解决方案。
此外,提示词链不仅仅是分解问题;它还支持外部知识和工具的集成。在每一步,LLM 都可以被指示与外部系统、API 或数据库交互,丰富其超越内部训练数据的知识和能力。这种能力极大地扩展了 LLM 的潜力,使它们不仅仅作为独立模型运行,而是作为更广泛智能系统的组成部分。
提示词链的重要性超越了简单的问题解决。它是构建复杂 AI Agent 的基础技术。这些 Agent 可以利用提示词链在动态环境中自主规划、推理和行动。通过战略性地构建提示词序列,Agent 可以参与需要多步推理、规划和决策的任务。这样的 Agent 工作流可以更紧密地模拟人类思维过程,从而实现与复杂领域和系统更自然有效的交互。
单一提示词的局限性: 对于多维度任务,为LLM使用单一复杂提示词往往效率低下,可能导致:指令忽略(部分提示被忽视)、上下文漂移(丢失初始上下文)、错误传播(早期错误放大)、需要更大上下文窗口(信息不足无法响应)以及幻觉生成(高认知负荷导致错误信息)。例如要求分析市场报告、总结发现、识别数据趋势并起草邮件的查询,模型可能完成总结但无法正确提取数据或起草邮件。
通过顺序分解增强可靠性: 提示词链通过将复杂任务分解为聚焦的顺序工作流来解决这些挑战,显著提高了可靠性和控制力。基于上面的例子,管道或链式方法可以描述如下:
- 初始提示词(总结):”总结以下市场研究报告的主要发现:[文本]。” 模型的唯一焦点是总结,提高了这一初始步骤的准确性。
- 第二个提示词(趋势识别):”使用摘要,识别前三个新兴趋势并提取支持每个趋势的具体数据点:[步骤 1 的输出]。” 此提示词现在更受约束,并直接建立在经过验证的输出之上。
- 第三个提示词(电子邮件撰写):”向营销团队起草一封简明的电子邮件,概述以下趋势及其支持数据:[步骤 2 的输出]。”
这种分解提供更精细的流程控制。每个简化步骤减少模型认知负荷,产生更准确可靠的输出。这种模块化类似于计算流水线,每个函数执行特定操作后传递结果。为确保各步骤准确性,可为模型分配不同角色,如:初始提示词作”市场分析师”,后续提示词作”贸易分析师”,第三个提示词作”专业文档撰写者”。
结构化输出的作用: 提示词链的可靠性高度依赖于步骤之间传递的数据完整性。如果一个提示词的输出不明确或格式不佳,后续提示词可能由于错误的输入而失败。为了缓解这一问题,指定结构化输出格式(如 JSON 或 XML)至关重要。
例如,趋势识别步骤的输出可以格式化为 JSON 对象:
1
2
3
4
5
6
7
8
9
10
11
12
{
"trends": [
{
"trend_name": "AI-Powered Personalization",
"supporting_data": "73% of consumers prefer to do business with brands that use personal information to make their shopping experiences more relevant."
},
{
"trend_name": "Sustainable and Ethical Brands",
"supporting_data": "Sales of products with ESG-related claims grew 28% over the last five years, compared to 20% for products without."
}
]
}
结构化格式确保机器可解析性,支持精确解析并无歧义插入后续提示。该实践最小化自然语言解释错误,是构建健壮的多步骤LLM系统的关键组件。
实际应用与用例
提示词链是一种多用途模式,在构建 Agent 系统时适用于广泛的场景。其核心效用在于将复杂问题分解为顺序的、可管理的步骤。以下是几个实际应用和用例:
1. 信息处理工作流: 许多任务涉及通过多次转换处理原始信息。例如,总结文档、提取关键实体,然后使用这些实体查询数据库或生成报告。提示词链可能如下所示:
- 提示词 1:从给定的 URL 或文档中提取文本内容。
- 提示词 2:总结清理后的文本。
- 提示词 3:从摘要或原始文本中提取特定实体(例如,姓名、日期、位置)。
- 提示词 4:使用实体搜索内部知识库。
- 提示词 5:生成包含摘要、实体和搜索结果的最终报告。
这种方法应用于自动化内容分析、AI 驱动的研究助手开发和复杂报告生成等领域。
2. 复杂查询回答: 回答需要多步推理或信息检索的复杂问题是一个主要用例。例如,”1929 年股市崩盘的主要原因是什么,政府政策如何应对?”
- 提示词 1:识别用户查询中的核心子问题(崩盘原因、政府响应)。
- 提示词 2:专门研究或检索有关 1929 年崩盘原因的信息。
- 提示词 3:专门研究或检索有关政府对 1929 年股市崩盘的政策响应的信息。
- 提示词 4:将步骤 2 和 3 的信息综合成对原始查询的连贯答案。
这种顺序处理方法是开发能够进行多步推理和信息综合的 AI 系统的核心。当查询无法从单个数据点回答,而是需要一系列逻辑步骤或来自不同来源的信息集成时,需要这样的系统。
例如,设计用于生成关于特定主题的综合报告的自动化研究 Agent 执行混合计算工作流。最初,系统检索大量相关文章。从每篇文章中提取关键信息的后续任务可以为每个来源并发执行。此阶段非常适合并行处理,其中独立的子任务同时运行以最大化效率。
然而完成单个提取后,过程转为顺序执行:先整合提取数据,再综合成连贯草稿,最后审查完善生成报告。这些阶段存在逻辑依赖关系,需应用提示词链式调用:整合数据作为综合提示词输入,综合文本作为审查提示词输入。因此复杂操作常结合并行处理收集独立数据与链式调用处理依赖步骤。
3. 数据提取和转换: 将非结构化文本转换为结构化格式通常通过迭代过程实现,需要顺序修改以提高输出的准确性和完整性。
- 提示词 1:尝试从发票文档中提取特定字段(例如,姓名、地址、金额)。
- 处理:检查是否提取了所有必需字段以及它们是否满足格式要求。
- 提示词 2(条件性):如果字段缺失或格式错误,制作新提示词要求模型专门查找缺失/格式错误的信息,可能提供失败尝试的上下文。
- 处理:再次验证结果。如有必要重复。
- 输出:提供提取的、验证的结构化数据。
这种顺序处理方法特别适用于从表单、发票或电子邮件等非结构化来源进行数据提取和分析。例如,解决复杂的光学字符识别(OCR)问题,如处理 PDF 表单,通过分解的多步方法更有效地处理。
首先通过LLM从文档图像提取文本,随后规范化原始输出数据(如将”一千零五十”转为1050)。由于LLM执行精确数学计算存在挑战,后续步骤可将算术运算委托给外部计算器工具:LLM识别计算需求,将规范化数字输入工具,再整合精确结果。通过文本提取→数据规范化→外部工具调用的链式序列,实现难以通过单一LLM查询获得的可靠结果。
4. 内容生成工作流: 复杂内容的创作是一个程序化任务,通常分解为不同的阶段,包括初始构思、结构大纲、起草和后续修订。
- 提示词 1:根据用户的一般兴趣生成 5 个主题想法。
- 处理:允许用户选择一个想法或自动选择最佳想法。
- 提示词 2:基于选定的主题,生成详细的大纲。
- 提示词 3:根据大纲中的第一点编写草稿部分。
- 提示词 4:根据大纲中的第二点编写草稿部分,提供前一部分作为上下文。对所有大纲点继续这样做。
- 提示词 5:审查和完善完整草稿的连贯性、语气和语法。
这种方法用于一系列自然语言生成任务,包括创意叙事、技术文档和其他形式的结构化文本内容的自动创作。
5. 具有状态的对话 Agent: 尽管全面的状态管理架构采用比顺序链接更复杂的方法,提示词链提供了保持对话连续性的基础机制。这种技术通过将每个对话轮次构建为新提示词来维护上下文,该提示词系统地合并来自对话序列中先前交互的信息或提取的实体。
- 提示词 1:处理用户话语 1,识别意图和关键实体。
- 处理:使用意图和实体更新对话状态。
- 提示词 2:基于当前状态,生成响应和/或识别下一个所需的信息片段。
- 对于后续轮次重复,每个新的用户话语启动一个利用累积对话历史(状态)的链。
这一原则是开发对话 Agent 的基础,使它们能够在扩展的、多轮对话中保持上下文和连贯性。通过保留对话历史,系统可以理解并适当响应依赖于先前交换信息的用户输入。
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 扩展了这些能力以支持状态化和循环计算,这对于实现更复杂的 Agent 行为是必需的。此示例将专注于基础线性序列。
以下代码实现了一个两步提示词链,作为数据处理管道运行。初始阶段旨在解析非结构化文本并提取特定信息。后续阶段然后接收此提取的输出并将其转换为结构化数据格式。
要复制此过程,必须首先安装所需的库。这可以使用以下命令完成:
1
pip install langchain langchain-community langchain-openai langgraph
请注意,langchain-openai 可以替换为不同模型提供商的适当包。随后,必须为选定的语言模型提供商(如 OpenAI、Google Gemini 或 Anthropic)配置执行环境所需的 API 凭据。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
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(
"将以下规格转换为 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 内存和 1TB NVMe 固态硬盘。"
## 使用输入文本字典执行链。
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将提取结果输入转换提示词。以笔记本电脑规格文本为示例输入,执行完整链式处理并输出格式化JSON结果。
上下文工程和提示工程
上下文工程(见图 1)是在 token 生成之前系统地设计、构建和向 AI 模型提供完整信息环境的学科。这种方法论断言,模型输出的质量较少依赖于模型架构本身,而更多依赖于所提供上下文的丰富性。
图 1:上下文工程是为 AI 构建丰富、全面的信息环境的学科,因为此上下文的质量是实现高级 Agent 性能的主要因素。
这代表着传统提示工程的重大演进:从单纯优化即时查询措辞,扩展到构建多层信息环境。核心组件包括:
- 系统提示词:定义AI操作参数的基础指令(如“你是一名技术作家,语气需正式精确”)
- 外部数据集成:
- 检索文档:AI主动从知识库获取信息(如提取项目技术规格)
- 工具输出:通过API获取实时数据(如查询日历确定用户空闲时间)
- 隐式数据融合:结合用户身份、交互历史和环境状态等关键信息
核心原则表明:即使高级模型在有限或不良构建的操作环境下也会表现不佳。
因此,这种实践将任务从仅仅回答问题重新定义为为 Agent 构建全面的操作图景。例如,上下文工程化的 Agent 不仅会响应查询,而且首先会整合用户的日历可用性(工具输出)、与电子邮件收件人的专业关系(隐式数据)以及之前会议的笔记(检索的文档)。这使得模型能够生成高度相关、个性化和实用的输出。”工程”组件涉及创建健壮的管道以在运行时获取和转换此数据,并建立反馈循环以持续改进上下文质量。
为此可采用专门优化系统实现大规模自动化改进。例如Google Vertex AI提示优化器,通过系统化评估样本输入响应与预定义指标来提升模型性能。该方法高效适配不同模型的提示词和系统指令,避免大量手动重写。向优化器提供样本提示、系统指令和模板后,可编程式完善上下文输入,为复杂上下文工程建立结构化反馈机制。
这种结构化方法是区分基本 AI 工具与更复杂、上下文感知系统的关键。它将上下文本身视为主要组件,对 Agent 知道什么、何时知道以及如何使用该信息给予关键重要性。这种实践确保模型对用户的意图、历史和当前环境有全面的理解。最终,上下文工程是将无状态聊天机器人提升为高度能干、情境感知系统的关键方法论。
概览
是什么: 复杂任务在单个提示词内处理时通常会使 LLM 不堪重负,导致严重的性能问题。模型的认知负荷增加了错误的可能性,如忽略指令、失去上下文和生成错误信息。单体提示词难以有效管理多个约束和顺序推理步骤。这导致不可靠和不准确的输出,因为 LLM 未能解决多方面请求的所有方面。
为什么: 提示词链通过将复杂问题分解为一系列较小的、相互关联的子任务来提供标准化解决方案。链中的每一步使用聚焦的提示词执行特定操作,显著提高可靠性和控制力。一个提示词的输出作为下一个提示词的输入传递,创建逐步构建最终解决方案的逻辑工作流。这种模块化的分而治之策略使过程更易于管理、更易于调试,并允许在步骤之间集成外部工具或结构化数据格式。这种模式是开发能够规划、推理和执行复杂工作流的复杂多步 Agent 系统的基础。
经验法则: 当任务对于单个提示词过于复杂、涉及多个不同的处理阶段、需要在步骤之间与外部工具交互,或者在构建需要执行多步推理并维护状态的 Agent 系统时,使用此模式。
视觉摘要
图 2:提示词链模式:Agent 从用户接收一系列提示词,每个 Agent 的输出作为链中下一个 Agent 的输入。
关键要点
以下是一些关键要点:
- 任务分解:将复杂任务拆解为聚焦步骤序列(又称管道模式)
- 链式处理:每步使用前步输出作为输入,执行LLM调用或处理逻辑
- 可靠性提升:显著增强复杂语言交互的可控性和稳定性
- 框架支持:LangChain/LangGraph和Google ADK提供多步序列的定义、管理和执行工具
结论
通过将复杂问题分解为一系列更简单、更易于管理的子任务,提示词链为指导大型语言模型提供了一个健壮的框架。这种”分而治之”策略通过一次专注于一个特定操作,显著提高了输出的可靠性和控制力。作为基础模式,它支持开发能够进行多步推理、工具集成和状态管理的复杂 AI Agent。最终,掌握提示词链对于构建能够执行远超单个提示词能力的复杂工作流的健壮、上下文感知系统至关重要。
参考文献
- LangChain Documentation on LCEL: https://python.langchain.com/v0.2/docs/core_modules/expression_language/
- LangGraph Documentation: https://langchain-ai.github.io/langgraph/
- Prompt Engineering Guide - Chaining Prompts: https://www.promptingguide.ai/techniques/chaining
- OpenAI API Documentation (General Prompting Concepts): https://platform.openai.com/docs/guides/gpt/prompting
- Crew AI Documentation (Tasks and Processes): https://docs.crewai.com/
- Google AI for Developers (Prompting Guides): https://cloud.google.com/discover/what-is-prompt-engineering?hl=en
- Vertex Prompt Optimizer https://cloud.google.com/vertex-ai/generative-ai/docs/learn/prompts/prompt-optimizer