主题
提示链(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。