提示链

提示链改变了方法。不是使用一个巨大的提示,而是创建一个聚焦提示的管道,其中每个步骤专注于单一的任务。

提示链

如果你曾经让ChatGPT做一件复杂的事情——比如分析一份文件、提取见解,并根据这些见解起草一封电子邮件——你可能已经注意到一些问题:它开始时表现不错,但随后就崩溃了。

摘要还不错。见解很模糊。邮件?最坏的情况是毫无特色。

这并不是模型的问题。这是架构的问题。

而解决方案有一个名字:提示链

1、为什么单个提示会失败

当你一次性把一个复杂任务扔给LLM时,你实际上是在要求一个聪明但容易分心的同事同时处理五件事,同时写一份报告。

会发生什么?

  • 指令忽视:你的提示中的一些部分被忽略了
  • 上下文漂移:模型失去了对最初请求的跟踪
  • 错误传播:早期的小错误会变成垃圾输出
  • 幻觉:认知过载增加了编造信息的可能性

我在Convolution AI构建AI系统时反复看到这种模式。一个在测试中能正常工作的提示,在生产环境中却惨遭失败——因为生产任务比我们的测试用例更混乱和复杂。

2、分而治之的解决方案

提示链改变了方法。不是使用一个巨大的提示,而是创建一个聚焦提示的管道,其中每个步骤:

  1. 完成一件事做得很好
  2. 产生结构化的输出
  3. 输入到下一步

想象一下像工厂装配线一样的东西。每个站点都有一个工作。站点A的输出成为站点B的输入。没有一个站点会被压垮。最终产品是可靠的。

这里是一个思维模型:

[复杂任务]   
    → [步骤1:提取]   
    → [步骤2:分析]   
    → [步骤3:转换]   
    → [最终输出]

3、一个真实例子:市场调研到高管邮件

假设你需要分析一份市场调研报告,识别趋势,并起草一封给管理层的邮件。

原始方法(单个提示):

“分析这份市场调研报告,总结发现,识别前三个有支持数据的趋势,并为营销团队起草一封电子邮件。”

这将产生中等的结果,因为模型同时处理太多认知任务。

提示链方法

步骤1 —— 摘要(角色:市场分析师)

“总结以下市场调研报告的关键发现:[文本]”

步骤2 —— 趋势识别(角色:趋势分析师)

“使用这个摘要,识别前三个新兴趋势。对于每个趋势,提取支持它的具体数据点。以JSON格式输出。”

步骤3 —— 邮件撰写(角色:高管沟通专家)

“为营销团队起草一封简洁的邮件,概述这些趋势及其支持数据:[步骤2的JSON]”

每个步骤都更简单。每个输出在继续之前都会被验证。最终结果大大改善。

4、秘诀:结构化输出

大多数实现失败的地方在于它们在步骤之间传递混乱的文本。

解决方法是:在链路之间强制结构化输出(JSON、XML):

{  
  "trends": [  
    {  
      "trend_name": "基于AI的个性化",  
      "supporting_data": "73%的消费者更喜欢使用个人信息的品牌"  
    },  
    {  
      "trend_name": "可持续品牌",  
      "supporting_data": "ESG相关产品在过去五年增长了28%,而其他产品仅增长20%"  
    }  
  ]  
}

这消除了歧义。下一步知道它接收的是什么。没有解析错误。没有丢失上下文。

5、代码:一个完整实现

以下是使用LangChain的一个最小但完整的示例:

from langchain_openai import ChatOpenAI  
from langchain_core.prompts import ChatPromptTemplate  
from langchain_core.output_parsers import StrOutputParser  
llm = ChatOpenAI(temperature=0)  

# 步骤1:提取规格  
prompt_extract = ChatPromptTemplate.from_template(  
    "从以下文本中提取技术规格:\n\n{text_input}"  
)  
# 步骤2:转换为结构化JSON  
prompt_transform = ChatPromptTemplate.from_template(  
    "将这些规格转换为包含'cpu'、'memory'和'storage'键的JSON:\n\n{specifications}"  
)  
# 构建链  
extraction_chain = prompt_extract | llm | StrOutputParser()  
full_chain = (  
    {"specifications": extraction_chain}  
    | prompt_transform  
    | llm  
    | StrOutputParser()  
)  
# 执行  
input_text = "新款笔记本电脑配备3.5 GHz八核处理器、16GB RAM和1TB NVMe SSD。"  
result = full_chain.invoke({"text_input": input_text})  
print(result)

输出:

{"cpu": "3.5 GHz八核", "memory": "16GB", "storage": "1TB NVMe SSD"}

两个提示。干净的交接。可靠的输出。

6、在什么情况下使用提示链

在以下情况下使用此模式:

  • 任务有多个不同的处理阶段
  • 你需要在步骤之间集成外部工具
  • 可靠性比速度更重要
  • 你正在构建需要多步推理的代理
  • 调试和可观测性很重要

在以下情况不要使用此模式:

  • 任务确实很简单(一次性的提示就可以)
  • 延迟是关键且无法承受多次LLM调用
  • 步骤之间没有逻辑依赖

7、更大的图景:上下文工程

提示链实际上是称为上下文工程的一个更大领域的子集——构建丰富信息环境供AI模型使用的实践。

洞察是简单但深刻的:模型质量不如上下文质量重要

一个普通的模型如果拥有优秀的上下文,将胜过一个前沿模型如果上下文不好。每一次都是如此。

提示链确保在每一步,模型都能获得它需要的精确上下文——不多也不少。这就是它如此可靠的原因。

8、接下来是什么

提示链是代理系统的第一个构建块。它教授了一个基本原理:将复杂性分解为可管理的步骤

但真正的代理需要更多。他们需要决定执行哪个链(路由)。他们需要在可能的情况下并行运行步骤(并行化)。他们需要评估和改进自己的输出(反思)。

在下一篇文章中,我们将介绍路由——如何根据输入特征动态选择不同的处理路径。


原文链接:Prompt Chaining: The Foundation of Every Serious AI Agent

汇智网翻译整理,转载请标明出处