跳到主要内容

Lawsight 多智能体数据飞轮系统技术解决方案 V1.0

VincentWei    2026年11月11日 17:12:30

Lawsight 多智能体数据飞轮系统技术解决方案 V1.0

LAWSIGHT · DATA FLYWHEEL · AGENTIC WORKFLOW

Lawsight AI Agentic Workflow 多智能体数据飞轮系统技术解决方案
——基于知识图谱数据沉淀与 RSI 自我进化双飞轮的详细设计与工程实现

  • 文档类型:技术解决方案(白皮书) 版本:V1.0 日期:2026 年 11 月
  • 适用平台:Lawsight 信任中心八仓库(Step1-4 全流程 / FTO 多智能体 / WorkDsh 工作台 / Deep-Analysis 深度分析 / Design-Patent 外观比对 / CIAS 版权智审 / Legal-Cases 类案 RAG / Security-Plane 中央安全平面)
  • 技术立场:不训练模型权重 · 知识沉淀于图谱 · 能力增长来自评估 · 一切变更可审计可回滚
  • 上游文档:《基于知识图谱数据沉淀的 AI Agent 数据飞轮技术解决方案》《Lawsight 安全技术解决方案 V2.0》《法律案例库智能体 RAG 技术解决方案》

内部技术资料 · 仅供架构评审与工程实施参考


执行摘要

本方案面向 Lawsight 知识产权 AI 智能体平台的全部八仓库与七条业务线(发明专利侵权分析、发明专利非侵权分析、外观设计侵权分析、外观设计非侵权分析、图片版权侵权分析、图片版权费用争议分析、FTO 自由实施分析),给出一套不依赖任何模型训练(不做 SFT/DPO、不更新 LLM 权重)的多智能体数据飞轮系统的完整技术解决方案。方案在附件白皮书《基于知识图谱数据沉淀的 AI Agent 数据飞轮技术解决方案》的 GraphRAG 知识飞轮基础上,融合平台已建成的 WorkDsh RSI 自我进化子系统、七仓库轨迹/事件/计量基础设施与中央安全平面治理能力,形成知识飞轮 × 策略飞轮双轮啮合的平台级闭环:每一次专家交互既沉淀为知识图谱中的确定性事实,又转化为智能体策略(提示词、上下文、工具、工作流参数、检索阈值、模型路由)的可度量改进,使各智能体系统的效果随使用持续复利增长,性能指标节节攀升。
方案的核心设计包括:(1)统一事件总线——以零依赖 SDK 把八仓库的运行轨迹、门禁裁决、逐行审阅、改判与评分统一为 FlywheelEvent 契约,经 Redis Stream 与信标双通道汇入飞轮平面;(2)统一知识图谱——在白皮书 15 类领域节点、13 类结论关系之上扩展 7 类能力节点(Agent、PromptVersion、Strategy、EvalRun、TestCase、ErrorPattern、SearchRecipe),使图谱同时承载领域知识与智能体能力知识,L0—L4 置信度分级与冲突仲裁保障知识质量;(3)飞轮核心引擎——反馈捕获→LLM 封闭世界结构化提取→安全校验→GraphPatch 事务写图→索引同步与统计反哺五阶段管线;(4)GraphRAG 检索推理引擎——图遍历优先、向量为辅的三路混合召回,已知事实/参考示例/约束规则三段式 Prompt 动态组装,输出侧逻辑锚校验与幻觉阻断;(5)评估基准体系——四组飞轮指标、逐智能体 KPI 矩阵、四类测试集(黄金修正集由真实专家修正自动构造)、离线回归→影子评估→A/B 灰度→全量的发布门禁,任何劣化超阈值的变更被自动阻断;(6)策略优化闭环——将 WorkDsh 已验证的 RSI 七优化器(提示遗传变异、元上下文工程、工具策略、记忆治理、工作流参数探索、代码插件、检索调参)联邦化为平台级策略注册表,经沙盒回归、人工批准、A/B 结算与自动回滚后热分发至各仓库;(7)安全治理一体化——复用中央安全平面的认证、审计哈希链、证据登记、检查点签名与 LLM 网关零保留路由,飞轮全部写入可溯源、可回滚、按租户隔离。
实施路线分三阶段:冷启动期(第 1—3 月)完成图谱 Schema 落地、存量数据资产入图(427 件类案、1549 条向量、87 件外观案件、72 件版权案件、18 件全流程事务)与两条业务线试点,目标历史映射命中率 ≥30%、专家修正率 ≤50%;成长期(第 4—12 月)七线全量接入、置信度与校验器全开、Prompt 规则进化与 RSI 联邦运转,目标命中率 ≥70%、修正率 ≤25%、L2 及以上边占比 ≥40%;成熟期(第 13 月起)行业级知识资产沉淀与模型底座平滑换代,目标命中率 ≥85%、校验器一次通过率 ≥90%、单案件分析人时下降一半以上。全部数值为目标示意值,用于对齐演进节奏,具体基线在试点中校准。

第一章 背景与现状盘点

1.1 业务背景与智能化瓶颈

专利与版权分析是典型的「高知识密度、强逻辑约束、重先例依据」专业服务。一份合格的权利要求对照表(Claim Chart)必须同时满足:权利要求拆解准确(《专利法》第六十四条第一款,保护范围以权利要求内容为准)、特征映射有据(全面覆盖原则与等同原则,法释〔2009〕21 号第七条)、结论可解释(每行结论回溯到说明书、公知常识或生效裁判的具体论述)。将此类任务直接交给通用大语言模型存在四类结构性瓶颈:幻觉不可接受(编造文献、虚构判例要旨)、领域知识不在参数之中(术语个案解释、审查习惯、费率惯例高度碎片化且持续更新)、经验无法沉淀(资深律师的每次修正随案件结束被封存)、多客户数据隔离(保密义务排除集中训练路线)。附件白皮书已系统论证微调路线在数据合规、更新周期、增量成本、可解释性与灾难性遗忘五个维度的局限,本方案继承其技术立场:把经验沉淀从参数空间迁移到图谱空间,模型权重保持出厂状态,业务能力由外置知识图谱的密度与质量决定。

1.2 平台现状:八仓库能力盘点

Lawsight 平台已完成八仓库的建设与安全整改(见 INTEGRATION.md),具备统一的安全 SDK、存储 SDK 与基础设施栈。表 1-1 盘点各仓库的智能体形态与已具备的飞轮要素——这些要素是本方案的集成基础,方案的原则是联邦而非重建:不推翻任何已验证的引擎,只补齐「采集—沉淀—评估—优化」的平台级闭环。
表 1-1 八仓库能力与飞轮要素盘点

仓库(端口) 智能体形态 已具备的飞轮要素 主要缺口
Step1-4-Agentic-Workflow(8300) 四步全流程:A1—A8 分诊解析、QueryPlanner 六类查询并进行检索、九阶段证据映射,Step4 结论装配;九道门禁(C1—C4、CP-07—11) 逐行审阅三态(接受/改写/拒绝)、证据否决、知识注入、ALR 假设台账、哈希链审计、TokenMeter、自研可观测层(Trace/Span)、mem0 项目记忆 审阅信号未结构化沉淀;无跨事务知识复用;检索为演示级词项打分
lawsight-fto(8005) 七阶段多智能体流水线(特征解析→检索→法律过滤→权利要求比对→风险评估→报告→QA)+ 21 工具对话协调器;发明/外观双模式 三人工关卡(特征确认/律师复核/终审签发)、override_risk 改判回流、检查点快照、harness 轨迹可回放、token 双写计量、规则×LLM 双层兜底 关卡修正未入图;检索式与风险结论未跨任务复用;无回归基准
lawsight-workdsh(8002) WorkBuddy 式工作台:会话引擎 + Agent Harness(工具注册表/生命周期钩子/记忆/压缩)+ 82 法律技能 + MCP 外部服务 完整 RSI 自我进化子系统(Perform→Evaluate→Modify→Redeploy,七优化器、A/B、沙盒、治理、13 张 rsi_* 表);记忆四层显式反馈;Redis Stream 计量 RSI 仅覆盖本仓库;知识提取未图谱化;优化策略不能分发到其他仓库
lawsight-deep-analysis(8001) Patent Analysis Agents 多智能体深度分析,会话式交互,SQLAlchemy async 会话与任务留痕、报告生成 无反馈采集、无评估、无知识沉淀
lawsight-design-patent(8123) 外观比对流水线:特征矩阵提取→评分→规避方案→版本管理;以图搜图 t_feature_matrix/t_score/t_avoid_scheme/t_design_version 结构化数据、8 项 benchmark、审计表 人工改判未回流;特征权重静态;benchmark 未接入门禁
copyright-detective/cias(8000) 版权智审:图像相似度工具 + 判定规则 + 用户记忆 审计哈希链(465 条)、cias_user_memory、72 件案件结构化数据 相似阈值静态;判定修正未沉淀为基线
lawsight-legal-cases(8111) 类案 Agentic RAG:采集→分块→嵌入→四路召回→引用核验→生成;兼 MCP Server 427 案/1549 向量、token_metrics 账本、引用校验器、设计文档已定义三层评估指标与发布门禁 评估体系未工程化落地;检索参数无自动调优;图谱子图未建
lawsight-security-plane(8200) 中央安全平面:认证/审计链/证据登记/工具注册表/LLM 网关/服务运营中心/SSO/安全模式总控 审计哈希链、证据登记、检查点 HMAC、信标事件接收(/api/beacon/events)、LLM 网关零保留路由、319 接口巡检 无知识沉淀与评估能力;信标仅安全事件

1.3 已有数据资产与基础设施

存储层工业化改造已完成:MySQL 8.4(八业务库、81 张表、约 9400 行真实数据)、MiniIO(对象存储,约 8000 对象)、Qdrant v1.12(case_chunks 1549 条真实向量、wf_project_memory 项目记忆)、Redis 7(wf:llm_tokens 令牌流水,九字段契约:ts/user_id/matter_id/stage/name/model/tokens_in/tokens_out/total)。共享 SDK 两套:lawsight_security(HS256 验签、G0 认证中间件、netguard、G1 防火墙、mcpguard、事件信标)与 lawsight_storage(database/objects/vector/migrate/health,MySQL 与 sqlite、MiniIO 与本地磁盘、Qdrant 与 npz 同 API 可切换)。基础设施由 deploy/infra/docker-compose.yml 编排,数据绑定挂载本机目录。这些资产意味着飞轮系统不需要新建存储栈的主体,只需新增图数据库(Neo4j)与飞轮平面服务,并复用既有 SDK 模式扩展采集与检索能力。

1.4 缺口分析

表 1-2 平台级飞轮缺口与对策映射

编号 缺口 后果 本方案对策(章节)
G1 无统一反馈契约:各仓库修正/审阅/改判信号形态各异且多数未采集 专家经验随任务结束丢失,飞轮无燃料 统一事件总线 + 八仓库信号映射(第四章)
G2 无知识图谱:经验散落在 81 张关系表与文件记忆中,无法跨案件推理复用 同类案件从零开始,命中率无法增长 统一 KG Schema + 存量资产入图(第五、十六章)
G3 无置信度治理:机器输出与专家确认混同,错误知识无分级隔离 幻觉与污染随检索放大 L0—L4 置信度模型 + 冲突仲裁(第六章)
G4 检索与推理未图谱化:各引擎提示词静态组装,不确定性事实注入 模型概率推理不受专家经验约束 GraphRAG 引擎 + 逻辑校验器(第八章)
G5 评估未工程化:legal-cases 设计文档的指标体系未落地,其余仓库无基线 「越用越好」无法证明,劣化无法拦截 四组指标 + 黄金修正集 + 发布门禁(第九章)
G6 RSI 孤岛:workdsh 自我进化仅作用于本仓库热配置 七仓库各自硬编码提示词与阈值,优化不复利 策略注册表联邦 + 热配置分发(第十章)
G7 无跨仓库共享记忆:mem0、workdsh 记忆、cias_user_memory 互不相通 组织级知识资产无法形成 KG 单一事实源 + 记忆联邦(第十二章)
G8 飞轮治理缺位:知识写入无审计、无回滚、无租户隔离强制 法律场景不可接受的知识事故风险 安全平面一体化 + 版本链回滚(第六、十三章)

1.5 方案边界与术语

适用边界:覆盖分析类业务的知识沉淀与推理增强,以及智能体策略的持续优化;不覆盖法律文书全自动出稿(保留人工审查)、专利申请文件撰写与诉讼程序管理;不涉及需特殊资质的敏感数据源。三条系统不变量继承自白皮书:(1)模型权重全生命周期不变,能力提升仅来自图谱与 Prompt/策略层变化;(2)进入结论性上下文的知识必须携来源与置信度,无来源的模型自由发挥限制在草稿区;(3)自动提取结果必须通过校验与必要的人工复核,人工确认优先级永远高于机器生成。核心术语:数据飞轮(用户反馈驱动能力持续增长的正反馈闭环)、GraphRAG(以知识图谱为检索与推理基础的 RAG 范式)、GraphPatch(图谱增量补丁,一组原子化增删改操作)、conf_level(L0—L4 置信度层级)、RSI(Recursive Self-Improvement,递归自我改进)、FlywheelEvent(本方案定义的统一事件契约)、策略(Strategy,可版本化、可 A/B、可回滚的智能体行为配置单元)。

第二章 总体设计理念:双飞轮模型

2.1 范式选择:知识外置而非权重内化

传统「数据飞轮」叙事往往指向模型训练闭环:收集数据→微调→部署→再收集。本方案明确拒绝纯这条路径,原因有三。其一,法律与知识产权分析对可溯源性有刚性要求——每一条结论必须能回溯到具体法条、判例或证据原文,而微调把知识压进数十亿参数后无法逐条溯源,与平台「引用准确率 100%」的第一指标根本冲突。其二,八仓库共用 glm-5.3-flashx 文本模型与 glm-4.5v 视觉模型,经智谱开放平台零保留路由(glm-cloud-zr)调用,平台不持有也不应持有权重训练能力与合规授权。其三,法律领域知识更新频繁(法条修订、新判例、新审查指南),训练周期以周月计,远慢于知识生效所需的「小时级」。
因此本方案采用知识外置(Knowledge Externalization)范式:LLM 始终是不变的推理引擎与信息抽取器,全部可增长的能力沉淀在模型之外的两个载体——知识图谱(KG)承载「事实与结论」,策略热配置(Hot Config)承载「方法与偏好」。模型权重全生命周期不变,系统能力的提升完全来自这两个外部载体的演化。这正是附件白皮书的核心命题,也是 workdsh 仓库 RSI 子系统已验证的工程路线(RSI 的七类优化器全部作用于 Prompt/上下文/工具/工作流参数,无一触碰权重)。

2.2 知识飞轮:把专家修正变成可复用的图资产

知识飞轮(Knowledge Flywheel)回答「系统如何越用越懂法律」。其闭环为:运行产生轨迹 → 人工修正/采纳产生反馈 → 反馈抽取为 GraphPatch → 经置信度治理写入 KG → GraphRAG 在下次任务中召回这些知识 → 命中率上升、修正率下降。每一次律师把「not_covered」改判为「equivalent」、每一次否决一条证据、每一次签发一份意见书,都不再是随任务结束而蒸发的瞬时动作,而是被结构化为带来源、带置信度、带版本的图节点与关系,永久改变系统对同类案件的理解。
知识飞轮的增长引擎是置信度累积:同一结论被多个独立案件、多位专家反复验证,其置信度从 L0 草稿(0.30)逐级攀升至 L4 先例锚定(1.00);只有 L3 及以上的知识才允许进入结论性上下文。这保证了「越用越好」的同时「越用越稳」——低置信的猜测永远不能冒充确定的先例。白皮书给出的量化目标(历史映射命中率 30%→70%→85%、专家修正率 ≤50%→≤25%、L2+ 边占比 ≥40%)正是知识飞轮转速的度量。

2.3 策略飞轮:把运行轨迹变成可进化的方法

策略飞轮(Strategy Flywheel)回答「系统如何越用越会干活」。它直接联邦 workdsh 已落地的 RSI(Recursive Self-Improvement)子系统,闭环为:Perform 采集轨迹 → Evaluate 识别改进机会 → Modify 生成优化策略 → 沙盒回归验证 → A/B 分流结算 → Redeploy 热配置生效 → 监控熔断回滚。其优化对象是七类「方法旋钮」:基础系统提示词(遗传变异+A/B)、上下文工程(历史轮数/技能正文/资料注入/压缩预算)、工具策略(开关/超时)、记忆策略(遗忘/迁移)、工作流参数(轮数上限/评审开关/进化周期,ε-greedy 探索)、代码插件(评审融合管线)。元学习按历史胜率调度优化器,可信度公式为 (wins+1)/(total+2)×平均收益。
策略飞轮的关键纪律是安全收敛:默认自主级别 L2(人工批准前不写入任何运行时配置)、AST 白名单+子进程隔离+8 秒硬超时的沙盒、champion 恒定不被 challenger 覆盖的确定性哈希 A/B、错误率超 0.3 自动回滚最近策略并熔断进化。这使「自我进化」不是失控的自我修改,而是受治理的持续实验。

2.4 双飞轮啮合:知识喂养策略,策略反哺知识

