当前位置: 首页 > news >正文

LangChain 中 ChatPromptTemplate 的几种使用方式

0 ChatPromptTemplate作用

ChatPromptTemplate是创建 聊天消息列表 的提示模板。它比普通 PromptTemplate 更适合处理多角 色、多轮次的对话场景。

1 两种实例化方式

ChatPromptTemplate 有两种实例化方式,一个是使用ChatPromptTemplate的构造方法,另一个是使用其from_messages()方法,两种方式实例化效果一样,单纯写法不同。

1.1 构造方法实例化

from langchain_core.prompts import ChatPromptTemplateprompt_template = ChatPromptTemplate([("system", "你是私人助理小贝"),("human", "你是谁?")
])prompt = prompt_template.invoke({})
print(prompt)

1.2 from_messages()方法实例化

from langchain_core.prompts import ChatPromptTemplateprompt_template = ChatPromptTemplate.from_messages([("system", "你是私人助理小贝"),("human", "你是谁?")
])
prompt = prompt_template.invoke({})print(prompt)

2 模版的调用方式

2.1 调用方式的区别对比

调用ChatPromptTemplate共有四种方式,分别是invoke() 、 format() 、 format_messages() 、 format_prompt(),它们的主要区别是返回的类型不同。

方式返回类型参数类型
invokeChatPromptValue字典
formatstr变量
invokelist变量
invokeChatPromptValue变量

2.2 代码示例

from langchain_core.prompts import ChatPromptTemplateprompt_template = ChatPromptTemplate([("system", "你是私人助理小贝"),("human", "你是谁?")
])prompt_by_invoke = prompt_template.invoke({})
prompt_by_format = prompt_template.format()
prompt_by_format_messages = prompt_template.format_messages()
prompt_by_format_prompt = prompt_template.format_prompt()print("---------------prompt_by_invoke")
print(type(prompt_by_invoke))
print(prompt_by_invoke)print("---------------prompt_by_format")
print(type(prompt_by_format))
print(prompt_by_format)print("---------------prompt_by_format_messages")
print(type(prompt_by_format_messages))
print(prompt_by_format_messages)print("---------------prompt_by_format_prompt")
print(type(prompt_by_format_prompt))
print(prompt_by_format_prompt)

2.3 运行结果

请添加图片描述

2.4 小结和使用建议

ChatPromptValue可以调用to_messages()和to_string()将ChatPromptValue转换成消息list类型和字符串类型,所以直接使用invoke()进行调用即可

2 模版的参数类型

上述示例仅使用了元祖的方式构建ChatPromptTemplate列表,实际上ChatPromptTemplate列表的元素可以是多种参数类型,以下将探究tuplestrdictMessageBaseChatPromptTemplate五种类型

2.1 tuple

prompt_template = ChatPromptTemplate([("system", "你是私人助理小贝"),("human", "你是谁?")
])

2.2 str

注意,此种方式创建的消息,只会默认为是HumanMessage,所以不推荐

prompt_template = ChatPromptTemplate(["你好"
])

2.3 dict

prompt_template = ChatPromptTemplate([{"role":"system", "content": "你是私人助理小贝"},{"role":"human", "content": "你是谁?"}
])

2.4 Message

prompt_template = ChatPromptTemplate([SystemMessage("你是私人助理小贝"),HumanMessage("你是谁?")
])

2.5 BaseChatPromptTemplate

使用 BaseChatPromptTemplate,可以理解为ChatPromptTemplate里嵌套了 ChatPromptTemplate。

system_prompt_template = ChatPromptTemplate([("system", "你是私人助理小贝")])
human_prompt_template = ChatPromptTemplate([("human", "你是谁?")])prompt_template = ChatPromptTemplate([system_prompt_template,human_prompt_template
])

3 结合大模型使用模板

3.1 代码

