CCCMKホールディングス TECH LABの Tech Blog

TECH LABのエンジニアが技術情報を発信しています

ブログタイトル

Azure AI StudioとAzure AI Searchを使ってChatBotアプリケーションを作ってみました。

こんにちは、CCCMKホールディングス TECH LAB三浦です。

2024年が始まりました。今年も引き続き、色々なことを調べたり、試していきたいと思います。

さて、今回はMicrosoftの"Azure AI Studio"というAIを活用したアプリケーション開発プラットフォームを試してみました。ChatGPTなどの生成AIに対し期待されることとして、保有するデータやノウハウ、ツールを上手に活用していきたい、ということが挙げられると思います。Azure AI Studioはまさにそのニーズに答えることを目的としたプラットフォームだと感じました。

Azure AI Studioを実際に試してみるため、今回は"Azure AI Search"に格納したベクトル化したドキュメントを参照してユーザーの質問に答えることが出来るChatBotを作ってみましたので、その手順などをご紹介したいと思います。なおAzure AI Studioは現在パブリックプレビューの状態です。今回ご紹介した内容は、今後変更される可能性があることをご了承ください。

試したことの概要

独自のデータをLLMに参照させ、質問に回答させるテクニックとしてRetrieval Augmented Generation(RAG)がありますが、今回はRAGをAzure AI SearchとAzure AI Studioで実装し、ChatBotを作りました。RAGでは参照するデータをVector DB化しますが、Vector DBの構築にAzure AI Searchを使用しました。そしてAzure AI Searchで構築したVector DBを参照し、Azure OpenAIのChatモデル"gpt-35-turbo-16k"を呼び出す処理をAzure AI Studioで実装しました。

Azure AI StudioとAzure AI Searchはどちらも"AI"が名前についていますが、役割は異なります。

Azure AI Searchは"検索"機能を提供するサービスで、テキスト形式のデータを"index"として格納し、検索することを可能にします。Indexを作成する機能として"indexer"が提供されており、indexerを通じて様々なデータを様々な方法でIndex化することが出来ます。

たとえば長いテキストを細かく分割し、Azure OpenAIが提供する埋め込みモデル("text-embedding-ada-002"など)でベクトル表現化し、分割したテキストとベクトルデータのペアでindexに保存する、といった方法です。そしてこのindexがRetrieval Augmented Generation(RAG)で必要になるVector DBとして機能します。

実際にどんな手順でVector DBを構築出来るのか、試してみました。

Storage Account blob containerへのドキュメントの格納

Storage Accountのblob containerにテキストデータを格納しておくことでAzure AI Searchでのindex作成に使うことが出来ます。index作成時にcontainerに格納したテキストデータ全てをインポート対象に指定することも出来ますし、特定のフォルダに格納されたテキストデータだけをインポート対象にすることも出来ます。

データのインポートとベクトル化

テキストデータのインポートとベクトル化はAzure AI Searchの1つのメニューからまとめて行うことが出来ます。AI SearchのOverviewの画面から"Import and vectorize data"を選択します。

AI SearchのOverviewから"Import and vectorize data"に進みます

インポートの設定として、テキストデータを格納したStorage Accountやcontainer、フォルダの指定、ベクトル化に使用するAzure OpenAIのモデルを指定することが出来ます。Azure OpenAIはあらかじめ事前に作成しておくか、ここで新規に別途作成する必要があります。

データの格納場所の指定

ベクトル化に使用するモデルの指定

この操作でindexerの作成からindexの作成まで行うことが出来ます。

Azure AI Studio

Azure AI Studioは実際に使ってみると、生成AIモデルの管理などに使用するAzure OpenAI StudioにAzureの機械学習関連のプラットフォームAzure Machine Learningの一部機能を統合したような印象を受けました。実際Azure OpenAI Studioで主に使用する生成AIのデプロイやプレイグラウンドといった機能はAzure AI Studioにも備わっています。

Azure AI Studioのメイン画面

プレイグラウンド

Azure AI Studioで何かアプリケーションを作成するにはまずプロジェクトを作る必要があります。プロジェクトを作ると左ペインから様々なメニューに進むことが出来ます。実は先ほど行ったindexの生成もこのメニューから行うことが出来るのですが、私の環境ではAzure AI Studioからindexを作成しようとするとエラーが発生し、完了することが出来ませんでした。

