Udostępnij przez


Starsze przechowywanie 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 mającego na celu rozwinięcie i rozszerzenie możliwości przechowywania wektorów oraz wyszukiwania w Semantic Kernel, wydaliśmy nowy zestaw abstrakcji, aby zastąpić abstrakcje magazynu pamięci. Nazywamy te zastępcze abstrakcje abstrakcjami Vector Store. Cel obu jest podobny, ale ich interfejsy się różnią, a abstrakcje magazynu wektorów zapewniają rozszerzoną funkcjonalność.

Charakterystyka Starsze magazyny pamięci Magazyny wektorów
Interfejs główny IMemoryStore VectorStore
Pakiet NuGet abstrakcji Microsoft.SemanticKernel.Abstractions Microsoft.Extensions.VectorData.Abstractions
Konwencje nazewnictwa {Provider}MemoryStore, na przykład RedisMemoryStore {Provider}VectorStore, np. RedisVectorStore
Obsługuje upsert, pobieranie i usuwanie rekordów 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 wiele typów wektorów 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 konektory pamięci masowej

Semantic Kernel oferuje kilka łączników do pamięci masowej wektorowych baz danych, które można użyć do przechowywania i pobierania informacji. Są to:

Usługa C# Pyton
Wektorowa baza danych w usłudze Azure Cosmos DB for NoSQL C# Pyton
Wektorowa baza danych w usłudze Azure Cosmos DB opartej na rdzeniach wirtualnych dla bazy danych MongoDB C# Pyton
Wyszukiwanie AI platformy Azure C# Pyton
Serwer Usługi Azure PostgreSQL C#
Azure SQL Database C#
Chromatyczność C# Pyton
DuckDB C#
Milvus (rodzaj ptaków drapieżnych z rodziny jastrzębiowatych) C# Pyton
MongoDB Atlas Vector Search C# Pyton
Pinecone C# Pyton
Postgres C# Pyton
Qdrant C# Pyton
Redis C# Pyton
Sqlite C#
Weaviate C# Pyton

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

Jeśli chcesz przeprowadzić migrację z używania abstrakcji magazynu pamięci do abstrakcji magazynu wektorów, możesz to zrobić na różne sposoby.

Użyj istniejącej kolekcji z abstrakcjami przechowywania 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
{
    [VectorStoreKey]
    public string Id { get; set; }

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

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

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

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

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

    [VectorStoreVector(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 znaków
  • długi znacznik czasu
  • 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 chcesz filtrować według ExternalSourceName, ale nie jest to możliwe, dopóki 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.