共用方式為


使用 Weaviate Vector Store 連接器 (預覽)

警告

語意核心向量存放區功能處於預覽狀態,且需要重大變更的改善可能仍會在發行前有限的情況下發生。

概觀

Weaviate Vector Store 連接器可用來存取和管理 Weaviate 中的數據。 連接器具有下列特性。

功能區域 支援
集合對應至 Weaviate 集合
支援的索引鍵屬性類型 Guid
支援的數據類型
  • 字串
  • byte
  • short
  • int
  • long
  • double
  • float
  • decimal
  • bool
  • Datetime
  • DateTimeOffset
  • Guid
  • 和這些類型的可列舉專案
支援的向量屬性類型
  • ReadOnlyMemory<float>
  • ReadOnlyMemory<double>
支援的索引類型
  • Hnsw
  • 一般
  • 動態
支援的距離函式
  • CosineDistance
  • DotProductSimilarity
  • EuclideanSquaredDistance
  • 漢明
  • 曼哈頓
支援記錄中的多個向量 Yes
是否支援IsFilterable? Yes
是否支援IsFullTextSearchable? Yes
支援的 StoragePropertyName? 否,請改用 JsonSerializerOptionsJsonPropertyNameAttribute如需詳細資訊,請參閱這裡。

限制

值得注意的 Weaviate 連接器功能限制。

功能區域 因應措施
不支援針對單一向量物件使用 'vector' 屬性 支援改用 'vectors' 屬性。

開始使用

將 Weaviate Vector Store 連接器 NuGet 套件新增至您的專案。

dotnet add package Microsoft.SemanticKernel.Connectors.Weaviate --prerelease

您可以使用 Semantic Kernel 所提供的擴充方法,將向量存放區新增至 IServiceCollectionKernelBuilder可用的相依性插入容器或相依性插入容器。 Weaviate 向量存放區會使用 HttpClient 來與 Weaviate 服務通訊。 提供 Weaviate 服務的 URL/端點有兩個選項。 它可透過選項或設定的 HttpClient基位址來提供。

第一個範例示範如何透過選項設定服務 URL。 另請注意,這些方法會擷取 HttpClient 實例,以便從相依性插入服務提供者呼叫Weaviate服務。

using Microsoft.SemanticKernel;

// Using Kernel Builder.
var kernelBuilder = Kernel
    .CreateBuilder()
    .AddWeaviateVectorStore(options: new() { Endpoint = new Uri("http://localhost:8080/v1/") });
using Microsoft.SemanticKernel;

// Using IServiceCollection with ASP.NET Core.
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddWeaviateVectorStore(options: new() { Endpoint = new Uri("http://localhost:8080/v1/") });

您也可以在其中指定自己的 HttpClient 多載。 在此情況下,可以透過 HttpClient BaseAddress 選項來設定服務 URL。

using System.Net.Http;
using Microsoft.SemanticKernel;

// Using Kernel Builder.
var kernelBuilder = Kernel.CreateBuilder();
using HttpClient client = new HttpClient { BaseAddress = new Uri("http://localhost:8080/v1/") };
kernelBuilder.AddWeaviateVectorStore(client);
using System.Net.Http;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.SemanticKernel;

// Using IServiceCollection with ASP.NET Core.
var builder = WebApplication.CreateBuilder(args);
using HttpClient client = new HttpClient { BaseAddress = new Uri("http://localhost:8080/v1/") };
builder.Services.AddWeaviateVectorStore(client);

您也可以直接建構 Weaviate Vector Store 實例。

using System.Net.Http;
using Microsoft.SemanticKernel.Connectors.Weaviate;

var vectorStore = new WeaviateVectorStore(
    new HttpClient { BaseAddress = new Uri("http://localhost:8080/v1/") });

可以建構具名集合的直接參考。

using System.Net.Http;
using Microsoft.SemanticKernel.Connectors.Weaviate;

var collection = new WeaviateVectorStoreRecordCollection<Hotel>(
    new HttpClient { BaseAddress = new Uri("http://localhost:8080/v1/") },
    "skhotels");

如有需要,當使用上述任何機制時,可以傳遞 Api 金鑰作為選項,例如

using Microsoft.SemanticKernel;

var kernelBuilder = Kernel
    .CreateBuilder()
    .AddWeaviateVectorStore(options: new() { Endpoint = new Uri("http://localhost:8080/v1/"), ApiKey = secretVar });

資料對應

Weaviate Vector Store 連接器會在從數據模型對應至記憶體時提供預設對應程式。 Weaviate 需要屬性對應至標識符、承載和向量群組。 默認對應程式會使用模型批註或記錄定義來判斷每個屬性的類型,並執行此對應。

  • 批註為索引鍵的數據模型屬性將會對應至 Weaviate id 屬性。
  • 批註為數據的數據模型屬性將會對應至 Weaviate properties 物件。
  • 標註為向量的數據模型屬性將會對應至 Weaviate vectors 物件。

默認對應程式會使用 System.Text.Json.JsonSerializer 轉換成記憶體架構。 這表示如果需要與資料模型屬性名稱不同的記憶體名稱,則支援 使用 JsonPropertyNameAttribute

以下是數據集 JsonPropertyNameAttribute 的數據模型範例,以及如何在 Weaviate 中表示。

using System.Text.Json.Serialization;
using Microsoft.Extensions.VectorData;

public class Hotel
{
    [VectorStoreRecordKey]
    public ulong HotelId { get; set; }

    [VectorStoreRecordData(IsFilterable = true)]
    public string HotelName { get; set; }

    [VectorStoreRecordData(IsFullTextSearchable = true)]
    public string Description { get; set; }

    [JsonPropertyName("HOTEL_DESCRIPTION_EMBEDDING")]
    [VectorStoreRecordVector(4, DistanceFunction.EuclideanDistance, IndexKind.QuantizedFlat)]
    public ReadOnlyMemory<float>? DescriptionEmbedding { get; set; }
}
{
    "id": 1,
    "properties": { "HotelName": "Hotel Happy", "Description": "A place where everyone can be happy." },
    "vectors": {
        "HOTEL_DESCRIPTION_EMBEDDING": [0.9, 0.1, 0.1, 0.1],
    }
}

即將推出

更多信息即將推出。

即將推出

更多信息即將推出。