AIエージェント開発におけるMicrosoftセマンティックカーネル向けElasticsearch Vector Store Connectorの使い方

Microsoft Semantic Kernel は、AI エージェントを簡単に構築し、最新の AI モデルを C#、Python、または Java コードベースに統合できる軽量のオープンソース開発キットです。Semantic Kernel Elasticsearch Vector Store Connector のリリースにより、AI エージェントの構築に Semantic Kernel を使用する開発者は、Semantic Kernel の抽象化を引き続き使用しながら、Elasticsearch をスケーラブルなエンタープライズ グレードのベクター ストアとしてプラグインできるようになりました。

Elasticsearchは、業界をリードする生成AIツールやプロバイダーとネイティブに統合されています。RAG応用編やElasticベクトルデータベースで本番環境対応のアプリを構築する方法についてのウェビナーをご覧ください。

ユースケースに最適な検索ソリューションを構築するには、無料のクラウドトライアルを始めるか、ローカルマシンでElasticを試してみてください。

Microsoft Semantic Kernel チームと連携して、 Microsoft Semantic Kernel (.NET) ユーザー向けに Semantic Kernel Elasticsearch Vector Store Connector が利用可能になったことを発表します。セマンティック カーネルは、ベクター ストアからのより関連性の高いデータ駆動型の応答を使用して大規模言語モデル (LLM) を強化する機能など、エンタープライズ グレードの AI エージェントの構築を簡素化します。Semantic Kernel は、Elasticsearch などの Vector Stores と対話するためのシームレスな抽象化レイヤーを提供し、レコードのコレクションの作成、一覧表示、削除や、個々のレコードのアップロード、取得、削除などの重要な機能を提供します。

すぐに使用できるセマンティック カーネル Elasticsearch ベクター ストア コネクタは、セマンティック カーネルベクター ストアの抽象化をサポートしており、開発者は AI エージェントの構築時に Elasticsearch をベクター ストアとしてプラグインすることが非常に簡単になります。

Elasticsearch はオープンソース コミュニティに強固な基盤を持ち、最近AGPL ライセンスを採用しました。これらのツールは、オープンソースの Microsoft Semantic Kernel と組み合わせることで、強力なエンタープライズ対応ソリューションを提供します。このコマンドcurl -fsSL https://elastic.co/start-local | sh (詳細についてはstart-localを参照) を実行して数分で Elasticsearch を起動し、ローカルで開始できます。その後、AI エージェントを本番稼働させながら、クラウドホスト バージョンまたはセルフホストバージョンに移行できます。

このブログでは、Semantic Kernel を使用する際にSemantic Kernel Elasticsearch Vector Store Connector を使用する方法について説明します。コネクタの Python バージョンは将来提供される予定です。

高レベルのシナリオ: Semantic Kernel と Elasticsearch を使用した RAG アプリの構築

次のセクションでは例を見ていきます。大まかに言うと、ユーザーの質問を入力として受け取り、回答を返す RAG (Retrieval Augmented Generation) アプリケーションを構築しています。LLM として Azure OpenAI (ローカル LLMも使用可能)、ベクター ストアとして Elasticsearch、すべてのコンポーネントを結び付けるフレームワークとして Semantic Kernel (.net) を使用します。

RAG アーキテクチャに精通していない場合は、次の記事で簡単に概要を把握できます: https://www.elastic.co/search-labs/blog/retrieval-augmented-generation-rag

回答は、Elasticsearch vectorstore から取得され、質問に関連するコンテキストが入力する LLM によって生成されます。応答には、LLM によってコンテキストとして使用されたソースも含まれます。

RAGの例

この具体的な例では、社内のホテル データベースに保存されているホテルについてユーザーが質問できるアプリケーションを構築します。ユーザーは例えばさまざまな基準に基づいて特定のホテルを検索したり、ホテルのリストを要求したりできます。

サンプル データベースでは、100 件のエントリを含むホテルのリストを生成しました。コネクタのデモをできるだけ簡単に試せるように、サンプル サイズは意図的に小さくなっています。実際のアプリケーションでは、特に非常に大量のデータを扱う場合、Elasticsearch コネクタは `InMemory` ベクトル ストア実装などの他のオプションよりも優位性を発揮します。

完全なデモ アプリケーションは、Elasticsearch ベクター ストア コネクタリポジトリにあります。

まず、必要な NuGet パッケージと using ディレクティブをプロジェクトに追加することから始めましょう。

これで、データ モデルを作成し、セマンティック カーネル固有の属性を指定して、ストレージ モデル スキーマとテキスト検索のヒントを定義できるようになりました。

