第一章:提示链
1.1 提示链模式概述
提示链,有时也称为管道模式,代表了一种在利用大型语言模型(LLMs)时处理复杂任务的强大范式。它并非期望 LLM 通过单一、庞大的步骤解决复杂问题,而是提倡分而治之的策略。其核心思想是将原本令人望而生畏的问题分解为一系列更小、更易于管理的子问题。每个子问题都通过专门设计的提示单独解决,并且从某个提示生成的输出会策略性地作为输入传递到链中的下一个提示。
这种顺序处理技术将模块化和清晰性引入了与 LLMs 的交互中。通过分解复杂任务,更容易理解和调试每个独立步骤,使整个过程更加健壮和可解释。链中的每一步都可以精心设计和优化,专注于大问题的一个特定方面,从而产生更准确、更集中的输出。
一个步骤的输出作为下一个步骤的输入至关重要。这种信息的传递建立了一个依赖链,这也是其名称的由来,其中前一个操作的上下文和结果指导后续处理。这使得 LLM 能够基于其先前的工作,完善其理解,并逐步接近期望的解决方案。
此外,提示链不仅关于分解问题;它还使集成外部知识和工具成为可能。在每个步骤中,可以指示 LLM 与外部系统、API 或数据库进行交互,从而丰富其知识和能力,超越其内部训练数据。这种能力极大地扩展了 LLMs 的潜力,使其不仅作为孤立模型运行,而是作为更广泛、更智能系统的重要组成部分。
提示链的重要性超越了简单的解决问题。它作为构建复杂 AI 代理的基础技术。这些代理可以利用提示链在动态环境中自主规划、推理和行动。通过策略性地构建提示序列,代理可以参与需要多步推理、规划和决策的任务。这种代理工作流程可以更接近人类的思维过程,从而实现与复杂领域和系统的更自然和有效的交互。
单一提示的局限性:对于多方面任务,向 LLM 使用一个复杂的单一提示可能效率低下,导致模型难以处理约束和指令,可能造成指令忽视(提示的部分内容被忽略)、上下文漂移(模型失去对初始上下文的追踪)、错误传播(早期错误被放大)、需要更长的上下文窗口(模型获取的信息不足以回应)以及幻觉(认知负荷增加导致错误信息出现的概率增加)。例如,一个要求分析市场研究报告、总结发现、用数据点识别趋势并起草电子邮件的查询,由于模型可能擅长总结但无法正确提取数据或起草电子邮件,存在失败的风险。
通过顺序分解增强可靠性:提示链通过将复杂任务分解为专注的顺序工作流程来解决这些挑战,显著提高了可靠性和控制力。以上面的例子为例,管道或链式方法可以描述如下:
- 初始提示(摘要): "总结以下市场研究报告的关键发现:[文本]。模型的唯一重点是摘要,这提高了这一初始步骤的准确性。
- 第二次提示(趋势识别): "使用摘要,识别出三个主要的新兴趋势,并提取支持每个趋势的具体数据点:[步骤 1 的输出]。这个提示现在更加受限,并直接基于一个经过验证的输出。
- 第三次提示(邮件撰写): "为营销团队起草一封简洁的邮件,概述以下趋势及其支持数据:[步骤 2 的输出]。
这种分解使得对过程有更细粒度的控制。每一步都更简单、更不模糊,这减少了模型上的认知负荷,并带来了更准确和可靠的最终输出。这种模块化类似于计算管道,其中每个函数在将其结果传递给下一个函数之前执行特定操作。为确保每个特定任务都能得到准确响应,模型可以在每个阶段被分配一个不同的角色。例如,在给定场景中,初始提示可以指定为"市场分析师",后续提示可以指定为"交易分析师",第三个提示可以指定为"专家文档撰写者",等等。
结构化输出的作用:提示链的可靠性高度依赖于步骤之间传递的数据的完整性。如果某个提示的输出模糊或格式不佳,后续提示可能会因输入错误而失败。为了缓解这种情况,指定结构化输出格式,如 JSON 或 XML,至关重要。
例如,趋势识别步骤的输出可以格式化为一个 JSON 对象:
json
{
"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 系统的一个关键组成部分。
1.2 实际应用与用例
提示链是一种通用的模式,在构建代理系统时适用于广泛的各种场景。它的核心效用在于将复杂问题分解为顺序的、可管理的步骤。以下是一些实际应用和用例:
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。对于 LLMs 来说,执行精确的数学计算是一个重大挑战。因此,在后续步骤中,系统可以将任何所需的算术运算委托给外部计算器工具。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:使用表格解释收集到的信息,以确定所需的输出。
1.3 动手代码示例
实现提示链的范围从脚本中直接、顺序的函数调用,到利用专门框架来管理控制流、状态和组件集成。LangChain、LangGraph、Crew AI 和谷歌代理开发套件(ADK)等框架提供了结构化的环境,用于构建和执行这些多步骤流程,这对于复杂的架构特别有利。
为了演示目的,LangChain 和 LangGraph 是合适的选择,因为它们的核心理念 API 是专门设计用来组合操作链和图的。LangChain 提供了线性序列的基础抽象,而 LangGraph 将这些能力扩展到支持有状态和循环计算,这对于实现更复杂的代理行为是必要的。本例将专注于一个基本的线性序列。
以下代码实现了一个两步提示链,它作为一个数据处理管道。初始阶段设计用来解析非结构化文本并提取特定信息。随后的阶段接收这个提取的输出并将其转换为结构化数据格式。
要复制这个流程,必须首先安装所需的库。这可以通过以下命令完成:
python
pip install langchain langchain-community langchain-openai langgraph
请注意,langchain-openai 可以被替换为适用于不同模型提供者的适当包。随后,执行环境必须配置所选语言模型提供者的必要 API 凭证,例如 OpenAI、Google Gemini 或 Anthropic。
python
import os
from langchain_openai import ChatOpenAI
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser
# For better security, load environment variables from a .env file
# from dotenv import load_dotenv
# load_dotenv()
# Make sure your OPENAI_API_KEY is set in the .env file
# Initialize the Language Model (using ChatOpenAI is recommended)
llm = ChatOpenAI(temperature=0)
# --- Prompt 1: Extract Information ---
prompt_extract = ChatPromptTemplate.from_template(
"Extract the technical specifications from the following text:\n\n{text_input}"
)
# --- Prompt 2: Transform to JSON ---
prompt_transform = ChatPromptTemplate.from_template(
"Transform the following specifications into a JSON object with 'cpu', 'memory', and 'storage' as keys:\n\n{specifications}"
)
# --- Build the Chain using LCEL ---
# The StrOutputParser() converts the LLM's message output to a simple string.
extraction_chain = prompt_extract | llm | StrOutputParser()
# The full chain passes the output of the extraction chain into the 'specifications'
# variable for the transformation prompt.
full_chain = (
{"specifications": extraction_chain}
| prompt_transform
| llm
| StrOutputParser()
)
# --- Run the Chain ---
input_text = "The new laptop model features a 3.5 GHz octa-core processor, 16GB of RAM, and a 1TB NVMe SSD."
# Execute the chain with the input text dictionary.
final_result = full_chain.invoke({"text_input": input_text})
print("\n--- Final JSON Output ---")
这段 Python 代码展示了如何使用 LangChain 库处理文本。它利用了两个独立的提示:一个用于从输入字符串中提取技术规格,另一个用于将这些规格格式化为 JSON 对象。ChatOpenAI 模型用于语言模型交互,StrOutputParser 确保输出为可用的字符串格式。LangChain 表达式语言(LCEL)被用于优雅地串联这些提示和语言模型。第一个链 extraction_chain 用于提取规格。full_chain 则将提取的输出作为转换提示的输入。提供了一个描述笔记本电脑的示例输入文本。使用该文本调用 full_chain,通过两个步骤进行处理。最终结果是一个包含提取和格式化规格的 JSON 字符串,然后被打印出来。
1.4 上下文工程与提示工程
上下文工程(见图 1)是在生成 token 之前,为 AI 模型设计、构建和提供完整信息环境的系统学科。这种方法论认为,模型输出的质量与其架构本身的关系较小,而更多地取决于所提供上下文的丰富程度。
图 1:上下文工程是构建一个丰富、全面的 AI 信息环境的专业领域,因为这个上下文的质量是使高级代理性能得以实现的主要因素。
它代表了从传统提示工程的重要演变,传统提示工程主要集中于优化用户即时查询的措辞。上下文工程将这一范围扩展到包含多层信息,例如系统提示,这是一组定义 AI 操作参数的基础指令------例如,"你是一名技术作家;你的语气必须正式和精确。"上下文还通过外部数据得到进一步丰富。这包括检索到的文档,其中 AI 主动从知识库中获取信息以指导其回应,例如提取项目的技术规格。它还结合了工具输出,即 AI 使用外部 API 获取实时数据的结果,例如查询日历来确定用户的可用性。这些明确的数据与关键隐含数据相结合,例如用户身份、交互历史和环境状态。其核心原则是,即使先进的模型在提供有限或构造不良的操作环境视图时也会表现不佳。
因此,这种实践将任务从单纯回答问题转变为为智能体构建全面的操作图景。例如,经过情境设计的智能体不仅会回应查询,还会首先整合用户的日程安排(工具输出)、与邮件收件人的职业关系(隐含数据)以及过往会议的笔记(检索到的文档)。这使模型能够生成高度相关、个性化且具有实际用途的输出。"工程化"的环节涉及创建强大的数据获取和转换管道,并在运行时获取这些数据,同时建立反馈循环以持续提升情境质量。
要实现这一点,可以使用专门的调优系统来规模化自动化改进过程。例如,像 Google 的 Vertex AI 提示优化器这样的工具,可以通过系统性地评估针对一组样本输入和预定义评估指标的响应来提升模型性能。这种方法对于跨不同模型调整提示和系统指令非常有效,无需大量手动重写。通过向这样的优化器提供样本提示、系统指令和模板,它可以程序化地优化上下文输入,为实施复杂上下文工程所需的反馈循环提供结构化方法。
这种结构化方法区分了基础 AI 工具和更复杂、更注重上下文的系统。它将上下文本身视为主要组成部分,高度重视代理知道什么、何时知道以及如何使用这些信息。这种做法确保模型对用户的意图、历史和当前环境有全面的了解。最终,上下文工程是一种关键方法,用于将无状态聊天机器人提升为高度能干、注重情境的系统。
1.5 一目了然
是什么:当复杂任务在单个提示中处理时,往往会使 LLMs 不堪重负,导致性能问题显著。模型上的认知负荷增加了出现诸如忽略指令、丢失上下文和生成错误信息等错误的可能性。一个庞大的提示难以有效管理多个约束和顺序推理步骤。这导致输出不可靠和不准确,因为 LLM 未能处理多方面请求的所有方面。
为什么 :提示链通过将复杂问题分解为一系列更小、相互关联的子任务,提供了一种标准化的解决方案。链中的每一步都使用一个专注的提示来执行特定操作,显著提高了可靠性和控制力。一个提示的输出作为下一个提示的输入,创建了一个逐步构建最终解决方案的逻辑工作流。这种模块化、分而治之的策略使流程更易于管理、调试,并允许在步骤之间集成外部工具或结构化数据格式。这种模式是开发能够规划、推理和执行复杂工作流的复杂多步智能体系统的基石。
图 2:提示链模式:代理从用户那里接收一系列提示,每个代理的输出作为链中下一个代理的输入。
1.6 关键要点
以下是一些关键要点:
- 提示链将复杂任务分解为一系列更小、更专注的步骤。这有时被称为管道模式。
- 链中的每一步都涉及 LLM 调用或处理逻辑,使用前一步的输出作为输入。
- LangChain/LangGraph 等框架,以及 Google ADK,提供了强大的工具来定义、管理和执行这些多步骤序列。
1.7 结论
通过将复杂问题分解为一系列更简单、更易于管理的子任务,提示链提供了一种强大的框架来指导大型语言模型。这种"分而治之"的策略通过每次专注于模型的一个特定操作,显著提高了输出的可靠性和控制力。作为一种基础模式,它使开发能够进行多步推理、工具集成和状态管理的复杂 AI 代理成为可能。最终,掌握提示链对于构建能够执行复杂工作流程的健壮、上下文感知系统至关重要,这些系统的能力远远超出了单个提示所能实现的范围。