ChatGPT(Azure OpenAI サービス)を使ってみる!
はじめに
こんにちは!SHIFTの秋吉です。
この記事では、ChatGPT(Azure OpenAI サービス)を利用して、生成AIのアプリケーションがこんなに簡単にできるんだよ、というあたりを、マイクロソフトが github 上で公開しているサンプルプログラム(URLは、下方「参考」を参照してください)を実際に構築し、実際に触ってみることで、体験します。
手順については、基本サンプルそのままですが、筆者がハマった点についても追記します。
前提
サンプル プログラムは、バックエンドのWebサーバー上の処理は Python で、フロントエンドの Web ブラウザーの処理は、Node.js で書かれています。サンプルをそのまま構築して触ってみる分には、プログラミング言語のスキルは要求されません。もちろん、独自の改造を施し、カスタマイズするためには、それなりの知識が必要となってきますが。
構築手順
ソースコードの入手
この記事では、マイクロソフト社が提供している、AIドキュメントサーチのサンプルコードを使って、体験してみます。
下方「参考」の一番目に、URLを示しますので、そこからダウンロードしてください。
マイクロソフト社への登録
この記事の執筆時点(2024/02)では、Azure OpenAI サービスを利用するためには、マイクロソフト社への登録が必要です。(もちろん使用料もかかります。有償のサービスですが、マイクロソフトへの登録も別途行わないと使えない、ということです。)
上記、サンプルコードのページ ReadMe.md 中にある、次の申し込みフォームから申し込みます。
Azure OpenAIサービス利用の申し込みフォーム
このとき、メールアドレスは、個人のFree Mailではだめで、必ず所属企業ドメインのメールアドレスを入力する必要があるようです。
環境準備
開発環境をセットアップします。 ローカルセットアップしますが、この環境も、Azure上にVMを一個作って、そこに以下のツール群をセットアップし、そこで、コード修正や、デプロイをやるのが、楽かと思います。
なお、VS Code Dev Containers を開発環境として使う方法も、サンプルに含まれる ReadMe.md に紹介されていますが、ここでは、ベタで開発環境を構築する方法でご紹介します。
以下のツールをインストールします。
Python
3.9 ~ 3.11。
重要:Windows の場合、Python と pip パッケージマネージャーはパスに含まれている必要があります。Git
サンプルソースを手動でzipダウンロードして、ローカルに配置する場合は、必要ありません。Powershell 7+ (pwsh)
重要:(Windows ユーザーのみ)PowerShell ターミナルから pwsh.exe を実行できることを確認してください。失敗する場合は、PowerShell をアップグレードする必要がある可能性があります。
いざデプロイ
ここも、ReadMe.md の記述に従って "azd up" してやればいいです。
OpenAIサービスなどの 「リソース名」は、このサンプル実行の他者と被らないよう、「乱数的な」名称が割り当てられます。これを避け、自分の意図した名称にしたい場合は、ReadMe.md の「Deploying with existing Azure resources」を参考にあらかじめいくつかの環境変数を設定してやればいいです。(existing (既存)である必要はありません。)
さぁ、実行!
デプロイが正常終了(「SUCCESS」で終了)したら、実際に使ってみましょう。
デプロイが正常終了すると、上のキャプチャ中にもあるように、実際に構築したWebアプリのURLが表示されていますので、実際にアクセスしてみます。
次のようなトップ画面が表示されます。
英語で書かれてますが、日本語で質問すれば、日本語で答えてくれます。 サンプルに同梱されているドキュメントについての質問をしてみます。やり取りは、日本語で行いますが、ドキュメント自体は英語で書かれていますので、後述の「アナライザーの言語」はデフォルトの英語のままで問題ありません。
どうです?ちゃんと日本語で答えてくれていますね。
ハマった点・留意点
AI Search のアナライザーの言語
使用したサンプルプログラムは、英語圏の人々によって書かれていますが、ChatGPT 自体は、上記のように日本語で質問すれば日本語で答えてくれ、中国語やその他言語でもチャットが出来るようになっています。
一方、このサンプルは、文書(例えば、何かのFAQ集、ノウハウ集、社内手続きや、ルールなど)を投入することにより、その内容に沿った回答生成を行ってくれるよう作られています。情報の出典箇所も示してくれます。(上記のキャプチャの Citations の部分です。)
この後者の、文書を参照して回答してくれる機能を使う場合、文書データは、一旦 AI Search サービスに格納されて、検索します。文書検索では、「セマンティック検索」も使えます。
ただ、今回筆者は、ここにはまりまして、このサンプルはもともと英語で書かれているために、文書アナライザーが、 "en.microsoft" になっていて、当初期待する文書検索・回答が得られませんでした。これに気が付くのにかなり時間がかかってしまいました。トホホです。
この文書アナライザーは、AI Search のインデックスを作るときに指定するもので、一旦作成したのちは、インデックスを作り直さないと、変更することができません。
下記は、AI Search のインデックス作成時のインデックス定義で、この "en.microsoft" の部分を "ja.microsoft" にすることで、日本語の文書アナライザーを使用することが出来ます。
(※現在のサンプルソースでは、環境変数 AZURE_SEARCH_ANALYZER_NAME に "ja.microsoft" を設定することで、ソースファイルを修正することなく文書アナライザーを切り替えることができます。ちなみに筆者がハマったころは、当然このような気遣いはありませんでした。ほかにもハマった人がいたんですかね?)
くれぐれも、この設定は、AI Search のインデックスを作成する前に設定するる必要があり、一旦インデックスを作成したのちには、インデックスを一旦削除する必要があることに注意してください。
fields=[
SimpleField(name="id", type="Edm.String", key=True),
SearchableField(name="content", type="Edm.String", analyzer_name="en.microsoft"),
SearchField(name="embedding", type=SearchFieldDataType.Collection(SearchFieldDataType.Single),
hidden=False, searchable=True, filterable=False, sortable=False, facetable=False,
vector_search_dimensions=1536, vector_search_configuration="default"),
SimpleField(name="category", type="Edm.String", filterable=True, facetable=True),
SimpleField(name="sourcepage", type="Edm.String", filterable=True, facetable=True),
SimpleField(name="sourcefile", type="Edm.String", filterable=True, facetable=True)
],
いやー、このアナライザー設定にはハマりました。 逆に、 "ja.microsoft" を設定したのちの、目の覚めるような回答には、思わず嬉し泣きしちゃいました。
参考
Azure-Samples / azure-search-openai-demo
今回使用した、マイクロソフト社が公開しているサンプルコード
《この公式ブロガーの他の記事》
SHIFTについて(コーポレートサイト)
SHIFTのサービスについて(サービスサイト)
https://service.shiftinc.jp/
SHIFTの導入事例
https://service.shiftinc.jp/case/
お役立ち資料はこちら
https://service.shiftinc.jp/resources/
SHIFTの採用情報はこちら
PHOTO:UnsplashのFotis Fotopoulos