想象你走进一家综合医院:全科医生能看头疼脑热,但真要处理复杂的心脏手术,你得找心外科专科医生。通用大模型(比如ChatGPT)就是那位全科医生——上知天文下知地理,可一旦涉及“这条合同条款是否违反《民法典》”“这个案子该判几年”,它就含糊其辞了。于是,一批“法律专科医生”登场了:LegalGPT来自哈工大,ChatLaw来自北大,它们都在通用模型的基础上,额外进修了大量法律“专业课”——研读判例、背诵法条、模拟庭审——最终练成了能判案预测、量刑辅助、合同审查的垂直领域专家。 但专科医生也有软肋:它们偶尔会“凭印象瞎编法条”,把不存在的“《临时法》第XXX条”说得煞有介事——这就是大模型圈臭名昭著的“幻觉”。法律场景对准确性和可解释性的要求近乎苛刻,一次法条引用错误就可能酿成冤假错案。这篇文章就像一个“专科医生进修指南”,带你彻底看清LegalGPT和ChatLaw是怎么炼成的、有哪些看家本领、又藏着哪些雷区,以及AI从业者该如何在真实业务中安全地使用它们。

岗位关联

对AI从业者而言,本文帮你看懂垂直大模型的训练思路与落地边界,无论你要做法律AI产品,还是评估“垂直微调”这一技术路线是否适合你的行业,都能建立清晰的判断框架。

目录
  1. 可视化演示
  2. 一、概念溯源:两位法律专科医生的来历
  3. 二、技术架构:法律知识如何注入神经网络
  4. 三、核心任务:法律专科医生的看家本领
  5. 四、能力评测:专科医生的执业考核
  6. 五、场景约束:法律场景的特殊规则
  7. 六、风险防控:如何杜绝“瞎编法条”
  8. AI 应用场景
  9. Python 演示
  10. 常见误区
  11. 面试题

可视化演示

本节配有交互动效(进入视口后自动加载,约 3KB)。

法律领域微调流程 ——CPT+SFT两阶段注入 CPT: 裁判文书+法规+教材持续预训练 SFT: 法律问答指令微调 语料:高质量法律文本构建知识库 挑战:灾难性遗忘+旧知识覆盖 LegalGPT = CPT(Base, D_legal) + SFT(Instruct)

一、概念溯源:两位法律专科医生的来历

医院里有条不成文的规矩:全科医生解决“常见病”,疑难杂症要转诊给专科医生。通用大模型就像全科医生,它能流畅地和你聊三国、写诗、解释相对论,但你要问它“购买商铺的定金合同纠纷该怎么判”,它给出的答案往往源于网上道听途说,而非真正的法理与判例。通用模型的确在训练时“读过”一些法律文本,但那些知识在浩瀚的通用语料中被稀释了,就像全科医生只在医学院听过一堂法医学选修课。

LegalGPT和ChatLaw就是为此而生的“法律专科医生”——它们不是从零开始培养,而是在通用大模型的基础上定向进修法律专业。LegalGPT由哈工大研发团队推出,是国内较早探索法律垂直大模型的项目之一,定位于法律领域的知识问答与判决辅助;ChatLaw则由北京大学团队打造,强调法律场景的多轮对话能力,更像一位能和你来回沟通案情细节的法律顾问。业界把这类模型统称为“垂直领域大模型”:它牺牲了“什么都懂一点”的博学,换来了“法律这门课考满分”的专精。

垂直模型的“偏科”程度,取决于训练语料的配比。假设我们用两份语料训练一个法律专科医生:一份是海量的法律文书,另一份是通用的网络文本。法律语料在总语料中的占比直接决定了模型的“偏科指数”:

回到医院的比喻:LegalGPT和ChatLaw拿到的是“5年法律专项进修+少量全科复习”的培养方案。它们刻意提高法律知识的浓度,让自己在法庭这个“专科诊室”里游刃有余——但代价是,你让它们帮你写一首情诗,效果可能还不如通用大模型。这就是垂直化的本质:用博学换专精。

