提示词链

提示词链模式概述

提示词链(Prompt Chaining),有时称为管道模式(Pipeline pattern),是利用大型语言模型 (LLM) 处理复 杂任务时的强大范式。该方法摒弃了让 LLM 在单一整体化步骤中解决复杂问题的做法,采用分而治之策略: 将原始复杂问题分解为更小、更易管理的子问题序列,每个子问题通过专门设计的提示词单独处理,输出作 为输入传递给链中后续提示词。

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

一个步骤的输出作为下一个步骤的输入至关重要。这种信息传递建立了依赖链(因此得名),其中先前操作 的上下文和结果指导后续处理。这使得 LLM 能够在其先前工作的基础上构建,完善理解,并逐步接近期望 的解决方案。

此外,提示词链不仅仅是分解问题;它还支持外部知识和工具的集成。在每一步,LLM 都可以被指示与外部 系统、API 或数据库交互,丰富其超越内部训练数据的知识和能力。这种能力极大地扩展了 LLM 的潜力,使 它们不仅仅作为独立模型运行,而是作为更广泛智能系统的组成部分。

提示词链的重要性超越了简单的问题解决。它是构建复杂 AI Agent 的基础技术。这些 Agent 可以利用提示 词链在动态环境中自主规划、推理和行动。通过战略性地构建提示词序列,Agent 可以参与需要多步推理、 规划和决策的任务。这样的 Agent 工作流可以更紧密地模拟人类思维过程,从而实现与复杂领域和系统更自 然有效的交互。

单一提示词的局限性:对于多维度任务,为 LLM 使用单一复杂提示词往往效率低下,可能导致:指令忽略 (部分提示被忽视)、上下文漂移(丢失初始上下文)、错误传播(早期错误放大)、需要更大上下文窗口(信 息不足无法响应)以及幻觉生成(高认知负荷导致错误信息)。例如要求分析市场报告、总结发现、识别数据趋势并起草邮件的查询,模型可能完成总结但无法正确提取数据或起草邮件。

通过顺序分解增强可靠性:提示词链通过将复杂任务分解为聚焦的顺序工作流来解决这些挑战,显著提高了 可靠性和控制力。基于上面的例子,管道或链式方法可以描述如下:

  1. 1、初始提示词(总结):“总结以下市场研究报告的主要发现:[文本]。”模型的唯一焦点是总结,提高了 这一初始步骤的准确性。

  2. 2、第二个提示词(趋势识别):“使用摘要,识别前三个新兴趋势并提取支持每个趋势的具体数据点:[步 骤 1 的输出]。”此提示词现在更受约束,并直接建立在经过验证的输出之上。

  3. 3、第三个提示词(电子邮件撰写):“向营销团队起草一封简明的电子邮件,概述以下趋势及其支持数据: [步骤 2 的输出]。”

这种分解提供更精细的流程控制。每个简化步骤减少模型认知负荷,产生更准确可靠的输出。这种模块化类 似于计算流水线,每个函数执行特定操作后传递结果。为确保各步骤准确性,可为模型分配不同角色,如: 初始提示词作”市场分析师”,后续提示词作”贸易分析师”,第三个提示词作”专业文档撰写者”。

结构化输出的作用:提示词链的可靠性高度依赖于步骤之间传递的数据完整性。如果一个提示词的输出不 明确或格式不佳,后续提示词可能由于错误的输入而失败。为了缓解这一问题,指定结构化输出格式(如 JSON 或 XML)至关重要。

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

{
”trends”: [

{
”trend_name”: ”AI −Powered Personalization”,
”supporting_data”: ”73% of consumers prefer to do business with brands that use perso

}, {

”trend_name”: ”Sustainable and Ethical Brands”,

”supporting_data”: ”Sales of products with ESG−related claims grew 28% over the last }

] }

结构化格式确保机器可解析性,支持精确解析并无歧义插入后续提示。该实践最小化自然语言解释错误,是 构建健壮的多步骤 LLM 系统的关键组件。

实际应用与用例

提示词链是一种多用途模式,在构建 Agent 系统时适用于广泛的场景。其核心效用在于将复杂问题分解为顺 序的、可管理的步骤。以下是几个实际应用和用例:

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

・ 提示词1:从给定的URL或文档中提取文本内容。
・ 提示词2:总结清理后的文本。
・ 提示词3:从摘要或原始文本中提取特定实体(例如,姓名、日期、位置)。

・ 提示词4:使用实体搜索内部知识库。
・ 提示词5:生成包含摘要、实体和搜索结果的最终报告。

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

