LangChain中的OpenAI和ChatOpenAI有什么区别?

Hon*_*iao 14 openai-api langchain

我阅读了 LangChain快速入门

里面有一个demo:

from langchain.llms import OpenAI
from langchain.chat_models import ChatOpenAI

llm = OpenAI()
chat_model = ChatOpenAI()

llm.predict("hi!")
>>> "Hi"

chat_model.predict("hi!")
>>> "Hi"
Run Code Online (Sandbox Code Playgroud)

我搜索了文档的其余部分以及在线搜索,但没有找到任何有关 OpenAI 和 ChatOpenAI 之间差异的信息。

基于from langchain.llms import OpenAI,OpenAI 是一个大型语言模型(LLM),也与聊天相关。

那么 OpenAI 是否更通用,而 ChatOpenAI 更专注于聊天呢?

OpenAI浪链中的class和class有什么区别ChatOpenAI?有人可以澄清一下吗?

Hon*_*iao 17

长话短说

\n

根据我的研究,

\n
    \n
  • OpenAI类包括更通用的机器学习任务属性,例如frequency_penalty, presence_penalty, logit_bias, allowed_special, disallowed_special,best_of

    \n
  • \n
  • ChatOpenAI类提供了更多与聊天相关的方法,例如completion_with_retryget_num_tokens_from_messages以便在构建聊天机器人相关应用程序时更加用户友好。

    \n
  • \n
\n
\n

类继承

\n

在查看源代码后,这就是我的发现。

\n

OpenAI下面列出了和类的类继承ChatOpenAI,以及它们各自的类属性和方法。

\n

开放人工智能

\n

OpenAI \xe2\x86\x90 BaseOpenAI \xe2\x86\x90 BaseLLM \xe2\x86\x90 BaseLanguageModel

\n

开放人工智能

\n

聊天OpenAI

\n

ChatOpenAI \xe2\x86\x90 BaseChatModel \xe2\x86\x90 BaseLanguageModel

\n

聊天OpenAI

\n

比较

\n

让我们开始比较,从第四列移动到第一列。

\n

第四纵队

\n

这两个类最终都继承自基类BaseLanguageModel

\n

第三栏

\n

BaseLLMBaseChatModel非常相似但略有不同:

\n
    \n
  • 对于 OpenAI 来说BaseLLM,它包括额外的方法:

    \n
      \n
    • batch(self, inputs, config=None, max_concurrency=None, **kwargs)
    • \n
    • abatch (self, inputs, config=None, max_concurrency=None,**kwargs)
    • \n
    \n
  • \n
  • 对于 ChatOpenAI 来说BaseChatModel,它包含一个额外的方法:

    \n
      \n
    • _combine_llm_outputs(self, llm_outputs)
    • \n
    \n
  • \n
\n

第二纵队

\n

第二列包含BaseOpenAI类,它的存在主要是由于存在更高级别的类OpenAIAzureOpenAI。然而,它们都共享相同的类属性和方法。

\n

第一栏

\n

在顶层类(第一列):

\n
    \n
  • OpenAI类包括更通用的机器学习任务属性,例如frequency_penalty, presence_penalty, logit_bias, allowed_special, disallowed_special,best_of

    \n
  • \n
  • ChatOpenAI类提供了更多与聊天相关的方法,例如completion_with_retryget_num_tokens_from_messages以便在构建聊天机器人相关应用程序时更加用户友好。

    \n
  • \n
\n