AI菜鸟向前飞 — LangChain系列之三(OpenAI和ChatOpenAI的区别)

前言

在学习OpenAI和框架Langchain的过程中,当时有个疑问,为啥有时候出现OpenAI,而有时会出现它:ChatOpenAI,有什么区别呢?还有也多次遇到过Completions、Model等术语,这类资料比较少,后来经过一点点尝试和源代码的走读,慢慢了解了...

这里抽丝剥茧,分享给大家,跟大家共同学习共同进步:)

理论篇

ChatOpenAI

  • 基于消息而不是原始文本
  • 支持的消息类型:AIMessage、HumanMessage、SystemMessage、FunctionMessage和ChatMessage
  • ChatMessage接受任意角色参数 一般情况,只需处理HumanMessage、AIMessage和SystemMessage

OpenAI

  • 基于原始文本
  • 支持的消息类型很简单:就是文本

初步比较

OpenAI

程序

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
from langchain_openai import OpenAI

openai = OpenAI(model_name="gpt-3.5-turbo-instruct", temperature=0)

# 使用模型'gpt-3.5-turbo-instruct'
response = openai.invoke("你好啊, AI小助手") 

print(response)

print("type", type(response))

输出结果

简单分析

  • 支持的Model:gpt-3.5-turbo-instruct, babbage-002, davinci-002
  • 输出结果为str(字符串)

ChatOpenAI

程序

from langchain_openai import ChatOpenAI
from langchain.schema import HumanMessage

chat = ChatOpenAI(temperature=0, model_name="gpt-3.5-turbo")

# using 'gpt-3.5-turbo' model
response = chat.invoke([HumanMessage(content="你好啊, AI小助手")])

print(response)
print("type", type(response))

输出结果

简单分析

  • 支持的Model:gpt-4 and dated model releases, gpt-4-turbo-preview and dated model releases, gpt-4-vision-preview, gpt-4-32k and dated model releases, gpt-3.5-turbo and dated model releases, gpt-3.5-turbo-16k and dated model releases, fine-tuned versions of gpt-3.5-turbo
  • 输出结果为AIMessage

进阶一点

官网介绍

先关注圈中的部分就行,其他看不懂的我后面再给大家一点点介绍,我们一起学: )

混用会咋样

  • OpenAI 用chat completions Model

  • ChatOpenAI 用 completions (Legacy)

不指定Model会怎样

  • OpenAI默认用gpt-3.5-turbo-instruct

  • ChatOpenAI默认gpt-3.5-turbo

看源码就知道为啥了:)

附加:Temperature释义

翻译过来的意思:Temperature取值范围为[0, 2]

  • 当值越小 会产生更一致的输出(例如 0.2)
  • 当值越大 产生更加多样化和创造性的结果

请看官自行试试就知道了:)