Python版のLangChainを使って OpenAIのAPIを呼ぶ方法をまとめてみました。

概要

このブログでは、「LangChain」という「大規模言語モデル」 (LLM : Large language model) を利用するアプリ開発を支援するフレームワークをさわってみようと思います。このLangChainを使えばChatGPTで使っているGPT3.5やGPT4のAPIを簡単に呼び出すことが可能です

LangChainの公式ドキュメントとGithubのLink

・https://langchain-langchain.vercel.app/docs/get_started/introduction.html

・https://github.com/hwchase17/langchain


インストール

私の環境(M1 Mac)でのインストール手順は、次のとおりです。pythonに関してはpyenvを使ってインストールした後に、venvで仮想環境にしています。

python のインストール

-- brew で pyenvをインストール --
brew install pyenv

-- pyenv で python をインストール
pyenv install 3.11.4
pyenv global 3.11.4

-- 作業用のフォルダでvenv
python -m venv ai-chat.venv
. ./ai-chat.venv/bin/activate

続いて、openaiとlangchainのインストールです。

pip install openai
pip install langchain

これでインストール完了です


APIを呼んでみよう

OpenAIのAPIを呼び出す準備ができたので、pythonで呼び出すプログラムを書いてみましょう。ここではソースをファイルに書くのではなく、コンソールから直接python shellの中で書いています。langchainのクイックスタートには、2通りの方法が書いてあるのでそれぞれ試してみます。

コンソールで環境変数

コンソールにAPIキーをこんな感じで。

export OPENAI_API_KEY="ここにあなたのAPIKEY"

その1 LLMSで呼ぶ

こっちの方法だと、三行でお手軽に呼び出せます。

from langchain.llms import OpenAI

llm = OpenAI(temperature=0.5)
print(llm.predict("プログラマーに必要な心構えを一つ教えてください。"))

=> 「柔軟な考え方を心がける」

この方法はモデルにgpt-3.5などを指定すると下記のような警告がでるので、gpt-3.5をもう一方の呼び方で試していきます。何もしていない場合、デフォルトは “text-davinci-003” が使われてそうでした(たぶん)。

You are trying to use a chat model. This way of initializing it is no longer supported. Instead, please use: `from langchain.chat_models import ChatOpenAI`

その2 chat_models で呼ぶ

OpenAI のモデル “gpt-3.5-turbo” を呼んでみます。こっちは、import するものがいつくか増えていますね。Chatの場合、メッセージに種類が出てくるのでその分の行数が増えています。

from langchain.chat_models import ChatOpenAI
from langchain.schema import (
    AIMessage,
    HumanMessage,
    SystemMessage
)

chat = ChatOpenAI(temperature=0, model_name='gpt-3.5-turbo')
print(chat.predict_messages([HumanMessage(content="プログラマーに必要な社会人基礎力を一つ教えてください。")]))

=> 「コミュニケーション能力です。プログラマーは、単独で作業することが多いため、自分の考えを正確に伝えることが重要です。また、チームで開発を行う場合には、他のメンバーとのコミュニケーションが不可欠です。プログラマーは、自分の考えを相手に伝えるだけでなく、相手の意見を聞き取り、受け入れることも大切です。コミュニケーション能力が高いプログラマーは、チームの協力関係を築き、プロジェクトの成功につながります。」

この例では、HumanMessage を利用しました。この辺りはこんな感じになっているようです。

[AIMessage] 人工知能モデル(GPT-3.5など)が発するメッセージを示します。AIは一般的に自律的な知識や能力を持ち、プログラミングや情報へのアクセスを通じて対話を行います。AIは特定の個別の知識を持たないため、それ自体の経験や感情を持ちません。

[SystemMessage] AIモデルをホスティングし、対話のフローを管理するシステムまたはプラットフォームを指します。Systemは、ユーザーからの入力を受け取り、適切なAIモデルに渡す役割を果たします。このラベルは、AIモデル自体ではなく、AIを動かすシステムに関連するメッセージに使用されます。

[HumanMessage] ユーザーまたは人間が発するメッセージを示します。これは、対話の相手であるユーザーからの入力や質問、要求などを表します。