2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Azure OpenAIのデータ ソース機能を検証した(APIバージョン. 2024-02-01)

Last updated at Posted at 2024-04-19

はじめに

  • これまでRAG機能の実現には、個別にオーケストレーション機能により、OpenAIと検索データベースをそれぞれ制御する必要があった
  • Azure OpenAIのAPIに、データソース機能として、OpenAI自体が検索データベースを参照し、回答を返してくれる機能が実装されたため、使い物になるのか検証したので、結果を共有したい

やりたいこと

  • PCから直接OpenAIのAPIを叩き、Azure AI Searchからの回答をもとに期待される回答が生成されるか検証する
    image.png

結論

  • gpt-3.5-turboは現状使い物にならない
    • データソースとして正しい回答がヒットしているのに、「ドメイン外」などとして回答されない
  • gpt-4は期待通りの生成結果となる。ただしレスポンスが遅い
  • これらより、現時点では、自前でオーケストレーション機能を実装し、(OpenAIにデータソースを自動で参照させるのではなく)明示的にプロンプトからデータソースを与えた方がよいと思われる

検証内容

検索の元とするダミーデータ

  • カフェを想定したダミーのFAQを15件用意した。(ChatGPTに作らせた)
  • 5件のみ参考に表示する
質問 回答
営業時間は? 店舗によって異なりますが、多くの店舗は7:00から22:00まで営業しています。最寄りの店舗の詳細は、Webサイトの店舗検索ページをご覧ください。
年中無休ですか? はい、多くの店舗が年中無休で営業しています。ただし、店舗によっては休業日が設けられている場合もありますので、事前にご確認ください。
アレルギーを持っています。メニューの中で何が食べられますか? アレルギー情報を各メニューに記載しております。詳細はメニュー表をご参照いただくか、スタッフまでお問い合わせください。個別の対応も可能な限り承ります。
ペットを連れて行っても大丈夫ですか? ペット同伴可能な店舗もございますが、条件がある場合が多いです。事前に最寄りの店舗にご確認ください。
子供連れでも大丈夫ですか? はい、ファミリーでのご来店も大歓迎です。キッズメニューや子供用の椅子をご用意している店舗もあります。

Azure AI Searchにデータを投入する

  • 質問と回答を、title, contentフィールドに格納する
  • 表示されていないが、contentについてはベクター化したデータも格納しており、contentVectorフィールドが存在している
    image.png

OpenAIから叩く

  • OpenAI APIバージョン 2024-02-01を利用する
  • 以下の宛先、およびBODYを使う
POST https://<YourEndpoint>.openai.azure.com/openai/deployments/<YourDeploymentID>/chat/completions?api-version=2024-02-01
  • Azure AI SearchのURLとAPI Admin Keyは、適宜修正すること
{
    "messages": [
        {
            "role": "user",
            "content": "ペット連れて行っても大丈夫?"
        }
    ],
    "data_sources": [
        {
            "type": "azure_search",
            "parameters": {
                "endpoint": "https://xxxxxxxxxxxxxxxxxxx.search.windows.net",
                "index_name": "cafe-faqindex",
                "authentication": {
                    "type": "api_key",
                    "key": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
                },
                "query_type": "vector",
                "top_n_documents": 3,
                "role_information": "According to the retrieved data, answer in Japanese",
                "embedding_dependency": {
                    "type": "deployment_name",
                    "deployment_name": "text-embedding-ada-002"
                },
                "fields_mapping": {
                    "content_fields": [
                        "title","content"
                    ]
                }
            }
        }
    ],
    "temperature": 0.2,
    "top_p": 0.95,
    "max_tokens": 400,
    "stop": null,
    "stream": false
}

Bodyを作るうえでのポイント

  • role_information で、「日本語で回答して」と入れておかないと、英語で返ってきてしまうので注意
    • またrole_informationは、100トークン以内という仕様なので、あまり長い指示は入れられない
  • fields_mapping>content_fieldsに、"title","content"を入れることで、OpenAIに対し、title\ncontentとしてデータが渡される
    • "content","title"と記述すると、content\ntitleのように逆に渡される

検証結果

  • 各モデルについて、10回同じ質問を投げる
  • 質問文:「ペット連れて行っても大丈夫?」
  • gpt-3.5-turbo(1106)については、1回もまともに回答を生成してくれなかった
  • 下記に回答例なども示すが、AI Searchからは期待通りの検索結果がOpenAIに渡されているにも関わらず、なぜか回答が生成されない結果となった
  • gpt-4についてはすべて期待通りの回答が生成された
  • (追記) gpt-3.5-turbo 0125を追記した
gpt-3.5(1106) gpt-4(1106-preview) gpt-3.5(0125)
0/10 10/10 0/10

gpt-3.5の回答例

  • AI Searchは期待するQ&Aがヒットしているが、正しく回答が生成されないことがわかる

image.png

参考:質問文から「?」を取ったら期待の回答を得られた

  • OpenAIの名誉のために、完全にダメではないケースも共有しておく
  • ただ、この質問文で10回リクエストしたところ、以下のように期待通りの回答が得られたのは2回のみで、8回はダメだった
    image.png

gpt-4の回答例

  • 期待通り、ペット連れに関するQ&Aのみを参照([doc1]と表記)し、回答が生成されている
    image.png

まとめ

  • データソース機能は非常に強力な機能であり、これが実用化できればかなりのメリットが期待できるが、現時点ではまだ使いづらい印象となる
  • 引き続きこの改善はウォッチしていきたいと思う
2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?