Spaces:
Sleeping
Sleeping
| import os | |
| from langchain.text_splitter import RecursiveCharacterTextSplitter | |
| from langchain.embeddings import OpenAIEmbeddings | |
| from langchain.vectorstores.chroma import Chroma | |
| import os | |
| import shutil | |
| from langchain.vectorstores.chroma import Chroma | |
| from langchain.embeddings import OpenAIEmbeddings | |
| from langchain.agents.agent_toolkits import create_retriever_tool | |
| from langchain.agents.agent_toolkits import create_conversational_retrieval_agent | |
| from langchain.agents import load_tools | |
| from langchain_openai import ChatOpenAI | |
| def init_config(loader): | |
| # We use the loader created above to load the document | |
| documents = loader.load() | |
| # We split the document into several chunks as mentioned above | |
| text_splitter = RecursiveCharacterTextSplitter(chunk_size=1000, chunk_overlap=50) | |
| texts = text_splitter.split_documents(documents) | |
| CHROMA_PATH = "../data/plant_chroma" | |
| if os.path.exists(CHROMA_PATH): | |
| db = Chroma(persist_directory=CHROMA_PATH,embedding_function=OpenAIEmbeddings()) | |
| else: | |
| db = Chroma.from_documents( | |
| texts, OpenAIEmbeddings(), persist_directory=CHROMA_PATH | |
| ) | |
| db.persist() | |
| print(f"Saved {len(texts)} chunks to {CHROMA_PATH}.") | |
| retriever = db.as_retriever() | |
| # This is the prompt to create a RAG agent for us | |
| retriever_name = "plant_os_pdf" | |
| retriever_desc = """The purpose of this tool is to answer questions about the blue indigo false plant and its maintenance.""" | |
| rag_tool = create_retriever_tool( | |
| retriever, | |
| retriever_name, | |
| retriever_desc | |
| ) | |
| search_tool = load_tools(['serpapi']) | |
| tools = [rag_tool, search_tool[0]] | |
| llm = ChatOpenAI(model_name="gpt-4") | |
| RAG_executor = create_conversational_retrieval_agent(llm=llm, tools=tools, verbose=True) # setting verbose=True to output the thought process of the agent | |
| return RAG_executor | |
| def answer_question(agent, question): | |
| user_query = {"input": question} | |
| result = agent(user_query) | |
| return result['output'] | |