[智能体设计模式] 第 1 章:提示链(Prompt Chaining) - 实践

news/2025/12/8 21:13:19/文章来源:https://www.cnblogs.com/yangykaifa/p/19323674

本系列内容知识来源于《智能体设计模式》一书,仅做知识分享。

目录

提示链模式概述

单一提示的局限性

通过顺序拆解提升可靠性

结构化输出的重要性

实践应用与场景

1. 信息处理流程

2. 复杂问答

3. 数据提取与转换

4. 内容生成流程

5. 有状态对话智能体

6. 代码生成与优化

7. 多模态与多步推理

实战代码示例

前置准备

完整代码

上下文工程与提示工程

核心定义

与传统提示工程的区别

上下文的核心组成

实际应用价值

优化工具

补充 langchain的基本用法

一、LangChain 核心概念(必懂 3 个)

1. 模型(Models):大模型的 “接口包装”

2. 提示模板(Prompts):给大模型的 “标准化指令”

3. 链(Chains):步骤的 “串联器”

4. 解析器(OutputParsers):模型输出的 “格式化工具”

二、LangChain 基本使用流程(4 步走)

1. 安装依赖

2. 初始化核心组件

3. 构建链(Chain)

4. 运行链,获取结果

三、进阶:复杂链(多步骤串联)


提示链模式概述

提示链模式,是在使用大型语言模型时主张采用分而治之策略,将原本棘手的问题拆解为一系列更小、更易管理的子问题。每个子问题通过专门设计的提示单独处理,并将前一步的输出作为下一步的输入,形成链式依赖。

此外,提示链不仅仅是拆解问题,还能集成外部知识和工具。每一步都可以指示 LLM 与外部系统、API 或数据库交互,扩展其知识和能力。这极大提升了 LLM 的潜力,使其不仅是孤立模型,更是智能系统的核心组件。

单一提示的局限性

对于多层次任务,单一复杂提示往往效率低下,模型容易出现以下问题:

  • 忽略部分指令
  • 丢失上下文
  • 错误累积
  • 上下文窗口不足
  • 出现幻觉

示例:要求分析市场调研报告、总结发现、提取数据点并撰写邮件,模型可能只完成部分任务,遗漏关键环节。

通过顺序拆解提升可靠性

提示链通过将复杂任务拆解为聚焦的顺序流程,显著提升可靠性和可控性。以上述市场报告处理为例,链式流程如下:

  1. 初始提示(摘要)
    “请总结以下市场调研报告的主要发现:[文本]”
    模型专注于摘要,准确性更高。
  2. 第二步(趋势识别)
    “根据摘要,识别三大新兴趋势并提取支持数据点:[第 1 步输出]”
    提示更聚焦,建立在已验证结果之上。
  3. 第三步(邮件撰写)
    “请为市场团队撰写一封简明邮件,概述上述趋势及数据支持:[第 2 步输出]”

为确保每步任务准确,可为模型分配不同角色,如“市场分析师”“贸易分析师”“文档专家”等。

结构化输出的重要性

提示链的可靠性高度依赖于各步骤间数据的完整性。若某步输出模糊或格式不规范,后续提示可能因输入错误而失败。为此,建议指定结构化输出格式(如 JSON 或 XML)。

JSON 示例

{"trends": [{"trend_name": "AI 驱动个性化","supporting_data": "73% 消费者更愿意与使用个人信息提升购物体验的品牌合作。"},{"trend_name": "可持续与口碑","supporting_data": "带 ESG 标签产品销量五年增长 28%,无 ESG 标签产品增长 20%。"}]
}

实践应用与场景

提示链是一种通用模式,核心价值在于将复杂问题拆解为顺序、可管理的步骤。常见应用包括以下 7 类场景:

1. 信息处理流程

许多任务需对原始信息多次转换(如文档摘要、实体提取、数据库查询、报告生成)。
提示链流程

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

适用领域:自动化内容分析、AI 助理开发、复杂报告生成等。

2. 复杂问答

回答需多步推理或信息检索的问题(如“1929 年股市崩盘的主要原因及政府政策应对?”)。
提示链流程

  • 提示 1:识别用户问题的核心子问题(崩盘原因、政府应对)。
  • 提示 2:检索 1929 崩盘原因相关信息。
  • 提示 3:检索政府政策应对相关信息。
  • 提示 4:综合第 2、3 步信息,形成完整答案。

