经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 其他 » 区块链 » 查看文章
langchain中的chat models介绍和使用
来源:cnblogs  作者:flydean  时间:2023/11/10 10:07:33  对本文有异议

简介

之前我们介绍了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中传入对应的消息即可:

  1. from langchain.chat_models import ChatOpenAI
  2. chat = ChatOpenAI()
  3. messages = [
  4. SystemMessage(content="你是一个小说家"),
  5. HumanMessage(content="帮我写篇小说")
  6. ]
  7. chat(messages)

当然和LLM一样,你也可以使用批量模式如下:

  1. batch_messages = [
  2. [
  3. SystemMessage(content="你是一个小说家"),
  4. HumanMessage(content="帮我写篇小说")
  5. ],
  6. [
  7. SystemMessage(content="你是一个诗人"),
  8. HumanMessage(content="帮我写首诗")
  9. ],
  10. ]
  11. result = chat.generate(batch_messages)
  12. result

chat models的高级功能

其实和LLM类似,基本上LLM有的高级功能chat models都有。

比如有用的比如缓存功能,可以缓存之前的输入和输出,避免每次都调用LLM,从而可以减少token的开销。

以InMemoryCache为例子:

  1. from langchain.cache import InMemoryCache
  2. langchain.llm_cache = InMemoryCache()
  3. # 第一次调用,不是用cache
  4. llm.predict("Tell me a joke")
  5. # 第二次调用,使用cache
  6. llm.predict("Tell me a joke")

除了InMemoryCache,langchain还支持FullLLMCache,SQLAlchemyCache,SQLiteCache和RedisCache等等。

同样的,chat models也是支持流模式的:

  1. from langchain.chat_models import ChatOpenAI
  2. from langchain.schema import (
  3. HumanMessage,
  4. )
  5. from langchain.callbacks.streaming_stdout import StreamingStdOutCallbackHandler
  6. chat = ChatOpenAI(streaming=True, callbacks=[StreamingStdOutCallbackHandler()], temperature=0)
  7. resp = chat([HumanMessage(content="帮忙我写首诗")])

只需要在构建ChatOpenAI的时候,把StreamingStdOutCallbackHandler传入callbacks即可。

如果要在chat models中使用PromptTemplate,因为chat models的消息格式跟LLM是不一样的,所以对应的PromptTemplate也是不一样的。

和对应的chat models消息对应的PromptTemplate是ChatPromptTemplate,SystemMessagePromptTemplate,
AIMessagePromptTemplate和HumanMessagePromptTemplate。

我们看下是如何使用prompt template来构建prompt:

  1. from langchain import PromptTemplate
  2. from langchain.prompts.chat import (
  3. ChatPromptTemplate,
  4. SystemMessagePromptTemplate,
  5. AIMessagePromptTemplate,
  6. HumanMessagePromptTemplate,
  7. )
  8. # 构建各种prompt
  9. template="You are a helpful assistant that translates {input_language} to {output_language}."
  10. system_message_prompt = SystemMessagePromptTemplate.from_template(template)
  11. human_template="{text}"
  12. human_message_prompt = HumanMessagePromptTemplate.from_template(human_template)
  13. chat_prompt = ChatPromptTemplate.from_messages([system_message_prompt, human_message_prompt])
  14. # 使用format_prompt把prompt传给chat
  15. 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

最通俗的解读,最深刻的干货,最简洁的教程,众多你不知道的小技巧等你来发现!

欢迎关注我的公众号:「程序那些事」,懂技术,更懂你!

原文链接:https://www.cnblogs.com/flydean/p/17822253.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号