自然语言 → SQL → MySQL 查询 → ECharts 图表。Notion 风格单页应用,支持 Kimi(Moonshot)大模型或内置规则引擎。
- 输入中文自然语言,自动生成并执行
SELECT查询 - 展示用户需求、SQL(语法高亮)、图表(折线 / 柱状)
- 大模型:OpenAI 兼容接口(默认 Moonshot 中国)
- 无 API Key 时自动回退内置规则解析
- Node.js 18+
- MySQL 8.0,库表
teaching_db.slides_data
git clone <你的仓库地址>
cd sql-echart
npm installcp .env.example .env编辑 .env,填入真实配置。切勿将 .env 提交到 Git(已在 .gitignore 中忽略)。
PORT=3000
DB_HOST=localhost
DB_PORT=3306
DB_NAME=teaching_db
DB_USER=student
DB_PASSWORD=你的数据库密码
npm start浏览器打开 http://localhost:3000,在 模型设置 中自行填写 API Key(程序不提供默认值)。
| 输入 | 说明 |
|---|---|
| 查询最近7天线索趋势 | 时间序列 |
| 按月统计线索数据量 | 按月聚合 |
| 最近30天线索总和 | 汇总 |
| 查询全部线索 | 全表 |
| 场景 | 要求 |
|---|---|
| 大模型生成 SQL | 须同时填写 模型名称、模型地址、API Key(无默认值) |
| 内置规则模式 | 三项全部留空时使用,无需 API Key |
填写后点击「保存设置」写入浏览器 localStorage(仅本机)。
| 做法 | 说明 |
|---|---|
| ✅ 页面手动填写 Key | 不硬编码、不从服务端注入默认 Key |
✅ .env 仅存数据库密码 |
见 .env.example |
| ❌ 不要硬编码 Key | 不要写在源码、README、截图里 |
❌ 不要提交 .env |
已加入 .gitignore |
若密钥曾泄露,请在平台轮换后重新填写。
表结构见 requrement.md。需事先建好库表与数据,本项目不包含 Docker 初始化脚本。
CREATE TABLE slides_data (
num INT AUTO_INCREMENT PRIMARY KEY,
add_date DATE NOT NULL,
slides INT NOT NULL
);| 命令 | 说明 |
|---|---|
npm start |
启动服务 |
npm test |
运行测试(需服务已启动) |
sql-echart/
├── .env.example # 环境变量模板
├── .gitignore
├── README.md
├── requrement.md # 需求说明
├── server.js # Express 入口
├── lib/core.js # SQL 生成 / 校验 / LLM
├── public/ # 前端
└── tests/run-tests.js
- 生产环境使用
LLM_API_KEY+DB_*环境变量,或 PM2 / 容器注入 - 前置 Nginx 并启用 HTTPS
- 不要将
.env打进镜像或公开仓库
MySQL 未连接 — 检查数据库服务与 DB_* 配置。
模型请求失败 — 检查 Key 是否有效、地址是否为 https://api.moonshot.cn/v1、账户余额。
图表月份乱序 — 前端已对 YYYY-MM 自动排序;建议在 SQL 中加 ORDER BY。
上传 GitHub 前 — 执行 git status,确认无 .env;可运行:
# 检查仓库中是否误含密钥格式(应无输出)
git grep -E "sk-[A-Za-z0-9]{20,}" -- . ":!package-lock.json"MIT(可按需修改)