Rdomain=DdomainDdomain+Dgeneral\displaystyle R_{domain} = \frac{D_{domain}}{D_{domain} + D_{general}}
这个公式是垂直大模型“注入多少法律知识”的定量标尺:法律语料占比越高,模型越偏科法律,但超过一定阈值就会损害它的通用语言能力。
  1. 分子 \(D_{domain}\)法律语料的体量,比如裁判文书、法条原文、法学教材,按"token"(模型处理文本的最小单位)计数——相当于给专科医生准备的法律病例本数量。
    Ddomain\displaystyle D_{domain}
  2. 分母 \(D_{domain} + D_{general}\)训练语料总量,其中 \(D_{general}\) 是通用语料(网页、百科、书籍),相当于通识教育课本的总量。
    Ddomain+Dgeneral\displaystyle D_{domain} + D_{general}
  3. 比值 \(R_{domain}\)法律语料的占比,取值在0到1之间。\(R_{domain}\) 接近0时模型几乎不懂法律,接近1时模型会“满嘴法言法语但连常识都答不对”。
    Rdomain=DdomainDdomain+Dgeneral\displaystyle R_{domain} = \frac{D_{domain}}{D_{domain} + D_{general}}

二、技术架构:法律知识如何注入神经网络

专科医生的成长路径是“先学通识、再攻专科”。法律垂直大模型的训练也遵循同样的逻辑:找一个底子扎实的“全科医生”当基座,再通过一系列定向训练把它改造成法律专家。LegalGPT和ChatLaw的基座通常选用LLaMA等开源模型,因为从头训练一个大模型成本太高,而开源基座已经具备优秀的语言理解和生成能力——就像招一个名校毕业的全科医生进来,只需再送他去法律科室轮转几年。

“轮转”分为两个关键阶段。第一阶段是领域继续预训练:把海量法律文本(裁判文书、法律法规、法学论文)继续喂给模型,让模型的“大脑”重新校准,把法律知识沉淀进参数里。这相当于医生在法律科室里日夜浸泡,形成“法感”。第二阶段是指令微调:构造一批“用户问-律师答”的对话样本,让模型学会用法律人的口吻和结构回答问题,而不是像背书一样倒出原文。

两个阶段的优化目标会被合并成一个总损失函数。想象专科医生要同时应付两份作业:一份是“把话说通顺”的通识作业,另一份是“答对法律题”的专科作业。总损失就是两份作业的加权平均,权重系数决定了模型更偏重哪一边:

用医院的例子收尾:\(\lambda\) 调教得好,专科医生既能用病人听得懂的话沟通(通用能力不崩),又能给出专业的法律意见(专科能力出色);\(\lambda\) 调得过大,这位医生开口就是拉丁文病历,病人一句听不懂——这就是过拟合的风险。

Ltotal=(1−λ)⋅Lbase+λ⋅Ldomain\displaystyle L_{total} = (1-\lambda)\cdot L_{base} + \lambda\cdot L_{domain}
这是领域微调的“总成绩单”公式:\(L_{base}\) 保证模型不忘记怎么说人话,\(L_{domain}\) 让它精通法律任务,\(\lambda\) 则像一个旋钮,控制“通识”和“专精”之间的天平。
  1. \(L_{base}\)(通用语言损失)衡量模型在通用文本上的预测误差,数值越小说明语言越流畅——相当于医学生解剖学课程的平时分。
    Lbase\displaystyle L_{base}
  2. \(L_{domain}\)(法律任务损失)衡量模型在法律任务(如法律问答、判例预测)上的预测误差,越小说明法律答得越准——相当于专科病例分析考试的得分。
    Ldomain\displaystyle L_{domain}
  3. \(\lambda\)(平衡系数)一个0到1之间的超参数,由工程师手动设置。\(\lambda\) 越大,模型越重视法律任务表现;\(\lambda=0\) 时模型完全退化为通用模型。
    λ\displaystyle \lambda
  4. 加权求和\((1-\lambda)\cdot L_{base} + \lambda\cdot L_{domain}\) 把两份“作业”按权重合并,梯度下降算法沿着总损失最小的方向更新模型参数。
    Ltotal=(1−λ)⋅Lbase+λ⋅Ldomain\displaystyle L_{total} = (1-\lambda)\cdot L_{base} + \lambda\cdot L_{domain}

三、核心任务:法律专科医生的看家本领

法律专科医生正式“坐诊”后,主要接四类活儿:判决预测、量刑辅助、合同审查和法律问答。其中最核心、也最能体现AI价值的是判决预测——给定一份起诉状和案情描述,模型要预测法官最可能判哪一方胜诉、认定什么罪名。这就像专科医生看了病人的检查报告,预判病情的发展走向。

