| 层 | 职责 | 类比 |
|---|---|---|
| MCP Server | 通道:能执行 SQL / 列表 / 查询 | 数据库连接 |
| Skill(本框架) | 领域知识:查什么表、用什么模板、怎么解读 | DBA 的操作手册 |
| Agent | 读 skill → 选模板 → 调 MCP → 按契约输出 | 实习生照手册干活 |
核心价值:不部署任何东西,公司 server 原样用;业务逻辑全在 markdown,改口径 / 加维度 / 调格式改几行就生效。
{占位符}:归因 / 备件 / 激增 …-- symptom → component 归因排序(反向两跳推理)
SELECT component, fault_mode, count(*) n,
round(avg(downtime_h),1) avg_dt
FROM atlas.v_fault_tree
WHERE symptom = '{X}'
GROUP BY 1,2
ORDER BY n DESC LIMIT 5;
下面是可整份复制的 SKILL.md(Hermes / Claude Code / Copilot 通用格式),四件套全部填实,换表名即可用于你自己的数据源:
---
name: mcp-data-query-skill-pattern
description: 当 MCP server 能查数据但 agent 输出漂移时用。四件套把探索沉淀为稳定查询。
---
# MCP 数据查询的 Skill 沉淀框架(Prompt 层语义层)
适用:公司提供通用 MCP 查询工具(如 Databricks query / list_tables),
agent 能探索但答案格式漂移、SQL 不稳定。目标是把「能查」升级为「会查」。
## 分层心智模型
| 层 | 职责 | 类比 |
|---------------|--------------------------------------|----------------|
| MCP server | 通道:能执行 SQL / 列表 | 数据库连接 |
| Skill(本框架)| 领域知识:查什么表、用什么模板、怎么解读 | DBA 操作手册 |
| Agent | 读 skill → 选模板 → 调 MCP → 按契约输出 | 实习生照手册干活 |
核心价值:不部署任何东西(公司 server 原样用),业务逻辑全在
markdown,改口径/加维度/调格式改几行就生效。
## 工作流:探索 → 沉淀
1. **探索期**:让 agent 自由探索 MCP 数据源(裸 SQL),人观察哪些查询反复出现
2. **沉淀时机**:同一类问题问过 2-3 次、SQL 稳定、输出格式有共识 → 写入 skill
3. **沉淀动作**:把探索结论填进四件套
## 四件套(SKILL.md 必含结构)
### 1. 表结构地图
库名/表名、每表维度与度量、主键与粒度声明(「每行=一条工单」)。
聚合错误多数源于对粒度理解错。
### 2. 查询模板
不让 agent 现编 SQL。每个高频问题一个命名模板,参数用 {占位符}:
- 归因: SELECT component, fault_mode, count(*) n
FROM {view} WHERE symptom='{X}'
GROUP BY 1,2 ORDER BY n DESC LIMIT 5
- 备件: SELECT action_type, count(*) FROM {view}
WHERE component='{X}' GROUP BY 1 ORDER BY 2 DESC
- 激增: 近30天 vs 前180天/6 环比,阈值 >2 倍且 ≥5 单
### 3. 调用规则
用户问句 → 模板映射表。「报现象」→归因;「带什么件」→备件;
「最近有没有问题」→激增。无匹配才允许自由探索,并提示用户考虑沉淀。
### 4. 输出契约
每类回答固定结构。归因必含:排序列表(部件/故障/单数/占比)
+ 平均停机 + 一句排查建议。契约直接解决「LLM 输出不收敛」。
## 设计红线
- 模板只读:SELECT only,禁止写操作
- 白名单表:地图没列的表不许查(防 prompt 注入)
- 粒度声明必须有
- 探索结论未经人确认不入 skill(人是 ontology 真相仲裁者)
## 实例参考
DR Fault Atlas:~/Projects/lab/Ontology-Playground/
(rdf / mcp_server.py / migrate_to_databricks.md)
全程:tony-he.pages.dev/projects/dr-fault-atlas.html