Bagikan melalui


Penyimpanan Memori Warisan Kernel Semantik

Kiat

Sebaiknya gunakan abstraksi Vector Store alih-alih penyimpanan memori lama. Untuk informasi selengkapnya tentang cara menggunakan abstraksi Vector Store mulai di sini.

Semantic Kernel menyediakan satu set abstraksi Penyimpanan Memori di mana antarmuka utama adalah Microsoft.SemanticKernel.Memory.IMemoryStore.

Penyimpanan Memori vs abstraksi Penyimpanan Vektor

Sebagai bagian dari upaya untuk mengembangkan dan memperluas kemampuan penyimpanan vektor dan pencarian Kernel Semantik, kami telah merilis serangkaian abstraksi baru untuk menggantikan abstraksi Penyimpanan Memori. Kami menyebutkan abstraksi pengganti ini sebagai abstraksi Vector Store. Tujuan keduanya serupa, tetapi antarmukanya berbeda dan abstraksi Vector Store menyediakan fungsionalitas yang diperluas.

Karakteristik Penyimpanan Memori Lama Penyimpanan Vektor
Antarmuka Utama IMemoryStore VectorStore
Abstraksi Paket NuGet Microsoft.SemanticKernel.Abstractions Microsoft.Extensions.VectorData.Abstractions
Konvensi Penamaan {Provider}MemoryStore, misalnya RedisMemoryStore {Provider}VectorStore, misalnya RedisVectorStore
Mendukung upsert rekaman, dapatkan, dan hapus Ya Ya
Mendukung pembuatan dan penghapusan koleksi Ya Ya
Mendukung pencarian vektor Ya Ya
Mendukung pemilihan indeks pencarian vektor dan fungsi jarak pilihan Anda Tidak Ya
Mendukung beberapa vektor per rekaman Tidak Ya
Mendukung skema khusus Tidak Ya
Mendukung beberapa jenis vektor Tidak Ya
Mendukung pra-pemfilteran metadata untuk pencarian vektor Tidak Ya
Mendukung pencarian vektor pada database non-vektor dengan mengunduh seluruh himpunan data ke klien dan melakukan pencarian vektor lokal Ya Tidak

Konektor Penyimpanan Memori yang Tersedia

Semantic Kernel menawarkan beberapa konektor Penyimpanan Memori ke database vektor yang dapat Anda gunakan untuk menyimpan dan mengambil informasi. Ini termasuk:

Layanan C# Phyton
Database Vektor di Azure Cosmos DB untuk NoSQL C# Python
Database Vektor di Azure Cosmos DB berbasis vCore untuk MongoDB C# Python
Pencarian Azure AI C# Python
Azure PostgreSQL Server C#
Database Azure SQL C#
Kroma C# Python
DuckDB C#
Milvus C# Python
Pencarian Vektor untuk Atlas MongoDB C# Python
Buah pinus C# Python
Postgres C# Python
Qdrant C# Python
Redis C# Python
Sqlite C#
Weaviate C# Python

Migrasi dari Penyimpanan Memori ke Penyimpanan Vektor

Jika Anda ingin bermigrasi dari menggunakan abstraksi Penyimpanan Memori ke abstraksi Vector Store ada berbagai cara di mana Anda dapat melakukan ini.

Gunakan koleksi yang sudah ada dengan abstraksi Vector Store

Cara paling sederhana dalam banyak kasus bisa saja dengan hanya menggunakan abstraksi Vector Store untuk mengakses koleksi yang dibuat menggunakan abstraksi Memory Store. Dalam banyak kasus hal ini dimungkinkan, karena abstraksi Vector Store memungkinkan Anda memilih skema yang ingin Anda gunakan. Persyaratan utamanya adalah membuat model data yang cocok dengan skema yang digunakan implementasi Penyimpanan Memori warisan.

Misalnya untuk mengakses koleksi yang dibuat oleh Penyimpanan Memori Pencarian Azure AI, Anda dapat menggunakan model data Penyimpanan Vektor berikut.

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; }
}

Kiat

Untuk contoh lebih rinci tentang cara menggunakan abstraksi Vector Store untuk mengakses koleksi yang dibuat menggunakan Penyimpanan Memori, lihat di sini.

Buat koleksi baru

Dalam beberapa kasus, migrasi ke koleksi baru mungkin lebih disukai daripada menggunakan koleksi yang ada secara langsung. Skema yang dipilih oleh Penyimpanan Memori mungkin tidak sesuai dengan kebutuhan Anda, terutama sehubungan dengan pemfilteran.

Misalnya penyimpanan Memori Redis menggunakan skema dengan tiga bidang:

  • metadata untuk string
  • penanda waktu yang panjang
  • float[] penyematan

Semua data selain penyematan atau tanda waktu disimpan sebagai string json berseri di bidang Metadata. Ini berarti bahwa tidak mungkin untuk mengindeks nilai individual dan memfilternya. Misalnya, mungkin Anda mungkin ingin memfilter menggunakan ExternalSourceName, tetapi ini tidak dimungkinkan saat berada di dalam string json.

Dalam hal ini, mungkin lebih baik untuk memigrasikan data ke koleksi baru dengan skema datar. Ada dua opsi di sini. Anda dapat membuat koleksi baru dari data sumber Anda atau cukup memetakan dan menyalin data dari yang lama ke yang baru. Opsi pertama mungkin lebih mahal karena Anda harus menghasilkan kembali embedding dari data sumber.

Kiat

Untuk contoh menggunakan Redis yang memperlihatkan cara menyalin data dari koleksi yang dibuat menggunakan abstraksi Penyimpanan Memori ke koleksi yang dibuat menggunakan abstraksi Vector Store, lihat di sini.