判决预测本质上是分类问题:模型把案情文本压缩成一个“数字摘要”(向量 \(h\)),然后给每个候选判决类别打一个原始分,最后用softmax函数把分数转换成“这个案子被判为有罪/无罪/罪名A/罪名B”的概率分布。哪个类别概率最高,模型就建议哪个判决:

除了判决预测,量刑辅助(在法定刑幅度内建议刑期区间,类似医生按指南开药方)和合同审查(逐条扫描合同找出风险条款,类似体检报告解读)也用相似的分类与抽取技术。但别忘了,这位专科医生的“诊断”只能作为参考——就像再厉害的医生开处方也要经过药剂师核对,法律AI的每一条建议都需要人类专家复核。

P(y=c∣x)=exp⁡(sc)∑j=1Kexp⁡(sj),sc=Wc⊤h+bc\displaystyle P(y=c\mid x) = \frac{\exp(s_c)}{\sum_{j=1}^{K}\exp(s_j)}, \quad s_c = W_c^{\top} h + b_c
判决预测的心脏公式:模型读入案情 \(x\),输出“每个判决结果各有多少概率”,法官或律师据此作为参考意见。
  1. \(h\)(案件向量)模型读完起诉状后,把整篇文本压缩成一个固定长度的数值向量——相当于医生对病人全部症状的浓缩理解。
    h\displaystyle h
  2. \(s_c = W_c^{\top} h + b_c\)(打分器)对第 \(c\) 个候选判决类别(如“诈骗罪”“合同纠纷胜诉”)计算一个原始得分,\(W_c\) 和 \(b_c\) 是训练中学到的权重,相当于各个类别的“判卷模板”。
    sc=Wc⊤h+bc\displaystyle s_c = W_c^{\top} h + b_c
  3. \(\exp(s_c)\)(指数放大)把得分变成正数并拉大差距,让最高分更突出——相当于考试后把分数差距放大,方便排名。
    exp⁡(sc)\displaystyle \exp(s_c)
  4. 分母 \(\sum_{j=1}^{K}\exp(s_j)\)(归一化)对所有 \(K\) 个类别的指数得分求和,作为分母把概率压到0~1之间,总和为1——相当于把所有考生的放大分加总,再算每个人的占比。
    ∑j=1Kexp⁡(sj)\displaystyle \sum_{j=1}^{K}\exp(s_j)
  5. \(P(y=c\mid x)\)(判决概率)给定案情 \(x\),模型认为判决结果是 \(c\) 的概率。概率最高的类别就是模型给出的“预测判决”。
    P(y=c∣x)\displaystyle P(y=c\mid x)

四、能力评测:专科医生的执业考核

专科医生的水平怎么样,不能靠嘴说,得参加执业医师资格考试。法律大模型的“执业考试”叫JEC-QA——一个源于中国国家司法考试的问答数据集,包含数万道选择题,覆盖宪法、民法、刑法、诉讼法等十几个法律科目。LegalGPT和ChatLaw这类模型都要在这套卷子上接受检验。

评测的核心指标是准确率(Accuracy):模型答对的题数占总题数的比例。这个指标直白得像“考试成绩”,但它也藏着陷阱——如果测试集里“故意杀人罪”的案例特别多,模型只要无脑猜这个罪名就能蒙对不少题。所以严谨的评测还会分层统计:多选题准确率、不同法域的准确率、长文本案件的准确率,就像医师考试不仅要看总分,还要看每个科目是否及格。

准确率的数学定义如下:把测试集看作 \(N\) 道考题,模型对第 \(i\) 题给出预测答案 \(\hat{y}_i\),标准答案是 \(y_i\),答对记1分、答错记0分,最后求平均:

回到医院场景:JEC-QA就是法律专科医生的“执业医师资格考”。需要泼一盆冷水的是,即便ChatLaw等模型在部分任务上表现出色,整体准确率离“通过司法考试”仍有相当距离,多选题和复杂案例的正确率更是惨不忍睹。这意味着它们目前的定位只是“助理医师”,远没到“主治法官”的水平。

