Azure AI Search x OpenAIが変革するエンタープライズ検索機能の今後のゆくえ

サムネイル

この記事では、Azure AI Search サービスを探索し、そのコアコンポーネントとセットアップ手順について検討します。さらに、OpenAI 技術と統合された製品への応用についても議論します。

イントロダクション

こんにちは。 AI推進部 プラットフォームグループ 技術責任者の勝浦キリルです。

AI推進部の主な目的は、企業や組織内の人工知能(AI)イニシアチブの開発と実装を監督し、指導することです。当部門では、組織のAIイニシアチブが革新的で競争力のあるものであることを確実にするため、最新のAI技術とトレンドに常に追いつくよう努めています。

この記事では、Azure AI Searchサービスについて、その特徴と利用可能なサービスの用途に焦点を当ててご紹介します。

Azure AI Searchとは

Azure AI Searchサービスは、大量のコンテンツに対してAIを活用し、強力な検索機能を提供するクラウドベースの検索サービスです。Microsoftのコグニティブサービスの人工知能(AI)を統合して、インデックス作成とクエリ機能を強化し、開発者が広範なデータサイエンスの専門知識なしにアプリケーションに検索機能を追加しやすくしています。このサービスは、従来の検索方法では効率的に関連結果を提供するのに苦労する可能性がある大量のコンテンツを扱う場合に特に便利です。

AIを活用して、ドキュメント、画像、メディアファイルなど、さまざまなデータソースから情報を自動的に抽出、解析、インデックス化します。このプロセスには、光学文字認識(OCR)、キーフレーズの抽出、名前付きエンティティの認識など、他のAI機能も含まれ、検索インデックスを価値あるメタデータで豊かにします。そのため全文検索、フィルタークエリ、ファセット検索、地理空間検索など、幅広いクエリタイプのサポートが可能です。この柔軟性により、ユーザーはインデックス化されたデータ全体で詳細かつ微妙な検索を実行することができます。

Azure AI Searchは、データ処理用のAzure Functions、検索機能を強化するためのAzure Cognitive Services、インデックス化されたドキュメントを保存するためのAzure Blob Storageなど、他のAzureサービスとシームレスに統合します。

この記事では、Cognitive Services(Azure OpenAI)の統合例を使用して、両システムがどのように統合されるかを書いていきます。

コアコンポーネント

Azure AI Searchは、アプリケーションに高度な検索機能を追加するための包括的なサービスを提供します。これには、インデックス、インデクサー、データソース、スキルセットという四つの主要なコンポーネントが含まれます。

インデックスは、検索可能なドキュメントを保存する場所で、データを構造化して整理します。
各ドキュメントは検索可能なアイテムを表し、スキーマによってフィールドや属性が定義されます。

インデクサーは、外部データソースからデータを取り込み、インデックスを更新する自動化ツールです。定期的に実行することで、常に最新のデータを保持します。

データソースは、検索対象のコンテンツの出所です。Azure SQL DatabaseやAzure Blob Storageなど、様々なデータソースをサポートし、インデクサーがこれらからデータを取得します。

スキルセットは、データをインデックス化する前にエンリッチメント処理を行うスキルの集合です。
例えば、OCRや言語検出などのAIベースの機能を使ってデータを分析し、検索性を高めます。

開発者は、Azure AI SearchのバックエンドAPIを使って、これらのコンポーネントと対話し、インデックスの検索やインデクサーの管理などのタスクを実行できます。

セットアップ

Azure AI Search サービスの探索とテストを始めるにあたり、AI Search インスタンスの作成とそのコンポーネントの設定手順について簡単に説明します。Azure AI Search の作成は、Azure AI Services タブのUIから利用できます。

作成ウィンドウでは、AI Search インスタンスのサービス名、場所、および価格帯を指定する必要があります。

スケールタブでは、レプリカの数とパーティション(Search Unit)を選択する必要があります。スケーリングは、パフォーマンスメトリクスに基づいて手動または自動で行うことができます。検索ユニットの数を増やすことで、より多くの計算能力、メモリ、およびストレージを提供し、検索機能を向上させることができます。これは、高い需要の期間や大量のデータのインデックス作成時に特に有用です。逆に、検索ユニットの数を減らすことで、需要の低い時期にコストを管理することができます。

