はじめに
23年6月19日にAzure OpenAIに独自データを追加できる機能「Add your data」がパブリックプレビューで発表されました。GPTは自分が知らない情報に関して、答えることができないですが、この機能を使うことで独自のデータとGPTモデルを簡単に連携させることができ、GPTが知らない独自のデータを参照して回答を生成できるようになります。また、回答のソースを独自データに限定することもできるので、ChatGPTの活用の幅が大きく広がります。
一通り使ってみたので、具体的な利用方法を解説していきます(公式ドキュメントにも詳しく記載されています)。
(23年9月追記)
Add your dataにベクトル検索の機能が追加されました。詳細はこちらのブログで丁寧に解説されていますので、ご参照ください。
独自データの追加
使えるモデルはチャット形式のモデル「gpt-3.5-turbo」「gpt-4」になります。
Azure OpenAI Studioのチャットを開くと[アシスタントのセットアップ]のウィンドウに「Add your data」が追加されています。[Add a data source]をクリックしましょう。
現時点(23/6/20)プレビュー版では、「Azure Cognitive Search」「Azure Blob Storage」「Upload files」の3つのデータソースが選べます。どのサービスを選んだとしても、Cognitive Searchによってインデックス化されて、データを利用することになります。今回はローカルにあるPDFを追加したいので、[Upload files]をクリックします。
アップロードするBlob storageのリソースとインデックスを作成するCognitive Searchのリソースを事前に用意しておき、こちらの画面から指定します。CORSの設定もワンクリックでできます(画面は設定完了済みです)。最後にCognitive Searchのインデックス名を入力して、[次へ]をクリックします。
対応しているファイル形式はこちらです。
今回試すPDFはこちらです。Azure OpenAIの公式ドキュメントをPDFにしたものになります。
「Limit responses to your data content」の選択にチェックを入れれば、データソース内の範囲でしか回答しなくなります。一度、Cognitive Searchのインデックスを見に行きましょう。
1つのPDFをアプロードしただけですが、6つのドキュメントに分かれて格納されています。GPTから呼び出す時のトークン数に引っかからないように、上手いことチャンク分割されていているんですね。素晴らしい!
インデックスの設計もfilepathやurlなどの情報が含まれており、最適化されていています。一度、Cognitive Searchでインデックスを作ったことがある人なら分かりますが、チャンク分割やインデックス設計を自動でやってくれるのは本当にありがたいです!
Add your data経由でCognitive Searchのインデックスを作成した場合は、contentフィールドのアナライザーが英語(デフォルト)になるようで(6/20時点)、日本語での検索の精度が悪くなるみたいです。従って、現状はCognitive Searchのインデックス作成までは自前で行って、Add your dataで連携させるのがベストプラクティスになりそうです。
Cognitive Searchのインデックス作成の支援ツールもあり、こちらを使うと言語も柔軟に設定してくれそうです。
https://github.com/microsoft/sample-app-aoai-chatGPT/tree/main/scripts
(6/22)対処方法を記事にまとめました。
いろいろ聞いてみる
「どんなモデルがある?」という質問に対しては、ドキュメント内から適切に回答してくれました。「好きな食べ物は?」という質問に対しては、ちゃんと分からないと、答えてくれています。「GPT-5について教えて」という質問に対しては、「GPT-3が最新のモデル」と答えちゃっています(正しくはGPT-4)。とはいえ、「GPT-5はOpenAIの最新のモデルで~」みたいな間違い方はしていないですね。
下のreferencesの部分をクリックすると、根拠となるドキュメントを知ることができ、右側でそのドキュメントの内容を確認することができます。便利すぎる!
ただし、この参照されているドキュメント、ちょっとずれているような気がしてて、そこは要検証ですね、、
アプリのデプロイ
Add your dataで連携させたプレイグラウンドはWebアプリとしてデプロイできます。
Web Appsへデプロイするために必要なリソースグループやリージョン、価格プランなどを選択します。作成されたアプリにはAzure Active Directoryの認証がかかっているので、デモなどでURLを公開してしまうケースでも安心してお使いいただけます。
API連携に関して
API連携の部分はこちらの07JP27さんのブログがとても参考になります。
APIリファレンスをみると、Completions extensionsというAPIが追加されています。APIのバージョンは2023-06-01-preview
のみとなります。
具体的には下記のようにdataSources
にCognitive Searchの情報追加するだけでAzure OpenAI自身がCognitive Searchと連携して答えを返してくれるようです。
$ curl -i -X POST YOUR_RESOURCE_NAME/openai/deployments/YOUR_DEPLOYMENT_NAME/extensions/chat/completions?api-version=2023-06-01-preview \
-H "Content-Type: application/json" \
-H "api-key: YOUR_API_KEY" \
-H "chatgpt_url: YOUR_RESOURCE_URL" \
-H "chatgpt_key: YOUR_API_KEY" \
-d \
'
{
"dataSources": [
{
"type": "AzureCognitiveSearch",
"parameters": {
"endpoint": "'YOUR_AZURE_COGNITIVE_SEARCH_ENDPOINT'",
"key": "'YOUR_AZURE_COGNITIVE_SEARCH_KEY'",
"indexName": "'YOUR_AZURE_COGNITIVE_SEARCH_INDEX_NAME'"
}
}
],
"messages": [
{
"role": "user",
"content": "What are the differences between Azure Machine Learning and Azure Cognitive Services?"
}
]
}
'
「Add your data」で出来る事と出来ない事
「Add your data」は簡単に独自データにつなげる事ができる一方で、日本語の精度がイマイチであったり、閉域構成がとれない、といった出来ない事も存在します。詳しくは07JP27さんのブログで記載されていますので、是非ご確認ください!
まとめ
いかがでしたでしょうか?ChatGPTと独自のデータを連携させるには、オーケストレーションのプログラム開発やナレッジベースの作成が必要であり、実装に結構時間がかかりました。今回の機能で、お手軽に独自データと連携できるようになったと思いますので是非お試しください。