Condividi tramite


Uso del connettore in memoria (anteprima)

Avviso

La funzionalità In-Memory Vector Store è in anteprima e potrebbe subire miglioramenti che richiedono cambiamenti significativi in circostanze limitate prima del rilascio.

Avviso

La funzionalità di archiviazione vettoriale del kernel semantico è in anteprima e i miglioramenti che richiedono modifiche di rilievo possono ancora verificarsi in circostanze limitate prima del rilascio.

Avviso

La funzionalità di archiviazione vettoriale del kernel semantico è in anteprima e i miglioramenti che richiedono modifiche di rilievo possono ancora verificarsi in circostanze limitate prima del rilascio.

Panoramica

Il connettore Di archiviazione vettoriale in memoria è un'implementazione dell'archivio vettoriale fornita dal kernel semantico che non usa database esterno e archivia i dati in memoria. Questo archivio vettoriale è utile per gli scenari di creazione di prototipi o per le operazioni in memoria ad alta velocità.

Il connettore presenta le caratteristiche seguenti.

Area funzionalità Supporto tecnico
Mapping delle raccolte a Dizionario in memoria
Tipi di proprietà chiave supportati Qualsiasi tipo che può essere confrontato
Tipi di proprietà dati supportati Qualsiasi tipo
Tipi di proprietà vector supportati
  • ReadOnlyMemory<float>
  • Incorporamento<float>
  • float[]
Tipi di indice supportati Appartamento
Funzioni di distanza supportate
  • CosenoSimilarità
  • CosineDistance
  • DotProductSimilarity
  • EuclideanDistance
Clausole di filtro supportate
  • AnyTagEqualTo
  • EqualTo
Supporta più vettori in un record
Il supporto di IsIndexed è presente?
È supportato IsFullTextIndexed?
"StorageName è supportato?" No, poiché l'archiviazione è in memoria e il riutilizzo dei dati non è quindi possibile, la denominazione personalizzata non è applicabile.
"HybridSearch è supportato?" NO

Introduzione

Aggiungere il pacchetto NuGet Semantic Kernel Core al progetto.

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

È possibile aggiungere l'archivio vettoriale al contenitore di inserimento delle dipendenze disponibile in KernelBuilder o al IServiceCollection contenitore di inserimento delle dipendenze usando i metodi di estensione forniti dal kernel semantico.

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

È possibile costruire direttamente un'istanza dell'archivio vettoriale InMemory.

using Microsoft.SemanticKernel.Connectors.InMemory;

var vectorStore = new InMemoryVectorStore();

È possibile costruire un riferimento diretto a una raccolta denominata.

using Microsoft.SemanticKernel.Connectors.InMemory;

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

Panoramica

Avviso

L'archivio vettoriale In-Memory supporta filtri personalizzati che possono essere espressi come funzioni lambda Python, queste funzioni vengono eseguite nello stesso processo dell'applicazione principale e pertanto possono eseguire codice arbitrario. Vengono filtrate alcune operazioni consentite, ma non è consigliabile consentire l'impostazione dei filtri da origini non attendibili, inclusi gli input LLM. Per altri dettagli, vedere la sezione Filtro .

Il connettore Di archiviazione vettoriale in memoria è un'implementazione dell'archivio vettoriale fornita dal kernel semantico che non usa database esterno e archivia i dati in memoria. Questo archivio vettoriale è utile per gli scenari di creazione di prototipi o per le operazioni in memoria ad alta velocità.

Il connettore presenta le caratteristiche seguenti.

Area funzionalità Supporto tecnico
Mapping delle raccolte a Dizionario in memoria
Tipi di proprietà chiave supportati Qualsiasi elemento autorizzato a essere una chiave dict, vedere la documentazione di Python per informazioni dettagliate qui
Tipi di proprietà dati supportati Qualsiasi tipo
Tipi di proprietà vector supportati list[float | int] | array numpy
Tipi di indice supportati Appartamento
Funzioni di distanza supportate
  • Somiglianza coseno
  • Distanza coseno
  • Somiglianza del prodotto dot
  • Distanza euclidea
  • Distanza quadrata euclidea
  • Manhattan Distance
  • Distanza Hamming
Supporta più vettori in un record
"È supportato is_filterable?"
La ricerca testuale completa è supportata?

Introduzione

Aggiungere il pacchetto Semantic Kernel al progetto.

pip install semantic-kernel

È possibile creare il negozio e le raccolte da questa posizione o creare direttamente le raccolte.

Nei frammenti di codice seguenti si presuppone che sia stata definita una classe del modello di dati denominata "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")

È possibile costruire un riferimento diretto a una raccolta denominata.

from semantic_kernel.connectors.in_memory import InMemoryCollection

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

Filtraggio

Avviso

L'archivio vettoriale In-Memory supporta filtri personalizzati che possono essere espressi come funzioni lambda Python, queste funzioni vengono eseguite nello stesso processo dell'applicazione principale e pertanto possono eseguire codice arbitrario. Vengono filtrate alcune operazioni consentite, ma non è consigliabile consentire l'impostazione dei filtri da origini non attendibili, inclusi gli input LLM.

Il connettore In-Memory usa un approccio allowlist per la sicurezza dei filtri. Nelle espressioni di filtro sono consentite solo le operazioni seguenti:

Operazioni consentite

Categoria Operazioni consentite
Comparisons ==, !=, <, <=, >, >=, in, not in, is, is not
Operazioni booleane and, or, not
Accesso ai dati Accesso agli attributi (ad esempio, x.field), accesso tramite indice (ad esempio, x['field']), slicing
valori letterali Costanti, elenchi, tuple, insiemi, dizionari
Aritmetica di base +, -, *, /, %//

Funzioni consentite

Le funzioni e i metodi predefiniti seguenti possono essere usati nelle espressioni di filtro:

  • Conversione dei tipi: str, int, float, bool
  • Aggregazione: len, abs, minmax, sum, , anyall
  • Metodi stringa: lower, upper, strip, startswith, endswith, contains
  • Metodi di dizionario: get, keys, values, items

Esempi

# 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']")

Presto disponibile

Altre informazioni saranno presto disponibili.