两个飞轮不是并列的孤岛,而是通过共享的「能力图谱」与「评估信号」相互啮合:

  • 知识→策略:KG 中沉淀的 ErrorPattern(错误模式)节点直接成为 RSI 评估器的改进机会来源——当某类要素映射反复被律师改判,评估器据此触发提示词优化器或工具策略优化器;KG 中的 SearchRecipe(检索配方)成为工作流参数优化的先验。
  • 策略→知识:RSI 的 PromptVersion、Strategy、EvalRun 作为能力节点写入同一张 KG,与领域知识共享置信度治理与版本链;一次成功的 A/B 晋升(challenger 胜出)被记录为可溯源的策略先例,供元学习调度复用。
  • 共享评估:第九章的评估基准体系同时为两个飞轮提供门禁——知识入图要过校验器,策略上线要过回归集;离线提升而在线持平即触发测试集更新,防止两个飞轮各自空转。
    啮合的物理载体是统一事件总线(第四章)与统一知识图谱(第五章):所有仓库的反馈与轨迹汇入同一条 FlywheelEvent 流,所有沉淀写入同一张带租户隔离的图。这使得「发明专利侵权分析」中学到的术语构造,可以被「FTO 分析」复用;「Step1-4」中验证有效的检索配方,可以被「deep-analysis」的策略优化器采纳。跨业务线的知识迁移,正是单仓库 RSI 无法企及、而平台级双飞轮独有的复利。

2.5 飞轮动力学与北极星指标

飞轮是否真正转动,用一组可计算的北极星指标度量,而非主观感受。表 2-1 给出指标体系与三阶段目标,全部指标在第九章有精确的计算口径与采集来源。
表 2-1 双飞轮北极星指标与三阶段目标

维度 指标 冷启动期(1—3 月) 成长期(4—12 月) 成熟期(13 月+)
知识转速 历史映射命中率 ≥30% ≥70% ≥85%
知识转速 专家修正率 ≤50% ≤25% ≤15%
知识质量 L2+ 置信边占比 ≥20% ≥40% ≥60%
知识质量 引用校验通过率 ≥90% ≥95% ≥99%
策略转速 策略 A/B 晋升数/季 ≥2 ≥6 ≥10
策略质量 任务成功率(L3 反馈) ≥80% ≥88% ≥93%
效率 单任务平均 Token 基线 环比降≥10% 环比降≥20%
效率 P95 端到端时延 ≤10 分钟 ≤8 分钟 ≤6 分钟

这组指标构成一个自我强化的正反馈:命中率上升→修正率下降→专家更愿意采纳→更多高质量反馈入图→命中率进一步上升;同时成功率上升→Token 与时延下降→单位成本下降→可承载更多任务→更多轨迹喂养策略飞轮。方案的全部工程设计,都是为了让这个正反馈在真实生产流量中持续转动而非停留在演示。

第三章 总体架构:六层解耦

3.1 架构总览

本方案在白皮书六层架构基础上,结合八仓库的实际形态做平台级落地。六层自下而上为:采集层(Collect)、沉淀层(Persist)、治理层(Govern)、推理层(Reason)、评估层(Evaluate)、进化层(Evolve)。采集层与进化层分别对应两个飞轮的入口与出口,沉淀层与治理层是共享底座,推理层是价值兑现点,评估层是质量闸门。六层之间以契约(FlywheelEvent、GraphPatch、EvalResult、Strategy)解耦,任何一层可独立演进而不破坏其余层。

3.2 各层职责与仓库映射

表 3-1 给出六层的职责、核心组件与落地仓库。设计原则是「联邦而非重建」:已有引擎(workdsh RSI、Step1-4 门禁、deep-analysis 黑板、FTO 七阶段)作为采集层的信号源与进化层的执行体被保留,平台只新增沉淀/治理/推理/评估四个共享平面。
表 3-1 六层架构职责与仓库映射

层 职责 核心组件 落地形态
采集层 Collect 把八仓库的轨迹/门禁/审阅/改判/评分统一为 FlywheelEvent lawsight_flywheel SDK、事件信标、Redis Stream 适配器 零依赖 SDK 复制到各仓库 backend/,复用现有 beacon 与 wf:llm_tokens 通道
沉淀层 Persist 事件落库、知识入图、向量索引、对象归档 FlywheelEventStore(MySQL)、KG(Neo4j/NebulaGraph)、Qdrant、MinIO 新增飞轮平面服务,复用 lawsight_storage SDK
治理层 Govern 置信度累积、冲突裁决、GraphPatch 事务、写入保护、租户隔离 ConfidenceEngine、ConflictArbiter、PatchValidator 飞轮平面核心模块,继承安全平面 RBAC/审计链
推理层 Reason GraphRAG 图遍历+向量辅助混合检索,确定性上下文注入 GraphRetriever、VectorAssist、ContextBuilder 飞轮平面检索服务,经 MCP/REST 供八仓库调用
评估层 Evaluate 四组指标、黄金集回归、发布门禁、在线信号相关性校验 EvalRunner、GoldenSet、GateKeeper 飞轮平面评估服务,CI 作业化
进化层 Evolve RSI 策略优化、A/B、沙盒、热配置、监控熔断 workdsh RSI 联邦、StrategyRegistry、Sandbox 复用并扩展 workdsh app/rsi,能力节点回写 KG

3.3 端到端数据流

一次完整的飞轮转动经历如下数据流(以 Step1-4 侵权分析中律师改判一行映射为例):

  1. 产生:律师在 CP-10 逐行审阅把某要素判定从 not_covered 改写为 equivalent,Step1-4 的 annotate() 记录 edit_lineage 与律师改写文本,emit() 写入哈希链事件。
  2. 采集:lawsight_flywheel SDK 钩子捕获该 human_action,映射为 FlywheelEvent(type=MODIFY_MAPPING, payload 含要素/原判定/新判定/引文/案件指纹),经 Redis Stream(实时)与信标(兜底)双通道上报。
  3. 沉淀:飞轮平面消费事件,落 FlywheelEventStore;抽取器把改判结构化为 GraphPatch(新增 READS_ON 边、置信度 L2=0.80、source=expert_correction)。
  4. 治理:ConfidenceEngine 检查是否与既有结论冲突;若冲突走 ConflictArbiter(版本优先/专家仲裁);PatchValidator 校验来源与租户;事务写入 KG。
  5. 推理:下次同类案件,GraphRetriever 以争点/要素为锚遍历图,召回这条 L2+ 的 READS_ON 边作为 few-shot 示例注入映射器 Prompt。
  6. 评估:EvalRunner 在黄金集上度量命中率是否上升、修正率是否下降;GateKeeper 决定是否放行新版本。
  7. 进化:若该改判模式高频出现,ErrorPattern 节点触发 RSI 评估器,提示词优化器生成改进策略,沙盒+A/B 验证后热配置生效。

3.4 部署拓扑与端口规划

飞轮平面作为第九个服务加入现有运营中心,建议端口 8400(后端)/6174(控制台),与中央安全平面(8200/6173)协同。基础设施复用 deploy/infra/docker-compose.yml 现有栈:MySQL 8.4(新增 lawsight_flywheel 库)、MinIO(19000/19001)、Qdrant(6333/6334)、Redis(6379);新增 Neo4j 5.x(7474/7687,生产可替换 NebulaGraph)承载知识图谱。新增 MySQL 库 lawsight_flywheel 存储事件、GraphPatch 审计、评估结果、策略注册表;KG 与 Qdrant 承载图与向量。所有数据绑定挂载本机 deploy/infra/data/,可备份迁移。飞轮平面拉起的子进程经运营中心透传存储与安全环境变量,与现有八仓库一致。

第四章 统一事件总线与信号采集

4.1 设计目标与 FlywheelEvent 契约

飞轮的燃料是反馈信号,而平台现状是「信号形态各异且多数未采集」(缺口 G1):workdsh 有记忆与 RSI 轨迹、Step1-4 有哈希链事件与 edit_lineage、deep-analysis 有 Finding.verified 与 AgentStep、FTO 有 override_risk 与关卡裁决,但它们互不相通。本章定义唯一的跨仓库契约 FlywheelEvent,把异构信号归一化为可被沉淀层直接消费的结构。契约以 JSON 表达,字段如表 4-1。
表 4-1 FlywheelEvent 统一契约字段

字段 类型 说明
event_id string 全局唯一(UUIDv7,含时间戳),幂等去重键
event_type enum 事件类型(见表 4-2),决定抽取器路由
repo string 来源仓库键(step14/deep/workdsh/fto/legal/design/cias/plane)
tenant_id string 租户隔离键,继承安全平面 JWT 主体
user_id string 真实用户归属(V3 策略:令牌主体或显式 X-User-Id,禁占位)
matter_id string 任务/事务/案件 ID,跨仓库关联键
business_line enum 七业务线之一(inv_infr/inv_noninfr/design_infr/design_noninfr/copyright_infr/copyright_fee/fto)
stage string 产生阶段(如 s4_mapping/CP-10/gate_legal)
agent string 产生智能体(如 element_mapper/ClaimAnalyzer)
payload object 类型相关载荷(要素/原判定/新判定/引文/指纹等)
provenance object 来源证据:原文 span/哈希/深链接/模型版本
confidence_hint float 信号初始置信度提示(表 4-2),最终由治理层裁定
occurred_at int 事件发生时间(毫秒 epoch)
trace_id string 关联可观测性 Trace(复用 Step1-4 observability 契约)
schema_version string 契约版本,支持向后兼容演进

4.2 事件类型与置信度提示

事件类型分为反馈类(直接入图)与轨迹类(供评估与策略优化)两大族。反馈类的置信度提示继承白皮书定义:专家显式修正/否决权重最高,采纳次之,评分不入图。表 4-2 给出类型、语义与初始置信度。
表 4-2 事件类型分类与置信度提示

类型 族 语义 置信度提示 目标置信级
MODIFY_MAPPING 反馈 专家改判要素映射/结论 0.80 L2
REJECT_OUTPUT 反馈 否决证据/结论单元/输出 0.80 L2
ADOPT_OUTPUT 反馈 采纳输出/签发/保留类案 0.70 L2
ANNOTATE 反馈 批注/改写文本/解释立场裁定 0.75 L2
CONSTRUED_TERM 反馈 术语构造裁定(CP-07) 0.80 L2
RATE_OUTPUT 反馈 记忆评分(L1 显式) — 不入图,供评估
TRAJECTORY 轨迹 任务全量轨迹/工具链/usage — 供 RSI 评估
GATE_RESOLVED 轨迹 门禁裁决(C1—C4/CP/关卡) — 供评估与审计
VERIFICATION 轨迹 引用校验结果(pass/warn/fail) — 供质量门禁
ERROR_PATTERN 轨迹 失败/降级/重试模式 — 触发策略优化

4.3 八仓库信号映射

表 4-3 给出每个仓库现有代码信号到 FlywheelEvent 的精确映射。这是采集层 SDK 的接线蓝图:每一行对应一个现有函数/表/端点的钩子点,无需修改业务逻辑,只在既有出口处旁路采集。
表 4-3 八仓库现有信号 → FlywheelEvent 映射

仓库 现有信号源(代码位置) 映射事件类型 采集钩子
Step1-4(8300) annotate() edit_lineage(step4.py:453)、do_signoff 双指纹(step4.py:562)、veto、CP-07 裁定、emit 哈希链(store.py:166) MODIFY_MAPPING/ADOPT_OUTPUT/REJECT_OUTPUT/CONSTRUED_TERM/GATE_RESOLVED store.emit 旁路 + step4 反馈后置钩子
deep-analysis(8001) Finding.verified/score(models.py)、AgentStep.duration_ms、awaiting_review、steer 四动作(routers/runs.py:124) VERIFICATION/TRAJECTORY/MODIFY_MAPPING orchestrator 落 Finding 处 + EventBus 持久化适配器
workdsh(8002) RSI collector task.end(collector.py:205)、L1 feedback、L4 judge、rsi_knowledge TRAJECTORY/RATE_OUTPUT/ERROR_PATTERN harness task.end 钩子(已有)+ 知识消费桥接
FTO(8005) override_risk(dialog.py:370)、resolve_gate(workflow.py:120)、request_report_edit(dialog.py:398)、update_feature(dialog.py:206);26 工具 MODIFY_MAPPING/ADOPT_OUTPUT/REJECT_OUTPUT/ANNOTATE/GATE_RESOLVED resolve_gate 与工具后置钩子(补 before/after 差分)
legal-cases(8111) 引用校验器(agents/verifier.py:108)、collect(routes.py:256)、events/checkpoints、token_metrics VERIFICATION/TRAJECTORY 校验器出口 + events 旁路;采纳/修正端点需新建
design-patent(8123) review(routes.py:221)、select_scheme(routes.py:237)、image_search_flag(routes.py:398)、t_score/t_feature_matrix MODIFY_MAPPING/ADOPT_OUTPUT/VERIFICATION review/select 后置钩子;特征矩阵/评分行级改判端点需新建
cias(8000) pin_element(main.py:530,pin_backup 差分)、add_evidence(main.py:483)、cias_audit 哈希链(store.py:150)、chat_intent MODIFY_MAPPING/ADOPT_OUTPUT/VERIFICATION 审计链 append 旁路 + pin/unpin 钩子
security-plane(8200) security_events、audit_chain(audit_chain.py:35)、evidence 固化(:110)、LLM 网关流水 VERIFICATION/ERROR_PATTERN 审计链写入旁路(供治理层)

4.4 采集 SDK 设计(lawsight_flywheel)

采集 SDK 延续 lawsight_security/lawsight_storage 的「纯标准库、零新依赖、复制到各仓库 backend/」工程约定,确保不引入任何运行时负担。SDK 由四个模块构成:

  • contract.py:FlywheelEvent 数据类与校验(类型/必填字段/租户/user-id 清洗),schema_version 协商。
  • emitter.py:双通道发射器——优先 Redis Stream XADD(复用 wf:llm_tokens 同栈,新增流 wf:flywheel_events),失败静默降级本地 jsonl 信标(复用现有 beacon 机制,后台回传飞轮平面 /api/security/beacon/events)。
  • hooks.py:与各仓库框架的适配器——FastAPI 中间件(捕获请求级 user-id 写入 contextvar)、harness task.end 钩子(workdsh)、store.emit 旁路(Step1-4)、SQLAlchemy 事件监听(deep-analysis)。
  • mapping.py:表 4-3 的信号映射规则,把仓库原生载荷翻译为统一 payload,保留 provenance(原文 span/哈希/深链接)。
    SDK 的接入是「旁路」而非「侵入」:所有钩子均为后置/旁路,采集失败绝不影响业务主流程(与现有 beacon 的容错语义一致)。发射器内置幂等链(event_id)与有界重试,避免重复入图。

4.5 传输可靠性与顺序语义

双通道设计兼顾实时性与可靠性:Redis Stream 提供毫秒级实时消费(飞轮平面 XREADGROUP 消费组、ACK 确认),信标 jsonl 提供断网/宕机兜底(重启后扫描未回传文件补传)。沉淀层以 event_id 幂等去重(MySQL 唯一键),保证「至少一次」传输收敛为「恰好一次」入图。顺序语义上,同一 matter_id 的事件以 occurred_at + 仓库内 seq(Step1-4 哈希链已有 seq)排序;跨仓库不保证全局顺序,但治理层的冲突裁决以置信度与版本而非到达顺序裁定(第六章),因此乱序不影响最终一致性。

4.6 user-id 归属与租户隔离

采集层严格继承 INTEGRATION.md §9 的 V3 归属策略:user_id 必须是真实用户经接口传来(JWT 主体权威,与 X-User-Id 不一致即 403),内部调用取当前请求用户,两者皆缺即拒绝收集(不默认用户)。tenant_id 从 JWT 主体解析,贯穿事件→GraphPatch→KG 节点→检索过滤全链路,保证租户 A 的专家经验绝不泄漏给租户 B。这与安全平面的权限感知检索(P1 遗留项)在飞轮层一并落地:KG 查询强制携带 tenant_id 过滤,Qdrant 检索以 payload filter 隔离。

第五章 统一知识图谱 Schema

5.1 设计原则

知识图谱是知识飞轮的沉淀载体,其 Schema 设计遵循四条原则:(1)结论可溯源——每条边携来源证据与置信度,拒绝无根据的断言;(2)领域与能力同图——法律事实与智能体策略共享一张图、一套治理,使双飞轮啮合有物理载体;(3)多业务线复用——七业务线共用核心本体,避免知识孤岛;(4)可演进——节点/关系类型可增量扩展,公共元属性保证向后兼容。Schema 在白皮书 15 类领域节点、13 类结论关系基础上,扩展 7 类能力节点与若干能力关系。

5.2 领域节点(15 类)

表 5-1 列出领域节点类型、语义与主要业务线。这些节点承载「事实与结论」,是 GraphRAG 召回的主体。
表 5-1 领域节点类型

节点类型 语义 关键属性 主要业务线
Patent 专利(目标专利/对比文献) pn/apd/法域/法律状态/类型 发明/FTO
Claim 权利要求 claim_no/独立或从属/文本 发明/FTO
ClaimElement 最小技术要素(MRE) element_id/限定词/必要性 发明/FTO
TermConstruction 术语构造(BRI/词典规则) term/窄宽口径/依据原文 发明/FTO
PriorArt 现有技术文献 pn/公开日/来源 无效/FTO
PriorArtFeature 现有技术特征 feature/原文 span 无效/FTO
Product 被控侵权产品/技术方案 name/技术描述 侵权/FTO
ProductFeature 产品技术特征 feature/来源 侵权/FTO
DesignFeature 外观设计要点 形状/图案/色彩/组件 外观
ImageWork 图片作品 work_id/权利人/登记 版权
VisualElement 视觉要素 区域/bbox/描述 外观/版权
LicenseRate 许可费率 rate/基准/行业 版权费用
Case 案件/事务 case_id/案由/争点 全部
Precedent 先例/类案 案号/裁判要旨/相关度 类案/全部
RiskLevel 风险等级 High/Medium/Low/三维评级 FTO/侵权

5.3 结论关系(13 类)

