chat-to-your-database
用自然语言"聊"SQL数据库,LangChain+GPT驱动,零SQL基础也能探索数据
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
用自然语言"聊"SQL数据库,LangChain+GPT驱动,零SQL基础也能探索数据
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
凌晨两点,你刚被老板的夺命连环 call 吵醒。老板想知道上个月销量 Top 10 的客户名单,但数据库里躺着几十万行订单数据,而你能调动的资源只有一杯冷咖啡和满屏的 SQL 语法。你深吸一口气,开始敲:
SELECT c.customer_name, COUNT(*) as order_count, SUM(o.total_amount) as total
FROM customers c
JOIN orders o ON c.id = o.customer_id
WHERE o.order_date >= DATE_SUB(NOW(), INTERVAL 1 MONTH)
GROUP BY c.id, c.customer_name
ORDER BY total DESC
LIMIT 10;
十五分钟后,你终于拿到了结果。但问题是:如果老板不懂 SQL,下次他还得找你。 如果换成业务人员,这个壁垒就更高了。
bayeru/chat-to-your-database 解决的就是这个问题——让任何人都能用自然语言"聊"着查询数据库,不需要懂 SQL。

图:Northwind 示例数据库查询界面截图,用户输入自然语言问题,系统返回 SQL 语句和查询结果。
这是一个实验性项目(作者在 README 中明确标注),由独立开发者 bayeru 创建,托管在 GitHub 上,当前版本 0.1.0。项目的核心目标是测试大语言模型(LLM)能否准确理解自然语言查询意图,并将其转换为正确的 SQL 语句。
从技术栈来看,这是一个典型的人工智能应用项目:
项目诞生于 2023 年 4 月(从资源链接时间戳推断),正是 ChatGPT 掀起大模型应用热潮的时间节点。作者的动机很明确:LangChain 刚发布 Python 版不久,TypeScript 版本也在快速迭代,用这个项目来探索 LLM + 数据库的可行性边界。
整个系统的运行流程可以概括为:用户提问 → AI Agent 理解意图 → 构造 SQL → 执行查询 → 返回结果。
前端(Next.js)负责接收用户的自然语言查询,通过 API 发送到后端 /api/chat 端点。后端的核心逻辑由 LangChain 的 SqlToolkit 和 createSqlAgent 驱动。
用户输入(自然语言)
↓
Next.js 前端 /api/chat
↓
OpenAI LLM (GPT-3.5-turbo/GPT-4)
↓
LangChain SqlAgent(推理 + 规划)
↓
SqlToolkit → SQL Database → 执行查询
↓
返回 SQL 语句 + 查询结果
↓
前端渲染(DataTable + SqlViewer)
项目的核心智慧藏在 src/lib/prompt.ts 中。LangChain SqlAgent 使用的 Prompt 被精心设计:
SQL_PREFIX 定义了 Agent 的角色和约束:
LIMIT 10),避免大结果集这套 Prompt 设计在 2023 年是非常领先的思路,它体现了对 AI Agent 幻觉问题和数据库安全的深刻理解。
系统的一个亮点是中间推理过程可见。用户不仅能看到最终结果,还能看到 AI 生成的 SQL 语句本身。如果对结果有疑问,可以直接审视 SQL 是否正确。以下是一个实际查询的流程:
"Show me the top 10 customers by revenue"customers 和 orders → 构造 JOIN → 编写 SUM(order_amount) → GROUP BY → ORDER BY DESC → LIMIT 10| 要求 | 说明 |
|---|---|
| Node.js | 18.x 及以上 |
| npm | 随 Node.js 附带 |
| OPENAI_API_KEY | 必须配置,GPT-3.5-turbo 或 GPT-4 均可 |
| 网络 | 需要能访问 OpenAI API |
# 1. 克隆仓库
git clone https://github.com/bayeru/chat-to-your-database.git
cd chat-to-your-database
# 2. 安装依赖
npm install
# 3. 配置 API Key
# 复制 .env.sample 为 .env.local,填入你的 OPENAI_API_KEY
cp .env.sample .env.local
# 4. 启动开发服务器
npm run dev
# 访问 http://localhost:3000
项目附带了一个完整的 Northwind 示例数据库,包含客户、订单、产品、供应商等表。无需额外配置,直接可以体验完整功能。
项目使用 TypeORM 作为 ORM 层,理论上支持 MySQL、PostgreSQL、SQLite 等多种数据库。修改 src/pages/api/chat.ts 中的 DataSource 配置即可切换:
const datasource = new DataSource({
type: "postgres", // 改为 postgres / mysql
host: "localhost",
database: "your_database",
username: "your_user",
password: "your_password",
});
项目topics中标注了 mysql、postgres、sqlite,说明作者在设计时考虑了多数据库支持。
这是一个前后端一体化架构(Monolithic),Next.js 同时承担了前端展示和 API 服务端职责。AI 逻辑完全托管在服务端,前端只做请求转发和结果渲染。
src/
├── components/ # React UI 组件
│ ├── ChatForm.tsx # 输入表单(自动聚焦、发送按钮)
│ ├── DataTable.tsx # 查询结果表格(自动驼峰转标题、分页感)
│ ├── Preloader.tsx # 加载动画
│ └── SqlViewer.tsx # SQL 语句高亮(atomOneDark 暗色主题)
├── lib/
│ └── prompt.ts # 核心 Prompt 模板(LangChain SqlAgent)
└── pages/
├── index.tsx # 主页面(状态管理、API 调用)
└── api/
└── chat.ts # 核心 API 端点(LangChain Agent 编排)
langchain v0.0.45,TypeScript 版本)new OpenAI() 初始化,温度 0 以保证确定性)SqlToolkit — 提供数据库查询工具,封装了 SQL 执行和结果解析逻辑createSqlAgent — 基于 ReAct 推理模式(虽然代码里没有明确暴露 thought/action/log,但 LangChain 内部实现)LangChain 在这个版本(0.0.45)还处于早期阶段,API 尚未稳定(后续版本中 SqlToolkit 有大幅重构),这是使用该项目时需要注意的版本依赖问题。
| 维度 | 评分 | 说明 |
|---|---|---|
| 整体评分 | 7/10 | 实验性质,代码简洁但缺乏测试和错误处理深度 |
| 代码结构 | 8/10 | 分层清晰,组件职责明确,Next.js 最佳实践 |
| 文档质量 | 6/10 | README 过于简略,仅包含安装命令 |
| 测试覆盖 | 3/10 | 无任何测试文件,实验项目特征明显 |
| TypeScript | 7/10 | 有类型定义,但部分 any 逃逸 |
正面:Prompt 中硬编码了 DML 限制(禁止 INSERT/UPDATE/DELETE),AI Agent 被约束为只读操作。
风险点:
.env.local 存储(正确做法),但代码中未做 Key 存在性校验1. 数据库 schema 理解依赖模型能力 LLM 对数据库结构的理解完全基于 LangChain SqlToolkit 自动抓取的表结构信息。在复杂数据库(上百张表、复杂外键关系)中,模型可能选错表或写错关联条件。
2. 幻觉问题 GPT 模型可能生成语法正确但语义错误的 SQL——比如对"最近一个月"的理解可能因为数据库时区设置而出现偏差。
3. 性能开销 每次查询都调用 OpenAI API,有延迟(通常 3-10 秒)和费用。复杂查询可能消耗较多 token。
4. LangChain 版本锁定 项目使用 LangChain v0.0.45,这是非常早期的版本。LangChain 后续版本(0.1.x 之后)API 变化很大,直接升级可能导致不兼容。
作者将版本标为 v0.1.0,README 第一句就说是"实验性应用"(experimental app)。从 GitHub 活动来看,项目在 2023 年 4-5 月有少量提交,之后基本处于停更状态。这意味着:
这个项目虽然简单,但它验证了一个重要的技术方向——Text-to-SQL。从 2023 年到 2026 年,Text-to-SQL 领域经历了爆发式发展:
该项目代表了 Text-to-SQL 的"Hello World"阶段——证明了 LangChain + GPT 的组合确实能完成自然语言到 SQL 的转换,为后续更复杂的实现奠定了基础。
bayeru/chat-to-your-database 是一个干净的、教科书级别的 LangChain + LLM 应用示例。它的价值不在于功能有多强大,而在于证明了用自然语言查询数据库这件事本身是可行的。如果你想理解 LangChain Agent 的工作原理,或者需要一个快速 Text-to-SQL 原型框架,这个项目值得 clone 下来跑一跑。但请记住——它是一个实验,不是产品。