# Embeddings, Vector Stores और Retrievers — LangChain / LlamaIndex

Source: https://www.geekswithgeeks.com/hi/langchain-llamaindex/r-vector

> Chunks को index करें और similarity से खोजें।

## Vectors रखें, निकटता से खोजें

**Embeddings** मॉडल पाठ को vectors में बदलता है। **Vector store** vectors को उनके Documents के साथ सहेजता है और `similarity_search` समर्थित करता है। **Retriever** ऐसा runnable है जो query लेकर Documents लौटाता है; `store.as_retriever(search_kwargs={"k": 3})` store को लपेटता है। LangChain में कई stores (in-memory, FAISS, Chroma, pgvector, Pinecone, Qdrant आदि) पर साझा interface है ताकि आप memory में शुरू करके बाद में database पर जा सकें। कठोर बाधाओं (tenant, भाषा, अनुमतियाँ) के लिए **metadata filters** उपयोग करें। नीचे का demo निश्चित fake embedding उपयोग करता है, जिसका **कोई अर्थ नहीं**: वह सिर्फ़ API दिखाता है, और कोई पाठ अपने आप से सबसे ज़्यादा मिलता है।

## In-memory vector store, चलाकर

मैंने यह 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 है। Hotel दस्तावेज़ के ठीक पाठ से खोजने पर वह (`travel` स्रोत) पहले आता है। Fake embedding का कोई अर्थ नहीं होने के कारण दूसरा परिणाम अर्थ से संबंधित नहीं है; असली embedding मॉडल के साथ ranking अर्थ दर्शाती। Retriever laptop पाठ के लिए एकल सर्वश्रेष्ठ मिलान लौटाता है।

```python
from langchain_core.documents import Document
from langchain_core.vectorstores import InMemoryVectorStore
from langchain_core.embeddings import DeterministicFakeEmbedding

docs = [
    Document(page_content="Employees get 24 days of paid leave.", metadata={"src": "hr"}),
    Document(page_content="Hotels are capped at 6000 rupees per night.", metadata={"src": "travel"}),
    Document(page_content="Report lost laptops within 24 hours.", metadata={"src": "security"}),
]
store = InMemoryVectorStore(DeterministicFakeEmbedding(size=32))
store.add_documents(docs)

# The fake embedding is deterministic but has no meaning, so the same text always matches itself best.
hits = store.similarity_search("Hotels are capped at 6000 rupees per night.", k=2)
print([h.metadata["src"] for h in hits])
retriever = store.as_retriever(search_kwargs={"k": 1})
print(retriever.invoke("Report lost laptops within 24 hours.")[0].page_content)

```

Output:

```
['travel', 'hr']
Report lost laptops within 24 hours.
```

**Quiz:** Retriever क्या है?

- [ ] Prompt template
- [ ] GPU का प्रकार
- [x] ऐसा runnable जो query लेकर प्रासंगिक Documents लौटाता है
- [ ] मॉडल weight फ़ाइल

*Answer:* ऐसा runnable जो query लेकर प्रासंगिक Documents लौटाता है. Retrievers search backend को सरल interface के पीछे छिपाते हैं।
