不是更长的 prompt,
而是按需展开的"渐进披露"。
把调用工具、跑业务时反复踩的坑写成规则 —— 让 AI 不再每次重新犯错。
把垂直领域的专业判断、标准操作流程沉淀下来,AI 按既定路径走。
业务需求 → 技术脚本之间的指令偏差,靠 Skill 的明确契约抹平。
一个是 Anthropic 的 Skill 标准,一个是「为 AI 设计」的 研究视角。
SKILL.md 头部那几十字;一旦说「改下这张表」,才逐层把正文、formulas.md、recalc.py 取进来。能力可以很大,context 始终很小。训练有截止日期。截止之后的库版本、API 变更、新规则,模型一概不知。
企业内部口径、业务流程、专有方法论从未进入训练语料 —— 模型根本没见过。
训练数据里混着大量错误写法,模型学了也会照犯 —— 这是训练的「副作用」。
WidthType.PERCENTAGE 设表格宽度,模型照学 —— 实际导出宽度全错。不知道什么算「好」、输入输出该长什么样 —— 没有契约,结果就飘。
同一个任务有多条技术路径,模型不知道哪条是团队认可的最佳实践。
没有「正确长这样」的范本,模型只能凭概率猜,每次输出形态都不一致。
| 六大缺陷 | Skill 的解法 | |
|---|---|---|
| ① 知识时效性断层 | → | references/ 随时更新 —— 知识与模型解耦,改文档不用改模型。
库升级到 v3,只改 references/api.md,AI 立刻按新版写。 |
| ② 私有知识不可获取 | → | SKILL.md 编码私有流程、方法论、业务标准 —— 把没见过的写进来。
把「单方成本=不含税÷可售面积」直接写进 SKILL.md,AI 不再猜。 |
| ③ 会踩坑 | → | 用确定性规则明确「永远这样、永远别那样」—— 排除训练数据的干扰。 docx Skill 写死「Always DXA, never PERCENTAGE」,覆盖错误倾向。 |
| ④ 缺质量标准 | → | 精确定义输入输出规范与验收口径 —— 给模型一份契约。 规定报告必须六段式、每段结论前置 —— 每次产出结构一致。 |
| ⑤ 不知用什么工具 | → | scripts/ 把最佳技术路径编码成脚本 —— 不留选择空间。
查数固定调 query.py,AI 不用纠结写 SQL 还是调 API。 |
| ⑥ 缺样例参考 | → | 正文 / references 内置范本 —— 相当于一份「永久 Few-shot」。 references 里放一份标准评分表样例,AI 每次照着出。 |
这些规则不增加任何「能力」—— 它们存在的唯一目的,就是抵消训练数据里的错误倾向。
这些话人类开发者根本不需要 —— 人不会犯 WidthType 这种错。它只对 AI 有意义。
Skill 把一位资深成本经理的脑子,沉淀成了文件 —— 换谁来问,AI 都按同一套专业方法答。
小订:意向阶段、付小额定金
认购:正式认购、付认购款
签约:合同签订(草签 → 网签)
网签:房管局备案,合同生效
激活:有效单 — 真实业绩
关闭:作废/转换 — 不计业绩
业绩统计前必须先过滤 Status=激活,否则关闭单也算进去 = 业绩翻倍
置业顾问(zygw):销售员,负责接待+成交
成交总价(cjTotal):一笔单的实际成交金额
建面(cjBldArea):建筑面积,含公摊
货值表 dwd_s_projectvalueabledetail 同一笔货值在 Level=1/2/3 三层各存一份等额金额(楼栋明细/分区明细/版本总计)
IsBenchmark=1:基准版货值(对外口径用这版)
不锁 Level 直接 SUM = 同一笔货值算 3 次(实战 B P40 真实 bug)
API 层(提前做好):FastAPI + pymysql 直连真库,dwd_s_order UNION dwd_s_contract 合成统一台账,对外仅暴露 /sales/ledger 一个查询端点。
Skill 层(现场手搓):YAML description 写触发词,query.py 把子命令映射成 HTTP query string —— 不连数据库、不写 SQL。
① 端点固化:能查什么由端点和参数决定,新维度=改代码
② 枚举校验:销售状态/合同类别/销售单状态用 enum 限定
③ 不做 mock 兜底:DB 不可用直接返 503,绝不编造数据
④ 只读 SELECT:参数走占位符,杜绝注入
/sales/ledger 没开聚合参数 —— 只返明细不做 GROUP BY,查不了。改 API、重启服务才行。
实战A-sql-query-api/ ├── api/ # API 服务(提前做好) │ ├── API文档.md 317 行 · 给 AI 看的接口契约 │ ├── main.py 311 行 · FastAPI 服务 │ ├── run.sh │ └── .env.example # 数据库连接(脱敏) └── skill/sql-query-api/ # Skill 胶水(现场手搓) ├── SKILL.md 150 行 · 触发词+流程 └── scripts/ └── query.py 306 行 · 子命令式 CLI
① YAML description · 写触发词(销售台账/合同/认购/光谷天地…)
② 前置条件 · API 必须在 :8077 跑通,DB 必须连得上
③ 端点清单 · /health · /sales/ledger(枚举参数表)
④ 调用流程 · 理解意图 → 抽取参数 → 调 query.py → 整理回答
⑤ 边界声明 · 不连库不写 SQL · 503 时如实告知不编造
⑥ 典型对话 · 4-6 个真实问句示例
API文档.md 同样关键 —— 端点 + 参数枚举 + 响应字段 + 真库示例,Claude Code 主要靠它复刻 API。
query.py 子命令把人话→HTTP| 子命令 | 映射端点 | 关键参数(枚举/范围) |
|---|---|---|
health | GET /health | 无 — 探活 |
ledger | GET /sales/ledger | --project · --keyword · --sale-status {小订/认购/预认购/签约} · --order-status {激活/关闭} · --contract-type {草签/网签} · --sign-start/end · --consultant · --limit 1-200 |
"光谷天地一期 1208 那栋的销售台账"
$ query.py ledger \ --project 光谷天地 \ --keyword 1208
→ 4 行(小订/认购/签约)
"2026 年 4 月签约的合同"
$ query.py ledger \ --sale-status 签约 \ --sign-start 2026-04-01 \ --sign-end 2026-04-30
→ 9 条已签约合同
"按置业顾问统计成交套数"
# /sales/ledger 没开 # group_by 参数 $ query.py 无法处理
→ 端点固化 → P22 伏笔
query.py 把「子命令 + 参数」映射成「API 端点 + query string」—— 调用方式被钉死。对应 P10-①"按置业顾问统计每人的成交套数和成交总额"
根因:/sales/ledger 只返明细,没有 group_by 参数,也没有 sum/count 度量。
"光谷天地的成交总价加起来是多少"
根因:API 端点是写死的明细查询,没开聚合参数 —— 想加得改代码、加端点、重启服务。
aggregate 当场答出来