Azure OpenAI Service On Your Data触ってみた雑感

# はじめに
株式会社wevnalでAIエンジニア/データエンジニアやってる田頭と申します。


本記事では、6/19 に preview になった Azure OpenAI Service On Your Dataを触ってみて感じた所感を書いていこうと思います。
(初めての記事なので緊張してます...)

本記事では、Azure上での具体的な使い方については触れません。
あくまで良いところや課題感について触れる記事ですので、ご了承下さい。

また、この記事は2023年7月時点の情報に基づいて執筆しています。


# Azure OpenAI Service On Your Dataとは

一言で言うと、独自データを活用したChatGPTやGPT-4モデルが簡単に利用できるようになる機能です。

ChatGPTの登場以降、大規模言語モデル(LLM)を搭載しているチャットボットも増えてきました。
弊社プロダクトのBOTCHAN AIも、ChatGPTを搭載したAIチャットボットのプレビュー提供を開始しております。

https://prtimes.jp/main/html/rd/p/000000137.000015648.html

AIチャットボットにおいては、特定ドメインの独自データに基づいてエンドユーザーの質問に答えなければなりません。
従来では、

1. エンドユーザーの入力に内容が近そうな情報を検索する
1. 検索結果に基づいて回答文を生成する

という手順を踏んでユースケースを満たしており、やや複雑な機能開発やプロンプトのチューニングが必要でした。そのため、とりあえず独自データ+ChatGPTを試したい時は工数がかかってしまう難点がありました。
([公式サンプル](https://github.com/Azure-Samples/azure-search-openai-demo/tree/main)もあるので、超大変という訳ではないです)

今回Azure OpenAI Service On Your Dataがリリースされたことで、ノーコードで独自データとAzure OpenAI Serviceを接続し、ChatGPTやGPT-4モデルを利用できるようになりました！


# 触って感じた、良いところ
### チャットUIで簡単に試せる
先程も述べた最大の利点です。これに尽きます。

画像はWikipediaから佐々木朗希投手のデータをコピーし、データソースとして利用した例です。
![aoai_sample.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/408630/e8b43823-2ebf-5a9b-141c-882ee97a6aea.png)
ナレッジデータがあれば、コンソールでポチポチ押すだけで検索エンジンであるAzure Cognitive Searchへのデータのアップロード・接続が完了し、画像右側のチャットUIでどのように生成されるのか試す事が可能です。
(実際、サンプルデータを作成してからチャットを開始するまで3分程度しかかかりませんでした。)
アップロードできるファイル形式も.txt, .md, .html, .pdf, .docx, .pptxと広いので、「とりあえず持っているナレッジをぶん投げて生成してみる」のには最適な機能だと思います。

### アプリケーションとしても簡単にデプロイできる
画像のチャットUIをWeb Appとしてデプロイすることも1ボタンで可能です。
アプリケーションにはAzure ADによる認証がデフォルトでかかるので、試しに作ってみたチャットボットを社内に展開することも可能になっています。


# 課題点、注意するべきところ
ノーコードで使えるというあまりに大きいメリットがありますが、まだpreview段階というのもあり、プロダクションで利用するにはいくつかの課題がありそうです。
### Private Endpointが使えない
Azure OpenAI Service のChatGPT API に対するメリットの一つとして、VNet 分割や Private Endpoint を利用してモデルの隔離を行うセキュリティ観点が挙げられます。
(Azure OpenAI Serviceの利点については弊社CTOの記事がとてもわかりやすいので、ぜひご覧下さい！)

https://qiita.com/lazy-kz/items/32e8e7c86bdce67beb48#1-%E6%83%85%E5%A0%B1%E3%82%BB%E3%82%AD%E3%83%A5%E3%83%AA%E3%83%86%E3%82%A3

しかし、preview 段階である On Your Data は現状では Azure OpneAI Service から Private Endpoint を利用した Azure Cognitive Search へのアクセスができません。
このため、Azure Cognitive Search を利用するためにpublic networkからのアクセスを許可するなどセキュリティ的トレードオフを行う検討する必要が出てきます。

全ての通信を閉域化したい場合は、Azure Cognitive Searchへの通信を自前のアプリケーションで行う必要があります。

### プロンプトのチューニングができない

On Your Dataを利用した場合、チャット画面では
* エンドユーザーの入力からCognitive Searchへのクエリを生成するプロンプト
* 検索結果に基づいて生成するプロンプト

がブラックボックス化されており、編集してチューニングする事ができません。

一応[エンドポイント](https://learn.microsoft.com/en-us/azure/cognitive-services/openai/reference#completions-extensions)をcurl等で直接叩くようにすれば、パラメータにSystem Promptに相当するパラメータ(`roleInformation`)が存在していたり、従来のようなSystem Promptを利用した生成も可能です。
(ただ、何度か生成した際に、日本語しか出力しないように指示した上で英語で返ってくることがあったので、どの程度効いているのかは不明です...)

コミュニケーションの細かいチューニングを行いたい場合は、従来のように自前のアプリケーションでプロンプトを書く必要があります。


### 日本語のセマンティック検索に非対応
セマンティック検索とは、検索クエリの意図・意味を読み取って検索結果を出力する機能のことです。
On Your DataでAzure Cognitive Searchに接続した際、現状だと英語でしかこのセマンティック検索を使えません([公式ドキュメント](https://learn.microsoft.com/en-us/azure/cognitive-services/openai/concepts/use-your-data#semantic-search)より)。

Azure Cognitive Search単体では、previewではありますが日本語でのセマンティック検索に対応しています。
より検索精度を高めたい場合は、自前のアプリケーションからAzure Cognitive Searchに対してセマンティック検索を行い、検索結果をAzure OpenAI Serviceに送信する工夫が必要があります。


# まとめ
Azure OpenAI Service On Your Dataについて色々感想を書きました。

細かいチューニングが必要な場合はまだまだ足りない部分が多いと感じるものの、簡単に独自データを利用したChatGPTやGPT-4を使える利点はとても大きいと感じます。すごい時代になったものですね...

個人的には、つい昨日public previewになったAzure Machine Learningのprompt flowとも組み合わせれば、もっと複雑な処理を簡単に実装できるのではないかと期待しております。

https://techcommunity.microsoft.com/t5/ai-machine-learning-blog/harness-the-power-of-large-language-models-with-azure-machine/ba-p/3828459

弊社では、現在LLMを活用したAI開発のインターンを募集しております。
Azureの最先端プロダクトをゴリゴリ使ってAIの開発ができます！

https://kotonaru.co.jp/internship-detail/246/wevnal

興味を持っていただいた学生の方、ご応募お待ちしてます！

# 参考
https://techcommunity.microsoft.com/t5/ai-cognitive-services-blog/introducing-azure-openai-service-on-your-data-in-public-preview/ba-p/3847000

https://learn.microsoft.com/en-us/azure/cognitive-services/openai/concepts/use-your-data