Använda Couchbase-anslutningsappen (förhandsversion)
Varning
Funktionen Semantic Kernel Vector Store är i förhandsversion, och förbättringar som kräver icke-bakåtkompatibla ändringar kan fortfarande ske under begränsade omständigheter före lanseringen.
Överblick
Couchbase Vector Store-anslutningsappen kan användas för att komma åt och hantera data i Couchbase. Anslutningsappen har följande egenskaper.
Funktionsområde | Stöd |
---|---|
Samlingskartor till | Couchbase-samling |
Nyckelegenskapstyper som stöds | sträng |
Dataegenskapstyper som stöds | Alla typer som stöds av System.Text.Json (antingen inbyggda eller med hjälp av en anpassad konverterare) |
Egenskapstyper för vektorer som stöds |
|
Indextyper som stöds | Ej tillämpligt |
Avståndsfunktioner som stöds |
|
Filtersatser som stöds |
|
Stödjer flera vektorer i ett register | Ja |
Stöds IsFilterable? | Nej |
Stöds IsFullTextSearchable? | Nej |
Stöds StoragePropertyName? | Nej, använd JsonSerializerOptions och JsonPropertyNameAttribute i stället.
Mer information finns här. |
Komma igång
Lägg till NuGet-paketet för Couchbase Vector Store-anslutningsappen i projektet.
dotnet add package CouchbaseConnector.SemanticKernel --prerelease
Du kan lägga till vektorlagret i beroendeinjektionscontainern som är tillgänglig på KernelBuilder
eller i beroendeinjektionscontainern IServiceCollection
med hjälp av tilläggsmetoder som tillhandahålls av Semantic Kernel.
using Microsoft.SemanticKernel;
// Using Kernel Builder.
var kernelBuilder = Kernel.CreateBuilder()
.AddCouchbaseVectorStore(
connectionString: "couchbases://your-cluster-address",
username: "username",
password: "password",
bucketName: "bucket-name",
scopeName: "scope-name");
using Microsoft.Extensions.DependencyInjection;
// Using IServiceCollection with ASP.NET Core.
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddCouchbaseVectorStore(
connectionString: "couchbases://your-cluster-address",
username: "username",
password: "password",
bucketName: "bucket-name",
scopeName: "scope-name");
Tilläggsmetoder som inte har några parametrar tillhandahålls också. Dessa kräver att en instans av klassen IScope
registreras separat med containern för beroendeinmatning.
using Microsoft.Extensions.DependencyInjection;
using Microsoft.SemanticKernel;
using Couchbase;
using Couchbase.KeyValue;
// Using Kernel Builder.
var kernelBuilder = Kernel.CreateBuilder();
kernelBuilder.Services.AddSingleton<ICluster>(sp =>
{
var clusterOptions = new ClusterOptions
{
ConnectionString = "couchbases://your-cluster-address",
UserName = "username",
Password = "password"
};
return Cluster.ConnectAsync(clusterOptions).GetAwaiter().GetResult();
});
kernelBuilder.Services.AddSingleton<IScope>(sp =>
{
var cluster = sp.GetRequiredService<ICluster>();
var bucket = cluster.BucketAsync("bucket-name").GetAwaiter().GetResult();
return bucket.Scope("scope-name");
});
// Add Couchbase Vector Store
kernelBuilder.Services.AddCouchbaseVectorStore();
using Microsoft.Extensions.DependencyInjection;
using Microsoft.SemanticKernel;
using Couchbase.KeyValue;
using Couchbase;
// Using IServiceCollection with ASP.NET Core.
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddSingleton<ICluster>(sp =>
{
var clusterOptions = new ClusterOptions
{
ConnectionString = "couchbases://your-cluster-address",
UserName = "username",
Password = "password"
};
return Cluster.ConnectAsync(clusterOptions).GetAwaiter().GetResult();
});
builder.Services.AddSingleton<IScope>(sp =>
{
var cluster = sp.GetRequiredService<ICluster>();
var bucket = cluster.BucketAsync("bucket-name").GetAwaiter().GetResult();
return bucket.Scope("scope-name");
});
// Add Couchbase Vector Store
builder.Services.AddCouchbaseVectorStore();
Du kan skapa en Couchbase Vector Store-instans direkt.
using Couchbase;
using Couchbase.KeyValue;
using Couchbase.SemanticKernel;
var clusterOptions = new ClusterOptions
{
ConnectionString = "couchbases://your-cluster-address",
UserName = "username",
Password = "password"
};
var cluster = await Cluster.ConnectAsync(clusterOptions);
var bucket = await cluster.BucketAsync("bucket-name");
var scope = bucket.Scope("scope-name");
var vectorStore = new CouchbaseVectorStore(scope);
Det går att skapa en direktreferens till en namngiven samling.
using Couchbase;
using Couchbase.KeyValue;
using Couchbase.SemanticKernel;
var clusterOptions = new ClusterOptions
{
ConnectionString = "couchbases://your-cluster-address",
UserName = "username",
Password = "password"
};
var cluster = await Cluster.ConnectAsync(clusterOptions);
var bucket = await cluster.BucketAsync("bucket-name");
var scope = bucket.Scope("scope-name");
var collection = new CouchbaseFtsVectorStoreRecordCollection<Hotel>(
scope,
"hotelCollection");
Datakartläggning
Couchbase-anslutningsappen använder System.Text.Json.JsonSerializer
för datamappning. Egenskaper i datamodellen serialiseras till ett JSON-objekt och mappas till Couchbase Storage.
Använd attributet JsonPropertyName
för att mappa en egenskap till ett annat namn i Couchbase Storage. Du kan också konfigurera JsonSerializerOptions
för avancerad anpassning.
using Couchbase.SemanticKernel;
using Couchbase.KeyValue;
using System.Text.Json;
var jsonSerializerOptions = new JsonSerializerOptions
{
PropertyNamingPolicy = JsonNamingPolicy.CamelCase
};
var options = new CouchbaseFtsVectorStoreRecordCollectionOptions<Hotel>
{
JsonSerializerOptions = jsonSerializerOptions
};
var collection = new CouchbaseFtsVectorStoreRecordCollection<Hotel>(scope, "hotels", options);
Med hjälp av ovanstående anpassade JsonSerializerOptions
som använder CamelCase
mappas följande datamodell till json nedan.
using System.Text.Json.Serialization;
using Microsoft.Extensions.VectorData;
public class Hotel
{
[JsonPropertyName("hotelId")]
[VectorStoreRecordKey]
public string HotelId { get; set; }
[JsonPropertyName("hotelName")]
[VectorStoreRecordData]
public string HotelName { get; set; }
[JsonPropertyName("description")]
[VectorStoreRecordData]
public string Description { get; set; }
[JsonPropertyName("descriptionEmbedding")]
[VectorStoreRecordVector(Dimensions: 4, DistanceFunction.DotProductSimilarity)]
public ReadOnlyMemory<float> DescriptionEmbedding { get; set; }
}
{
"hotelId": "h1",
"hotelName": "Hotel Happy",
"description": "A place where everyone can be happy",
"descriptionEmbedding": [0.9, 0.1, 0.1, 0.1]
}
Stöds inte
Stöds inte.
Stöds inte
Stöds inte.