🦜

【Python】LangChainでGPT-4を使ってみる

2024/02/09に公開

LangChainでGPT-4を利用するには「Chat Models」を利用します。

セットアップ

  • インストール
pip install langchain-openai
  • APIキーのセット
    • 方法1) 環境変数OPENAI_API_KEYにセットする
    • 方法2) ChatOpenAI(openai_api_key="YOUR_API_KEY")でセットする

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_V2LANGCHAIN_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