| |
|
| | from langchain.agents import initialize_agent, Tool |
| | from langchain.embeddings.openai import OpenAIEmbeddings |
| | from langchain.agents import AgentType |
| | from langchain.tools import BaseTool |
| | from langchain.llms import OpenAI |
| | from langchain import SerpAPIWrapper, LLMChain |
| | from langchain.chains import RetrievalQA |
| | from langchain.chat_models import ChatOpenAI |
| | from langchain.agents import ZeroShotAgent, Tool, AgentExecutor |
| | from langchain.memory import ConversationBufferMemory, ReadOnlySharedMemory |
| | from langchain.document_loaders import TextLoader, DirectoryLoader |
| | from langchain.vectorstores import Chroma |
| | import os |
| | import arxiv |
| | import chainlit as cl |
| | from chainlit import user_session |
| |
|
| | @cl.langchain_factory(use_async=True) |
| | async def init(): |
| | |
| | embeddings = embeddings = OpenAIEmbeddings() |
| |
|
| | |
| | persist_directory = "vector_db" |
| |
|
| | |
| | vectordb = Chroma(persist_directory=persist_directory, embedding_function=embeddings) |
| |
|
| | |
| | alice_qa = RetrievalQA.from_chain_type( |
| | ChatOpenAI( |
| | model_name="gpt-3.5-turbo-16k", |
| | temperature=0, |
| | ), |
| | chain_type="stuff", |
| | retriever=vectordb.as_retriever(), |
| | ) |
| | |
| | search = SerpAPIWrapper() |
| |
|
| | memory = ConversationBufferMemory(memory_key="chat_history") |
| | readonlymemory = ReadOnlySharedMemory(memory=memory) |
| | |
| | tools = [ |
| | Tool( |
| | name = "Alice in Wonderland QA System", |
| | func=alice_qa.run, |
| | description="useful for when you need to answer questions about Alice in Wonderland. Input should be a fully formed question." |
| | ), |
| | Tool( |
| | name = "Backup Alice Google Search", |
| | func=search.run, |
| | description="useful for when you need to answer questions about Alice in Wonderland but only when the Alice in Wonderland QA System couldn't answer the query. Input should be a fully formed question." |
| | ), |
| | ] |
| |
|
| | prefix = """Have a conversation with a human, answering the following questions as best you can. You have access to the following tools:""" |
| | suffix = """Begin!" |
| | |
| | {chat_history} |
| | Question: {input} |
| | {agent_scratchpad}""" |
| | |
| | prompt = ZeroShotAgent.create_prompt( |
| | tools, |
| | prefix=prefix, |
| | suffix=suffix, |
| | input_variables=["input", "chat_history", "agent_scratchpad"] |
| | ) |
| |
|
| | llm_chain = LLMChain( |
| | llm=ChatOpenAI( |
| | model_name="gpt-3.5-turbo-16k", |
| | temperature=0, |
| | ), |
| | prompt=prompt |
| | ) |
| |
|
| | agent = ZeroShotAgent(llm_chain=llm_chain, tools=tools, verbose=True) |
| | agent_chain = AgentExecutor.from_agent_and_tools(agent=agent, tools=tools, verbose=True, memory=memory) |
| |
|
| | |
| | await cl.Message( |
| | content=f"You can begin by asking any questions about Alice in Wonderland!" |
| | ).send() |
| |
|
| | return agent_chain |
| |
|
| | @cl.langchain_run |
| | async def run(agent, input_str): |
| | res = await cl.make_async(agent)(input_str, callbacks=[cl.LangchainCallbackHandler()]) |
| | print(res) |
| | await cl.Message(content=res["output"]).send() |
| |
|
| | @cl.langchain_rename |
| | def rename(original_llm_chain: str): |
| | rename_dict = { |
| | "LLMChain" : "The Mad Hatter 🤪🎩" |
| | } |
| |
|
| | return rename_dict.get(original_llm_chain, original_llm_chain) |