核心价值:多步推理与信息整合型 AI 系统的基础。

3. 数据提取与转换

将非结构化文本转为结构化格式,需多步迭代修正以提升准确性和完整性。
提示链流程

  • 提示 1:尝试从发票文档中提取指定字段(如姓名、地址、金额)。
  • 处理:检查字段是否齐全且格式正确。
  • 提示 2(条件):若字段缺失或格式错误,重新提示模型查找缺失/错误信息,并提供失败上下文。
  • 处理:再次验证结果,必要时重复。
  • 输出:提取并验证的结构化数据。

4. 内容生成流程

复杂内容创作分为主题构思、结构大纲、分段撰写、修订优化等阶段。
提示链流程

  • 提示 1:根据用户兴趣生成 5 个主题创意。
  • 处理:用户选择或自动选定一个主题。
  • 提示 2:基于选定主题生成详细大纲。
  • 提示 3:根据大纲第一点撰写草稿。
  • 提示 4:根据第二点撰写草稿,并提供前一段上下文,依次完成所有大纲点。
  • 提示 5:整体审阅并优化草稿的连贯性、语气和语法。

适用场景:自动化创意写作、技术文档等结构化文本生成。

5. 有状态对话智能体

为对话连续性提供基础机制,每轮对话整合前序信息或实体,维护上下文。
提示链流程

  • 提示 1:处理用户第 1 轮发言,识别意图和实体。
  • 处理:更新对话状态。
  • 提示 2:基于当前状态生成回复或识别下一步所需信息。
  • 后续轮次:重复上述流程,利用累积的对话历史(状态)。

核心价值:对话智能体开发的基础,支持跨多轮对话保持上下文连贯性。

6. 代码生成与优化

功能代码生成需拆解为逻辑操作,逐步执行。
提示链流程

  • 提示 1:理解用户代码需求,生成伪代码或大纲。
  • 提示 2:根据大纲撰写初稿代码。
  • 提示 3:识别代码潜在错误或改进点(可用静态分析工具或再次调用 LLM)。
  • 提示 4:根据问题重写或优化代码。
  • 提示 5:补充文档或测试用例。

7. 多模态与多步推理

处理多模态数据集(如含文本、标签、表格的图片),需拆解为多个提示任务。
提示链流程

  • 提示 1:从图片请求中提取并理解文本。
  • 提示 2:将提取的文本与标签关联。
  • 提示 3:结合表格信息解释并输出所需结果。

实战代码示例

提示链实现方式包括脚本中的顺序函数调用,或使用专门框架(如 LangChain、LangGraph)管理流程、状态和组件集成。以下示例聚焦基础线性序列,实现“非结构化文本提取 → 结构化 JSON 转换”的两步提示链。

前置准备

  1. 安装所需库:
pip install langchain langchain-community langchain-openai langgraph

如需更换模型供应商,可替换 langchain-openai(如 langchain-anthropic 等)。

  1. 配置 API 密钥:
  • 推荐使用 .env 文件加载(需安装 python-dotenv);
  • 或直接在代码中传入 api_key 参数。

完整代码

import os
import json  # 用于 JSON 格式化输出(可选)
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=your_key
# 初始化语言模型(ChatOpenAI)
llm = ChatOpenAI(temperature=0,  # 温度为 0,输出更确定model="gpt-3.5-turbo"  # 明确指定模型(可选,默认有 fallback)# api_key="your_openai_key"  # 未使用 .env 时手动传入
)
# ---------------------- 提示模板定义 ----------------------
# 提示 1:技术规格提取(CPU、内存、存储)
prompt_extract = ChatPromptTemplate.from_template("""请从以下文本中准确提取处理器(CPU)、内存(Memory)和存储(Storage)相关的技术规格,
只保留关键信息,不要额外描述:
{text_input}"""
)
# 提示 2:规格转 JSON 格式(严格遵循要求)
prompt_transform = ChatPromptTemplate.from_template("""请将以下技术规格严格按照要求转换为 JSON 格式:
1. 必须包含且仅包含三个键:cpu、memory、storage
2. 值为纯文本描述,不要额外修饰
3. 确保 JSON 格式正确可解析,不要有多余字符
技术规格:
{specifications}"""
)
# ---------------------- 链构建(LCEL 语法) ----------------------
# 提取链:文本输入 → 提取提示 → LLM → 字符串输出
extraction_chain = prompt_extract | llm | StrOutputParser()
# 全链:文本输入 → 提取规格 → 转换为 JSON → 字符串输出
full_chain = ({"specifications": extraction_chain}  # 提取链的输出作为 specifications 变量| prompt_transform| llm| StrOutputParser()
)
# ---------------------- 运行链并输出结果 ----------------------
if __name__ == "__main__":# 输入文本(非结构化技术描述)input_text = "新款笔记本配备 3.5GHz 八核处理器、16GB 内存和 1TB NVMe SSD。"# 执行链final_result = full_chain.invoke({"text_input": input_text})# 美化输出print("=== 输入文本 ===")print(input_text)print("\n=== 最终 JSON 结果 ===")try:# 格式化 JSON 输出(增强可读性)formatted_json = json.dumps(json.loads(final_result), ensure_ascii=False, indent=2)print(formatted_json)except:# 若 JSON 解析失败,输出原始结果print(final_result)

