ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

DeepSeek法律文书自动化:提示词工程驱动的12大场景与100+模板实践

DeepSeek法律文书自动化:提示词工程驱动的12大场景与100+模板实践 简介《DeepSeek法律文书自动化方案基于提示词工程的12大核心场景100高频模板应用》是一份面向律师、法务与企业法律顾问的实务型指南聚焦合同审查、起诉状起草、答辩状生成、法律意见书等高频业务利用DeepSeek大模型与提示词工程实现文书的自动生成、风险识别与合规校验直击法律文书处理效率低、标准不一的痛点。文档共460页分60个大章节支持目录章节跳转与书签大纲快速定位单份PDF打包体积约13.33MB查阅便捷。内容从法律术语库与提示词的交互设计切入展开合同风险条款识别、诉讼请求规范化、证据清单关联匹配、法规检索关联等细化模块并给出15高频合同类型、20案由专项模板及10典型纠纷答辩模板方便按场景直接套用亦可作为团队内训与流程固化的参考资料。已有108人学习浏览适合希望借助自然语言处理与提示词工程提升文书输出质量的法律从业者和技术实践者。1. 法律文书自动化为什么先吃透提示词工程而不是一上来就微调拿到一份《DeepSeek法律文书自动化方案基于提示词工程的12大核心场景100高频模板应用(460页)》的标题时我心里其实先打了个问号模板堆到100多个真正能直接进生产的能有几个过去两年我帮法律科技团队搭过几套类似的文书生成链路最深的体感是——DeepSeek接入不难难的是提示词工程的颗粒度。同样一段事实提示词写得糙模型给你一份“看起来全对、细看全错”的文书提示词把角色、证据边界、引用规则钉死输出才敢走复核流程。这篇笔记把整套方案拆开讲透覆盖接入选型、参数基线、模板设计和踩坑记录适合正在做法律文书自动化的产品、开发和法务信息化从业者照着落地。2. 把 DeepSeek 接到文书流水线接入选型、参数基线与第一个可用请求2.1 先定接入方式API、本地部署与私有化部署三选一做法律文书自动化第一步不是写提示词而是定接入方式。这个决定会影响后面所有模板的稳定性因为不同接入方式下你能控制的参数、能容忍的延迟、能处理的文本长度都不一样。最常见的三种做法里直接调用 DeepSeek API 是最省事的。适合业务量还没起来、数据敏感度可控的团队。按 token 计费不用管推理服务器模型更新由平台负责。缺点也很明显案件事实材料要发到外部服务部分律所的法务合规直接一票否决。第二种是本地部署 DeepSeek常见做法是用 vLLM 或者其它推理框架自己拉起服务。适合数据不能出内网的场景尤其是做尽调、上市、国资背景项目时客户会明确要求“材料不出机房”。代价是显卡成本和运维成本一个小型团队至少要一台能跑得动量化模型的服务器模型量化、显存规划、并发调优都得自己扛。第三种是私有化部署本质是本地部署的加强版多了权限管理、审计日志、网络隔离这些企业级能力。我的建议是先想清楚两个问题——案件材料里有多少是客户明确标注“不得外传”的业务量是否已经多到 API 费用比自建服务器折旧更贵两个问题答案都是“是”才值得走上本地部署这条路否则先用 API 跑通流程把提示词打磨好再说。还有一个容易忽略的点无论哪种接入方式都要在代码里留一个“接入层”。不要让业务代码直接绑死某个模型的调用方式而是封装成一个legal_doc_client类。将来从 API 切到本地部署或者从对话模型切到推理模型只改配置文件不改任何模板逻辑。这一步早期不做后面每次换模型都要全量回归成本极高。2.2 temperature、top_p、max_tokens法律文书的参数基线法律文书和闲聊、文案生成完全是两个世界。闲聊希望模型“有意思”文书希望模型“没主见”。所以在参数上我的默认基线是temperature0.1、top_p0.1、max_tokens按文书类型从 1024 到 4096 不等。参数推荐值为什么这么设temperature0.1~0.2法律文书要求措辞稳定温度高了同一份事实每次生成都不一样复核没法做top_p0.1~0.3配合低温使用进一步收窄采样范围减少生僻表达max_tokens1024~4096起诉状、律师函取低值法律意见书、尽调报告取高值presence_penalty0法律文书不需要鼓励新话题设高了会引入无关内容frequency_penalty0~0.1默认 0 即可防止重复用词时再用惩罚反而破坏句式稳定这里有个血泪经验不要为了“让文书更像人写的”把 temperature 调到 0.7 以上。人写的风格可以通过提示词里的文体要求来引导比如“使用规范的司法文书用语、不使用网络流行语”而不是靠随机性。把温度调高换来的不是文采是法条引用不稳定和关键数字前后矛盾。批量生成 100 份催款函时你会看到同一套模板生成的内容在措辞上各自为政复核成本直线上升。但也不是越低越好。temperature0时模型会退化成贪心采样遇到需要措辞变化的场景比如多份不同的律师函反而容易出现同质化。一般我会把合同审查、起诉状这类“格式优先”的场景锁死在 0.1把律师函、调解意见这类“表达有弹性”的场景放到 0.2~0.3。2.3 跑通最小请求一段能直接吃进文书要求的 Python 调用接入方式定了参数基线有了下一步就是跑通第一个请求。下面的代码是整套方案的最小可运行版本我一般用 OpenAI SDK 来调 DeepSeek 的接口因为接口风格兼容后期切换成本低。from openai import OpenAI client OpenAI( api_keysk-你的密钥, base_urlhttps://api.deepseek.com, # 以官方最新接入地址为准 ) resp client.chat.completions.create( modeldeepseek-chat, # 换成你账号下实际可用的模型标识 temperature0.1, # 低温法律文书要稳定不要花哨 top_p0.1, # 只保留高概率词减少表达漂移 max_tokens2048, # 单次输出上限长文书后面讲分段策略 messages[ { role: system, content: 你是一名执业十年以上的民商事诉讼律师负责起草法律文书。 只依据用户给出的事实不自行补充案件细节 引用法条时必须写明法律名称和条款号拿不准就标注待核。, }, { role: user, content: 事实背景A公司与B公司签订设备采购合同约定分期付款 B公司已支付首期但未支付第二期款项逾期90天。 请草拟一份民事起诉状被告为B公司。, }, ], ) print(resp.choices[0].message.content)这段代码里有几个参数值得展开说。model字段不要写死成某个版本号因为你的账号能用的模型标识可能随时变化我一般会从配置文件里读取这样切换模型只改一行配置。messages里 system 和 user 的职责划分是第一道提示词工程——system 描述职业身份和红线user 只放本次案件事实。事实背景里出现的 A、B 公司名称在真实业务中应该从案件管理系统里取模板变量填充而不是手写进代码。跑通之后先做一个小验证连续调用五次看输出结果里的事实表述是否一致尤其是金额、日期、当事人名称这三个高危字段。五次结果关键事实完全一致才说明提示词和参数配合正常。2.4 响应拿到后别急着用先过三道格式关卡很多人把模型返回的文本直接导进 Word 就交付了这是大忌。我把“响应后处理”称为三道关卡每道都能拦住一批低级事故。第一道检查finish_reason。如果返回的是length说明输出被 max_tokens 截断了这份文书是残缺的不能交付。第二道检查文本里有没有“作为AI模型”“根据我的知识截止日期”这类痕迹话术出现任何一个都说明 system 提示词没锁住需要回炉。第三道检查关键字段回填把用户原始输入里的当事人、金额、日期提取出来逐一在生成结果里做字符串匹配匹配不上的直接报警。3. 提示词工程拆开揉碎系统提示词、上下文顺序与结构化输出3.1 系统提示词管“职业身份与红线”用户提示词只管“本次事实”提示词工程做久了你会发现一个规律大多数翻车不是模型不行是系统提示词和用户提示词的职责混在一起了。把职业身份、输出规范、禁止事项全塞进用户提示词里每次调用都要重复一大段既浪费 token又容易在复制粘贴时改坏。正确的做法是把系统提示词当成“执业规范”把用户提示词当成“案件卷宗”。我服务过的团队里最稳的系统提示词长这样你是一名执业律师专门处理民商事法律文书。 你的工作原则 1. 只依据用户提供的事实和证据起草文书禁止自行推测或补充事实。 2. 引用法律条文必须写清法律名称和条号无法确认的用【待核】标注。 3. 文书结构遵循中国法院和律师实务中的通行格式。 4. 不使用“尊敬的”“亲爱的”等非法律文书用语。 5. 遇到用户未提供但文书必需的信息如被告身份证号列出缺失清单而不是编造。注意其中第 4 条和第 5 条都是“红线式”表达。模型对负面指令的执行效果比正面指令更好“不做什么”比“做什么”更能约束输出。第 5 条尤其重要它把“编造信息”这个最大的风险提前拦住了——模型宁愿告诉你缺什么也不能替你补一个不存在的身份证号。用户提示词则保持纯粹只放案件事实、本次诉求、输出要求。别把事实和指令混在一起写比如“A公司欠B公司钱请写起诉状采用仿宋体”这种写法模型很容易把“请写起诉状”后面的格式描述当成事实处理。3.2 上下文工程事实材料按时间线排布争议焦点最后压轴法律文书的提示词通常要放一大段事实材料这里就涉及到最近经常被讨论的上下文工程。我的经验是材料顺序直接影响模型对事实的权重分配。把关键事实埋在段落中间模型很容易“读到后面忘了前面”这在长上下文里尤其明显。给出一套我验证过的排布顺序当事人关系表谁是谁什么身份一句话说清。时间线事实按时间先后列出发生了什么每条事实一行。双方主张原告要求什么被告抗辩什么。证据清单有哪些证据能证明哪些事实。本次任务明确要生成什么文书提供给谁使用。这个顺序的逻辑是先让模型建立人物关系框架再填充事件最后才给任务。如果反过来一上来就说“写一份起诉状”模型就会带着“我要生成起诉状”的预设去读事实容易把事实往模板里硬套。先读事实、后接任务模型会先形成对案情的理解再选择文书结构输出的贴合度会明显提升。上下文工程的另一个细节是长度控制。DeepSeek 虽然支持很长的上下文窗口但事实材料过长时模型对中间部分的注意力会下降。我一般会在送入提示词之前用脚本把案件时间线压缩成“每条不超过 50 字”的列表。这不是让你丢失细节而是逼自己只保留法律事实要素时间、主体、行为、金额。描述性修饰一律删掉。3.3 用 JSON 结构化输出把文书拆成字段模型就不能“自由发挥”很多团队做文书自动化时直接让模型输出整篇文本然后人工复制到系统里。这个流程有个致命问题非结构化的文本没法做自动校验没法字段级比对也没法入库归档。做法律文书自动化一定要尽早让模型输出 JSON 结构。DeepSeek 的接口支持 JSON 输出模式下面是一段法律意见书的结构化输出示例resp client.chat.completions.create( modeldeepseek-chat, temperature0.1, top_p0.1, max_tokens2048, response_format{type: json_object}, messages[ { role: system, content: 你只输出 JSON不要输出任何其他文字。JSON 的字段必须完整。, }, { role: user, content: ( 请生成一份法律意见书包含以下字段\n opinion_title, case_number, client_name, facts_summary, legal_analysis, conclusion, risk_points, missing_materials\n\n 事实背景某公司因供应商逾期交货拟主张违约责任。 双方合同约定交货期为2024年3月31日实际交货为2024年5月12日。 ), }, ], ) import json data json.loads(resp.choices[0].message.content) print(data[legal_analysis])这里有两个关键点。第一response_format只保证输出是合法 JSON不保证字段完整。所以 system 提示词里要明确“字段必须完整”并且在解析后做字段校验缺失字段时重新生成或报错。第二JSON 模式下模型会压缩自然语言表达文书正文里那些“本院认为”“经审理查明”等引导语会丢失。所以我一般只在中间产物阶段用 JSON 模式把事实摘要、争议焦点、法律分析结构化最后再通过第二个步骤把结构化内容渲染成完整文书文本。后处理时还要注意json.loads之前先检查返回文本里有没有被模型额外添加的 json 标记。有时候模型不遵守指令会在 JSON 外面包一层 markdown 代码块解析前要做一个清洗text resp.choices[0].message.content.strip() if text.startswith(): text text.strip() text text.removeprefix(json).strip() data json.loads(text)这段清洗逻辑看着简单但在批量跑批时能省下大量手工修正时间。结构化输出最大的价值在于它把模型从“写作文”拉回到“填表单”而填表单的结果天然适合自动校验。4. 12大核心场景与100高频模板分类逻辑、通用骨架和一套能复用的模板写法4.1 12大场景不是按“文书名字”分的是按“文书动作”分的刚接触这套方案时我也想过100多个模板怎么从 12 大场景里演化出来的后来发现分类的关键不是文书名称而是“文书动作”。起诉状、答辩状、上诉状是同一个动作——“陈述己方主张”合同审查意见书、法律风险提示函是另一个动作——“找毛病”。按动作分类12 大核心场景大致可以这样切核心场景典型文书提示词重心合同审查审查意见书、风险提示函逐条风险评估、修改建议民事起诉起诉状、财产保全申请诉讼请求量化、事实与理由民事应诉答辩状、管辖异议申请抗辩点归纳、证据对应律师函催款函、警告函事实陈述简洁、诉求明确法律意见书专项法律分析报告法律依据充分、结论清晰劳动仲裁仲裁申请书、答辩书仲裁请求计算、证据清单婚姻家事离婚协议、财产分割协议财产明细、子女抚养安排合同草拟各类合同文本条款完整、权利义务对称尽职调查尽调清单、问题清单信息收集、风险点提示知识产权侵权警告函、维权意见书权利状态描述、侵权比对公司治理股东会决议、股权协议程序合规、表决事项明确执行与保全执行申请书、保全申请书执行依据、财产线索每一类动作对应的提示词策略完全不同。合同审查类的重心是“找问题”要求模型先列出风险再给修改建议起诉类的重心是“说服”要求模型把事实往法律构成要件上靠协议草拟类的重心是“平衡”要求模型同时考虑双方权利和义务。如果你的团队从这 12 个场景出发每个场景先沉淀 5 到 10 个高频模板100 个模板的目标其实是水到渠成的。4.2 合同审查意见书模板拆解一个填槽模板怎么从 60 分提到 90 分拿合同审查这个场景来说最朴素的模板是“把合同全文塞给模型让它找问题”。这种写法只能得 60 分——模型会把合同里的非关键条款也当成风险点输出一堆“请注意本合同存在商业风险”之类的废话。改进的方向是给模板加“审查规则”。我常用的合同审查提示词模板是这样设计的contract_review_template 你是主办律师正在为{client_name}审查一份{contract_type}合同。 审查要求 1. 只审查与{client_industry}业务相关的法律风险不评论商业条款是否划算。 2. 按“条款位置-风险描述-后果分析-修改建议”四段式输出。 3. 对付款、违约、管辖、保密四个条款必须逐字审阅。 4. 如果没有发现问题明确写“未发现重大法律风险”禁止编造风险。 合同文本 {contract_text} 请以结构化清单输出审查结果。 这个模板里的核心是第 3 条。不是让模型自由发挥找问题而是指定四个高危条款必须审查。为什么是这四个因为付款条款涉及资金安全违约条款涉及救济力度管辖条款涉及维权成本保密条款涉及商业信息泄露。法律实务中 80% 的合同纠纷集中在这四类条款上。填槽后的调用逻辑也值得注意。contract_text如果太长先做切片分段审查而不是一次塞进去。审查完每段再合并结果去掉重复的风险点。合并时用规则去重比如两条风险描述的“条款位置”相同就保留较严重的一条。这 60 分到 90 分的差距就来自“审查规则”和“强制条款”这两块。100 多个模板里凡是效果差的基本都是提示词里只有“请审查”没有“审查规则”凡是效果好的一定能看到“必须”“禁止”“只”这类限定词。4.3 把100个模板收敛成一个引擎统一的槽位设计与版本管理100 多个模板如果每个都是独立的提示词文本维护成本会高到失控。改了诉讼请求的措辞规范要同步改几十个模板改了系统提示词里的红线表达也得全量同步。所以模板工程化的关键是抽象出统一的槽位结构。我一般把每个模板拆成四个槽位区槽位区内容示例role职业身份与执业边界你是一名民商事诉讼律师task本次文书动作审查合同 / 草拟起诉状facts案件事实与证据当事人、时间线、金额constraints本次输出的特殊要求必须包含风险等级标注其中 role 和 constraints 最好设计成全局变量task 是模板的核心区分点facts 每次调用从业务系统动态注入。这样 100 多个模板真正需要单独维护的只有 task 和对应 constraints基本盘变了只改全局变量。模板的版本管理要像管代码一样管。每次改完模板在文件头写清楚版本号、变更原因、适用模型。我在实际项目中把模板目录做成 Git 仓库每次跑批记录下用的模板版本、模型标识、温度参数这样线上文书出问题能快速定位是模板改坏了还是模型更新了。这套做法被同事吐槽过“小题大做”直到有一次模型升级后大量文书法条引用异常靠提交记录十分钟就锁定了原因省下了一整天的排查时间。5. 法律文书自动化五个不得不避的坑事实漂移、过期法条与批量翻车5.1 法条引用张冠李戴最贵的一类幻觉现象让模型在起诉状里引用《民法典》合同编的条款它写出的条号对不上内容甚至出现“根据《合同法》第XX条”这类已经失效的法律名称。更隐蔽的是法律名称和条号看起来都合理但内容完全是模型编的。原因大模型训练语料里的法条知识和实际法律文本存在时间差而且互联网上的法律文章本身就有大量引用错误模型学到的是“统计规律”而不是“法条原文”。法律文书的幻觉里法条错误是最难防的一类因为它不依赖事实输入而是模型内部知识的错配。解决两条路同时走。第一提示词层面强制要求“引用法律条文时必须写出法律名称和条号拿不准的用【待核】标注”把校对责任显式地交给模型。第二工程层面建一个法条映射表把常用法律名称和条号做离线校验模型输出后逐条比对映射表对不上的直接拦截。这里别指望模型自我纠错你让它“再想想”它大概率是换一条更顺眼但同样错的法条给你。5.2 事实漂移同一份证据在不同文书里表述不一致现象给模型输入同一份采购合同让它生成三份不同文书的初稿——起诉状里写的违约金是 5 万元律师函里写的变成了 3 万元催款函里干脆没提违约金。人工复核时这三份文件单独看都通顺放在一起就露馅了。原因事实信息在提示词里被“稀释”了。当用户提示词里既有大段事实描述又有输出格式要求模型对关键数字的注意力会被分散。尤其是长文本场景模型倾向于“记得大意、忘记细节”金额、日期这类精确信息最容易漂移。解决把关键事实从叙述文本中抽出来做成结构化的“事实卡片”。在提示词里用独立的段落展示关键事实不得修改 - 合同签订日期2024年1月15日 - 违约金条款合同总价款的10%即人民币50,000元 - 逾期天数90天同时在后处理时做强制校验把事实卡片里的数字提取出来在生成结果里逐一匹配。匹配失败就重新生成。这个校验规则值得写成自动化脚本因为人工复核 100 份文书时肉眼很难发现这种“看起来合理但数字不一致”的问题。5.3 temperature 设太高批量文书像“不同的人写的”现象同一套模板、同一组事实批量生成 50 份解除劳动合同通知书每份的措辞风格都不一样。有的开头写“兹有”有的写“现因”有的甚至出现“经过友好协商”这种和解除通知场景不搭的措辞。原因temperature 设得偏高。我在第 2 章反复强调法律文书要低温但很多团队拿通用大模型的默认参数直接套法律场景默认的 0.7~1.0 在闲聊场景没问题在批量文书场景就是灾难。解决批量任务统一锁死temperature0.1、top_p0.1并且让每个模板在提示词里写明“使用规范的司法文书用语不使用弹性表达”。这里有一个权衡低温会让每份文书长得越来越像但在法律场景“长得像”恰恰是好事说明格式规范、表述严谨。要差异化应该在事实和诉求层面做差异化而不是靠模型“自由发挥”。5.4 长文书被静默截断结尾缺失现象生成一份完整的法律意见书模型前面写得很详细到“结论和建议”部分突然中断。如果开发人员只看前半段是否通顺没有检查finish_reason这份没有结论的意见书就可能被交付出去。原因max_tokens设得不够或者预估输出长度时只算了正文字数没算 system 提示词里的格式要求。模型优先保证前面部分完整写到末尾时发现预算不够就硬生生停下来了。解决建一个输出长度预算表起诉状预算 1500 token合同审查意见书预算 3000 token尽调报告预算 4000 token按文档类型分配max_tokens。同时在代码里强制检查finish_reasonif resp.choices[0].finish_reason length: print(输出被截断需要分段生成或加大 max_tokens)对预计超过 3000 token 的文书最稳的方案是分段生成先让模型输出大纲再按章节逐段生成最后拼接。这样即使某一段超长也只是该段重新生成不会让整篇文书报废。5.5 批量跑批时上下文串号现象跑批生成 200 份律师函其中 3 份的当事人名称和案件事实对不上——A 案件的函件里出现了 B 公司的名称。这类错误一旦发出去后果是灾难性的。原因批量脚本里复用了同一个messages对象。比如先把系统提示词加进列表然后在循环里messages.append(user_content)下一次循环时没有清空上一轮的 user 内容或者从错误的变量里读了案件数据。多线程并发时更容易出现多个请求共享了同一个客户端对象但 messages 列表被交叉写入。解决批量脚本里每条请求都重建完整的messages列表绝不复用。同时加一道“当事人姓名回填校验”的后处理把每条生成的文书文本和该条案件的当事人姓名做匹配匹配不到就报警允许机器多花几秒钟换一次重生成不允许自己赌概率。我在生产环境里见过太多次“看起来没问题”的批量任务翻车这类校验省不掉。6. 把方案推到能放心交付双模型互验、回归测试集与提示词版本管理6.1 用“低温重生成”和“独立模型复核”交叉验证法律文书交付前我的习惯是做一次“双模型互验”。具体做法是DeepSeek 生成初稿后把初稿和案件事实卡片一起交给另一个独立模型让后者扮演“复核律师”只挑错不重写。挑错重点放在三件事法条引用是否成立金额日期是否与事实一致诉讼请求是否明确可执行。如果复核模型挑出的问题超过三个就判定这次生成不合格调整提示词后重新生成。这个环节的准确率不是 100%但能把批量文书里 90% 的事实性错误提前拦住。6.2 建一个 30 条的回归测试集改完提示词必须全量跑一遍提示词工程最大的隐患是“改了一个模板带崩了另一个”。我的做法是攒一个 30 条左右的回归测试集覆盖 12 大场景里的典型案件。每次修改任何模板或全局提示词跑一遍回归集对比输出结果里的关键事实是否保持一致。这个测试集不用大但要精——每条都包含至少一个容易出错的点比如过期法条、模糊金额、缺失当事人信息。回归集跑过一遍心里才有底。6.3 提示词用 Git 管起来跑批前先确认版本我现在要求所有模板文件都进 Git 仓库文件头写版本号、适用模型、温度基线。跑批脚本启动时自动读模板版本并记录到日志里。这样哪天线上文书出了问题翻开日志就能看到“这份文书是哪版模板、哪个模型、什么温度下生成的”打开 Git 对比一下翻车原因基本就浮出水面了。如果你只打算从这篇笔记里带走一个习惯我建议是管好 prompt 版本——我看过太多团队把时间花在排查“模型抽风”上最后发现是模板被同事顺手改了一个字。希望帮到你。本文还有配套的精品资源点击获取
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进