大数跨境

没有成熟 BI,我用 AI 做了一个“问数 MCP”

没有成熟 BI,我用 AI 做了一个“问数 MCP” AI产品经理研习与实践
2026-07-17
5
导读:一次真实的小实验:在没有成熟 BI、老系统又难以灵活定制的情况下,我如何用 Codex 和 Supabase,做出一条可复用、可确认、受控制的自然语言问数路径。

🚀 欢迎来到AI产品经理研习之旅 🚀

阅读约 8–10 分钟

过去2天,我用 Codex(现在应该叫ChatGPT哈哈) 和 Supabase 做了一件不算大、但很有意思的事:做了一个可以用自然语言问公司数据的 MCP。

Supabase 是一套带数据库和云端运行能力的服务;MCP 可以先理解为 AI 连接外部系统的一种标准方式。

“能不能帮我把符合这些条件的客户找出来,再看看他们过去的消费情况?”

如果公司已经有成熟的 BI(商业智能)平台,这可能只是一项普通分析。

但我们的数据基础还比较薄弱,没有专业 BI,老业务系统也很难根据临时需求灵活定制。于是我开始想:与其每次都帮业务捞一遍数据,能不能让 AI 在受控范围内自己理解问题、查询数据、解释结果?

01 / 为什么要做一个问数 MCP

业务问题很少一成不变。

这次按时间筛,下次可能增加渠道;这次只看人数,下次又想看消费;刚导出一版,业务又发现“有效客户”的定义需要调整。

📌 当时的现实条件

  • 没有成熟 BI,业务无法自助分析;
  • 老系统难以定制,新条件可能产生新开发;
  • 数据表和历史数据还在逐步补齐;
  • 业务问题却不会等平台建好才出现。

人工捞数很容易进入一个循环:

人工捞数从提问、解释、导出再到条件变化的循环

图1:条件一变,人工捞数就很容易从头再来

方案
更适合什么
主要局限
人工捞数
偶发、低频问题
条件变化后重复劳动
固定报表或 BI
高频、稳定指标
难覆盖临时探索
问数 MCP
条件经常变化的问题
依赖数据质量和业务确认

我没有把 MCP 当成 BI 的替代品。它更像一种阶段性能力:当问题真实存在、条件不断变化,又暂时不值得为每个问题开发报表时,先补一条灵活的问数路径。

02 / 什么是问数 MCP

如果把公司数据比作一个仓库,那么问数 MCP 就是 AI 必须经过的服务窗口。

AI 不能直接进入仓库随便翻。它只能先查看允许使用的数据,再了解字段含义,最后提交一条受限制的只读查询。

业务人员通过 AI 和 MCP 访问 Supabase 的架构

图2:MCP 位于 AI 与数据库之间,负责目录、门禁和执行规则

角色
负责什么
业务人员
提供业务语义、确认口径、验收结果
Codex / AI
理解问题、生成查询、解释结果
MCP
开放数据目录、执行受控查询、返回证据
Supabase
存储数据、执行最终权限和资源限制
不是让 AI 直接进入数据库,而是在 AI 和数据库之间加一扇有目录、有门禁、有规则、有记录的窗口。

03 / 我和 Codex 是怎么做的

这个项目不是从“我要开发一个 MCP”开始的,而是从一个真实业务问题逐步收敛。

真实业务问题   → 重构产品目标   → 确定数据与权限边界   → Codex 协助实现   → 测试成功与拒绝路径   → 记录未完成项

最初的交付目标只是一份查询结果。继续追问后,它被重构为一条可重复使用的问数路径。

第一版也没有开放整个数据库,只选择少量已经验证、确实能支撑试点问题的数据。

Codex 参与了需求整理、方案比较、权限设计、代码实现、测试和文档检查。但哪些数据能开放、业务口径如何定义、风险是否可接受,仍然由人决定。

🤝 人与 AI 的分工

Codex 可以协助探索、实现和验证;人必须负责业务含义、数据范围、风险接受和发布决定。

当前项目已经完成内部技术验证,可以进入小范围受控试点;真实业务用户验收和长期运营仍需继续完成。技术跑通,不等于业务上线。

04 / 一次问数是怎样流转的

为了让 Agent 不凭记忆猜数据,我们把问数过程拆成三个最小能力。

