# 可切换专项判断模块:Jev / 本地开源模型 日期:2026-09-28。状态:用户已明确可切换方向;本文件为工程设计候选,代码、配置加载和真实模型接入均未实现。对应 FR-JUD-01、BR-17–20、AC-17–21,并沿用 BR-05/09/12/13/16。 ## 1. 产品职责与选择 模块负责回答“现有证据是否支持某个具体判断”,例如“提供的回款材料是否足以支持账期延长的解释”。输入同一套问题、经验适用条件、评价标准和证据;输出可被主审消费的结构化专项判断。历史经验归平台管理,不存成某一家模型的专有资产。 | 模式 | 实际执行方 | 凭据要求 | 对主审的作用 | |---|---|---|---| | jev | Jev 官方服务,通过专用适配器 | 有效 Jev 凭据及数据出口授权 | 提供局部判断,按统一契约返回 | | local | 客户/开发环境部署的开源模型推理服务,通过本地适配器 | 无需 Jev Key;本地服务自己的认证按部署设置 | 执行同一业务任务,按统一契约返回 | | disabled | 不执行专项模型调用 | 无需专项模型凭据 | 主审继续使用规则、工具和经验,标明专项核查未完成 | 默认关闭;有已验证的本地配置后,可显式选择或将其设为默认。不得因为缺少 Jev Key 阻止整个服务启动。此处关闭只关闭专项模块,主审自身仍需独立的可用模型配置。 本地方案替代的是专项模块的业务职责,不是复制 Jev 权重、训练方法或原生概率能力。不承诺两者逐题同答、评分相等或准确率相等;这些必须通过相同样本上的独立测评证明。Jev 是否支持私有化不在本设计假设内。 ## 2. 架构与唯一职责 目标调用链(未实现):主审提出具体问题 → 统一判断入口 → 配置/题型/数据出口检查 → 所选适配器 → 输出归一化与证据校验 → 主审综合意见 → 硬规则与完整性校验。 - `backend/contracts/prescreen.py` 拟定义共享题目、请求和结果;前端不得依赖厂商响应。 - `backend/services/judgment_provider.py` 拟负责路由、预算与归一化;Jev/local 各有专用适配实现,落点在 M3 按模块大小拆分,避免再造通用插件平台。 - 主审拥有整体研判;适配器没有写 recommendation 或审批状态的权限。 - 经验检索、证据来源、确定性计算和硬规则沿用平台能力,不因更换专项模型更换一套。 - 输出解释由主审结合经核验的证据形成,不假设供应商必定返回理由或可靠引用。本地模型生成的文字也不自动当作证据。 问题示例:题型 choice;选项 supported / contradicted / insufficient;要求只判断“材料是否支持所述解释”。这三个选项不是项目的通过/否决/补件状态。同一题目可由所选 Jev 或 local 执行,日常运行只调用选中的提供方;综合结论仍由主审形成。 ## 3. 配置契约与运行选择 `JudgmentProfile` 由管理员在后端部署配置维护: | 字段 | 类型 / 约束 | |---|---| | id / revision | 非空字符串1–128字符 / 正整数;修改生成新修订 | | display_name | 非空字符串1–100字符 | | provider | jev / local;disabled 不需要配置对象 | | endpoint_ref | 后端已批准端点引用,不能由业务请求指定 URL | | credential_ref | 可空密钥引用;jev 必需,local 按服务认证要求;不保存密钥值 | | model_version / adapter_version / prompt_version / mapping_version | 非空版本标识;无自定义提示的适配填 not_applicable;若厂商无不可变模型修订则标 unresolved,不宣称可精确回放,生产启用前解决 | | capabilities | choice / score / binary 的非空子集,表示已通过该配置验收的题型 | | allowed_data_domains | demo / production 的非空子集,另叠加项目和调用者权限 | | readiness | ready / unavailable;仅验证通过且配置完整者可为 ready | P0 不提供在线修改配置接口。候选只读接口 `GET /api/prescreen/projects/{project_id}/judgment-profiles` 返回 `{profiles:[{id,revision,display_name,provider,capabilities}],default_profile_id:string?}`;只列对当前项目、调用者和数据域已获准且 ready 的配置,返回默认值也须通过相同过滤。无可用配置返回空列表和 null;不返回端点或凭据。项目无访问权限沿用 404 NOT_FOUND。 运行请求沿用 `enable_judgment:boolean=false`,新增 `judgment_profile_id:string?`: 1. 开关 false 且 ID 为空:冻结 provider=disabled,其余配置版本为空;不访问任一专项服务。开关 false 同时传 ID 属于 E-07 INVALID_REQUEST,避免静默忽略选择。 2. 开关 true:有 ID 使用指定的当前修订;无 ID 则解析后台默认。不存在/未获准/不可用/没有默认均返回 E-13,不静默关闭。服务启动不校验未选中的 Jev 密钥。 3. 入队前冻结配置修订和模型/适配/提示/映射版本,返回 ScreeningRun.judgment_config。幂等重放返回原运行,即使默认配置已变化也不重新解析。 4. 队列执行与每次发送前仍校验当前授权和撤销状态。冻结版本不赋予永久外发权限;版本被禁用/凭据被撤销则记 E-06,出口被撤销记 E-10;不改用新版本或其他提供方。 5. 配置切换须创建新运行;旧运行保持原记录。预算耗尽、限流或故障按详细设计重试上限处理,不做自动跨提供方回退。 ## 4. 统一问题与请求 拟内部接口 `judge(request: JudgmentRequest, frozen_profile: JudgmentProfile) -> Judgment`;异常由统一入口转为约定错误,厂商原始异常不能直接返回浏览器。 `JudgmentRequest`:run_id、snapshot_id、question_id、question_version(共同 ID 约束),type:choice/score/binary,question:string[1..2000],criteria:string[1..4000],evidence_ids:string[0..20],options:string[],score_range:{min:number,max:number}?。调用者提交引用,后端从冻结授权快照提取对应证据文本,用户不能用 ID 夹带其他项目片段。 choice 要求 options 为2–20个唯一非空选项(各1–100字符);score 要求有限 min