2. 复杂查询回答:回答需要多步推理或信息检索的复杂问题是一个主要用例。

例如,“1929 年股市崩盘的主 要原因是什么,政府政策如何应对?”

・ 提示词1:识别用户查询中的核心子问题(崩盘原因、政府响应)。
・ 提示词2:专门研究或检索有关1929年崩盘原因的信息。
・ 提示词3:专门研究或检索有关政府对1929年股市崩盘的政策响应的信息。

・ 提示词4:将步骤2和3的信息综合成对原始查询的连贯答案。

这种顺序处理方法是开发能够进行多步推理和信息综合的 AI 系统的核心。当查询无法从单个数据点回答,而 是需要一系列逻辑步骤或来自不同来源的信息集成时,需要这样的系统。

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

然而完成单个提取后,过程转为顺序执行:先整合提取数据,再综合成连贯草稿,最后审查完善生成报告。 这些阶段存在逻辑依赖关系,需应用提示词链式调用:整合数据作为综合提示词输入,综合文本作为审查提 示词输入。因此复杂操作常结合并行处理收集独立数据与链式调用处理依赖步骤。

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

・ 提示词1:尝试从发票文档中提取特定字段(例如,姓名、地址、金额)。 ・ 处理:检查是否提取了所有必需字段以及它们是否满足格式要求。

实际应用与用例 3

  • ・  提示词 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 行为是必需的。此示例将专注于基础线性序列。

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

要复制此过程,必须首先安装所需的库。这可以使用以下命令完成:
pip i n s t a l l 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 文件中设置

##
llm = ChatOpenAI ( temperature =0)

初始化语言模型 ( 推荐使用 ChatOpenAI)

## −−− 提示词 1:提取信息 −−−
prompt_extract = ChatPromptTemplate . from_template (

”从以下文本中提取技术规格 :\n\n{text_input}” )

## −−− 提示词 2:转换为 JSON −−−
prompt_transform = ChatPromptTemplate . from_template (

”将 以 下 规 格 转 换 为 ␣JSON␣ 对 象 , 使 用 ␣ ' cpu ' 、 ' memory ' ␣ 和 ␣ ' s t o r a g e ' ␣ 作 为 键 : \ n \ n { s p e c i f i c a t i )

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

## 完整的链将提取链的输出传递到转换提示词的 full_chain = (

'specifications ' 变量中。

{”specifications”:
| prompt_transform | llm
| StrOutputParser ( )

)

extraction_chain }

上下文工程和提示工程 5 ## −−− 运行链 −−−

input_text = ”新款笔记本电脑型号配备␣3.5␣GHz␣八核处理器、16GB␣内存和␣1TB␣NVMe␣固态硬盘。” ## 使用输入文本字典执行链。

final_result = full_chain . invoke ({”text_input”: input_text }) p r i n t ( ” \ n − − − ␣ 最 终 ␣ J S O N ␣ 输 出 ␣ − − −” )

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

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

关键要点

以下是一些关键要点:

・ 任务分解:将复杂任务拆解为聚焦步骤序列(又称管道模式)
・ 链式处理:每步使用前步输出作为输入,执行LLM调用或处理逻辑
・ 可靠性提升:显著增强复杂语言交互的可控性和稳定性
・ 框架支持:LangChain/LangGraph和GoogleADK提供多步序列的定义、管理和执行工具

提示词链(Prompt Chaining) 是一种将复杂任务分解为多个顺序执行的AI调用,前一个步骤的输出作为后一个步骤的输入,形成处理链条的设计模式。

# 基础概念示意图
Input → [Prompt 1] → Intermediate Result 1 → [Prompt 2] → Intermediate Result 2 → ... → Final Output

核心要点总结

class PromptChainSummary:
    """提示词链核心要点总结"""
    
    key_points = [
        "1. 🔗 链式设计:将复杂任务分解为顺序执行的子任务",
        "2. 🧩 模块化:每个步骤独立,便于测试和复用",
        "3. 🔄 上下文传递:前一步输出作为后一步输入",
        "4. 🛡️ 错误处理:每个步骤应有独立的错误处理机制",
        "5. 📊 监控:记录每个步骤的执行状态和性能",
        "6. 🔧 可配置:支持动态调整步骤顺序和参数",
        "7. 🚀 性能:考虑缓存、批量处理和并行执行",
        "8. 🧪 测试:为每个步骤编写单元测试"
    ]
    
    best_practices = [
        "✅ 保持步骤职责单一",
        "✅ 设计清晰的接口和上下文结构",
        "✅ 实现合理的错误恢复机制",
        "✅ 添加步骤执行日志和监控",
        "✅ 定期审查和优化提示词模板",
        "✅ 考虑A/B测试不同链结构"
    ]

