夜雨聆风学习资料网

ARTICLE · 990265

律师自建 AI 技能的真实卡点:欠工程化与过度工程化之间,到底怎么走

律师自建 AI 技能的真实卡点:欠工程化与过度工程化之间,到底怎么走
律师手记 · 技能工程化2026-08-29

律师自建 AI 技能的真实卡点 · 欠工程化与过度工程化之间

—— 一份关于“做不做、做多少、怎么平衡”的复盘与方案

DOODLE

署名:恒和信王律师 —— 反复在两个极端之间试错之后,一份关于技能工程化边界的复盘与方案

技能工程化AI × 律师
PROLOGUE引子:在两个极端之间反复试错

过去一段时间,我和身边几位同行都在尝试给律师工作装 AI 技能——合同审查、起诉状起草、尽调底稿。这个过程不是“做出来→失败→换思路”那么简单,而是一次次的反复试错。

最早做出来的版本最朴素:一段提示词告诉 AI“你是合同审查律师,重点看付款、违约、保密……”。这种“提示词版”装起来最快,但用几次就会发现,AI 的输出跟直接问它没本质区别——它只是在按通用清单做模板填空。

然后我们往工程化的方向走了一步:把风险清单做成表格、把合同类型做成分类表、把法条条款整理进本地索引。这次输出质量确实提升了,但接下来又出现了新问题——维护跟不上。法条变了、案例更新了、合同类型新增了,每一项变动都要回去改技能、改文档、测一遍。一个律师自己做这事,根本忙不过来。

接着我们又退回来——把表格换成外部数据库调用、风险清单走 API 而不是装在本地。这次轻了,但发现 AI 失去了一部分判断能力,因为外部检索返回的是通用知识,不带场景感。

这不是“失败→成功”的简单故事,而是反复在两端之间试错——每一种方案都有它的强项和软肋,没有哪个版本能直接说“这就是对的”。真正能做的,是把这些试错过程中观察到的现象提炼出来,看清楚每种设计选择的代价,再找到一个对大多数律师都成立的中间状态。

下文就是这个提炼的过程。

01

PART

现象:方案分布是连续的,但讨论常被简化成两端

OBSERVATION

先把观察到的情况摊开。

我看到的律师圈 AI 技能方案,按工程化深度从浅到深大致分布如下:

最浅一层:纯提示词版。一个 SKILL.md 写一段说明,告诉 AI“你是合同审查律师”“你重点关注 X、Y、Z”,让 AI 自由发挥。它的强项是装得快、上手简单、不需要工程基础;软肋是质量全押在 AI 模型本身,输出时好时坏。

中间层:流程脚本 + 表格配置。一个 SKILL.md 写流程骨架,配合 scripts/ 目录里的文档解析、要素提取脚本,data/ 目录里放配置性的 CSV/Markdown 表格(合同类型、风险模板、检查清单)。脚本读取表格做匹配和路由,但表格本身不进入 AI 上下文——它是被程序内部使用的“数据”,不是被 AI 读的“知识”。这种方案的强项是工程结构清晰、维护相对可控;软肋是表格驱动的匹配机制有天然上限(不典型条款匹配不上),而且表格的更新维护仍然是负担。

再深一层:本地知识库 + 脚本检索。把法条、案例、本地数据做成索引文件,配一个 search.py 之类的检索脚本,AI 通过调用脚本拿到按需检索的结果。这种方案的强项是知识体量大(几万条法条)但 AI 上下文不爆炸,因为检索是程序做的、不是 AI 读的;软肋是检索接口的设计有讲究——检索词太宽召回噪声,检索词太窄召回空集,AI 在这个环节的体验取决于接口设计质量。

最深一层:重型打包版。把所有可能用到的知识、检查点、流程门禁全塞进技能目录,期待“自包含”。这种方案的强项是开发者省事(不用设计外部接口);软肋是上下文负担大、维护成本高、长期使用容易过时。

四类方案光谱:工程化深度从浅到深,中间是大多数律师该去的位置

这四层在现实里都有项目存在(虽然命名各异)。但讨论时大家往往把它简化成“提示词 vs 重型版”两端——这简化掩盖了中间的工程化空间。