設定を確認してインスタンスを作成します。オプションで、ネットワーキングのための追加ルールを設定したり、追加のタグを設定することができます(ネットワーキングおよびタグタブを参照してください)。

AI Search インスタンスが作成され、デプロイされたら、リソースから選択できます:

AI Search のコアコンポーネントを設定するには、手動で、JSON設定を使って、またはインターフェイスを使って各コンポーネントを設定するオプションがあります。この記事では、「Import and vectorize data」を使用して迅速な方法をカバーします。

データをインポートしてベクトル化する前に、データをアップロードし、OpenAI インスタンスを設定するストレージアカウントを設定する必要があります。ストレージアカウントを作成するには、ストレージアカウントページに移動して「作成」を選択します。

ストレージアカウントの詳細を設定して作成します。初期化プロセスが完了したら、ストレージアカウントを選択して、新しいコンテナを作成します(データストレージタブ内):

コンテナが作成されたら、後で使用するサンプルデータをアップロードすることができます。(例として、製品に関するFAQデータを含むファイルをアップロードします)

{
  "FAQ": [
    {
      "質問": "Q1: 私のデバイスは最新のOSに対応していますか?",
      "回答": "A1: デバイスのモデルと製造年を確認し、製造元の公式サイトで最新のOSの対応状況をご確認ください。"
    },
    {
      "質問": "Q2: Wi-Fiが繋がらない時のトラブルシューティング方法は?",
      "回答": "A2: ルーターの再起動、デバイスのWi-Fi設定のリセット、ルーターのファームウェア更新などを試してください。"
    },
    {
      "質問": "Q3: バッテリーの持ちを良くする方法はありますか?",
      "回答": "A3: 画面の明るさを下げる、バックグラウンドアプリの活動を制限する、省エネモードを利用するなどがあります。"
    },
    {
      "質問": "Q4: データのバックアップはどのように取ればいいですか?",
      "回答": "A4: クラウドサービスを利用する、外部ストレージに保存する、PCに定期的に転送するなどの方法があります。"
    },
    {
      "質問": "Q5: 最新のテクノロジートレンドは何ですか?",
      "回答": "A5: 人工知能(AI)、機械学習、ブロックチェーン、AR/VR、IoT(モノのインターネット)などが注目されています。"
    }
  ]
}

次に、OpenAI インスタンスを作成し、それに埋め込みモデルを追加します。これは、Search AI によってベクトル化されたデータを生成するために使用されます。

このウィンドウでは、OpenAI インスタンスのリージョン、名前、および価格帯を指定する必要があります。

Azure OpenAI の初期化が完了したら、それを選択し、埋め込みモデルを追加します。

デプロイメントでは、モデルに text-embedding-ada-002 を選択し、そのパラメータを設定してデプロイします。デプロイが完了したら、Azure AI Search インスタンスに戻って
「Import and vectorize data」を使用して設定を完了させます。

最初のステップでは、以前に作成したブロブストレージアカウントとコンテナを選択し、次のステップに進みます。

このステップでは、新しく作成したOpenAIサービスを選択し、埋め込みモデルを選択します。データに画像が含まれている場合、画像からテキストを抽出して検索結果を豊かにすることができます。

索引にセマンティックランカー(Semantic Ranker)を追加するオプションがありますが、これにより検索クエリの意図と文脈的な意味を理解することで、検索体験が向上します。従来のキーワードベースの検索は特定の単語の正確な一致に依存していますが、セマンティックランカーは自然言語クエリのニュアンスを解釈するために高度なAIモデルを活用します。これにより、クエリの基本的な意味に基づいて検索結果を効果的にランク付けすることができ、特定の言葉の存在だけでなく、ユーザーが探しているものにより密接に一致する結果を提供することができます。正確で関連性の高い検索結果をユーザーに提供することに依存するアプリケーションやサービスにとって貴重なツールとなります。

最後のステップでは、すべてのコンポーネントに同じプレフィックス名を設定する必要があります。

