用 Gemini 造一个能操作数据库的 Skill,从此和手写 SQL 说再见

14 阅读4分钟

日常开发中,查询数据库这件事占了大量时间。写 SELECT、拼 JOIN、调 WHERE 条件——重复劳动多,出错概率也不低。如果你想让 AI 帮你接管这部分工作,Gemini 2.5 Pro 是目前一个值得尝试的选择。通过 KULAAI(k.877ai.cn 这类聚合平台,可以直接调用 Gemini、ChatGPT、Grok 等多个模型,国内网络直连,每天有额度可用,省去了自己折腾 API 接入的麻烦。下面重点聊聊,怎么基于 Gemini 搭一个能操作数据库的 Skill。


为什么要选 Gemini 做这件事

大模型处理 SQL 任务,核心看两点:上下文窗口够不够大,以及对结构化数据的理解能力够不够强。

Gemini 2.5 Pro 的上下文窗口达到了百万 token 级别。这意味着你可以把整张数据库的表结构、字段说明、甚至部分样本数据一次性喂给它,不需要反复分段传递。对复杂业务场景来说,这个优势很实在——模型能"看到"更多上下文,生成的 SQL 准确率自然更高。

另一个值得关注的点是 Gemini 对多模态输入的支持。你可以把数据库的 ER 图截图直接丢给它,它能识别表与表之间的关联关系,这在快速理解一个不熟悉的数据库时非常方便。


Skill 的核心设计思路

所谓 Skill,本质上就是一套预设的提示词(Prompt)加上必要的工具调用逻辑。目标很明确:用户用自然语言描述需求,Skill 负责把它翻译成可执行的 SQL,执行后返回结果。

整个流程分三步:

  1. 1.接收用户意图——把自然语言问题转成结构化的查询需求
  2. 2.生成 SQL——根据数据库 schema 生成对应语句
  3. 3.执行并返回——跑 SQL,把结果整理成人话反馈给用户

关键在第二步。要让 Gemini 生成准确的 SQL,必须给它足够清晰的上下文。


实操:搭建过程和提示词示例

第一步:准备数据库元信息

把你的表结构导出来,整理成一段清晰的描述。比如:

text

text
数据库类型:MySQL 8.0
表名:orders
字段:
- id (INT, 主键)
- user_id (INT, 关联 users 表)
- product_name (VARCHAR)
- amount (DECIMAL)
- status (ENUM: 'pending', 'paid', 'shipped', 'completed')
- created_at (DATETIME)

表名:users
字段:
- id (INT, 主键)
- username (VARCHAR)
- email (VARCHAR)
- region (VARCHAR)

第二步:编写系统提示词

这是 Skill 的灵魂。以下是一个可直接使用的模板:

text

text
你是一个数据库查询助手。根据用户的自然语言描述,生成对应的 MySQL 查询语句。

规则:
1. 只生成 SELECT 语句,不执行任何写入操作
2. 如果用户需求模糊,先给出最合理的解读,再在回复中说明假设
3. 输出格式:先给出 SQL 代码块,再用一两句话解释查询逻辑
4. 涉及日期时,默认使用 UTC+8 时区
5. 如果查询涉及多表关联,明确写出 JOIN 条件

当前数据库结构如下:
[此处粘贴上面的表结构]

第三步:测试几个典型问题

把 Skill 部署好后,试着问它:

  • "查一下上个月北京地区用户的订单总额"
  • "最近 7 天有哪些订单还没发货"
  • "统计每个地区购买金额排名前 3 的用户"

观察它生成的 SQL 是否正确,JOIN 条件有没有遗漏,日期范围是否合理。发现问题就微调提示词,多迭代几轮。


几个容易踩的坑

Schema 描述不够详细。 字段名是 status,但它代表什么状态?枚举值有哪些?不写清楚,Gemini 只能猜。描述越精确,输出越靠谱。

没有限制写操作。 如果不加约束,模型有可能生成 INSERT、UPDATE 甚至 DELETE。务必在提示词中明确限制,或者在代码层做二次校验。

忽略安全防护。 即便模型生成的 SQL 看着没问题,也一定要用参数化查询来执行,防止 SQL 注入。AI 生成的代码不能直接信任,该做的安全措施一步都不能省。


这套方案适合什么场景

数据分析师日常做临时查询、产品经理想自己拉数据看趋势、运营人员需要定期出报表——这些场景都很适合。它不是要取代 DBA,而是让非技术人员也能快速拿到自己想要的数据,同时把开发人员从重复性的 SQL 编写中解放出来。

Gemini 在这类结构化任务上的表现确实可圈可点,尤其是大上下文窗口带来的优势,在处理复杂业务表结构时体会会更明显。如果你正在找一个能降低数据库查询门槛的方案,不妨动手试一试。