很多看似“过度工程化”的设计,恰恰是因为没做好“中间层”的接口设计而被迫堆出来;很多看似“欠工程化”的方案,恰恰是因为没意识到流程骨架需要单独固化。 把四种方案放在一起,中间那一段才是大多数技能的归宿。

下文讨论的“欠工程化 vs 过度工程化”,指的是这两个极端,而不是整个光谱。但读者要知道:中间层是真实存在的,是大多数律师自建技能时该去到的位置。

02

PART

厘清:AI 技能到底是什么,它有什么工程属性

CLARIFY

要把两端的代价看清楚,必须先厘清“AI 技能”到底是什么。它的工程属性决定了什么该做、什么不该做。

它有三条根本属性,每一条都是工程上的硬约束。

第一,技能是流程的执行单元,不是知识的容器。官方文档的定义很直白:当你反复把同样的检查清单、多步骤程序粘贴进对话时,就该把它做成技能。注意用词——程序、流程、方法。技能要沉淀的是“做事的方式”,不是“做事的材料”。

这条属性的实务含义:把一条法规装进技能目录是错的(那是知识),把“这条法规在你审到 X 条款时去查”写进技能流程是对的(那是方法)。前者是搬运,后者是方法。判断一个技能设计是否合理的第一个标尺,就是看它里面沉淀的是方法还是知识。

第二,技能的内容会持续占用上下文。一旦被加载,技能的指令、规范、参考文件会留在整个会话里——不只是触发那一刻,而是每次对话都占着位置。这意味着技能里的每一个字,都在和对话历史、其他技能、用户的具体问题抢占空间。

这条属性是上下文控制的根据。一个中等复杂度的合同审查技能,SKILL.md 加 references 加脚本说明,加起来约 30KB——已经占一次任务上下文的 15%。所以技能里的内容必须精简。判断标准是看每行字对当前任务是否必要——冗余的描述、过度的限定、无用的注释都应该删除。

但要注意:技能本身的内容占用上下文,与“技能通过脚本/接口访问的知识”是两回事。后者可以很大(几万条法条),因为它不进入 AI 上下文——AI 只看脚本/接口的输入输出契约,看不到背后数据。这是为什么“中间层”的设计可行。

第三,技能是渐进加载的。三层结构:最外层只有名字和一句话描述(始终占着上下文);触发后才加载正文;正文里提到的参考文件、脚本、模板,按需再读。官方对正文的建议是控制在500 行以内。

这条建议不是审美,是工程约束。AI 的会话是会被压缩的——压缩后每个技能只保留最近调用的前几千 token,太长会被截断,关键指令直接消失。我做过一个实验:一个 800 行的合同审查技能,跑了 30 轮对话后,AI 实际上能调用的指令只有开头那 100 行——后面 700 行几乎没被引用过。

该工程化的是方法,不是知识。 但要注意精确表述——这条判断不是说“知识不该进技能”,而是说“知识不该作为 AI 直接阅读的内容进技能”。知识可以通过脚本、通过接口、通过外部数据库访问,只要 AI 不直接读它就行。

这是后文所有方案的立论基础。

03

PART

从属性看设计代价——四种方案各自的取舍

TRADEOFFS

回到引子里那个观察——不同方案各有强项和软肋。现在可以从技能的工程属性出发,分析每种方案的代价。

纯提示词版:轻但不稳

它的 SKILL.md 可能只有 30-50 行——只占上下文 1%。这是它的强项:极轻、不占资源、装上就能用。

代价是:它只给了 AI 一个“角色”和一份“通用清单”,没有给出审查的工程逻辑。AI 凭训练记忆和运气输出,质量时好时坏。没有立场门禁——AI 默认输出对谁都不痛不痒;没有类型化的检查点——审查股权转让和审查服务合同用的是同一份清单;没有边界——AI 可能编造法条、越权修改、给“应当修改”的判断却没有依据。

律师用几次就会发现“和直接问 AI 没区别”。但这种方案的失败不是“做得太少”,是“做得不对”——它没把流程固化下来,只给了 AI 一个起点。

流程脚本 + 表格配置:克制但有上限

SKILL.md 写流程骨架(解析、确认立场、检索、激活检查点、生成意见、门禁),scripts/ 里有文档解析、要素提取、报告组装脚本,data/ 里放配置性 CSV(合同类型表、风险模板、检查清单)。

