-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathreact_search_agent.py
More file actions
40 lines (34 loc) · 1.44 KB
/
react_search_agent.py
File metadata and controls
40 lines (34 loc) · 1.44 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
from dotenv import load_dotenv
from langchain_classic.agents import create_react_agent, AgentExecutor
from langchain_core.output_parsers import PydanticOutputParser
from langchain_core.prompts import PromptTemplate
from langchain_core.runnables import RunnableLambda
from langchain_ollama import ChatOllama
from schemas import AgentResponse, REACT_PROMPT_TEMPLATE
from tools import search_tool
import dotenv
load_dotenv(verbose=True)
import os
def run_agent():
llm = ChatOllama(
model="qwen3:30b-a3b",
reasoning=True,
temperature=0.8,
validate_model_on_init=True,
)
output_parser = PydanticOutputParser(pydantic_object=AgentResponse)
prompt = PromptTemplate(input_variables=["input", "tools", "tool_names", "agent_scratchpad"],
template=REACT_PROMPT_TEMPLATE).partial(
format_instructions=output_parser.get_format_instructions())
agent = create_react_agent(llm=llm, tools=[search_tool], prompt=prompt)
agent_executor = AgentExecutor(agent=agent, tools=[search_tool],
handle_parsing_errors=True, verbose=True)
extract_output = RunnableLambda(lambda x:x['output'])
parse_output = RunnableLambda(lambda x:output_parser.parse(x))
chain = agent_executor | extract_output | parse_output
result = chain.invoke({
"input": "What are the new for today?",
})
print(result)
if __name__ == '__main__':
run_agent()