《Agentic Design Patterns:构建智能系统的实战指南》- 第一章 提示链

书籍名称:Agentic Design Patterns: A Hands-On Guide to Building Intelligent Systems
本书作者:Antonio Gulli
链接地址:https://docs.google.com/document/d/1rsaK53T3Lg5KoGwvf8ukOUvbELRtH-V0LnOIFDxBryE
内容摘要:本文是对《智能体设计模式》一书第一章节的翻译,此章节主要介绍了提示链(Prompt Chaining)模式。
翻译:煤矿工厂

摘要

当复杂任务被放入单一提示中让大语言模型处理时,模型往往会因为任务负载过高而表现不佳。过大的认知负荷容易导致模型出现各种错误,例如忽略指令丢失上下文生成错误信息。一个冗长的提示往往难以同时管理多重约束条件和多步推理过程,从而导致输出结果不可靠、准确性差,模型无法有效处理复杂请求中的各个方面。

提示链(Prompt Chaining)为此提供了一种标准化解决方案——将复杂问题分解为一系列相互关联的子任务。链中的每一步都使用一个聚焦型提示(focused prompt)来完成特定操作,从而显著提升输出的可控性与稳定性。前一步的输出会作为下一步的输入,形成一个逐步推进的逻辑工作流,最终构建出完整的解决方案。这种模块化、分而治之的策略使整个过程更易管理、更易调试,并可在步骤间集成外部工具或以结构化数据格式传递信息。这一模式是构建能规划、推理与执行复杂工作流的高级智能体系统(Agentic systems)的基础。

经验法则: 当任务满足以下任一条件时,应考虑采用提示链模式:

  • 任务复杂到无法由单一提示完成;
  • 任务包含多个独立的处理阶段;
  • 步骤之间需要与外部工具交互;
  • 构建需要执行多步推理并保持状态的智能体系统。
《Agentic Design Patterns:构建智能系统的实战指南》- 第一章 提示链
图1:提示链模式智能体依次接收来自用户的一系列提示,每个提示的输出会作为下一个提示的输入,形成链式工作流。

提示链模式概述

提示链,有时被称为流水线模式(Pipeline pattern),代表了一种利用 大语言模型(LLM) 处理复杂任务的强大范式。与期望大语言模型在一个单一而庞杂的步骤中解决复杂问题不同,提示链主张采用 分而治之(divide-and-conquer) 的策略。其核心思想是将原本令人生畏的问题分解成一系列更小、更易于处理的子问题。每个子问题都通过专门设计的提示单独解决,而一个提示生成的输出会被有策略地作为输入传递给链中下一个提示。

这种顺序处理技术在与大语言模型的交互中,天然地引入了模块化与清晰性。通过将复杂任务分解为多个子步骤,可以更容易地理解和调试每个独立环节,从而使整体过程更加稳健、可解释。链中的每一步都可以被精心地设计和优化,用以专注于更大问题中的某个特定方面,从而生成更准确、更聚焦的输出。

用一个步骤的输出作为下一个步骤的输入,这一机制至关重要。信息的传递建立起一种依赖链,其中先前操作的上下文与结果会指导后续的处理,因此得名提示链。这使得LLM能够在已有成果的基础上不断构建、完善理解,并逐步接近理想的解决方案。

此外,提示链不仅仅是将问题拆解,它还使大模型与外部知识与工具的整合成为可能。在每个步骤中,LLM都可以与外部系统、API或数据库交互,从而扩展了其超出内部训练数据范围的知识与能力。这一特性极大地拓展了LLM的潜能,使其不仅能作为独立模型存在,还能成为更广泛、更智能系统中的核心组成部分。

提示链的重要性不仅体现在拆分问题上——它更是构建复杂AI智能体(AI agents)的基础技术。这些智能体可以在动态多变的环境中利用提示链进行自主地规划、推理与行动。通过有策略地建构提示序列,智能体能够执行多步推理、规划和决策的任务。这样的智能体工作流程能更贴近人类的思维过程,从而在处理复杂领域与系统时实现更自然、更高效的交互。

