LangChain Prompts 深度解析
在 LangChain 体系中,Prompt 是一切行为的起点。Chain 决定流程,Agent 决定策略,而 Prompt 决定模型如何思考。如果把模型当成推理引擎,那么 Prompt 就是它的“控制程序”。
Prompt 在 LangChain 中的位置
结构逻辑:
用户输入
↓
Prompt 模板
↓
模型(ChatModel / LLM)
↓
输出
关键点:Prompt 不只是字符串、它是“可组合、可参数化、可结构化”的对象、它决定模型输出的稳定性
Prompt 的核心类型
LangChain 中主要有三类 Prompt:
普通 PromptTemplate
适用于传统 LLM,即字符串输入
from langchain.prompts import PromptTemplate
template = PromptTemplate.from_template(
"请将以下内容翻译为英文:{text}"
)
prompt = template.format(text="今天天气很好")
特点:本质是字符串格式化、支持变量、不区分角色
适合:简单任务、非对话场景
ChatPromptTemplate
适用于 Chat 模型
from langchain.prompts import ChatPromptTemplate
prompt = ChatPromptTemplate.from_messages([
("system", "你是一个专业的数据分析专家"),
("human", "分析以下数据:{data}")
])
结构本质:
[ {role: "system", content: "..."}, {role: "user", content: "..."}]
优势:支持多轮、支持角色区分、支持工具调用
生产环境推荐全部使用 ChatPromptTemplate。
Few-shot Prompt
用于增强稳定性。
from langchain.prompts import FewShotPromptTemplate
结构思想:
示例1
示例2
示例3
新问题
用途:结构化输出、分类任务、代码生成
本质:通过示例约束模型行为
PromptTemplate 的底层原理
模板渲染机制
LangChain 默认使用:
f-string 模式
例如:
"你好,{name}"
内部过程:
变量注入
→ 生成最终字符串
→ 发送给模型
重要特性:input_variables 自动校验、支持部分变量 partial、支持组合
Prompt 组合
在复杂系统中,Prompt 需要模块化。
部分变量绑定
prompt = template.partial(role="GIS专家")
适合:固定系统角色、多场景复用
Prompt 管道式组合
LangChain Expression Language(LCEL)支持:
chain = prompt | model
执行流程:
输入
↓
Prompt
↓
Model
↓
输出
这种表达式是 LangChain 2.x 的核心。
结构化输出 Prompt
生产环境中最重要的能力之一。
JSON 输出约束
system = """
你必须以JSON格式输出:
{
"title": "",
"summary": ""
}
"""
问题:模型可能输出无效 JSON、容易出现解释性文字
解决方案:
OutputParser
from langchain.output_parsers import JsonOutputParser
结合 Pydantic
from pydantic import BaseModel
class Report(BaseModel):
title: str
summary: str
LangChain 可自动生成格式提示:
format_instructions
优势:自动校验、自动重试、降低解析错误率
动态 Prompt
在 RAG 中,Prompt 不再固定。
结构:
系统指令
+
检索到的文档
+
用户问题
示例:
template = """
你只能根据以下文档回答问题:
{context}
问题:
{question}
"""
关键点:context 控制回答边界、文档长度影响成本、需要做截断策略
Prompt 设计原则
角色清晰
System 中必须明确:身份、输出格式、行为约束、禁止行为
少歧义
不要写:
详细回答
要写:
用 3 条 bullet point 输出
结构大于修辞
模型更理解结构化约束:
步骤1:
步骤2:
步骤3:
而不是:
请认真思考
避免过长指令
Token 越多:成本越高、噪声越多、稳定性下降
Prompt 的工程化问题
Prompt 版本管理
推荐:使用文件存储、Git 版本控制、标记版本号、不要把 Prompt 写死在代码里。
Prompt 测试
可以做:单元测试、对比测试(A/B)、自动回归测试、LangSmith 可以记录 Prompt 变化。
Prompt 漂移
模型升级后:旧 Prompt 可能失效、输出格式可能变化
解决:加强格式约束、加入校验机制
Prompt 、Chain 、Agent
很多人误解 Prompt 是“随便写几句话”。
实际关系:
Prompt = 语义控制
Chain = 流程控制
Agent = 决策控制
Prompt 决定:模型怎么思考、模型输出什么格式、模型能否稳定
如果 Prompt 不稳定:Chain 再好也没用、Agent 会频繁出错,统一使用 ChatPromptTemplate,所有输出必须结构化,使用 OutputParser 做校验,Prompt 文件化管理,用低 temperature 保证稳定性,在 RAG 中严格控制 context
在 LangChain 中,Model 决定能力上限,Prompt 决定输出质量,Chain 决定系统稳定性
更多精彩内容请关注微信公众号 “学GIS的小宝同学”