Acc=1N∑i=1NI(y^i=yi)\displaystyle Acc = \frac{1}{N}\sum_{i=1}^{N}\mathbb{I}(\hat{y}_i = y_i)
这就是法律大模型“考试成绩”的计算公式,也是各种论文里“准确率达到XX%”的由来。
  1. \(N\)(考试总题数)测试集中案件/问题的总数,例如1000道司法考试题——相当于考试的试卷总题量。
    N\displaystyle N
  2. \(\hat{y}_i\)(模型预测答案)模型对第 \(i\) 道题的输出,比如预测“职务侵占罪”。
    y^i\displaystyle \hat{y}_i
  3. \(y_i\)(标准答案)由资深法官和法律专家标注的正确答案,相当于阅卷老师手里的标准答案卡。
    yi\displaystyle y_i
  4. \(\mathbb{I}(\hat{y}_i = y_i)\)(指示函数)括号内条件成立取1、不成立取0——答对得1分,答错得0分,没有中间态。
    I(y^i=yi)\displaystyle \mathbb{I}(\hat{y}_i = y_i)
  5. \(\frac{1}{N}\sum\)(平均分)把所有题的得分加起来除以总题数,得到0到1之间的准确率,乘以100%就是平时论文里看到的百分数。
    Acc=1N∑i=1NI(y^i=yi)\displaystyle Acc = \frac{1}{N}\sum_{i=1}^{N}\mathbb{I}(\hat{y}_i = y_i)

五、场景约束:法律场景的特殊规则

外科手术室里,无菌操作是铁律,因为一次感染就可能要了病人的命。法律场景同样有“无菌操作”级别的硬性约束:准确性压倒一切、判决必须可解释、数据必须合规、人机必须协同。这四条规则共同划定了法律大模型的能力边界。

“可解释性”是其中最特殊的一条。法官写判决书时,不仅要宣布结果,还要写清楚“本院认为……依据《民法典》第X条……”。如果AI只丢出一个“诈骗罪,判三年”的结论而不说明理由,法官根本无法采用。为了解决这个问题,研究者让模型在预测时显式地关注案件文本中的特定法条或证据——用注意力机制给每份材料打一个“重要性权重”,就像医生在病历上划重点标记:“这个症状是关键,那个指标是次要”。

注意力权重的计算方式和前面softmax如出一辙:先算“当前审判点”与“每条法规”的相关度,再利用softmax归一化成权重。权重越高的法条,说明模型在判决时越依赖它:

注意力权重让法律大模型的推理过程从“黑箱”变成了“半透明病历”。但它还不够——真正的判决书需要的法律解释是规范的法条援引和严谨的三段论推理,而注意力权重顶多算“医生在病历上画的圈圈”。所以法律场景的最终约束是人机协同:AI负责快速筛线索、给建议,人类法官负责对每一个结论做最终的伦理判断和全案裁量。

αi=exp⁡(q⊤ki)∑j=1Mexp⁡(q⊤kj)\displaystyle \alpha_i = \frac{\exp(q^{\top}k_i)}{\sum_{j=1}^{M}\exp(q^{\top}k_j)}
可解释性的数学钥匙:\(\alpha_i\) 表示第 \(i\) 条法规对当前判决的重要性占比,让模型的“黑箱思考”有迹可循。
  1. \(q\)(查询向量)表示模型当前正在思考的审判焦点,例如“被告主观上有没有非法占有目的”——相当于医生在病历上写下的“待查事项”。
    q\displaystyle q
  2. \(k_i\)(键向量)第 \(i\) 条法规或证据的向量表示,相当于案卷里每份材料的标签。
    ki\displaystyle k_i
  3. \(q^{\top}k_i\)(相关性打分)用点积计算查询与第 \(i\) 份材料的相关程度,分数越高说明这份材料越需要重点考虑。
    q⊤ki\displaystyle q^{\top}k_i
  4. softmax归一化把 \(M\) 份材料的相关分变成总和为1的权重分布,让“重点关注”具有比较意义。
    αi=exp⁡(q⊤ki)∑j=1Mexp⁡(q⊤kj)\displaystyle \alpha_i = \frac{\exp(q^{\top}k_i)}{\sum_{j=1}^{M}\exp(q^{\top}k_j)}

六、风险防控:如何杜绝“瞎编法条”

