工作台目标与工作流(Workbench / LangGraph)
当前主链路采用 LangGraph 工作流编排(workbench-mode):流程在代码中以 graph/subgraph 形式定义,运行时根据状态做确定性路由与门控;不再依赖 Playbook 作为“外部流程 DSL”。
1) 目标(Goal)是什么
Workbench 把“本轮要完成什么”显式建模为 data.workbench.goal(粘性字段)。常见目标:
case_analysis:案件/争议分析(默认)contract_review:合同审查legal_opinion:法律意见doc_drafting:单文书起草(起诉状/答辩状/仲裁文书/清单等)judgment_prediction:判决预测(实验性)work_plan:办案计划(阶段任务与确认)
目标解析优先级(与当前实现一致)
data.workbench.goal(用户/系统明确选择)profile.service_type_id(历史兼容:作为“服务标签”参与推断)- 默认
case_analysis
结论:
service_type_id不是“流程强绑定开关”,而更像 路由提示/标签。底层工具与数据结构不应强依赖它。
2) 顶层路由(简化)
顶层图的核心是:一切路由只依赖当前 state(幂等),并且在任何可中断点前都会先 sync_data,保证可回放/可恢复。
flowchart TD
S([START]) --> INGEST[ingest<br/>接收本轮消息/附件]
INGEST --> HYDRATE[hydrate<br/>补齐 profile/文件快照]
HYDRATE --> MAT[materials<br/>新材料洞察/分类]
MAT --> GOAL[goal_gate<br/>选择/确认 goal]
GOAL --> CASE[case_analysis 子图]
GOAL --> CONTRACT[contract_review 子图]
GOAL --> OPINION[legal_opinion 子图]
GOAL --> DOC[doc_drafting 子图]
GOAL --> JP[judgment_prediction 子图]
GOAL --> PLAN[work_plan 子图]
CASE --> POLICY[policy_gate<br/>交付门禁/确认]
CONTRACT --> POLICY
OPINION --> POLICY
DOC --> POLICY
JP --> POLICY
PLAN --> POLICY
POLICY --> DOCGEN[docgen 子图<br/>草稿/生成/质量门禁]
DOCGEN --> SYNC[sync_data<br/>落库/同步]
SYNC --> HR{ask_user?}
HR -->|是| HUMAN[human_review<br/>卡片中断等待]
HUMAN --> SYNC
HR -->|否| E([END])
3) “阶段/门禁”放哪
不再把阶段与门禁写进 Playbook JSON;改为:
- 路由门禁:在各 goal 子图里以 conditional edges 实现(例如“案由未确认则必须先确认”)
- 交付门禁:统一放在
policy_gate(例如“文书质量复核/高风险必须确认”) - 状态新鲜度:通过 fingerprint/staleness 标记实现“材料变更 → 输出过期 → 必须二次确认再重生成”
4) 与业务隔离(service_type_id / matter_category / 案由字典)
建议把业务隔离分成三层:
matter_category:诉讼/仲裁/非诉…(决定大方向与 UI 入口)cause_of_action_code等字典码(参见architecture/law.md):决定“业务口径/统计/检索维度”service_type_id:面向产品/运营的“服务标签”(可变、可灰度、可兼容;不应渗透到底层工具契约)
因此,底层实现(tools、data/profile schema、同步接口)应以 稳定字典码与结构化字段 为主,避免把 service_type_id 当“硬分片键”。