关键点:CSV 不入上下文。我具体核实过几份代码,CSV 是被脚本读成 pandas DataFrame 在程序内部使用的——比如从 contract_types.csv 读出“支持的合同类型列表”返回字符串数组,AI 看到的是列表,不是表格原文。表格的体量再大,也不直接挤占 AI 推理空间。

这种方案的强项:工程结构清晰(方法在 SKILL.md,数据在 data/,动作在 scripts/,三者分工),维护相对可控(表格更新不需要重新训练 AI)。

代价:表格驱动的匹配机制有天然上限。风险识别靠关键词匹配、模板命中——条款稍微不典型,就匹配不上。比如一份简短的 NDA 可能根本不含风险表里的关键词,AI 反而判定“无重大风险”,但 NDA 真正的风险点(保密范围宽窄、期限长短、例外条款)一个都没查。这种“不命中就跳过”是表格方案的本质局限。

再有一个代价:表格本身需要维护。CSV 加一行、删一条、修订条款,都需要回去改文件、测一遍。对个人律师来说,这是持续负担。

本地知识库 + 脚本检索:体量大但接口设计决定成败

把几万条法条做成 provision-index.json(一个 39MB 的 JSON 文件),配一个 search.py 脚本提供命令行检索。AI 不直接读这 39MB——它通过 shell 调用脚本,传入检索词,脚本返回按 tier 排序的前 N 条结果。

我具体看了一段检索脚本的实现:检索时按“关键词 AND 匹配”在法条全文里搜,按 tier(核心/近期/稳定/不确定)和状态(有效/已修改/未生效)排序,最后返回前 15 条左右。每个检索词返回的结果只有几百字节到几 KB,不是 39MB。

这种方案的强项:知识体量大但 AI 上下文干净;按需检索、即时返回、不依赖外部服务(断网也能用)。

代价:接口设计决定体验。检索词太宽召回太多无关法条,AI 又要在噪声里筛选,反而费 context;检索词太窄召回空集,AI 拿不到想要的依据。检索词的层次设计(主词 + 法律层 + 司法解释层 + 类案层 + 排除词)就成了关键工程点。

还有一个代价:法条有时效问题。核心法律每次都要验证状态,新法律要入库,旧法律要标注已修改或已废止。索引文件本身可能过时。这是设计“中间层”绕不开的长期工程。

重型打包版:理论上自包含,实操中代价高

把流程、表格、检索脚本、知识库全部打包进技能目录,期待“装上就能用、不依赖外部”。

它的代价前面分析过——上下文负担、维护成本、压缩截断风险——都是真实的。但也要承认:在某些场景下(如离线环境、内部合规要求不能连外网),这种“自包含”恰恰是设计目标,不是错误。

所以讨论的关键不是“重型版是不是错的”,而是“在大多数律师场景下,是不是必要”。答案是:大多数时候不必要。一个连 pku-law MCP 都连得上的律师,没必要把法条全文装进技能——按需检索更轻、更准、更易维护。

取舍的轴

把四种方案放在一起看,取舍其实是沿着几条轴变化的:

  • 轴一:知识放哪里?在 SKILL.md 里(错误)、在 data/ 表格里(程序读)、在外部接口里(脚本调用)、在 AI 上下文里(最差)。
  • 轴二:流程固化多少?一段提示词(最差)、流程骨架(基本)、流程骨架 + 门禁(推荐)、流程骨架 + 门禁 + 反馈循环(高级)。
  • 轴三:检索谁做?AI 自己查(最差)、脚本检索(推荐)、专业 API(更佳)。

每条轴往哪边偏,决定了方案的强项和软肋。

04

PART

平衡方案:四层架构——从律师工作流的约束推出来

ARCHITECTURE

方案的每一条都不是凭空设计的,而是从律师工作流的实际约束推导出来的。律师工作的核心约束有三条:

 高频重复 

合同审查、起诉状起草、尽调底稿,每天都在做同样的事

 必须可复核 

每条意见都要能追溯依据,否则律师要担责

 有立场 

每个任务都明确站哪边,影响审查重点

这三个约束联合起来,决定了技能的设计边界。下面是一个完整的四层架构,配图里看会更清晰。

四层架构:技能门面 / 流程脚本 / 知识接入 / 质量门禁

第一层 · 技能门面(SKILL.md)

