在学习LangChain的过程中,我遇到了一些疑惑。在官方示例中,我发现有些地方使用的是OpenAI模型,而在其他一些地方却使用了ChatOpenAI模型。
我理解,不同的模型可能具有不同的功能和优化点,但具体到OpenAI与ChatOpenAI,它们在性能、特点和使用场景上有何不同呢?
本篇文章为大家分享一下我的研究结果~
作者:廖盈盈| 前端开发工程师
从LangChain的官网上了解了粗略的概念的,就是OpenAI是属于LLMs,而ChatOpenAI是属于聊天模型。所以要理解ChatOpenAI 和 OpenAI 的区别,就得先知道LLMs和聊天模型的区别。那接下来就打开官网看看这俩到底是什么。
在 LangChain 官网和中文网上的相关解释:
·Models
There are two main types of models that LangChain integrates with: LLMs and Chat Models. These are defined by their input and output types.
(LangChain 集成的模型主要有两种类型:LLM 和聊天模型。它们由它们的输入和输出类型定义。)
·LLMs
LLMs in LangChain refer to pure text completion models. The APIs they wrap take a string prompt as input and output a string completion. OpenAI’s GPT-3 is implemented as an LLM.
(LangChain中的LLMs指的是纯文本补全模型。它们包装的 API 将字符串提示作为输入并输出字符串完成。OpenAI 的 GPT-3 是作为LLM实施的。)
·Chat Models
Chat models are often backed by LLMs but tuned specifically for having conversations. Crucially, their provider APIs use a different interface than pure text completion models. Instead of a single string, they take a list of chat messages as input and they return an AI message as output…
(聊天模型通常由LLMs支持,但专门针对对话进行了调整。至关重要的是,他们的提供商 API 使用与纯文本完成模型不同的接口。他们不是使用单个字符串,而是将聊天消息列表作为输入,并返回 AI 消息作为输出…)
来源:
https://python.langchain.com/docs/modules/model_io/concepts
中文网:
LangChain中有两种类型的语言模型,称为:
LLMs: 这是一个以字符串作为输入并返回字符串的语言模型
ChatModels: 这是一个以消息列表作为输入并返回消息的语言模型
LLMs的输入/输出简单易懂 - 字符串。但是ChatModels呢?那里的输入是一个ChatMessage列表,输出是一个单独的ChatMessage。一个ChatMessage具有两个必需的组件:
content: 这是消息的内容。
role: 这是ChatMessage来自的实体的角色。
来源:
https://python.langchain.com.cn/docs/get_started/quickstart
简单的总结一下上边的内容:
OpenAI属于LLMs,其输入是字符串,输出也是字符串;
ChatOpenAI属于聊天模型,其输入是消息列表,输出是消息列表。
知道了LLMs和聊天模型的区别,那我们在实际使用的过程中该怎么选择呢?
ChatOpenAI侧重于模型被给与一组消息来构成会话,模型基于这组会话会进行后续的响应。OpenAI是基于问与答,没有会话的概念。
选择ChatOpenAI的情况是需要构建一个能够进行实时对话交流的聊天机器人,用于与用户进行自然语言交互和提供实时的响应。这种情况下,ChatOpenAI可以用于开发聊天机器人、虚拟助手或客服系统等应用。
选择OpenAI的情况是需要进行通用的机器学习和人工智能研究,包括开发和训练各种类型的机器学习模型,如图像识别、自然语言处理、语音识别等。OpenAI提供了一系列强大的机器学习工具和算法,适用于广泛的应用领域,并且能够满足复杂的研究和开发需求。
要研究LangChian的ChatOpenAI 和 OpenAI支持的模型。
当然,最直接的探索ChatOpenAI 和 OpenAI和区别方法是查看源码。我们这里打开LangChian中的ChatOpenAI 和 OpenAI的源码来看看这两个支持的模型:
在LangChian封装的OpenAI源码中,OpenAI继承一个名为BaseOpenAI的类
在BaseOpenAI中列举了OpenAI的模型,具体的每个模型可以做什么事情可以查看OpenAI官网:https://platform.openai.com/docs/models/overview
OpenAI类的modelname_to_contextsize方法列举了LangChian中OpenAI支持的模型,在其构造方法中可以看到这些模型不是所有的都能支持。
在BaseOpenAI的___new___方法中可以看到以模型名“gpt-3.5-turbo”和“gpt-4”开头且不包含“-instruct”的是是chat模型。也就是OpenAI中列举的模型中以gpt-3.5-turbo和gpt-4开头是ChatOpenAI 支持的模型,其余都是OpenAI支持的模型。
OpenAI支持的模型:
gpt-3.5-turbo-instruct
text-ada-001
ada
text-babbage-001
babbage
text-curie-001
curie davinci
text-davinci-003
text-davinci-002
code-davinci-002
code-davinci-001
code-cushman-002
code-cushman-001
当然,LangChian可能会更新所支持的OpenAI模型,具体的以最新LangChian源码为准。
ChatOpenAI支持的模型:
gpt-4
gpt-4-0314
gpt-4-0613
gpt-4-32k
gpt-4-32k-0314
gpt-4-32k-0613
gpt-3.5-turbo
gpt-3.5-turbo-0301
gpt-3.5-turbo-0613
gpt-3.5-turbo-16k
gpt-3.5-turbo-16k-0613
直接官方例子:
(一)OpenAI 的使用:
官方链接:https://python.langchain.com/docs/modules/model_io/llms/quick_start
大型语言模型(LLMs)是LangChain的核心组件。LangChain不为自己的LLMs提供服务,而是提供一个标准接口来与许多不同的LLMs进行交互。
有很多 LLM 提供商(OpenAI、Cohere、Hugging Face 等)——LLM 类为所有提供商提供标准接口。
安装 OpenAI Python 包:
访问 API 需要 API 密钥,您可以通过创建帐户并前往此处获取该密钥。一旦我们有了密钥,我们就需要通过运行以下命令将其设置为环境变量:
如果您不想设置环境变量,可以openai_api_key在启动 OpenAI LLM 类时直接通过命名参数传递密钥:
LLMs 实现Runnable 接口,这是LangChain 表达式语言 (LCEL)的基本构建块。这意味着它们支持invoke、 ainvoke、stream、astream、batch、abatch、astream_log调用。
LLM 接受字符串作为输入,或可以强制为字符串提示的对象,包括List[BaseMessage]和PromptValue。
(二)ChatOpenAI 的使用:
官方链接:https://python.langchain.com/docs/modules/model_io/chat/quick_start
聊天模型是语言模型的变体。虽然聊天模型在底层使用语言模型,但它们使用的接口有点不同。聊天模型没有使用“文本输入、文本输出”的接口,而是使用“聊天消息”作为输入和输出的接口。
与OpenAI一样,ChatOpenAI类也是集成OpenAI官方的模型,所以一样需要一样的密钥。
同样如果不想设置环境变量,可以openai_api_key在启动 OpenAI LLM 类时直接通过命名参数传递密钥:
聊天模型界面基于消息而不是原始文本。LangChain目前支持的消息类型有AIMessage, HumanMessage, SystemMessage,FunctionMessage和ChatMessage- ChatMessage接受任意角色参数。大多数时候,您只需处理HumanMessage、AIMessage和 SystemMessage
聊天模型实现了Runnable 接口,这是LangChain 表达式语言(LCEL)的基本构建块。这意味着它们支持invoke、 ainvoke、stream、astream、batch、abatch、astream_log调用。
聊天模型接受List[BaseMessage]作为输入或可以强制为消息的对象,包括str(转换为HumanMessage)和PromptValue。
在探索LangChian的ChatOpenAI 和 OpenAI这两个类时,了解到这两个类使用OpenAI接口不一样, OpenAI使用的是/v1/completions接口,而ChatOpenAI 使用的是/v1/chat/completions。
详细的可以查看OpenAI官网:
https://platform.openai.com/docs/models/model-endpoint-compatibility
更多AI小知识欢迎关注“神州数码云基地”公众号,回复“AI与数字化转型”进入社群交流
版权声明:文章由神州数码武汉云基地团队实践整理输出,转载请注明出处。