エラーの内容を見ると、from openai import BadRequestErrorのPythonの処理を実行しようとしてエラーが出ている様で、おそらくindex実行時に呼ばれるPythonのコードとopenaiライブラリのバージョンに相違があることが原因では・・・と思います。対処方法が見つからなかったため、indexの作成は先ほどの様にAzure AI Searchを通じて行いました。

Prompt flowでのflowの作成

Azure AI Studioでのアプリケーションの実装は"Prompt flow"で行います。Prompt flowではいくつか予め用意されているテンプレートをベースにflowを実装していきます。今回はAzure AI Searchで構築済みのindexを参照し、ユーザーの質問に回答が出来るChatBotを作りたいので、その用途に最も適していると感じた"Multi-Round Q&A on Your Data"というテンプレートをベースにflowを作ることにしました。

"Multi-Round Q&A on Your Data"というテンプレートを選択しました。

flowの編集

テンプレートからflowを作り始めると、あらかじめいくつかの処理単位(ノード)がつながれた有向グラフが表示された画面に移ります。各ノードは画面左側で編集することが出来ます。様々なタイプのノードがあり、例えばPythonのコードを実行するようなノードもあります。

flowの編集画面

また、"chat_with_context"のようにLLMへの接続を必要とするノードもあります。これらのノードはflowを動かす前に"Connection"からノードで使用するAzure OpenAIのモデルを"deployment_name"で指定する必要があります。

Azure OpenAIのモデルの指定

また、flowを動かすためにはRuntimeの起動が必要になります。起動するRuntimeの設定を詳細に指定することも出来るようですが、今回は自動的に設定してくれる"automatic"を使って起動しました。

このテンプレートは、"Azure AI Studio"から作成したindexを呼び出す作りになっているようです。"Azure AI Search"で作成したindexを使いたい場合は、まずテンプレートにあらかじめ実装されている"search_question_from_indexed_docs"ノードを削除します。

Runtimeの起動が完了していれば"More tools"というボタンをクリック出来るようになり、"Vector DB Lookup"というツールを選べるようになります。このツールでAzure AI Searchで作成したindexを参照することが出来ます。以下の様に参照したいindexの情報を入力することで、indexに接続出来るようになります。

"Vector DB Lookup"の設定情報

あとはこのノードと前後のノードを接続するため、それぞれのノードの入力と出力に関する箇所を設定していきます。具体的にはVector DB Lookupのノードでは"vector"の項目にクエリのベクトル(embed_the_question.output)を指定し、"generate_prompt_context"という名前のノードの"search_result"という項目にはVector DB Lookupの実行結果を指定しました。

これでflowは完成です。

動作確認

flowの作成画面から"Chat"というボタンをクリックすることで動作確認を行うことが出来ます。

独自のデータ(自分が書いたブログの内容)を参照していることを確認

deployment

作成したflowは最終的にendpointにデプロイすることが出来ます。こちらもflowの作成画面から進めることが出来、画面上にある"雲"のマークのボタンをクリックしてdeploymentの画面に移ります。デプロイが成功して完了すると以下の画面の様に、endpointに関する詳細情報を確認することが出来るようになりました。

endpointの詳細情報の確認画面

まだ動作確認は出来ていないのですが、ここで確認できる接続情報を用いてAPIからflowの処理を呼び出すことが出来るようです。

まとめ

今回はプレビュー版が提供されているAzure AI Studioを使って独自のデータを参照して回答出来るChatBotのアプリケーションを作ってみました。独自のデータはAzure AI Searchを用いて用意したindexを使用しました。Azure AI Studioはまだプレビュー版のため本番での運用は難しいですが、以前から出来たらいいな、と思っていたことが比較的簡単に実現出来ることが分かりました。Azure AI Studioが正式にリリースされれば、様々なChatBotアプリケーションがここから開発され、公開されていくのかもしれません。そうなった場合、コンテンツフィルタリングの機能やアプリケーションの管理機能がより求められていくことになりそうです。この辺りの実現方法についても引き続き考えていけたらいいな、と思います。