表 5-2 列出结论关系。关系是知识的「谓语」,携带置信度与来源,是飞轮沉淀的主要对象——专家改判一行映射,本质就是新增/修改一条 READS_ON 或 NOT_READS_ON 边。
表 5-2 结论关系类型

关系 起点→终点 语义 典型来源
MAPS_TO ProductFeature→ClaimElement 产品特征映射到要素 element_mapper/律师改判
READS_ON PriorArtFeature→ClaimElement 现有技术覆盖要素(侵权/无效) 映射器/专家修正
NOT_READS_ON PriorArtFeature→ClaimElement 未覆盖(区别特征) 映射器/专家修正
DIFFERS_FROM DesignFeature→DesignFeature 外观要素差异 视觉比对
CONSTRUED_AS ClaimElement→TermConstruction 要素按某口径解释 CP-07 裁定
INVALIDATES PriorArt→Claim 文献无效权利要求 invalidity_reasoner
DEPENDS_ON Claim→Claim 从属依赖 claim_parser
VISUALLY_SIMILAR_TO VisualElement→VisualElement 视觉近似 glm-4.5v 比对
HAS_ELEMENT Claim→ClaimElement 权项含要素 拆解
LICENSED_AT ImageWork→LicenseRate 许可费率 费用争议分析
DAMAGED_AS Case→RiskLevel 损害/风险认定 风险评估
RESOLVED_TO Case→Precedent 案件参照先例 类案检索/律师采纳
VERIFIED_BY 任意结论→Evidence 结论经证据校验 CitationVerifier

5.4 能力节点扩展(7 类)

为支撑策略飞轮与双飞轮啮合,本方案扩展 7 类能力节点(表 5-3)。它们把 workdsh RSI 原本散落在 13 张 rsi_* 关系表中的策略资产,提升为可图遍历、可跨仓库复用、可置信度治理的一等公民。这是本方案相对白皮书与单仓库 RSI 的关键增量。
表 5-3 能力节点类型(本方案扩展)

节点类型 语义 关键属性 来源
Agent 智能体角色 agent_id/repo/职责/模型 八仓库注册
PromptVersion 提示词版本 hash/模板/变量/胜率 RSI 提示优化器
Strategy 优化策略 type/payload/状态/ROI RSI 七优化器
EvalRun 评估运行 指标/测试集版本/门禁结果 评估层
TestCase 黄金/对抗测试题 输入/期望/相关度分级 黄金集构建
ErrorPattern 错误模式 pattern/频次/触发优化器 轨迹挖掘
SearchRecipe 检索配方 查询模板/源/命中率 QueryPlanner/检索审计

能力关系包括:Agent USES_PROMPT PromptVersion、Strategy OPTIMIZES Agent、EvalRun VALIDATES Strategy、TestCase BELONGS_TO EvalRun、ErrorPattern TRIGGERS Strategy、SearchRecipe USED_BY Agent、Strategy PRODUCES PromptVersion。这些关系使「某错误模式触发了某策略、某策略产生了某提示词版本、某提示词在哪些评估中胜出」成为可查询的因果链,为元学习调度与可解释进化提供依据。

5.5 公共元属性

所有节点与关系携带统一的公共元属性(表 5-4),这是置信度治理、版本链与租户隔离的基础。元属性继承白皮书定义,补充 tenant_id 与 business_line 以支撑平台级隔离与复用。
表 5-4 公共元属性

属性 说明
uid 全局唯一标识(确定性 uuid5,字符串 id 映射)
tenant_id 租户隔离键,查询强制过滤
confidence 置信度数值 [0,1],对数累积饱和
conf_level 置信级 L0—L4(决定能否进入结论上下文)
source 来源类型(expert_correction/multi_case/model_extract/import)
reason 结论理由(可解释)
verified_by / verified_at 校验者与时间
effective_from / effective_to 时效区间(法条修订/新旧法衔接)
version / superseded_by 版本号与被取代链(软删除)
business_line 产生业务线(跨线复用标记)
provenance 原文 span/哈希/深链接/模型版本

5.6 业务线本体复用

七业务线共享核心本体(Case/Precedent/ClaimElement/VERIFIED_BY),仅在领域节点上分化:发明与 FTO 复用 Patent/Claim/PriorArt 子图;外观复用 DesignFeature/VisualElement/VISUALLY_SIMILAR_TO;版权复用 ImageWork/LicenseRate。这种「核心共享 + 领域分化」使跨线知识迁移成为可能:例如「等同原则」的术语构造(TermConstruction)一旦在发明侵权线被专家验证为 L3,可被 FTO 线的映射器直接召回;类案检索线沉淀的 Precedent 可被任何线的风险评估引用。本体复用是平台级飞轮复利的结构基础。

第六章 置信度模型与知识治理

6.1 置信级 L0—L4

置信度是知识飞轮的「质量闸门」:它决定一条知识能否进入结论性上下文,从而保证「越用越好」不以「越用越乱」为代价。表 6-1 定义五级置信度,继承白皮书并明确各级的上下文准入权限。
表 6-1 置信级定义与上下文准入

级别 数值 含义 上下文准入
L0 0.30 草稿/模型抽取未验证 仅候选池,不进结论上下文
L1 0.50 单源验证 可作背景提示,须标注不确定
L2 0.80 专家验证(修正/采纳) 可作 few-shot 示例
L3 0.95 多源/多案件交叉验证 可作已知事实注入
L4 1.00 先例锚定(生效裁判/审查决定) 可作约束规则,最高优先

6.2 对数累积与饱和

同一结论被多个独立证据反复验证时,置信度按「噪声或(noisy-OR)」模型累积并自然饱和于 1,避免线性叠加溢出。设已有置信度 c,新到独立证据权重 w(由来源类型与置信度提示决定),则更新为:
$$c' = 1 - (1 - c)(1 - w)$$
多次独立验证后,置信度等价于 c = 1 − ∏ᵢ (1 − wᵢ),随证据数增加单调趋近 1 但永不越过。专家修正权重 w=0.80、采纳 w=0.70、多案件交叉验证每次 w=0.50、先例锚定直接置 c=1.00。独立性判定是关键:同一案件同一专家的重复操作不重复计权(以 matter_id+user_id+结论指纹去重),只有跨案件/跨专家的验证才累积,防止「刷置信度」。当 c 跨越阈值时 conf_level 自动升级,并触发下游重算(第八章的水位线增量重映射)。

6.3 冲突检测与裁决

知识入图前必须过冲突检测:同一主语对同一谓语存在相反结论(如 READS_ON 与 NOT_READS_ON 并存)即为冲突。ConflictArbiter 按优先级裁决(表 6-2),裁决结果与理由写入 reason 与审计链,败方不被物理删除而是软删除并挂 superseded_by 链,保留可追溯性。
表 6-2 冲突裁决优先级

优先级 规则 说明
1 时效优先(R-VER-01) 新法/新版本优于旧法,effective_from 晚者胜
2 先例锚定优先 L4 生效裁判优于任何模型抽取
3 置信度优先 高级别优于低级别
4 专家仲裁 同级冲突挂起,推送资深律师裁定
5 多源胜单源 独立验证数多者胜

6.4 GraphPatch 原子操作与版本链

所有知识变更以 GraphPatch 表达——一组原子的 add/delete/modify 操作,要么全部生效要么全部回滚。GraphPatch 结构:{patch_id, tenant_id, source_event_id, ops:[{op, node/edge, before, after}], confidence_delta, reason, author}。delete 一律为软删除(置 effective_to + superseded_by),modify 生成新版本节点并以版本链相连。写入以 Neo4j 事务执行(生产可换 NebulaGraph 以会话事务),保证图一致性。每个 GraphPatch 落 MySQL 审计表(lawsight_flywheel.graph_patches),与事件、安全审计链三方关联,实现「任何历史图状态可复现」。

6.5 写入保护与校验

PatchValidator 在写入前执行四道检查:(1)来源校验——结论性边必须携带 provenance(原文 span/哈希),无来源拒绝;(2)租户校验——patch.tenant_id 与事件一致,跨租户拒绝;(3)权限校验——L3+ 升级需专家角色(继承安全平面 RBAC),模型抽取只能到 L1;(4)引用校验——复用各仓库 CitationVerifier(包含→pass、difflib≥0.97→warn、fail 降级),未过校验的结论不得升 L2。这四道检查把白皮书「进入结论上下文的知识必须携来源与置信度」的不变量落实为代码闸门。

6.6 时效与知识衰减

法律知识有保质期:法条修订使旧结论失效,审查指南更新使旧构造过时。effective_from/effective_to 区间使 GraphRAG 能按案件临界日过滤时效冲突(新旧法衔接期案件)。此外引入轻量衰减:长期未被验证且未被引用的 L1 知识,其 confidence 随时间缓慢下调(半衰期可配),避免陈旧猜测长期占据候选池。但 L3+ 专家/先例知识不衰减(除非被显式取代)。衰减与遗忘策略与 workdsh RSI 的四层记忆遗忘(30 日且 importance<0.4)协同,保持图与记忆的健康代谢。

第七章 飞轮核心引擎(五阶段)

7.1 引擎总览

飞轮核心引擎是沉淀层与治理层的执行体,把 FlywheelEvent 流转化为高质量图资产。引擎由五个阶段组成流水线:采集归一(Collect)→ 知识抽取(Extract)→ 校验(Validate)→ 合并入图(Merge)→ 服务触发(Serve)。每个阶段幂等、可独立重放,以 event_id 与 patch_id 为幂等键;阶段间以 MySQL 任务表衔接,支持断点续跑(与八仓库的检查点语义一致)。引擎以 asyncio 协程运行,消费 Redis Stream 消费组,水平扩展时以消费组天然分片。

7.2 阶段一:采集归一(Collect)

消费 wf:flywheel_events 流(XREADGROUP),以 event_id 幂等落 FlywheelEventStore(MySQL lawsight_flywheel.events),按 event_type 路由到反馈管线或轨迹管线。反馈类(MODIFY_MAPPING/REJECT_OUTPUT/ADOPT_OUTPUT/ANNOTATE/CONSTRUED_TERM)进入抽取;轨迹类(TRAJECTORY/GATE_RESOLVED/VERIFICATION/ERROR_PATTERN)分流到评估层与 RSI。信标兜底文件定期扫描补传,与流消费共用同一幂等入口。此阶段还做 user-id/tenant 复核(V3 策略),占位归属拒绝入图并告警。

7.3 阶段二:知识抽取(Extract)

抽取器把反馈载荷结构化为 GraphPatch 候选。这里 LLM 仅作为信息抽取器(而非知识来源):对于结构化信号(如 Step1-4 的 edit_lineage 已含要素/原判定/新判定/引文),直接规则映射,零 LLM 成本;对于非结构化信号(如律师自由批注、FTO request_report_edit 文本),调用 glm-5.3-flashx 以受约束 JSON 模式抽取「主语-谓语-宾语-理由-引文」五元组。抽取提示词强制要求:只从给定原文抽取、不得编造案号法条、每个结论附原文 span。抽取结果初始置信级为 L0(模型抽取未验证),等待校验阶段升级。这种「规则优先、LLM 兜底」与平台一贯的「规则×LLM 双层兜底」设计一致。

7.4 阶段三:校验(Validate)

对抽取的 GraphPatch 候选执行第六章的四道写入保护(来源/租户/权限/引用)。引用校验复用各仓库 CitationVerifier 的三重校验(偏移+哈希+包含性,Step1-4 verify.py:102、deep-analysis element_mapper.py:72):包含→pass、difflib≥0.97→warn、fail 且原判定为肯定→降级。校验通过的专家反馈升 L2,多案件交叉验证升 L3,先例锚定升 L4;未过校验的候选拒入 L0 候选池或拒绝。校验结果以 VERIFICATION 事件回流评估层,成为引用校验通过率指标的数据源。

7.5 阶段四:合并入图(Merge)

ConfidenceEngine 计算置信度累积(§6.2),ConflictArbiter 检测并裁决冲突(§6.3),生成最终 GraphPatch,以 Neo4j 事务写入。写入同时:(1)更新 Qdrant 向量索引(节点文本嵌入,BGE-M3);(2)落 graph_patches 审计表;(3)发出 knowledge_merged 内部事件。合并是幂等的:同一 source_event_id 重复消费不会重复计权(以结论指纹去重)。跨业务线复用在此阶段标记 business_line,使一条知识可被多线召回。

7.6 阶段五:服务触发(Serve)

知识入图后,Serve 阶段触发下游增量重算:(1)通知 GraphRAG 引擎失效相关缓存(以受影响节点/争点为键);(2)对于活跃状态的相关事务,触发水位线增量重映射(§7.7);(3)若高频错误模式被沉淀为 ErrorPattern 节点,通知 RSI 评估器识别改进机会。Serve 阶段使「知识入图」与「能力生效」之间的延迟最小化,是飞轮转速的关键。

7.7 水位线增量重映射

为避免每次知识更新都全量重跑任务,引擎采用水位线(watermark)增量机制:每个活跃事务记录其上次消费的知识版本水位;当新 GraphPatch 涉及的节点/争点与事务相关且版本高于水位时,仅对受影响的要素/结论单元触发重映射,而非全量重算。这与 Step1-4 的 ALR stale 重算、deep-analysis 的黑板检查点恢复语义一致:只重算受影响部分,已完成且未受影响的工作不重放。增量重映射的结果再次产生反馈,形成飞轮的微观闭环。

第八章 GraphRAG 检索推理引擎

8.1 范式:图遍历优先、向量辅助

GraphRAG 是知识飞轮的价值兑现点——沉淀的知识只有被下次任务召回,才真正转化为能力。本方案采用「图遍历优先 + 向量辅助」的混合检索,而非纯向量 RAG。原因在于法律推理的本质是关系推理:「该要素被哪篇文献覆盖」「该术语按何种口径解释」「该案参照哪个先例」都是图上的多跳查询,纯向量相似度无法表达。图遍历保证关系精确与可溯源,向量辅助补全语义模糊匹配(同义改写、跨语言),两者以 RRF 融合。这与 legal-cases 设计文档的四路混合召回(BM25/dense/法条锚/图扩展,RRF k=60)一脉相承。

8.2 五阶段检索流水线

GraphRAG 引擎由五阶段组成(表 8-1),输入为任务上下文(争点/要素/产品特征/临界日),输出为结构化证据包。
表 8-1 GraphRAG 五阶段流水线

阶段 职责 关键操作
1 锚定 Anchor 从任务上下文提取图锚点 要素/争点/术语→节点 uid,tenant 过滤
2 遍历 Traverse 多跳图遍历召回结论 Cypher 模式匹配,按 conf_level≥L2 与时效过滤
3 向量辅助 Vector 语义模糊匹配补全 Qdrant 嵌入检索(BGE-M3),payload 过滤
4 重排 Rerank 融合与相关性重排 RRF 融合 + bge-reranker-v2-m3 争点级重排
5 装配 Assemble 构造确定性上下文 三段式注入 + 来源回链 + 防压平

8.3 三段式上下文注入

装配阶段把召回知识组织为三个确定性上下文段,注入智能体 Prompt(表 8-2)。分段的意义在于让模型明确区分「确定的事实」「可参考的示例」「必须遵守的约束」,避免把低置信猜测当作确定结论。
表 8-2 三段式上下文

段 内容 置信门槛 作用
已知事实 Known Facts 多源验证的结论与先例 L3+ 作为推理前提,最高优先
示例 Few-shot 专家验证的历史映射/改判 L2 引导模型对齐专家偏好
约束规则 Constraints 先例锚定的法条/裁判规则 L4 硬约束,不得违反

8.4 确定性注入与防压平

上下文注入是确定性的:给定相同任务上下文与图版本,召回结果可复现(以图版本哈希 + 检索参数为缓存键)。这使得评估可复现、问题可回放。注入时保留每条知识的 provenance(原文 span/深链接/哈希),供智能体生成时逐字引用、供校验器三重校验。防压平(anti-flattening)继承 Step1-4 verify.py 的设计:多引用、嵌套限定、过渡词不被压平为单一扁平表述,保证权利要求拆解的层次结构在注入后仍完整。上下文预算受 workdsh RSI 的 compact_char_limit 热配置控制,超时时优先压缩低置信段而非 L3+ 事实。

8.5 与各仓库的集成接口

GraphRAG 引擎以两种形态供八仓库调用:(1)MCP 工具——注册为 mcp__lawsight-flywheel__graph_retrieve,经 workdsh 已有的 MCP 桥接与 mcpguard 白名单接入对话引擎,智能体可自主调用;(2)REST 端点——POST /api/graphrag/retrieve,供各仓库流水线在映射/检索阶段同步调用。两种形态均强制携带 tenant_id 与 user_id(V3 归属),返回结构化证据包(结论+来源+置信级+深链接)。对于已接智慧芽的仓库(Step1-4/deep-analysis/FTO/design),GraphRAG 作为「第五路召回」与现有四源并行,不替换原有检索。

8.6 性能与缓存

图遍历以锚点邻域为限(默认 3 跳、结果上限可配),避免全图扫描;热点争点的检索结果以图版本哈希缓存(Redis,TTL 可配),知识入图时由 Serve 阶段精准失效。向量检索以 Qdrant payload filter 做租户/业务线/置信级过滤,减少候选集。重排模型 bge-reranker-v2-m3 可私有化部署,争点级批量推理。端到端检索 P95 目标 ≤2 秒,不成为任务时延瓶颈(任务总时延大头在 LLM 推理)。

第九章 评估基准体系

9.1 评估体系总览

