ヒント
最新のベクター データベースと RAG パターン アプリのサンプルについては、Azure Cosmos DB サンプル ギャラリーを参照してください。
ベクトル データベースは、自然言語処理、動画と画像の認識、レコメンデーション システム、検索など、分析および生成 AI のさまざまな領域や状況で使用されています。
2023 年に注目すべきソフトウェアのトレンドは AI の強化です。これは、多くの場合、既存の技術スタックに専用のスタンドアロン ベクトル データベースを組み込むことで実現します。 この記事では、ベクター データベースとは何かについて説明し、検討する必要がある別のアーキテクチャについて説明します。特にマルチモーダル データを操作する場合は、既に使用しているNoSQLまたはリレーショナル データベースで統合ベクター データベースを使用します。 このアプローチにより、コストを削減できるだけでなく、データの整合性、スケーラビリティ、パフォーマンスを向上させることができます。
ヒント
データの整合性、スケーラビリティ、パフォーマンスは、データ集約型アプリケーションにとって非常に重要であるため、OpenAI はAzure Cosmos DB上に ChatGPT サービスを構築することを選択しました。 数ミリ秒 (1 桁台) の応答時間、自動および即時のスケーラビリティがもたらされ、あらゆるスケールで速度が保証されることに加え、統合されたベクトル データベースも活用できます。 実装サンプルを参照し、無料で試してください。
ベクトル データベースとは
ベクトル データベースは、高ディメンション空間におけるデータの数学的表現であるベクトル埋め込みを格納および管理するように設計されたデータベースです。 この空間では、各ディメンションがデータの特徴に対応しており、高度なデータを表現するために数万ディメンションが使われる場合があります。 この空間内のベクトルの位置は、その特性を表します。 単語、フレーズ、ドキュメント全体、画像、オーディオ、その他の種類のデータはすべてベクトル化できます。 これらのベクトル埋め込みは、類似性検索、マルチモーダル検索、レコメンデーション エンジン、大規模言語モデル (LLM) などで使われます。
ベクトル データベースでは、埋め込みがインデックス化され、ベクトルの距離や類似性に基づいてベクトル検索アルゴリズムを通じてクエリが実行されます。 最も関連性の高いデータを識別するには、堅牢なメカニズムが必要です。 よく知られているベクター検索アルゴリズムには、階層ナビゲーション可能 Small World (HNSW)、反転ファイル (IVF)、DiskANN などがあります。
統合ベクトル データベースと純粋なベクトル データベース
ベクター データベースの実装には、純粋ベクター データベースと、NoSQLまたはリレーショナル データベースの統合ベクター データベースの 2 つの一般的な種類があります。
純粋なベクター データベースは、ベクター埋め込みを少量のメタデータと共に効率的に格納および管理するように設計されています。埋め込みの派生元のデータ ソースとは別です。
高性能なNoSQLまたはリレーショナルデータベースに統合されたベクターデータベースは、追加の機能を提供します。 NoSQLまたはリレーショナル データベース内の統合ベクター データベースは、対応する元のデータと共に埋め込み、インデックス作成、クエリを格納できます。 この方法により、データを別の純粋なベクトル データベースに複製する余分なコストがかかりません。 さらに、ベクトル埋め込みと元のデータが一緒に保持されるため、マルチモーダル データの操作が簡略化され、データの整合性、スケール、パフォーマンスを向上させることができます。 スキーマの柔軟性と統合ベクトル データベースを備えたパフォーマンスの高いデータベースは、AI エージェントにまさに最適です。
ベクトル データベースのユース ケース
ベクター データベースは、自然言語処理、ビデオと画像認識、レコメンデーション システム、検索など、分析および生成 AI 全体で多数のドメインと状況で使用されます。 たとえば、ベクトル データベースを使用して次のことを行うことができます。
- コンテンツ、テーマ、センチメント、スタイルに基づいて類似の画像、ドキュメント、曲を識別する
- 特性、機能、およびユーザー グループに基づいて類似製品を識別する
- 個人の好みに基づいてコンテンツ、製品、またはサービスを推奨する
- ユーザー グループの類似点に基づいてコンテンツ、製品、またはサービスを推奨する
- 大規模な選択肢の中から、要求に適した最善の候補を見つけ出し、複雑な条件を満たす方法を探る。
- 主要なパターンまたは通常のパターンとは異なるデータの異常または不正なアクティビティを特定する
- AI エージェントの永続メモリを実装する
ヒント
ベクトル データベースのこれらの一般的なユース ケースに加えて、Microsoft の統合ベクトル データベースは、待ち時間の短縮、高スケーラビリティ、高可用性により、運用レベルの LLM キャッシュにも理想的なソリューションです。
ベクター データベースは、LLM とカスタム データまたはドメイン固有の情報を利用する 取得拡張生成 (RAG) を有効にするために特に一般的です。 このアプローチにより、次のことが可能になります。
- AI モデルからユーザー プロンプトに対するコンテキストに関連した正確な応答を生成する
- LLM のトークン制限の克服
- 更新されるデータの頻繁な微調整によるコストを削減する
このプロセスには、カスタム データ ソースからの関連情報の抽出と、その情報のプロンプト エンジニアリングを通したモデル要求への統合が含まれます。 LLM への要求の送信前に、ユーザーの入力/クエリ/要求も埋め込みに変換され、データベース内で最も類似した埋め込みを見つけるためにベクトル検索手法が適用されます。 この手法により、データベース内の最も関連性の高いデータ レコードを識別できます。 これらの取得されたレコードはその後、プロンプト エンジニアリングを使用して LLM 要求への入力として提供されます。
注
超高スループットベクター検索機能に関心がありますか? Azure Cosmos DBは、超高スループットの挿入と検索と組み合わせて大規模なベクター データセット用に設計された拡張ベクター検索機能を開発しています。 予測可能で待ち時間が短く、コスト効率に優れ、1 秒あたり数百万のクエリ (QPS) に対応できます。 サインアップして、早期アクセスの機会の詳細を確認し、これらの機能が利用可能になったときに通知を受け取ります。
ベクトル データベース関連の概念
埋め込み
埋め込みは、機械学習モデルとアルゴリズムで簡単に使用できる特別な形式のデータ表現です。 埋め込みは、テキストのセマンティックな意味の情報密度の高い表現です。 各埋め込みは浮動小数点数のベクトルであり、ベクトル空間内の 2 つの埋め込み間の距離は、元の形式の 2 つの入力間のセマンティック類似性と相関します。 たとえば、2 つのテキストが似ている場合、それらのベクトル表現も似ているはずです。 埋め込みを元のデータと共に格納できるベクトル データベース拡張機能により、データの整合性、スケール、パフォーマンスが確保されます。
ベクトル検索
ベクトル検索は、プロパティ フィールドの完全一致ではなく、データ特性に基づいて類似項目を検索するのに便利な方法です。 この手法は、類似したテキストの検索、関連する画像の検索、おすすめ候補の作成、異常の検出などのアプリケーションで役立ちます。
Azure OpenAI Embeddings や Hugging Face on Azure などの埋め込み API を使用して、機械学習モデルで作成したデータのベクトル表現(数値のリスト)を取得することによって機能します。 次に、データ ベクトルとクエリ ベクトル間の距離を測定します。 クエリ ベクトルに最も近いデータ ベクトルは、意味的に最も似ていると判明したものです。
ネイティブ ベクトル検索機能を使うと、他のアプリケーション データと共に高次元ベクトル データの保存、インデックス付け、検索を直接行うための効率的な方法を実現できます。 このアプローチは、データをコストの高い代替ベクトル データベースに移行する必要をなくし、AI 駆動型アプリケーションのシームレスな統合を実現します。
プロンプトとプロンプト エンジニアリング
プロンプトは、LLM への命令、または LLM が構築できるコンテキスト データとして機能する特定のテキストまたは情報を指します。 プロンプトは、質問、ステートメント、コード スニペットなど、さまざまな形式を取る可能性があります。 プロンプトは次のように機能します。
- LLMに指示を与える命令
- 処理のために LLM に情報を提供するプライマリ コンテンツ
- 特定のタスクまたはプロセスにモデルを条件付けするのに役立つ例
- LLM の出力を正しい方向に向けるキュー
- LLM が出力の生成に使用できる補足情報を表すサポート コンテンツ
シナリオに適したプロンプトを作成するプロセスは、プロンプト エンジニアリングと呼ばれます。 プロンプト エンジニアリングのプロンプトとベスト プラクティスの詳細については、「 システム メッセージの設計」を参照してください。
トークン
トークンは、入力テキストをより小さなセグメントに分割することによって生成されるテキストの小さなチャンクです。 これらのセグメントは、単語、または、1 文字から単語全体までの異なる長さを持つ文字のグループから成ります。 たとえば、hamburger という単語は、ham、bur、ger などのトークンに分割され、pear のような短くて一般的な単語は 1 つのトークンと見なされます。 ChatGPT、GPT-3.5、GPT-4 などの LLM は、処理のために単語を複数のトークンに分割します。 [戻る]
検索拡張生成
取得拡張生成 (RAG) は、ベクトル データベースに格納されているものなど、グラウンディング データを提供するベクトル検索のような情報取得システムを追加することによって、ChatGPT、GPT-3.5、または GPT-4 などの LLM の機能を拡張するアーキテクチャです。 このアプローチにより、LLM は、ベクトル化されたドキュメント、画像、オーディオ、動画などから取得したカスタム データに基づいて、コンテキストに関連した正確な応答を生成できます。
NoSQLにAzure Cosmos DBを使用する単純な RAG パターンでは、次の可能性があります。
Azure Cosmos DB NoSQL Vector Index - コンテナー ベクター ポリシーとベクター インデックスを使用してデータベースとコンテナーを設定する
- NoSQL用のAzure Cosmos DBデータベースとコンテナーにデータを挿入する
- Azure OpenAI Embeddings を使用してデータ プロパティから埋め込みを作成する
- NoSQLのAzure Cosmos DBをリンクします。
- 埋め込みプロパティに対してベクトル インデックスを作成します
- ユーザー プロンプトに基づいてベクトル類似性検索を実行する関数を作成します
- Azure OpenAI Completions モデルを使用してデータに対する質問の回答を実行する
RAG パターンは、プロンプト エンジニアリングを使用して、モデルにより多くのコンテキスト情報を提供することで応答品質を向上させる役割を果たします。 RAG を使用することで、関連する外部ソースを生成プロセスに組み込むことで、モデルがより広範なナレッジ ベースを適用できるため、より包括的で情報に基づいた応答が得られます。 詳細については、「LLMの基盤」を参照してください。
統合ベクトル データベース機能の実装方法
Azure Cosmos DBとそのさまざまな互換性 API の統合ベクター データベース機能を実装できます。
NoSQL API
NoSQLのAzure Cosmos DBは、世界初のサーバーレス NoSQL ベクター データベースです。 ベクトルとデータを
DiskANN を使用すると、99.999% SLA (HA 対応)、geo レプリケーション、サーバーレスからプロビジョニング済みスループット (RU) へのシームレスな移行など、NoSQLのAzure Cosmos DBのすべての利点を 1 つのデータ ストアで利用しながら、非常に正確で待機時間の短いクエリを任意のスケールで実行できます。
リンクとサンプル
- ChatGPT の背後にあるデータベースは何ですか? - Microsoftの仕組み
- Azure Cosmos DB の NoSQL におけるベクトルインデックス
- VectorDistance システム関数NoSQLクエリ
- Azure Cosmos DB for NoSQL におけるベクター検索
- Python - Notebook チュートリアル
- C# - AKSとSemantic Kernelを使用して、自分だけのCopilotソリューション アクセラレーターを構築します
- C# - 独自のCopilot サンプル アプリとハンズオン ラボを構築します
- Python - ムービー チャットボット
コード サンプル
- Python ノートブック - LangChainチュートリアルを通じたベクターデータベース統合
- Python Notebook - LangChainを通じたLLMキャッシング統合チュートリアル
- Python - LlamaIndex の統合
- Python - Semantic Kernel メモリ統合
- Python Notebook - Movie Chatbot
PostgreSQLのためのAPI
Azure Cosmos DB for PostgreSQL でネイティブに統合されたベクター データベースを使用します。これは、高次元ベクター データを他のアプリケーション データと直接格納、インデックス付け、検索する効率的な方法を提供します。 このアプローチは、データをコストの高い代替ベクトル データベースに移行する必要をなくし、AI 駆動型アプリケーションのシームレスな統合を実現します。