当前位置: 首页 > news >正文

提示技术系列——链式提示

什么是提示技术?

        提示技术是实现提示工程目标的具体技术手段,是提示工程中的“工具库”

什么又是提示工程?

        提示工程是指通过设计、优化和迭代输入到大语言模型(LLM)的提示(Prompt),系统性提升模型输出质量(如相关性、准确性、可控性)的实践领域。它是一个覆盖全流程方法论,包括:

  • 明确目标任务(如生成教学内容、问答、翻译);
  • 设计提示结构(如指令、上下文、示例);
  • 选择模型与参数(如温度、top_p);
  • 验证与迭代(根据输出调整提示)。

其核心是“通过工程化方法控制大语言模型(LLM)的行为”


概念

        链式提示(Prompt Chaining)将任务分解为许多子任务,将子任务的提示提供给语言模型,得到的结果作为新的提示词的一部分,这就是链式提示。

链式提示的特点:

  • 模块化设计:将复杂任务拆分为多个子任务。
  • 增强可控性:可以对每一步进行干预、优化或调试。
  • 提高准确性:减少一次性处理复杂问题带来的错误。
  • 可解释性强:清晰展示模型的推理路径。

概念图解

应用场景

  1. 自动问答系统(拆解用户问题为理解、检索、推理、总结等步骤);
  2. 数据清洗与结构化(将非结构化文本转换为表格、JSON等格式);
  3. 内容生成 + 审核流程(先生成内容,再判断是否合规、是否需修改);
  4. 教育中教学设计生成(将教学设计按模块拆分为教学目标,教学重难点、教学准备、教学过程,接着又可以根据实际情况将教学过程拆分为不同的子过程等);
  5. ……

案例实操

使用工具:扣子;

实现方式:扣子工作流。

完整工作流如下图:

节点配置信息:

  • 开始节点:

  • 文献摘要节点:

  • 根据文献摘要进行趋势分析节点:

  • 生成论文大纲节点:

  • 结束节点:

运行结果如下:

        大家若有编程基础的话,可以参考下面的代码案例来实现与体验不同场景下使用链式提示。

代码实现链式提示

单向链式提示

技术栈:Python;LangChain

代码相关包引用导入:

pip install langchain_community==0.3.26;
pip install langchain_core==0.3.66;

具体代码:

import osfrom dotenv import load_dotenv
from langchain_community.chat_models import ChatZhipuAI
from langchain_core.prompts import PromptTemplate
from langchain_core.runnables import RunnablePassthrough# 加载环境变量(建议将API密钥放在.env文件中)
load_dotenv()# 初始化智谱GLM-4模型
llm = ChatZhipuAI(model="glm-4",api_key=os.getenv("ZHIPUAI_API_KEY"),temperature=0.3,top_p=0.8,streaming=False
)# ===== 定义Prompt模板 =====
literature_template = """作为学术研究员,请根据关键词《{topic}》生成5篇代表性文献摘要:
| 标题 | 核心方法 | 主要结论 |
|------|----------|----------|"""trend_template = """基于以下文献摘要:{literature_summary}
总结该领域三大技术趋势和2个未解决问题:"""outline_template = """根据趋势分析:{trend_analysis}
设计论文目录,包含:
1. 引言(背景+挑战)
2. 方法分类
3. 开放性问题
4. 未来方向\n输出:"""# ===== 构建链式流程 =====
literature_prompt = PromptTemplate.from_template(literature_template)
trend_prompt = PromptTemplate.from_template(trend_template)
outline_prompt = PromptTemplate.from_template(outline_template)literature_chain = literature_prompt | llm
trend_chain = trend_prompt | llm
outline_chain = outline_prompt | llmacademic_chain = (RunnablePassthrough.assign(literature_summary=literature_chain).assign(trend_analysis=trend_chain).assign(outline_generator=outline_chain)
)# 执行链
research_topic = "大语言模型在金融风控中的应用"
print(research_topic, ",最终论文提纲正在生成中,请等待...")
result = academic_chain.invoke({"topic": research_topic})print("\n" + "=" * 60 + "\n最终论文提纲:\n" + "=" * 60)
print(result["outline_generator"].content.strip())

路由链式提示

技术栈:Python;LangChain

代码相关包引用导入:

pip install rich==14.0.0;
pip install langchain_community==0.3.26;
pip install pandas==2.3.0;
pip install langchain==0.3.26;
pip install langchain_core==0.3.66;

具体代码:

