拒绝“硬编码”!LangChain 提示词模板全指南:从基础变量到 Few-Shot 实战
·
文章目录
前言
提⽰词模板(PromptTemplate) 是LangChain的核⼼抽象之⼀,它被⼴泛应⽤于构建⼤语⾔模型(LLM)应⽤的各个环节。
简单来说,只要是需要动态、批量、或有结构地向⼤语⾔模型【发送请求】的地⽅,⼏乎都会⽤到提⽰词模板。
如下:

一、基础提示词模版(prompt_template.py)
核心概念
使用 ChatPromptTemplate 创建结构化的提示词模版,支持变量占位符动态填充内容。
代码示例
from langchain_core.prompts import ChatPromptTemplate
from langchain_deepseek import ChatDeepSeek
# 定义提示词模版
chatprompt = ChatPromptTemplate([
("system", "你是一个专业的翻译,把下面的提示词翻译成{target_language}"),
("human", "{input}"),
])
# 实例化模版
message = chatprompt.invoke({
"input": "你好",
"target_language": "德语"
}).to_messages()
# 创建 LLM 实例
llm = ChatDeepSeek(
model="deepseek-chat",
temperature=0.7,
max_tokens=8192,
)
# 方式一:链式调用
chain = chatprompt | llm
result = chain.invoke({"input": "你好", "target_language": "德语"})
# 方式二:直接调用
result = llm.invoke(message)
关键要点
- 消息角色:支持
system、human、ai等角色定义 - 变量占位符:使用
{variable_name}格式定义动态变量 - 链式操作:通过
|操作符连接 prompt 和 llm - invoke 方法:传入字典参数填充模版变量
二、占位符提示词模版(prompt_template_placeholder.py)
核心概念
使用 placeholder 类型插入完整的消息历史记录,适用于多轮对话场景。
代码示例
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.messages import HumanMessage, AIMessage
# 定义带占位符的模版
chatprompt = ChatPromptTemplate([
("system", "站在科学家的角度,回答下面问题"),
("placeholder", "{pd}"),
])
# 准备消息历史
message = [
HumanMessage(content="地球为什么是圆的"),
AIMessage(content="因为...."),
HumanMessage(content="那人为什么要呼吸?")
]
# 填充占位符
finalmessage = chatprompt.invoke({"pd": message}).to_messages()
# 调用 LLM
result = llm.invoke(finalmessage)
关键要点
- placeholder 类型:专门用于插入消息列表
- 消息对象:使用
HumanMessage、AIMessage构建对话历史 - 上下文保持:适合需要保留对话上下文的场景
- 灵活性:可以动态插入任意数量的历史消息
三、官方提示词模版(prompt_sdk.py)
核心概念
通过 LangSmith Hub (https://smith.langchain.com/hub/)获取社区共享的专业提示词模版,快速复用优质 prompt。
如下:

代码示例
from langsmith import Client
from langchain_core.prompts import ChatPromptTemplate
from langchain_deepseek import ChatDeepSeek
# 从 LangSmith Hub 拉取提示词模版
client = Client()
prompt = client.pull_prompt("hardkothari/prompt-maker")
# 创建链
chain = prompt | ChatDeepSeek(
model="deepseek-chat",
temperature=0.7,
max_tokens=8192,
)
# 调用
result = chain.invoke({
"lazy_prompt": "你是一个全栈专家",
"task": "帮我写一个简单的全栈项目"
})
关键要点
- LangSmith Hub:提示词模版共享平台
- pull_prompt:通过用户名/模版名拉取模版
- 即插即用:无需自己编写复杂 prompt
- 社区资源:利用专业人士优化的提示词
四、少样本增强提示词(fewshot_prompt.py)
核心概念
通过提供少量示例(Few-Shot Learning)引导模型理解任务模式,提升输出质量。
代码示例
from langchain_core.prompts import ChatPromptTemplate, FewShotChatMessagePromptTemplate
# 定义示例样本
examples = [
{"input": "1$2", "output": "0.5"},
{"input": "2$3", "output": "0.6666666666666666"},
]
# 定义示例模版
template_prompt = ChatPromptTemplate.from_messages([
("human", "{input}"),
("ai", "{output}"),
])
# 创建 Few-Shot 提示模版
few_shot_prompt = FewShotChatMessagePromptTemplate(
examples=examples,
example_prompt=template_prompt,
input_variables=["input"],
)
# 组合最终提示词
final_prompt = ChatPromptTemplate.from_messages([
("system", "你是一个数学老师,下面是一些数学问题和答案示例"),
few_shot_prompt,
("human", "请根据示例回答下面的问题:{input}"),
])
# 创建链并调用
chain = final_prompt | llm
result = chain.invoke({"input": "3$6"})
关键要点
- 示例驱动:通过 examples 列表提供输入输出样本
- FewShotChatMessagePromptTemplate:专门处理少样本学习的模版类
- 模式识别:帮助模型理解特定任务规则(如示例中的除法运算)
- 组合使用:可与 system、human 等消息类型组合
五、最佳实践总结
使用场景对比
| 模版类型 | 适用场景 | 优势 |
|---|---|---|
| 基础模版 | 简单的单轮对话 | 简洁直观,易于上手 |
| 占位符模版 | 多轮对话、上下文保持 | 灵活插入历史消息 |
| 官方模版 | 复杂任务、专业领域 | 复用优质 prompt,节省时间 |
| Few-Shot 模版 | 特定模式识别、规则学习 | 提升准确性,减少误解 |
开发建议
- 简单任务:优先使用基础模版
- 对话系统:使用占位符模版管理上下文
- 复杂任务:先搜索 LangSmith Hub 是否有现成模版
- 规则学习:使用 Few-Shot 提供示例引导
- 变量命名:使用清晰的变量名提高可读性
- 测试优化:通过调整 temperature 和示例数量优化效果
解决问题
提⽰词模板解决了以下⼏个核⼼问题:
- 可复⽤性: 只需定义⼀个模板,就可以⽤于⽆数个类似的查询。
- 关注点分离: 将提⽰词的结构和逻辑(⼯程)与具体的内容和数据分离开。提⽰⼯程师可以专注于优化模板,⽽应⽤程序则负责提供变量值。
- ⼀致性: 确保发送给LLM的提⽰词结构统⼀,这有助于获得更稳定、可预测的输出结果。
- 可维护性: 如果需要修改提⽰词的⻛格或结构,只需修改⼀个模板⽂件,⽽不⽤在代码的⽆数个地⽅进⾏修改。
六、完整工作流程
# Step 1: 选择合适的模版类型
# Step 2: 定义提示词结构
# Step 3: 准备变量/示例数据
# Step 4: 实例化 LLM
# Step 5: 创建链或直接调用
# Step 6: 获取结果并处理
示例:构建翻译助手
# 1. 定义模版
prompt = ChatPromptTemplate([
("system", "你是专业翻译,将{source_lang}翻译成{target_lang}"),
("human", "{text}")
])
# 2. 创建链
chain = prompt | ChatDeepSeek(model="deepseek-chat")
# 3. 调用
result = chain.invoke({
"source_lang": "中文",
"target_lang": "英文",
"text": "你好世界"
})
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐


所有评论(0)