Verwenden des Azure CosmosDB NoSQL Vector Store-Connectors (Vorschau)
Warnung
Die Funktionalität des semantischen Kernelvektorspeichers befindet sich in der Vorschau, und Verbesserungen, die fehlerhafte Änderungen erfordern, können unter begrenzten Umständen noch vor der Veröffentlichung auftreten.
Übersicht
Der Azure CosmosDB NoSQL Vector Store-Connector kann verwendet werden, um auf Daten in Azure CosmosDB NoSQL zuzugreifen und sie zu verwalten. Der Verbinder weist die folgenden Merkmale auf.
Featurebereich | Unterstützung |
---|---|
Auflistungszuordnungen | Azure Cosmos DB NoSQL-Container |
Unterstützte Schlüsseleigenschaftentypen |
|
Unterstützte Datentypen für Datentypen |
|
Unterstützte Vektoreigenschaftentypen |
|
Unterstützte Indextypen |
|
Unterstützte Entfernungsfunktionen |
|
Unterstützt mehrere Vektoren in einem Datensatz | Ja |
IstFilterbar unterstützt? | Ja |
WirdFullTextSearchable unterstützt? | Ja |
StoragePropertyName wird unterstützt? | Nein, verwenden JsonSerializerOptions Und JsonPropertyNameAttribute stattdessen. Weitere Informationen finden Sie hier. |
Erste Schritte
Fügen Sie ihrem Projekt das NuGet-Paket des Azure CosmosDB NoSQL Vector Store-Connectors hinzu.
dotnet add package Microsoft.SemanticKernel.Connectors.AzureCosmosDBNoSQL --prerelease
Sie können den Vektorspeicher dem Container zum Einfügen von Abhängigkeiten hinzufügen, der für den KernelBuilder
Container für Abhängigkeitseinfügungen verfügbar ist, oder dem IServiceCollection
Container zum Einfügen von Abhängigkeiten mithilfe von Erweiterungsmethoden, die vom semantischen Kernel bereitgestellt werden.
using Microsoft.SemanticKernel;
// Using Kernel Builder.
var kernelBuilder = Kernel
.CreateBuilder()
.AddAzureCosmosDBNoSQLVectorStore(connectionString, databaseName);
using Microsoft.SemanticKernel;
// Using IServiceCollection with ASP.NET Core.
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddAzureCosmosDBNoSQLVectorStore(connectionString, databaseName);
Erweiterungsmethoden, die keine Parameter verwenden, werden ebenfalls bereitgestellt. Dazu muss eine Instanz Microsoft.Azure.Cosmos.Database
separat beim Abhängigkeitseinfügungscontainer registriert werden.
using Microsoft.Azure.Cosmos;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.SemanticKernel;
// Using Kernel Builder.
var kernelBuilder = Kernel.CreateBuilder();
kernelBuilder.Services.AddSingleton<Database>(
sp =>
{
var cosmosClient = new CosmosClient(connectionString);
return cosmosClient.GetDatabase(databaseName);
});
kernelBuilder.AddAzureCosmosDBNoSQLVectorStore();
using Microsoft.Azure.Cosmos;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.SemanticKernel;
// Using IServiceCollection with ASP.NET Core.
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddSingleton<Database>(
sp =>
{
var cosmosClient = new CosmosClient(connectionString);
return cosmosClient.GetDatabase(databaseName);
});
builder.Services.AddAzureCosmosDBNoSQLVectorStore();
Sie können eine Azure CosmosDB NoSQL Vector Store-Instanz direkt erstellen.
using Microsoft.Azure.Cosmos;
using Microsoft.SemanticKernel.Connectors.AzureCosmosDBNoSQL;
var cosmosClient = new CosmosClient(connectionString);
var database = cosmosClient.GetDatabase(databaseName);
var vectorStore = new AzureCosmosDBNoSQLVectorStore(database);
Es ist möglich, einen direkten Verweis auf eine benannte Auflistung zu erstellen.
using Microsoft.Azure.Cosmos;
using Microsoft.SemanticKernel.Connectors.AzureCosmosDBNoSQL;
var cosmosClient = new CosmosClient(connectionString);
var database = cosmosClient.GetDatabase(databaseName);
var collection = new AzureCosmosDBNoSQLVectorStoreRecordCollection<Hotel>(
database,
"skhotels");
Datenzuordnung
Der Azure CosmosDB NoSQL Vector Store-Connector stellt beim Zuordnen des Datenmodells zum Speicher eine Standardzuordnung bereit.
Dieser Mapper führt eine direkte Konvertierung der Liste der Eigenschaften im Datenmodell in die Felder in Azure CosmosDB NoSQL durch und verwendet System.Text.Json.JsonSerializer
die Konvertierung in das Speicherschema. Dies bedeutet, dass die Verwendung der JsonPropertyNameAttribute
Datenmodelleigenschaft unterstützt wird, wenn ein anderer Speichername für den Namen der Datenmodelleigenschaft erforderlich ist. Die einzige Ausnahme ist der Schlüssel des Datensatzes, der einem Datenbankfeld mit dem Namen id
zugeordnet ist, da alle CosmosDB NoSQL-Datensätze diesen Namen für IDs verwenden müssen.
Es ist auch möglich, eine benutzerdefinierte Instanz mit einer benutzerdefinierten JsonSerializerOptions
Eigenschaftsbenennungsrichtlinie zu verwenden. Um dies zu ermöglichen, muss dies JsonSerializerOptions
an den AzureCosmosDBNoSQLVectorStoreRecordCollection
Bau übergeben werden.
using System.Text.Json;
using Microsoft.Azure.Cosmos;
using Microsoft.SemanticKernel.Connectors.AzureCosmosDBNoSQL;
var jsonSerializerOptions = new JsonSerializerOptions { PropertyNamingPolicy = JsonNamingPolicy.SnakeCaseUpper };
var cosmosClient = new CosmosClient(connectionString);
var database = cosmosClient.GetDatabase(databaseName);
var collection = new AzureCosmosDBNoSQLVectorStoreRecordCollection<Hotel>(
database,
"skhotels",
new() { JsonSerializerOptions = jsonSerializerOptions });
Mithilfe der oben genannten benutzerdefinierten Benutzerdefinierten JsonSerializerOptions
SnakeCaseUpper
wird das folgende Datenmodell der folgenden JSON zugeordnet.
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,
"HOTEL_NAME": "Hotel Happy",
"DESCRIPTION": "A place where everyone can be happy.",
"HOTEL_DESCRIPTION_EMBEDDING": [0.9, 0.1, 0.1, 0.1],
}
In Kürze verfügbar
Weitere Informationen werden in Kürze verfügbar sein.
In Kürze verfügbar
Weitere Informationen werden in Kürze verfügbar sein.