干环保执法这一行的人,最熟悉的一个画面就是:白天跑现场、取样品、做笔录,晚上回办公室还得翻法条、查裁量基准、写文书。尤其是遇到气味扰民、废水偷排、固废倾倒这类案子,现场取证花两小时,回来定性和起草文书反而要耗掉一下午。法条太多记不全,裁量基准各省还不一样,文书格式稍有偏差就被退回重做。
我试过不少办法:书签存了一堆官方网站,Excel 里塞满法条摘要,手机上装各种法规库App,但真到用的时候还是得一条条翻,比对、复制、粘贴,效率低得让人崩溃。
后来我把日常最费力的两件事——法条速查和文书起草——做成了一个可复用的 WorkBuddy Skill,塞进了我的日常工作流。实测了一段时间,现在写现场检查记录、责令改正决定书、行政处罚告知书这类高频文书,基本能在一两分钟内拿到完整草稿,法条引用和裁量依据也都给得明明白白。这篇文章,我把整个设计思路、知识库搭建方法、实测过程和踩过的坑都整理出来,给同样在一线执法岗、或者任何需要“查规定、写材料”的朋友做个参考。
1. 为什么选“法条速查 + 文书起草”:先盘点执法岗的真实痛点
1.1 一线记录:一个普通工作日里的三个高耗时段
做执法岗的朋友应该都有体会,我们一天的工作大概分成三块:现场取证、案件定性、文书制作。前两块靠腿和眼,第三块最磨人,因为它拼的是记忆力和细心程度。
先说法条速查。生态环境领域涉及的法律法规太多了:环境保护法、大气污染防治法、水污染防治法、固体废物污染环境防治法、噪声污染防治法、土壤污染防治法,加上行政处罚法、行政强制法,还有生态环境行政处罚办法、排污许可管理条例这些,粗算下来几十部起步,条文上千条。办案时你不仅要找到“对”的法条,还得找到“当前有效”的法条,还要对应上自由裁量基准里的档位。比如同样是废气超标,浓度超了10%和超了50%,适用的处罚幅度完全不同。
再说文书起草。文书这东西,格式错一个标点都会被退回。现场检查(勘察)笔录怎么描述污染源位置、排放口编号、运行工况;调查询问笔录怎么问、怎么记;责令改正违法行为决定书里“改正内容”和“改正期限”怎么写才规范;行政处罚告知书里的违法事实、证据清单、处罚依据和拟处罚金额怎么组织。这些都有固定套路,但细节极多,平时不常用的文书到了眼前照样卡壳。
这两个痛点叠加在一起,结果就是:熟练工也得靠大量重复劳动来保证不出错。而重复劳动恰恰是最适合交给工具去做的。
1.2 Skill 化与“普通问AI”的区别:差在记忆和专业约束
你可能觉得,这事儿直接打开大模型对话框问不就行了?我也这么干过,但很快发现三个问题。
第一个问题是“没有记忆”。普通对话框每次都是全新对话,你得把自己是什么岗位、办案地区、需要哪部法律的哪个条款再说一遍,烦不烦?第二个问题是“没有约束”。大模型不知道你的文书模板长什么样,更不知道你们局的文书格式要求,自由发挥出来的格式往往华丽但不对路。第三个问题是“容易幻觉”。你不给它提供准确的法条原文和裁量基准数据,它就敢自己编一个看起来很像样的条文编号,出了事谁担责?
Skill 的核心理念,就是把“角色设定 + 知识库 + 工作流程 + 输出格式”打包成一个可复用的工具。它不是一个聊天窗口,而是一个“懂执法业务的新实习生”:你给它一个案件场景,它知道该查哪部法、该套哪个裁量档、该输出哪种文书结构,并且每一步都从你提供的知识库里取数,而不是凭空编。
这一点特别关键。用 WorkBuddy 这类工具做 Skill,本质上是把老师傅脑子里的“办案流程图”和“法条索引”外置成了文件,模型只是执行者,专业判断的源头还是你自己的经验和沉淀下来的资料。
1.3 为什么选 WorkBuddy 作为载体
选 WorkBuddy 没什么玄学,纯粹因为它符合我的三个要求。
第一,它是本地方案优先的工具。法条库和文书模板这些工作资料,我不希望全部跑到某个云端平台上去,本地化部署更安心。第二,它对 Skill 的目录结构和加载方式支持得比较直观,新建一个 Skill 就是建一个文件夹、写几个文件,不需要额外开发。第三,它支持自定义模型接入,我可以接自己常用的模型,也可以调整参数,灵活度够。
当然,这类 Agent 桌面工具现在不少,Cursor、CodeBuddy、豆包它们都有类似的概念。核心方法论是通用的——把知识库、提示词、工作流程打包成可复用的 Skill——你完全可以根据自己的习惯选工具。下面讲的设计思路和实操方法,换到其他支持 Skill 的平台上同样适用。
2. Skill 是怎么设计的:先建模,再写提示词
2.1 目录结构:一个 Skill 就是一个完整的办案工具箱
我最初犯过一个错:一上来就想写一个“万能提示词”,把所有要求塞进一段话里。结果模型根本分不清优先级,输出得又乱又飘。后来我改成按“工具箱”的思路去设计,把 Skill 做成一个目录,每个文件负责一块能力。
我的 Skill 目录大致长这样:
eco-enforcement-skill/ ├── SKILL.md # 技能入口:角色、能力清单、调用说明 ├── references/ │ ├── general_laws.md # 通用执法程序:行政处罚法、行政强制法等 │ ├── air_pollution.md # 大气污染防治相关 │ ├── water_pollution.md # 水污染防治相关 │ ├── solid_waste.md # 固废、危废相关 │ ├── noise_soil.md # 噪声、土壤相关 │ ├── discretion_benchmark.md # 裁量基准速查 │ ├── evidence_guide.md # 证据收集与笔录制作指引 │ └── document_templates.md # 常用文书模板与示例 ├── workflows/ │ ├── quick_query.md # 法条速查工作流 │ └── draft_document.md # 文书起草工作流 └── assets/ └── local_rules.json # 本地执法细化规定(可按地区维护)SKILL.md 是入口,相当于给模型的一份《岗位说明书》。references 里放的是法条速查的知识库,workflows 里放的是两套核心工作流的提示词,assets 里放本地化配置。
这个结构的好处是:哪块知识过时了,就替换哪个文件,不用动整个 Skill;某类案子不常做,就单独增补一个 reference,灵活。Skill 化最大的价值就在这里——它不是一次性对话,而是一个越攒越厚的资料库。
2.2 知识库拆分方法:让模型快速定位到正确法条
法条速查能不能“查得准”,八成取决于知识库怎么组织。我自己的经验是三条原则。
第一,按领域拆文件,而不是一个大文件装全部。大文件动辄几万字,模型检索时容易“翻车”,小文件反而定位更准。我按大气、水、固废等拆好之后,实测输出稳定多了。
第二,每条法条都要带“效力标注”。我专门在知识库里维护了一个《现行有效法规清单》,每个法规都标注了最新修正日期、现行版本施行日期、废止情况。模型回答时被要求先核对这个清单,再引用条文,能大幅降低“引用已废止法条”的风险。
第三,裁量基准单独成库。行政处罚最怕的就是“同案不同罚”,裁量基准是定档的关键。我把本省的裁量基准表格化存进 discretion_benchmark.md,包含违法行为分类、情节因子、处罚幅度区间、从轻减轻情形。模型起草处罚建议时,会先读这个文件,再结合案件情节给档位。
一条知识条目的标准写法,我是这样组织的:
## 【大气】废气超标排放 - 主要依据:《中华人民共和国大气污染防治法》第九十九条 - 适用情形:超过大气污染物排放标准或者超过重点大气污染物排放总量控制指标排放大气污染物 - 处罚幅度:责令改正、限制生产、停产整治,并处十万元以上一百万元以下的罚款 - 裁量档位:浓度超标1倍以下 / 1-2倍 / 2倍以上,分别对应不同幅度区间 - 效力状态:现行有效(根据2024年修正版梳理) - 关联证据:监测报告、现场检查记录、工况记录、排污许可证这种写法的好处,是让模型在检索时能直接拿到“认定要件 + 处罚依据 + 裁量档位 + 证据要求”的完整链路,而不是只甩给你一个干巴巴的条文号。
2.3 入参设计:让 Skill 主动问“该问的问题”
我刚开始用 Skill 时,提示词写得特别“开放”,结果模型每次都给你来一段洋洋洒洒的分析,核心要素却总有遗漏。后来我想明白了一件事:好的 Skill 应该有自己的“问题清单”,像老师傅办案一样,关键信息没拿到就住嘴不问。
所以我在文书起草工作流里设置了一组必填和选填入参:
| 参数 | 是否必填 | 说明 |
|---|---|---|
| 案件类型 | 必填 | 废气 / 废水 / 固废 / 噪声 / 土壤 / 其他 |
| 违法行为描述 | 必填 | 现场看到的情况,越具体越好 |
| 检测数据 | 选填 | 监测报告里的浓度、限值、超标倍数 |
| 当事人信息 | 必填 | 企业名称、统一社会信用代码、地址 |
| 情节要素 | 选填 | 是否首次、是否主动整改、危害程度、持续时间 |
| 文书类型 | 必填 | 现场检查记录 / 责令改正决定书 / 处罚告知书等 |
如果必填项缺失,Skill 会先输出问题清单,而不是硬着头皮往下写。这个“主动提问”的设计,比我之前用过的任何提示词都管用——它逼着你在动手写文书前,先把关键事实要素梳理清楚,反而减少了因为要素遗漏导致的返工。
2.4 模型选择、温度参数与安全基线
再聊两句容易被忽略的技术细节:模型和参数怎么选。
法规检索和文书起草,本质上是“低创造性、高准确性”的任务,所以我的经验是:优先选长上下文、指令遵循能力强的模型,而不是追求“文笔华丽”的模型。
温度参数我一般调到 0.2 以下。温度越低,输出越保守、越贴近原文。法条引用这种事,不需要创意,需要的是稳定。哪怕是同一个模型,温度 0.7 和 0.2 的输出质量差别肉眼可见——高温模式下它经常“自由发挥”条文内容,低温模式则老实得多。
另外要配一条安全基线:所有法条引用必须来自 references 目录,不允许凭空生成条文编号和内容;所有文书涉及当事人信息的,用占位符代替,由使用者手动填入。这两条我写进了 SKILL.md 的强制性要求里,每次运行都会被模型读到。
3. 完整实测:从零跑通一单废气超标案
3.1 测试场景设定
空讲设计没意思,我拿一个真实的测试案例走一遍全流程。
假设线索来自群众投诉:某工业园区有刺鼻气味,执法人员现场检查发现一家塑料造粒厂,废气处理设施未正常开启,车间无组织废气直排,厂界下风向有异味。第三方检测报告显示,非甲烷总烃厂界浓度超标 2.3 倍。企业属于首次违法,现场能配合调查,负责人表示愿意立即整改。
这个案子涉及三件事:现场检查记录的起草、责令改正决定书的起草、行政处罚告知书的起草。按老办法,我得先翻大气污染防治法,再查裁量基准,再对着模板逐字改,没有一小时下不来。现在用 Skill 跑一遍。
3.2 法条速查实测:从描述到引用链路,30 秒内给到
我先用自然语言描述案情:“塑料造粒厂未运行废气处理设施,非甲烷总烃厂界浓度超标2.3倍,首次违法。”
Skill 的输出结构是这样的:
- 适用法律:《大气污染防治法》第一百零八条(未依法安装或使用污染防治设施)和第九十九条(超标排放),两条需要结合看
- 关键区别:第九十九条侧重排放浓度超标本身;第一百零八条侧重“未采取污染防治措施”。本案有组织排放口和非甲烷总烃超标都涉及,两条并行引用的可能性大,具体由案件定性会议确认
- 裁量建议:按照省级生态环境行政处罚裁量基准,超标2.3倍对应第二档,罚款幅度在二十万至四十万之间,首次违法可下调一档
- 证据列表:检测报告、现场检查记录、设施运行台账、负责人询问笔录
- 待人工核实事项:排放口编号是否与排污许可证一致、检测报告是否在有效期内
整个过程不到半分钟,引用链路清晰,至少省了我半小时翻法条的时间。而且它把“待核实事项”单列出来,防止我漏掉关键细节。
3.3 文书起草实测:现场检查记录、责令改正和处罚告知
法条链路出来后,我直接让 Skill 起草文书。三份文书我用同一个案件描述,它输出的结果各有侧重:
现场检查(勘察)笔录,重点在“时间线 + 空间位置 + 设备状态”的描述。Skill 生成的内容包含:检查时间、检查地点、被检查单位信息、检查人员、现场情况描述(废气处理设施运行状态、车间生产状况、厂界气味情况)、现场拍照取证清单。这些内容里,需要我手工补的是具体的设备编号和检测点位坐标。
责令改正违法行为决定书,重点在“违法事实 + 整改要求 + 期限”。Skill 生成的草稿把违法事实段落写成了三段式:何时何地检查发现什么情况、检测数据证明超标多少、违反了哪条法律规定,整改要求部分给出了具体可操作的表述,比如“立即恢复废气处理设施运行,十五日内完成活性炭更换并保留更换记录”。
行政处罚告知书,重点在“违法事实、证据、依据、拟处罚内容、陈述申辩权利”。Skill 生成的草稿清晰列明了违法事实、证据清单、处罚依据和拟处罚金额档位,还预留了“拟作出处罚决定”的金额位置,等案件合议后填入。
整体来看,三份文书的框架可用率在八成以上,剩下两成是地名、设备编号、具体日期、金额这些需要人工确认的变量。以前我写完这三份文书,颈椎都会疼一天。
3.4 人工复核清单与 Skill 打包复用
用 Skill 起草文书,不等于可以当甩手掌柜。我给自己定了一条规矩:AI 出草稿,我做三件事。
第一,核对法条。所有引用条文,必须回到官方发布版本核对一遍。Skill 已经帮我缩小了检索范围,这个再核一遍花不了几分钟,但能兜住幻觉的风险。
第二,核对文书格式。每个地方的执法文书可能有细微差别,比如文号格式、落款单位名称、印章位置。Skill 输出的是通用结构,格式细节还得按本地模板调。
第三,核对情节定性。AI 不能替代集体讨论和案件合议,特别是“是否构成多个违法行为”“是否适用从轻或减轻”这些判断,必须由执法人员结合案情做决定。
把 Skill 打包复用也非常简单。整个目录复制到另一台电脑,或者发给同事,放进 WorkBuddy 的 Skill 目录就能直接用。我后来把自己沉淀的知识库和同事共享,他们修改一下 assets/local_rules.json 里的本地裁量基准,就能适配自己所在地区的法规差异。这个“复制即用”的特性,让一次投入可以反复产生价值。
4. 踩坑实录:幻觉法条、格式兼容与上下文窜线
4.1 最能“帮倒忙”的五个坑
再好的设计,实战里也会踩坑。我把自己摔过的五个坑列出来,大家可以直接绕开。
第一个坑:引用已废止法条。早期知识库里没有“效力状态”字段,模型给出的依据看着挺对,实际已经废止。后来我在知识库里加了“现行有效法规清单”和效力标注,并要求模型每次引用前先核对该清单,问题基本解决。
第二个坑:新老法条混用。比如大气污染防治法修订后条文号变了,模型可能一会儿引用新版第九十九条,一会儿引用旧版条款。对策是在知识库条目标题里直接写明“2024年修正版”,并让模型在引用时标注版本号。
第三个坑:裁量基准张冠李戴。不同省份的裁量基准差异很大,模型如果同时读了多个省的内容,可能把A省的档位套到B省的案子上。对策是裁量基准文件只保留本地的,其他地区内容放到 assets 里按需加载。
第四个坑:文书模板僵化。有些文书,比如查封扣押决定书、按日连续处罚决定书,使用频次低但格式要求极高,通用模板覆盖不了。后来我在 document_templates.md 里把每一种文书单独成节,并附上一个完整示例,让模型照着示例写。
第五个坑:多轮对话窜线。同一个会话里连续处理两个案子,模型会把上一个案子的当事人信息带到下一个文书里。这是最危险的一个坑。我的对策是:一个案子开一个新会话,加载 Skill 后先清空上下文再开始。宁可麻烦一点,也不能让当事人的信息串场。
4.2 现场排查速查表
我把日常使用中最高频的问题和排查方法整理成一张速查表,方便直接对着查。
| 症状 | 可能原因 | 快速排查方法 |
|---|---|---|
| 引用的法条查不到 | 知识库未更新或条文本就无效 | 检查 references 里的定律版本,核对官方发布页 |
| 裁量幅度明显不对 | 本地规则未加载 | 查看 assets/local_rules.json 是否被模型读取 |
| 当事人信息串案 | 多案共用一个会话 | 新开会话,重新加载 Skill |
| 文书结构缺项 | 入参不完整 | 确认案件类型、文书类型、当事人信息是否填齐 |
| 输出内容过于发散 | 温度参数偏高 | 把 temperature 调到 0.2 以下 |
| 引用了外省规定 | 知识库混入多地内容 | 只保留本地裁量基准,其他地区内容单独存放 |
4.3 数据安全与合规底线怎么守住
最后说一点最重要的:执法数据的安全底线。
现场检查记录、监测报告、当事人信息,这些都属于工作敏感数据,不能随便往外部服务里扔。我的做法是:能本地跑的模型就本地跑,所有知识库和 Skill 文件都放在本地磁盘;必须调用在线模型时,先对文书做脱敏处理,用“某公司”“某园区”代替真实名称,等定稿前再替换回来。
另外,在 SKILL.md 里我加了一条硬性要求:不输出未经核实的外部法规解读,不输出任何办案建议以外的“评价性结论”。AI 可以帮你找法条、整理事实、起草文书,但“是否构成违法、怎么处罚”这种决定,必须由执法人员来做。
这套玩法跑通之后,我最大的感受是:真正省时间的不是“打字”这一步,而是“检索和整理”这一步。法条在哪里、证据链怎么组织、文书有哪些必填要素,这些东西被 Skill 提前铺好了路,我只需要集中精力做判断。
最后再分享一个我自己的小习惯:给 Skill 的知识库文件加版本号管理。我每个月会固定抽时间核对一次法规更新情况,在文件头部标注“上次核验日期”,发现修订就立即更新。这个习惯看着笨,关键时刻能救命——万一哪天用了一个过期条文,麻烦的可不是小事。