Delen via


De Azure CosmosDB NoSQL Vector Store-connector gebruiken (preview)

Waarschuwing

De Semantische Kernel Vector Store-functionaliteit is in preview en verbeteringen waarvoor wijzigingen die fouten veroorzaken, kunnen nog steeds in beperkte omstandigheden optreden voordat ze worden uitgebracht.

Overzicht

De Azure CosmosDB NoSQL Vector Store-connector kan worden gebruikt voor toegang tot en beheer van gegevens in Azure CosmosDB NoSQL. De verbindingslijn heeft de volgende kenmerken.

Functiegebied Ondersteuning
Verzamelingstoewijzingen aan Azure Cosmos DB NoSQL-container
Ondersteunde sleuteleigenschapstypen
  • tekenreeks
  • AzureCosmosDBNoSQLCompositeKey
Ondersteunde gegevenseigenschapstypen
  • tekenreeks
  • int
  • long
  • dubbel
  • zwevend
  • bool
  • DateTimeOffset
  • en opsommingen van elk van deze typen
Ondersteunde vectoreigenschappentypen
  • ReadOnlyMemory<float>
  • ReadOnlyMemory<byte>
  • ReadOnlyMemory<sbyte>
  • ReadOnlyMemory<Half>
Ondersteunde indextypen
  • Vast
  • QuantizedFlat
  • DiskAnn
Ondersteunde afstandsfuncties
  • CosineSimilariteit
  • DotProductsimilarity
  • EuclideanDistance
Ondersteunt meerdere vectoren in een record Ja
Wordt Filterable ondersteund? Ja
WordtFullTextSearchable ondersteund? Ja
Ondersteunde StoragePropertyName? Nee, gebruik JsonSerializerOptions en JsonPropertyNameAttribute in plaats daarvan. Zie hier voor meer informatie.

Aan de slag

Voeg het NuGet-pakket van de Azure CosmosDB NoSQL Vector Store-connector toe aan uw project.

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

U kunt het vectorarchief toevoegen aan de container voor afhankelijkheidsinjectie die beschikbaar is op of KernelBuilder aan de IServiceCollection container voor afhankelijkheidsinjectie met behulp van extensiemethoden die worden geleverd door Semantische kernel.

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);

Extensiemethoden waarvoor geen parameters worden gebruikt, worden ook opgegeven. Hiervoor moet een exemplaar Microsoft.Azure.Cosmos.Database afzonderlijk worden geregistreerd bij de container voor afhankelijkheidsinjectie.

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();

U kunt rechtstreeks een Azure CosmosDB NoSQL Vector Store-exemplaar maken.

using Microsoft.Azure.Cosmos;
using Microsoft.SemanticKernel.Connectors.AzureCosmosDBNoSQL;

var cosmosClient = new CosmosClient(connectionString);
var database = cosmosClient.GetDatabase(databaseName);
var vectorStore = new AzureCosmosDBNoSQLVectorStore(database);

Het is mogelijk om een directe verwijzing naar een benoemde verzameling te maken.

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");

Gegevenstoewijzing

De Azure CosmosDB NoSQL Vector Store-connector biedt een standaardtoewijzing bij het toewijzen van het gegevensmodel aan opslag.

Deze mapper voert een directe conversie uit van de lijst met eigenschappen in het gegevensmodel naar de velden in Azure CosmosDB NoSQL en gebruikt System.Text.Json.JsonSerializer om te converteren naar het opslagschema. Dit betekent dat het gebruik van het JsonPropertyNameAttribute bestand wordt ondersteund als een andere opslagnaam voor de naam van de gegevensmodeleigenschap is vereist. De enige uitzondering is de sleutel van de record die is toegewezen aan een databaseveld met de naam id, omdat alle CosmosDB NoSQL-records deze naam moeten gebruiken voor id's.

Het is ook mogelijk om een aangepast exemplaar JsonSerializerOptions te gebruiken met een aangepast naamgevingsbeleid voor eigenschappen. Om dit mogelijk te maken, moet de JsonSerializerOptions aanbouw worden doorgegeven.AzureCosmosDBNoSQLVectorStoreRecordCollection

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 });

Met behulp van de bovenstaande aangepaste JsonSerializerOptions die wordt gebruikt SnakeCaseUpper, wordt het volgende gegevensmodel toegewezen aan de onderstaande json.

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],
}

Binnenkort beschikbaar

Binnenkort meer informatie.

Binnenkort beschikbaar

Binnenkort meer informatie.