评估层是双飞轮的质量闸门,回答「每一次变更是否真的让系统变好」。体系由四组指标 + 四类测试集 + 一道发布门禁构成闭环,原型是 legal-cases 设计文档§9 的 Stitla 基准文化与 workdsh RSI 的评估器。核心纪律:任何知识入图、任何策略上线、任何模型/检索变更,都必须过回归门禁;核心指标劣化超阈值即阻断发布。评估结果本身作为 EvalRun 节点写入 KG,使「质量可溯源」。

9.2 四组指标

表 9-1 给出四组指标的定义、口径与目标。知识组度量知识飞轮转速,策略组度量策略飞轮效果,检索组与生成组度量端到端质量(继承 legal-cases §9.3/§9.4)。
表 9-1 四组评估指标

组 指标 口径 目标
知识 历史映射命中率 新任务要素被 L2+ 图知识命中的比例 ≥30%→85%
知识 专家修正率 被律师改判的结论单元/全部单元 ≤50%→15%
知识 L2+ 边占比 置信级≥L2 的边/全部边 ≥40%
策略 任务成功率 L3 结果反馈成功/全部任务 ≥88%
策略 L4 评审分 LLM 评审 1—5 分均值 ≥4.0
策略 A/B 晋升胜率 challenger 胜出数/实验跟踪数 —
检索 Recall@50 争点级核心类案召回 ≥0.75
检索 nDCG@10 相关度分级位置折扣增益 ≥0.65
生成 引用准确率 逐字校验通过的引用陈述比例 100%(拦截)
生成 幻觉率 无中生有陈述/百万字 ≤0.5
效率 P95 端到端时延 单任务全流程 ≤10 分钟
效率 单任务成本 Token 与算力账本 环比升≤10%

9.3 四类测试集

(1)黄金问题集:由合作律所选取真实存量案件,保留案情/争点/期望类案集合三元组,相关度分级(核心参照/一般参照/背景),首批 300—500 题覆盖高频案由,每季度以线上采样扩充。(2)学术基准:LeCaRD(107 查询/43823 候选)与 LeCaRDv2(800 查询/55192 候选/50 罪名),用于横向对标与重排阈值标定,每季度全量回归。(3)线上采样集:从生产流量脱敏抽取,度量线上分布与黄金集偏移。(4)对抗集:法条修订时效冲突、长尾/跨案由检索、历史坏例——每一次线上失败转化为对抗样本,是评估体系自我强化的关键。全部测试集纳入版本管理,与索引版本、模型版本三方哈希绑定。

9.4 黄金修正集:飞轮自产的测试集

本方案相对白皮书的关键增量是黄金修正集(Golden Correction Set):从飞轮采集的专家修正信号中自动构建回归测试。每一条 MODIFY_MAPPING/REJECT_OUTPUT 事件,经专家确认后转化为一道测试题:输入为原任务上下文,期望输出为专家修正后的结论。这使得测试集随飞轮转动自动增长,且始终对准「系统曾经犯错、专家已经纠正」的真实薄弱点。黄金修正集与人工黄金集互补:前者覆盖高频错误模式,后者覆盖系统性能力。RSI 的提示词优化器生成的 challenger,必须在黄金修正集上不低于 champion 才能晋升——把「专家经验」直接变成「策略进化的约束」。

9.5 发布门禁

表 9-2 给出发布门禁阈值(一期基线,继承 legal-cases §9.6 并扩展知识/策略组)。发布流程:离线回归全量跑→通过门禁→影子评估(旁路 5% 真实流量对比)→A/B 灰度放量→全量。
表 9-2 发布门禁阈值

指标 门禁规则 说明
引用准确率 ≥100%(拦截机制) 未过校验不得交付,重生成成功率≥95%
Recall@50(黄金集) 环比劣化≤1% 超限阻断,须归因
nDCG@10(LeCaRDv2) 环比劣化≤1% 学术基准防漂移
黄金修正集通过率 不低于 champion 策略晋升硬约束
幻觉率(周抽检) ≤0.5 次/百万字 超标触发对抗集扩充
P95 端到端时延 ≤10 分钟 单任务全流程
单任务成本 环比升≤10% Token 与算力账本

9.6 在线信号与离线相关性校验

在线信号度量真实效用:类案点击率(前三位点击占比)、采纳率(律师保留的类案比例)、修正率、追问率、任务完成时长。这些指标按周聚合,与离线指标做相关性校验——若离线提升而在线持平或下降,说明测试集已偏离真实分布,触发黄金集更新。这防止两个飞轮「刷离线分」而真实效用停滞。在线信号经采集层 RATE_OUTPUT/ADOPT_OUTPUT 事件回流,与离线 EvalRun 关联分析。

9.7 标注规范与实施路线

标注规范三条经验前置(继承 legal-cases §9.7):期望类案以律师实际援引为准而非穷举;评分以分级标签而非二元集合;争点表述允许同义改写,评估先做争点对齐再按争点评分。测试集扩充保持新旧题目比例与难度分布稳定,避免口径漂移。标注由律师协作者背对背双人完成,不一致项资深律师仲裁,一致性以 Cohen Kappa 度量,低于 0.6 回炉重标。实施路线:1—2 周搭工具链覆盖检索层(不依赖人工、反馈快);3—4 周完成首批标注;一个月上线人工抽检与在线埋点;季度沉淀对抗集与公开基准报告。

第十章 RSI 联邦与策略优化闭环

10.1 联邦而非重建

策略飞轮不新建引擎,而是联邦并扩展 workdsh 已落地的 RSI 子系统(app/rsi/,16 个模块、13 张 rsi_* 表)。workdsh RSI 已验证了「Perform→Evaluate→Modify→Redeploy」闭环、七类优化器、元学习调度、A/B 分流、子进程沙盒、自主级别与监控熔断。本方案保留这套引擎作为策略飞轮的执行体,只做三点平台级扩展:(1)把采集面从 workdsh 单仓库扩到八仓库(经第四章统一事件总线);(2)把策略资产从 rsi_* 关系表提升为 KG 能力节点(第五章),实现跨仓库复用与置信度治理;(3)把评估约束从硬编码阈值升级为黄金修正集门禁(§9.4)。

10.2 四阶段闭环

Perform 采集:经 harness task.end 钩子(collector.py:205)零侵入采集每个任务的 trace/工具调用/精确 usage,自动收集 L2 隐式(延迟/工具成功率)、L3 结果(成败)反馈;记忆为 L1 显式;高分任务异步 L4 评审(1—5 分,≥4.5 入长期记忆 importance 0.8)。
Evaluate 评估:evaluator 以真实 usage 统计成功率/延迟/评审分/token,规则阈值(成功率<0.85、延迟>20s、评审<4.0、token>6000、L1<0.6)+ LLM 综合分析识别改进机会;平台扩展后,KG 的 ErrorPattern 节点成为额外的机会来源。
Modify 改进:元学习调度优化器生成策略,经安全黑名单→沙盒回归→按(收益×沙盒×置信度)/成本选最优。
Redeploy 重部署:默认 L2 人工批准(挂起期间不写任何运行时配置),批准后写 rsi_config 热配置对下次对话立即生效;提示类策略进 A/B 分流;监控 30s 巡检,错误率超阈自动回滚最近策略并熔断进化。

10.3 七优化器与元学习调度

表 10-1 列出七类优化器及其作用对象。元学习按历史胜率调度,可信度 = (wins+1)/(total+2)×平均收益,使高胜率优化器获得更多预算,形成策略层的「飞轮」。
表 10-1 七类优化器

优化器 作用对象 方法
提示词优化 base_system_prompt 遗传变异 + A/B
上下文工程 MCE history_turns/skill_body_limit/library_*/compact_char_limit 元上下文搜索
工具策略 http_enabled/http_timeout_*/tool_timeout_s 成功率聚合调参
记忆优化 四层记忆遗忘/迁移 importance 阈值调优
工作流参数 max_rounds/judge_enabled/evolution_interval_tasks ε-greedy 探索(ε=0.3)
代码插件 评审融合管线 optimize(profile) 沙盒内限时执行
检索配方(新增) SearchRecipe 节点 命中率反馈调优

10.4 平台级扩展:跨仓库策略联邦

单仓库 RSI 的进化只作用于全局配置,无法针对特定业务线/智能体。本方案把策略注册表(StrategyRegistry)提升为 KG 能力节点,使策略可绑定到 Agent/business_line:例如「element_mapper 在发明专利线的提示词」与「ClaimAnalyzer 在 FTO 线的提示词」是不同 PromptVersion 节点,各自独立 A/B 与晋升。workdsh 作为策略联邦的执行中枢,其他仓库经采集层上报轨迹、经 GraphRAG 拉取生效策略。这使「某仓库验证有效的策略」可被其他仓库复用,是平台级复利。

10.5 A/B 测试与晋升

A/B 分流以 sha1(task_id)%2 确定性哈希,champion 恒定不被覆盖(修复原版缺陷)。晋升条件:challenger 评审分 > champion + 0.05 且样本≥6/臂≥4(RSI_AB_TEST_MIN_SAMPLES)。平台扩展后增加硬约束:challenger 必须在黄金修正集上不低于 champion(§9.4),防止「评审分高但专家经验退步」。A/B 状态与结果作为 EvalRun 节点入图,供元学习与审计。

10.6 沙盒与安全收敛

代码插件与高风险策略经沙盒验证:AST 白名单(禁危险调用)+ 子进程隔离(python -I)+ 8 秒硬超时(死循环即杀)。安全黑名单(governance.py)拦截危险策略。这套机制使「自我进化」是受治理的持续实验而非失控的自我修改。沙盒试验结果(通过/失败/超时)入策略可信度计算。

10.7 自主级别与监控熔断

自主级别 L1—L4 运行时可调(默认 L2):L1 仅建议、L2 人工批准、L3 自动应用低风险、L4 全自动。L1/L2 挂起策略不先写配置(修复原版缺陷)。monitor 30s 巡检,错误率 > RSI_ALERT_ERROR_RATE(0.3)自动回滚最近策略并熔断进化;回滚严格按快照还原(不误伤无关 A/B)。变更写审计,熔断恢复需人工确认。

10.8 热配置旋钮接线

表 10-2 给出策略旋钮的真实接线点(默认值=原硬编码),确保进化结果直接控制工作台行为而非停留在配置表。这是 workdsh 已验证的「真实接线」,平台级扩展后同样适用于各仓库的对应参数。
表 10-2 热配置旋钮与接线点

热配置键 接线点
base_system_prompt llm.build_system_prompt 首段(A/B 分流)
context_policy.history_turns/skill_body_limit/library_* 会话历史/技能正文/资料注入条数与截断
context_policy.compact_char_limit harness 上下文压缩预算
tool_policy.http_enabled/http_timeout_* http_request 开关与超时
tool_policy.tool_timeout_s harness 全部工具执行超时
workflow_policy.max_rounds/judge_enabled/evolution_interval_tasks LLM 轮数上限/L4 评审开关/自动进化周期

第十一章 七业务线 × 八仓库集成设计

11.1 业务线与仓库映射

七条业务线复用八仓库引擎,每条线有独立的飞轮闭环但共享底座。表 11-1 给出业务线、主引擎仓库、核心沉淀节点与关键反馈信号。
表 11-1 七业务线集成映射

业务线 主引擎仓库 核心沉淀节点/关系 关键反馈信号(代码现状)
发明专利侵权 Step1-4、deep-analysis MAPS_TO/READS_ON/CONSTRUED_AS CP-10 改判、CP-07 术语裁定、veto(已实现)
发明专利非侵权 Step1-4、deep-analysis NOT_READS_ON/DIFFERS_FROM 区别特征认定、律师改写(已实现)
外观设计侵权 design-patent、FTO(design) VISUALLY_SIMILAR_TO/DesignFeature review/select_scheme(已实现);组件/评分行级改判待建
外观设计非侵权 design-patent、FTO(design) DIFFERS_FROM/DesignFeature 差异组件认定、规避设计采纳(部分实现)
图片版权侵权 cias ImageWork/VisualElement/VERIFIED_BY pin_element/add_evidence(已实现,pin_backup 差分)
图片版权费用争议 cias(规划,未实现) LICENSED_AT/DAMAGED_AS 费率/损害采集与计算需新建(E6 现排除判定)
FTO 自由实施 FTO、Step1-4 READS_ON/RiskLevel/INVALIDATES override_risk/resolve_gate(已实现,需补改判前值)

11.2 发明专利侵权/非侵权线

主引擎为 Step1-4(四步全流程、九道门禁)与 deep-analysis(黑板状态机、CitationVerifier)。飞轮闭环:element_mapper 逐要素判定产生 TRAJECTORY;律师在 CP-10 把 not_covered 改判 equivalent 产生 MODIFY_MAPPING(L2);CP-07 术语构造裁定产生 CONSTRUED_TERM;veto 否决证据产生 REJECT_OUTPUT。这些信号沉淀为 READS_ON/NOT_READS_ON/CONSTRUED_AS 边。下次同类案件,GraphRAG 以要素为锚召回这些 L2+ 边作为 few-shot 注入映射器,命中率上升。deep-analysis 的 Finding.verified/score 是天然评估单元,AgentStep.duration_ms 供效率指标;其 EventBus 仅内存的缺口由采集层持久化适配器补齐。Step1-4 的 mem0 项目记忆(wf_project_memory)与 KG 协同:mem0 存事务级文本摘要,KG 存结构化可推理结论,两者以 matter_key 关联。

11.3 外观设计侵权/非侵权线

主引擎为 design-patent(backend 位于 lawsight/backend/,九表 t_case/t_feature_matrix/t_score/t_avoid_scheme 等)与 FTO design 模式。需更正:design-patent 视觉/文本模型实为 glm-5.3-flashx(config.py:23),多模态经 glm.vision 调用面(glm.py:66),并非 glm-4.5v;比对管线为 CV+LLM 混合——视图配准 ORB+RANSAC(vision.py:75)、形状相似度 Hu0.35+IoU0.65(vision.py:128)、可选 CLIP 嵌入(vision.py:224)、特征矩阵 FeatureDiff(path_a.py:491)、综合评分权重 shape.40/novelty.30/pattern.20/color.10(path_a.py:627)。飞轮闭环:透视图比对产生 VISUALLY_SIMILAR_TO/DIFFERS_FROM 候选(L0);人工复核 review(routes.py:221,写 state.reviews 含 reviewer/verdict/decision)、规避方案采纳 select_scheme(routes.py:237→add_design_version)、以图搜图逐标标记 image_search_flag(routes.py:398)升 L2。benchmark 8/8(方向一致率≥80% 达标,benchmark.py:60)提供确定性评估基线。缺口:特征矩阵行级改判、评分覆盖、整体视觉效果修正均无人工端点,WEIGHTS/_grade 阈值硬编码——飞轮需补这些改判入口并把权重纳入策略优化。视觉证据(叠图/热力图)现仅对象键+审计计数,未结构化沉淀,飞轮以 VisualElement 节点携 bbox/区域与 MinIO 对象 key 入图。另需修复 zhihuiya.py:172 附图下载裸 http.get 未过 guarded_fetch 的 SSRF 缺口。

11.4 图片版权侵权/费用争议线

主引擎为 cias(版权智审,backend 位于 cias/backend/,Plan-and-Execute A0—A13 智能体,engine.py:9)。侵权线飞轮:图像比对 img_sim_tool(main.py:827)→compare_images(image_pipeline.py:456)五级级联:L1 pHash 汉明≤8、L2 分块匹配≥0.45、L3 统计余弦自适应、LE 元素级 Sinkhorn-OT 对齐+ΔE00/LV VLM 仅叙述不判定,产生 VERIFICATION;律师钉定 pin_element(main.py:530,confidence=1.0)与补证 add_evidence(main.py:483)产生 MODIFY_MAPPING/ADOPT_OUTPUT。关键优势:pin_backup(main.py:506)天然保留「模型原判 vs 人工改判」差分对,是飞轮最干净的燃料;审计 action 流(element_pinned/evidence_added/chat_intent_*)经哈希链(store.py:150,append-only)防篡改。沉淀 ImageWork/VisualElement 节点与 VERIFIED_BY 边,LE pairs/metrics 已 JSON 化+证据图对象 key+file_hashes(image_pipeline.py:493)可直接归一。费用争议线须明示:cias 当前未实现许可费率/损害量化(E6「损害与因果」为可选取件且显式排除判定,elements_cn.json:20),LICENSED_AT/DAMAGED_AS 属规划本体——飞轮在此线是绿地,需先建费率/损害采集与计算,demo 种子的 demo_note 预期标注(main.py:995)可作黄金集雏形。缺口:审计链无 verify 函数(飞轮侧需自建)、相似度分级人工归因无回写端点、cias_user_memory 仅 recent_cases 自动写。

11.5 FTO 自由实施线

主引擎为 FTO(七阶段 S1—S7,workflow.py STAGES:24;三关卡)与 Step1-4。飞轮闭环:S4 ClaimAnalyzer 逐要素映射(_analyze_one:804/外观 _analyze_design_one:594)产生 TRAJECTORY;律师 override_risk(dialog.py:370)改判风险等级产生 MODIFY_MAPPING;resolve_gate(workflow.py:120,REST /review api.py:502 与对话共用)裁决 gate_feature/gate_legal/gate_final 产生 GATE_RESOLVED;request_report_edit(dialog.py:398)产生 ANNOTATE;update_feature(dialog.py:206)产生特征修正。对话工具实为 26 个(TOOLS_SPEC dialog.py:62,含 14 个写入/干预控制类)。沉淀 READS_ON/RiskLevel/INVALIDATES。关键采集修复:override_risk 现原地覆盖 overall_level(dialog.py:378)、reviewer_override 仅存字符串(:379),改判前值丢失——飞轮钩子须在覆盖前捕获 before/after 结构化差分。FTO「规则×LLM 双层兜底」(S6 总体判定纯规则:913、S5 规则兜底:889)与飞轮兼容:沉淀的是映射结论与风险先验,不改规则确定性。缺口:S7 QA 修复循环 issues 硬置空(:1145)致 qa_status 恒 passed、S7 重算 overall 漏 high 分支(:1137,与 S6:918 不一致)、全表无 confidence 字段、rerun 清空历史(:1176)旧轮次不可追溯、无评分端点——飞轮需补置信度列、版本化轨迹与 QA 真实门禁。

