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的回调出来实现对话流式输出,它会逐个字符输出结果:
未完待续。。。