Dela via


Använda minnesintern anslutning (förhandsversion)

Varning

Funktionen In-Memory 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 innan de släpps.

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.

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.

Översikt

Anslutningsappen för minnesintern vektorlagring är en Vector Store-implementering som tillhandahålls av semantisk kernel och som inte använder någon extern databas och lagrar data i minnet. Det här vektorarkivet är användbart för prototypscenarier eller där snabba minnesinterna åtgärder krävs.

Anslutningsappen har följande egenskaper.

Funktionsområde Stöd
Kartläggning av samlingar Minnesintern ordlista
Nyckelegenskapstyper som stöds Alla typer som kan jämföras
Dataegenskapstyper som stöds Alla typer
Egenskapstyper för vektorer som stöds
  • ReadOnlyMemory
  • Inbäddning<flyttal>
  • float[]
Indextyper som stöds Lägenhet
Avståndsfunktioner som stöds
  • Cosine-Similäritet
  • CosineDistance
  • DotProduktsimilaritet
  • EuclideanDistance
Filtersatser som stöds
  • NågonTagLikaMed
  • EqualTo
Stöder flera vektorer i en post Ja
Stöds IsIndexed-funktionen? Ja
Stöds fulltextindexerad? Ja
Stöds StorageName? Nej, eftersom lagring är minnesinternt och återanvändning av data därför inte är möjligt är anpassad namngivning inte tillämpligt.
Stöds HybridSearch? Nej

Komma igång

Lägg till nuget-paketet Semantic Kernel Core i projektet.

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

Du kan lägga till vektorlagret i den beroendeinmatningscontainer som är tillgänglig i containern KernelBuilder eller till containern för IServiceCollection beroendeinmatning med hjälp av tilläggsmetoder som tillhandahålls av semantisk kernel.

using Microsoft.Extensions.DependencyInjection;
using Microsoft.SemanticKernel;

// Using Kernel Builder.
var kernelBuilder = Kernel
    .CreateBuilder();
kernelBuilder.Services
    .AddInMemoryVectorStore();
using Microsoft.Extensions.DependencyInjection;
using Microsoft.SemanticKernel;

// Using IServiceCollection with ASP.NET Core.
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddInMemoryVectorStore();

Du kan skapa en InMemory Vector Store-instans direkt.

using Microsoft.SemanticKernel.Connectors.InMemory;

var vectorStore = new InMemoryVectorStore();

Det går att skapa en direktreferens till en namngiven samling.

using Microsoft.SemanticKernel.Connectors.InMemory;

var collection = new InMemoryCollection<string, Hotel>("skhotels");

Översikt

Varning

In-Memory Vector Store har stöd för anpassade filter som kan uttryckas som Python lambda-funktioner, dessa funktioner körs i samma process som huvudprogrammet och kan därför köra godtycklig kod. Vi filtrerar efter vissa tillåtna åtgärder, men du bör inte låta filter anges av ej betrodda källor, inklusive av LLM-indata. Mer information finns i avsnittet Filtrering .

Anslutningsappen för minnesintern vektorlagring är en Vector Store-implementering som tillhandahålls av semantisk kernel och som inte använder någon extern databas och lagrar data i minnet. Det här vektorarkivet är användbart för prototypscenarier eller där snabba minnesinterna åtgärder krävs.

Anslutningsappen har följande egenskaper.

Funktionsområde Stöd
Kartläggning av samlingar Minnesintern ordlista
Nyckelegenskapstyper som stöds De som får användas som dict-nycklar, se Python-dokumentationen för detaljer här
Dataegenskapstyper som stöds Alla typer
Egenskapstyper för vektorer som stöds list[float | int] | numpy-matris
Indextyper som stöds Lägenhet
Avståndsfunktioner som stöds
  • Cosinuslikhet
  • Cosinnavstånd
  • Skalärproduktlikhet
  • Euklidiska avstånd
  • Euklidiska kvadratavstånd
  • Manhattan Avstånd
  • Hamringsavstånd
Stöder flera vektorer i en post Ja
is_filterable stöds? Ja
Stöds "is_full_text_searchable"? Ja

Komma igång

Lägg till Semantic Kernel-paketet i projektet.

pip install semantic-kernel

Du kan skapa butiken och samlingarna därifrån eller skapa samlingarna direkt.

I kodfragmenten nedan antas det att du har en datamodellklass som har definierats med namnet "DataModel".

from semantic_kernel.connectors.in_memory import InMemoryVectorStore

vector_store = InMemoryVectorStore()
vector_collection = vector_store.get_collection(record_type=DataModel, collection_name="collection_name")

Det går att skapa en direktreferens till en namngiven samling.

from semantic_kernel.connectors.in_memory import InMemoryCollection

vector_collection = InMemoryCollection(record_type=DataModel, collection_name="collection_name")

Filtering

Varning

In-Memory Vector Store har stöd för anpassade filter som kan uttryckas som Python lambda-funktioner, dessa funktioner körs i samma process som huvudprogrammet och kan därför köra godtycklig kod. Vi filtrerar efter vissa tillåtna åtgärder, men du bör inte låta filter anges av ej betrodda källor, inklusive av LLM-indata.

In-Memory-anslutningsappen använder en metod för tillåtna listor för filtersäkerhet. Endast följande åtgärder tillåts i filteruttryck:

Tillåtna åtgärder

Kategori Tillåtna åtgärder
Jämförelser ==, !=, <, <=, >, >=, , in, not in, , isis not
Booleska åtgärder and, ornot
Dataåtkomst Attributåtkomst (t.ex. x.field), indexåtkomst (t.ex. x['field']), skivning
literaler Konstanter, listor, tupplar, uppsättningar, ordlistor
Grundläggande aritmetik +, -, *, /, %//

Tillåtna funktioner

Följande inbyggda funktioner och metoder kan användas i filteruttryck:

  • Typkonvertering: str, int, float, bool
  • Sammansättning: len, abs, min, max, sum, any, all
  • Strängmetoder: lower, upper, strip, startswith, , endswithcontains
  • Ordlistemetoder: get, keys, values, items

Examples

# Simple equality filter
results = await collection.search(vector, filter="lambda x: x.category == 'electronics'")

# Numeric comparison
results = await collection.search(vector, filter="lambda x: x.price < 100")

# Boolean combination
results = await collection.search(vector, filter="lambda x: x.in_stock and x.rating >= 4.0")

# String method
results = await collection.search(vector, filter="lambda x: x.name.startswith('A')")

# Membership test
results = await collection.search(vector, filter="lambda x: x.status in ['active', 'pending']")

Kommer snart

Mer information kommer snart.