11.6 类案检索支撑线

legal-cases(类案 RAG,backend 位于 backend/,实测 427 案/1549 向量)是七线公共支撑:Case 经 RESOLVED_TO 关联 Precedent。需更正实现现状:四路召回+RRF(k=60,hybrid.py:18)已实现,但 BM25 为纯 Python bigram 演示级(case_store.py:46)、dense 用 embedding-3/2048 维失败退化为哈希向量、图扩展是内存「同案由+1/共同法条+2」邻接(case_store.py:330,非图数据库);重排是 LLM 争点级交叉打分(hybrid.py:114,非 bge-reranker-v2-m3,bge 仅见设计文档);引用校验器(verifier.py:108)仅包含性+SequenceMatcher,无偏移/哈希校验,拦截为软降级 quality_badge(engine.py:216,非硬阻断)。重大燃料缺口:采纳/修正/否决/点击端点全无(design_doc 仅设计),现仅机器信号可用——events 人机控制(engine.py:139)、checkpoints 快照(db.py:306)、verification/quality_badge、collected_items 采集溯源(internet.py:242)、wf:llm_tokens。飞轮在此线的首要任务是新建采纳/修正/否决端点(沉淀 RESOLVED_TO、L2),并把检索引擎从演示级升级(生产 BM25+向量+图数据库+重排);LeCaRD/LeCaRDv2 回归与 Recall/nDCG 计算当前无代码,需平台侧新建。MCP 已暴露 12 工具(mcp_server.py,McpAuthGate main.py:92 鉴权),token_metrics 拒绝占位 user(RESERVED_USERS:50)。

11.7 工作台与记忆中枢

workdsh(工作台 + RSI)是平台的人机交互中枢与策略进化执行体,所有线的对话式干预(记忆、改判、批注)经 workdsh 的 harness 与 MCP 桥接汇入采集层;workdsh 的四层记忆(短/工作/长/元)与 KG 协同:记忆存偏好与上下文,KG 存可推理结论,rsi_knowledge 原本「存而不用」的缺口由知识消费桥接补齐(成功工具链/失败模式回写 KG 的 ErrorPattern/SearchRecipe)。82 个法律技能与 MCP 外部服务(威科先行)作为工具策略优化的对象,其成功率经 RSI 工具优化器聚合调参。

第十二章 多智能体协同与编排

12.1 协同范式:编排 + 黑板 + 门禁

平台现有三种协同范式被保留并统一:Step1-4/FTO 的状态机编排(阶段顺序 + 门禁)、deep-analysis 的黑板状态机(共享 blackboard + 智能体读写)、workdsh 的对话式工具循环(harness 工具注册表 + MCP 桥接,内置 7 工具;FTO 另有 26 个对话工具)。飞轮不改变这些范式,而是在其上叠加统一的「能力图谱 + 信号采集」:每个智能体注册为 Agent 节点,每次协同产生 TRAJECTORY/GATE_RESOLVED 事件,人机控制点成为飞轮的高质量信号源。

12.2 智能体注册与能力图谱

八仓库的智能体(Step1-4 的 A1—A8/FigureAgent/QueryPlanner、deep-analysis 的 claim_parser/element_mapper/invalidity_reasoner 等、FTO 的 S1—S7 智能体)统一注册为 KG 的 Agent 节点,属性含 agent_id/repo/职责/模型/提示词版本。Agent USES_PROMPT PromptVersion 关系使「某智能体当前用哪个提示词版本」可查询;Strategy OPTIMIZES Agent 使「某策略作用于哪个智能体」可追溯。这为第十章的跨仓库策略联邦提供结构基础,也使能力地图(LawBench/LexEval 式的组件能力跟踪)可落到具体智能体。

12.3 跨仓库智能体互调

跨仓库协同经 MCP 协议:飞轮平面注册 mcp__lawsight-flywheel__graph_retrieve(GraphRAG)与 mcp__lawsight-flywheel__record_feedback(反馈回写)两个工具,经 workdsh 已有的 MCP 桥接与 mcpguard 白名单接入。各仓库智能体可自主调用 GraphRAG 的召回知识;workdsh 作为中枢可编排跨仓库任务(如「类案检索→侵权比对→风险评估」链)。互调严格携带 user_id(harness.execute_tool 对 mcp__lawsight* 强制注入 effective_user,模型自报值不作数)与 tenant_id,继承 V3 归属策略。

12.4 人机协同控制点:飞轮的高质量信号源

平台的门禁与控制点(Step1-4 九道门禁 C1—C4/CP-07—11、FTO 三关卡、deep-analysis awaiting_review)是飞轮最宝贵的信号源——它们是人类专家判断的制度化出入口。表 12-1 给出控制点与飞轮信号的对应。设计原则:每个控制点的裁决都被采集,且裁决上下文(当时系统给出的候选与理由)一并保留,使「专家为什么这样改」可还原。
表 12-1 控制点 → 飞轮信号

控制点 仓库 裁决动作 飞轮信号
CP-07 解释立场 Step1-4 窄/宽口径裁定 CONSTRUED_TERM(L2)
CP-10 逐行审阅 Step1-4 接受/改写/拒绝 ADOPT/MODIFY/REJECT
CP-11 签发 Step1-4 双指纹签发 ADOPT_OUTPUT(L2)
gate_feature FTO 批准/改特征/退回 MODIFY_MAPPING/ANNOTATE
gate_legal FTO 确认/改判/重跑 MODIFY_MAPPING(override_risk)
gate_final FTO 签发/批注退回 ADOPT_OUTPUT/ANNOTATE
awaiting_review deep-analysis steer 四动作 MODIFY_MAPPING/GATE_RESOLVED

12.5 干预协议与飞轮

Step1-4 的 12 种干预(pause/resume/stop/focus/inject/veto/veto_unit/rerun/redirect/lock_theory/rollback)与 FTO 的对话干预工具,都是飞轮信号:inject 注入领域知识→沉淀为约束规则候选;veto 否决证据→REJECT_OUTPUT;lock_theory 锁定理论→ADOPT_OUTPUT;rerun 切换立场→CONSTRUED_TERM。干预轨迹经检查点回退重放保留分支谱系,使「不同立场下的结论差异」成为可对比的评估数据。飞轮把这些干预从「一次性操作」提升为「可复用经验」。

12.6 可观测性统一

飞轮复用 Step1-4 的 observability 契约(Trace=事务,Span 覆盖 stage/llm/retrieval,ContextVar 随 asyncio 传播)与 deep-analysis 的 Prometheus 计数器、workdsh 的 Redis wf:llm_tokens 九字段流水。采集层为每个 FlywheelEvent 携带 trace_id,使「反馈信号→产生该信号的任务轨迹→LLM 调用→检索式」全链路可回放。可观测性数据供评估层计算延迟 P95/Token 成本,供 RSI 计算工具成功率,是飞轮转速的仪表盘。

第十三章 安全治理一体化

13.1 继承中央安全平面

飞轮平面不新建安全体系,而是继承中央安全平面(lawsight-security-plane)与零依赖 SDK(lawsight_security)的全部能力:HS256 验签(jwtlite.verify,sdk/jwtlite.py:28)、G0 认证中间件(off/warn/enforce,middleware.py:28)、RBAC、netguard(SSRF/上传路径囚笼)、firewall(G1 准入规则+L2 分类器)、mcpguard(stdio 白名单)、事件信标。飞轮平面所有端点挂 G0 中间件,继承平台 enforce 模式。需扩展:平台现有角色为 owner/editor/viewer/auditor/platform-admin(access.py:29),无 expert 角色——飞轮的知识写入与策略晋升需专家权限,应在 ROLES 增补 expert(或以 editor 承载),L3+ 置信度升级与策略批准挂该角色。另需修复信标接收端点:实际为 POST /api/security/beacon/events(securityops.py:96,X-Beacon-Secret 恒时比较),且 main.py:86 引用的 access.beacon_bucket 未定义(仅 bucket,access.py:147)会致 500,集成前须修复。

13.2 租户隔离与权限感知检索

租户隔离贯穿全链路:FlywheelEvent.tenant_id 从 JWT 主体解析→GraphPatch 携带→KG 节点/边属性→GraphRAG 查询强制过滤→Qdrant payload filter。租户 A 的专家经验绝不泄漏给租户 B。这一并落地 INTEGRATION.md 的 P1 遗留项「权限感知检索」:不仅按租户,还可按案件 metadata 域过滤(如某案件仅特定团队可见)。权限感知检索以 KG 查询的 tenant_id + acl 双重过滤实现,向量检索以 Qdrant payload 的 tenant_id/acl filter 实现。

13.3 知识写入的安全闸门

知识入图是新的攻击面:恶意反馈可能注入虚假结论、污染图谱。防护三道:(1)G1 注入检查——非结构化反馈(律师批注/报告编辑文本)经 firewall G1 规则 + L2 语义分类器(正常案情 0.0/注入样本 0.99)检查,命中拒绝入图并记 security_event;(2)PII DLP——当事人信息脱敏后才入图(继承线上采样集脱敏规范);(3)来源强制——结论性边必须携带可校验 provenance,无来源的「断言」拒绝。这使知识飞轮的「燃料」本身是干净可信的。

13.4 审计链与可溯源

飞轮的每一次知识变更与策略晋升都写入审计链:GraphPatch 审计表(MySQL)+ 安全平面 audit_chain(哈希链 append,audit_chain.py:35;verify 全链重算:63)+ MinIO WORM 锚定。三方关联(event_id→patch_id→audit hash)使任何历史图状态与策略状态可复现、可问责。需落地:anchor()(audit_chain.py:76)当前是纯预留钩子(全仓零调用、仅应用层 exists 判断、未配 MinIO Object Lock),飞轮需接定时任务+对象锁实现真 WORM;evidence 表(store.py:60)无 task_id/tenant 列,FlywheelEvent 溯源需扩列或关联表。业务侧:Step1-4 仅追加 SHA256 哈希链(store.py:166,audit_verify:240)已有校验,cias append-only 审计表(store.py:150)无 verify 函数需补。质量本身可溯源——这是白皮书「溯源优先」原则从数据层到工程流程的延伸。

13.5 LLM 网关零保留

飞轮的所有 LLM 调用(抽取器/评估器/RSI 优化器)经中央平面 LLM 网关的零保留路由(glm-cloud-zr),确保案件敏感信息不被模型服务商保留。token 计量经 wf:llm_tokens 九字段流水统一记账,user-id 归属严格 V3(真实用户经接口传来,禁占位)。这与平台「计量纪律」一致:凭空记账比漏记更糟,无归属调用拒绝。

13.6 基础设施安全继承

飞轮平面复用 lawsight_storage SDK 的对象囚笼(key 的 .. 段显式拒绝)、MinIO 预签名、MySQL 连接池(pre-ping)、Qdrant 字符串 id 的 uuid5 确定性映射。GraphRAG 的 Cypher 查询以参数化执行防注入;Neo4j/NebulaGraph 以独立账号最小权限。SSRF 防护(netguard 全 IP 解析拒绝回环/私网/云元数据、重定向逐跳复检)覆盖飞轮平面任何外部抓取。安全不是飞轮的附加项,而是其运行的前提。

第十四章 存储与数据模型设计

14.1 存储选型与分工

飞轮复用平台工业化存储栈,按数据形态分工(表 14-1)。原则:关系数据入 MySQL、图关系入 Neo4j、向量入 Qdrant、对象入 MinIO、实时流入 Redis,各层可环境变量切换回本地开发态(sqlite/本地磁盘/npz),与 lawsight_storage SDK 一致。
表 14-1 存储分工

存储 承载 选型理由
MySQL 8.4 事件/GraphPatch 审计/评估结果/策略注册/黄金集 事务/审计/聚合查询事实源
Neo4j 5.x(生产 NebulaGraph) 知识图谱节点/关系/版本链 多跳关系遍历/图算法
Qdrant v1.12 节点文本嵌入/语义辅助检索 payload 过滤/租户隔离
MinIO 标注图/证据原文/产物/WORM 锚定 对象囚笼/预签名
Redis 7 wf:flywheel_events/wf:llm_tokens/缓存 实时消费组/毫秒级

14.2 MySQL 库表 DDL

新增库 lawsight_flywheel,核心表如下(utf8mb4_0900_ai_ci,与平台一致)。events 表以 event_id 唯一键保证幂等;graph_patches 记录每次图变更的完整前后状态;eval_runs 与 strategies 支撑评估与策略联邦;golden_tests 存黄金修正集。

CREATE DATABASE IF NOT EXISTS lawsight_flywheel
  CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci;
CREATE TABLE events (
  id BIGINT AUTO_INCREMENT PRIMARY KEY,
  event_id VARCHAR(64) NOT NULL,
  event_type VARCHAR(32) NOT NULL,
  repo VARCHAR(32) NOT NULL,
  tenant_id VARCHAR(64) NOT NULL,
  user_id VARCHAR(64) NOT NULL,
  matter_id VARCHAR(64),
  business_line VARCHAR(32),
  stage VARCHAR(64),
  agent VARCHAR(64),
  payload LONGTEXT,
  provenance LONGTEXT,
  confidence_hint FLOAT,
  trace_id VARCHAR(64),
  occurred_at BIGINT,
  schema_version VARCHAR(16),
  consumed TINYINT DEFAULT 0,
  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  UNIQUE KEY uk_event (event_id),
  KEY idx_tenant_type (tenant_id, event_type),
  KEY idx_matter (matter_id)
) ENGINE=InnoDB;
CREATE TABLE graph_patches (
  id BIGINT AUTO_INCREMENT PRIMARY KEY,
  patch_id VARCHAR(64) NOT NULL,
  source_event_id VARCHAR(64),
  tenant_id VARCHAR(64) NOT NULL,
  ops LONGTEXT,
  confidence_delta FLOAT,
  reason TEXT,
  author VARCHAR(64),
  audit_hash VARCHAR(128),
  applied TINYINT DEFAULT 0,
  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  UNIQUE KEY uk_patch (patch_id),
  KEY idx_source (source_event_id)
) ENGINE=InnoDB;
CREATE TABLE eval_runs (
  id BIGINT AUTO_INCREMENT PRIMARY KEY,
  run_id VARCHAR(64) NOT NULL,
  tenant_id VARCHAR(64),
  test_set_version VARCHAR(64),
  index_version VARCHAR(64),
  model_version VARCHAR(64),
  metrics LONGTEXT,
  gate_passed TINYINT,
  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  UNIQUE KEY uk_run (run_id)
) ENGINE=InnoDB;
CREATE TABLE strategies (
  id BIGINT AUTO_INCREMENT PRIMARY KEY,
  strategy_id VARCHAR(64) NOT NULL,
  tenant_id VARCHAR(64),
  optimizer VARCHAR(32),
  target_agent VARCHAR(64),
  business_line VARCHAR(32),
  payload LONGTEXT,
  status VARCHAR(24),
  roi FLOAT,
  sandbox_result VARCHAR(24),
  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  UNIQUE KEY uk_strategy (strategy_id)
) ENGINE=InnoDB;
CREATE TABLE golden_tests (
  id BIGINT AUTO_INCREMENT PRIMARY KEY,
  test_id VARCHAR(64) NOT NULL,
  tenant_id VARCHAR(64),
  business_line VARCHAR(32),
  input LONGTEXT,
  expected LONGTEXT,
  relevance_grade VARCHAR(16),
  source_event_id VARCHAR(64),
  difficulty VARCHAR(16),
  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  UNIQUE KEY uk_test (test_id)
) ENGINE=InnoDB;

14.3 Neo4j 图存储与索引

KG 以 Neo4j 承载(生产可换 NebulaGraph)。节点标签即表 5-1/5-3 的类型,关系类型即表 5-2。公共元属性(uid/tenant_id/confidence/conf_level/source/version 等)存于节点/关系属性。关键索引:tenant_id 复合索引(所有查询强制过滤)、uid 唯一约束、conf_level 索引(按置信级过滤)、business_line 索引。版本链以 superseded_by 关系表达,软删除置 effective_to。示例约束与索引:

CREATE CONSTRAINT node_uid IF NOT EXISTS
FOR (n:ClaimElement) REQUIRE n.uid IS UNIQUE;
CREATE INDEX node_tenant IF NOT EXISTS
FOR (n:ClaimElement) ON (n.tenant_id);
CREATE INDEX node_conf IF NOT EXISTS
FOR (n:ClaimElement) ON (n.conf_level);
// 多跳查询示例:某要素被哪些 L2+ 文献特征覆盖
MATCH (e:ClaimElement {uid:$eid, tenant_id:$tid})
  <-[r:READS_ON]-(f:PriorArtFeature)
WHERE r.conf_level >= 2 AND r.effective_to IS NULL
RETURN f, r ORDER BY r.confidence DESC LIMIT 20;

14.4 Qdrant 向量集合

新增集合 flywheel_kg(节点文本嵌入,BGE-M3,1024 维),payload 含 tenant_id/business_line/conf_level/node_type/uid,检索时以 filter 隔离。与现有 case_chunks(1549 条)、wf_project_memory(2048 维 embedding-3)并存:case_chunks 供类案召回,wf_project_memory 供事务记忆,flywheel_kg 供图节点语义辅助。字符串 uid 经 uuid5 确定性映射为 Qdrant 点 id(复用 lawsight_storage vector.py)。

