langchain中的chat models介绍和使用
简介
之前我们介绍了LLM模式,这种模式是就是文本输入,然后文本输出。
chat models是基于LLM模式的更加高级的模式。他的输入和输出是格式化的chat messages。
一起来看看如何在langchain中使用caht models吧。
chat models的使用
首先langchain对chat models下支持的模型就少很多了。一方面是可能有些语言模型本身是不支持chat models的。另外一方面langchain也还是在一个发展中的过程,所以有些模型还需要适配。
目前看来langchain支持的chat models有:ChatAnthropic,AzureChatOpenAI,ChatVertexAI,JinaChat,ChatOpenAI和PromptLayerChatOpenAI这几种。
langchain把chat消息分成了这几种:AIMessage, HumanMessage, SystemMessage 和 ChatMessage。
HumanMessage就是用户输入的消息,AIMessage是大语言模型的消息,SystemMessage是系统的消息。ChatMessage是一种可以自定义类型的消息。
在使用的时候,只需要在chat中传入对应的消息即可:
from langchain.chat_models import ChatOpenAI
chat = ChatOpenAI()
messages = [
SystemMessage(content="你是一个小说家"),
HumanMessage(content="帮我写篇小说")
]
chat(messages)
当然和LLM一样,你也可以使用批量模式如下:
batch_messages = [
[
SystemMessage(content="你是一个小说家"),
HumanMessage(content="帮我写篇小说")
],
[
SystemMessage(content="你是一个诗人"),
HumanMessage(content="帮我写首诗")
],
]
result = chat.generate(batch_messages)
result
chat models的高级功能
其实和LLM类似,基本上LLM有的高级功能chat models都有。
比如有用的比如缓存功能,可以缓存之前的输入和输出,避免每次都调用LLM,从而可以减少token的开销。
以InMemoryCache为例子:
from langchain.cache import InMemoryCache
langchain.llm_cache = InMemoryCache()
# 第一次调用,不是用cache
llm.predict("Tell me a joke")
# 第二次调用,使用cache
llm.predict("Tell me a joke")
除了InMemoryCache,langchain还支持FullLLMCache,SQLAlchemyCache,SQLiteCache和RedisCache等等。
同样的,chat models也是支持流模式的:
from langchain.chat_models import ChatOpenAI
from langchain.schema import (
HumanMessage,
)
from langchain.callbacks.streaming_stdout import StreamingStdOutCallbackHandler
chat = ChatOpenAI(streaming=True, callbacks=[StreamingStdOutCallbackHandler()], temperature=0)
resp = chat([HumanMessage(content="帮忙我写首诗")])
只需要在构建ChatOpenAI的时候,把StreamingStdOutCallbackHandler传入callbacks即可。
如果要在chat models中使用PromptTemplate,因为chat models的消息格式跟LLM是不一样的,所以对应的PromptTemplate也是不一样的。
和对应的chat models消息对应的PromptTemplate是ChatPromptTemplate,SystemMessagePromptTemplate,
AIMessagePromptTemplate和HumanMessagePromptTemplate。
我们看下是如何使用prompt template来构建prompt:
from langchain import PromptTemplate
from langchain.prompts.chat import (
ChatPromptTemplate,
SystemMessagePromptTemplate,
AIMessagePromptTemplate,
HumanMessagePromptTemplate,
)
# 构建各种prompt
template="You are a helpful assistant that translates {input_language} to {output_language}."
system_message_prompt = SystemMessagePromptTemplate.from_template(template)
human_template="{text}"
human_message_prompt = HumanMessagePromptTemplate.from_template(human_template)
chat_prompt = ChatPromptTemplate.from_messages([system_message_prompt, human_message_prompt])
# 使用format_prompt把prompt传给chat
chat(chat_prompt.format_prompt(input_language="English", output_language="French", text="I love programming.").to_messages())
chat models下消息构建确实比直接使用LLM要复杂点,大家在使用的时候需要注意。
总结
chat models是LLM的高阶表现形式。如果我们需要进行对话模型的话,就可以考虑使用这个。
更多内容请参考 www.flydean.com
最通俗的解读,最深刻的干货,最简洁的教程,众多你不知道的小技巧等你来发现!
欢迎关注我的公众号:「程序那些事」,懂技术,更懂你!
langchain中的chat models介绍和使用的更多相关文章
- tensorflow中slim模块api介绍
tensorflow中slim模块api介绍 翻译 2017年08月29日 20:13:35 http://blog.csdn.net/guvcolie/article/details/77686 ...
- 模型汇总24 - 深度学习中Attention Mechanism详细介绍:原理、分类及应用
模型汇总24 - 深度学习中Attention Mechanism详细介绍:原理.分类及应用 lqfarmer 深度学习研究员.欢迎扫描头像二维码,获取更多精彩内容. 946 人赞同了该文章 Atte ...
- asp.net中缓存的使用介绍一
asp.net中缓存的使用介绍一 介绍: 在我解释cache管理机制时,首先让我阐明下一个观念:IE下面的数据管理.每个人都会用不同的方法去解决如何在IE在管理数据.有的会提到用状态管理,有的提到的c ...
- lua解析脚本过程中的关键数据结构介绍
在这一篇文章中我先来介绍一下lua解析一个脚本文件时要用到的一些关键的数据结构,为将来的一系列代码分析打下一个良好的基础.在整个过程中,比较重要的几个源码文件分别是:llex.h,lparse.h.l ...
- linux中ldconfig的使用介绍
linux中ldconfig的使用介绍 ldconfig是一个动态链接库管理命令,其目的为了让动态链接库为系统所共享. ldconfig的主要用途: 默认搜寻/lilb和/usr/lib,以及配置文件 ...
- 【js】IE、FF、Chrome浏览器中的JS差异介绍
如何判断浏览器类型 转:http://www.cnblogs.com/carekee/articles/1854674.html 1.通过浏览器特有的对象 如ie 的ActiveXObject ff ...
- Apache中 RewriteRule 规则参数介绍
Apache中 RewriteRule 规则参数介绍 摘要: Apache模块 mod_rewrite 提供了一个基于正则表达式分析器的重写引擎来实时重写URL请求.它支持每个完整规则可以拥有不限数量 ...
- 使用Memcache在PHP中调试方法的介绍及应用
使用Memcache在PHP中调试方法的介绍及应用 如果我们在网络开发中,特别是大访问量的web项目开发中,为了提高响应速度,减少数据查询运算,那么我们都会选用memcahce.首先我们必须要安装,接 ...
- python中multiprocessing.pool函数介绍_正在拉磨_新浪博客
python中multiprocessing.pool函数介绍_正在拉磨_新浪博客 python中multiprocessing.pool函数介绍 (2010-06-10 03:46:5 ...
- 基于Server-Sent Event的简单聊天室 Web 2.0时代,即时通信已经成为必不可少的网站功能,那实现Web即时通信的机制有哪些呢?在这门项目课中我们将一一介绍。最后我们将会实现一个基于Server-Sent Event和Flask简单的在线聊天室。
基于Server-Sent Event的简单聊天室 Web 2.0时代,即时通信已经成为必不可少的网站功能,那实现Web即时通信的机制有哪些呢?在这门项目课中我们将一一介绍.最后我们将会实现一个基于S ...
随机推荐
- 【MAUI Blazor踩坑日记】3.Windows标题栏自定义颜色,运行时改变颜色
目录 修改默认颜色 修改运行时颜色 效果图 MAUI中Windows默认的标题栏颜色是灰色的,有一点丑. 如果去掉默认的标题栏,自己画一个,可能会出现问题,也比较麻烦. 想要自定义默认标题栏的颜色,官 ...
- 2022-1-20 Wpf绑定属性
使用UpdateSourceTrigger绑定属性 后台绑定 通过后台代码绑定 UpdateSourceTrigger
- 【pandas小技巧】--按类型选择列
本篇介绍的是pandas选择列数据的一个小技巧.之前已经介绍了很多选择列数据的方式,比如loc,iloc函数,按列名称选择,按条件选择等等. 这次介绍的是按照列的数据类型来选择列,按类型选择列可以帮助 ...
- pc 移动端 双端切换
实现一个项目匹配多个端,使用vue.config自带的page 实现多个页面切换.官网介绍:https://cli.vuejs.org/zh/config/#pages 在创建的vue项目中找到 vu ...
- [刺客伍六七&黑客] 魔刀千刃
魔刀千刃的特写 诞生之日:2023.7.29 此后会在此记录如何自己写一个自己的python库以及魔刀千刃的维护过程. 魔刀千刃(evilblade) **只攻不防,天下无双** 实战 (和堆攻击帖子 ...
- LVS专访阿里云席明贤,从视频云2.0到“数能生智”的超长畅谈
这是一篇人物专访,源自LiveVideoStack与阿里云视频云负责人席明贤(花名右贤)的对话.面对风云变幻的内外环境,阿里云在视频云赛道是坚定向前的,右贤没有回避多媒体当下行业面临的困难以及业务面临 ...
- DDD实践:实现基于快照机制的变更追踪
王有志,一个分享硬核Java技术的互金摸鱼侠 加入Java人的提桶跑路群:共同富裕的Java人 去年我们在重构项目中落地了DDD,当时花了点时间研究了下阿里巴巴大淘宝技术发布的<阿里技术专家详解 ...
- 【Windows】KMS 激活命令记录
目录 KMS 服务器激活 Office.Visio 推荐使用 office tool plus 部署并配置 KMS 激活 什么是 KMS? KMS 正版与否的区别 总结 KMS 服务器激活 利用 KM ...
- 标题:在Godot中使用Node2D创建自定义的Label
在Godot游戏引擎中,我们经常需要在游戏中显示文本信息.通常,我们可以使用Label节点来实现这一点.但是,在某些情况下,你可能希望更灵活地控制文本的显示和样式.在本篇博客中,我们将学习如何通过使用 ...
- 聊聊HuggingFace Transformer
概述 参见:聊聊HuggingFace 项目组件 一个完整的transformer模型主要包含三部分:Config.Tokenizer.Model. Config 用于配置模型的名称.最终输出的样式. ...