单一提示的局限性:

对于多层面复杂任务,使用单个复杂提示来驱动大语言模型往往效率低下。模型可能难以同时遵守多重约束与指令,导致以下问题:

  • 指令忽视(instruction neglect):部分提示被忽略。
  • 上下文漂移(contextual drift):模型失去对初始语境的把握。
  • 错误传播(error propagation):早期错误被放大。
  • 上下文窗口不足(insufficient context window):提示过长,模型无法获取足够信息进行有效回应。
  • 幻觉(hallucination):认知负荷过高,增加生成错误信息的概率。

例如,一个请求模型“分析一份市场调研报告、总结关键发现、提取数据趋势并起草邮件”的提示,可能导致模型在总结部分表现良好,但未能正确提取数据或撰写邮件,从而整体任务失败。

通过顺序分解提升可靠性:

提示链通过将复杂任务拆解为重点聚焦、顺序化的工作流,有效应对上述挑战,大幅提升模型的可靠性与可控性。

以刚才的例子为例,可以设计如下分步流程:

1. 初始提示(摘要):

“请总结以下市场调研报告的主要发现:[文本]。”

——模型仅专注于摘要任务,提高第一步的准确性。

2. 第二步提示(趋势识别):

“基于以上摘要,识别三大新兴趋势,并提取支持每个趋势的具体数据点:[第1步输出]。”

——该提示更加聚焦,并直接建立在已验证的输出基础上。

3. 第三步提示(邮件撰写):

“请为市场团队撰写一封简洁的邮件,概述上述趋势及其支持数据:[第2步输出]。”

这种任务分解对整个过程进行了细粒度控制。每一步都更简单、更明确,降低了模型的认知负荷,产出更准确、更可靠的最终结果。这种模块化方式类似于计算流水线(computational pipeline):每个函数执行特定操作后,将结果传递给下一个函数。

为了确保每一步都能准确完成任务,可以在各阶段为模型分配不同角色。例如:

  • 第一步可设定为 “市场分析师”
  • 第二步为 “趋势分析师”
  • 第三步为 “专业文档撰写人”

结构化输出的作用:

提示链的可靠性高度依赖于各步骤之间传递数据的完整性。如果某一步的输出含糊不清或格式混乱,后续步骤可能因输入错误而失败。为避免此类问题,明确指定输出的结构化格式(如 JSON 或 XML)至关重要。这种结构化格式确保数据是机器可读的,可以精确地被解析并插入到下一个提示中,不产生歧义。这种做法减小了从自然语言解释中产生的错误,是构建健壮的LLM多步系统的关键组成要素。

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

{
  "trends": [
    {
      "trend_name": "AI 驱动的个性化",
      "supporting_data": "73% 的消费者更愿意与那些利用个人信息使购物体验更具相关性的品牌进行交易。"
    },
    {
      "trend_name": "可持续与道德品牌",
      "supporting_data": "过去五年中,具有 ESG(环境、社会与公司治理)相关声明的产品销量增长了 28%,而无此声明的产品仅增长 20%。"
    }
  ]
}

推理链的实际应用

提示链是一种高度灵活的模式,广泛适用于构建 智能体系统(agentic systems) 中。其核心价值在于将复杂问题分解为可管理的、顺序执行的步骤。以下是若干典型的实际应用与使用场景:

1. 信息处理工作流

许多任务涉及对原始信息进行多阶段的转换与处理。例如:

总结文档、提取关键实体,再利用这些实体查询数据库或生成报告。

提示链可以按以下方式组织:

  • 提示1: 从指定URL或文档中提取文本内容。
  • 提示2: 对清洗后的文本总结摘要。
  • 提示3: 从摘要或原始文本中提取特定实体(如姓名、日期、地点等)。
  • 提示4: 使用提取出的实体在内部知识库中查询。
  • 提示5: 综合摘要、实体和查询结果,生成最终报告。

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

