技术决策
ADR-001:卓安Claw 技术选型与参考项目
本页目录
- 状态:Accepted
- 日期:2026-11-08
- 决策人:项目负责人 + A/B/C
- 关联:
docs/prototype/卓安Claw-原型设计方案-v1.0.md、docs/prototype/卓安Claw-原型开发三人分工与正式版衔接方案-v1.0.md
1. 背景
卓安Claw 是及锋内核上的律所定制版,目标是把刑事案件全生命周期(预约 → 建档 → 分诊 → 接诊 → 检查 → 诊断 → 方案 → 办案 → 复核 → 结案 → 归档 → 随访)做成可管理、可审计、可协作的系统。
约束:
- 7 家直营所(成都总所 + 深圳、昆明、重庆、北京、西安、西宁),约 200 人,约 1,000 件/年,单案平均约 1GB。
- 卓安私有云(阿里云专属 VPC、单租户),独立服务器,不使用及锋服务器。
- V1 不买 GPU:外部模型 API + 脱敏 + 审计;C 类敏感案卷不出私有云。
- 11/27 300 人会议演示,3 人团队,19 天(11/09–11/27)。
- 原型必须能演进为正式版,不能推翻重来。
2. 调研结论
GitHub 上没有可直接照搬的成熟律所业务系统:
NodineLegal/OpenLawOffice:38 star,最后推送 2016 年,已停更。OpenLaw核心库:2021 年已归档。legal-case-management搜索结果大多为 1–4 star 的课程/毕业项目。- 律所关键词下 stars 较高的项目是 AI 文档/Agent 工具(如
lavern、legalwork),不是业务管理系统。
因此本项目的策略是:自建法律领域层 + 组合成熟基础件,不 fork 任何“半成品律所系统”。
3. 决策
3.1 自建
- 12 节点案件主线、阶段状态机、清单、时限、交接。
- 7 类角色、5 档数据范围、案件团队 ACL、字段级遮条。
- 中国刑事法律知识、文书模板、类案检索规则、C 类数据策略。
- 客户小程序公开策略与客户可见的“办案动作”。
- 追加式审计事件(谁、何时、看了什么、改了什么、调了什么模型)。
3.2 采用/参考的成熟件
| 能力 | 参考项目 | 采用方式 | 备注 |
|---|---|---|---|
| 身份 SSO | Keycloak(37.7k,Apache-2.0) | 正式版自托管;企业微信做 IdP 适配 | 成熟、稳定;比自研账号体系稳 |
| 权限 | Casbin(20.5k,Apache-2.0) | V1 角色 + 数据范围;案件团队用关系表 | 复杂后再评估 OpenFGA |
| 关系授权 | OpenFGA(6.1k,Apache-2.0) | V1.5 评估 | 跨所/外部协作复杂时再上 |
| 文档管理 | Paperless-ngx(47.9k,GPL-3.0) | 借入库/OCR/标签/检索/版本管线 | GPL:不直接嵌入闭源产品 |
| 文档解析 | Docling(70.3k,MIT)、MinerU(83.3k) | C 类本地解析;中文 PDF 优先 MinerU | 先做离线 Spike |
| RAG/引用 | RAGFlow(93.8k,Apache-2.0) | 借“结构化解析 + 可追溯引用”模式 | 不一定要整套部署 |
| Agent 工作流 | Dify(160.6k) | 借工作流/可观测性设计 | 许可证 NOASSERTION,先法务确认 |
| 电子签 | DocuSeal(19k,AGPL-3.0)/ Documenso(15.7k,AGPL-3.0) | 借模板/签署/审计流程;信任根接第三方 CA | AGPL:不直接嵌入 |
| 状态机 | XState(30.4k,MIT) | 12 节点推进/回退/守卫 | 原型可用,正式版可后端化 |
| 长流程 | Temporal(24.3k,MIT) | V1.5 评估超期/提醒/SLA | 11/27 不需要 |
| 数据库 | PostgreSQL + pgvector | 正式版主库;检索先用 pgvector | 稳定、可运维 |
| 原型后端 | Supabase 自托管 / FastAPI + SQLite | 替代 PocketBase | PocketBase 主仓库已归档 |
| 对象存储 | 阿里云 OSS | 正式版存储 | MinIO 已归档,不作为生产底座 |
| PC 前端 | Vite + React + TypeScript | 原型与正式版 | 先浏览器全屏,不急着 Electron |
| 小程序 | Taro(37.7k) | 正式版;11/27 先用 H5 | 不阻塞演示 |
3.3 明确不采用
- 不 fork
OpenLawOffice/OpenLaw等停更项目。 - V1 不上 Camunda/Flowable 等 BPMN 引擎;12 节点用显式状态机 + 清单更可控。
- 不自研电子签密码学/信任根;只做流程与 CA 适配层。
- 不在 11/27 前接真实模型、真实企业微信、真实电子签、真实 OA。
- 不把 PocketBase / MinIO 作为正式版底座(均已归档)。
- 不把 AGPL/GPL 项目直接嵌入闭源产品;商用前法务确认。
4. 目标架构
企业微信 / 手机端
↓
Keycloak(SSO / OIDC / 会话)
↓
PC React 主端 小程序 Taro(正式版)/ H5(演示版)
↓
卓安Claw API(FastAPI)
├─ 案件域:12 节点状态机 + 清单 + 时限 + 阶段推进
├─ 权限:Casbin + 数据范围 + 案件团队 + 字段遮条
├─ 文档:阿里云 OSS + Docling/MinerU + Paperless 式索引
├─ 知识/Agent:pgvector 或 RAGFlow + 外部模型 API + 引用 + 审计
├─ 电子签:DocuSeal 式流程 + 第三方 CA 适配层
└─ 审计:append-only 事件表
↓
PostgreSQL + pgvector / Redis / 阿里云 OSS
5. 对原型的约束
11/27 原型不引入上述任何重型依赖:
- 5 屏:工作台、案件详情、Agent、驾驶舱、客户视图。
- 3 个哇点:一案七面、Agent 出文书、7 家所驾驶舱。
- 数据全部来自
packages/demo-data合成数据。 - Agent 用预生成响应 + 流式动画,不接真模型。
- 客户视图先用
/miniH5 + 手机框。 - 原型后端使用
packages/api-client的 demo adapter;正式版换 HTTP/FastAPI,契约不变。 - PocketBase 如需使用,仅限演示;正式版不使用。
6. 两天 Spike(不阻塞 11/27)
- 文档:1 份脱敏 PDF → MinerU/Docling → 分块 → pgvector/RAGFlow → 带引用回答;记录准确率、耗时、引用可点率。
- 权限:客服/客户经理/谈案/承办 4 个角色 → Casbin 策略 → 验证 4 条硬边界。
- 身份:企业微信 → Keycloak/Casdoor OIDC → 拿到用户、部门、分所。
- 状态机:1 个案件 → 12 节点推进/回退 → 每步写审计 → 越权/跳步被拒。
Spike 结果写入 docs/adr/ADR-002-spike-results.md,通过后再锁正式版选型。
7. 后果
- 正面:不被单一开源项目绑定;每一层都有成熟替代;原型可以快速演进而不用推翻。
- 负面:需要自己维护法律领域层和集成层;需要法务审查许可证;需要控制基础件数量,避免“组合爆炸”。
- 缓解:V1 只锁 4 个基础件(Keycloak、Casbin、PostgreSQL+pgvector、OSS),其余延后。
8. 参考数据说明
star 数、最近推送时间、许可证状态为 2026-11-08 通过 GitHub API 查询的结果;后续会变化,选型前需复核。许可证以仓库 LICENSE 与法务意见为准。