上下文工程与提示工程

核心定义

上下文工程(见图 1)是一种系统性方法,旨在于 AI 生成前为模型构建完整的信息环境。该方法认为,模型输出质量更多取决于所提供的丰富上下文,而非模型架构本身。

与传统提示工程的区别

维度

传统提示工程

上下文工程

优化范围

仅优化用户即时问题的表达

扩展至多层信息(系统提示、外部数据、隐性信息等)

核心目标

让模型理解单个问题

为智能体构建完整操作视图

数据来源

仅用户输入

系统提示、外部工具、检索文档、历史交互、用户身份等

上下文的核心组成

  1. 系统提示:定义模型角色与行为(如“你是技术写手,语气需正式且精确”);
  2. 外部数据:检索文档(知识库)、工具输出(API 查询结果、日程数据等);
  3. 隐性数据:用户身份、历史交互记录、环境状态等;
  4. 用户输入:原始问题或需求。

实际应用价值

经过上下文工程的智能体,在回复前会整合多源信息(如用户日程、邮件收件人关系、会议记录),生成高度相关、个性化、实用的输出。

优化工具

实际应用中,可使用专门调优系统自动提升上下文质量(无需手动重写提示),例如:

  • Google Vertex AI 提示优化器
  • 核心逻辑:提供样例输入、系统指令和模板,通过评估指标系统性优化模型响应,实现闭环反馈。

补充 langchain的基本用法

LangChain 是一个 大模型应用开发框架,核心目标是让开发者快速拼接「大模型 + 外部工具 / 数据」,构建复杂的 AI 应用(比如问答机器人、数据处理链、智能代理等)。它的核心思想是 “模块化”“链(Chain)”—— 把大模型的调用、数据处理、工具交互等步骤拆成独立组件,再像搭积木一样串起来。

下面用最通俗的方式介绍其 核心概念基本使用流程,结合你之前的代码案例理解:

一、LangChain 核心概念(必懂 3 个)

1. 模型(Models):大模型的 “接口包装”

LangChain 封装了主流大模型的调用(OpenAI、Anthropic、本地化模型等),统一了调用接口,不用关心不同厂商的 API 差异。

常用类型:

  • ChatOpenAI:对话类模型(如 GPT-3.5/4)
  • OpenAI:文本补全类模
  • 其他:ChatAnthropic(Claude)、LlamaCpp(本地化 Llama 模型)
  • 核心作用:接收指令(Prompt),返回模型输出。
2. 提示模板(Prompts):给大模型的 “标准化指令”

把需要传给大模型的指令、变量(比如用户输入、外部数据)封装成模板,避免重复写固定文本,让指令更规范。

  • 常用类:ChatPromptTemplate(对话式提示)、PromptTemplate(普通文本提示)

  • 核心作用:将 “固定指令 + 动态变量” 拼接成完整的 Prompt,传给模型。
3. 链(Chains):步骤的 “串联器”

单独用模型只能做 “一次输入 → 一次输出”,Chain 能把多个组件(提示模板、模型、解析器、工具)串起来,实现 “多步流程自动化”。

  • 核心思想:前一个组件的输出,作为后一个组件的输入(比如你之前的 “提取规格 → 转 JSON”)
  • 实现方式:用 | 符号(LCEL 语法)拼接组件,简洁直观。