快速开始模板

# 提示词链快速开始模板
class QuickStartTemplate:
    """快速开始你的第一个提示词链项目"""
    
    @staticmethod
    def create_basic_chain():
        """创建基础提示词链"""
        template = """
from typing import Dict, Any

class MyFirstPromptChain:
    def __init__(self, llm_client):
        self.client = llm_client
        
    def execute(self, input_data: str) -> Dict[str, Any]:
        \"\"\"执行链式处理\"\"\"
        results = {}
        
        # 步骤1: 初始分析
        step1_result = self._step1_analyze(input_data)
        results['analysis'] = step1_result
        
        # 步骤2: 基于分析结果处理
        step2_result = self._step2_process(step1_result)
        results['processed'] = step2_result
        
        # 步骤3: 生成最终输出
        final_result = self._step3_generate(step2_result)
        results['final'] = final_result
        
        return results
    
    def _step1_analyze(self, input_data: str) -> str:
        \"\"\"步骤1: 分析输入\"\"\"
        prompt = f\"分析以下内容:\\n\\n{{input_data}}\"
        return self._call_llm(prompt, \"分析专家\")
    
    def _step2_process(self, analysis: str) -> str:
        \"\"\"步骤2: 处理分析结果\"\"\"
        prompt = f\"基于分析结果进行处理:\\n\\n{{analysis}}\"
        return self._call_llm(prompt, \"处理专家\")
    
    def _step3_generate(self, processed: str) -> str:
        \"\"\"步骤3: 生成最终输出\"\"\"
        prompt = f\"生成最终输出:\\n\\n{{processed}}\"
        return self._call_llm(prompt, \"生成专家\")
    
    def _call_llm(self, prompt: str, role: str) -> str:
        \"\"\"调用LLM\"\"\"
        messages = [
            {{\"role\": \"system\", \"content\": f\"你是{{role}}\"}},
            {{\"role\": \"user\", \"content\": prompt}}
        ]
        
        response = self.client.chat.completions.create(
            model=\"gpt-3.5-turbo\",
            messages=messages
        )
        
        return response.choices[0].message.content
"""
        return template
    
    @staticmethod
    def get_started():
        """开始你的第一个项目"""
        print("🚀 开始你的提示词链项目:")
        print("1. pip install openai")
        print("2. 复制上面的模板代码")
        print("3. 替换YOUR_API_KEY")
        print("4. 运行你的第一个链!")
        print("\n💡 建议: 从简单的3步链开始,逐步增加复杂度")

资源推荐

  1. 官方文档: LangChain, LlamaIndex等框架的链式设计

  2. 论文: Chain-of-Thought Prompting Elicits Reasoning in Large Language Models

  3. 开源项目: AutoGPT, BabyAGI等智能体项目的链式实现

  4. 社区: Hugging Face, Reddit的r/LocalLLaMA, AI Discord群组

结论

通过将复杂问题分解为一系列更简单、更易于管理的子任务,提示词链为指导大型语言模型提供了一个健壮 的框架。这种”分而治之”策略通过一次专注于一个特定操作,显著提高了输出的可靠性和控制力。作为基 础模式,它支持开发能够进行多步推理、工具集成和状态管理的复杂 AI Agent。最终,掌握提示词链对于构 建能够执行远超单个提示词能力的复杂工作流的健壮、上下文感知系统至关重要。

注:原文请参考

Agentic Design Patterns, Antonio Gulli

参考文献

1、LangChainDocumentationonLCEL:https://python.langchain.com/v0.2/docs/core_modules/ex pression_language/

2、LangGraphDocumentation:https://langchain‐ai.github.io/langgraph/

3、PromptEngineeringGuide‐ChainingPrompts:https://www.promptingguide.ai/techniques/cha ining

4、OpenAIAPIDocumentation(GeneralPromptingConcepts):https://platform.openai.com/docs/g uides/gpt/prompting

5、CrewAIDocumentation(TasksandProcesses):https://docs.crewai.com/
6、Google AI for Developers (Prompting Guides): https://cloud.google.com/discover/what‐is‐ prompt‐engineering?hl=en
7、Vertex Prompt Optimizer https://cloud.google.com/vertex‐ai/generative‐ai/docs/learn/prompt s/prompt‐optimizer

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