灵研(LingResearch) | 2026-04-14 | 基于llm.py验证逻辑 + 法律伦理规范 + 数据安全法规
验证函数架构:
├── 第一层:输出长度检查(<50字符 → blocked)
├── 第二层:虚假案号检测(3个正则模式 → blocked)
├── 第三层:法律条文书名号检查(缺《》→ warning)
├── 第四层:当事人信息检查(诉讼类文书 → blocked)
├── 第五层:诉讼请求检查(民事起诉状 → blocked)
└── 第六层:事实与理由检查(起诉状/答辩状/反诉状 → warning)
if len(text.strip()) < 50:
blocked.append("output_too_short")
法律原理:法律文书具有最低形式要求。根据《民事诉讼法》第123条,起诉状必须包含当事人信息、诉讼请求、事实与理由等必备内容,这些内容不可能少于50个字符。
覆盖文书:全部18种
评估:合理但阈值偏低。一份合格的民事起诉状至少500字以上,50字阈值过于宽松。
FAKE_CASE_NUMBER_PATTERNS = [
re.compile(r"\(\d{4}\)[^年]*\d+初\d+号"), # 一审
re.compile(r"\(\d{4}\)[^年]*\d+终\d+号"), # 二审
re.compile(r"\(\d{4}\)[^年]*\d+行\d+号"), # 行政
]
法律原理:案号是法院对案件的唯一标识,格式为(年份)法院代字+案件类型代字+序号(法〔2015〕137号)。LLM生成的案号格式可能正确但实际不存在,构成虚假法律信息。
漏洞: 1. ❌ 不匹配阿拉伯数字案号 — 如"(2024)京0108民初12345号"中的"0108" 2. ❌ 不覆盖刑事案号 — 缺少"刑初"、"刑终"模式 3. ❌ 不覆盖执行案号 — 缺少"执"字模式 4. ❌ 不覆盖保全案号 — 缺少"保"字模式 5. ❌ 无法验证案号真实性 — 只检查格式,不验证案号是否真实存在
law_article_pattern = re.compile(r"(?:第|第一|第二|第三)([\u4e00\u4e8c\u4e09\u56db\u4e94\u516d\u4e03\u516b\u4e5d\u5341\u767e]+)条")
law_refs = law_article_pattern.findall(text)
if law_refs and not re.search(r"[《》]", text):
warnings.append("law_articles_referenced_without_law_name")
法律原理:法律条文引用必须指明法律名称,避免歧义。根据法律文书写作规范,引用法律条文应写明"《XX法》第X条"。
漏洞: 1. ❌ 不检测法条是否真实存在 2. ❌ 不检测法条内容是否正确(张冠李戴) 3. ❌ 不检测法律是否现行有效(可能引用已废止法律) 4. ❌ 正则只匹配中文数字条号 — "第100条"匹配不到 5. ❌ 不检测是否应引用民法典替代已废止法律
if doc_type in ("civil_complaint", "defense_statement", "appeal"):
has_party = bool(re.search(r"(?:原告|被告|上诉人|被上诉人|答辩人)", text))
if not has_party:
blocked.append("missing_party_info")
法律原理:法律文书必须明确列明当事人身份(民诉法§123)。
漏洞: 1. ❌ 只检查关键词存在,不验证信息完整性(缺身份证号、地址等) 2. ❌ 反诉状未覆盖 — 反诉状应有"反诉原告/反诉被告" 3. ❌ 再审申请书未覆盖 — 应有"申请人/被申请人" 4. ❌ 不检查同一当事人在全文中名称是否一致
if doc_type == "civil_complaint":
has_claim = bool(re.search(r"(?:诉讼请求|请求判决)", text))
if not has_claim:
blocked.append("missing_claim")
法律原理:民事起诉状必须有明确的诉讼请求(民诉法§123)。
漏洞: 1. ❌ 只检查关键词,不验证请求内容是否具体 2. ❌ 不检查金额是否有计算依据 3. ❌ 不检查请求与事实理由是否逻辑一致 4. ❌ 其他需要诉讼请求的文书未覆盖(如再审请求、执行请求)
if doc_type in ("civil_complaint", "defense_statement", "counterclaim"):
has_reason = bool(re.search(r"(?:事实与理由|事实理由)", text))
if not has_reason:
warnings.append("missing_fact_and_reason_section")
法律原理:法律文书需包含事实叙述和法律分析。
漏洞: 1. ❌ 再审申请书未覆盖 — 应有申请再审的事实和理由 2. ❌ 上诉状未覆盖 — 应有上诉理由 3. ❌ 不检查事实与理由的内容质量
| 要素 | 详情 |
|---|---|
| 案件 | Mata v. Avianca Airlines,纽约南区联邦地区法院 |
| 涉事律师 | Steven Schwartz, Peter LoDuca |
| 行为 | 使用ChatGPT生成法律简报,引用6个虚假案例 |
| 发现过程 | 对方律师和法官发现引用的判例全部不存在 |
| 处罚 | 各$5,000制裁罚款 + 职业声誉严重损害 |
| 行业影响 | ABA发布AI使用指引;多法院要求律师声明AI使用情况 |
| 幻觉类型 | 具体表现 | 严重程度 | 当前LingLaw是否检查 |
|---|---|---|---|
| 虚构法律条文 | 编造不存在的法律条款 | 🔴极高 | ❌ |
| 虚构案例引用 | 编造案号、当事人、裁判要点 | 🔴极高 | 部分(格式检查) |
| 条文张冠李戴 | 将A法条文归入B法 | 🔴高 | ❌ |
| 引用过时法律 | 引用已废止的合同法、民法通则等 | 🟠高 | ❌ |
| 虚假司法解释 | 编造或错误引用司法解释 | 🟠高 | ❌ |
| 利率计算错误 | 超过4倍LPR或计算方式错误 | 🟠高 | ❌ |
| 时效判断错误 | 误判诉讼时效是否经过 | 🟠高 | ❌ |
| 管辖判断错误 | 建议向无管辖权法院起诉 | 🟡中 | ❌ |
| 后果 | 法律依据 | 处罚 |
|---|---|---|
| 司法行政处罚 | 律师法§49 | 警告+1万元以下罚款;停业3-6个月 |
| 律协纪律处分 | 律师执业规范 | 通报批评/公开谴责/中止会员权利 |
| 刑事责任(极端) | 刑法§306 | 伪造证据罪:3年以下;情节严重3-7年 |
| 民事赔偿 | 民法典 | 律所对委托人的赔偿责任 |
| 职业声誉 | — | 行业内严重失信 |
| 伦理原则 | 法律依据 | AI使用中的适用 |
|---|---|---|
| 诚实守信 | 律师执业管理办法§40 | 不得向法院隐瞒文书由AI生成;不得提交未经核实的AI输出 |
| 勤勉尽责 | 律师职业道德规范§5 | 使用AI不减轻审查义务;必须人工核实所有法律依据 |
| 保密义务 | 律师法§38 | 不得将案件材料上传未经安全评估的第三方AI |
| 独立判断 | 律师法 | AI仅辅助工具,最终判断必须由律师独立作出 |
| 专业胜任 | 律师职业道德规范 | 律师应了解所使用AI工具的局限性 |
律师法§38:律师应保守执业中知悉的国家秘密、商业秘密和当事人隐私。
| 冲突场景 | 风险等级 | 合规要求 |
|---|---|---|
| 案件材料上传公有云AI | 🔴高 | 违反保密义务 |
| 使用未经安全评估的AI API | 🔴高 | 数据可能被留存/训练 |
| 使用境外AI服务 | 🔴高 | 触发数据出境安全评估 |
| 本地部署AI处理案件数据 | 🟢低 | 数据不出本地,合规 |
| 脱敏后上传 | 🟡中 | 需确保脱敏充分 |
目前中国尚无统一的AI使用披露要求,但建议: 1. 向委托人告知AI工具的使用情况 2. AI生成的关键内容应标注并声明已人工核实 3. 保留AI交互记录以备审查 4. 不直接将AI输出作为专业意见提交法院
| 法律 | 施行日期 | 与法律AI的核心关联 |
|---|---|---|
| 个人信息保护法(PIPL) | 2021-11-01 | 案件数据中当事人个人信息的处理合规 |
| 数据安全法 | 2021-09-01 | 案件数据分类分级 + 出境管理 |
| 生成式AI服务管理暂行办法 | 2023-08-15 | AI服务提供和使用规范 |
| 信息类型 | PIPL分类 | 处理要求 |
|---|---|---|
| 当事人姓名、住址 | 一般个人信息 | 需同意 |
| 身份证号码 | 敏感个人信息 | 需单独同意 |
| 银行账号 | 敏感个人信息 | 需单独同意 |
| 医疗记录(人身损害案件) | 敏感个人信息 | 需单独同意 |
| 未成年人信息 | 特殊保护 | 需监护人同意 |
| 通信记录 | 一般/敏感 | 视内容而定 |
| 合规维度 | 云端SaaS | LingLaw本地部署 |
|---|---|---|
| 数据存储 | 第三方服务器 | 本地硬盘 |
| 数据访问 | 供应商技术人员可能访问 | 仅授权律师 |
| 数据用途 | 可能用于模型训练 | 仅限案件办理 |
| 数据留存 | 可能被长期留存 | 律师自主控制 |
| 跨境传输 | 可能自动出境 | 无出境风险 |
| PIPL合规 | 需委托协议+告知+同意 | 律所内部处理,风险最低 |
| 审计追踪 | 依赖供应商 | 完全可控 |
verify_legal_output(output, context)
│
├── 第一层:格式验证(快速,确定性)— 当前已实现
│ ├── 长度检查(✅已有)
│ ├── 案号格式检查(✅已有 + 需增强:阿拉伯数字、刑事/执行/保全类型)
│ ├── 书名号检查(✅已有)
│ ├── 当事人信息完整性(✅已有 + 需扩展文书覆盖)
│ ├── 诉讼请求存在性(✅已有)
│ ├── "事实与理由"存在性(✅已有 + 需扩展文书覆盖)
│ └── 强制性条款完整性(❌新增)
│
├── 第二层:法律知识验证(需知识库)— 全部缺失
│ ├── 法律条文真实性(❌新增:需法律条文数据库)
│ ├── 废止法律替换提示(❌新增:需新旧法对照表)
│ ├── 利率上限验证(❌新增:需LPR数据)
│ └── 案件类型代字合法性(❌新增:需案号规则库)
│
├── 第三层:逻辑一致性验证(需NLU)— 全部缺失
│ ├── 诉讼请求与事实理由一致性(❌新增)
│ ├── 证据清单与诉讼请求对应关系(❌新增)
│ └── 管辖权合法性(❌新增:需管辖规则引擎)
│
└── 第四层:时效与数值验证(需计算)— 全部缺失
├── 诉讼时效检查(❌新增)
├── 金额计算合理性(❌新增)
└── 期限合规性(❌新增)
| 优先级 | 检查项 | 风险等级 | 实现难度 | 建议处置 |
|---|---|---|---|---|
| P0 | 法律条文真实性 | 🔴致命 | 高(需知识库) | BLOCKED |
| P0 | 利率上限(4倍LPR) | 🔴致命 | 中 | BLOCKED |
| P0 | 案号格式增强 | 🔴致命 | 低 | BLOCKED |
| P1 | 诉讼时效验证 | 🟠严重 | 中 | WARNING |
| P1 | 诉请与事实一致性 | 🟠严重 | 高 | WARNING |
| P1 | 管辖权验证 | 🟠严重 | 中 | WARNING |
| P1 | 强制性条款完整性 | 🟠严重 | 中 | BLOCKED |
| P2 | 当事人名称格式 | 🟡较高 | 低 | WARNING |
| P2 | 证据清单完整性 | 🟡较高 | 中 | WARNING |
| P3 | 废止法律替换提示 | 🟡较高 | 低 | WARNING |
def validate_interest_rate(output: str) -> CheckResult:
"""
验证利息/利率是否超过4倍LPR上限
法律依据:民间借贷司法解释§25
"""
# 提取利率表述:
# "月息3%" → 年利率36% → 超标
# "年利率12%" → 未超标
# "LPR×4" → 需计算
current_lpr = get_current_lpr() # 约3.45%
ceiling = current_lpr * 4 # 约13.8%
rates = extract_interest_rates(output)
violations = []
for rate in rates:
if rate.annual > ceiling:
violations.append(f"利率{rate.raw}超过法定上限{ceiling:.1f}%")
# 注意:4倍LPR仅适用于民间借贷
# 金融机构借款不受此限
return CheckResult(
passed=len(violations) == 0,
blocked=violations # 超过上限应阻断
)
def validate_law_article_existence(output: str, law_db) -> CheckResult:
"""
验证引用的法律条文是否真实存在
"""
# 新旧法对照表
DEPRECATED_LAW_MAP = {
"合同法": "民法典合同编",
"物权法": "民法典物权编",
"侵权责任法": "民法典侵权责任编",
"婚姻法": "民法典婚姻家庭编",
"继承法": "民法典继承编",
"民法通则": "民法典总则编",
"民法总则": "民法典总则编",
}
refs = extract_law_references(output) # 《XX法》第X条
warnings = []
blocked = []
for ref in refs:
law_name = ref.law_name
article_num = ref.article_num
# 检查1:是否引用已废止法律
if law_name in DEPRECATED_LAW_MAP:
warnings.append(
f"引用了已废止的《{law_name}》,"
f"应替换为《{DEPRECATED_LAW_MAP[law_name]}》"
)
# 检查2:法律是否存在
if not law_db.law_exists(law_name):
blocked.append(f"《{law_name}》不存在或未收录")
# 检查3:条款是否存在
elif not law_db.article_exists(law_name, article_num):
blocked.append(
f"《{law_name}》第{article_num}条不存在"
)
return CheckResult(
passed=len(blocked) == 0,
warnings=warnings,
blocked=blocked
)
| 已废止法律 | 废止日期 | 替代法律 | 对应编章 |
|---|---|---|---|
| 合同法 | 2021-01-01 | 民法典 | 第三编(§469-§688) |
| 物权法 | 2021-01-01 | 民法典 | 第二编(§205-§462) |
| 侵权责任法 | 2021-01-01 | 民法典 | 第七编(§1164-§1258) |
| 婚姻法 | 2021-01-01 | 民法典 | 第五编(§1040-§1118) |
| 继承法 | 2021-01-01 | 民法典 | 第六编(§1119-§1163) |
| 民法通则 | 2021-01-01 | 民法典 | 第一编(§1-§204) |
| 民法总则 | 2021-01-01 | 民法典 | 第一编(§1-§204) |
| 收养法 | 2021-01-01 | 民法典 | 第五编第五章 |
| 担保法 | 2021-01-01 | 民法典 | 第二编/第三编担保合同 |
法律AI安全 = 技术安全 + 法律合规 + 输出质量
│ │ │ │
▼ ▼ ▼ ▼
数据加密 PIPL合规 多层验证
访问控制 数据安全法 人工复核
审计追踪 律师保密义务 知识库更新
本地部署 AI管理办法 置信度评分
| 维度 | 评分 | 说明 |
|---|---|---|
| 数据安全 | ⭐⭐⭐⭐ | Docker本地部署,数据不出本机 |
| PIPL合规 | ⭐⭐⭐⭐ | 本地处理无需同意/委托协议 |
| 输出验证 | ⭐⭐ | 仅6条规则,覆盖面窄 |
| 法律准确性 | ⭐⭐ | 无法律知识库,完全依赖GLM参数知识 |
| 审计追踪 | ⭐ | 无日志记录机制 |
| 用户提示 | ⭐ | 未告知AI生成内容的局限性 |