AI驱动的SQL查询执行器
MCP+Supabase+拥抱面部+流光灯
一个智能系统,可以转换 将自然语言问题转化为SQL查询 并在 Supabase PostgreSQL 数据库。\ 由...驱动 MCP(模型上下文协议), 拥抱脸LLMs,现代 流线型UI.
______________________________________________________________________
概述
问以下问题:
“总收入排名前五的销售人员?”
该系统将:
- 使用A LLM(通过MCP) 转换自然语言→ SQL
- 通过安全机制执行SQL Supabase RPC
- 返回结构化结果 JSON 用于UI或分析
这提供了一个安全、用户友好的分析层,不需要SQL知识。
______________________________________________________________________
MCP集成
MCP(模型上下文协议) 充当LLM和数据库之间的安全桥梁。
MCP职责:
- 转换用户意图→ SQL
- 限制LLM直接访问数据库
- 仅通过批准的路径路由SQL RPC 函数
- 维护沙盒、受控执行
这确保了强大的安全性,同时保持了LLM的灵活性。
______________________________________________________________________
数据库模式
表: sales
| 列 | 类型 | 描述 |
|---|---|---|
| id | 序列(PK) | 唯一记录id |
| 地区 | 文本 | 销售地区 |
| 产品 | 文本 | 产品名称 |
| 价格 | 数字 | 单价 |
| 数量 | 整数 | 售出数量 |
| 日期 | 日期 | 交易日期 |
| 客户 | 文本 | 客户名称 |
| 销售人员 | 文本 | 销售人员处理销售 |
______________________________________________________________________
安全RPC功能
所有SQL都是通过受控RPC执行的:
create or replace function execute_raw_sql(query text)
returns json as $$
declare
result json;
clean_query text;
begin
clean_query := trim(both ';' from query);
execute 'select json_agg(t) from (' || clean_query || ') t' into result;
return coalesce(result, '[]'::json);
exception
when others then
return json_build_object('error', SQLERRM);
end;为什么这是安全的:
- 仅运行SELECT查询
- 删除不安全的分号
- 防止SQL注入
- 始终返回JSON
该仓库包含suabase_queries.sql,它:
- 创建表格
- 创建RPC
- 插入约50个样本行
______________________________________________________________________
项目结构
Copy code
/
├── app.py # Streamlit UI
├── main.py # Backend logic: NLP → SQL → RPC
├── supabase_client.py # Supabase connection helper
├── requirements.txt # Dependencies
├── supabase_queries.sql
└── .env # Credentials (not committed)______________________________________________________________________
配置
使用以下命令创建.env文件:
SUPABASE_URL=
SUPABASE_KEY=
HUGGINGFACE_API_KEY=
Supabase Init (supabase_client.py)
python
Copy code
supabase = create_client(os.getenv("SUPABASE_URL"), os.getenv("SUPABASE_KEY"))
response = supabase.rpc("execute_raw_sql", {"query": sql_query}).execute()______________________________________________________________________
流线型前端
UI允许用户:
- 输入自然语言问题
- 查看生成的SQL
- 以表格形式显示结果
______________________________________________________________________
运行项目
- 安装依赖项
pip install -r requirements.txt- 配置环境变量
- 从上面的模板创建.env。
- 启动后端服务
uvicorn main:app --reload- 启动Streamlit用户界面
streamlit run app.py______________________________________________________________________
示例输出
用户查询:
“按总销售额显示前5名销售人员”
系统响应:
{
"query": "SELECT salesperson, SUM(price * quantity) AS total_sales
FROM sales
GROUP BY salesperson
ORDER BY total_sales DESC
LIMIT 5",
"data": [
{ "salesperson": "Ananya Mehta", "total_sales": 1456000 },
{ "salesperson": "Ravi Kapoor", "total_sales": 1324000 }
]
}______________________________________________________________________
未来的增强功能
- 多表查询(产品、客户、地区)
- 模式感知SQL提示
- 查询日志和分析
- 可视化图表和仪表板
- 安全访问的用户身份验证
______________________________________________________________________
Loom视频链接:
https://www.loom.com/share/1618617288104c00a0e021a092bd0b2c
