当前位置:首页|资讯|AGI|OpenAI

AGI|一文识别LangChain中ChatOpenAI 和OpenAI的区别

作者:神州数码云基地发布时间:2024-05-21

在学习LangChain的过程中,我遇到了一些疑惑。在官方示例中,我发现有些地方使用的是OpenAI模型,而在其他一些地方却使用了ChatOpenAI模型。


我理解,不同的模型可能具有不同的功能和优化点,但具体到OpenAI与ChatOpenAI,它们在性能、特点和使用场景上有何不同呢?


本篇文章为大家分享一下我的研究结果~


作者:廖盈盈| 前端开发工程师

一、LangChain官网的解释

从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提供了一系列强大的机器学习工具和算法,适用于广泛的应用领域,并且能够满足复杂的研究和开发需求。


三、LangChain中ChatOpeAI和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与数字化转型”进入社群交流

版权声明:文章由神州数码武汉云基地团队实践整理输出,转载请注明出处。




Copyright © 2024 aigcdaily.cn  北京智识时代科技有限公司  版权所有  京ICP备2023006237号-1