import os
import dotenv
from langchain_core.prompts import PromptTemplate, ChatPromptTemplate
from langchain_openai import ChatOpenAIdotenv.load_dotenv()os.environ["OPENAI_BASE_URL"] = os.getenv("QWEN_BASE_URL")
os.environ["OPENAI_API_KEY"] = os.getenv("QWEN_API_KEY")# 获取对话模型
chat_model = ChatOpenAI(model="qwen-plus",streaming=True
)prompt_template = ChatPromptTemplate([("system", "你是私人助理小贝"),("human", "我是Jevon"),("ai", "你好Jevon"),("human", "我是谁?")
])prompt = prompt_template.invoke({})
# 调用模型
response = chat_model.stream(prompt)# 流式输出
for chunk in response:print(chunk.content, end='', flush=True)

3.2 运行效果

因为消息模版的存在,使得大模型有了记忆力
请添加图片描述

4 MessagesPlaceholder

4.1 概念以及应用场景

当你不确定消息提示模板使用什么角色,或者希望在格式化过程中 插入消息列表 时,该怎么办? 这就需 要使用 MessagesPlaceholder,负责在特定位置添加消息列表。即一个占位符,后续调用消息模板时可以将消息列表填充进去。

使用场景:多轮对话系统存储历史消息以及Agent的中间步骤处理此功能非常有用。

4.2 代码示例

import os
import dotenv
from langchain_core.prompts import PromptTemplate, ChatPromptTemplate, MessagesPlaceholder
from langchain_openai import ChatOpenAIdotenv.load_dotenv()os.environ["OPENAI_BASE_URL"] = os.getenv("QWEN_BASE_URL")
os.environ["OPENAI_API_KEY"] = os.getenv("QWEN_API_KEY")# 获取对话模型
chat_model = ChatOpenAI(model="qwen-plus",streaming=True
)prompt_template = ChatPromptTemplate([("system", "你是私人助理小贝"),MessagesPlaceholder('history'),("human", "{question}")
])prompt = prompt_template.invoke({"history":[("human", "我是Jevon"),("ai", "你好Jevon")],"question": "我是谁?"
})
# 调用模型
response = chat_model.stream(prompt)# 流式输出
for chunk in response:print(chunk.content, end='', flush=True)

4.3 运行效果

请添加图片描述

5 小结

ChatPromptTemplate的写法很多,但是有很多都是得到同一个效果,就显得有点鸡肋,目前唯一感觉有点用的就是MessagesPlaceholder,这个对后续大模型记忆有帮助。感觉ChatPromptTemplate的构造和参数大概有个印象即可,茴字的写法太多了,能看懂他人代码即可。

http://www.dtcms.com/a/586387.html

相关文章:

  • 怎么创建企业网站同源大厦 网站建设
  • 3网合一网站天眼企业查询系统官网
  • 网站建设人工智能开发怎样建个人网页免费
  • 1.2.3AOP的底层原理
  • Android 屏幕旋转流程
  • 简述电子商务网站的建站流程佛山app开发公司
  • 精准突破 0.5mm 透明玻璃测量瓶颈 —— 泓川科技激光位移传感器的技术革新与成本优势
  • C++笔记-24-文件读写操作
  • 做网站需要会哪些计算机语言net源码的网站建设步骤
  • 做网站一般都是织梦网站 展示板
  • 设计配色推荐的网站广州深圳外贸公司
  • 怎样做建网站做淘客无锡定制网站制作公司
  • 北京网站建设 奥美通全网营销个人网页设计html代码实现
  • 网站开发多少人下载百度app到手机上
  • 网站进入沙盒期有哪些竞价网站
  • 朝阳市网站制作随州有哪些网站建设的公司
  • 雪球网 MD5_1038 逆向算法分析
  • 车辆类型特征智能识别
  • [法兰西公学院] Esterel A到Z (Gérard Berry 2018)
  • 液压矫平机:给金属板材“舒筋活血”的科学
  • 如何用图片文字做网站地图定位网站开发
  • 简述网站开发的三层架构互联网行业前景如何
  • 蛋白质核转位图像识别与分析系统
  • Javascript函数之函数的返回值?
  • 【常见的Markdown 图标语法】
  • 微网站微名片在线制作logo图片
  • 临沂住房和城乡建设局网站打不开江苏建筑工程招标信息网
  • 【Jenkins】Jenkins配置从节点 - Launch Agent
  • 网站开发程序都有什么免费的网站怎么建
  • asp.net企业网站建设建筑网片厂家