职责只有一个:定义“我是什么、怎么用我、什么场景触发、什么场景不触发”。

一份合格的合同审查技能骨架示例:

...md

# 合同审查技能

## 角色

为执业律师提供合同审查支持,输出结构化审查意见。

本技能不构成法律意见,所有结论需律师复核。

## 触发条件

- 用户提供了合同文本 + 至少一条立场信息

- 用户明确要求“审查”“找风险”“出意见”

## 输入要求

1. 合同全文(DOCX/PDF/纯文本)

2. 立场(甲方/乙方/中立),未明确则询问

3. 关注重点(可选)

## 流程

1. 解析文档,提取结构化要素

2. 确认立场,未确认则询问

3. 接入知识层检索相关法条

4. 按合同类型激活对应检查点

5. 生成审查意见

6. 通过四项门禁 → 交付;未通过 → 阻断

## 输出格式

{合同名}_审查意见.md

- 立场:甲方

- 审查依据:法条 N 条(每条标注来源 + 时效)

- 风险清单:分级 + 定位 + 依据 + 建议

- 未决事项:单独列出

## 关键门禁(任一未过,阻断交付)

- [ ] 立场未确认

- [ ] 依据未标注来源

- [ ] 输出超出范围

- [ ] 未决事项未单独标注

正文 80 行以内,但这套技能该有的约束都在。

设计原则:

  • 每加一行都要问:这行是“方法”还是“知识”?是“方法”才留下,是“知识”就该走第三层
  • 不要在 SKILL.md 里复制法条、复制风险清单、复制案例——那是数据,不是方法
  • 流程骨架的颗粒度:每一步都能用一个动词短语描述(解析、确认、检索、激活、生成、门禁)

第二层 · 流程脚本(scripts/)

这一层干“动作”——文档怎么读、要素怎么提、输出怎么组。不干“判断”。

典型脚本:

  • doc_parser.py:DOCX/PDF 转纯文本 + 段落定位
  • element_extractor.py:主体、标的、价款、期限、管辖、违约责任等结构化字段
  • report_assembler.py:把 AI 返回的审查意见按标准格式写入文档
  • docx_exporter.py:调用 python-docx 生成带修订痕迹的批注版合同

设计原则:

  • 每个脚本只干一件事,单文件 100-200 行以内
  • 脚本之间通过标准输入输出对接,不共享内存
  • AI 只看脚本的输入输出契约(“调用 doc_parser.py,输入文件路径,返回纯文本 + 段落列表”),不看脚本内部实现
  • 脚本可以独立运行、单独调试,不需要 AI 介入

这样做的好处:AI 不需要理解脚本怎么写,它只需要知道这个脚本能干什么、输入输出是什么。脚本放在 scripts/ 目录里按需调用,AI 的注意力不会被打断。

第三层 · 知识接入——三种形式各有所长

这是最关键的一层:知识不直接进 AI 上下文,而是通过三种形式接入。

形式 A:配置表(CSV/Markdown)适用于合同类型表、风险检查清单、条款标准这类配置性数据。脚本读取数据做匹配和路由,结果返回给 AI。

...

data/

 contract_types.csv # 合同类型表(程序读)

 review_checklists.md # 检查清单(程序读)

 clause_standards.csv # 条款标准(程序读)

关键:CSV 是程序数据,不是 AI 阅读材料。一个 30KB 的 CSV 经过程序筛选后,可能只返回500 字节给 AI——是列表、是判断结果、不是表格原文。

形式 B:MCP 接口调用适用于法规库、案例库、企业信用信息这类外部数据源。通过 MCP 协议调用专业服务,按需检索,按需返回。

知识类型
取用方式
法条原文
MCP → pku-law
司法解释
MCP → pku-law
类案裁判规则
MCP → pku-law(关键词 + 案由)
企业信用信息
MCP → 企查查 / 国家企业信用信息

关键设计:接口返回精炼版,不返回全文。检索“公司法 第71条”,接口返回:

...

条文要点:股东向股东以外的人转让股权,应当经其他股东过半数同意

适用情形:股权转让场景

出处:公司法(2023 修订)第71条

时效:现行有效

关联:公司法司法解释(三)第24-28条

200-500 字节,不是 50KB。这是上下文控制的关键。

形式 C:本地检索脚本适用于离线场景或自建索引的情况——几万条法条做成 provision-index.json,配 search.py 提供命令行检索。

