Azure OpenAI Serviceをデプロイして使うにあたって詰まったところ
みなさん、生成AI活用していますか?
活用と言ってもただ既存のサービスに含まれている生成AIを使うだけでなく、エンジニアなら自分で生成AIを活かしたサービスを手掛けていきたいですよね。
私はまずAzure OpenAI Serviceを用いてみようと思い、公式から出されているサンプルをデプロイするところから始めました。
はじめに
こんにちは。クラウドソリューショングループのtakinami.sです。
Azure OpenAI Serviceのリソースと紐付けて動かすことができる、ChatGPTボットプログラムのサンプルがMicrosoftから出ていることをご存知でしょうか。
ローカルでの動かし方からデプロイの仕方までReadmeに書いてあったり、IssuesやPull requestsといったコミュニティの動きも活発だったりと、進めていく上で参考になる情報が豊富なため進めやすいものと思っていました。
しかし、実際にはReadmeを参考に進めてもうまく行かない箇所があったので、今後同じ箇所で引っかかった際のアプローチの助けとなれるよう記事として残しておこうと思います。
Microsoftのサンプルは下記のリンクからどうぞ。
※前提として、Azure上にAzure OpenAI Serviceのリソースを作成済みであるものとします。
※本記事の内容は2024年8月時点のものになります
デプロイしてみた
デプロイ前の準備として、Readme上で必須と示されていた下記の環境変数を.envファイル上で記述しました。
AZURE_OPENAI_RESOURCE
AZURE_OPENAI_MODEL
AZURE_OPENAI_KEY
また、これに加えてAZURE_OPENAI_MODEL_NAME
も自分が作ったAzure OpenAI Serviceのリソースの値とサンプルのデフォルト値で異なる場合があるため、見直しておくと良いでしょう。
環境変数の設定が終わったら、Azure CLIを用いた方法でローカルからデプロイしてみましょう。
コマンドは下記の通りです。(リソース名などはご自身の環境に沿ったものを入れてください)
az webapp up --runtime PYTHON:3.11 --sku B1 --name <new-app-name> --resource-group <resource-group-name> --location <azure-region> --subscription <subscription-name>
このコマンドを実行することでWebアプリとして動かすことができるよう、App ServiceプランのリソースとApp Serviceのリソースが作成されます。
リソースが作成されたことを確認できたら、Python用にスタートアップコマンドを設定するコマンドを実行しましょう。
az webapp config set --startup-file "python3 -m gunicorn app:app" --name <new-app-name>
ここまでできればサンプルのReadmeにあった準備は完了し、WebアプリにアクセスすればAIとチャットができる基本的な動きを確認できる…と思っていました。
詰まったところ
チャットの画面を開くとApplicetion Errorが表示される
デプロイは成功したものの、いざアクセスすると以下のような画面が表示されてしまいました。
原因はシンプルで、環境変数がデプロイ時に反映できていなかったためでした。
ローカルの.envファイルをもとにデプロイ時に反映してくれるものと思っていたために直面しましたが、Azure PortalでApp Serviceの「設定」から環境変数を設定し直すことで解消されました。
チャットを送信してもOpenAI側からのメッセージが返ってこない
「チャット画面も開けるようになっていよいよ動かすことができるぞ!」と意気込んだものの、いざチャットメッセージを送るとエラーとして返されてしまいました。
試しにAzure OpenAI Studioのプレイグラウンドや下記のようなcurlコマンドで実行すると、正常に返答が来ました。
payload="{\"messages\":[{\"role\":\"system\",\"content\":[{\"type\":\"text\",\"text\":\"こんにちは\"}]}],\"temperature\":0.7,\"top_p\":0.95,\"max_tokens\":800}"
curl "OpenAIリソースのエンドポイント/openai/deployments/デプロイ名/extensions/chat/completions?api-version=2024-02-15-preview" \
-H "Content-Type: application/json" \
-H "api-key: OpenAIリソースのキー" \
-d "$payload"
原因は環境変数に
AZURE_OPENAI_STOP_SEQUENCE
を設定していないことでした。
サンプルのReadmeでは必須の変数とは書かれていなかったので設定せずにいたのですが、明示しておいた方が良さそうです。
特にシーケンスを定めたくない場合は、nullを入れてあげれば良いかと思います。
最後に
記事にするとだいぶあっさりしていますが、さまざまな仮説を立てながらエラーに立ち向かうのは苦労するところでもあり楽しいところでもありました。
試行錯誤を繰り返したおかげでだいぶ理解が深まった部分もあるかと思います。
まだAzure側でも様々なアップデートを重ねているフェーズですので、今後はよりドキュメントなどもわかりやすく充実したものになってくることを期待しています。
現在はAzure AI Searchとの連携に挑戦しておりますので、また機会があれば苦労したところなどをアウトプットしようと思います。
それでは!