从 RAG 失败到 91% 准确率:Uber 法务红线 Agent 的四次架构演进
Uber 把法务合同审核做到 91% 准确率,四版迭代从 RAG 踩坑到反馈闭环再到 Agent,思路很值得抄。
Uber 法务团队为解决每年数千份合同的审核瓶颈,用四版迭代构建了红线建议 Agent。第 1 版朴素 RAG 因语义检索失准和语气失控而失败;第 2 版改为从真实谈判决策中学习,配合半衰期 365 天的指数衰减加权,无需微调即持续进化。第 3 版加入语气分层 LLM 调用,并把 prompt 所有权交给律师;第 4 版引入 Agentic 修改草拟和律师维护的规则库。最终合同审核时间下降 20% 以上,AI 决策准确率达 91%,Uber 法务部因此获得 2026 年 ALM Legalweek 年度最具创新力法务部奖。
从 RAG 失败到 91% 准确率:Uber 法务红线 Agent 的四次架构演进 Uber 每年谈判数千份合同,法务审核是交易、供应商入驻、产品上线的关键瓶颈。团队的核心洞察是:这份看似高度专业的工作中,藏着大量结构性模式;相似条款反复出现、红线修改可复用、法律立场长期稳定。这与代码审查、客服回复等已被 AI 成功渗透的领域同构,只是领域知识壁垒更高。 项目成功的外部标志是 Uber 法务部凭此获得 2026 年 ALM Legalweek “年度最具创新力法务部”奖项。内部分享的两个量化结果:平均合同审核时间下降 20%+,AI 生成决策准确率 91%。 三条产品哲学贯穿始终,后面所有技术选型都能回溯到它们: 1. 在律师工作的地方交付(Microsoft Word 插件,而非新工具),降低采纳成本; 2. 增强而非替代律师判断,AI 只给建议(accept / reject / modify + 理由注释),决策权在人; 3. 用真实反馈持续迭代,这直接催生了第二版的核心架构。 博客地址: uber.com/us/en/blog/bui… # 四次迭代:一次教科书级的“从 RAG 到 Agent”演进路径 第 1 版:朴素 RAG - 失败 把谈判 playbook 灌入 RAG 管道。三个典型失败模式: · 语义检索失准:用来做嵌入的“关键句”与实际需要检索的内容不一致(query 与 document 的粒度错位); · 语气失控:生成的注释要么过度防御、要么过度让步,法律文书的语气本身就是立场; · 无法泛化:没见过的谈判场景直接失效。 这一版的教训是:playbook 里的静态知识与律师实际谈判中的动态偏好之间存在巨大鸿沟。文档不等于决策数据。 第 2 版:反馈闭环 - 转折点 放弃“从文档学”,改为“从决策学”。系统捕获每一次真实谈判的完整轨迹:对方原始措辞 → 律师的红线 → 期望动作 → 律师写的注释 → 最终修改文本。这些粒度极细的对齐数据让系统能把“对方意图”直接映射到“本方律师偏好的应对语言”。 运行时流程:相似度检索 + 元数据过滤 → 取约 20 个候选 → LLM 二次精筛 → 生成决策与注释。 两个精巧的工程细节: · 指数衰减加权(半衰期 365 天):优先采信近一年的决策,天然对抗策略漂移(counterparty 立场和内部政策会演变); · 正负样本均衡的 few-shot:agree/disagree 案例成对呈现,让模型学到判别边界而非单边模仿。 关键结论:无需任何手动微调,检索 + 上下文学习即可持续进化。 第 3 版:语气分层 - 组织层面的突破 单独加一个 LLM 调用做语气调制。技术上有趣的是 "proactive and pessimistic" 一次性反思:预先假设生成的注释有质量问题,让模型一次性自检修正;效果等同于反思循环,但只花一次调用的 token 和延迟。 更大的突破在组织层面:三段式 prompt(目标、偏好风格、开场白示例)的所有权直接交给了律师。Uber 的结论很客观:塑造输出格式的 prompt 应由领域专家管理,而不是工程师替律师定义“什么叫专业语气”。 第 4 版:Agentic 修改草拟 对 MODIFY 决策引入 agentic workflow:参考历史反馈和规则库起草反提案文本,杜绝幻觉条款。至此,系统从“建议者”升级为“起草者”。 规则库(Rules Database):确定性兜底 由律师维护:选中常被修改的模板条款,附上规则(Uber 立场、可退让的底线、示例回复)。检索到的修改句做语义匹配,高置信度命中直接注入上下文,并有最终 LLM 校验步骤对齐立场。 它的价值在于:第一天就能给出高置信度结果(不像反馈库需要冷启动积累),并保证跨业务线立场一致。 Uber Engineering @UberEng x.com/i/article/2108… 🔗 View Quoted Tweet 💬 1 🔄 3 ❤️ 6 👀 433 📊 3 ⚡