能力
用人话解释
为什么需要
查看数据源
先看窗口里提供哪些数据
防止 AI 假设不存在的数据
了解数据源
查看字段、粒度、关联和质量说明
写查询前先理解数据
执行查询
提交一条受控只读查询
真正取得汇总、样本或明细

一个完整请求大致这样流转:

业务问题   → 查看可用数据   → 了解字段与质量   → 生成需求理解卡   → 用户确认   → 执行只读查询   → 返回结果与证据

前三步解决“AI 是否理解了数据”,理解卡解决“AI 是否理解了业务问题”,最后的查询和证据解决“实际执行了什么”。

真正让这个流程稳定下来的,是下面三项设计:MCP 的工程结构、问数 Skill,以及需求理解卡。

05 / 一个能用的 MCP,实际包含什么

如果只是让 AI 执行一条查询,代码可能并不复杂。

但一旦准备交给业务用户,问题会迅速变多:谁能用?能看什么?查询太大怎么办?离职后如何取消访问?升级后怎样证明原有边界没有失效?

下面是经过重新命名和简化后的项目目录:

business-data-mcp/├─ supabase/functions/│  ├─ data-query-mcp/          # MCP 服务入口│  └─ _shared/│     ├─ catalog               # 开放哪些数据│     ├─ auth                  # 谁可以使用│     ├─ sql-guard             # 哪些查询可以执行│     ├─ limits                # 查询多少、查询多久│     └─ logging               # 留下脱敏证据├─ skills/business-data-query/ # AI 的问数工作方法├─ tests/                      # 权限、安全和查询测试├─ docs/                       # 用户指南、验证和运维└─ config/                     # 客户端配置示例

目录里的每一部分,都对应一个产品问题。

组成
解决的实际问题
数据目录
AI 和用户知道哪些数据可用、字段是什么意思
身份校验
能识别人、单独授权、取消和追踪
查询防护
拒绝写操作、越界数据和危险查询
资源限制
避免一次查询返回过多或运行过久
脱敏审计
出现问题时有证据,又不复制敏感数据
测试与文档
既验证“能查”,也验证“不该查时会拒绝”

这里最容易被低估的是:防线不能只有一层。

数据库权限、MCP 防护和 Skill 工作流三层约束

图3:底层权限、执行规则与人机工作流共同构成三层约束

三层不是重复建设。

数据库权限负责“底线”,MCP 负责“执行过程”,Skill 负责“AI 的工作方式”。即使 AI 没有遵循 Skill,它也不能越过 MCP 和数据库权限;即使查询在技术上允许,Skill 仍然要求先让业务人员确认口径。

📦 从 Demo 到可用工具

一个真正可使用的 MCP,不只有查询代码,还需要数据目录、身份、权限、防护、测试、文档和运维。

06 / 为什么有了 MCP,还需要问数 Skill

MCP 解决“AI 能安全地做什么”,Skill 解决“AI 应该怎样完成一次问数”。

Skill 可以理解为给 AI 的标准作业流程。下面是经过通用化处理的核心提示词:

收到新的业务问题后:
1. 查看当前开放的数据源和字段说明;2. 判断用户需要汇总、少量样本还是详细数据;3. 展示“查询理解卡”;4. 等待用户确认或纠正业务口径;5. 确认后执行受控只读查询;6. 返回结果,并说明数据来源、条件和风险。
MCP
Skill
决定 AI 能做什么
规定 AI 应该怎样做
属于系统和权限边界
属于行为和工作流边界
防止越权和危险查询
防止跳步、误解和黑箱输出
必须在服务端强制生效
让每次问数更稳定、更容易审核

Skill 不能替代 MCP。

如果只在提示词里写“不要访问敏感数据”,AI 仍然在技术上拥有访问能力;真正的权限必须由 MCP 和数据库强制执行。

同样,MCP 也不能替代 Skill。系统可以保证查询合法,却无法保证 AI 每次都先向用户解释“我准备查什么”。

查询结束后,Skill 还要求返回一份业务人员看得懂的执行说明:

查询结果- 关键结论:……- 指标与数值:……
实际查询说明- 使用了哪些数据:……- 实际筛选和时间范围:……- 返回的是汇总、样本还是明细:……- 结果是否被截断:……- 仍需业务判断的风险:……

这让一次问数形成闭环:查询前确认意图,查询后说明事实。

🧭 Skill 的真正价值