14.5 Redis Stream 契约

新增流 wf:flywheel_events(MAXLEN ~100000),XADD 字段为 FlywheelEvent 的 JSON 序列化 + 路由键。消费组 flywheel-engine 以 XREADGROUP 消费、XACK 确认;信标兜底经 /api/security/beacon/events 回传后同样 XADD。wf:llm_tokens 九字段契约不变(ts/user_id/matter_id/stage/name/model/tokens_in/tokens_out/total),供评估层成本指标。

14.6 存量数据入图迁移

冷启动需把存量资产入图(表 14-2)。迁移以各仓库 scripts/migrate_storage.py 为模板,新增 scripts/migrate_to_kg.py:读 MySQL 存量→规则映射为节点/边→初始置信级按来源定(律师已验证 L2、模型抽取 L0、判例 L4)→批量事务写入。迁移幂等(以 uid 去重),行数核对全过。1549 条 case_chunks 向量直拷 flywheel_kg 零 API。
表 14-2 存量资产入图映射

存量资产 来源 目标节点/边 初始置信级
427 件类案 legal-cases cases 表 Precedent/Case/RESOLVED_TO L2(律师采信)
1549 条向量 case_chunks flywheel_kg 集合 随节点
87 件外观案件 design 9 表 DesignFeature/VisualElement L0—L2
72 件版权案件 cias 3 表 ImageWork/LICENSED_AT L0—L2
18 件全流程事务 step14 matters/events Case/ClaimElement/READS_ON L2(含改判)
662 条哈希链事件 step14 events TRAJECTORY/反馈抽取 按信号

第十五章 具体实现(核心代码)

本章给出飞轮平面核心模块的可运行级实现(Python 3.12,纯标准库 + 平台已有 SDK)。代码遵循平台工程约定:零新依赖优先、幂等、租户隔离、规则×LLM 双层兜底。各模块可独立单测,与八仓库经 SDK 与 REST/MCP 集成。

15.1 采集 SDK:契约与双通道发射器

# lawsight_flywheel/contract.py
from dataclasses import dataclass, field, asdict
import time, uuid, json
FEEDBACK = {"MODIFY_MAPPING","REJECT_OUTPUT","ADOPT_OUTPUT",
            "ANNOTATE","CONSTRUED_TERM"}
HINT = {"MODIFY_MAPPING":0.80,"REJECT_OUTPUT":0.80,
        "ADOPT_OUTPUT":0.70,"ANNOTATE":0.75,"CONSTRUED_TERM":0.80}
@dataclass
class FlywheelEvent:
    event_type: str
    repo: str
    tenant_id: str
    user_id: str
    matter_id: str = ""
    business_line: str = ""
    stage: str = ""
    agent: str = ""
    payload: dict = field(default_factory=dict)
    provenance: dict = field(default_factory=dict)
    trace_id: str = ""
    event_id: str = field(default_factory=lambda: str(uuid.uuid4()))
    occurred_at: int = field(default_factory=lambda: int(time.time()*1000))
    schema_version: str = "1.0"
    def validate(self):
        if self.event_type not in FEEDBACK | {"RATE_OUTPUT","TRAJECTORY",
                "GATE_RESOLVED","VERIFICATION","ERROR_PATTERN"}:
            raise ValueError('unknown event_type')
        if not self.tenant_id or not self.user_id:
            raise ValueError('tenant_id/user_id required (V3)')
        if self.user_id.lower() in {"default","system",""}:
            raise ValueError('placeholder user_id rejected')
        return self
    @property
    def confidence_hint(self):
        return HINT.get(self.event_type, 0.0)
    def to_json(self):
        return json.dumps(asdict(self), ensure_ascii=False)
# lawsight_flywheel/emitter.py
import json, os, pathlib, threading
class Emitter:
    """双通道: Redis Stream 优先,失败降级本地 jsonl 信标。"""
    def __init__(self, redis=None, beacon_dir="data/flywheel_beacon",
                 stream="wf:flywheel_events"):
        self.redis = redis
        self.stream = stream
        self.beacon_dir = pathlib.Path(beacon_dir)
        self.beacon_dir.mkdir(parents=True, exist_ok=True)
        self._lock = threading.Lock()
    def emit(self, ev):
        ev.validate()
        data = ev.to_json()
        if self.redis is not None:
            try:
                self.redis.xadd(self.stream, {"e": data},
                                maxlen=100000, approximate=True)
                return
            except Exception:
                pass  # 静默降级,不影响业务
        with self._lock:
            f = self.beacon_dir / f"{ev.event_id}.jsonl"
            f.write_text(data + "\n", encoding="utf-8")
    def replay_beacons(self):
        """重启后补传未回传信标(幂等)。"""
        for f in self.beacon_dir.glob("*.jsonl"):
            try:
                self.redis.xadd(self.stream,
                                {"e": f.read_text("utf-8").strip()},
                                maxlen=100000, approximate=True)
                f.unlink()
            except Exception:
                break

15.2 置信度引擎

# flywheel_plane/confidence.py
from dataclasses import dataclass
LEVELS = [(0.30,"L0"),(0.50,"L1"),(0.80,"L2"),(0.95,"L3"),(1.00,"L4")]
def level_of(c: float) -> str:
    lvl = "L0"
    for thr, name in LEVELS:
        if c >= thr - 1e-9:
            lvl = name
    return lvl
class ConfidenceEngine:
    """noisy-OR 累积,独立证据去重,饱和于 1。"""
    def __init__(self, store):
        self.store = store  # 记录已计权证据指纹
    def accumulate(self, edge_uid, conf, hint, evidence_key, source):
        if source == "precedent_anchor":
            return 1.0, "L4"
        if self.store.seen(edge_uid, evidence_key):
            return conf, level_of(conf)  # 重复操作不重复计权
        w = hint if source == "expert_correction" else 0.50
        new = 1.0 - (1.0 - conf) * (1.0 - w)
        new = min(new, 1.0)
        self.store.mark(edge_uid, evidence_key)
        return new, level_of(new)
    def decay(self, conf, level, age_days, referenced):
        if level in ("L3","L4") or referenced:
            return conf  # 专家/先例知识不衰减
        half_life = 180.0
        return conf * (0.5 ** (age_days / half_life))

15.3 冲突裁决

# flywheel_plane/conflict.py
from enum import IntEnum
class Verdict(IntEnum):
    KEEP_NEW = 1
    KEEP_OLD = 2
    ESCALATE = 3
class ConflictArbiter:
    """优先级:时效 > 先例 > 置信级 > 多源 > 专家仲裁。"""
    def resolve(self, new, old):
        # R-VER-01 时效优先
        if new.effective_from and old.effective_from \
           and new.effective_from != old.effective_from:
            return (Verdict.KEEP_NEW if new.effective_from > old.effective_from
                    else Verdict.KEEP_OLD)
        if new.conf_level == "L4" and old.conf_level != "L4":
            return Verdict.KEEP_NEW
        if old.conf_level == "L4" and new.conf_level != "L4":
            return Verdict.KEEP_OLD
        if new.confidence != old.confidence:
            return (Verdict.KEEP_NEW if new.confidence > old.confidence
                    else Verdict.KEEP_OLD)
        if new.independent_sources != old.independent_sources:
            return (Verdict.KEEP_NEW if new.independent_sources > old.independent_sources
                    else Verdict.KEEP_OLD)
        return Verdict.ESCALATE  # 同级冲突挂起,推送资深律师

15.4 GraphPatch 与 KG 客户端

# flywheel_plane/kg.py
from dataclasses import dataclass, field
@dataclass
class GraphPatch:
    patch_id: str
    tenant_id: str
    source_event_id: str
    ops: list = field(default_factory=list)  # {op,node/edge,before,after}
    reason: str = ""
    author: str = ""
class KGClient:
    """Neo4j 事务写入,软删除 + 版本链,幂等。"""
    def __init__(self, driver):
        self.driver = driver
    def apply(self, patch: GraphPatch):
        with self.driver.session() as s:
            s.execute_write(self._tx, patch)
    def _tx(self, tx, patch):
        for op in patch.ops:
            if op["op"] == "add_edge":
                tx.run(
                    "MATCH (a {uid:$a, tenant_id:$t}),(b {uid:$b, tenant_id:$t}) "
                    "MERGE (a)-[r:%s {uid:$uid}]->(b) "
                    "SET r.confidence=$c, r.conf_level=$l, r.source=$src, "
                    "     r.provenance=$prov, r.version=$v, r.effective_to=NULL"
                    % op["rel"],
                    a=op["a"], b=op["b"], t=patch.tenant_id, uid=op["uid"],
                    c=op["confidence"], l=op["conf_level"], src=op["source"],
                    prov=op["provenance"], v=op["version"])
            elif op["op"] == "soft_delete":
                tx.run(
                    "MATCH ()-[r {uid:$uid, tenant_id:$t}]-() "
                    "SET r.effective_to=$now, r.superseded_by=$by",
                    uid=op["uid"], t=patch.tenant_id,
                    now=op["now"], by=op.get("superseded_by"))
    def retrieve(self, tenant_id, anchor_uid, min_level=2, hops=3):
        q = ("MATCH (e {uid:$uid, tenant_id:$t})<-[r]-(f) "
             "WHERE r.conf_level >= $ml AND r.effective_to IS NULL "
             "RETURN f, r ORDER BY r.confidence DESC LIMIT 50")
        with self.driver.session() as s:
            return list(s.run(q, uid=anchor_uid, t=tenant_id, ml=min_level))

15.5 飞轮引擎流水线

# flywheel_plane/engine.py
import json, asyncio
class FlywheelEngine:
    """五阶段: Collect→Extract→Validate→Merge→Serve, 幂等可重放。"""
    def __init__(self, store, extractor, validator, confidence,
                 arbiter, kg, vector, bus):
        self.store, self.extractor = store, extractor
        self.validator, self.confidence = validator, confidence
        self.arbiter, self.kg = arbiter, kg
        self.vector, self.bus = vector, bus
    async def run(self):
        async for ev in self.bus.consume("flywheel-engine"):
            try:
                await self.handle(ev)
                await self.bus.ack(ev)
            except Exception as e:
                await self.bus.nack(ev, str(e))  # 有界重试后进死信
    async def handle(self, ev):
        if self.store.exists(ev["event_id"]):
            return  # 幂等
        self.store.save_event(ev)                    # Collect
        if ev["event_type"] not in {"MODIFY_MAPPING","REJECT_OUTPUT",
                "ADOPT_OUTPUT","ANNOTATE","CONSTRUED_TERM"}:
            self.bus.route_trajectory(ev)            # 轨迹分流
            return
        patch = await self.extractor.to_patch(ev)    # Extract
        if not self.validator.check(patch, ev):      # Validate
            self.store.reject(patch, "validation_failed")
            return
        patch = self.govern(patch, ev)               # Merge
        self.kg.apply(patch)
        self.vector.upsert_patch(patch)
        self.store.save_patch(patch)
        self.bus.emit_internal("knowledge_merged", patch)  # Serve
    def govern(self, patch, ev):
        for op in patch.ops:
            if op["op"] != "add_edge":
                continue
            old = self.kg.find_edge(op["uid"])
            if old and self._conflicts(old, op):
                v = self.arbiter.resolve(op, old)
                if v.name == "KEEP_OLD":
                    op["op"] = "noop"; continue
                if v.name == "ESCALATE":
                    self.bus.escalate(patch); op["op"] = "noop"; continue
            c, l = self.confidence.accumulate(
                op["uid"], old.confidence if old else 0.0,
                ev["confidence_hint"],
                evidence_key=f"{ev['matter_id']}:{ev['user_id']}:{op['uid']}",
                source=ev["payload"].get("source","expert_correction"))
            op["confidence"], op["conf_level"] = c, l
        return patch
    def _conflicts(self, old, new):
        return old.get("predicate") != new.get("predicate")

15.6 GraphRAG 检索器

# flywheel_plane/graphrag.py
from dataclasses import dataclass
@dataclass
class EvidencePack:
    known_facts: list   # L3+
    few_shot: list      # L2
    constraints: list   # L4
    provenance: list
class GraphRetriever:
    def __init__(self, kg, vector, reranker, cache):
        self.kg, self.vector = kg, vector
        self.reranker, self.cache = reranker, cache
    def retrieve(self, tenant_id, anchors, query, critical_date=None):
        key = self._cache_key(tenant_id, anchors, query)
        if (hit := self.cache.get(key)) is not None:
            return hit
        graph_hits = []
        for uid in anchors:                      # 图遍历优先
            graph_hits += self.kg.retrieve(tenant_id, uid, min_level=2)
        vec_hits = self.vector.search(           # 向量辅助
            query, filter={"tenant_id": tenant_id, "conf_level_gte": 2},
            limit=30)
        fused = self._rrf(graph_hits, vec_hits, k=60)    # RRF 融合
        if critical_date:                        # 时效过滤
            fused = [h for h in fused if self._effective(h, critical_date)]
        ranked = self.reranker.rerank(query, fused)[:20] # 争点级重排
        pack = self._assemble(ranked)            # 三段式装配
        self.cache.set(key, pack, ttl=300)
        return pack
    def _rrf(self, *lists, k=60):
        scores = {}
        for lst in lists:
            for rank, h in enumerate(lst):
                scores[h.uid] = scores.get(h.uid, 0) + 1.0/(k+rank+1)
        return sorted({h.uid: h for lst in lists for h in lst}.values(),
                      key=lambda h: scores[h.uid], reverse=True)
    def _assemble(self, hits):
        pack = EvidencePack([], [], [], [])
        for h in hits:
            item = {"text": h.text, "conf": h.confidence,
                    "prov": h.provenance}
            if h.conf_level == "L4": pack.constraints.append(item)
            elif h.conf_level == "L3": pack.known_facts.append(item)
            else: pack.few_shot.append(item)
            pack.provenance.append(h.provenance)
        return pack

15.7 评估器与门禁

# flywheel_plane/evaluator.py
class EvalRunner:
    def __init__(self, golden, retriever, metrics):
        self.golden, self.retriever, self.metrics = golden, retriever, metrics
    def run(self, tenant_id, test_set_version):
        results = []
        for t in self.golden.load(test_set_version):
            pack = self.retriever.retrieve(tenant_id, t.anchors, t.query)
            hit = self._core_hit(pack, t.expected_core)   # Recall@50
            ndcg = self._ndcg(pack, t.graded)             # nDCG@10
            results.append({"test_id": t.test_id, "hit": hit, "ndcg": ndcg})
        m = self.metrics.aggregate(results)
        return m
class GateKeeper:
    THRESHOLDS = {"recall_delta": -0.01, "ndcg_delta": -0.01,
                  "citation_accuracy": 1.0, "hallucination_max": 0.5}
    def decide(self, current, baseline, correction_pass):
        if current["recall"] - baseline["recall"] < self.THRESHOLDS["recall_delta"]:
            return False, "Recall@50 劣化超限"
        if current["ndcg"] - baseline["ndcg"] < self.THRESHOLDS["ndcg_delta"]:
            return False, "nDCG@10 劣化超限"
        if current["citation_accuracy"] < 1.0:
            return False, "引用准确率未达 100%"
        if not correction_pass:                # 黄金修正集硬约束
            return False, "黄金修正集低于 champion"
        return True, "passed"

15.8 八仓库接入示例(Step1-4)

接入是旁路钩子,不改业务逻辑。以 Step1-4 的 annotate(律师改判)为例,在既有 edit_lineage 记录后旁路发射 FlywheelEvent:

# Step1-4 backend/app/step4.py 接入示例(后置旁路)
from lawsight_flywheel import FlywheelEvent, Emitter
_emitter = Emitter(redis=app_redis,
                   beacon_dir="data/flywheel_beacon")
def annotate(m, unit_id, kind, rewritten_text, actor):
    unit = _do_annotate(m, unit_id, kind, rewritten_text, actor)  # 原逻辑
    # —— 飞轮旁路采集(失败不影响业务)——
    try:
        etype = {"accept":"ADOPT_OUTPUT","reject":"REJECT_OUTPUT",
                 "rewrite":"MODIFY_MAPPING"}[kind]
        ev = FlywheelEvent(
            event_type=etype, repo="step14",
            tenant_id=m.tenant_id, user_id=actor,
            matter_id=m.id, business_line=m.business_line,
            stage="CP-10", agent="step4",
            payload={"unit_id":unit_id,"old":unit.old_verdict,
                     "new":unit.verdict,"rewritten":rewritten_text,
                     "source":"expert_correction"},
            provenance={"quote":unit.quote,"hash":unit.quote_hash,
                        "deeplink":unit.deeplink},
            trace_id=m.trace_id)
        _emitter.emit(ev)
    except Exception:
        log.warning("flywheel emit skipped", exc_info=True)
    return unit

其余仓库同理:deep-analysis 在落 Finding 处发 VERIFICATION、FTO 在 resolve_gate 处发 GATE_RESOLVED/MODIFY_MAPPING、workdsh 复用已有 harness task.end 钩子发 TRAJECTORY、legal-cases 在校验器出口发 VERIFICATION、design/cias 在评分/审计落库处发对应事件。所有钩子均为 try/except 包裹的旁路,采集失败绝不中断业务——这是「联邦而非重建」原则在代码层的体现。

第十六章 冷启动与实施路线图

16.1 三阶段总览

实施分三阶段,遵循「先底座后闭环、先试点后全量、先离线后在线」的节奏,避免一次性建设成本劝退团队。表 16-1 给出三阶段的目标、交付物与北极星指标。
表 16-1 三阶段路线图

