基于LLM的自然语言转SQL Server
概述
这台服务器利用大型语言模型(LLMs)将自然语言查询转换为SQL语句。它不依赖于模式匹配,而是借助人工智能来理解您的意图,并生成相应的SQL查询。
特点/特性
- 多个大型语言模型(LLM)提供商OpenAI、Anthropic Claude、Ollama(本地)和Groq
- 智能SQL生成大型语言模型(LLM)能够理解上下文并生成复杂的SQL语句
- 模式感知为大型语言模型(LLM)提供数据库模式,以生成准确的查询
- 安全验证验证生成的SQL语句,以防止危险操作
- 美观的网页用户界面实时SQL生成的交互式界面
- 批处理同时处理多个查询
快速入门
1. 安装依赖项
cd http-server
npm install2. 配置大型语言模型(LLM)提供商
复制示例配置:
cp .env.example .env编辑 .env 并添加您的大型语言模型(LLM)配置:
选项A:OpenAI(推荐)
LLM_PROVIDER=openai
LLM_API_KEY=sk-your-openai-api-key
LLM_MODEL=gpt-4-turbo-preview选项B:Anthropic的Claude
LLM_PROVIDER=anthropic
LLM_API_KEY=sk-ant-your-anthropic-key
LLM_MODEL=claude-3-opus-20240229选项C:Ollama(本地,免费)
LLM_PROVIDER=ollama
LLM_MODEL=codellama
# No API key needed!首先安装Ollama并拉取一个模型:
# Install from https://ollama.ai/
ollama pull codellama选项D:Groq云(快速)
LLM_PROVIDER=groq
LLM_API_KEY=gsk-your-groq-key
LLM_MODEL=mixtral-8x7b-327683. 设置数据库
创建包含示例数据的测试数据库:
npm run setup-db4. 启动服务器
npm start
# or for development with auto-reload
npm run dev5. 打开浏览器
导航至 http://localhost:3000
它是如何工作的
- 你写的是自然语言“给我展示前五大客户的总订单金额”
- 大型语言模型(LLM)接收上下文:
- 您的查询 - 完整的数据库模式 - SQL生成指令
- 大型语言模型生成SQL:
SELECT u.username, u.email, SUM(o.total_amount) as total_spent
FROM users u
JOIN orders o ON u.id = o.user_id
GROUP BY u.id, u.username, u.email
ORDER BY total_spent DESC
LIMIT 5- 服务器验证并执行 SQL(Structured Query Language,结构化查询语言)
- 返回结果 为提高透明度,附上生成的SQL语句
API 端点
生成并执行查询
POST(邮政) /api/llm/query
curl -X POST http://localhost:3000/api/llm/query \
-H "Content-Type: application/json" \
-d '{
"prompt": "Show me customers who spent more than $1000"
}'回答:
{
"success": true,
"prompt": "Show me customers who spent more than $1000",
"generatedSQL": "SELECT u.username, u.email, SUM(o.total_amount) as total_spent FROM users u JOIN orders o ON u.id = o.user_id GROUP BY u.id HAVING total_spent > 1000",
"result": {
"columns": ["username", "email", "total_spent"],
"data": [...]
},
"llmProvider": "openai",
"model": "gpt-4-turbo-preview"
}仅生成SQL
POST(邮政) /api/llm/generate
生成SQL语句而不执行它:
curl -X POST http://localhost:3000/api/llm/generate \
-H "Content-Type: application/json" \
-d '{
"prompt": "Delete all inactive users"
}'批处理
POST(邮政/帖子/发布) /api/llm/batch
处理多个查询:
curl -X POST http://localhost:3000/api/llm/batch \
-H "Content-Type: application/json" \
-d '{
"prompts": [
"Count all users",
"Average order value",
"Top selling product"
]
}'测试LLM连接
POST(邮政/帖子/发布) /api/llm/test
curl -X POST http://localhost:3000/api/llm/test获取模式(或架构)
GET(获取) /api/schema
返回当前的数据库架构。
自然语言查询示例
大型语言模型(LLM)能够理解复杂且自然的查询:
基本查询
- “显示所有用户”
- “列出50美元以下的产品”
- “获取最新订单”
复杂查询
- “查找那些已下单超过3次但最近30天内未下单的客户”
- “给我展示过去一年每个月的收入趋势”
- “哪些产品经常一起被购买?”
- “找出从未进行过购买的用户”
聚合
- “按客户细分来看,平均订单价值是多少?”
- “显示月度销售增长率”
- “计算前10大客户的终身价值”
连接与关系
- “显示所有订单,包括客户详细信息和产品信息”
- “列出客户及其最常购买的产品类别”
- “查找从未订购过的产品”
大型语言模型(LLM)提供商对比
| 服务提供商 | 优点 | 缺点 | 最适合 |
|---|---|---|---|
| OpenAI GPT-4 最佳SQL生成,处理复杂查询 | 需付费,需API密钥 | 生产环境使用 | |
| Anthropic的Claude 出色的推理,安全的输出 | 需要付费,需要API密钥 | 复杂的业务逻辑 | |
| Ollama(本地) 免费、私密、无API限制 | 需要本地资源,速度较慢 | 开发、隐私敏感 | |
| Groq 非常快,质量好 | 需要API密钥 | 大量查询 |
配置选项
环境变量
# LLM Settings
LLM_PROVIDER=openai # Provider choice
LLM_API_KEY=sk-... # API key (not needed for Ollama)
LLM_MODEL=gpt-4-turbo-preview # Model selection
LLM_TEMPERATURE=0.1 # 0.0-1.0 (lower = more deterministic)
LLM_MAX_TOKENS=500 # Max response length
# For Ollama
LLM_BASE_URL=http://localhost:11434 # Ollama server URL
# Database
DB_URL=sqlite:///test.db # Your database connection温度设置
0.0-0.3确定性、一致性的SQL生成(推荐)0.3-0.7平衡创意与一致性0.7-1.0更具创意,可能为相同提示生成不同的SQL
安全特性
- SQL 验证防止危险操作,如
DROP DATABASE - 查询限制自动添加 LIMIT 子句以防止返回大量结果集
- 模式隔离LLM只看到模式,看不到实际数据
- 参数化生成的SQL在执行前会经过验证
故障排除
大型语言模型(LLM)未能生成有效SQL
- 检查您的API密钥是否正确
- 验证模型名称是否有效
- 尝试将温度降低到0.1
- 先用更简单的查询进行测试
连接错误
# Test LLM connection
curl -X POST http://localhost:3000/api/llm/test
# Check health
curl http://localhost:3000/healthOllama 安装设置
# Install Ollama
curl -fsSL https://ollama.ai/install.sh | sh
# Pull a model
ollama pull codellama
# Start Ollama server
ollama serve
# Test
curl http://localhost:11434/api/generate -d '{
"model": "codellama",
"prompt": "SELECT * FROM users LIMIT 1"
}'高级用法
自定义系统提示
修改系统提示中的 server.js:
function createSQLGenerationPrompt(userQuery) {
return `You are a SQL expert. Generate optimized SQL...
Additional rules:
- Always use indexes when available
- Prefer JOIN over subqueries
- Add comments for complex logic
User request: "${userQuery}"`;
}添加新的大型语言模型(LLM)提供商
添加一个新的提供商 server.js:
case 'your-provider':
return await callYourProvider(prompt);
async function callYourProvider(prompt) {
// Your implementation
}监控和日志记录
服务器日志:
- 所有自然语言查询
- 生成的SQL语句
- 执行时间
- 错误和警告
查看日志:
npm start 2>&1 | tee llm-server.log性能优化技巧
- 缓存模式启动时缓存模式
- 使用合适的模型:
- GPT-3.5-turbo适用于简单查询(更快、更便宜) - GPT-4用于复杂查询(准确性更高)
- 批量查询使用批量端点进行多次查询
- 本地模型使用Ollama进行开发以节省API成本
成本估算
| 提供者 | 模型 | 每次查询的成本\* | 速度 |
|---|---|---|---|
| OpenAI | GPT-4-turbo | 约0.03美元 | 2-3秒 |
| OpenAI | GPT-3.5-turbo | 约0.002美元 | 1-2秒 |
| 人类(Anthropic) | Claude-3-Opus | 约0.04美元 | 2-3秒 |
| 人类偏好模型 | Claude-3-Haiku | 约0.001美元 | 1-2秒 |
| Ollama | Codellama | 免费 | 3-5秒 |
| Groq | Mixtral | 约$0.001 | \ 500 |
AND days_since_last_order > 60 ORDER BY lifetime_value DESC LIMIT 10;
## 贡献
要添加新功能或大型语言模型(LLM)提供商:
1. 为仓库创建分支(或:克隆仓库)
1. 添加您的提供商 `server-llm.js`
1. 更新文档
1. 提交一个拉取请求
## 许可证
与MCP炼金术主项目相同。
## 支持
对于问题或疑问:
- 查看故障排除部分
- 查看服务器日志
- 测试LLM连接端点
- 验证数据库模式是否已加载