🦜⛓️ 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
