如何写出一个职业级Skill?解构Paperasse 6个AI Agent技能的纯Markdown设计哲学
【免费下载链接】paperasse🇫🇷 Skills pour agents IA spécialisés dans la bureaucratie française : Comptable, Notaire, ...项目地址: https://gitcode.com/gh_mirrors/pa/paperasse
想让 AI Agent 从"会聊天的助手"进化为"能上岗的专业人士",关键不是写更多 Prompt,而是写一个职业级 Skill。Paperasse 是一个开源项目,它用纯 Markdown 定义了 6 个专精法国行政事务的 AI Agent 技能:会计师(comptable)、公证人(notaire)、税务顾问(fiscaliste)、审计师、税务稽查员和公寓管理员。没有一行框架代码,没有复杂插件机制——但它的 evals 测试显示,加载 Skill 后 Agent 综合得分从 75% 提升到 88%。本文带你解构这套纯 Markdown 的设计哲学,照着做,你也能写出职业级 Skill。
一、先看成果:6 个 Skill 如何覆盖 6 个职业
Paperasse 仓库里每个目录就是一个职业:
| Skill 目录 | 职业角色 | 核心能力 |
|---|---|---|
| comptable/ | 会计师 | 800+ 会计科目、增值税、年报、2026 电子发票 |
| fiscaliste/ | 个人税务顾问 | 个税税率表、家庭商数、IFI、PEA、加密货币 |
| notaire/ | 公证人 | 房产交易费用、遗产、赠与、家庭协议 |
| commissaire-aux-comptes/ | 审计师 | 7 阶段审计、资产负债交叉验证 |
| controleur-fiscal/ | 税务稽查员 | 模拟 8 个维度的税务稽查 |
| syndic/ | 公寓管理员 | 业主大会、账目、拖欠追缴 |
它们的评分对比(来自项目 README 的 evals 结果):
| Skill | 带 Skill | 不带 Skill | 提升 |
|---|---|---|---|
| 审计师 | 100% | 75% | +25% |
| 税务顾问 | 84% | 64% | +20% |
| 公寓管理员 | 83% | 68% | +16% |
| 会计师 | 89% | 77% | +12% |
这 +13% 的聚合提升,就是"纯 Markdown 的价值"。
二、解剖一个 Skill:目录结构比你想的简单
以会计师技能为例,一个职业级 Skill 的骨架是:
comptable/ ├── SKILL.md # 给 Agent 的"岗位说明书"(核心) ├── references/ # 法律法规、税率表等参考资料(按需查阅) ├── data/ # 结构化数据(PCG 科目表 JSON 等) ├── scripts/ # 确定性计算脚本 ├── templates/ # 文档模板(发票、年报) └── evals/ # 自动化测试用例SKILL.md 是灵魂文件,它由两部分组成:YAML frontmatter(元数据)+ Markdown 正文(行为指令)。整个文件约 300 行,但信息密度极高——这就是"渐进式披露"设计:Agent 启动时只读这一个文件,需要细节时再跳转去查 references/ 下的分主题文档。
三、职业级 Skill 的 5 个设计原则
1. Skill = 职业,而不是工具
项目贡献指南 CONTRIBUTING.md 里有一条"判职业"法则,堪称点睛之笔:
判断标准:"在现实职场中,会有人以这个头衔求职吗?" 是 → 建一个 Skill;否 → 只做一个共享模块。
所以 Paperasse 有comptable(会计师)、notaire(公证人),却没有"发票生成器"这种碎片。每个 Skill 必须self-contained:用户召唤comptable,期待它覆盖会计师的全部工作,而不是要求他自己拼装三个技能。
2. Frontmatter:让 Agent 自己判断"该不该上岗"
看 notaire/SKILL.md 的开头:
description:不只是描述功能,还列了一串Triggers 触发词("notaire、遗产、赠与、PACS、SCI……"),让 Agent 在用户模糊提问时也能正确路由到该技能;last_updated:数据新鲜度戳。所有 Skill 都内置同一条守则——超过 6 个月没更新就自我警告:"⚠️ SKILL 可能已过期,回答前请在线核对税率表";includes:声明共享数据文件,保证技能被单独分发时不丢资源。
这个"自我保质期"设计,是大多数 Skill 作者忽略的——法律条文是会变的,Markdown 不会自动过期,所以必须在元数据里写入"过期自检"逻辑。
3. 行为指令写成"工作流",而非"能力描述"
翻遍 SKILL.md 正文,你会发现它几乎不写"我很擅长会计"这类空话,全是可执行动作:
- 前置检查:每次对话先确认
company.json是否存在,不存在则启动引导式初始化——"没有验证过的上下文,绝不给建议"; - 固定回答结构:所有分析必须按「事实 → 假设 → 分析 → 风险 → 行动 → 边界」六段式输出;
- 路由表:一张 Markdown 表格把"用户问什么"映射到"该读哪个 reference 文件",Agent 照着表跳转即可;
- 计算纪律:"凡涉及金额计算,一律调用 scripts/calc.js,禁止心算"——用确定性脚本堵住大模型最容易翻车的算术题。
4. 数据与指令分离:Markdown 指路,JSON 存数
税率表、会计科目这类会变动的数据,不在 Markdown 里硬编码,而是放进 data/pcg_2026.json 这类结构化文件,SKILL.md 只写"去哪个文件、按哪个字段查"。好处有三:
- 单一事实源:data/sources.json 记录每条数据的来源和日期,
update_data.py一键校验更新; - 省 Token:800 个会计科目不会被整个塞进上下文,Agent 按需检索;
- 可测试:数据是机器格式,evals 脚本可以直接断言。
fiscaliste/SKILL.md 更进一步,把 2025 年度税率表"内联快照"进 Markdown,并注明"仅 2025 年度有效,其他年份一律导向官方网站"——用最小的篇幅换取最高频问题的零检索成本。
5. Evals:用数字给 Skill 定级
职业级和业余级的分水岭,是 evals/ 目录。每个测试用例是一个 JSON 对象:真实用户提问 + 期望行为 + 逐条断言。例如"配置 company.json"用例要求 Agent 从"SASU 公司形态"自动推断出应适用公司所得税制——这种细粒度断言,正是拉开分数差距的地方。
配合 evals/config.yaml 中为每个 Skill 设定的"无技能基线提示词",CI 会自动对比"裸模型"与"带 Skill"两组得分,防止你写一堆没有实际增益的 Markdown。
四、动手模板:10 分钟写出你的第一个职业级 Skill
按 CONTRIBUTING.md 的结构,照抄这个清单即可:
- 建目录:用"职业名"命名(小写+连字符,如
avocat、drh); - 写 SKILL.md:frontmatter 里给足 description 和 Triggers 触发词,正文写「前置检查 → 工作流 → 路由表 → 边界警告」;
- 建 references/:把法律条文、税率表按主题拆成多个 md,SKILL.md 里用表格链接过去;
- 数据外置:易变数字进 JSON,标注来源和
last_updated; - 算钱走脚本:涉及计算的逻辑写成确定性脚本,SKILL.md 中明令"禁止心算";
- 写 evals/:至少 5 个真实场景 + 可断言的预期输出,跑通"带/不带 Skill"对比测试;
- 写免责声明:职业级 Skill 必须明确"什么情况下该请真人"——Paperasse 的每个 Skill 结尾都有这一节,这也是它"职业级"而非"玩具级"的标志。
五、总结:纯 Markdown,为什么反而更强?
回看 Paperasse 的设计,可以提炼成一句话:把 Agent 当成新入职员工,用岗位说明书(SKILL.md)+ 操作手册(references/)+ 工具柜(data/ + scripts/)+ 考核题(evals/)来武装它。
纯 Markdown 的优势恰恰在这里:零依赖、任何能读文件的 Agent 都能加载、diff 一目了然、法律条文更新只需改一行字。职业级 Skill 的门槛不在技术,而在你有多理解那个职业——这正是 Paperasse 给所有 Skill 作者上的第一课。
【免费下载链接】paperasse🇫🇷 Skills pour agents IA spécialisés dans la bureaucratie française : Comptable, Notaire, ...项目地址: https://gitcode.com/gh_mirrors/pa/paperasse
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考