(LangChain实战5):LangChain消息模版ChatPromptTemplate

一、ChatPromptTemplate简介

ChatPromptTemplate是LangChain中用于构建对话式提示词的专用模板。相比普通的PromptTemplate,它能更好地处理多角色对话场景,支持System、Human、AI等多种消息类型。

二、创建ChatPromptTemplate的两种方式

2.1 构造方法实例化

python 复制代码
from langchain.prompts import ChatPromptTemplate

# 方式一:使用构造方法
chat_prompt = ChatPromptTemplate(
    messages=[
        ("system", "你是一个AI助手,你的名字叫{name}"),
        ("human", "我的问题是{question}")
    ],
    input_variables=["name", "question"],  # 明确指定输入变量
)

# 简洁写法
chat_prompt = ChatPromptTemplate([
    ("system", "你是一个AI助手,你的名字叫{name}"),
    ("human", "我的问题是{question}")
])

2.2 from_messages()方法

python 复制代码
# 方式二:使用from_messages()方法(推荐)
chat_prompt = ChatPromptTemplate.from_messages([
    ("system", "你是一个AI助手,你的名字叫{name}"),
    ("human", "我的问题是{question}")
])

两种方式对比:

  • 构造方法更灵活,可指定input_variables
  • from_messages()更简洁,自动推断变量

三、调用模板的四种方法

3.1 invoke()方法

python 复制代码
# invoke(): 传入字典,返回ChatPromptValue对象
response = chat_prompt.invoke(
    input={"name": "小智", "question": "1 + 2 + 3 = ?"}
)
print(f"返回类型: {type(response)}")
print(f"内容: {response}")

输出:

复制代码
返回类型: <class 'langchain_core.prompt_values.ChatPromptValue'>
内容: messages=[
    SystemMessage(content='你是一个AI助手,你的名字叫小智'),
    HumanMessage(content='我的问题是1 + 2 + 3 = ?')
]

3.2 format()方法

python 复制代码
# format(): 传入变量值,返回格式化字符串
formatted_text = chat_prompt.format(
    name="小智", 
    question="1 + 2 + 3 = ?"
)
print(f"返回类型: {type(formatted_text)}")
print(f"内容:\n{formatted_text}")

输出:

复制代码
返回类型: <class 'str'>
内容:
System: 你是一个AI助手,你的名字叫小智
Human: 我的问题是1 + 2 + 3 = ?

3.3 format_messages()方法

python 复制代码
# format_messages(): 传入变量值,返回消息列表
messages_list = chat_prompt.format_messages(
    name="小智",
    question="1 + 2 + 3 = ?"
)
print(f"返回类型: {type(messages_list)}")
print(f"内容: {messages_list}")

输出:

复制代码
返回类型: <class 'list'>
内容: [
    SystemMessage(content='你是一个AI助手,你的名字叫小智'),
    HumanMessage(content='我的问题是1 + 2 + 3 = ?')
]

3.4 format_prompt()方法

python 复制代码
# format_prompt(): 传入变量值,返回ChatPromptValue
prompt_value = chat_prompt.format_prompt(
    name="小智",
    question="1 + 2 + 3 = ?"
)
print(f"返回类型: {type(prompt_value)}")
print(f"内容: {prompt_value}")

输出:

复制代码
返回类型: <class 'langchain_core.prompt_values.ChatPromptValue'>
内容: messages=[
    SystemMessage(content='你是一个AI助手,你的名字叫小智'),
    HumanMessage(content='我的问题是1 + 2 + 3 = ?')
]

四、四种方法对比总结

方法 输入类型 输出类型 适用场景
invoke() 字典 ChatPromptValue 链式调用,需要结构化响应
format() 关键字参数 字符串 需要人类可读的文本
format_messages() 关键字参数 消息列表 需要直接传递给聊天模型
format_prompt() 关键字参数 ChatPromptValue 需要中间格式进行后续处理

五、完整版调用模型

python 复制代码
import os
from langchain_core.prompts import ChatPromptTemplate
from langchain_openai import ChatOpenAI
from dotenv import load_dotenv

# 加载env环境变量
load_dotenv()

# 获取对话模型
chat_model = ChatOpenAI(
    # 1.设置模型名称
    model="deepseek-chat",
    # 2.模型接口地址
    base_url= os.getenv('OPENAI_BASE_URL'),
    # 3.模型调用key
    api_key=os.getenv('OPENAI_API_KEY'),
)


# 实例化模版
chat_prompt_template = ChatPromptTemplate.from_messages([
    ("system", "你是一个AI助手,你的名字叫{name}"),
    ("human", "我的问题是{question}"),
])

# 填充模版参数
prompt = chat_prompt_template.invoke(input={"name": "小智", "question": "1 + 2 + 3 = ? "})

# 通过大模型调用提示词,得到响应数据
response = chat_model.invoke(prompt)
print(response)
相关推荐
YOLO数据集集合几秒前
中国城市建筑功能矢量数据集 | 建筑功能 矢量数据 城市规划 空间分析 Shapefile 多分类 GIS数据集8017期
人工智能·分类·数据挖掘·空间分析·城市规划·中国城市建筑·功能矢量
图特摩斯科技1 分钟前
OntoFlow 本体智能平台在污水处理厂的应用
人工智能·abutiongraph·palantir·ontology·ontoflow
动物园猫7 分钟前
行人与骑行者目标检测数据集:2类别、5,000张图像 | 目标检测
人工智能·目标检测·目标跟踪
像风一样自由20209 分钟前
17.Milvus如何完成一次向量相似度检索
人工智能·postgresql·大模型·milvus·rag·智能体
芒果作者13 分钟前
视频审核助手
人工智能·音视频
CODER030414 分钟前
ubuntu24.04:降内核+显卡驱动+cuda+cudnn+pytorch+anaconda+pycharm
人工智能·pytorch·深度学习·自然语言处理·cuda·ubuntu24.04·降内核
Likeadust15 分钟前
多视角直播破局!企业融媒体系统在线高清直播EasyDSS多路同屏技术,重构实时可视化传播体验
人工智能·重构·媒体
万邦科技Lafite15 分钟前
1688一键创建订单付款API操作指南讲解
人工智能·微信·api·电商开放平台·淘宝开放平台·api开放接口
Forerror202616 分钟前
API网关能做什么?MAI Gateway如何赋能企业AI能力
人工智能·maigateway·finapi·企业级ai网关·大模型财务管控
weixin_3077791318 分钟前
Databricks里用PySpark统计指定表和字段中各字段的空值、空字符串或零值比例
运维·数据仓库·python·spark·云计算