2. 复杂查询回答

解答需要多步推理或信息检索的复杂问题是提示链的主要应用场景。例如:

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

可以设计如下提示链:

  • 提示1: 识别用户问题中的核心子问题(崩盘原因、政府应对)。
  • 提示2: 检索或生成关于1929年股市崩盘原因的具体信息。
  • 提示3: 检索或生成关于政府政策应对措施的具体信息。
  • 提示4: 将第2步与第3步的信息综合为对原始问题的完整回答。

这种顺序处理方式是构建能够进行多步推理与信息综合的AI系统的关键。当问题无法通过单一数据回答,而需要逻辑推理或整合多来源信息时,此方法尤为有效。

例如,一个自动化研究智能体在生成某主题的综合报告时,会执行混合计算工作流。

  • 初始阶段,系统会检索大量相关文献。
  • 接着,从每篇文献中提取关键信息,此阶段可并行处理以提高效率。
  • 然而,在提取完成后,流程转为顺序执行:系统先整合数据,再综合形成草稿,最后审阅并润色,生成最终报告。

这正是提示链的应用所在:整合的数据作为输入,生成综合提示(synthesis prompt);而综合提示又作为进一步的提示,生成最终审阅提示(final review prompt)。因此,复杂任务通常结合了并行处理(用于独立数据收集)与提示链(用于依赖性强的综合与精炼步骤)技术。

3. 数据提取与转换

将非结构化文本转换为结构化格式通常需要多轮迭代,以逐步提高输出的准确性与完整性。

  • 提示1: 尝试从发票文档中提取指定字段(如姓名、地址、金额)。
  • 处理1: 检查是否已提取所有字段,且格式是否符合要求。
  • 提示2(条件触发): 若字段缺失或格式错误,生成新提示,让模型根据上次失败结果补全或修正信息。
  • 处理2: 再次验证结果,必要时重复。
  • 最终输出: 提供提取并验证后的结构化数据。

这种顺序处理方式尤其适用于从表格、发票、邮件等非结构化来源中提取数据。例如,解决复杂OCR(光学字符识别)问题,如解析PDF表单,通常通过多步分解实现:

  • 使用LLM从文档图像中提取初始文本;
  • 处理原始输出以规范化数据(如将“one thousand and fifty”转换为数值1050);
  • 若涉及数学计算,可将此任务委派给外部计算工具。

LLM识别计算需求,向外部工具提供原始数值,再将计算结果整合回输出。这种提取—规范化—外部计算的链式处理,实现了单次LLM调用难以稳定获得的高精度结果。

4. 内容生成工作流

复杂内容创作往往被拆分为若干阶段:构思、结构规划、草稿撰写与后期修订。

  • 提示1: 根据用户兴趣生成5个主题想法。
  • 处理1: 让用户选择其中一个主题,或由系统自动选出最佳主题。
  • 提示2: 基于选定主题生成详细大纲。
  • 提示3: 根据大纲的第一点撰写草稿部分。
  • 提示4: 根据大纲第二点撰写草稿,并参考上一部分保持连贯性(依次进行剩余部分创作)。
  • 提示5: 审阅并润色完整草稿,确保一致性、语气和语法。

这种方法广泛用于自动化自然语言生成任务,如创意写作、技术文档编写、以及其他结构化文本创作。

5. 具备状态的对话智能体

尽管完整的状态管理体系通常比简单的顺序连接更复杂,但提示链为保持对话上下文提供了基础机制。 这种方法通过在每轮对话中系统化地引用前序交互信息或提取实体,来维护上下文连续性。

  • 提示1: 处理用户第1轮发言,识别用户意图与关键实体。
  • 处理1: 更新对话状态,记录意图与实体。
  • 提示2: 基于当前状态生成回应或确定下一步需要的信息。
  • 后续循环: 每当用户继续发言时,系统利用累积的对话历史启动新的提示链。

