🦜⛓️ 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
  8. client = chromadb.PersistentClient(path="./chroma")
  9. col = client.get_or_create_collection("test")
  10. 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)])
  11. ef = chromadb.utils.embedding_functions.DefaultEmbeddingFunction()
  12. class DefChromaEF(Embeddings):
  13. def __init__(self,ef):
  14. self.ef = ef
  15. def embed_documents(self,texts):
  16. return self.ef(texts)
  17. def embed_query(self, query):
  18. return self.ef([query])[0]
  19. db = Chroma(client=client, collection_name="test",embedding_function=DefChromaEF(ef))
  20. retriever = db.as_retriever(search_kwargs={"filter":{"id":"1"}})
  21. docs = retriever.get_relevant_documents("document")
  22. assert len(docs)==1

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

November 30, 2023