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