पाठ 22 / 31
Index को Persist और Reload करना
हर शुरुआत पर दोबारा embed करने से बचें।
एक बार embed करें, कई बार load करें
बड़े corpus को embed करने में समय और पैसा लगता है, इसलिए index सहेजें। index.storage_context.persist(persist_dir=...) document store, index store और vector store को files के रूप में लिखता है, और load_index_from_storage(StorageContext.from_defaults(persist_dir=...)) उन्हें बहाल करता है। Production के लिए संबंधित integration से असली vector database (Qdrant, Pinecone, pgvector, Chroma आदि) उपयोग करें ताकि डेटा restarts में बचे और scale हो। दस्तावेज़ बदलने पर सब कुछ दोबारा बनाने की जगह indexes वृद्धिशील रूप से अद्यतन करें (दस्तावेज़ ID से insert, delete या refresh), और याद रखें कि embedding model बदलने पर दोबारा embed करना पड़ता है।
Persist और reload, चलाकर
मैंने यह Python virtual environment में langchain-core 1.6.6, langchain-text-splitters 1.1.2 और llama-index-core 0.14.25 के साथ ऑफ़लाइन चलाया। किसी API key या network call की ज़रूरत नहीं क्योंकि असली मॉडल की जगह fake मॉडल या खिलौना embedding है। Persist करने से stores के लिए JSON files लिखी जाती हैं (सटीक सूची संस्करणों में अलग हो सकती है), और load करने पर index अपने 1 दस्तावेज़ के साथ बहाल होता है।
import tempfile, os
from llama_index.core import Document, VectorStoreIndex, StorageContext, load_index_from_storage, Settings
from llama_index.core.embeddings import MockEmbedding
from llama_index.core.llms import MockLLM
Settings.llm = MockLLM(); Settings.embed_model = MockEmbedding(embed_dim=8)
index = VectorStoreIndex.from_documents([Document(text="Persisted index demo.")])
with tempfile.TemporaryDirectory() as d:
index.storage_context.persist(persist_dir=d)
print(sorted(os.listdir(d)))
again = load_index_from_storage(StorageContext.from_defaults(persist_dir=d))
print("reloaded docs:", len(again.docstore.docs))
Output:
['default__vector_store.json', 'docstore.json', 'graph_store.json', 'image__vector_store.json', 'index_store.json'] reloaded docs: 1
त्वरित जाँच: Index persist क्यों करें?
- Retriever हटाने के लिए
- Queries को ग़लत करने के लिए
- Metadata छिपाने के लिए
- हर शुरुआत पर corpus दोबारा embed करने का भुगतान न करना पड़े
Answer
हर शुरुआत पर corpus दोबारा embed करने का भुगतान न करना पड़े — Embedding महँगा चरण है, इसलिए उसका नतीजा पुनः उपयोग करें।