前言
上篇文章给大家介绍AI项目检测平台LangSmish以及开源框架Langchain的使用,并且带领大家编写了一个案例。
这篇文章将介绍在Langchain框架中如何定义提示词模板
一、什么是提示词模板?
提示词模板(Prompt Template) 是大语言模型(LLM)应用开发中的核心概念,本质是 预定义的提示结构框架。它通过将 静态文本 与 动态变量 结合,实现标准化、可复用的提示生成机制。它提示词可以是一个简单的问题、一段描述、一个命令或任何形式的文本输入。其核心目的是为模型提供上下文和方向,以确保生成的内容符合用户需求。
二、ChatPromptTemplate.from_messages 方法
1.什么是ChatPromptTemplate.from_messages
LangChain框架中的ChatPromptTemplate是用来构建聊天型提示模板的类,而from_messages是它的一个类方法。ChatPromptTemplate.from_messages 是 LangChain 框架中用于构建 多角色对话模板 的核心方法。它允许你组合不同角色(如系统、用户、AI等)的消息模板,生成符合大语言模型(如 glm-4-flash)输入格式的提示。
2.核心功能
- 多角色消息组合 - 将系统指令、用户输入、AI回复等消息按顺序组合
- 动态变量插入 - 支持通过模板语法插入动态内容
- 格式标准化 - 自动转换为模型需要的消息格式(如 OpenAI 的消息数组)
3.为什么要用ChatPromptTemplate.from_messages 方法
1.角色分离
明确区分系统指令(system
)、用户输入(human
)、AI回复(assistant
)等不同角色消息,避免的混乱
prompt_template = ChatPromptTemplate.from_messages([
('system','请将下面内容翻译成英语'), #系统角色设定
('human',"今天天气很好"), #用户输入
("assistant", "已翻译完成:") # 定义期望的AI回复位置
])
2.上下文序列化
天然支持对话历史管理,通过有序组合消息实现多轮对话逻辑。对话历史这个知识点我将在后续文章中做详细介绍,这里先作为了解
prompt_template = ChatPromptTemplate.from_messages([
('system','当前对话主题:我的姓名张三'), #系统角色设定
MessagesPlaceholder("history"), # 动态插入历史消息
('human',"我叫什么"), #用户输入
])
3.模板变量系统
使用 {variable}
语法实现内容动态化,更灵活
prompt_template = ChatPromptTemplate.from_messages([
('system','请将下面内容翻译成{language}'),
('human',"{text}")
])
#可以动态生成不同语言的提示模板
chain.invoke({'language':'English','text':'今天天气很好'})
4.混合静态动态内容
自由组合固定内容与可变部分,适应复杂业务需求
prompt_template = ChatPromptTemplate.from_messages([
('system','请将下面内容翻译成英语'),
('human',"{text}")
])
#可以动态生成不同语言的提示模板
chain.invoke({'text':'今天天气很好'})
三、代码编写
1.调用AI检测平台和智谱AI
这一步在上一篇文章中已经做了详细了的介绍,这里就不过多进行叙述了
# 调用AI检测平台(langSmith)
import os
os.environ["LANGCHAIN_TRACING_V2"] = "true"
os.environ["LANGCHAIN_API_KEY"] = 'XXXXXXXXX'
os.environ["LANGCHAIN_PROJECT"] = "智谱AI"
#调用智谱AI API
os.environ["ZHIPUAI_API_KEY"] = "XXXXXXXXXXX"
2.调用第三方库
#pip install langchain_community
#调用第三方库
from langchain_core.prompts import ChatPromptTemplate
from langchain_community.chat_models import ChatZhipuAI
from langchain_core.output_parsers import StrOutputParser
3.创建单一链
#调用大语言模型
model = ChatZhipuAI(model_name='glm-4-flash')
# 创建返回的数据解析器
parser = StrOutputParser()
# 定义提示词模板
prompt_template = ChatPromptTemplate.from_messages([
('system','请将下面内容翻译成{language}'),
('human',"{text}")
])
#得到链
chain = prompt_template | model |parser
4.调用链
language = input('请输入你要选择的语言')
text= input('请输入你要翻译的句子')
language = '"'+language+'"'
text = '"'+text+'"'
print(chain.invoke({'language':language,'text':text}))
5.完整代码
# 调用AI检测平台(langSmith)
import os
os.environ["LANGCHAIN_TRACING_V2"] = "true"
os.environ["LANGCHAIN_API_KEY"] = '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'
os.environ["LANGCHAIN_PROJECT"] = "智谱AI"
#调用智谱AI API
os.environ["ZHIPUAI_API_KEY"] = "8a950f79c0674586b210fd9b7b9f5da0.olngH5NqnZyIj6Zo"
#安装第三方库集成
#pip install langchain_community
#调用第三方库
from langchain_core.prompts import ChatPromptTemplate
from langchain_community.chat_models import ChatZhipuAI
from langchain_core.output_parsers import StrOutputParser
#调用大语言模型
model = ChatZhipuAI(model_name='glm-4-flash')
# 创建返回的数据解析器
parser = StrOutputParser()
# 定义提示词模板
prompt_template = ChatPromptTemplate.from_messages([
('system','请将下面内容翻译成{language}'),
('human',"{text}")
])
#得到链
chain = prompt_template | model |parser
#调用chain
language = input('请输入你要选择的语言')
text= input('请输入你要翻译的句子')
language = '"'+language+'"'
text = '"'+text+'"'
print(chain.invoke({'language':language,'text':text}))