OllamaPostgres 语义查询
一个FastMCP服务器,通过集成LLM实现对PostgreSQL数据库的自然语言查询功能,允许用户用简单的英语生成SQL查询并可视化结果。
服务介绍
🚀 基于 MCP 的 Streamlit 仪表板,结合 Ollama + PostgreSQL
一个现代化的数据分析工具,允许您:
- 用自然语言查询您的 PostgreSQL 数据库
- 手动运行 SQL 或使用 LLMs(Ollama)生成 SQL
- 通过图表、统计数据和导出到 CSV 来分析数据
🧠 提示转 SQL 流程
graph TD
A[🧑 User types a data question] --> B[Streamlit sends prompt to Ollama API]
B --> C[Ollama generates SQL query as text]
C --> D[Streamlit extracts the SQL]
D --> E[Streamlit sends SQL to MCP server]
E --> F[MCP executes query on PostgreSQL]
F --> G[Results returned to Streamlit]
G --> H[📊 Results shown + Chart + CSV Export]
📦 架构
- Streamlit – 用户界面 + 图表
- MCP (FastMCP) – 用于 SQL 查询和表格列表的工具/资源
- PostgreSQL – 存储您的公司数据
- Ollama – 将自然语言提示转换为 SQL 的大语言模型
📌 功能
✅ 自然语言 → SQL
✅ 图表(条形图/折线图/时间序列)
✅ CSV 下载
✅ 统计摘要
✅ 提示可解释性及原始输出
✅ 自动检测日期/时间字段
✅ 与 llama3 的 LLM 集成(可配置)
🛠️ 快速开始
git clone <this-repo>
cd postgres-mcp-server
docker-compose up --build
- 访问 UI: http://localhost:8501
- MCP API: http://localhost:3333/mcp
⚙️ 环境配置
MCP_API_URL=http://mcp-server:3333/mcp
OLLAMA_URL=http://ollama:11434/api/generate
📤 提示示例
“列出平均工资大于 50000 的部门”
👉 转换为 SQL:
SELECT department, AVG(salary) FROM employees GROUP BY department HAVING AVG(salary) > 50000;
为什么这是一个适合 MCP 的好案例?
🔗 MCP 使将结构化的工具如 SQL 查询暴露给 LLM 变得极其简单。
🎯 代理可以发现并调用您的工具而无需硬编码逻辑。
💬 您可以同时获得最佳体验——可解释性、灵活性和控制力。
无论您是在构建内部工具、研究仪表板还是智能代理——这种模式都是可重用的、安全的,并且完全本地化。
📄 许可证
MIT