这一原理是多轮对话智能体开发的核心,使系统能在长对话中保持上下文与连贯性,从而准确理解依赖先前信息的用户输入。

6. 代码生成与优化

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

  • 提示1: 理解用户的代码需求,生成伪代码或结构纲要。
  • 提示2: 根据纲要撰写初始代码。
  • 提示3: 识别代码中潜在错误或可改进部分(可结合静态分析工具或额外LLM调用)。
  • 提示4: 根据识别的问题重写或优化代码。
  • 提示5: 添加文档或测试用例。

在AI辅助编程场景中,提示链的优势在于将复杂编程任务拆分为容易处理的子问题。这种模块化结构降低了每一步的复杂度,并允许在模型调用间插入确定性逻辑,实现中间数据处理、输出验证与条件分支控制。通过这种方式,原本复杂、易出错的请求被转化为由底层执行框架管理的结构化任务序列。

7. 多模态与多步推理

在分析包含多种模态数据的数据集时,必须将任务分解为多个基于提示的小步骤。例如:

解释一幅图像,其中包含:带文字的图片、标注特定文本片段的标签、以及说明每个标签的表格。

可采用如下提示链:

  • 提示1: 从用户提供的图像中提取并理解文字内容。
  • 提示2: 将提取的文字与对应标签进行匹配。
  • 提示3: 利用表格解释匹配结果,推导所需输出。

这种方法使模型能够系统地解析和整合不同模态的信息,逐步完成复杂的跨模态推理与解释任务。

实战代码示例

实现提示链的方式可以简单地从脚本中直接、顺序地调用函数,也可以使用专门设计的框架来管理控制流、状态和组件集成。 诸如 LangChainLangGraphCrew AI 和 Google Agent Development Kit (ADK) 等框架,提供了用于构建和执行这些多步流程的结构化环境,这在复杂架构中尤其实用。

为了演示,本示例选用 LangChain 和 LangGraph。它们的核心 API 明确设计用于组合 链(chains) 和 图(graphs) 形式的操作。

  • LangChain 提供用于线性序列的基础抽象;
  • LangGraph 则在此基础上扩展,支持有状态和循环计算,这对于实现更复杂的智能体行为是必要的。

本示例将专注于一个基础的线性框架。

下面的代码实现了一个两步提示链,其功能类似于一个数据处理流程:

  • 第一步用于解析非结构化文本并提取特定信息;
  • 第二步接收提取结果并将其转换为结构化的 JSON 数据格式。

在复现该过程之前,需要先安装所需的库,可通过以下命令完成:

pip install langchain langchain-community langchain-openai langgraph

