in databao/duckdb/react_tools.py [0:0]
def make_react_duckdb_agent(con: DuckDBPyConnection, llm: BaseChatModel) -> CompiledStateGraph[Any]:
"""
Create a ReAct agent configured to work with DuckDB.
Args:
con: DuckDB connection to execute queries against.
llm: Language model to use for the agent.
Returns:
A compiled LangGraph ReAct agent.
"""
schema_text = describe_duckdb_schema(con)
# TODO move to .jinja (and fix indendation)
SYSTEM_PROMPT = f"""You are a careful data analyst using the ReAct pattern with tools.
Use the `execute_sql` tool to run exactly one DuckDB SQL statement when needed.
Guidelines:
- Translate the NL question to ONE DuckDB SQL statement.
- Use provided schema.
- You can fetch extra details about schema/tables/columns if needed using SQL queries.
- After running, write a concise, user-friendly explanation.
- Do NOT write any tables/lists to the output.
- Always include the exact SQL you ran.
- Always use the full table name in query with db name and schema name.
Available schema:
{schema_text}
"""
# LangGraph prebuilt ReAct agent
execute_sql_tool = make_duckdb_tool(con)
tools = [execute_sql_tool]
agent = create_react_agent(
llm,
tools=tools,
prompt=SYSTEM_PROMPT,
response_format=AgentResponse,
)
return agent