专科医生最大的职业风险是“误诊”,法律大模型最大的职业风险是幻觉(Hallucination)——一本正经地引用一个根本不存在的“《中华人民共和国临时法》第XXX条”,或者煞有介事地编造一个从未发生过的判例。这就像一位医生凭模糊印象断言“你得了XX病”,却拿不出一张真实的化验单。

幻觉的根源在于大模型的生成天性:它本质上是一个“接龙大师”,根据上文预测下一个最可能的词,而不是数据库查询器。法律训练数据再丰富,也覆盖不了所有边缘情况,一旦模型遇到没见过的案情,它就可能“编”一个听起来合理的法条来自圆其说。为了给这位爱编故事的专科医生装上“刹车”,业界发展出三大防线:

第一道防线是检索增强生成(RAG):模型回答前,先从一个外部法律知识库(存有真实法条全文)中检索相关条文,再根据检索结果生成答案——相当于医生先查《临床诊疗指南》再下诊断。第二道防线是约束解码:限制模型只能从知识库中“挑选”真实的法条编号填入输出,从源头杜绝编造不存在的条文。第三道防线是人工复核:AI的每一条输出在交付前,必须经过执业律师的终审——就像处方药必须经过药剂师双人核对才能发药。

约束解码的数学思想可以用一个带“过滤开关”的概率公式表达:最终输出的概率,等于语言模型原本的概率乘以一个“事实校验开关”——答案中的每个事实陈述必须在知识库 \(\mathcal{K}\) 中查得到,查不到就把概率清零:

回到医院作结:防幻觉的三道防线,就像病历双人核对、处方药复核、主任医师查房三层制度。法律大模型绝非“万能神医”,但只要给它装上知识库“外挂”、戴上约束解码的“紧箍咒”,再加上人类专家的终审——这位法律专科医生就能在真实业务中安全上岗。

Pfinal(x)=PLM(x)⋅I[fact(x)∈K]Z\displaystyle P_{final}(x) = \frac{P_{LM}(x)\cdot \mathbb{I}\big[fact(x)\in \mathcal{K}\big]}{Z}
防幻觉的“安全阀门”公式:语言模型可以自由生成候选答案,但只有那些所有事实陈述都能在知识库中查到的答案,才有资格被输出。
  1. \(P_{LM}(x)\)(语言模型原始概率)大模型按“接龙”方式生成答案 \(x\) 的内在概率,代表它觉得这句话有多“顺口”。
    PLM(x)\displaystyle P_{LM}(x)
  2. \(fact(x)\)(事实陈述集合)从答案 \(x\) 中抽取出的每个可验证的事实点,例如“根据《民法典》第四百七十条”“2023年北京市朝阳区人民法院”。
    fact(x)\displaystyle fact(x)
  3. \(\mathcal{K}\)(外部知识库)存放真实法条全文和权威判例的数据库,相当于药剂师手边的《国家药品目录》。
    K\displaystyle \mathcal{K}
  4. \(\mathbb{I}[fact(x)\in \mathcal{K}]\)(事实校验开关)答案中所有事实都能在知识库中查到取1,有任何一条查不到就取0——一票否决。
    I[fact(x)∈K]\displaystyle \mathbb{I}\big[fact(x)\in \mathcal{K}\big]
  5. \(Z\)(归一化常数)保证过滤后的概率总和仍然为1。在指示函数的作用下,任何包含虚构法条的候选答案概率都会归零,从而被系统拒之门外。
    Pfinal(x)=PLM(x)⋅I[fact(x)∈K]Z\displaystyle P_{final}(x) = \frac{P_{LM}(x)\cdot \mathbb{I}\big[fact(x)\in \mathcal{K}\big]}{Z}

AI 应用场景

场景一:法院的“第二意见”辅助系统

阶段:判决预测与法律推理

解决的问题:基层法院案多人少,法官在堆积如山的案件中需要快速定位争议焦点。传统方式依赖法官逐案人工阅读卷宗,效率低且容易遗漏相似判例。法律大模型可以秒级生成“预测判决+相似案例引用”,作为法官的“第二意见”参考。

具体案例:某基层法院引入基于ChatLaw微调的辅助系统,法官上传一份“商铺租赁合同纠纷”起诉状,系统自动输出“原告胜诉概率72%+本院认为部分参考论述+近三年相似判例三条”。法官对AI给出的参考论述进行核验后,将其作为撰写判决书的素材,单案文书起草时间从3小时压缩到40分钟。

