Udostępnij za pośrednictwem


Korzystanie z łącznika w pamięci (wersja zapoznawcza)

Ostrzeżenie

Funkcja semantycznego magazynu wektorów jądra jest dostępna w wersji zapoznawczej, a ulepszenia wymagające zmian powodujących niezgodność mogą nadal występować w ograniczonych okolicznościach przed wydaniem.

Omówienie

Łącznik magazynu wektorów w pamięci jest implementacją magazynu wektorów zapewnianą przez jądro semantyczne, które nie używa zewnętrznej bazy danych i przechowuje dane w pamięci. Ten magazyn wektorów jest przydatny w przypadku scenariuszy tworzenia prototypów lub gdy wymagane są szybkie operacje w pamięci.

Łącznik ma następujące cechy.

Obszar funkcji Pomoc techniczna
Mapowania kolekcji na Słownik w pamięci
Obsługiwane typy właściwości kluczy Dowolny typ, który można porównać
Obsługiwane typy właściwości danych Dowolny typ
Obsługiwane typy właściwości wektorów ReadOnlyMemory<float>
Obsługiwane typy indeksów Płaski
Obsługiwane funkcje odległości
  • Podobieństwo cosinusowe
  • CosineDistance
  • DotProductSimilarity
  • EuclideanDistance
Obsługiwane klauzule filtru
  • AnyTagEqualTo
  • EqualTo
Obsługuje wiele wektorów w rekordzie Tak
Czy filtrowanie jest obsługiwane? Tak
Czy jest obsługiwany element IsFullTextSearchable? Tak
Obsługiwana nazwa_właściwości_magazynu? Nie, ponieważ magazyn jest w pamięci, a ponowne użycie danych nie jest możliwe, niestandardowe nazewnictwo nie ma zastosowania.

Wprowadzenie

Dodaj pakiet nuget jądra semantycznego core do projektu.

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

Magazyn wektorów można dodać do kontenera iniekcji zależności dostępnego w KernelBuilder kontenerze iniekcji zależności lub IServiceCollection przy użyciu metod rozszerzeń udostępnianych przez jądro semantyczne.

using Microsoft.SemanticKernel;

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

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

Wystąpienie magazynu wektorów inmemory można utworzyć bezpośrednio.

using Microsoft.SemanticKernel.Connectors.InMemory;

var vectorStore = new InMemoryVectorStore();

Istnieje możliwość utworzenia bezpośredniego odwołania do nazwanej kolekcji.

using Microsoft.SemanticKernel.Connectors.InMemory;

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

Wyszukiwanie właściwości klucza i wektora

Domyślnie łącznik In-Memory Vector Store odczytuje wartości kluczy i wektorów przy użyciu odbicia. Przyjmuje się, że klucze i wektory są bezpośrednimi właściwościami modelu danych.

Jeśli wymagany jest model danych, który ma strukturę, w której klucze i wektory nie są bezpośrednimi właściwościami modelu danych, można podać funkcje w celu odczytania tych wartości.

W takim przypadku wymagane jest również podanie VectorStoreRecordDefinition, dzięki czemu informacje o rozmiarze i funkcji odległości wektora mogą być przekazywane do magazynu wektorów In-Memory.

var collection = new InMemoryVectorStoreRecordCollection<string, MyDataModel>(
    "mydata",
    new()
    {
        VectorStoreRecordDefinition = vectorStoreRecordDefinition,
        KeyResolver = (record) => record.Key,
        VectorResolver = (vectorName, record) => record.Vectors[vectorName]
    });

private class MyDataModel
{
    public string Key { get; set; }
    public Dictionary<string, ReadOnlyMemory<float>> Vectors { get; set; }
}

Omówienie

Łącznik magazynu wektorów w pamięci jest implementacją magazynu wektorów zapewnianą przez jądro semantyczne, które nie używa zewnętrznej bazy danych i przechowuje dane w pamięci. Ten magazyn wektorów jest przydatny w przypadku scenariuszy tworzenia prototypów lub gdy wymagane są szybkie operacje w pamięci.

Łącznik ma następujące cechy.

Obszar funkcji Pomoc techniczna
Mapowania kolekcji na Słownik w pamięci
Obsługiwane typy właściwości kluczy Każdy element, który może być kluczem słownika, zobacz dokumentację Pythona, aby uzyskać szczegóły tutaj
Obsługiwane typy właściwości danych Dowolny typ
Obsługiwane typy właściwości wektorów list[float | int] | tablica numpy
Obsługiwane typy indeksów Płaski
Obsługiwane funkcje odległości
  • Podobieństwo cosinusowe
  • Odległość cosinusa
  • Podobieństwo produktu Kropka
  • Odległość euklidesowa
  • Odległość kwadratowa euklidesowa
  • Manhattan Distance
  • Odległość hammingu
Obsługuje wiele wektorów w rekordzie Tak
Czy „is_filterable” jest obsługiwane? Tak
Czy pełnotekstowe wyszukiwanie jest obsługiwane? Tak

Wprowadzenie

Dodaj pakiet Semantic Kernel do projektu.

pip install semantic-kernel

Możesz tam utworzyć magazyn i kolekcje lub utworzyć kolekcje bezpośrednio.

W poniższych fragmentach kodu przyjęto założenie, że masz klasę modelu danych zdefiniowaną pod nazwą "DataModel".

from semantic_kernel.connectors.memory.in_memory import InMemoryVectorStore

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

Istnieje możliwość utworzenia bezpośredniego odwołania do nazwanej kolekcji.

from semantic_kernel.connectors.memory.in_memory import InMemoryCollection

vector_collection = InMemoryCollection("collection_name", DataModel)

Wkrótce

Więcej informacji wkrótce.