不在于提示词有多长,而在于把稳定的工作步骤固化下来:不猜数据、不跳过确认、不隐藏实际查询边界。

07 / 为什么一定要有“需求理解卡”

需求理解卡是整套设计里,我认为最值得保留的部分。

自然语言问数最危险的情况,未必是 AI 写出一条报错的 SQL。更危险的是:AI 把问题理解错了,却给出了一个看起来很合理的答案。

“帮我看看近期消费过的客户,以及他们的消费金额。”

这句话里至少藏着六个口径。

词语
可能的不同理解
近期
最近一个月、三个月还是一年?
客户
所有客户,还是某个渠道或地区?
消费
下单、付款,还是完成服务?
金额
订单金额、实收金额,还是扣除退款后的金额?
客户数
记录数,还是去重后的客户数?
结果
汇总、少量样本,还是详细名单?

如果 AI 自己选择一组定义,它完全可能生成语法正确的查询,却回答了另一个问题。

所以在查询之前,AI 先展示【查询理解卡】:

业务问题:查找近期有消费记录的客户,并统计消费金额。
需要确认:- “近期”具体指多长时间?- 客户范围是否有限定?- 金额使用哪一种业务口径?- 同一客户是否需要去重?- 只返回汇总,还是需要详细数据?- 是否需要返回姓名、电话等敏感信息?
请确认或修改以上口径,确认后再执行查询。

业务人员不需要阅读 SQL,也能发现 AI 是否理解错了。

例如,用户可能这样确认:

确认后的查询口径
- 时间范围:最近三个月- 客户范围:所有已完成交易的客户- 金额口径:实收金额- 去重方式:按客户去重- 输出粒度:只返回汇总,不要客户名单- 敏感信息:不返回姓名和联系方式
模糊提问经需求理解卡确认后再执行查询

图4:把误解拦在执行之前,而不是等错误答案出现后再返工

🛑 这不是思维链

需求理解卡不是模型内部推理过程,也不是让业务人员审核技术代码。

它是一份用户可以读懂、修改和确认的查询规格。

当数据源、时间范围、指标定义、结果粒度或敏感字段发生明显变化时,理解卡也应该重新确认,而不是沿用上一次的假设。

这项设计把“AI 理解错了”从结果阶段提前到了执行阶段。对业务问数来说,这可能比换一个更强的模型更有价值。

08 / 它的价值,以及接下来做什么

这个项目的价值,不只是“更快查出一个数字”。

价值层次
实际变化
第一次价值
更快回答一个具体业务问题
重复价值
条件变化后可以继续追问,不必重新开发报表
能力价值
业务人员用自然语言参与口径确认
长期价值
倒逼团队整理字段、质量、权限和指标口径

问数过程中,原本藏在少数人经验里的问题会不断暴露:同一个概念为什么有多个字段?哪个来源更可信?历史数据从什么时候开始完整?两个金额为什么对不上?

这些问题不是 MCP 制造的。MCP 只是让它们更早、更清楚地出现。

接下来,我准备同步推进两条路线。

问数 MCP 后续的数据扩充与口径治理两条路线

图5:一条路线拓宽数据范围,一条路线提高理解精度

第一条路线是继续补齐数据表和历史数据,再围绕更多真实问题进行查询、安全和业务验证。

第二条路线是同步整理数据字典和指标口径。数据字典告诉 AI 字段是什么、来自哪里、有哪些质量问题;指标口径告诉 AI 一个数应该怎么算、由谁最终解释。

层次
回答的问题
MCP
AI 能访问什么、执行什么?
Skill
AI 应该按什么步骤问数?
数据字典与指标口径
数据是什么意思、指标应该怎么算?

就酱。



👉 点赞+在看+分享,让我们一起探索更多AI前沿技术和产品实践 🌟

也欢迎你在留言区与我互动。

【声明】内容源于网络
0
0
AI产品经理研习与实践
现软件产品经理、前管理咨询顾问。坚信人工智能(AI)将会深刻影响我们未来的工作、学习、生活,因此我正在积极拥抱变化、研究和学习人工智能产品经理相关的知识和技能。
内容 77
粉丝 0
AI产品经理研习与实践 现软件产品经理、前管理咨询顾问。坚信人工智能(AI)将会深刻影响我们未来的工作、学习、生活,因此我正在积极拥抱变化、研究和学习人工智能产品经理相关的知识和技能。
总阅读290
粉丝0
内容77