别再往 Prompt 里塞数据库字典了,试试用 COMMENT ON 给 AI Agent 写指南

程序员老陈 初级 2026/7/24 797 浏览 8 点赞 约 2 分钟

很多开发者在构建 AI Agent 辅助查询数据库时,最头疼的不是 LLM 的 SQL 语法能力,而是它对业务逻辑的“误解”。即便你把 DDL 全喂给它,它能识别出 order_amountnumeric 类型,但它绝不可能知道这个字段在 2023 年之后就被弃用了,或者某个视图才是计算 GMV 的唯一权威来源。结果就是 Agent 经常一本正经地写出逻辑错误但语法完美的 SQL。

我最近在团队内部推行一套方案:放弃在 Prompt 里维护几千字的“数据库字典”,直接把业务逻辑通过 PostgreSQL 的 COMMENT ON 语句打在数据库元数据里。

这种做法的核心逻辑是:让数据库本身成为 AI 的“操作手册”。当你使用支持 MCP(Model Context Protocol)协议的工具(比如 Kozou)时,Agent 在检索 Schema 阶段会自动拉取这些 COMMENT 内容。这意味着你写在数据库里的注释,直接变成了 Agent 定位数据的实时索引,且永远与版本同步。

为了让 AI 能够精准解析这些注释,我建议建立一套标准化的 Tag 标注习惯,而不是随缘写注释。推荐使用以下三类标签:

1. @ai:专门给 Agent 的指令或避坑指南。例如明确告知某个字段已弃用,或者在多个相似字段中指定首选。
2. @policy:记录业务逻辑规则。虽然这些规则在数据库层面不强制执行,但能让 AI 在生成 WHERE 子句时知道过滤条件。
3. @example:为复杂的视图或表提供一个可执行的查询示例,让 AI 通过 Few-Shot 快速模仿。

但在实操过程中,有三个非常隐蔽的坑点,如果没处理好,AI 可能会直接忽略你的指令:

首先,Tag 必须写在行首。如果你把 @ai 写在描述文字的中间,很多解析器会将其视作普通文本,导致指令失效。
其次,单行只能承载一个 Tag。如果你需要告诉 AI 两个不同的要点,必须换行写,不能在同一行堆叠多个 @ai
最坑的一点是标点符号:冒号必须使用英文半角 :。我之前在测试时误用了中文全角 ,结果 Agent 完全没反应,而且数据库执行时没有任何报错,排查起来非常浪费时间。

这里分享两个实战场景的写法:

场景一:处理冗余字段。假设 orders 表里有一个 amount_total 字段,但由于历史原因它不准,必须通过 order_items 求和。你可以这样写:
COMMENT ON COLUMN orders.amount_total IS 'DEPRECATED denormalized order total. @ai: Do NOT use this column for calculations; use order_items sum instead.';

场景二:指明权威数据源。当数据库里有多个状态视图时,明确告诉 AI 谁才是“真理”:
COMMENT ON VIEW active_subscriptions IS 'Current active subscriptions. @ai: This is the authoritative source for subscription status.';

对比传统的“外部文档 → 复制到 Prompt → AI 读取”链路,这种将元数据管理交还给 DB 的方案效率极高。它解决了文档同步滞后的问题,让数据库 Schema 变成了具备自解释能力的知识库,真正实现了“数据与逻辑共存”。

工作流AI落地aiagentsmcppostgres
AI工具与大模型实操经验整理在Claude实战技巧汇总,有不少直接可参考的案例。

全部回复 (3)

架构师老刘 中级 2026/7/24
要是表太多,全靠手动写注释得累死,有啥好工具能批量同步吗?
0 回复
小Ray在路上 中级 2026/7/24
建议把字段的取值范围也写在注释里,AI写过滤条件准很多。
0 回复
老大鹏 专家 2026/7/24
确实,之前试过在Prompt里写字典,太长了AI反而容易漏看。
0 回复

发表回复

支持 Markdown 格式