其中,langchain-openai 可以根据所选模型提供商替换为相应的包。 随后,需要为所选语言模型提供商(如 OpenAIGoogle 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()
# 请确保在 .env 文件中设置了 OPENAI_API_KEY

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

# --- 提示 1:提取信息 ---
prompt_extract = ChatPromptTemplate.from_template(
   "Extract the technical specifications from the following text:\n\n{text_input}"
)

# --- 提示 2:转换为 JSON ---
prompt_transform = ChatPromptTemplate.from_template(
   "Transform the following specifications into a JSON object with 'cpu', 'memory', and 'storage' as keys:\n\n{specifications}"
)

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

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

# --- 运行提示链 ---
input_text = "The new laptop model features a 3.5 GHz octa-core processor, 16GB of RAM, and a 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, LangChain Expression Language) 优雅地将提示与语言模型串联起来。第一个链extraction_chain用于提取规格信息;完整链full_chain将提取结果作为输入传递给转换提示prompt_transform

示例中输入是一段描述笔记本电脑的文本。full_chain 使用该文本执行处理,依次经过两个步骤。最终结果是一个包含提取并格式化后规格信息的 JSON 字符串,并打印输出。

上下文工程与提示工程

上下文工程(Context Engineering)(见图2)是一门系统性的学科,旨在在 AI 模型生成文本之前,设计、构建并提供一个完整的信息环境。该方法论认为,模型输出的质量,与其说取决于模型本身的架构,不如说更依赖于所提供上下文信息的丰富性

《Agentic Design Patterns:构建智能系统的实战指南》- 第一章 提示链
图2: 上下文工程是一门为 AI 构建丰富且全面信息环境的学科,而这种上下文的质量是实现高级智能体性能的关键因素。

与传统的 提示工程(Prompt Engineering) 不同,提示工程主要专注于优化用户即时提问的表达方式;而上下文工程在此基础上进一步扩展,涵盖多个层次的信息。其中包括:

  • 系统提示:定义 AI 运作参数的基础指令,例如 “你是一位技术写作者;你的语气必须正式且精确。”
  • 外部数据:通过信息检索丰富上下文,例如模型主动从知识库中提取技术规范文件以辅助回答。
  • 工具输出:模型调用外部 API 获取实时数据的结果,例如查询日历以确定用户的时间。
  • 隐性数据:用户身份、交互历史以及环境状态等。

因此,这种实践将任务的重点从单纯回答问题,转向为智能体构建一个全面的操作性认知图景。 举例来说,一个经过上下文工程设计的智能体,在回应用户请求时,不会仅仅直接作答,而是会先整合多层次的信息:用户日程表中的可用时间(工具输出)、与邮件收件人的职业关系(隐性数据)、以及以往会议的记录(外部数据)。通过这种方式,模型能够生成高度相关、个性化且实用性强的输出内容。 所谓“工程”部分,则指建立在运行时自动获取和转换数据的稳健管线,并通过反馈循环持续改进上下文的质量。

这种结构化的方法,正是区分基础型 AI 工具与更高级、具备情境感知能力系统的关键所在。它将上下文本身视为核心组成部分,强调智能体知道什么、何时知道、以及如何运用这些信息的重要性。这种实践确保模型能够全面理解用户的意图、交流历史以及当前环境。最终,上下文工程是推动无状态聊天机器人向高能力、具备情境感知的智能系统发展的关键方法论。

本章重点

  • 提示链将复杂任务拆解为一系列更小、更聚焦的步骤,有时也被称为管线模式
  • 链中的每一步都涉及一次 LLM 调用或处理逻辑,使用前一步的输出作为输入。
  • 该模式能显著提升语言模型处理复杂交互时的可靠性与可控性。
  • 框架如 LangChain/LangGraph 和 Google ADK 提供了完善的工具,用于定义、管理和执行这些多步序列。

结尾

通过将复杂问题分解为一系列更简单、可控的子任务提示链为引导大型语言模型提供了一个稳健的框架。这种分而治之的策略使模型能够一次专注于一个特定操作,从而显著提升输出的可靠性与控制力。作为一种基础性模式,它为开发具备多步推理、工具集成与状态管理能力的高级 AI 智能体奠定了基础。掌握提示链技术对于构建稳健、具备情境感知能力、能够执行复杂工作流的智能系统至关重要。

参考文献

  1. LangChain Documentation on LCEL: https://python.langchain.com/v0.2/docs/core_modules/expression_language/
  2. LangGraph Documentation: https://langchain-ai.github.io/langgraph/
  3. Prompt Engineering Guide – Chaining Prompts: https://www.promptingguide.ai/techniques/chaining
  4. OpenAI API Documentation (General Prompting Concepts): https://platform.openai.com/docs/guides/gpt/prompting
  5. Crew AI Documentation (Tasks and Processes): 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/prompts/prompt-optimizer

往期回顾

《Agentic Design Patterns:构建智能系统的实战指南》- 前言

版权声明:本文内容转自互联网,本文观点仅代表作者本人。本站仅提供信息存储空间服务,所有权归原作者所有。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至1393616908@qq.com 举报,一经查实,本站将立刻删除。

(0)

相关推荐

发表回复

登录后才能评论