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 |
|
Ondersteunde gegevenseigenschapstypen |
|
Ondersteunde vectoreigenschappentypen |
|
Ondersteunde indextypen |
|
Ondersteunde afstandsfuncties |
|
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.