LangChain系列-03. LLM聊天模型

294 阅读2分钟

LangChain系列-03. LLM聊天模型

Chat Models

上面的LLM例子都是使用的text in, text out方式,直接向LLM输入prompt text,让其返回generation text.

此外,LangChain还提供对话模型,它是LLM的一个变种,其底层还是OpenAI这样的LLM,只是其编程接口与text in, text out的风格有所不同,它使用的是chat messages作为输入和输出。

我们先看一下原来的OpenAI模型:

注意上面的代码运行时会有一个warning:

UserWarning: You are trying to use a chat model. This way of initializing it is no longer supported. Instead, please use: from langchain.chat_models import ChatOpenAI

也就是说gpt-3.5-turbo本身是一个对话模型,需要用chat_models的接口来调用。下面是对应的代码:

对话模型接受一个Message的数组作为输入,现在支持的Message类型包括:

  • AIMessage: AI模型输出的Message
  • HumanMessage: 用户输入的Message,往往作为in-context learning的输入,给AI做few-shot
  • SystemMessage: 设定AI模型的role用到的Message
  • ChatMessage: 接受任意角色参数

一般只用到AIMessage、HumanMessage和SystemMessage。下面是一个例子:

可以一次传多组信息

同样可以通过llm_output获取token使用情况:

用PromptTemplate来生成Prompt

可以借助PromptTemplate来生成对话的Prompt。下面是一个例子:想要将一种语言翻译成另一种语言。

将"I love programming." 从英语翻译成意大利语,得到:"Amo programmare."

我也不知道是否正确,为了验证,将其从意大利语再翻译成中文,得到“我喜欢编程。”,这就对了!

上面使用了SystemMessagePromptTemplate、HumanMessagePromptTemplate、ChatPromptTemplate来使用PromptTemplate,还能更直接使用PromptTemplate来创建:

后续会有更详尽的教程来探讨Prompt的生成。

使用LLMChain来对话

可以直接使用LLMChain这个Chain来与LLM对话,它将llm与prompt串联起来。

Streaming返回

可以通过ChatOpenAI的回调出来实现对话流式输出,它会逐个字符输出结果:

未完待续。。。

LangChain系列-02. LLM基础

LangChain系列-01 是什么