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.