LoginSignup
32
32

Azure Cognitive Search × Azure OpenAI Service エコシステム

Last updated at Posted at 2023-07-10

はじめに

Azure OpenAI Developers セミナー第2回でも語らせていただきました、Azure Cognitive Search が今アツいということで、そのエコシステムをまとめます。
001.png
上図のように、Blob ストレージ上に置かれたドキュメントは Azure Cognitive Search エンリッチメント パイプラインがドキュメント中から様々な AI 機能を用いてナレッジを抽出し、検索インデックスを作成します。作成した検索インデックスはあらゆる AI オーケストレーターやプラグインから呼び出すことができます。うーんアツイですコレ。

1. データソース

Azure Cognitive Search が対応しているデータソースは Azure Blob StorageAzure Data Lake Storage Gen2 等の Blob Storage だけでなく、NoSQL 用 Azure Cosmos DBAzure SQL Database に GA 対応しています。それ以外にも、様々なデータソースにプレビュー対応していますし、サードパーティーコネクターによる拡張も可能です。もし対応していなくても、プッシュ型の API により直接インデックスへデータを登録することもできます。

対応するファイル形式はこちらです。画像ファイルや解析不可の画像 PDF も OCR スキルを利用してインデックス化ができますし、例えば JSON ファイルはファイルの中身を解析し、同名のインデックスフィールドにマッピングする機能もあります。

社内に分散するあらゆるドキュメントや非構造化ファイルを検索可能にしましょう。

2. インジェストプロセス

AI 搭載全文検索サービスである Azure Cognitive Search にはもともと組み込みで Azure Cognitive Services の AI 機能を簡単にONするスキルが組み込まれています。さらにここにはカスタムスキルといって、インデクサーというクローラーがドキュメントから抽出したデータを外部 WebAPI に出力する機能があります。これによって、外部にご自分で開発した文章分類モデルなどの推論結果を検索インデックスのフィールドに追加することで、より高度なフィルタリングが可能になったりします。

2.1. Embeddings Skill

こちらにすでに公開されいるカスタムスキルのリポジトリを載せておきます。こちらはテキストチャンカーとエンベディング変換をパイプラインで自動化するスキルです。これ、チャンク分割も含めて自動化できるというスキルは使えるんじゃないでしょうか。

2.2. Summarize Skill

ここに Azure OpenAI を組み合わせると、さらに高度なことができるのではないでしょうか。すでに、要約機能を組み込んでいる企業もあります。

2.3. Form Recognizer Skill

帳票認識や表の構造化などの高度な OCR 機能を実装したい場合は、Azure Form Recognizer と連携します。

2.3. カスタムスキルの作り方

3. インデックス w/OpenAI

Azure Cognitive Search はクラシカルなキーワード検索のインデックスだけでなくベクトル検索とハイブリッド検索にも対応しており、Azure OpenAI Service の text-embedding-ada-002 で生成した Embeddings を格納可能です。
image.png

ベクトル検索サンプル

日本語データセットをチャンク分割し、Embeddings に変換して Azure Cognitive Search のベクトルインデックスに登録するサンプルはこちらにあります。

ベクトル検索とハイブリッド検索の比較デモ

3.1. Semantic Kernel

Semantic Kernel (SK) は Microsoft が OSS として発表した、大規模言語モデル (LLM) をアプリにすばやく簡単に統合できる SDK です。Semantic Kernel では Memory Connectors, Vector storage として実装が進められていて、現在 C# で実装されています。

3.2. LangChain

LangChain では複数の方法で Azure Cognitive Search を呼び出すことができます。

3.3. Azure AI Studio

Azure Cognitive Search は Prompt flow にネイティブ対応しており、「Vector DB Lookup」ツールを利用してベクトル検索することができます。モデルが知らない内容を外部検索システムから検索した情報を付加して質問などに回答させる Retrieval Augmented Generation(RAG) を構築可能です。
image.png

3.4. Azure OpenAI on your data

Microsoft Build 2023 で発表のあった Azure OpenAI on your data のパブリックプレビューが開始されています。「on your data」の名前の通り、Azure OpenAI Studio の Chat Playground 上で Azure Cognitive Search のデータを参照し、モデルが知らない内容を答えられるようにしてからノーコードでAzure AD 認証付きチャットアプリのデプロイまでやってしまうという機能です。
image.png

3.5. ChatGPT Retrieval Plugin

Azure Cognitive Search のベクトルインデックスを利用して Grounding するプラグインはすでに OpenAI 公式より、ChatGPT Retrieval Plugin が公開されていますし、Azure Cognitive Search も対応しましたので、さっそく開発をしていきましょう。
image.png

4. ナレッジストア

ナレッジ ストアは、Cognitive Search エンリッチメント パイプラインによって作成されたデータ シンクで、Azure Storage のテーブルおよび Blob コンテナーに AI エンリッチされたコンテンツが保存されます。これにより、ナレッジ マイニングなどの検索以外のシナリオでインデクサーによって抽出されたナレッジを活用できます。PowerBI でナレッジベースを可視化することもできます。

5. チャットUI

GPT モデルが知らない内容を外部検索システムから検索した情報を付加して質問などに回答させる Retrieval Augmented Generation(RAG) を簡単に構築可能なアーキテクチャがあります。

002.png

このサンプルコードには ChatGPT を使ったプロンプトに Azure Cognitive Search の検索結果をコンテキストとして挿入する基本的な質問応答チャット機能が搭載されています。さらに、質問に対してどのような情報が欠けているのかを確認するために、質問を繰り返し評価し、すべての情報が揃ったところで回答を作成する ReAct アプローチも実装されています。元のコードは ChatGPT に Completion API を使っていて古いので、Chat Completion API に書き換えたものを私の方で作っています

7. アーキテクチャ

Azure OpenAI Service のエンタープライズアーキテクチャを以下にまとめています。

このようなプライベートエンドポイントを使った閉域網での構成も実現可能です。
image.png

8. トレーニング

Azure Cognitive Search の全文検索を重点的に学習するワークショップを公開しています。

コンテンツは演習1~5まで用意してあります。演習用のデータセットや検索用 UI、Postman コレクションセットを含んでいます。以下のリンクをクリックしてください。所要時間は目安です。

  • ノーコード全文検索インデックスの作成 所要時間:50分
  • Postman を使って REST API 開発 所要時間:30分
  • フルテキスト検索 所要時間:30分
  • 豊富な検索機能を使いこなす 所要時間:30分
  • デバッグセッションを使ってカスタムスキルを追加する (オプション) 所要時間:60分

8.1. Simple Cognitive Search Tester

ベクトル検索機能の実装に合わせて、トレーニング・デモ用に公開している Simple Cognitive Search Tester にベクトル検索クエリとハイブリッド検索クエリを追加しました。

8.2. Microsoft Learn

おわりに

Azure Cognitive Search を始めるなら、今でしょ。

32
32
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
32
32