🦜⛓️ Langchain Retriever

TBD: describe what retrievers are in LC and how they work.

Vector Store Retriever

In the below example we demonstrate how to use Chroma as a vector store retriever with a filter query.

Note that the filter is supplied whenever we create the retriever object so the filter applies to all queries (get_relevant_documents).

1. from langchain.document_loaders import OnlinePDFLoader
2. from langchain.chains import RetrievalQA
3. from langchain.llms import OpenAI
4. from langchain.vectorstores import Chroma
5. from typing import Dict, Any
6. import chromadb
7. from langchain_core.embeddings import Embeddings

9. client = chromadb.PersistentClient(path="./chroma")

11. col = client.get_or_create_collection("test")

13. col.upsert([f"{i}" for i in range(10)],documents=[f"This is document #{i}" for i in range(10)],metadatas=[{"id":f"{i}"} for i in range(10)])

15. ef = chromadb.utils.embedding_functions.DefaultEmbeddingFunction()

17. class DefChromaEF(Embeddings):
18. def __init__(self,ef):
19. self.ef = ef

21. def embed_documents(self,texts):
22. return self.ef(texts)

24. def embed_query(self, query):
25. return self.ef([query])[0]

28. db = Chroma(client=client, collection_name="test",embedding_function=DefChromaEF(ef))

30. retriever = db.as_retriever(search_kwargs={"filter":{"id":"1"}})

32. docs = retriever.get_relevant_documents("document")

34. assert len(docs)==1

Ref: <https://colab.research.google.com/drive/1L0RwQVVBtvTTd6Le523P4uzz3m3fm0pH#scrollTo=xROOfxLohE5j>

November 30, 2023