SQL Agent:让大模型直接查数据库

Published by rcdfrd on 2026-02-16

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 在内部工具场景非常实用。安全方面要做好限制:只读权限、提示词约束、必要时加人工审核。