次の方法で共有


.NET AI アプリ用のベクター データベース

ベクター データベースは、ベクター 埋め込みを格納および管理します。 埋め込みとは、セマンティックな意味を保持するデータの数値表現です。 単語、ドキュメント、画像、オーディオ、その他の種類のデータはすべてベクトル化できます。 埋め込みを使用すると、AI モデルが入力の意味を理解するのに役立ちます。これにより、テキストの要約、コンテキストに関連するデータの検索、テキストの説明からの画像の作成などの比較と変換を実行できます。

たとえば、ベクトル データベースを使用して次のことができます。

  • コンテンツ、テーマ、センチメント、スタイルに基づいて、類似の画像、ドキュメント、曲を識別します。
  • 特性、特徴、およびユーザー グループに基づいて類似製品を識別します。
  • ユーザー設定に基づいてコンテンツ、製品、またはサービスを推奨します。
  • 複雑な要件を満たすために、多くの選択肢の中から最適なオプションを特定します。
  • 主要なパターンまたは通常のパターンとは異なるデータの異常または不正なアクティビティを特定します。

ベクトル データベースは、プロパティ フィールドの完全一致ではなく、データ特性に基づいて類似の項目を検索するベクトル検索機能を提供します。 ベクター検索は、 Azure OpenAI 埋め込みモデルなどの AI 埋め込みモデルを使用して作成したデータのベクター表現を分析することによって機能します。 検索プロセスでは、データ ベクトルとクエリ ベクトル間の距離が測定されます。 クエリ ベクターに最も近いデータ ベクターは、意味的に最も似ています。

Azure Cosmos DB for MongoDB 仮想コアなどの一部のサービスでは、データのネイティブ ベクター検索機能が提供されます。 その他のデータベースでも、Azure AI 検索などのサービスを使用して格納されているデータにインデックスを付けることで、ベクトル検索を強化できます。このサービスは、データをスキャンしてインデックスを作成し、ベクトル検索機能を提供します。

.NET と OpenAI を使用したベクトル検索ワークフロー

ベクトル データベースとその検索機能は、Azure OpenAI を使用した RAG パターン ワークフローで特に役立ちます。 このパターンを使用すると、データに関する意味的に豊富な知識を持つ AI モデルを拡張できます。 ベクター データベースを使用する一般的な AI ワークフローには、次の手順が含まれます。

  1. OpenAI 埋め込みモデルを使用して、データの埋め込みを作成します。
  2. ベクトル データベースまたは検索サービスに埋め込みを格納し、インデックスを付けます。
  3. ユーザー プロンプトをアプリケーションから埋め込みに変換します。
  4. ユーザー プロンプトの埋め込みをデータベース内の埋め込みと比較して、データ間でベクター検索を実行します。
  5. gpt-4o などの言語モデルを使用して、ベクター検索結果からわかりやすい補完を組み立てます。

このフローの実践的な例については、 .NET アプリのチュートリアルでベクター検索を使用して RAG を使用して Azure OpenAI を実装 する方法に関するチュートリアルを参照してください。

RAG パターンのその他の利点は次のとおりです。

  • AI モデルからのユーザー プロンプトに対するコンテキストに関連した正確な応答を生成します。
  • LLM トークンの制限をデータベースベクター検索で克服します。主要な処理はこの検索によって行われています。
  • 更新されたデータに対して頻繁に微調整を行い、コストを削減します。

Microsoft.Extensions.VectorData ライブラリ

📦 Microsoft.Extensions.VectorData.Abstractions パッケージは、.NET のベクター ストアと対話するための抽象化の統一されたレイヤーを提供します。 これらの抽象化により、1 つの API に対してコードを記述し、基になるベクター ストアをアプリケーションに最小限の変更でスワップアウトできます。

ライブラリには、次の主要な機能が用意されています。

  • 統合データ モデル: .NET 属性を使用してデータ モデルを 1 回定義し、サポートされているベクター ストア全体で使用します。
  • CRUD 操作: ベクター ストア内のレコードを作成、読み取り、更新、および削除します。
  • ベクター検索とテキスト検索: ベクター検索を使用したセマンティック類似性またはテキスト検索を使用したキーワードによるレコードのクエリを実行します。
  • コレクション管理: ベクター ストア内のコレクション (テーブルまたはインデックス) を作成、一覧表示、および削除します。

主要な抽象化

Microsoft.Extensions.VectorData.Abstractions ライブラリには、次の主な抽象クラスが公開されています。

  • VectorStore: ベクター データベースの最上位クラス。 コレクションの取得と管理に使用します。
  • VectorStoreCollection<TKey,TRecord>: ベクター ストア内のレコードの名前付きコレクションを表します。 CRUD および検索操作を実行するために使用します。 また、 IVectorSearchable<TRecord>も実装します。
  • IKeywordHybridSearchable<TRecord>: ベクトルの類似性とキーワード マッチングを組み合わせた、ハイブリッド検索をサポートするコレクションによって実装されます。

データ モデル定義、CRUD 操作、ベクター検索、フィルター処理、ハイブリッド検索、埋め込み生成に関する詳細なガイドについては、「 .NET AI アプリでのベクター ストアの使用」を参照してください。

ベクター ストア プロバイダー

Microsoft.Extensions.VectorData.Abstractions パッケージは抽象化を定義し、個別のプロバイダー パッケージは特定のベクター データベースの実装を提供します。 ベクター データベースに一致するプロバイダー ( Microsoft.SemanticKernel.Connectors.AzureAISearch など) を選択します。

パッケージ名に "SemanticKernel" が含まれているにもかかわらず、これらのプロバイダーはセマンティック カーネルとは関係なく、Agent Framework を含む .NET のどこでも使用できます。

すべてのプロバイダーが同じ VectorStoreVectorStoreCollection<TKey,TRecord> 抽象クラスを実装するため、アプリケーション ロジックを変更せずにそれらを切り替えることができます。

ヒント

開発とテスト中にインメモリ プロバイダー (Microsoft.SemanticKernel.Connectors.InMemory) を使用します。 外部サービスや構成は必要なく、後で運用プロバイダーにスワップアウトできます。