4. 解析器(OutputParsers):模型输出的 “格式化工具”

大模型返回的是原始文本 / 消息对象,解析器能把它转换成你需要的格式(字符串、JSON、列表等)。

  • 常用:StrOutputParser(转字符串)、JsonOutputParser(转 JSON)

二、LangChain 基本使用流程(4 步走)

不管是简单的数据处理,还是复杂的智能代理,核心流程都离不开这 4 步:

1. 安装依赖

首先安装 LangChain 和对应模型的依赖(以 OpenAI 为例):

pip install langchain langchain-openai  # langchain核心 + OpenAI适配
2. 初始化核心组件
  • 模型(Models):配置大模型(API Key、参数)
  • 提示模板(Prompts):定义标准化指令
  • 解析器(OutputParsers):指定输出格式
from langchain_openai import ChatOpenAI
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser
# 1. 初始化模型(配置API Key、温度等参数)
llm = ChatOpenAI(api_key="你的OpenAI密钥",  # 也可以通过.env文件加载temperature=0,  # 0=输出确定,1=输出随机model="gpt-3.5-turbo"
)
# 2. 定义提示模板(包含动态变量{user_input})
prompt = ChatPromptTemplate.from_template("请总结以下文本的核心内容,不超过50字:\n{user_input}"
)
# 3. 初始化解析器(把模型输出转成字符串)
parser = StrOutputParser()
3. 构建链(Chain)

| 把组件串起来,形成 “输入 → 处理 → 输出” 的流程:

# 简单链:提示模板 → 模型 → 解析器
summary_chain = prompt | llm | parser
4. 运行链,获取结果

invoke() 传入输入数据,执行整个流程:

# 输入文本
user_input = "LangChain 是一个大模型应用开发框架,支持模块化拼接组件,能快速构建复杂AI应用,比如问答机器人、数据处理工具等。"
# 执行链
result = summary_chain.invoke({"user_input": user_input})
# 输出结果
print("总结结果:", result)

三、进阶:复杂链(多步骤串联)

像你之前的代码那样,实现 “多步流程”(提取 → 转换),核心是用 “键值对” 传递中间结果

# 第一步:提取技术规格(组件1)
extract_prompt = ChatPromptTemplate.from_template("提取文本中的CPU、内存、存储信息:{text}")
extract_chain = extract_prompt | llm | parser
# 第二步:转换为JSON(组件2)
json_prompt = ChatPromptTemplate.from_template("把以下规格转JSON(含cpu、memory、storage键):{spec}")
json_chain = json_prompt | llm | parser
# 串联成全链:用{"spec": extract_chain}传递中间结果
full_chain = {"spec": extract_chain} | json_chain
# 运行
input_text = "新款笔记本配备 3.5GHz 八核处理器、16GB 内存和 1TB NVMe SSD。"
result = full_chain.invoke({"text": input_text})
print(result)  # 输出JSON格式结果


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/993559.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

极速AI助手 - 多AI服务桌面助手, 支持MCP工具调用, 内置免费AI功能

极速AI助手是一款专业的桌面端多AI服务交互程序。支持接入多种主流AI服务(内置AI、DeepSeek、通义千问等),集成MCP工具调用功能,让AI助手能够执行更多实用任务。支持多对话管理、Markdown渲染、流式响应等功能,是…

蓝鲸花呗客服妙招帮你脱困省油大空间低配拆解银河的“水桶车细节值得吵一架

谁能想到,一台8万出头的B级插混轿车,竟能同时做到续航超2100km、百公里油耗2.67L、轴距2845mm? 吉利银河A7的上市,直接撕掉了“低价必低配”的标签,甚至让合资混动车型的定价逻辑彻底崩塌。有车主实测从北京到武汉一箱…

吴恩达深度学习课程四:计算机视觉 第一周:卷积基础知识(一)图像处理基础

此分类用于记录吴恩达深度学习课程的学习笔记。 课程相关信息链接如下:原课程视频链接:[双语字幕]吴恩达深度学习deeplearning.ai github课程资料,含课件与笔记:吴恩达深度学习教学资料 课程配套练习(中英)与答案…

Python函数基础实战教程:从定义调用到参数传值全解析

