Udostępnij za pośrednictwem


Starsze magazyny pamięci jądra semantycznego

Napiwek

Zalecamy używanie abstrakcji magazynu wektorów zamiast starszych magazynów pamięci. Aby uzyskać więcej informacji na temat korzystania z abstrakcji magazynu wektorów, zobacz tutaj.

Semantyczne jądro udostępnia zestaw abstrakcji magazynu pamięci, w którym podstawowym interfejsem jest Microsoft.SemanticKernel.Memory.IMemoryStore.

Magazyn pamięci a abstrakcje magazynu wektorów

W ramach wysiłku w celu rozwinięcia i rozszerzenia magazynu wektorów i wydajności wyszukiwania jądra semantycznego wydaliśmy nowy zestaw abstrakcji, aby zastąpić abstrakcji magazynu pamięci. Wywołujemy abstrakcji wektorów zastępczych abstrakcji. Oba te elementy są podobne, ale ich interfejsy różnią się, a abstrakcje magazynu wektorów zapewniają rozszerzoną funkcjonalność.

Characteristic Starsze magazyny pamięci Magazyny wektorów
Interfejs główny IMemoryStore IVectorStore
Pakiet NuGet abstrakcji Microsoft.SemanticKernel.Abstractions Microsoft.Extensions.VectorData.Abstractions
Konwencje nazewnictwa {Provider}MemoryStore, np. RedisMemoryStore {Provider}VectorStore, np. RedisVectorStore
Obsługuje rejestrowanie upsert, pobieranie i usuwanie Tak Tak
Obsługuje tworzenie i usuwanie kolekcji Tak Tak
Obsługuje wyszukiwanie wektorów Tak Tak
Obsługuje wybieranie preferowanego indeksu wyszukiwania wektorów i funkcji odległości Nie. Tak
Obsługuje wiele wektorów na rekord Nie. Tak
Obsługuje schematy niestandardowe Nie. Tak
Obsługuje wstępne filtrowanie metadanych pod kątem wyszukiwania wektorów Nie. Tak
Obsługuje wyszukiwanie wektorów w bazach danych innych niż wektorowe, pobierając cały zestaw danych na klienta i wykonując wyszukiwanie wektorów lokalnych Tak Nie.

Dostępne łączniki magazynu pamięci

Semantyczne jądro oferuje kilka łączników magazynu pamięci do wektorowych baz danych, których można użyć do przechowywania i pobierania informacji. Są to:

Usługa C# Python
Wektorowa baza danych w usłudze Azure Cosmos DB for NoSQL C# Python
Wektorowa baza danych w usłudze Azure Cosmos DB opartej na rdzeniach wirtualnych dla bazy danych MongoDB C# Python
Wyszukiwanie AI platformy Azure C# Python
Serwer Usługi Azure PostgreSQL C#
Azure SQL Database C#
Chroma C# Python
DuckDB C#
Milvus C# Python
MongoDB Atlas Vector Search C# Python
Pinecone C# Python
Postgres C# Python
Qdrant C#
Redis C#
Sqlite C#
Weaviate C# Python

Migrowanie z magazynów pamięci do magazynów wektorowych

Jeśli chcesz przeprowadzić migrację z użycia abstrakcji magazynu pamięci do abtraction magazynu wektorów, istnieją różne sposoby, w których można to zrobić.

Używanie istniejącej kolekcji z abstrakcjami magazynu wektorów

Najprostszym sposobem w wielu przypadkach może być użycie abstrakcji magazynu wektorów w celu uzyskania dostępu do kolekcji utworzonej przy użyciu abstrakcji magazynu pamięci. W wielu przypadkach jest to możliwe, ponieważ abstrakcja magazynu wektorów umożliwia wybranie schematu, którego chcesz użyć. Głównym wymaganiem jest utworzenie modelu danych zgodnego ze schematem używanym przez starszą implementację magazynu pamięci.

Aby uzyskać dostęp do kolekcji utworzonej przez magazyn pamięci usługi Azure AI Search, możesz użyć następującego modelu danych magazynu wektorów.

using Microsoft.Extensions.VectorData;

class VectorStoreRecord
{
    [VectorStoreRecordKey]
    public string Id { get; set; }

    [VectorStoreRecordData]
    public string Description { get; set; }

    [VectorStoreRecordData]
    public string Text { get; set; }

    [VectorStoreRecordData]
    public bool IsReference { get; set; }

    [VectorStoreRecordData]
    public string ExternalSourceName { get; set; }

    [VectorStoreRecordData]
    public string AdditionalMetadata { get; set; }

    [VectorStoreRecordVector(VectorSize)]
    public ReadOnlyMemory<float> Embedding { get; set; }
}

Napiwek

Aby uzyskać bardziej szczegółowe przykłady użycia abstrakcji magazynu wektorów do uzyskiwania dostępu do kolekcji utworzonych przy użyciu magazynu pamięci, zobacz tutaj.

Utwórz nową kolekcję

W niektórych przypadkach migracja do nowej kolekcji może być preferowana niż bezpośrednie użycie istniejącej kolekcji. Schemat wybrany przez magazyn pamięci może nie być zgodny z wymaganiami, szczególnie w odniesieniu do filtrowania.

Na przykład magazyn pamięci Redis używa schematu z trzema polami:

  • metadane ciągu
  • znacznik czasu długiego
  • osadzanie zmiennoprzecinkowe[]

Wszystkie dane inne niż osadzanie lub znacznik czasu są przechowywane jako serializowany ciąg json w polu Metadane. Oznacza to, że nie można indeksować poszczególnych wartości i filtrować ich. Na przykład być może warto filtrować przy użyciu klasy ExternalSourceName, ale nie jest to możliwe, gdy znajduje się wewnątrz ciągu json.

W takim przypadku lepszym rozwiązaniem może być zmigrowanie danych do nowej kolekcji przy użyciu płaskiego schematu. Dostępne są dwie opcje. Możesz utworzyć nową kolekcję na podstawie danych źródłowych lub po prostu mapować i kopiować dane ze starego do nowego. Pierwsza opcja może być bardziej kosztowna, ponieważ konieczne będzie ponowne wygenerowanie osadzonych danych źródłowych.

Napiwek

Przykład użycia usługi Redis pokazujący, jak skopiować dane z kolekcji utworzonej przy użyciu abstrakcji magazynu pamięci do jednego utworzonego przy użyciu abstrakcji magazynu wektorów, zobacz tutaj.