阶段 时间 核心交付 北极星目标
冷启动期 第 1—3 月 Schema 落地/存量入图/采集 SDK/两线试点/评估工具链 命中率≥30%、修正率≤50%
成长期 第 4—12 月 七线全量/置信度与校验器全开/RSI 联邦/A/B 与门禁 命中率≥70%、修正率≤25%、L2+≥40%
成熟期 第 13 月+ 跨线知识迁移/自动进化/公开基准/质量外化 命中率≥85%、修正率≤15%、成功率≥93%

16.2 冷启动期(第 1—3 月)

第 1—2 周:搭建飞轮平面骨架(FastAPI + lawsight_storage)、Neo4j/Qdrant 接入、Schema 与索引落地、评估工具链(先覆盖检索层指标,不依赖人工、反馈快)。第 3—6 周:采集 SDK 复制到八仓库、Step1-4 与 deep-analysis 两线试点接入(旁路钩子)、存量资产入图(427 类案/1549 向量/18 事务)。第 7—10 周:置信度引擎与校验器上线、GraphRAG 检索服务供试点调用、黄金修正集首批构建。第 11—13 周:两线试点跑通完整闭环、离线回归基线建立、冷启动验收。冷启动期的关键是「先让飞轮转起来」——哪怕命中率只有 30%,也要验证「反馈→入图→召回→命中」的闭环真实有效。

16.3 成长期(第 4—12 月)

七线全量接入(FTO/design/cias/legal-cases/workdsh)、置信度与冲突裁决全开、RSI 联邦扩展(跨仓库策略注册/A/B/黄金修正集门禁)、发布门禁 CI 作业化、在线埋点与离线相关性校验。每季度在 LeCaRDv2 跑全量回归并公开内部报告。成长期的关键是「让飞轮转得快且稳」——命中率从 30% 爬升到 70%,同时引用校验通过率≥95%、策略 A/B 每季≥6 个晋升。此阶段需重点防范测试集漂移(在线信号校验)与知识污染(安全闸门)。

16.4 成熟期(第 13 月+)

跨线知识迁移常态化(等同原则/类案先例/检索配方跨线复用)、自主级别向 L3 演进(低风险策略自动应用)、对抗集自我强化(每次线上失败转化为样本)、质量主张外化(公开基准报告、可复现事实)。成熟期的关键是「让飞轮自我强化」——系统不仅越用越好,而且能自己发现薄弱点、自己生成改进、自己验证上线,人类专家聚焦于高价值仲裁与新领域拓展。

16.5 团队与分工

建议设飞轮平台组(3—4 人:沉淀/治理/推理/评估服务)、业务接入组(每仓库 1 人兼职:旁路钩子与信号映射)、标注与评估组(律师协作者背对背双人标注 + 资深律师仲裁)、安全与运维组(复用现有安全平面团队)。平台组负责共享底座,业务组负责联邦接入,标注组负责黄金集与修正集质量,安全组负责治理闸门。分工延续「联邦而非重建」:各仓库引擎团队不需重写业务,只需接入旁路。

16.6 验收标准

每阶段验收以可计算指标为准(表 2-1),辅以工程验收:(1)闭环可回放——任选一条历史反馈,可还原其入图→召回→命中全链路;(2)幂等可重放——重复消费同一事件不重复计权,断点续跑不丢失;(3)租户隔离可验证——跨租户检索零泄漏;(4)门禁可拦截——构造劣化变更,门禁确实阻断;(5)安全可审计——任何图状态/策略状态可复现可问责。工程验收与指标验收同等重要,防止「指标好看但闭环脆弱」。

第十七章 风险与对策

17.1 风险矩阵

表 17-1 列出主要风险、后果与对策。风险分为知识质量、策略安全、工程稳健、组织采纳四类,每类都有已设计的工程闸门而非仅靠流程约束。
表 17-1 风险与对策

风险 后果 对策
知识污染(恶意/错误反馈入图) 图谱被虚假结论误导 G1 注入检查+L2 分类器+来源强制+置信度闸门(§13.3/6.5)
测试集漂移 离线提升在线持平 在线信号相关性校验+季度黄金集更新(§9.6)
冷启动空图 初期命中率低、价值不显 存量资产入图+两线试点先转起来(§14.6/16.2)
LLM 抽取幻觉 编造案号法条入图 规则优先+受约束抽取+引用校验未过不升 L2(§7.3/6.5)
租户泄漏 跨租户经验外泄 tenant_id 全链路强制过滤+权限感知检索(§13.2)
策略失控 自我修改进化退化 L2 人工批准+沙盒+champion 恒定+错误率熔断(§10.6/10.7)
检索性能瓶颈 任务时延上升 邻域限跳+版本哈希缓存+P95≤2s(§8.6)
成本失控 Token/算力超支 预算熔断+成本门禁环比升≤10%(§9.5)
组织采纳不足 专家不愿反馈、飞轮断燃料 旁路零侵入+修正即沉淀可见收益+标注规范减负(§15.8/9.7)

17.2 残余风险与边界

明示三点边界:(1)跨领域类推检索仍是短板——图谱沉淀的是已验证结论,对全新领域的零样本类推能力有限,需人工拓展本体;(2)飞轮不替代法律判断——所有结论性输出保留人工审查,L4 先例锚定也需生效裁判支撑,系统不做终局法律决定;(3)知识时效依赖人工维护——法条修订的 effective_from/to 需及时更新,否则时效裁决可能滞后,建议与法规更新源(威科先行 MCP)联动。这些边界不是缺陷而是诚实的设计约束,与白皮书「方案两点边界需明示」的精神一致。

第十八章 总结

本方案完成了从平台现状盘点到双飞轮系统设计的完整闭环,核心结论是:Lawsight 平台已具备丰富的飞轮原始要素——workdsh 的 RSI 自我进化、Step1-4 的九道门禁与哈希链、deep-analysis 的 Finding 评估单元、FTO 的三关卡与改判、legal-cases 的引用校验与学术基准、design/cias 的比对与审计——缺的不是引擎,而是把引擎联邦起来的平台级闭环。本方案以「联邦而非重建」为原则,用统一事件总线把八仓库的异构信号归一为 FlywheelEvent,用统一知识图谱把专家经验沉淀为可溯源、可置信度治理、可跨线复用的图资产,用 GraphRAG 把沉淀兑现为下次任务的命中率,用评估基准与发布门禁保证「越用越好」且「越用越稳」,用 RSI 联邦把运行轨迹进化为可治理的策略。
方案的两条飞轮相互啮合:知识飞轮让系统越用越懂法律(命中率 30%→85%、修正率 50%→15%),策略飞轮让系统越用越会干活(成功率 80%→93%、Token 环比降 20%);两者共享能力图谱与评估信号,使跨业务线的知识迁移与策略复用成为平台独有的复利。全部设计不触碰模型权重,能力增长完全来自图谱与策略热配置两个外部载体,从根本上保证了可溯源性与合规性。
方案配有可运行级实现:采集 SDK、置信度引擎、冲突裁决、GraphPatch 事务写入、五阶段飞轮引擎、GraphRAG 检索器、评估门禁与八仓库旁路接入示例均给出具体代码;存储层复用平台工业化栈(MySQL/Neo4j/Qdrant/MinIO/Redis)并给出 DDL;安全治理继承中央安全平面全部能力。三阶段路线图(冷启动/成长/成熟)以可计算指标与工程验收双轨推进,确保飞轮在真实生产流量中持续转动。最终目标:让每一次律师修正都不再蒸发,让每一个智能体都站在平台全部历史经验之上工作——专利事务输入,可辩护的答案输出,且这个答案一次比一次更好。

附录 A 八仓库代码级接入证据

本附录基于对八仓库后端代码的深度阅读(非仅设计文档),给出每个仓库的智能体流水线、反馈信号源、评估校验、存储与计量的精确代码位置(file:line),作为第四章信号映射与第十五章接入实现的证据底座。路径均相对各仓库 backend 根。

A.1 Step1-4-Agentic-Workflow(8300)

流水线:engine.py:25 STAGE_ORDER 14 阶段 + _GATE_AFTER 9 道门禁(C1—C4/CP-07—11);Step1 A1—A8(step1.py)、Step2 四源并行+STU 看板(step2.py,阈值 0.14/2 轮)、Step3 九阶段证据映射(step3.py)、Step4 结论装配(step4.py)。提示词集中于 i18n.py 双语元组(s3.mapper:497、s4.opinion:705)。存储三表(persist.py:31,MySQL lawsight_step14):matters(state 全量 JSON)、events(prev_event_hash/this_event_hash 哈希链,PK(matter_id,seq))、specs。实测 18 事务/662 事件/58 说明书。反馈信号:annotate(step4.py:453,rewrite→lawyer_written+edit_lineage)、do_signoff 双指纹(:562)、emit 哈希链(store.py:166,audit_verify:240)。质量门禁四指标(step3.py:544:逐字 100%/精确≥99.5%/有效判定≥95%/审计链 100%),verify_citation 偏移+哈希+包含三重校验(verify.py:102,模糊锚定≥0.80)。mem0 记忆(memory.py):Qdrant wf_project_memory embedding-3/2048 维,创建与 CP-11 签发双写(record_request_memory:318/record_result_memory:332)。缺口:记忆为文本摘要非结构化图谱、解释卡 calibration 为演示数据(i18n.py:732)、无跨事务评估集/提示词自动优化。

A.2 lawsight-deep-analysis(8001)

智能体(app/agents/):claim_parser(三档解释 broad/narrow/proposed)、search_strategist(三视角)、evidence_hunter(智慧芽 P018/P012+GLM 网页深采)、element_mapper(三态 met/not_met/uncertain+逐字约束)、CitationVerifier(element_mapper.py:72:包含→pass、difflib≥0.97→warn、fail 且 met→降 uncertain)、invalidity_reasoner(贪心集合覆盖 beam24、§102/§103 KSR)、report_generator、intent_agent。编排=黑板状态机(orchestrator.py:162 run_invalidity/:306 run_infringement),完成→awaiting_review(:444),steer 四动作(routers/runs.py:124),resume 以 bb.elements 为检查点。六表(models.py:26):Run(blackboard JSON)、AgentStep(duration_ms、status ok|error|degraded)、Conversation、Upload、ChatMessage、Finding(element_id/reasoning_type/statement/confidence/verified/citations/model_version/score)。Finding.score 为规则打分(orchestrator.py:260,1.0/0.8/0.6/0.0)。token:enterprise/token_metrics.py 写共享 wf:llm_tokens+Prometheus。缺口:EventBus 仅内存环形 2000(events.py:24,重启即失)、人工反馈仅 awaiting_review+steer 无评分/改判落库、无跨 run 记忆、score 硬编码非学习。注:stilha-report/ 是调研 docx 生成脚本(Node docx)非运行时模块。

A.3 lawsight-workdsh(8002)

RSI 子系统(app/rsi/,16 模块/13 表):_auto_cycle task.end→_on_task_end(collector.py:205)→轨迹+L2/L3+知识+记忆+异步 L4→count≥8 且 autonomy≥2→run_cycle;rsi_cycles.phase perform→evaluate→modify→redeploy(loop.py:31)。L4 judge 1—5 分(collector.py:145,≥4.5→长期记忆 importance 0.8)。evaluator 阈值:成功率<0.85/延迟>20s/评审<4.0/token>6000/L1<0.6,六优化器(提示遗传/上下文 MCE/工具/记忆/工作流 ε-greedy 0.3/代码插件),meta-trust=(wins+1)/(total+2)×avg_gain,rsi_config 热配置,sha1(task_id)%2 A/B,challenger>champion+0.05 且样本≥6/臂≥4→晋升。autonomy L1—L4 默认 2,L1/L2 挂起不写配置;governance AST 白名单+python -I 沙盒 8s;monitor 30s/错误>0.3→回滚+熔断。四层记忆(短/工作/长/元),score=relevance×0.7+importance×0.3,阈值 0.15 top4,遗忘 30d 且 importance<0.4。harness Tool/toolContext(harness.py:30),execute_tool 对 mcp__lawsight* 强制 user_id(:133),6 钩子,400k 字符压缩。缺口:rsi_knowledge 存而不用、进化仅全局配置、定时任务绕过采集、评估 token_cost 硬编码 900、A/B 仅提示层、无离线评估集。

A.4 lawsight-fto(8005)

七阶段(workflow.py STAGES:24,_exec_stage:275 反射取 handler):S1 _stage_s1_feature:309、S2 _stage_s2_search:367(中英分路 TACD:382/零命中中泛化:400/以图搜图:421)、S3 _stage_s3_filter:467(LLM 分档失败全 medium:507)、S4 _stage_s4_mapping:550(发明 _analyze_one:804/外观 _analyze_design_one:594,每篇子检查点:576)、S5 _stage_s5_risk:849(规则兜底:889)、S6 _stage_s6_report:910(总体判定纯规则:913)、S7 _stage_s7_qa:1105,检查点 _save:261,恢复 STAGES[idx+1:](_run:199),S4 跳过 pn in analyses:557;rerun_task:1151(清空:1176/run_count+1:1199)。三关卡 open_gate:89、resolve_gate(task_id,user_id,action,comment):120(approve feature_confirmed:129/risk_confirmed:131/gate_final 签发:134;reject 回退 s5_risk:158),REST /review api.py:502 与对话共用。对话工具 26 个(TOOLS_SPEC dialog.py:62,TOOL_IMPL:437),写入/干预 14 个:override_risk:370(原地覆盖 overall_level:378+reviewer_override 字符串:379)、update_feature:206、request_report_edit:398(置 s5_risk:405)、rerun_patent:254。五表(store.py:17 MySQL/95 SQLite):tasks(checkpoint/state/gate/signed_by/run_count)、events、llm_calls、chat_messages、harness_runs(steps 截断 60000:356)。token_metrics.record:62 双写 SQLite+XADD wf:llm_tokens:91。Harness input_guard:36/output_guard:45(幻觉 PN)/Budget:56(3 步/60000 token)。缺口:QA issues 硬置空:1145 致 qa_status 恒 passed、S7 重算 overall 漏 high:1137、无 confidence 字段、改判前值丢失、无评分端点、业务事件未进流(SSE 轮询 DB)。

A.5 lawsight-design-patent(8123)

backend 位于 lawsight/backend/。编排 engine.py:108 build_graph/:173 execute_case,节点链 parse_patent→ingest_asset→search→status_verify→view_align→feature_diff→prior_art→visual_score→(A:report | B:risk_ranking→distinct_feature→design_around→regression→fto_report)→hitl,模型 glm-5.3-flashx(config.py:23),多模态 glm.vision(glm.py:66,temperature=0.0:41)。FeatureDiff(path_a.py:491,降级 _fallback:549);compare_views(vision.py:241,配准 align_pair:75 ORB+RANSAC、shape_similarity:128 Hu0.35+IoU0.65、smart_embedding:224 CLIP 可选、VIEW_WEIGHTS:181);VisualScore(path_a.py:576,_score:629,WEIGHTS:627 shape.40/novelty.30/pattern.20/color.10,_grade:655 四档 0.80/0.70/0.60)。反馈:review(routes.py:221→state.reviews:226,ReviewRequest schemas.py:142 verdict+5 类 decision)、select_scheme(routes.py:237→add_design_version:243)、image_search_flag(routes.py:398,todo/dismiss/confirm/none→hit_flag:410+add_audit:413)。benchmark.py:23 8 对样例,方向一致率:60≥80% 达标(README 8/8)。九表(store.py:22 MySQL/63 SQLite):t_case(state LONGTEXT)、t_audit、t_patent、t_feature_matrix(commonality/distinctiveness/observability_weight/functional_constraint)、t_score(s_overall/s_novelty/risk_grade)、t_avoid_scheme(est_risk_drop/regression_before/after)、t_chat、t_design_version(version/owner/changed_parts/reason/approved_by)、t_image_search。MinIO storage.py:33 prefix=design。token_bus.emit_usage:54→XADD:72。法条库 law_kb.py:9 关键词串匹配(非向量)。缺口:无特征矩阵/评分/整体视觉人工改判端点、WEIGHTS/_grade/est_risk_drop 硬编码、回归非真实复测(_remeasure:171 仅 mock)、无黄金集/CI、zhihuiya.py:172 附图下载裸 http.get(SSRF)。

A.6 copyright-detective / cias(8000)

backend 位于 cias/backend/。Plan-and-Execute A0 编排+A1—A13(engine.py:9),run_case:240,_step 检查点:128,_gate 闸门 45,ownership_gate 阻断三态:217。img_sim_tool(main.py:827)→compare_images(image_pipeline.py:456)五级级联:L1 pHash 汉明≤8:75、L2 分块匹配≥0.45:97、L3 统计余弦 art=0.80:153、LE 元素级 LAB k-means:165+Sinkhorn-OT:237+ΔE00/质心/IoU→五类:252、共同错误探针 NCC≥0.90:283(≥3 处 shared_fragment_signal:321)、LV VLM 仅叙述 advisory:406。六档分级+human_review_recommended:474,举证图 _draw_evidence:351。侵权认定 apply_rules R1—R5(engine.py:143,infringe/non_infringe/insufficient+escalation_required),shared_fragment fail-closed 强制存疑:267。反馈:pin_element(main.py:530,confidence=1.0,审计 element_pinned:565)、unpin 恢复 pin_backup:506、add_evidence:483(EV-Uxx)、case_chat:590(chat_ops.py:38 意图路由 pin/unpin/add_evidence/rerun/explain/attack)。审计链 store.audit:150(同事务链头 prev→sha256 排序 JSON[:32]→INSERT cias_audit,append-only,无 verify)。三表(store.py:16):cias_cases(payload LONGTEXT 整包)、cias_audit、cias_user_memory(recent_cases[8]/prefs/notes,仅 recent_cases 自动写 chat_ops.py:159)。上传 sha256[:16] 命名→MinIO cias/uploads/。token_metrics.publish:90→XADD wf:llm_tokens。费用争议未实现(E6「损害与因果」可选且排除判定,elements_cn.json:20;无法率/损害计算)。缺口:无相似度分级/结论直接改判端点、无律师签发、红队采纳未采集、费用线空白、VectorStore 未用、demo_note 预期标注(main.py:995)可作黄金集雏形。

