共用方式為


使用 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
  • NegativeDotProductSimilarity
  • EuclideanSquaredDistance
  • 漢明
  • 曼哈頓
支援的篩選子句
  • AnyTagEqualTo
  • EqualTo
支援記錄中的多個向量 Yes
是否支援IsFilterable? Yes
是否支援IsFullTextSearchable? Yes
支援的 StoragePropertyName? 否,請改用 JsonSerializerOptionsJsonPropertyNameAttribute如需詳細資訊,請參閱這裡。

限制

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

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

警告

Weaviate 需要集合名稱以大寫字母開頭。 如果您沒有提供大寫字母的集合名稱,當您嘗試建立集合時,Weaviate 會傳回錯誤。 您將看到的錯誤是 Cannot query field "mycollection" on type "GetObjectsObj". Did you mean "Mycollection"?,其中 mycollection 是您的集合名稱。 在此範例中,如果您改為將集合名稱變更為 Mycollection,這會修正錯誤。

開始使用

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

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

您可以使用 Semantic Kernel 所提供的擴充方法,將向量存放區新增至 KernelBuilderIServiceCollection可用的相依性插入容器或相依性插入容器。 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 多載。 在此情況下,可以透過 HttpClientBaseAddress 選項來設定服務 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],
    }
}

即將推出

更多信息即將推出。

即將推出

更多信息即將推出。