一、Python函数核心意义:为什么要学函数基础? Python函数是代码复用、逻辑封装的核心载体,也是新手从「线性代码编写」过渡到「模块化编程」的关键。无论是自动化脚本、数据分析还是Web开发,函数都能让代码更简洁、…

索引数组读取修改添加

索引数组读取修改添加1 $xm = array(小明,男,28,5888.88);2 3 //1.读取数据 4 echo $xm[0].同学的工资是:.$xm[3].元人民币。;5 6 //2.修改数据 7 $xm[0] = 小张;8 $xm[1]…

12.08

今天上午统一建模语言上机数构上课,下午Java

zsj_蓝桥python系列二_Python 基础语法 _Python 列表推导式

zsj_蓝桥python系列二_Python 基础语法 _Python 列表推导式Python 基础语法 Python 列表推导式 你有没有写过这样的代码?想生成一个新列表,得先建空列表、再写 for 循环、最后用append()加元素 —— 又长又麻烦。今天…

白带异常用药推荐:科学应对妇科炎症的健康指南

白带是女性生殖系统健康的“晴雨表”,正常情况下呈透明或白色糊状、无异味。当白带出现颜色异常(如黄绿色、灰色)、性状改变(如豆腐渣样、泡沫状)或伴随瘙痒、异味时,可能提示阴道炎、宫颈炎等妇科炎症。世界卫生…

获取数组长度即最大下标

获取数组长度即最大下标$xm = array(小明,男,28,5888.88);//count()函数用于返回数组长度(元素的个数),int(整型)$x = count($xm);echo $x;echo "<br>";var_dump($x);//3.使用数组长度添加数据$xm[c…

第49天

今天学习的java

JAVA学习笔记-DAY3

引用类型 VS 指针在Java中,引用类型的变量非常类似于C/C++的指针。 引用类型指向一个对象,指向对象的变量是引用变量。这些变量在声明时被指定为一个特定的类型,比如 Employee、Puppy 等。变量一旦声明后,类型就不…

北京婚姻家庭法律事务所服务观察:专业机构业务能力解析

在社会关系日益复杂化的当下,婚姻家庭领域的法律需求呈现多样化趋势,涵盖离婚纠纷、财产划分、子女抚育、遗产继承等多个维度。专业的婚姻家庭法律事务所凭借其对细分领域的深耕,为当事人提供法律支持与权益保障,成…

火小兔的两种交互方式与全部命令 - Magic

使用本平台开发脚本 从微软官方渠道安装完毕后,可以从开始菜单中搜索到“机关区”和“火小兔”。机关区——调试窗口(演示):直接双击“机关区”,进入界面之后就可以直接编写,调试,编辑,浏览,运行本平台命令;…

123_尚硅谷_匿名函数

123_尚硅谷_匿名函数1.匿名函数使用方式1:在定义匿名函数时就直接调用 2.匿名函数使用方式2:将匿名函数赋给一个变量,再通过该变量调用匿名函数 3.全局匿名函数

推荐几个模切机品牌:国内实力厂商推荐

模切机作为印后加工和精密制造领域的关键设备,广泛应用于印刷、包装、电子、图文处理等行业,其性能直接影响产品的加工精度、生产效率及成品质量。在各行业对加工工艺要求不断提升的背景下,选择技术成熟、品质可靠的…

白带异常用药品牌排行榜:科学守护女性生殖健康

白带是女性生殖系统健康的“晴雨表”,正常情况下呈无色透明或乳白色糊状,无异味。当出现颜色、质地、气味异常(如黄绿色、豆腐渣样、鱼腥味等)时,可能提示阴道炎症、宫颈病变或盆腔感染等问题。及时识别症状并采取…

洛谷 P3959

NOIP 2017 提高组给定 \(n\) 个点,\(m\) 条边的无向连通图。要选出一棵有根生成树,设 \(u\) 与 \(fa_u\) 之间的边长度为 \(l_u\),总代价为 \(\sum l_u \cdot dis(u, root)\),求最小总代价是多少? \(n \le 12, m …

西城区离婚律师事务所推荐:专注婚姻家事法律服务机构

在处理婚姻家事相关事务时,选择专业的法律服务机构是保障自身权益的重要环节。西城区作为北京核心区域,汇聚了多家在婚姻家事领域具备丰富经验的律师事务所,为有需求的人士提供专业支持。一、推荐榜单推荐 1:北京安…