from langchain import hub
from langchain_openai import OpenAI
from langchain.agents import load_tools
from langchain.agents import AgentExecutor
from langchain.agents.format_scratchpad import format_log_to_str
from langchain.tools.render import render_text_description
from langchain.agents.output_parsers import ReActSingleInputOutputParser
from dotenv import load_dotenv
load_dotenv()
llm = OpenAI()
llm_with_stop = llm.bind(stop=["\nObservation"])
tools = load_tools(["ddg-search", "llm-math"], llm=llm)
prompt = hub.pull("hwchase17/react")
prompt = prompt.partial(
tools=render_text_description(tools),
tool_names=", ".join([t.name for t in tools]),
)
agent = (
{
"input": lambda x: x["input"],
"agent_scratchpad": lambda x: format_log_to_str(x["intermediate_steps"]),
}
| prompt
| llm_with_stop
| ReActSingleInputOutputParser()
)
agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True)
res = agent_executor.invoke({"input": "今天上海和北京的气温差几度?"})
print(res)