...

laws/

 provision-index.json # 39MB 法条索引

 currency-manifest.json # 时效清单

 dependency-graph.json # 依赖图谱

 law-index.json # 元数据

AI 不读这 39MB——它通过 shell 调用脚本,传入检索词,脚本返回按 tier 排序的前 N 条结果。我具体核实过这种检索脚本的实现:每个检索词返回几百字节到几 KB,不是 39MB。

关键设计:检索词要有层次。

...

主检索词:对赌协议 效力

 法律层:公司法 / 民法典

 司法解释层:九民纪要 / 合同法司法解释

 类案层:对赌纠纷 最高法 判决

 排除词:股权激励 / 业绩奖励 / 一般合同违约

每一层都有限定,多层组合后召回精确度显著提升。

三种形式怎么选?

  • 配置表:知识体量小(几百条)、更新频率低(半年一次)、需要程序匹配(关键词、规则路由)——首选 A
  • MCP 接口:知识体量大、更新频繁、有专业服务可用——首选 B
  • 本地检索脚本:离线场景、不能连外网、有自建索引——选 C

律师场景大多数情况下首选 B(pku-law MCP 是现成的),其次是 A(配置类数据),C 是少数情况。

第四层 · 质量门禁

这一层贯穿整个流程,不是一个独立文件,而是一组硬约束。

门禁
检查点
触发动作
立场门禁
立场是否已确认
未确认 → 询问,不得继续
依据门禁
每条审查意见是否有法条/案例依据
无依据 → 标注“待补依据”,不得单独构成结论
边界门禁
是否修改了用户未授权的内容
越界 → 回滚,标注“模型越权”
输出门禁
未决事项是否单独列出
未列 → 阻断交付,要求补充

门禁的双轨实现原则:

  • SKILL.md 里写一份(人读):用自然语言说清楚门禁规则
  • 脚本里实现一份(机读):用代码硬检查,自动阻断

两轨不一致时,以脚本为准——因为脚本是真的在执行。

门禁的力度可调:

  • 严苛模式:任一门禁未过 → 立即阻断
  • 提示模式:门禁未过 → 标注警告,但仍交付(律师自己决定要不要采纳)

律师用 AI 技能,最怕的不是 AI 错,而是 AI 错得自己不知道。门禁的价值就是让 AI 知道自己错在哪。

落地清单(2-3 天跑通)

步骤
产出
耗时
1. 选一个高频任务
任务清单
0.5 天
2. 手写 3 份样本,记录每一步动作
流程骨架
0.5 天
3. 写 SKILL.md(流程 + 门禁,≤300 行)
技能门面
0.5 天
4. 写 3-4 个脚本(解析、要素、查询、输出)
流程脚本层
1 天
5. 接一个外部法条接口(哪怕先调 MCP)
知识接入层
0.5 天
6. 跑 3 个真实合同样本验证门禁
验证报告
0.5 天

跑通之后,先用一两周,看哪些门禁实际生效、哪些是冗余;哪些脚本被反复调用、哪些被绕过。根据真实使用数据迭代,而不是一开始就堆功能。

05

PART

方案的边界:不是所有任务都需要完整四层

BOUNDARY

上一节讲的是完整架构,但并不是所有律师任务都需要做到这个程度。

判断要不要做完整架构,看三个问题。

问题一:这个任务的“方法”是否稳定?任务的方法稳定(每次审查都按同样的步骤看同样的要点),适合做技能。任务的方法不稳定(每次情况都不一样),不适合——硬做成技能反而会限制 AI 的判断。

自检

你能在不查具体案例的情况下,把这个任务的步骤列出来吗?能,方法稳定;不能,别急着做技能。

问题二:这个任务的“知识”是否高频复用?任务需要的知识高频复用(合同审查天天查公司法、民法典),适合接入 MCP——技能本身保持轻量,知识按需取。任务需要的知识低频复用(偶尔查一次特殊行业规范),连接口都不用接,AI 自己查就行。

自检

这个任务每个月要查的法规/案例超过 50 条吗?是,接接口;否,AI 临时查。

问题三:这个任务的输出是否需要“可复核”?律师交付物必须可复核——每条意见都能追溯依据,否则风险不可控。这种任务必须有“依据门禁”“立场门禁”等硬约束。普通一次性任务(如生成营销文案)不需要门禁,AI 自己把好质量就行。