インデックス、インデクサー、およびスキルセットの初期化が完了すると、検索機能をテストできるインデックスコンポーネントにリダイレクトされます。

このステップで、Azure AI Search インスタンスとそのコンポーネントの設定が完了です。もっとデータを追加する必要がある場合は、それをブロブストレージにアップロードしてインデクサーを再実行する必要があります。

インデクサーには、どのファイルを選択し、どのように処理するかを指定する追加設定があります。設定が変更された場合、最新の変更を反映するためにインデクサーを「リセット」して「実行」し直す必要があります。

ここで、Azure AI Search と OpenAI をRAGアーキテクチャアプローチで使用する方法について説明します。

Retrieval Augmented Generation (RAG) とは

Azure AI Searchにおける先進的な技術の一つであり、情報検索と生成モデルを組み合わせることによって、より関連性の高い、正確なテキスト生成を可能にします。RAGは大量のテキストデータから必要な情報を素早く検索し、その情報を基に新しいテキストを生成することができるため、質の高いコンテンツ作成やユーザーの質問に対するより適切な回答生成など、幅広い応用が期待されています。

RAGは主に2つのコンポーネントから構成されています。一つ目は「Retriever」、つまり情報検索部分です。この部分では、ユーザーからのクエリに基づいて、大規模なテキストデータベースから関連性の高い文書や情報を高速に検索します。

検索された情報は、次のステップである生成モデルに渡されます。

二つ目のコンポーネントは「Generator」、つまりテキスト生成部分です。この部分では、Retrieverから提供された情報を基に、自然言語生成技術(NLG)を用いて新しいテキストを生成します。このとき、検索された情報をうまく組み合わせることで、より正確で自然なテキストの生成が可能になります。

Azure OpenAI とインテグレーション検証

Azure Search AIとOpenAIの結合テストを行うには、まずOpenAIインスタンスにLLMモデルを追加する必要があります。このテストでは、GPT-4-turboモデルを検証してみます。

GPT-4-turboモデルのデプロイメントが完了したら、Chat Playground(データ追加)で接続し、リクエスト(curl)を使用してSearch AIインスタンスに直接接続できるようになります。

以下にサンプルリクエストを示します:

curl -i -X POST '{API-ENDPOINT}/openai/deployments/{OPENAI-DEPLOYMENT-NAME}/chat/completions?api-version=2024-03-01-preview' \
  -H "Content-Type: application/json" \
  -H "api-key: {OPEN_AI_API_KEY}" \
  -d \
'{
  "data_sources": [
    {
      "type": "azure_search",
      "parameters": {
        "authentication": {
          "type": "api_key",
          "key": "{AI-SEARCH-KEY}"
        },
        "endpoint": "{AI-SEARCH-ENDPOINT}",
        "index_name": "ai-search-article",
        "semantic_configuration": "ai-search-article-semantic-configuration",
        "query_type": "semantic",
        "fields_mapping": {},
        "in_scope": true,
        "role_information": "You are an AI assistant that helps answer questions.",
        "filter": null,
        "strictness": 3,
        "top_n_documents": 3
      }
    }
  ],
  "messages": [
    {
      "role": "system",
      "content": "You are an AI assistant that helps answer questions."
    },
    {
        "role": "user",
        "content": "バッテリーの耐久性を向上させるためのアドバイスをいただけますか?"
    }
  ],
  "temperature": 0,
  "top_p": 1,
  "max_tokens": 1000,
  "stop": null,
  "stream": false
}'

応答:

