02. Cache Penyematan (CacheBackedEmbeddings)

CacheBackedEmbeddings

Sematan(embeddings) dapat disimpan atau di-cache sementara untuk menghindari penghitungan ulang.

Penyematan dalam cache dapat dilakukan dengan menggunakan CacheBackedEmbeddings. Penyemat yang didukung cache adalah pembungkus di sekitar penyemat yang menyimpan penyematan di dalam penyimpanan pasangan kunci-nilai (key-value). Teks akan di-hash dan hash ini digunakan sebagai kunci dalam cache.

Metode utama yang didukung untuk menginisialisasi CacheBackedEmbeddings adalah from_bytes_store, yang mengambil parameter berikut

  • underlying_embeddings: Penyemat yang digunakan untuk penyematan.

  • document_embedding_cache: Salah satu ByteStores untuk menyimpan penyematan dokumen.

  • namespace: (opsional, standarnya "") namespace yang digunakan untuk menyimpan dokumen dalam cache. namespace ini digunakan untuk menghindari konflik dengan cache lain. Misalnya, setel ke nama model penyematan yang digunakan.

Perhatian: Penting untuk mengatur parameter namespace untuk menghindari konflik saat teks yang sama disematkan menggunakan model penyematan yang berbeda.

Menggunakan penyematan di LocalFileStore (penyimpanan persisten)

Pertama, mari kita lihat contoh menyimpan penyematan menggunakan sistem file lokal dan mengambilnya menggunakan penyimpanan vektor FAISS.

from langchain.storage import LocalFileStore
from langchain_openai import OpenAIEmbeddings
from langchain.embeddings import CacheBackedEmbeddings

# Menggunakan embedding OpenAI untuk membuat pengaturan embedding dasar
embedding = OpenAIEmbeddings()

# Mengatur penyimpanan file lokal
store = LocalFileStore("./cache/")

# Membuat embedding yang didukung cache
cached_embedder = CacheBackedEmbeddings.from_bytes_store(
    underlying_embeddings=embedding,
    document_embedding_cache=store,
    namespace=embedding.model,  # Membuat embedding yang didukung cache menggunakan embedding dasar dan penyimpanan
)

Muat dokumen, pisahkan menjadi beberapa bagian, lalu sematkan setiap bagian dan muat ke dalam penyimpanan vektor.

Apabila Anda mencoba membuat ulang penyimpanan vektor, ini jauh lebih cepat, karena Anda tidak perlu menghitung ulang penyematan.

Menggunakan InmemoryByteStore (tidak permanen)

Jika Anda ingin menggunakan ByteStore yang berbeda, Anda bisa menggunakan ByteStore tersebut saat membuat CacheBackedEmbeddings.

Di bawah ini, kami menunjukkan contoh penggunaan InMemoryByteStore yang tidak permanen untuk menghasilkan objek penyematan yang di-cache yang sama.

Last updated