Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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.