一直怕大模型幻觉,发现针对性harness约束能大大消除
我让AI写长文然后人工审核发现大量胡编乱造。如果人工一个个消除实在太累了这就不是LLM自动化办公的路子了尝试了 harness (engineering)的实操路子 试用发现大模型正在把长文中我人工审核发现的幻觉问题一点点列出来原来它自己可以发现这些——虽然仍然不完整但终于明白了啥叫 Harness Engineering以及如何实施。但是对于长上下文、复杂案例想通过这种方式彻底消除hallucination这种当前transfomer算法LLM的固有特性似乎是难度极高、近乎不可能的。所以人工审核仍然是必不可少环节。正确实施的harness engineering手段看起来主要优势在于可以大大减少人工审核的工作强度。importosimportreimportjsonimportsysclassLegalVerifier:def__init__(self,evidence_path,db_path,draft_path):self.evidence_pathevidence_path self.db_pathdb_path self.draft_pathdraft_path# 加载数据withopen(evidence_path,r,encodingutf-8)asf:self.evidence_textf.read()withopen(db_path,r,encodingutf-8)asf:self.law_dbjson.load(f)self.draft_textifos.path.exists(draft_path):withopen(draft_path,r,encodingutf-8)asf:self.draft_textf.read()defverify_step_1_fact_mapping(self):第一步校验事实锚定检查。检查草稿中是否有无中生有的数字/日期errors[]# 抽取草稿中所有的金额和日期最容易产生幻觉的地方money_exprsre.findall(r(\d万[元||]?|\d分|\d元),self.draft_text)date_exprsre.findall(r(\d{4}年\d月\d日),self.draft_text)formoneyinmoney_exprs:ifmoneynotinself.evidence_text:errors.append(f【事实幻觉】文书出现了金额 {money}但该金额未在原始证据材料中记载)fordateindate_exprs:ifdatenotinself.evidence_text:errors.append(f【事实幻觉】文书出现了日期 {date}但该日期未在原始证据材料中记载)returnerrorsdefverify_step_2_mcp_law_check(self):第二步校验模拟 MCP 确定性法条与类案校验errors[]# 匹配文书中的法条格式例如《民法典》第五百六十三条laws_citedre.findall(r《([^》])》第([百十万零一二三四五六七八九\d])[条],self.draft_text)# 匹配文书中的案例号例如(2025)最高法民终123号cases_citedre.findall(r?\(\d{4}\)[^号]号?,self.draft_text)valid_lawsself.law_db.get(laws,{})valid_casesself.law_db.get(cases,[])forlaw,clauseinlaws_cited:iflawnotinvalid_lawsorclausenotinvalid_laws[law]:errors.append(f【法条幻觉】文书引用了未经校验的法条《{law}》第{clause}条请联网或检索确定库。)forcaseincases_cited:clean_casecase.strip(())ifclean_casenotinvalid_cases:errors.append(f【类案幻觉】文书引用了虚构的案例号{case}该案例不存在于受信类案库中。)returnerrorsdefverify_step_3_critic_audit(self):第三步校验反向合规审计。检查是否强制标注了证据来源标记 (见附件/见材料)errors[]linesself.draft_text.split(\n)fori,lineinenumerate(lines):if(原告inlineor被告inline)and(证明inlineor陈述inlineor约定inline):if见notinlineand附件notinlineand证据notinline:errors.append(f【中立与合规审计】第{i1}行事实陈述缺乏物理证据指针违反封闭宇宙原则内容: \{line.strip()}\)returnerrorsdefrun_all_checks(self):print( ⚖️ 开始执行 Trae 法律智能体防御性三步校验 )ifnotself.draft_text:print([AUDIT_FAILED] 错误目标文书草稿为空或不存在。)sys.exit(1)all_errors[]all_errors.extend(self.verify_step_1_fact_mapping())all_errors.extend(self.verify_step_2_mcp_law_check())all_errors.extend(self.verify_step_3_critic_audit())ifall_errors:print(\n[AUDIT_FAILED] 审计未通过发现以下幻觉或违规行为)forerrinall_errors:print(err)print(\n请 Trae Agent 根据上述错误报告重新读取源材料修改文书并再次运行此脚本。)sys.exit(1)else:print(\n[AUDIT_PASSED] 恭喜文书 100% 契合已知事实法条/案例全部真实有效未发现任何幻觉偏离。)sys.exit(0)if__name____main__:verifierLegalVerifier(evidence_pathdata/evidence.txt,db_pathdata/law_database.json,draft_pathoutput/judgment_draft.md)verifier.run_all_checks()