🦜
【Python】LangChainでGPT-4を使ってみる
LangChainでGPT-4を利用するには「Chat Models」を利用します。
セットアップ
- インストール
pip install langchain-openai
- APIキーのセット
- 方法1) 環境変数
OPENAI_API_KEY
にセットする - 方法2)
ChatOpenAI(openai_api_key="YOUR_API_KEY")
でセットする
- 方法1) 環境変数
1. 簡単なコード
from langchain_openai import ChatOpenAI
from langchain.schema import SystemMessage, HumanMessage
# --- APIキー ---
OPENAI_API_KEY="YOUR_API_KEY"
# --- 初期化: モデルを指定 ---
chat = ChatOpenAI(
openai_api_key=OPENAI_API_KEY,
model='gpt-4-0125-preview'
)
# --- メッセージを指定(プロンプト) ---
messages = [
HumanMessage(content="こんにちは"),
]
# --- 実行: メソッドを指定 ---
response = chat.invoke(messages)
print(response.content)
1-1. モデルの指定
モデルの指定はChatOpenAI(model='xxx')
で指定します。
ChatOpenAI(model='gpt-4-0125-preview')
ChatOpenAI(model='gpt-3.5-turbo-0125')
- ...
1-2. メッセージの指定
指示メッセージはSystemMessage(content="あなたはAIアシスタントです")
やHumanMessage(content="こんにちは")
などのリストで指定します。
- AIMessage => OpenAIのAPIでは「assistant」
- HumanMessage => OpenAIのAPIでは「user」
- SystemMessage => OpenAIのAPIでは「system」
- FunctionMessage
- ChatMessage
1-3. 実行メソッドの指定(Runnableプロトコル)
-
同期メソッド
- stream: 応答を段階的にユーザーに表示
- invoke: 応答が全て生成されたら表示
- batch: 複数の指示で一度に生成したい場合に使う。
chat.batch([messages])
-
非同期メソッド
- astream
- ainvoke
- abatch
- astream_log
- astream_events
- Interface | 🦜️🔗 Langchain
Chat Modelsで「function calling」を使う
tools
で使用できます。
pip install langchain-core langchain-openai
from langchain_openai import ChatOpenAI
from langchain_core.utils.function_calling import convert_to_openai_tool
# --- 関数 ---
def multiply(a: int, b: int) -> int:
"""Multiply two integers together.
Args:
a: First integer
b: Second integer
"""
return a * b
chat = ChatOpenAI(model="gpt-4-0125-preview")
response = chat.invoke("what's 5 times three", tools=[convert_to_openai_tool(multiply)])
print(response.content)
Chat ModelsでStream取得する
chat = ChatOpenAI(model='gpt-4-0125-preview')
messages = [
HumanMessage(content="あ行を出力してください。"),
]
for chunk in chat.stream(messages):
print(chunk.content, end="", flush=True)
end=""
の場合、横につながって出力されました。end
を削除すると、チャンクごとに改行されて出力されました。
print(chunk.content, end="", flush=True)
# あいうえお
print(chunk.content, flush=True)
# あ
# い
# う
# え
# お
Chat Modelsで実行token数を取得する
get_openai_callback()
関数を使用することで、下記が取得できます。
- トークン数(合計/入力/出力)
- 成功リクエスト数
- 合計API料金
pip install langchain_community
from langchain_community.callbacks import get_openai_callback
...
chat = ChatOpenAI(model='gpt-4-0125-preview')
with get_openai_callback() as cb:
result = chat.invoke("あ行を出力してください。")
print(cb)
# Tokens Used: 19
# Prompt Tokens: 15
# Completion Tokens: 4
# Successful Requests: 1
# Total Cost (USD): $0.0
他のモデルでも試してみる
Anthropic「Claude 2」
今後追記予定です。
Google「Gemini Pro」
今後追記予定です。
MistralAI「Mistral」
今後追記予定です。
LangSmithの設定
環境変数に下記のようにLANGCHAIN_TRACING_V2
とLANGCHAIN_API_KEY
を設定するだけで実行結果がLangSmithに記録されます。
LANGCHAIN_TRACING_V2=true
LANGCHAIN_API_KEY=YOUR_LANGCHAIN_API_KEY
おまけ
Open AIのGPTを「Chat Models」ではなく「LLMs」で実行しようとすると下記エラーが出ました。
from langchain_openai import OpenAI
llm = OpenAI(model='gpt-4-0125-preview')
response = llm.invoke("こんにちは")
print(response)
# openai.NotFoundError: Error code: 404 - {'error': {'message': 'This is a chat model and not supported in the v1/completions endpoint. Did you mean to use v1/chat/completions?', 'type': 'invalid_request_error', 'param': 'model', 'code': None}}
Discussion