チャットモデル
チャットモデルは言語モデルの一種です。チャットモデルは基本的には言語モデル(LLM)を基礎レベルで使用していますが、その公開インターフェースはやや異なります。"入力テキスト、出力テキスト" のためのAPIを公開する代わりに、チャットメッセージを入力として受け取り、出力として返します。チャットモデルの全体的なインタラクションプロセスは、チャットメッセージのやり取りと同様です。
チャットモデルのはじめ方
このチャプターはOpenAIモデルに基づいています。
設定
デフォルトでは、LangChainにはモデルの依存関係がインストールされていません。まず、OpenAI Pythonパッケージをインストールしてください:
pip install langchain-openai
APIへのアクセスにはAPIキーが必要で、環境変数を介して設定することができます。以下の例は、Linux環境でその設定方法を示しています:
export OPENAI_API_KEY="..."
環境変数を設定したくない場合は、OpenAI LLMクラスの初期化時に openai_api_key
という名前のパラメータを使って直接キーを渡すこともできます:
from langchain_openai import ChatOpenAI
chat = ChatOpenAI(openai_api_key="...")
また、パラメータを使用せずに直接初期化することもできます:
from langchain_openai import ChatOpenAI
chat = ChatOpenAI()
メッセージ
チャットモデルのインターフェースは、生のテキストではなくメッセージに基づいています。LangChainが現在サポートしているメッセージタイプには AIMessage
、HumanMessage
、SystemMessage
、FunctionMessage
、ChatMessage
がありますが、ほとんどの場合、HumanMessage
、AIMessage
、SystemMessage
のみを扱うことになります。
LCEL
チャットモデルは Runnableインタフェース
を実装しており、invoke
、ainvoke
、stream
、astream
、batch
、abatch
、astream_log
などのメソッドをサポートしています。そのため、チャットモデルは LangChain Expression Language (LCEL) 式にも使用することができます。
チャットモデルは、List[BaseMessage]
を入力として受け取るか、str
(HumanMessageに変換される)やPromptValueなどのメッセージに変換できるオブジェクトを受け取ることができます。
from langchain_core.messages import HumanMessage, SystemMessage
messages = [
SystemMessage(content="あなたは助けになるアシスタントです"),
HumanMessage(content="モデル正規化の目的は何ですか?"),
]
メッセージの配列でモデルを呼び出す例:
chat.invoke(messages)
返されたメッセージの例:
AIMessage(content="AIの応答内容...詳細は割愛...")
AIの応答をストリーミングする例:
for chunk in chat.stream(messages):
print(chunk.content, end="", flush=True)