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

什么是提示技术?

提示技术是实现提示工程目标的具体技术手段 ,是提示工程中的**"工具库"**。

什么又是提示工程?

提示工程是指通过设计、优化和迭代输入到大语言模型(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;

具体代码:

python 复制代码
import os

from 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 | llm

academic_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;

具体代码:

python 复制代码
import json

import 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 Chaining ,Chain 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

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

相关推荐
萧鼎6 分钟前
深度探索 Py2neo:用 Python 玩转图数据库 Neo4j
数据库·python·neo4j
华子w90892585922 分钟前
基于 Python Django 和 Spark 的电力能耗数据分析系统设计与实现7000字论文实现
python·spark·django
风铃喵游35 分钟前
让大模型调用MCP服务变得超级简单
前端·人工智能
Rockson1 小时前
使用Ruby接入实时行情API教程
javascript·python
booooooty1 小时前
基于Spring AI Alibaba的多智能体RAG应用
java·人工智能·spring·多智能体·rag·spring ai·ai alibaba
PyAIExplorer1 小时前
基于 OpenCV 的图像 ROI 切割实现
人工智能·opencv·计算机视觉
风口猪炒股指标1 小时前
技术分析、超短线打板模式与情绪周期理论,在市场共识的形成、分歧、瓦解过程中缘起性空的理解
人工智能·博弈论·群体博弈·人生哲学·自我引导觉醒
ai_xiaogui2 小时前
一键部署AI工具!用AIStarter快速安装ComfyUI与Stable Diffusion
人工智能·stable diffusion·部署ai工具·ai应用市场教程·sd快速部署·comfyui一键安装
Tipriest_2 小时前
Python关键字梳理
python·关键字·keyword
聚客AI3 小时前
Embedding进化论:从Word2Vec到OpenAI三代模型技术跃迁
人工智能·llm·掘金·日新计划