最开始想做这个项目,是因为想做一个能赚钱的小产品——很多 SQL 初学者需要刷题,但纯题库又干又难,做错了不知道为什么错。我想做一个"刷题 + AI 讲解"的平台,类似力扣但更偏向入门学习者。
点击空白处退出提示
最开始想做这个项目,是因为想做一个能赚钱的小产品——很多 SQL 初学者需要刷题,但纯题库又干又难,做错了不知道为什么错。我想做一个"刷题 + AI 讲解"的平台,类似力扣但更偏向入门学习者。
主要功能有四块:
第一是**题库练习**,四个专题(HR、电商、教务、金融),69 道题,每道题都有独立的数据集。用户在编辑器里写 SQL,点运行看结果,点判题和标准答案对比。
第二是 **AI 解释 SQL**,粘贴任意 SQL,AI 用大白话解释这段代码在干什么,流式输出。
第三是 **AI 判题点评**,做错了 AI 帮你分析错在哪、往哪个方向改,但不直接给答案。
第四是**账号系统**,注册登录、免费用户每天 10 次 AI、会员每天 100 次、游客按 IP 每天 3 次体验,还有兑换码系统。
亮点 1:自建 SQL 判题引擎
判题这块我没有用在线 MySQL 服务,而是基于 SQLite 自己实现了一个判题引擎。每次判题都在内存库里重建专题数据,执行学生的 SQL,然后和标准答案的结果集对比。
这么做有几个好处:一是安全——内存库用完就销毁,天然隔离,不用担心用户改数据;二是成本低——不用搭数据库服务;三是可控制——我加了虚拟机指令数限制,防止笛卡尔积或者递归把服务卡死。
因为学生写的是 MySQL 语法,SQLite 有些函数不支持,我还自己实现了 YEAR、TIMESTAMPDIFF、CONCAT、DATE_FORMAT 这些常用 MySQL 函数的兼容层。
亮点 2:AI 功能的成本控制
因为是面向 C 端的产品,API 成本必须卡死。我做了几层防护:
- **配额制**:免费用户每天 10 次、会员 100 次、游客 3 次,北京时间零点自动重置
- **IP 限流**:注册、登录、AI 调用都有每分钟频率限制,防刷
- **并发闸**:限制同时进行的 AI 请求数,防止瞬间打爆
- **流式输出 + 断连即停**:用户关了页面就立刻停掉上游请求,不浪费 token
- **判题不消耗 AI**:纯本地判题,AI 只做解释和点评,把 AI 用在刀刃上
亮点 3:Prompt 工程的实践
AI 解释和 AI 点评用了不同的 prompt 设计思路:
解释型 prompt 是结构化输出——一句话总结、干了啥、重点说一下,三层结构,确保 AI 说人话不啰嗦。
点评型 prompt 有个关键设计——**不把参考答案发给模型**。只把判题结果(哪些列不对、缺了什么行)发给 AI,让它根据客观结果来分析错因。这样既防止 AI 直接泄题,又省 token。
所有 prompt 集中管理在一个文件里,改 prompt 不用动业务代码。




评论