A.7 lawsight-legal-cases(8111)

backend 位于 backend/。四路召回+RRF 已实现:BM25 纯 Python bigram 演示级(case_store.py:46,k1=1.5/b=0.75)、dense embedding-3/2048 维失败退化哈希向量(client.py:160)、法条锚 statute_index 反查:307、图扩展内存邻接「同案由+1/共同法条+2」:330(非图库);RRF_K=60(hybrid.py:18),重排为 LLM 争点级交叉打分 0—100(hybrid.py:114,非 bge-reranker,bge 仅设计文档)。引用校验器 verifier.py:108:编号存在:115+去空白包含性:127+SequenceMatcher 相似度:128+内置引用:133(无偏移/哈希);拦截软降级 quality_badge(engine.py:216,≤2 轮重生成,非硬阻断)。八表(db.py:25):tasks/checkpoints/events/token_usage(redis_ok 补发)/collected_items/kv/cases(case_number 二进制排序主键+payload)/laws(status/superseded_by 版本链)。VectorStore case_chunks/2048 维(case_store.py:153),实测 427 案/1549 向量(npz 直拷零 embedding,migrate_storage.py:38)。token_metrics.emit 拒绝占位 user(RESERVED_USERS:50,:103),_require_user(routes.py:27,空/占位 400、归属不符 403)。MCP McpAuthGate(main.py:92,LAWSIGHT_MCP_TOKEN+hmac),12 工具(mcp_server.py)。collect(routes.py:256→internet.py:91 web-search-pro+glm 结构化)。重大缺口:采纳/修正/否决/点击端点全无(仅设计)、无 LeCaRD/黄金集/Recall/nDCG 代码、检索演示级(实测 191 案 707 块)。

A.8 lawsight-security-plane(8200)

认证:issue_token HS256 sub=tenant:user(access.py:46),jwtlite.verify 纯标准库(sdk/jwtlite.py:28),角色 owner/editor/viewer/auditor/platform-admin(access.py:29,无 expert),require_role:88/own_resource 跨租户 403:100。G0 SecurityMiddleware off/warn/enforce(middleware.py:28),bootstrap.install:14。审计链 append(audit_chain.py:35,SHA256(prev+canonical))、verify 全链:63、anchor:76(应用层 WORM,零调用纯预留)。证据 freeze_evidence EV+sha[:16](audit_chain.py:110),evidence 表(store.py:60,无 task_id/tenant)。信标 POST /api/security/beacon/events(securityops.py:96,X-Beacon-Secret 恒时比较),SDK events.py 本地 jsonl+fire-and-forget 2s(sdk events.py:28,detail 截断 300);缺口 main.py:86 access.beacon_bucket 未定义(仅 bucket:147)→500。运营中心 repos.py:端口注册:37、_child_env:401 透传 16 存储变量+密钥、resolve_security_mode:161、start/stop 白名单无 shell:499。LLM 网关 glm-cloud-zr 零保留(llm_gateway.py:18),chat 唯一出口+QuotaFuse 三层配额(任务 30 万/租户日 200 万/全局月 3000 万)+dlp_mask:136。SDK:netguard guarded_fetch_sync 逐跳复检(netguard.py:49)/jail_path:128/validate_uploaded_bytes:137;firewall G1 规则:12+L2 classify_injection_sync(input_firewall.py:67,阈值 0.85/0.60);mcpguard STDIO_ALLOW python -I/node:9。存储 SDK:database qmark_to_format 引号状态机:55/tx:394/columns:469;objects full_key:57/local 囚笼:66/presign_get:213;vector uuid5:30/payload 等值过滤:132/exists_ids 幂等:204,十二表(store.py:29)。飞轮可继承:install 一行装配、存储三件套零改动新建 lawsight_flywheel/ObjectStore(prefix=flywheel)/VectorStore(flywheel_kg)、REPOS 加一条即获启停。需扩展:expert 角色、权限感知检索(平面未用 VectorStore,绿地)、evidence 扩列、anchor 接线、beacon_bucket 修复、QuotaFuse 集群换 Redis。

附录 B 代码级缺口与修复清单

本附录把深度代码阅读发现的缺口与缺陷整理为可执行的修复 backlog,按优先级排序:P0 阻断飞轮采集或涉及安全,须在冷启动期(第 1—3 月)首批修复;P1 反馈信号缺失或采集断点,决定飞轮是否有燃料,须在两线试点前补齐;P2 治理与评估增强,在成长期逐步落地。每条均给出精确代码位置(file:line)、飞轮影响与修复对策,与第四章信号映射、第十三章安全治理、第十五章实现互为索引。
表 B-1 代码级缺口与修复 backlog(P0 阻断 / P1 断点 / P2 增强)

编号 仓库·代码位置 问题 飞轮影响 修复对策 优先级
B1 security-plane main.py:86 access.beacon_bucket 未定义(仅 bucket:147),信标端点抛 AttributeError 返回 500 jsonl 信标通道断裂,双通道采集只剩 Redis 单腿 改为 access.bucket 或补 beacon_bucket 别名,加端点冒烟测试 P0
B2 fto workflow.py:1145 QA issues 硬置空列表,qa_status 恒 passed(:1146) 质量门禁失效,错误轨迹被当作合格样本喂养策略飞轮 真实聚合各阶段 issues,门禁不通过则阻断签发 P0
B3 fto workflow.py:1137 S7 重算 overall 漏 high 档(与 S6:918 判定不一致) 总体风险结论前后矛盾,改判信号失真 抽取统一判定函数 S6/S7 共用 P0
B4 design-patent zhihuiya.py:172 附图下载裸 http.get,未过 netguard SSRF 风险,违反平台统一出网约束 改用 netguard.guarded_fetch_sync 逐跳复检 P0
B5 fto dialog.py:378 override_risk 原地覆盖 overall_level,reviewer_override 仅存字符串(:379),改判前值丢失 无法构造 before/after 差分对,知识飞轮丢失最高价值信号 采集钩子捕获前值并发出 FlywheelEvent(附录 C.1) P1
B6 legal-cases routes.py 采纳/修正/否决/点击端点全无(仅设计文档) 检索飞轮无燃料,命中率无法度量增长 新增 adopt/correct/reject/click 端点并 emit(附录 C.4) P1
B7 design-patent routes.py 无特征矩阵/评分/整体视觉人工改判端点 行级修正无法采集,VisualScore 权重无从校准 新增 feature/score 改判端点并 emit(附录 C.3) P1
B8 cias main.py 无相似度分级/结论直接改判端点、无律师签发 结论修正与签发信号缺失,L4 先例锚定无来源 新增 verdict 改判与 signoff 端点并 emit P1
B9 deep-analysis routers/runs.py 人工反馈仅 awaiting_review+steer,无评分/改判落库 Finding 修正蒸发,score 硬码无法学习 落库 verdict/score 后 emit,Finding 接 KG P1
B10 security-plane store.py:60 evidence 表无 task_id/tenant 列 证据无法关联任务,无法租户隔离,权限感知检索缺基础 扩列 task_id/tenant_id 并迁移,检索强制过滤 P1
B11 security-plane access.py:29 角色仅 owner/editor/viewer/auditor/platform-admin,无 expert 专家反馈无权限载体,置信度升级缺主体 扩展 expert 角色与 require_role,反馈端点鉴权 P1
B12 security-plane audit_chain.py:76 anchor() 零调用纯预留,应用层 WORM 未生效 审计链可被篡改而无锚定证明 接线定期 anchor(对齐 Step1-4 哈希链签发) P2
B13 cias store.py:150 审计链 append-only 但无 verify 链完整性不可验证,弱于 Step1-4/FTO 补 verify 全链校验,纳入门禁 P2
B14 cias elements_cn.json:20 费用争议未实现(E6 损害与因果可选且排除判定,无法率/损害计算) 第七业务线空白,飞轮覆盖面缺一 绿地建设费率/损害计算引擎后接入 P2
B15 design-patent path_a.py:627 / path_b.py:128 WEIGHTS、_grade(:655)、est_risk_drop 硬编码 评分策略不可进化,策略飞轮无抓手 纳入 RSI 热配置,沙盒回归后 A/B 晋升 P2
B16 design-patent path_b.py:171 回归 _remeasure 仅 mock,非真实复测 规避设计效果不可验证,晋升门禁失真 接真实复测管线,回归集入黄金集 P2
B17 legal-cases case_store.py:46 BM25 纯 Python bigram 演示级;无 LeCaRD/黄金集/Recall/nDCG 代码 检索质量不可度量,离线提升无法证伪 接真实 BM25/ES,建 LeCaRD 黄金集与 nDCG 评估 P2
B18 workdsh app/rsi/ rsi_knowledge 存而不用、token_cost 硬编码 900、A/B 仅提示层 策略飞轮空转成本,门禁失真 接 KG ErrorPattern 驱动优化、真实成本计量、多层 A/B P2
B19 Step1-4 i18n.py:732 / memory.py 解释卡 calibration 为演示数据;mem0 记忆为文本摘要非结构化图谱 校准失真,记忆无法跨事务推理 真实校准数据,记忆结构化入 KG P2
B20 security-plane llm_gateway.py QuotaFuse 三层配额为进程内计数 多副本集群配额不一致,成本失控 换 Redis 原子计数,全月配额集群共享 P2

修复纪律:P0 四项是飞轮能否转起来的前置条件——信标通道(B1)与质量门禁(B2/B3)不修,采集到的就是断腿且失真的数据;SSRF(B4)不修则违反平台安全不变量。P1 七项决定燃料供给,须在试点业务线上线前完成,否则飞轮空转。所有修复遵循「联邦而非重建」:保留原引擎逻辑,仅以旁路钩子增采集、以扩列增隔离、以热配置增可进化性,不推翻已验证的比对/检索/RSI 引擎。

附录 C 仓库专属采集钩子代码示例

本附录给出四个最具代表性仓库的旁路采集钩子可运行级示例,与第十五章通用 SDK 配套。所有钩子遵循同一纪律:保留原有业务逻辑不变,仅在写入后追加一次 FlywheelEvent 发射;before/after 差分对是知识飞轮最高价值的燃料;user_id 必须是真实用户(拒绝占位,对齐 legal-cases RESERVED_USERS 与安全平面归属校验);confidence_hint 按信号强度给出起步置信(人工锁定 1.0、人工改判 0.95、采纳 0.80),最终等级由第六章置信度引擎累积裁决。代码中 Emitter/FlywheelEvent 来自第十五章 lawsight_flywheel SDK。

C.1 FTO override_risk:捕获改判前值(修复 B5)

# lawsight-fto/server/app/dialog.py — override_risk 旁路采集
# 原代码(:370)原地覆盖 overall_level(:378)+ reviewer_override 字符串(:379),前值丢失。
# 本钩子保留原覆盖逻辑,仅在写入后发射 before/after 差分对。
from lawsight_flywheel import FlywheelEvent, Emitter
_emitter = Emitter.from_env()   # 双通道: Redis Stream wf:flywheel_events + jsonl 信标
def override_risk(task_id: str, pn: str, new_level: str,
                  reason: str, user_id: str) -> dict:
    state = store.load_state(task_id)
    before = state["patents"][pn]["overall_level"]   # 关键: 先取改判前值
    # —— 原有覆盖逻辑保持不变 ——
    state["patents"][pn]["overall_level"] = new_level
    state["patents"][pn]["reviewer_override"] = reason
    store.save_state(task_id, state)
    # —— 新增: 把差分对沉淀为飞轮事件 ——
    _emitter.emit(FlywheelEvent(
        event_type="risk.override",
        repo="lawsight-fto", task_id=task_id,
        tenant_id=state["tenant_id"], user_id=user_id,  # V3 真实用户归属
        payload={"patent_number": pn, "before": before,
                 "after": new_level, "reason": reason},
        confidence_hint=0.95,          # 人工改判 L2 起步,可升 L3
    ))
    return {"ok": True, "before": before, "after": new_level}

C.2 cias pin_element:锁定差分对与满置信(关联 B8)

# copyright-detective/cias/backend/main.py — pin_element 旁路采集
# 原代码(:530)置 confidence=1.0 并写 pin_backup(:506)供 unpin 还原,审计
# element_pinned(:565)。
# 人工锁定是最高强度信号,confidence_hint=1.0 直接成为 L4 先例锚定候选。
from lawsight_flywheel import FlywheelEvent, Emitter
_emitter = Emitter.from_env()
def pin_element(case_id: str, element_id: str, user_id: str) -> dict:
    case = store.load_case(case_id)
    el = case["elements"][element_id]
    before = {"status": el["status"], "confidence": el.get("confidence")}
    case["pin_backup"][element_id] = before     # 原有: 备份以便 unpin 还原
    el["status"] = "pinned"
    el["confidence"] = 1.0                      # 原有: 人工锁定满置信
    store.save_case(case_id, case)
    store.audit(case_id, "element_pinned", {"element_id": element_id})
    _emitter.emit(FlywheelEvent(
        event_type="element.pin", repo="cias", task_id=case_id,
        tenant_id=case["tenant_id"], user_id=user_id,
        payload={"element_id": element_id, "before": before,
                 "after": {"status": "pinned", "confidence": 1.0}},
        confidence_hint=1.0,           # 人工锁定 → L4 候选(仍须校验器)
    ))
    return {"ok": True}

C.3 design-patent review:verdict 与 decision 沉淀(修复 B7)

# lawsight-design-patent/lawsight/backend/routes.py — review 旁路采集
# 原代码(:221)把 ReviewRequest(schemas.py:142,verdict + 5 类 decision)
# 追加到 state.reviews(:226)。
# 本钩子保留原逻辑,把 verdict/decision 映射为图关系候选并发射。
from lawsight_flywheel import FlywheelEvent, Emitter
_emitter = Emitter.from_env()
@router.post("/cases/{case_id}/review")
def review(case_id: str, req: ReviewRequest,
           user=Depends(require_user)):
    state = store.load_state(case_id)            # 原有逻辑保持不变
    state["reviews"].append(req.model_dump())    # 原有逻辑保持不变
    store.save_state(case_id, state)
    # 新增: accept → 采纳边候选;reject/correct → 改判边候选
    _emitter.emit(FlywheelEvent(
        event_type="design.review", repo="lawsight-design-patent",
        task_id=case_id, tenant_id=user.tenant_id,
        user_id=user.user_id,
        payload={"target": req.target, "verdict": req.verdict,
                 "decision": req.decision, "comment": req.comment},
        confidence_hint=0.80 if req.verdict == "accept" else 0.95,
    ))
    return {"ok": True}

C.4 legal-cases:新增采纳/修正/否决端点(修复 B6,绿地)

# lawsight-legal-cases/backend/routes.py — 原仅设计、代码缺失,本端点为绿地新增
# 复用 _require_user(:27,空/占位 400、归属不符 403)保证真实用户归属。
from lawsight_flywheel import FlywheelEvent, Emitter
_emitter = Emitter.from_env()
_HINT = {"adopt": 0.80, "correct": 0.95, "reject": 0.50}
@router.post("//tasks/{task_id}/citations/{cite_id}/feedback")
def citation_feedback(task_id: str, cite_id: str, action: str,
                      corrected_text: str = "",
                      user=Depends(_require_user)):
    assert action in _HINT
    task = store.load_task(task_id)
    cite = task["citations"][cite_id]
    before = cite["text"]
    if action == "correct":
        cite["text"] = corrected_text
        cite["lawyer_written"] = True        # 对齐 Step1-4 edit_lineage 语义
    cite["adoption"] = action
    store.save_task(task_id, task)
    _emitter.emit(FlywheelEvent(
        event_type="citation.feedback", repo="lawsight-legal-cases",
        task_id=task_id, tenant_id=user.tenant_id,
        user_id=user.user_id,
        payload={"cite_id": cite_id, "case_number": cite["case_number"],
                 "action": action, "before": before, "after": cite["text"]},
        confidence_hint=_HINT[action],
    ))
    return {"ok": True}

C.5 统一旁路装配:一行接入(继承安全平面 install 模式)

# 任一仓库 main.py — 一行装配飞轮采集,零侵入业务引擎
from lawsight_flywheel import bootstrap
bootstrap.install(app, repo="lawsight-fto")
# install 内部(对齐 security-plane bootstrap.install:14 与 repos._child_env:401):
# 1. 读取 LAWSIGHT_* 存储/Redis 环境变量(复用运营中心透传的 16 个存储变量)
# 2. 构造 Emitter: Redis Stream wf:flywheel_events + jsonl 信标双通道,event_id 幂等
# 3. 注册 G0 中间件之后的归属校验: 拒绝占位 user_id(对齐 RESERVED_USERS:50)
# 4. 信标 POST /api/security/beacon/events(X-Beacon-Secret 恒时比较,先修复 B1)
# 5. 新建 lawsight_flywheel 库 / ObjectStore(prefix=flywheel) / VectorStore(flywheel_kg)
# 装配后,C.1—C.4 的钩子即可把异构信号归一为 FlywheelEvent 汇入飞轮平面。

最近更新: 2026年11月11日 17:13:09
浏览: 25

[[total]] 条评论

添加评论
  1. [[item.time]]
    [[item.user.username]] [[item.floor]]楼
  2. 点击加载更多……
  3. 添加评论