Azure OpenAIとLangChainで文章生成する

すっかり生成AIブームの真っ最中という感じで、私も生成AI系のセミナーの依頼があったり、実際のシステム開発のご依頼があったりと、忙しくなってきています。

ちょっと試してみるだけなら、OpenAIのユーザー登録をして、ChatGPTを使ってみるというのが簡単です。私もかなり活用していて、文章を書くときの叩き台を作ったり、壁打ちに使ったりということをしています。また、普段あまり書かないロジックのプログラミングをする際にも、ChatGPTに質問してコード例を作ってもらって、それを参考にしたりしています。

実システムにおいては、OpenAIのAPIを使うか、Azure OpenAIのAPIを使うかという感じですが、Azure OpenAIの方が主流かなというところでしょうか。私も、ひとまずはAzure OpenAIをご提案することが多くなっています。

LangChain

生成AIを活用するプログラミングにおいては、OpenAIの提供する公式Pythonモジュールを使っても簡単なのですが、プロンプトエンジニアリングのようなテクニックを使ったりとか、複数のLLMを比較して何を使うかを決めるといった場合には、LangChainが便利です。
ベクトルデータベースとの連携や、キャッシュ、ReActといったテクニックを使う場合もLangChainでできそうで、生成AI系の開発をするなら、ひとまずLangChainを押さえておいた方が良さそうです。

LangChainのインストール

LangChainはpipを使って簡単にインストール出来ます。使用するPythonのバージョンについては、できるだけ新しい方が良さそうです。
下記のコードでは、Python 3.11.4を使用して動作確認しています。

pip install langchain

OpenAIを使う

OpenAIをLLMとして使用する場合は、このようにします。

openaiモジュール自体もインストールしておきます。

pip install openai

LangChainでのコードは下記のようなものです。

from langchain.llms import OpenAI

llm = OpenAI(temperature=0.7)

llm.predict('こんにちは')

簡単ですね。API KEYは、あらかじめ export OPENAI_API_KEY=<apikey> のように環境変数としてセットしておきます。
Pythonのプログラム内でAPI KEYをセットする場合は、 llm = OpenAI(openai_api_key=OPENAI_API_KEY) のようにします。

Azure OpenAIを使用する

Azure OpenAIを使用する場合、Azureのアカウントが必要なのはもちろんですが、その後、専用フォームでAzure OpenAIの利用申請が必要です。

利用できるようになると、Azureのサポートからメールが届きます。

GPT-4を使用する場合

Azure OpenAIでGPT-4を使用する場合は、さらにGPT-4の利用申請が必要です。

こちらはGPT-4の使用が可能になっても、特にメールなどは来ないようです。

モデルのデプロイ

Azure OpenAIが使用できるようになった後、Azure PortalからAzure OpenAIのリソースを作成します。
リソースの作成先として、東日本など国内のデータセンターを指定することができます。
国内サーバーを使用できるというのが、AzureでOpenAIを使用する一つのメリットでしょう。

リソースを作成すると、エンドポイントURLとAPI KEYが発行されます。

また、Azure OpenAI Studioが使用できるようになり、ここで使用できるモデルの確認やデプロイ、プレイグラウンドを使用したチャットなどでの動作確認ができます。

GPT-3.5やGPT-4などのモデルを使用する際には、事前にデプロイが必要です。
先ほど、GPT-4の使用は別途申請が必要と書きましたが、その申請をして利用可能になっていない状態だと、デプロイするモデルの選択肢として、GPT-4が出てきません。

デプロイは、モデルの選択とデプロイ名の指定程度で、すぐにできます。
デプロイが完了すると、このような画面が表示されます。

ここからプレイグラウンドを表示できます。

プレイグラウンドのチャットセッション>コードの表示をクリックすると、サンプルコードが表示されます。
ここに指定するapi_versionの情報もあるので、プレイグラウンドを使わなくても、一旦は確認しておく必要があります。

LangChainでAzure OpenAI

Azure OpenAIでのモデルデプロイまで完了したら、LangChainのコードに戻ります。

from langchain.chat_models import AzureChatOpenAI
import os

os.environ['OPENAI_API_TYPE'] = 'azure'
os.environ['OPENAI_API_VERSION'] = '2023-07-01-preview'
os.environ['OPENAI_API_BASE'] = 'https://<リソース作成時に指定した値>.openai.azure.com/'
os.environ['OPENAI_API_KEY'] = '<API KEY>'

model = AzureChatOpenAI(deployment_name='gpt-35-turbo', temperature=0.7)
model.predict('こんにちは')

Azure OpenAIの場合は、langchain.llmsではなく、langchain.chat_modelsにあるAzureChatOpenAIを使用します。
OPENAI_API_VERSIONの値は、プレイグラウンドで確認した `2023-07-01-preview’ を指定します。

上記のコードでは、deployment_nameとして gpt-35-turbo を指定していますが、これはモデル名ではなく、デプロイ名です。
私が、デプロイ名としてモデル名と同じ値を指定してデプロイしたのですね。紛らわしくてすいません・・・。
GPT-4を使用する場合も、同様にデプロイしたときのデプロイ名を指定すれば、それで使用可能です。

これで、LangChainでAzure OpenAIを使用できました。

次の記事では、LangChainのPromptTemplateと、複数のモデルで出力を比較するModelLaboratoryについて説明します。

この記事を書いた人

井上 研一

株式会社ビビンコ代表取締役、ITエンジニア/経済産業省推進資格ITコーディネータ。AI・IoTに強いITコーディネータとして活動。画像認識モデルを活用したアプリや、生成AIを業務に組み込むためのサービス「Gen2Go」の開発などを行っている。近著に「使ってわかった AWSのAI」、「ワトソンで体感する人工知能」。日本全国でセミナー・研修講師としての登壇も多数。