场景二:律所的智能合同审查

阶段:合同审查与风险条款抽取

解决的问题:传统合同审查完全依赖初级律师逐条阅读,一份50页的合同需要半天时间,且人工容易忽略隐藏在附件里的风险条款。法律垂直大模型可以快速扫描全文,标出“违约金过高”“管辖法院约定不明”等风险点,并附带修改建议和法条依据。

具体案例:某头部律所的商事团队使用LegalGPT的微调版本处理并购尽调的合同审查环节。系统在10分钟内完成20份合同的初步筛查,标记出7处潜在风险,其中“竞业限制期限超过法定2年上限”这一条被准确识别并援引了《劳动合同法》第二十四条。律师只需复核AI标记的内容,团队整体审阅效率提升3倍。

场景三:公共法律服务智能分诊

阶段:法律问答与多轮对话

解决的问题:12348法律援助热线长期被大量重复性咨询占据,比如“公司拖欠工资怎么办”这类基础问题。传统电话坐席人力有限,高峰期接通率不足50%。ChatLaw擅长多轮对话,可以像“智能分诊台”一样先接住用户的朴素问题,给出初步法律指引,再按需转接人工律师。

具体案例:某市司法局将ChatLaw部署到微信公众号的法律服务入口。一位外卖骑手问“站长欠我两个月工资没发”,系统通过多轮追问确认了劳动关系和欠薪金额,自动匹配《劳动合同法》第三十条,生成“向劳动监察大队投诉+申请劳动仲裁”的行动指引。遇到复杂案情(如涉及工伤叠加欠薪),系统主动提示“建议转接人工律师”,并附上附近的法律援助中心信息。

Python 演示

python54 行
# -*- coding: utf-8 -*-"""法律垂直大模型防幻觉演示:知识库约束 vs 无约束生成""" LAW_DB = {    "合同": "《民法典》第四百七十条:合同的内容由当事人约定,一般包括标的、数量、质量、报酬等条款。",    "离婚": "《民法典》第一千零七十六条:夫妻双方自愿离婚的,应当签订书面离婚协议,并亲自到婚姻登记机关申请离婚登记。",    "欠薪": "《劳动合同法》第三十条:用人单位应当按照劳动合同约定和国家规定,向劳动者及时足额支付劳动报酬。",    "酒驾": "《刑法》第一百三十三条之一:在道路上醉酒驾驶机动车的,处拘役,并处罚金。",}  def query_law(question):    """检索知识库中最相关的法条(使用关键词字符重叠作为相似度)"""    best_hit = None    best_score = -1    for keyword, text in LAW_DB.items():        # 计算问题与关键词共现字符数        overlap = len(set(question) & set(keyword))        if overlap > best_score:            best_score = overlap            best_hit = text    return best_hit if best_score > 0 else None  def generate_without_constraint(question):    """无约束生成:检索不到也要硬编一条(模拟幻觉)"""    hit = query_law(question)    if hit is None:        return "根据《中华人民共和国临时法》第XXX条规定...(此条文实际不存在)"    return hit  def generate_with_constraint(question):    """有约束生成:检索不到就坦白不知道(防幻觉)"""    hit = query_law(question)    if hit is None:        return "抱歉,知识库中暂未检索到相关法条,建议咨询专业律师。"    return hit  def main():    questions = [        "公司拖欠我两个月工资怎么办?",        "昨天看到一只猫横穿马路,我该找谁赔偿?",    ]    for question in questions:        print("问题:", question)        print("[无约束]", generate_without_constraint(question))        print("[有约束]", generate_with_constraint(question))        print("-" * 40)  if __name__ == "__main__":    main()
目的:用一个微型“法条知识库+关键词检索”模拟真实法律大模型的防幻觉机制,对比展示有/无知识库约束时模型的回答差异。
  1. overlap = len(set(question) & set(keyword))计算问题与法条关键词的共现字符数,作为最简单的相似度打分。
  2. return best_hit if best_score > 0 else None检索不到任何相关法条时返回 None,为后续的“约束拦截”留出判定口。
  3. generate_without_constraint故意模拟无约束模型的幻觉行为:检索不到法条时也硬编一条不存在的“临时法”。
  4. generate_with_constraint模拟检索增强+约束解码的真实防线:知识库查不到就坦率承认,绝不编造法条。
  5. if __name__ == "__main__":可执行入口,直接运行即可看到有/无约束的鲜明对比。

