LangChain OpenAI vs. ChatOpenAI

# OpenAI とChatOpenAIの比較

||OpenAI|ChatOpenAI|
|---|---|---|
|API|`/v1/completions`|`/v1/chat/completions`|
|モデル|`gpt-3.5-turbo-instruct`, `babbage-002`, `davinci-002`|`gpt-4`, `gpt-4o`, etc|


# OpenAIとChatOpenAIの違い

# OpenAI

API: `/v1/completions (Legacy)	`

## 例

`gpt-3.5-turbo-instruct`:

```py
from langchain_openai import OpenAI
openai = OpenAI(model_name="gpt-3.5-turbo-instruct")
openai.invoke("東京の人口は")
'1,386万人となり、22年ぶりに1,400万人を下回ると予測されています。\n\n東京都の人口は、2020年7月1日現在で、約13,963,000人と推計されています。これは、前年同日比で約1.1万人の減少となっており、人口減少が続いています。また、東京都では住民登録人口が減少する一方で、外国人の登録数が増加しているため、実質的な人口減少はさらに大きくなっています。\n\n東京都の人口は、1965年から2000年までの35年間で約260万人増加し、ピーク時の1995年には約1,336万人となりました。しかし、その後は急速に減少し、2020年には22年ぶりに1,400万人'
```

`gpt-4`: ❌ (`This is a chat model and not supported in the v1/completions endpoint. Did you mean to use v1/chat/completions?`)

[OpenAI](https://api.python.langchain.com/en/latest/llms/langchain_openai.llms.base.OpenAI.html#langchain_openai.llms.base.OpenAI) > [BaseOpenAI](https://api.python.langchain.com/en/latest/llms/langchain_openai.llms.base.BaseOpenAI.html#langchain_openai.llms.base.BaseOpenAI) > [BaseLLM](https://api.python.langchain.com/en/latest/language_models/langchain_core.language_models.llms.BaseLLM.html#langchain_core.language_models.llms.BaseLLM) > [BaseLanguageModel](https://api.python.langchain.com/en/latest/language_models/langchain_core.language_models.base.BaseLanguageModel.html#langchain_core.language_models.base.BaseLanguageModel)

# ChatOpenAI

API: `/v1/chat/completions`

[openai/resources/chat/completions.py] の Completions.

`gpt-3.5-turbo-instruct`: ❌ (`This is not a chat model and thus not supported in the v1/chat/completions endpoint. Did you mean to use v1/completions?`)

`gpt-3.5-turbo`: 2020年時点
```py
from langchain_openai import ChatOpenAI
chat = ChatOpenAI(model_name="gpt-3.5-turbo")
chat.invoke("東京の人口は")
AIMessage(content='2020年のデータによると、約1390万人です。', additional_kwargs={'refusal': None}, response_metadata={'token_usage': {'completion_tokens': 20, 'prompt_tokens': 14, 'total_tokens': 34}, 'model_name': 'gpt-3.5-turbo-0125', 'system_fingerprint': None, 'finish_reason': 'stop', 'logprobs': None}, id='run-d103a5f8-6f82-4f7b-b1e8-914393cb1391-0', usage_metadata={'input_tokens': 14, 'output_tokens': 20, 'total_tokens': 34})
```

`gpt-4`: 2021年時点

```py
chat = ChatOpenAI(model_name="gpt-4")
chat.invoke("東京の人口は")
AIMessage(content='2021年時点で約1億4千万人です。ただし、これは都市圏全体の人口で、23区内だけの人口は約940万人です。', additional_kwargs={'refusal': None}, response_metadata={'token_usage': {'completion_tokens': 51, 'prompt_tokens': 14, 'total_tokens': 65}, 'model_name': 'gpt-4-0613', 'system_fingerprint': None, 'finish_reason': 'stop', 'logprobs': None}, id='run-6d4ea4ba-983e-4a54-8991-3afa04337152-0', usage_metadata={'input_tokens': 14, 'output_tokens': 51, 'total_tokens': 65})
```

`gpt-4o`: 2023年時点

```py
chat = ChatOpenAI(model_name="gpt-4o")
chat.invoke("東京の人口は")
AIMessage(content='2023年現在、東京の人口は約1,400万人を超えています。ただし、これは東京都全体の人口であり、23区だけの人口は約960万人です。人口は常に変動しているため、最新のデータを確認する場合は東京都の公式統計資料や最新の国勢調査データを参照することをお勧めします。', additional_kwargs={'refusal': None}, response_metadata={'token_usage': {'completion_tokens': 87, 'prompt_tokens': 11, 'total_tokens': 98}, 'model_name': 'gpt-4o-2024-05-13', 'system_fingerprint': 'fp_df84d6bd70', 'finish_reason': 'stop', 'logprobs': None}, id='run-23e1c532-3669-4897-9fb2-3438e7752166-0', usage_metadata={'input_tokens': 11, 'output_tokens': 87, 'total_tokens': 98})
```

`gpt-4o-mini`: 2023年時点

```py
chat = ChatOpenAI(model_name="gpt-4o-mini")
chat.invoke("東京の人口は")
AIMessage(content='2023年の時点で、東京都の人口は約1400万人程度とされています。ただし、人口は常に変動しているため、最新の情報を確認することをお勧めします。東京都の公式ウェブサイトや統計局のデータなどで最新の人口統計を確認することができます。', additional_kwargs={'refusal': None}, response_metadata={'token_usage': {'completion_tokens': 73, 'prompt_tokens': 11, 'total_tokens': 84}, 'model_name': 'gpt-4o-mini-2024-07-18', 'system_fingerprint': 'fp_48196bc67a', 'finish_reason': 'stop', 'logprobs': None}, id='run-4b052c88-2b86-4310-ac8b-715f05f643f2-0', usage_metadata={'input_tokens': 11, 'output_tokens': 73, 'total_tokens': 84})
```


[ChatOpenAI](https://api.python.langchain.com/en/latest/chat_models/langchain_openai.chat_models.base.ChatOpenAI.html#langchain_openai.chat_models.base.ChatOpenAI) > [BaseChatOpenAI](https://api.python.langchain.com/en/latest/chat_models/langchain_openai.chat_models.base.BaseChatOpenAI.html#langchain_openai.chat_models.base.BaseChatOpenAI) > [BaseChatModel](https://api.python.langchain.com/en/latest/language_models/langchain_core.language_models.chat_models.BaseChatModel.html) > [BaseLanguageModel](https://api.python.langchain.com/en/latest/language_models/langchain_core.language_models.base.BaseLanguageModel.html#langchain_core.language_models.base.BaseLanguageModel)

# Ref

- https://platform.openai.com/docs/models/model-endpoint-compatibility
- https://platform.openai.com/docs/guides/text-generation/chat-completions-api