006.LangChain Prompt Template

该教程旨在带大家从 0 起步,掌握用 Python 开发大模型应用的技能。若当前内容让你感到晦涩,可回溯本合集的前期文章,降低学习难度。


1. 为什么要用 Prompt Template?

手动拼字符串 Prompt Template
每次都要自己写一大段提示 模板 + 变量,一次写多次用
容易拼错、漏掉空格 结构清晰,可读可维护
难以批量跑不同参数 一个 for 循环就能批量生成

2. 安装与准备

复制代码
pip install langchain langchain-deepseek

3. 单条角色消息模板(System / Human / AI)

LangChain 为三种角色各提供独立模板类:

角色 模板类 format 后返回对象
system SystemMessagePromptTemplate SystemMessage
human HumanMessagePromptTemplate HumanMessage
ai AIMessagePromptTemplate AIMessage

3.1. 创建模板

python 复制代码
from langchain_core.prompts import SystemMessagePromptTemplate, HumanMessagePromptTemplate

# 系统消息模板
sys_tmpl = SystemMessagePromptTemplate.from_template(
    "你是一名专业的翻译人员。"
    "请将内容从 {input_lang} 翻译为 {output_lang}"
)

# 用户消息模板
human_tmpl = HumanMessagePromptTemplate.from_template("{text}")

3.2. 查看变量

python 复制代码
print(sys_tmpl.input_variables)
print(human_tmpl.input_variables)

3.3. 填充变量

python 复制代码
sys_msg = sys_tmpl.format(input_lang="Chinese", output_lang="French")
user_msg = human_tmpl.format(text="你好,世界!")

print(sys_msg)
print(user_msg)

3.4. 发给 DeepSeek 模型

python 复制代码
from langchain_deepseek import ChatDeepSeek

model = ChatDeepSeek(model="deepseek-chat", temperature=0)

response = model.invoke([sys_msg, user_msg])
print(response.content)

4. 批量翻译示例

python 复制代码
tasks = [
    {"input_lang": "Chinese", "output_lang": "French", "text": "你好,世界!"},
    {"input_lang": "Japanese", "output_lang": "German", "text": "こんにちは、地球"},
    {"input_lang": "English", "output_lang": "Spanish", "text": "Hello, Universe!"},
]

for t in tasks:
    msgs = [
        sys_tmpl.format(**t),
        human_tmpl.format(text=t["text"])
    ]
    print(model.invoke(msgs).content)

5. 一体化:ChatPromptTemplate

如果想一次性定义多条消息,可用 ChatPromptTemplate.from_messages

python 复制代码
from langchain_core.prompts import ChatPromptTemplate

chat_tmpl = ChatPromptTemplate.from_messages([
    ("system", "你是一名专业的翻译人员。 请将内容从 {input_lang} 翻译为 {output_lang}"),
    ("human", "{text}"),
])

prompt_value = chat_tmpl.invoke({
    "input_lang": "Chinese",
    "output_lang": "French",
    "text": "你好,LangChain!"
})

# prompt_value 已包含所有变量被填充后的消息
response = llm.invoke(prompt_value.to_messages())
print(response.content)

6. 完整代码

python 复制代码
from langchain_core.prompts import SystemMessagePromptTemplate, HumanMessagePromptTemplate
from langchain_core.prompts import ChatPromptTemplate
from langchain_deepseek import ChatDeepSeek

# 系统消息模板
sys_tmpl = SystemMessagePromptTemplate.from_template(
    "你是一名专业的翻译人员。"
    "请将内容从 {input_lang} 翻译为 {output_lang}"
)

# 用户消息模板
human_tmpl = HumanMessagePromptTemplate.from_template("{text}")

# 查看变量
print(sys_tmpl.input_variables)
print(human_tmpl.input_variables)

# 填充变量
sys_msg = sys_tmpl.format(input_lang="Chinese", output_lang="French")
user_msg = human_tmpl.format(text="你好,世界!")

# 打印消息
print(sys_msg)
print(user_msg)

# 发送给Deepseek,默认会读取环境变量DEEPSEEK_API_KEY
model = ChatDeepSeek(model="deepseek-chat", temperature=0)

response = model.invoke([sys_msg, user_msg])
print(response.content)

# 批量翻译
tasks = [
    {"input_lang": "Chinese", "output_lang": "French", "text": "你好,世界!"},
    {"input_lang": "Japanese", "output_lang": "German", "text": "こんにちは、地球"},
    {"input_lang": "English", "output_lang": "Spanish", "text": "Hello, Universe!"},
]

for t in tasks:
    msgs = [
        sys_tmpl.format(**t),
        human_tmpl.format(text=t["text"])
    ]
    print(model.invoke(msgs).content)

# 一体化:ChatPromptTemplate
chat_tmpl = ChatPromptTemplate.from_messages([
    ("system", "你是一名专业的翻译人员。 请将内容从 {input_lang} 翻译为 {output_lang}"),
    ("human", "{text}"),
])

# prompt_value 已包含所有变量被填充后的消息
prompt_value = chat_tmpl.invoke({
    "input_lang": "Chinese",
    "output_lang": "French",
    "text": "你好,LangChain!"
})

response = model.invoke(prompt_value.to_messages())
print(response.content)

7. 小结

  1. 模板类 = 角色 + 字符串 + 变量占位符 {}
  2. from_template → 创建单角色模板
  3. from_messages → 创建多角色模板
  4. format / invoke → 填变量,得消息列表
  5. 用 for 循环即可批量生成不同参数的请求!
相关推荐
国服第二切图仔22 分钟前
Rust开发之使用panic!处理不可恢复错误
开发语言·后端·rust
جيون داد ناالام ميづ35 分钟前
Spring Boot 核心原理(一):基础认知篇
java·spring boot·后端
南囝coding1 小时前
现代Unix命令行工具革命:30个必备替代品完整指南
前端·后端
夏之小星星1 小时前
Springboot结合Vue实现分页功能
vue.js·spring boot·后端
唐僧洗头爱飘柔95271 小时前
【SpringCloud(8)】SpringCloud Stream消息驱动;Stream思想;生产者、消费者搭建
后端·spring·spring cloud·设计思想·stream消息驱动·重复消费问题
韩立学长2 小时前
【开题答辩实录分享】以《自动售货机刷脸支付系统的设计与实现》为例进行答辩实录分享
vue.js·spring boot·后端
cj6341181502 小时前
DBeaver连接本地MySQL、创建数据库表的基础操作
java·后端
程序员爱钓鱼3 小时前
Python编程实战—面向对象与进阶语法 | 属性与方法
后端·python·ipython
程序员爱钓鱼4 小时前
Python编程实战——面向对象与进阶语法 | 构造函数与析构函数
后端·python·ipython
逻极4 小时前
Rust之结构体(Structs):构建自定义数据类型
开发语言·后端·rust