{
    "model": "gpt-4",
    "object": "extensions.chat.completion",
    "choices":
    [
        {
            "index": 0,
            "finish_reason": "stop",
            "message":
            {
                "role": "assistant",
                "content": "バッテリーの持ちを良くする方法には、画面の明るさを下げる、バックグラウンドアプリの活動を制限する、省エネモードを利用するなどがあります[doc1]。これらの方法は、バッテリーの消耗を抑え、結果としてバッテリーの耐久性を向上させることに役立ちます。",
                "end_turn": true,
                "context":
                {
                    "citations":
                    [
                        {
                            "content": "{  \n  \"FAQ\": [  \n    {  \n      \"質問\": \"Q1: 私のデバイスは最新のOSに対応していますか?\",  \n      \"回答\": \"A1: デバイスのモデルと製造年を確認し、製造元の公式サイトで最新のOSの対応状況をご確認ください。\"  \n    },  \n    {  \n      \"質問\": \"Q2: Wi-Fiが繋がらない時のトラブルシューティング方法は?\",  \n      \"回答\": \"A2: ルーターの再起動、デバイスのWi-Fi設定のリセット、ルーターのファームウェア更新などを試してください。\"  \n    },  \n    {  \n      \"質問\": \"Q3: バッテリーの持ちを良くする方法はありますか?\",  \n      \"回答\": \"A3: 画面の明るさを下げる、バックグラウンドアプリの活動を制限する、省エネモードを利用するなどがあります。\"  \n    },  \n    {  \n      \"質問\": \"Q4: データのバックアップはどのように取ればいいですか?\",  \n      \"回答\": \"A4: クラウドサービスを利用する、外部ストレージに保存する、PCに定期的に転送するなどの方法があります。\"  \n    },  \n    {  \n      \"質問\": \"Q5: 最新のテクノロジートレンドは何ですか?\",  \n      \"回答\": \"A5: 人工知能(AI)、機械学習、ブロックチェーン、AR/VR、IoT(モノのインターネット)などが注目されています。\"  \n    }  \n  ]  \n}\naHR0cHM6Ly9leG5vYXBmcWFib3RhdWVzdG9yYWdlLmJsb2IuY29yZS53aW5kb3dzLm5ldC9haS1zZWFyY2gtYXJ0aWNsZS1jb250YWluZXIvc2FtcGxlSnNvbi5qc29u0",
                            "title": "sampleJson.json",
                            "url": null,
                            "filepath": null,
                            "chunk_id": "0"
                        }
                    ],
                    "intent": "[\"バッテリーの耐久性について\", \"バッテリー寿命の改善方法\", \"バッテリーの持ち時間を延ばす方法\"]"
                }
            }
        }
    ],
}

AI Searchは、Blob StorageにアップロードしたFAQのjsonファイルを検索し、関連するデータをLLMモデルに正確に渡しましたので、引用付きの回答を返しました。

データソースオブジェクトには、in_scope、strictness、top_n_documentsなどの追加パラメーターがあり、これらはSearch AIから返されるデータとLLMモデルがそれにどのように応答すべきかを制御するためのより多くのオプションを提供します。

ユースケース

AI推進部 プラットフォームグループでは、ゲーム開発業界のサポート強化を目指しており、開発者向けにQ&Aを効率的かつ迅速に対応し、ゲーム内での体験をカスタマイズしたり新作ゲームのPRを生成するためのプロセス改善に取り組んでいます。Azure AI SearchとOpenAIサービスの統合は、これらの目標を達成するために大いに役立ち、ゲーム開発者とプレイヤー双方の経験を幅広く向上させています。

さらに、これらのサービスはプロジェクトの自動管理、知識検索およびデータ分析、人材マッチングにおいても直接的な応用が見込まれます。この分野はまだまだ開発段階で多くの課題を抱えてはいるものの、Azure AI SearchとOpenAIは今後さまざまなシーンにおいて多大なサポートを提供することでしょう。

まとめ

この記事では、Azure AI SearchとOpenAIの統合の基本的なセットアップについて説明しました。いくつかの簡単な手順で、幅広いアプリケーションにわたってエキサイティングな可能性を提供できる強力なシステムをセットアップすることが可能です。顧客サポートの強化から、eコマース、コンテンツ発見、ビジネスインテリジェンス、教育、採用まで、革命を起こす可能性のある使用ケースは広範にわたります。組織がこれらの高度な検索機能を探求し、実装し続けるにつれて、効率、ユーザーエクスペリエンス、および全体的な満足度の大幅な改善が見られることが期待されます。情報と膨大なデータの可用性の時代において、検索の未来はここにあり、これまで以上に直感的で、知的で、洞察に富んでいると私は感じています。