LangGraphで AIエージェントをまなんでいく - その2 チャットモデルを組み込んでみる-
チャットモデルは、大規模言語モデル(LLM)の一種で、自然言語による双方向の対話(チャット)に特化した設計が施されたモデルを指します。
LangChainはチャットモデルをホストしておらず、サードパーティの統合に依存しています。
今回もlangchain-academy を使用して動作等の確認をしていきたいと思います
メッセージ
チャットモデルはメッセージを使うことができます。このメッセージは会話内の様々な役割を表現します。
LangChainは HumanMessage、AIMessage、SystemMessage、ToolMessage など様々なメッセージタイプをサポートしています。
LangGraphを使用してメッセージの作成をしてみます。
各メッセージには、いくつかのものを指定できます:
- content - メッセージの内容。
- name - オプションで、メッセージの作成者。
- response_metadata - オプションで、メタデータのdict(例えば、AIMessagesのモデルプロバイダによってしばしば入力される)。
必要なパッケージのインストール
pip install --quiet -U langchain_openai langchain_core langgraph
from pprint import pprint
from langchain_core.messages import AIMessage, HumanMessage
messages = [AIMessage(content=f"こんにちは!最近お使いの製品について何かお困りのことはありませんか?", name="Model")]
messages.append(HumanMessage(content=f"先週注文した商品がまだ届いていません。いつ届きますか?",name="Lance"))
messages.append(AIMessage(content=f"ご注文ありがとうございます。配送状況を確認しますので、注文番号を教えていただけますか?", name="Model"))
messages.append(HumanMessage(content=f"注文番号は12345です。", name="Lance"))
for m in messages:
m.pretty_print()
メッセージは、チャット形式のやり取りを管理するための重要な構造で、モデルに対して文脈(コンテキスト)を明確に伝えたり、複数のやり取りを保持して適切な応答を得ることが可能になります。
チャットモデル
チャットモデルは、前述のように、一連のメッセージを入力として使用し、メッセージタイプをサポートすることができます。
LangChainは、さまざまなチャットモデルを統合できます。
OpenAIのChatGPT、AnthropicのClaude、Hugging FaceのBloomやFalcon、GoogleのGeminiなど、多岐にわたるモデルと連携可能です。
今回はGeminiを使ってみます。
LangChain Google Generative AI Integrationのパッケージを利用可能にします。
pip install -U --quiet langchain-google-genai
GeminiのAPIキーを取得する必要があるので、Gemini API キーを取得するを参照して取得しておきます。
## API KEYのセット
import os, getpass
def _set_env(var: str):
if not os.environ.get(var):
os.environ[var] = getpass.getpass(f"{var}: ")
_set_env("GOOGLE_API_KEY")
チャットモデルをロードし、メッセージのリストを用いて呼び出すことが可能です。
from langchain_google_genai import ChatGoogleGenerativeAI
## Gemini-1.5_Flashのモデルを使用する
llm = ChatGoogleGenerativeAI(model="gemini-1.5-flash")
result = llm.invoke(messages)
type(result)
この操作の結果として、モデルからの応答はAIMessageオブジェクトとして返されます。このAIMessageには、生成されたテキストだけでなく、トークン使用量やモデル名などのメタデータも含まれています
result
前述で作成したメッセージに対する返信がモデルから返ってきていますね。
今度は SystemMessage を組み込んだチャットを行ってみます。
SystemMessageはロールが "system "のメッセージを表し、モデルにどのように振る舞うかを指示します。
※ すべてのモデルプロバイダーがこれをサポートしているわけではありません
from pprint import pprint
from langchain_core.messages import AIMessage, HumanMessage, SystemMessage
from langchain_google_genai import ChatGoogleGenerativeAI
messages = [SystemMessage(content=f"あなたは厳格で論理的な教師です。正確な情報を簡潔に伝えることを心がけてください。", name="System")]
messages.append(HumanMessage(content="二次方程式の解き方を教えてください。", name="Bob"))
for m in messages:
m.pretty_print()
llm = ChatGoogleGenerativeAI(model="gemini-1.5-flash")
result = llm.invoke(messages)
result
from pprint import pprint
from langchain_core.messages import AIMessage, HumanMessage, SystemMessage
from langchain_google_genai import ChatGoogleGenerativeAI
messages = [SystemMessage(content=f"あなたは親切で子ども向けの説明を得意とするアシスタントです。簡単でわかりやすい言葉を使ってください。", name="System")]
messages.append(HumanMessage(content="星ってどうして光っているの?", name="Bob"))
for m in messages:
m.pretty_print()
llm = ChatGoogleGenerativeAI(model="gemini-1.5-flash")
result = llm.invoke(messages)
result
このように、LangChainではSystemMessageを活用して柔軟にチャットモデルの振る舞いを制御できます。