自检

这个任务的输出会被律师直接给客户吗?是,必须有门禁;否,可以先跑 MVP。

判断尺三问:方法稳定 / 知识高频 / 输出可复核

把这三个问题答完,工程的边界就有了。任务不同,工程的颗粒度也不同——这不是“做多做少”的问题,是“该不该做”的问题。

06

PART

给自建技能律师的实操建议

GUIDE

四条原则,来自上面的分析和落地的验证:

原则一:技能骨架要薄,知识接入要厚。SKILL.md 是门面,不是仓库。把方法写完,把知识接入层(配置表 + 接口 + 检索脚本)做好。骨架控制在 500 行以内,更保守 300 行。

原则二:先用纯方法跑通,再决定加知识层。哪怕前两周不接 MCP,技能也该能跑——只是输出会标注“未检索法条”。跑通后再接接口,比一开始就堆完整栈容易。

原则三:门禁比能力重要。边界比能力更能决定交付质量。未确认立场不出报告、依据未标注不构成结论、越权修改自动回滚——这些门禁加起来,决定了这个技能能不能被律师信任。

原则四:用真实使用数据迭代,不用想象堆功能。跑通后看哪些门禁实际生效、哪些脚本被反复调用、哪些流程被 AI 跳过。根据真实使用调整,而不是一开始就追求“功能完整”。

07

PART

最后的判断

VERDICT

回到引子里的观察——AI 技能方案分布在四个层级,每个有强项有软肋。讨论时常被简化成“提示词 vs 重型版”两端,掩盖了中间工程化的空间。

真正能做的,是从技能的工程属性出发,看清每种设计选择的代价,然后对大多数律师场景,找到一个“让人能用、让机器能跑、让维护能持续”的中间状态。

这个状态长这样:

  • 技能的 SKILL.md 只有几百行,写的是流程和门禁,不装知识
  • 知识通过三种形式接入:配置表(程序读)、MCP 接口(按需取)、本地检索脚本(离线用),AI 都不直接读大体积数据
  • 脚本干“动作”,不干“判断”,AI 决定怎么用脚本的结果
  • 门禁双轨实现(人读 + 机读),不通过就阻断

这条路不性感——没有 39MB 本地数据库硬塞进上下文,也没有十几个专项子技能的复杂调度。但它两三天能跑通,跑通后能持续用,而且每次任务的上下文是干净的。

欠工程化与过度工程化之间的中间状态

技术架构的本质,是让人能用、让机器能跑、让维护能持续。三个“能”都满足的架构,不需要 3-4 周,也不需要堆功能——它只需要把这三个问题答清楚。

THE MIDDLE PATH

这就是欠工程化与过度工程化之间的那条路。它不宽,但走起来稳。

SOURCES · 来源清单(供核验)

01 / Anthropic 官方合同审查技能(playbook + 三档风险 + 升级路径):github.com/anthropics/knowledge-work-plugins (legal/skills/review-contract/SKILL.md)

02 / 官方文档《Skills》定义与渐进加载机制:code.claude.com/docs/zh-CN/skills

03 / 《Skills 开发规范:4 原则、5 维度、5 层检查》(2026-06):developer.cloud.tencent.com/article/2689796

04 / 《Skill 的局限和常见坑》:01mvp.com/docs/skills/skill-pitfalls

05 / 合同审查类公开数据集(CUAD,41 类风险,510 份合同归纳):github.com/evolsb/claude-legal-skill

06 / 合同审查 + 企查查 MCP 实时核验(“Token 开销直降 96%”为其 README 原文):github.com/duhu2000/legal-assistant-skills

07 / 《律师如何用好AI智能体》(观典律师事务所):risinglawyer.com/page54?article_id=7485

本文为方法论探讨,案例仅作技术论证使用,不针对任何项目或作者。

王恒和信王律师

我是恒和信王律师,一名把律师工作方法沉淀成 AI 技能的执业律师。这里的每一条,都是从真实案件和真实试错里长出来的。该工程化的是方法,不是知识。

如果你觉得今天这篇有收获,欢迎点赞、在看、转发三连,我们下篇见

赞
在看
收藏

THANKS FOR READING

相关学习资料