Skip to content

提示链(Prompt Chain)

提示链(Prompt Chain)是把一个复杂任务拆成多个步骤,每个步骤用一个 Prompt,前一步的输出作为后一步的输入。

为什么需要提示链

单 Prompt 处理复杂任务的问题:
- Prompt 太长,模型"分心"
- 中间步骤不可控
- 出错后难以定位
- 无法针对每步优化

提示链的优势:
- 每步目标明确,效果好
- 中间结果可检查、可调试
- 可以针对每步单独优化
- 支持并行(独立步骤同时跑)

基本模式

顺序链(Sequential Chain)

Step 1: 研究 → Step 2: 写作 → Step 3: 校对

输入 → Prompt 1 → 输出 1

           Prompt 2 → 输出 2

           Prompt 3 → 最终输出

并行链(Parallel Chain)

输入 → Prompt 1a ↘
       Prompt 1b → 汇总 Prompt → 最终输出
       Prompt 1c ↗

LangChain 实现

Sequential Chain

python
from langchain.chains import SimpleSequentialChain, LLMChain
from langchain.prompts import PromptTemplate
from langchain_openai import ChatOpenAI

llm = ChatOpenAI()

# Step 1:生成大纲
outline_prompt = PromptTemplate(
    template="根据以下主题生成文章大纲:\n主题:{input}",
    input_variables=["input"]
)
outline_chain = LLMChain(llm=llm, prompt=outline_prompt)

# Step 2:根据大纲写文章
write_prompt = PromptTemplate(
    template="根据以下大纲写文章:\n大纲:{input}",
    input_variables=["input"]
)
write_chain = LLMChain(llm=llm, prompt=write_prompt)

# Step 3:校对
proofread_prompt = PromptTemplate(
    template="校对并润色以下文章:\n文章:{input}",
    input_variables=["input"]
)
proofread_chain = LLMChain(llm=llm, prompt=proofread_prompt)

# 组装成顺序链
chain = SimpleSequentialChain(
    chains=[outline_chain, write_chain, proofread_chain]
)

result = chain.run("RAG 技术原理")

更灵活的方式(函数链)

python
def step1_research(topic):
    prompt = f"研究以下主题,列出关键点:{topic}"
    return llm(prompt)

def step2_write(outline):
    prompt = f"根据以下关键点写文章:{outline}"
    return llm(prompt)

def step3_proofread(article):
    prompt = f"校对以下文章:{article}"
    return llm(prompt)

# 执行
outline = step1_research("RAG")
draft = step2_write(outline)
final = step3_proofread(draft)

实用案例

案例 1:代码生成 + 测试 + 文档

python
# Step 1:生成代码
code = llm(f"用 Java 写一个 LRU Cache,要求:{requirements}")

# Step 2:生成单元测试
tests = llm(f"为以下代码生成 JUnit 测试:\n{code}")

# Step 3:生成文档
docs = llm(f"为以下代码生成 JavaDoc 文档:\n{code}")

# Step 4:代码审查
review = llm(f"审查以下代码,指出问题:\n{code}")

案例 2:RAG 的提示链

python
# Step 1:重写查询(优化检索效果)
rewritten_query = llm(f"把以下问题改写成更适合向量检索的版本:{question}")

# Step 2:检索
docs = vector_db.search(rewritten_query, k=5)

# Step 3:判断相关性(过滤不相关结果)
relevant_docs = []
for doc in docs:
    is_relevant = llm(f"以下资料是否和问题相关?\n问题:{question}\n资料:{doc}")
    if "是" in is_relevant:
        relevant_docs.append(doc)

# Step 4:生成回答
answer = llm(f"根据以下资料回答问题:\n资料:{relevant_docs}\n问题:{question}")

提示链的设计原则

1. 每步单一职责

❌ 一个 Prompt 做多件事
"研究、写作、校对"

✅ 拆成 3 个 Prompt
Prompt 1:研究
Prompt 2:写作
Prompt 3:校对

2. 中间结果要可检查

python
# 每步都打印中间结果,方便调试
outline = step1(topic)
print("=== 大纲 ===")
print(outline)

draft = step2(outline)
print("=== 草稿 ===")
print(draft)

final = step3(draft)

3. 加入人工审核节点

python
outline = step1(topic)
if not human_approve(outline):  # 人工审核
    outline = human_edit(outline)
draft = step2(outline)

与 Agent 的区别

提示链:
- 流程固定(预先设计好)
- 每步用哪个 Prompt 是确定的
- 适合:流程明确的任务

Agent:
- 流程动态(LLM 自己决定下一步)
- 可以用工具、可以做决策
- 适合:需要灵活应对的任务

选择建议:流程固定用提示链,需要灵活应对用 Agent。

相关资源