常见误区

误区很多初学者以为法律垂直模型的训练就是“把一堆裁判文书喂给ChatGPT继续训练”,喂得越多模型越厉害。

正解法律微调讲究“怎么喂”和“喂什么”。直接续训海量原文容易让模型退化成“法条复读机”,甚至损伤通用能力。正规做法是分阶段进行:领域继续预训练+指令微调的“对话样本”微调,并配合 \(\lambda\) 平衡系数控制通识与专精的比例。这就像专科医生不能只背病历,还得练怎么和病人沟通。

为何常见:因为“喂数据”是预训练阶段最容易理解的直觉,而微调阶段的损失函数设计、数据配比、对话模板构造等工程细节藏在论文的犄角旮旯里,小白很难一眼看透。

误区看到论文里“判决预测准确率85%”,就认为AI可以替代法官直接判案了。

正解准确率85%意味着每100个案子错15个——在法律场景这意味着几十个家庭的命运被误判。而且准确率通常是在特定基准集上测得的,真实案件复杂度远超测试样本。法官的工作不仅是“选个罪名”,还包括法庭举证质证、自由心证、社会效果考量等AI无法完成的价值判断。法律大模型永远是“助理医师”,不是“主治医师”。

为何常见:技术圈习惯了用“准确率”衡量模型好坏,容易忽略法律场景对错误零容忍的特殊性。

误区看到论文里展示的注意力热力图,以为那些标红的法条就是模型给出的“判决理由”。

正解注意力权重只反映模型内部计算的“关注程度”,它既不是法律三段论推理,也不具备规范性的裁判说理效力。真实判决书要求“本院认为”部分有严谨的法条援引和逻辑论证,而注意力权重顶多算“医生在病历上画的重点圈”,需要人类法官把它翻译成规范的裁判语言。

为何常见:注意力热力图可视化了“黑箱”,让人误以为“能看到内部关注点=可解释”,忽略了法律解释的规范性要求。

误区认为只要给模型挂上RAG知识库外挂,幻觉问题就一劳永逸地解决了。

正解RAG只是把幻觉从“自由编造”压低到“检索结果不够好”——如果知识库本身更新不及时,或者检索模块没召回最相关的法条,模型依然会在错误的法律依据上生成看似流畅的答案。真实系统还需要约束解码、事实校验、人工复核等多道防线协同,缺一不可。

为何常见:人们对“查字典”有天然的信赖感,容易忽视“查字典也可能查错页”这一环。

误区模型训练完后直接部署上线,三五年不用管。

正解法律是活的——民法典出台后,婚姻法、合同法等单行法随之废止;司法解释和指导性案例不断更新。一个2021年训练的模型,面对2024年生效的新法律规定会给出完全过时的答案。生产环境的“法律专科医生”需要定期增量微调、知识库同步更新和持续评测,否则就会“拿着旧地图找不到新大陆”。

为何常见:软件开发的“一次开发、长期使用”惯性思维被套用到了知识密集型领域,忽视了法律知识的时效性。

面试题

Q1. LegalGPT和ChatLaw属于哪类大模型?

单选题 · easy

  • A.通用对话大模型
  • B.法律垂直大模型← 正确答案
  • C.视觉内容生成模型
  • D.语音识别转录模型

答案:B。LegalGPT由哈工大团队、ChatLaw由北京大学团队打造,都是在通用大模型基础上针对法律领域做定向训练的垂直大模型。它们专攻判决预测、合同审查等法律任务,而不是通用闲聊或图像、语音任务。

Q2. 训练法律垂直大模型的常规第一步是什么?

单选题 · easy

  • A.从零开始预训练
  • B.继续预训练注入法律语料← 正确答案
  • C.直接上线生产环境
  • D.用强化学习自我对弈

答案:B。垂直大模型通常选择LLaMA等开源通用模型作基座,再用裁判文书、法条等法律语料做领域继续预训练,让模型参数“吸收”法律知识。从零预训练成本极高且没必要,直接上线毫无法律能力,强化学习则是微调阶段的进阶手段而非第一步。

Q3. 判决预测任务中,softmax函数的输出含义是什么?