ストレージ モデル スキーマ属性 (`VectorStore*`) は、Elasticsearch Vector Store Connector の実際の使用に最も関連しています。具体的には次のようになります。

  • VectorStoreRecordKey レコード クラスのプロパティを、ベクトル ストアにレコードが格納されるキーとしてマークします。
  • VectorStoreRecordData レコード クラスのプロパティを 'data' としてマークします。
  • VectorStoreRecordVector レコード クラスのプロパティをベクトルとしてマークします。

これらの属性はすべて、ストレージ モデルをさらにカスタマイズするために使用できるさまざまなオプション パラメーターを受け入れます。たとえば、 VectorStoreRecordKey の場合、異なる距離関数や異なるインデックス タイプを指定することが可能です。

テキスト検索属性 ( TextSearch* ) は、この例の最後のステップで重要になります。これらについては後ほど説明します。

次のステップでは、セマンティック カーネル エンジンを初期化し、コア サービスへの参照を取得します。実際のアプリケーションでは、サービス コレクションに直接アクセスするのではなく、依存性注入を使用する必要があります。同じことがハードコードされた構成とシークレットにも当てはまります。これらは、代わりに構成プロバイダーを使用して読み取る必要があります。

vectorStoreCollectionサービスを使用してコレクションを作成し、いくつかのデモ レコードを取り込むことができるようになりました。

これは、セマンティック カーネルが、複雑なベクトル ストアの使用を、いくつかの単純なメソッド呼び出しにまで削減する方法を示しています。

内部的には、Elasticsearch に新しいインデックスが作成され、必要なすべてのプロパティ マッピングが作成されます。その後、データ セットは完全に透過的にストレージ モデルにマッピングされ、最終的にインデックスに保存されます。以下は Elasticsearch でのマッピングの様子です。

embeddings.GenerateEmbeddingsAsync()は、構成された Azure AI Embeddings Generation サービスを透過的に呼び出しました。

このデモの最後のステップでは、さらに多くの魔法が観察できます。

InvokePromptAsyncを 1 回呼び出すだけで、ユーザーがデータについて質問したときに、次のすべての操作が実行されます。

1.ユーザーの質問の埋め込みが生成される

2. ベクトルストアで関連するエントリを検索する

3. クエリの結果はプロンプトテンプレートに挿入されます

4. 最終プロンプトの形式で実際のクエリがAIチャット補完サービスに送信されます。

以前データ モデルで定義したTextSearch*属性を覚えていますか?これらの属性により、プロンプト テンプレート内の対応するプレースホルダーを使用できるようになります。これらのプレースホルダーには、ベクター ストア内のエントリからの情報が自動的に入力されます。

「屋上バーがあるホテルをすべて教えてください。」という質問に対する最終的な回答は次のとおりです。

答えは、hotels.csvの次のエントリを正しく参照しています。

この例は、Microsoft Semantic Kernel を使用すると、よく考えられた抽象化によって複雑さが大幅に軽減され、非常に高いレベルの柔軟性が実現されることを示しています。たとえば、コードの 1 行を変更するだけで、コードの他の部分をリファクタリングすることなく、使用されているベクトル ストアまたは AI サービスを置き換えることができます。

同時に、このフレームワークは、`InvokePrompt` 関数やテンプレート、検索プラグイン システムなどの膨大な高レベル機能を提供します。

完全なデモ アプリケーションは、Elasticsearch ベクター ストア コネクタ リポジトリにあります。

Elasticsearchで他に何ができるのか

Elasticsearch とセマンティックカーネル: 次は何?

  • .NET で GenAI アプリケーションを構築する際に、Elasticsearch ベクター ストアを Semantic Kernel に簡単にプラグインする方法を示しました。次回の Python 統合にご期待ください。
  • Semantic Kernel はハイブリッド検索などの高度な検索機能の抽象化を構築するため、Elasticsearch Connect を使用すると、.NET 開発者は Semantic Kernel を使用しながらそれらを簡単に実装できるようになります。

よくあるご質問

Microsoft セマンティック カーネルとは何ですか?

Microsoft Semantic Kernel は、AI エージェントを簡単に構築し、最新の AI モデルを C#、Python、または Java コードベースに統合できる軽量のオープンソース開発キットです。

関連記事

最先端の検索体験を構築する準備はできましたか?

十分に高度な検索は 1 人の努力だけでは実現できません。Elasticsearch は、データ サイエンティスト、ML オペレーター、エンジニアなど、あなたと同じように検索に情熱を傾ける多くの人々によって支えられています。ぜひつながり、協力して、希望する結果が得られる魔法の検索エクスペリエンスを構築しましょう。

はじめましょう