SQL Agent:让大模型直接查数据库
SQL Agent:让大模型直接查数据库
不会写 SQL 的产品经理想查数据?让大模型来。LangChain 的 SQL Agent 能自动分析表结构、生成查询、执行并返回结果。
基本搭建
from langchain_community.utilities import SQLDatabase
from langchain_community.agent_toolkits import SQLDatabaseToolkit
from langchain.agents import create_agent
from langchain.chat_models import init_chat_model
model = init_chat_model("openai:gpt-4.1-mini")
db = SQLDatabase.from_uri("sqlite:///data/Chinook.db")
print(db.get_usable_table_names())
toolkit = SQLDatabaseToolkit(db=db, llm=model)
tools = toolkit.get_tools()
SQLDatabaseToolkit 会生成几个工具:查表名、查表结构、执行 SQL、检查语法。
系统提示词很关键
system_prompt = """你是一个 SQL 数据库交互专家。
根据问题生成正确的查询语句。
注意:先查看有哪些表,再查相关表的结构,执行前检查语法。
不要执行 INSERT/UPDATE/DELETE,默认限制返回 5 条。"""
agent = create_agent(model, tools, system_prompt=system_prompt)
提示词里明确限制不做写操作,这很重要。
加上人工审核
不放心模型生成的 SQL?在执行前加审核:
from langchain.agents.middleware import HumanInTheLoopMiddleware
from langgraph.checkpoint.memory import InMemorySaver
agent = create_agent(
model, tools,
system_prompt=system_prompt,
middleware=[HumanInTheLoopMiddleware(
interrupt_on={"sql_db_query": True}
)],
checkpointer=InMemorySaver(),
)
每次执行 SQL 前都会暂停等你确认。approve 就执行,reject 就拒绝。
小结
SQL Agent 在内部工具场景非常实用。安全方面要做好限制:只读权限、提示词约束、必要时加人工审核。