单选题 · mid

  • A.案件争议标的金额
  • B.各判决类别的概率分布← 正确答案
  • C.律师所需的诉讼费用
  • D.法庭开庭的时间安排

答案:B。softmax把模型对每个候选判决类别(如有罪/无罪/罪名A/罪名B)的原始打分转换为总和为1的概率分布,概率最高的类别就是预测判决。它不输出金额、费用或时间,只负责“分类概率”。

Q4. 法律场景对AI“可解释性”的要求主要指什么?

单选题 · mid

  • A.模型代码完全开源
  • B.输出判决依据和推理过程← 正确答案
  • C.界面设计美观易用
  • D.推理速度足够快

答案:B。法官采用AI结论的前提是“知道它为什么这么判”。可解释性要求模型指出它参考了哪条法规、哪个关键证据,而不是甩出一个无依据的结论。代码开源、界面美观、推理速度快都与“裁判理由”无关。

Q5. 法律大模型的“幻觉”可能表现为哪些形式?

多选题 · mid

  • A.引用根本不存在的法条← 正确答案
  • B.虚构从未发生过的判例← 正确答案
  • C.正确概括合同的核心条款
  • D.准确回答常识性法律问题

答案:AB。幻觉是模型“一本正经地胡说八道”,典型表现就是编造不存在的法条编号和虚拟判例。C和D是模型正确工作的表现,恰恰是幻觉的反面。识别幻觉的关键是抽查答案中的事实陈述能否在真实法条库里查到。

Q6. 领域微调损失函数 \(L_{total}=(1-\lambda)L_{base}+\lambda L_{domain}\) 中,\(\lambda\) 越大意味着什么?

单选题 · mid

  • A.模型更侧重通用语言能力
  • B.模型更侧重法律任务表现← 正确答案
  • C.模型参数量变得越大
  • D.模型推理速度变得更快

答案:B。\(\lambda\) 是通识与专精的平衡旋钮,它只影响训练时的损失权重,不改变参数量和推理速度。\(\lambda\) 增大时,梯度下降会优先优化法律任务损失,模型表现更“偏科”法律,但通用语言能力可能下降。

Q7. 以下哪些方法常用于缓解法律大模型的幻觉?

多选题 · mid

  • A.检索增强生成(RAG)← 正确答案
  • B.约束解码限制法条选择← 正确答案
  • C.引入人工复核机制← 正确答案
  • D.无限增大训练学习率

答案:ABC。RAG让模型先查知识库再作答,约束解码禁止模型输出库中不存在的法条编号,人工复核是最后一道终端防线——三者形成防幻觉的组合拳。无限增大学习率会导致训练不收敛,完全南辕北辙。

Q8. 为什么法律大模型不能完全取代法官?

单选题 · hard

  • A.模型运行速度太慢
  • B.裁判需要伦理与全案裁量← 正确答案
  • C.模型训练成本非常高
  • D.法官人数已经很充足

答案:B。法官的裁判包含对证据的当庭质证、对社会效果的考量、对法律原则的权衡等价值判断,这些无法被概率模型穷尽。速度和成本问题可以通过工程优化解决,但伦理判断和责任归属是AI难以跨越的鸿沟。

Q9. 继续预训练时,法律语料与通用语料的比例失衡会导致什么后果?

单选题 · hard

  • A.模型参数数量发生变化
  • B.模型在法律和通用任务间失衡← 正确答案
  • C.GPU显存容量自动翻倍
  • D.训练数据集变得无法读取

答案:B。语料配比决定垂直模型的“偏科程度”:法律语料占比过高,模型会满口术语但丧失常识与流畅表达;占比过低,法律能力又不足以胜任专业任务。配比只影响能力分布,不改变参数结构、硬件环境或数据格式。

Q10. 关于ChatLaw与LegalGPT的说法,正确的有哪些?

多选题 · extreme

  • A.都基于通用模型做领域适配← 正确答案
  • B.只能处理中文法律案件
  • C.输出结果仍需人工复核← 正确答案
  • D.能完全替代律师咨询服务

答案:AC。两者都以开源通用模型为基座做法律领域适配,这是垂直大模型的共性;无论模型多强,守门人仍是人类律师,输出必须复核。它们虽侧重中文法律,但仍具备多语言处理能力;且能力不足以保证绝对准确,远谈不上完全替代律师。