Example
from phi.agent import Agent
from phi.knowledge.langchain import LangChainKnowledgeBase
from langchain.embeddings import OpenAIEmbeddings
from langchain.document_loaders import TextLoader
from langchain.text_splitter import CharacterTextSplitter
from langchain.vectorstores import Chroma
chroma_db_dir = "./chroma_db"
def load_vector_store():
state_of_the_union = ws_settings.ws_root.joinpath("data/demo/state_of_the_union.txt")
# -*- Load the document
raw_documents = TextLoader(str(state_of_the_union)).load()
# -*- Split it into chunks
text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0)
documents = text_splitter.split_documents(raw_documents)
# -*- Embed each chunk and load it into the vector store
Chroma.from_documents(documents, OpenAIEmbeddings(), persist_directory=str(chroma_db_dir))
# -*- Get the vectordb
db = Chroma(embedding_function=OpenAIEmbeddings(), persist_directory=str(chroma_db_dir))
# -*- Create a retriever from the vector store
retriever = db.as_retriever()
# -*- Create a knowledge base from the vector store
knowledge_base = LangChainKnowledgeBase(retriever=retriever)
agent = Agent(knowledge_base=knowledge_base, add_references_to_prompt=True)
conv.print_response("What did the president say about technology?")
LangChainKnowledgeBase Params
Parameter | Type | Default | Description |
---|
loader | Optional[Callable] | None | LangChain loader. |
vectorstore | Optional[Any] | None | LangChain vector store used to create a retriever. |
search_kwargs | Optional[dict] | None | Search kwargs when creating a retriever using the langchain vector store. |
retriever | Optional[Any] | None | LangChain retriever. |
AgentKnowledge Params
LangChainKnowledgeBase
is a subclass of the AgentKnowledge
class and has access to the same params
Parameter | Type | Default | Description |
---|
reader | Optional[Reader] | None | Reader to read the documents |
vector_db | Optional[VectorDb] | None | Vector db to store the knowledge base |
num_documents | int | 2 | Number of relevant documents to return on search |
optimize_on | Optional[int] | 1000 | Number of documents to optimize the vector db on |
driver | str | "knowledge" | Driver for the Assistant knowledge |