from langchain.agents import Tool, AgentType, initialize_agent from langchain.memory import ConversationBufferMemory # from langchain.utilities import DuckDuckGoSearchAPIWrapper from langchain_google_genai import ChatGoogleGenerativeAI from langchain.agents import AgentExecutor from langchain import hub from langchain.agents.format_scratchpad import format_log_to_str from langchain.agents.output_parsers import ReActSingleInputOutputParser from langchain.tools.render import render_text_description import os from tools.kg_search import lookup_kg from tools.tavily_search import tavily_search from tools.tavily_search_v2 import tavily_search, tavily_qna_search from dotenv import load_dotenv from langchain.agents import Tool from langchain_core.prompts import PromptTemplate load_dotenv() os.environ["GOOGLE_API_KEY"] = os.getenv("GEMINI_API_KEY") llm = ChatGoogleGenerativeAI( model= "gemini-1.5-flash-latest", temperature = 0 ) # search = DuckDuckGoSearchAPIWrapper() # # search_tool = Tool(name="Current Search", # func=search.run, # description="Useful when you need to answer questions about detail jobs information or search a job." # ) kg_query = Tool( name = 'Query Knowledge Graph', func = lookup_kg, description='Useful for when you need to answer questions about job posts.' ) web_search = Tool( name = 'Web Search', func = tavily_qna_search, description = "Useful for when you need to search for external information." ) tools = [kg_query, web_search] with open("prompts/react_prompt_v2.txt", "r") as file: react_template = file.read() react_prompt = PromptTemplate( input_variables = ["tools", "tool_names", "input", "agent_scratchpad", "chat_history"], template = react_template ) prompt = react_prompt.partial( tools = render_text_description(tools), tool_names = ", ".join([t.name for t in tools]), ) llm_with_stop = llm.bind(stop=["\nObservation"]) agent = ( { "input": lambda x: x["input"], "agent_scratchpad": lambda x: format_log_to_str(x["intermediate_steps"]), "chat_history": lambda x: x["chat_history"], } | prompt | llm_with_stop | ReActSingleInputOutputParser() ) memory = ConversationBufferMemory(memory_key="chat_history") agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True, memory=memory) def get_react_agent(memory): agent_executor = AgentExecutor( agent=agent, tools=tools, verbose=True, memory=memory ) return agent_executor # result = agent_executor.invoke({"input": "Have any company recruit Machine Learning jobs?"}) # print(result) # result = agent_chain.run(input = "Have any company recruit Machine Learning jobs?") # print(result) # question = { # "input": "What did I just ask?" # } # # result = agent_executor.invoke(question) # print(result) if __name__ == "__main__": while True: try: question = input("> ") result = agent_executor.invoke({ "input": question }) except: break