import jsonimport pandas as pd
from dotenv import load_dotenv
from langchain.chains import TransformChain
from langchain_community.chat_models import ChatZhipuAI
from langchain_core.prompts import PromptTemplate
from langchain_core.runnables import RunnableLambda
from rich.console import Console# 加载环境变量(建议将API密钥放在.env文件中)
load_dotenv()# ===== 自定义数据清洗链 =====
def clean_transform(inputs: dict) -> dict:df = pd.DataFrame(json.loads(inputs["raw_data"]))df = df.dropna(subset=["date"])  # 删除日期为空的行df["sales"] = df["sales"].fillna(0).astype(int)  # 删除日期为空的行return {"cleaned_data": df.to_json(orient="records")}clean_chain = TransformChain(input_variables=["raw_data"],output_variables=["cleaned_data"],transform=clean_transform
)# ===== 分析Prompt =====
analysis_prompt = PromptTemplate.from_template("""
对销售数据执行分析:
1. 总销售额(请逐步计算,确保计算结果准确)
2. 最畅销产品(逐一比较,确保结果准确)
3. 每日销售趋势
数据:{cleaned_data}
用Markdown表格呈现结果:""")# ===== 路由决策逻辑 =====
def route_decision(inputs: dict) -> str:df = pd.DataFrame(json.loads(inputs["raw_data"]))missing = df.isnull().sum().sum()return "clean" if missing > 0 else "analyze"# 初始化智谱GLM-4模型
llm = ChatZhipuAI(model="glm-4",temperature=0.3,top_p=0.8,streaming=False
)# ===== 路由分支链 =====
def router_chain_func(inputs: dict):if route_decision(inputs) == "clean":cleaned = clean_chain.invoke(inputs)print("输入的数据需清洗,清洗后的数据为:")cleaned_data = cleaned["cleaned_data"]print(cleaned_data)return (analysis_prompt | llm).invoke({"cleaned_data": cleaned_data})else:# 直接分析原始数据return (analysis_prompt | llm).invoke({"cleaned_data": inputs["raw_data"]})router_chain = RunnableLambda(router_chain_func)# ===== 数据准备 =====
sales_data = {"date": ["2024-01-01", "2024-01-01", "2024-01-02", None, "2024-01-03", "2024-01-03"],"product": ["A", "B", "A", "C", "D", "C"],"sales": [100, 150, None, 200, 250, 220]
}
json_param = json.dumps(sales_data)
print("输入的数据是:")
print(json_param)
print("销售数据分析正在进行中,请稍候...")# 执行动态链
analysis_result = router_chain.invoke({"raw_data": json_param
})console = Console()print("\n" + "=" * 60 + "\n数据分析结果:\n" + "=" * 60)
if analysis_result.content:console.print(analysis_result.content)
else:console.print(analysis_result)

总结与思考

        链式提示链式思考提示,单从中文描述上来看是比较类似的,但是从它们对应从英文来看,Prompt ChainingChain of Thought Prompt,就显得比较不一样了。前者的链式,在于强调解决问题所用到的提示(prompt)的整个链路过程,是有多个 prompt 组合而成的;而后者的链式,在于强调解决问题过程中间的思考链路,整个过程只有一个 prompt。

它们之间的具体对比分析:

维度

链式提示(Prompt Chaining)

链式思考(Chain-of-Thought)提示

定义

多个提示按顺序执行,形成一个任务流程

引导模型在单个提示中输出中间推理步骤

核心目标

拆解复杂任务为多个子任务,逐步完成

提高模型解决复杂问题的准确性

是否多阶段

是,每个阶段是一个独立提示

否,整个过程在一个提示中完成

是否模块化

是,可单独优化某一步骤

否,整体性强,难以拆分

是否需要人工干预

可以在每一步插入逻辑判断、修正等

通常自动完成

是否支持外部工具调用

支持,如数据库查询、API 调用等

主要依赖模型内部知识

可控性

高,可精细控制每一步

中低,依赖模型自动生成

可解释性

强,流程清晰,便于调试

强,展示推理路径

资源消耗

中高(多次调用模型)

低至中等(一次调用)

总结起来可以这么理解:

链式思考(CoT) 提示,是让模型“自己一步步想清楚”,
链式提示(Prompt Chaining), 是让人“引导模型一步步做事情”。

自我一致性提示, 则是让模型“多角度想清楚一件事”;

生成知识提示,则是让模型“基于已有知识‘创造’新内容”。

好了,到此结束。



提示技术系列,接下来分享:思维树(ToT);自动提示工程师(APE);主动提示(Active-Prompt);方向性刺激提示等等

为了方便大家学习,这里给出专栏链接:https://blog.csdn.net/quf2zy/category_12995183.html

欢迎大家一起来学习与交流……

http://www.lqws.cn/news/577243.html

相关文章:

  • 跨主机用 Docker Compose 部署 PostgreSQL + PostGIS 主从
  • 对象池模式:减少GC的Kotlin实战指南
  • 基于 SpringBoot+Vue.js+ElementUI 的 Cosplay 论坛设计与实现7000字论文
  • LeetCode 1456. 定长子串中元音的最大数目
  • MapReduce
  • EtherCAT主站教程4--IGH主站代码详解
  • 云手机的用途都有哪些?
  • Deep Mean-Shift Priors for Image Restoration论文阅读
  • mysql mvcc
  • Hadoop WordCount 程序实现与执行指南
  • Java 案例 6 - 数组篇(基础)
  • 第 89 场周赛:山脉数组的峰值索引、车队、考场就坐、相似度为 K 的字符串
  • 大语言模型(LLM)笔记
  • UE5 一台电脑+双显示器 配置nDisplay裸眼3D效果
  • 东芝TC78S600FNG在打印机中的应用:静音、防卡纸与能效
  • Python 数据分析与机器学习入门 (八):用 Scikit-Learn 跑通第一个机器学习模型
  • 智慧畜牧-猪场猪只行为状态检测数据集VOC+YOLO格式3790张15类别
  • Java中for与foreach
  • python+uniapp基于微信小程序的生鲜订购系统nodejs+java
  • 基于uniapp的老年皮肤健康管理微信小程序平台(源码+论文+部署+安装+售后)
  • JAVA八股文:异常有哪些种类,可以举几个例子吗?Throwable类有哪些常见方法?
  • HTML5 实现的圣诞主题网站源码,使用了 HTML5 和 CSS3 技术,界面美观、节日氛围浓厚。
  • 湖北理元理律师事务所债务解法:从法律技术到生活重建
  • 车载Tier1 supplier梳理
  • VMware vSphere 9与ESXi 9正式发布:云原生与AI驱动的虚拟化平台革新
  • Nginx反向代理与缓存功能
  • 【软考高项论文】信息系统项目的资源管理
  • GitHub Actions配置python flake8和black
  • 企业流程知识:《企业再造:企业革命的宣言》
  • 大语言模型 API 进阶指南:DeepSeek 与 Qwen 的深度应用与封装实践