返回顶部
热门问答 更多热门问答
技术文章 更多技术文章

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

[复制链接]
链载Ai 显示全部楼层 发表于 昨天 15:13 |阅读模式 打印 上一主题 下一主题

Langchain中ChatOpenAI和OpenAI 的区别

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


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


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


作者

廖盈盈| 前端开发工程师

学无止境。加油,奥力给~


Part1

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属于聊天模型,其输入是消息列表,输出是消息列表。



Part2

两者的选择


知道了LLMs和聊天模型的区别,那我们在实际使用的过程中该怎么选择呢?


ChatOpenAI侧重于模型被给与一组消息来构成会话,模型基于这组会话会进行后续的响应。OpenAI是基于问与答,没有会话的概念。


选择ChatOpenAI的情况是需要构建一个能够进行实时对话交流的聊天机器人,用于与用户进行自然语言交互和提供实时的响应。这种情况下,ChatOpenAI可以用于开发聊天机器人、虚拟助手或客服系统等应用。


选择OpenAI的情况是需要进行通用的机器学习和人工智能研究,包括开发和训练各种类型的机器学习模型,如图像识别、自然语言处理、语音识别等。OpenAI提供了一系列强大的机器学习工具和算法,适用于广泛的应用领域,并且能够满足复杂的研究和开发需求。



Part3

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


@staticmethod
defmodelname_to_contextsize(modelname: str)-> int:
...
model_token_mapping = {
"gpt-4": 8192,
"gpt-4-0314": 8192,
"gpt-4-0613": 8192,
"gpt-4-32k": 32768,
"gpt-4-32k-0314": 32768,
"gpt-4-32k-0613": 32768,
"gpt-3.5-turbo": 4096,
"gpt-3.5-turbo-0301": 4096,
"gpt-3.5-turbo-0613": 4096,
"gpt-3.5-turbo-16k": 16385,
"gpt-3.5-turbo-16k-0613": 16385,
"gpt-3.5-turbo-instruct": 4096,
"text-ada-001": 2049,
"ada": 2049,
"text-babbage-001": 2040,
"babbage": 2049,
"text-curie-001": 2049,
"curie": 2049,
"davinci": 2049,
"text-davinci-003": 4097,
"text-davinci-002": 4097,
"code-davinci-002": 8001,
"code-davinci-001": 8001,
"code-cushman-002": 2048,
"code-cushman-001": 2048,
}

# handling finetuned models
if"ft-"inmodelname:
modelname = modelname.split(":")[0]

context_size = model_token_mapping.get(modelname, None)

ifcontext_size isNone:
raiseValueError(
f"Unknown model: {modelname}. Please provide a valid OpenAI model name."
"Known models are: "+ ", ".join(model_token_mapping.keys())
)

returncontext_size


OpenAI类的modelname_to_contextsize方法列举了LangChian中OpenAI支持的模型,在其构造方法中可以看到这些模型不是所有的都能支持。


def__new__(cls, **data: Any)-> Union[OpenAIChat, BaseOpenAI]:# type: ignore
"""Initialize the OpenAI object."""
model_name = data.get("model_name", "")
if(
model_name.startswith("gpt-3.5-turbo") ormodel_name.startswith("gpt-4")
) and"-instruct"notinmodel_name:
warnings.warn(
"You are trying to use a chat model. This way of initializing it is "
"no longer supported. Instead, please use: "
"`from langchain_community.chat_models import ChatOpenAI`"
)
returnOpenAIChat(**data)
returnsuper().__new__(cls)


在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



Part4

使用方法


直接官方例子:


(一)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 包:


pipinstallopenai


访问 API 需要 API 密钥,您可以通过创建帐户并前往此处获取该密钥。一旦我们有了密钥,我们就需要通过运行以下命令将其设置为环境变量:


exportOPENAI_API_KEY="..."


如果您不想设置环境变量,可以openai_api_key在启动 OpenAI LLM 类时直接通过命名参数传递密钥:


fromlangchain_openai importOpenAI

llm = OpenAI(openai_api_key="...")


LLMs 实现Runnable 接口,这是LangChain 表达式语言 (LCEL)的基本构建块。这意味着它们支持invoke、 ainvoke、stream、astream、batch、abatch、astream_log调用。


LLM 接受字符串作为输入,或可以强制为字符串提示的对象,包括List[BaseMessage]和PromptValue。


llm.invoke(
"What are some theories about the relationship between unemployment and inflation?"
)


'\n\n1.ThePhillipsCurveTheory:Thissuggeststhatthereisaninverserelationshipbetweenunemploymentandinflation,meaningthatwhenunemploymentislow,inflationwillbehigher,andwhenunemploymentishigh,inflationwillbelower.\n\n2.TheMonetaristTheory:Thistheorysuggeststhattherelationshipbetweenunemploymentandinflationisweak,andthatchangesinthemoneysupplyaremoreimportantindetermininginflation.\n\n3.TheResourceUtilizationTheory:Thissuggeststhatwhenunemploymentislow,firmsareabletoraisewagesandpricesinordertotakeadvantageoftheincreaseddemandfortheirproductsandservices.Thisleadstohigherinflation.'


(二)ChatOpenAI 的使用:


官方链接:https://python.langchain.com/docs/modules/model_io/chat/quick_start


聊天模型是语言模型的变体。虽然聊天模型在底层使用语言模型,但它们使用的接口有点不同。聊天模型没有使用“文本输入、文本输出”的接口,而是使用“聊天消息”作为输入和输出的接口。


与OpenAI一样,ChatOpenAI类也是集成OpenAI官方的模型,所以一样需要一样的密钥。


同样如果不想设置环境变量,可以openai_api_key在启动 OpenAI LLM 类时直接通过命名参数传递密钥:


fromlangchain_openai importChatOpenAI

chat = ChatOpenAI(openai_api_key="...")


聊天模型界面基于消息而不是原始文本。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。


from langchain_core.messagesimport HumanMessage, SystemMessage

messages= [
SystemMessage(content="You're a helpful assistant"),
HumanMessage(content="What is the purpose of model regularization?"),
]


chat.invoke(messages)


AIMessage(content="Thepurposeofmodelregularizationistopreventoverfittinginmachinelearningmodels.Overfittingoccurswhenamodelbecomestoocomplexandstartstofitthenoiseinthetrainingdata,leadingtopoorgeneralizationonunseendata.Regularizationtechniquesintroduceadditionalconstraintsorpenaltiestothemodel'sobjectivefunction,discouragingitfrombecomingoverlycomplexandpromotingsimplerandmoregeneralizablemodels.Regularizationhelpstostrikeabalancebetweenfittingthetrainingdatawellandavoidingoverfitting,leadingtobetterperformanceonnew,unseendata.")



Part5

其他


在探索LangChian的ChatOpenAI 和 OpenAI这两个类时,了解到这两个类使用OpenAI接口不一样, OpenAI使用的是/v1/completions接口,而ChatOpenAI 使用的是/v1/chat/completions。


详细的可以查看OpenAI官网:


https://platform.openai.com/docs/models/model-endpoint-compatibility


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

链载AI是专业的生成式人工智能教程平台。提供Stable Diffusion、Midjourney AI绘画教程,Suno AI音乐生成指南,以及Runway、Pika等AI视频制作与动画生成实战案例。从提示词编写到参数调整,手把手助您从入门到精通。
  • 官方手机版

  • 微信公众号

  • 商务合作

  • Powered by Discuz! X3.5 | Copyright © 2025-2025. | 链载Ai
  • 桂ICP备2024021734号 | 营业执照 | |广西笔趣文化传媒有限公司|| QQ