chore(v2): 从兴邦预审v2白名单抽取独立可运行基座
按 docs/v2/05-implementation-plan.md §1 候选迁移表与 claude_use/T00 白名单, 从 55e2cdb 抽取 224 个文件(2.48 MB)到独立目录 F:/mini-OpenClaw-v2。 - 排除:凭据(.env/server-deploy.conf/旧DELIVERY.md)、运行数据(xingbang_data 等 4 个 SQLite)、依赖(venv/node_modules 符号链接)、归档(_backup*/test-evidence/ ori_file)、Office 临时文件 - 目标目录独立 git 仓库,初始恢复点;Gitea 远程与分支待 OQ-06 Q2 定案 - 未部署、未启动服务、未调用模型 Co-Authored-By: Claude Code <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,175 @@
|
||||
# 兴邦预审 v2 需求规格
|
||||
|
||||
状态:0.2 · 2026-09-29。产品目标和三模块方向已经用户确认;规格与工程门禁仍待审阅。规则编号作用域为本文,原编号保留,新增 BR-21–44 / E-16–26 / AC-22–45。
|
||||
|
||||
## 1. Requirement Overview
|
||||
|
||||
来源:[URD](URD.md) 的 FR-FACT/HIST/EXP/REV/JEV/JUD/SIM/EVAL/PILOT-01。目标是把历史项目的争议、调查、证据和判断变化用于新项目预审。P0 使用明确标注的模拟数据;经授权脱敏数据进入 P1,不连接未知生产库,不执行正式审批,不展示未经校准的通过概率。
|
||||
|
||||
角色沿用 URD。补充术语:快照=不可变输入版本;来源域=data_domain,演示或生产;证据引用=可定位材料片段的 ID;有效经验=已发布、未过期且适用条件成立的版本;硬性规则=经业务确认且由程序执行的约束;幂等键=同一用户请求去重标识;版本冲突=客户端依据旧 revision 更新;专项判断=边界明确的局部判断;降级=保留可用结果并标识未完成检查;运行预算=限制轮数、调用量和耗时;保留集=开发时不可使用的验收样本;提供方(provider)=具体执行专项问题的模型后端;判断配置(profile)=已批准的提供方、模型、端点、数据范围与版本组合;能力声明=该配置已验证支持的题型;原生指标=提供方返回且带原语义的指标,不代表跨模型可比。
|
||||
|
||||
新增术语:评审会通过=公司项目评审会作出通过决定(结果代码映射见 OQ-05);初期预审=初步材料收集阶段;评审方案=数据卡、已发布 Skills/Rules 及核查维度的版本化装配;trajectory=完整运行,step/span=其中一步;人工干预=本次要求或候选修改,不自动成为永久规则;origin=知识创建来源,与 data_domain 正交;改进候选=待测试审核的知识/编排修订;shadow=旁路评价,不影响当次业务结果。
|
||||
|
||||
“证据支持”不等于材料真实可信:材料真实性核验是单独的核查结果。风险严重程度、数据完整性、模型确定性、审批概率互不替代。
|
||||
|
||||
## 2. Data Model & Interface Contract
|
||||
|
||||
契约候选以 [详细设计](03-detailed-design.md) 为单一说明,实施时唯一代码定义拟在 backend/contracts/prescreen.py。现有 ProjectSnapshot/Evidence 不复制,版本适配后复用。
|
||||
|
||||
| 对象 | 本期字段摘要 | 使用面 |
|
||||
|---|---|---|
|
||||
| CaseTimeline | id、project_id、data_domain、revision、events[] | 历史过程 |
|
||||
| DecisionEvent | id、event_type、occurred_at?、recorded_at、question、evidence_ids[]、judgment_before?、judgment_after?、conditions[] | 争议时间线 |
|
||||
| ExperienceCard | id、version、status、title、source_event_ids[]、conditions、exceptions、scope、expires_at、reviewer_id?、revision | 经验审核 |
|
||||
| ScreeningRun | id、snapshot_id、status、recommendation?、findings[]、missing_inputs[]、applied_experiences[]、probability、degradations[]、judgment_config、versions、revision | 预审总览 |
|
||||
| Judgment | id、question_id、question_version、type、status、answer?、evidence_ids[]、provider、model_version?、profile_id?、profile_revision?、native_metrics[] | 专项复核 |
|
||||
| Simulation | id、base_run_id、assumptions[]、changed_findings[]、unresolved_findings[]、formal_result=false | 推进沙盘 |
|
||||
| Evaluation | id、dataset_version、split_id、run_versions、locked_at?、status、metrics | 验证看板 |
|
||||
|
||||
新增 ImportBatch、KnowledgeCard、ReviewPlan、DimensionSpec、TrajectoryStep、ReviewOutcome、ImprovementCandidate、ProbabilityView 契约见详细设计第9节;闭环语义见 [三模块设计](14-experience-loop.md)。
|
||||
|
||||
API 候选命名空间 `/api/prescreen`,通过同源 `/api/core/prescreen` 代理访问;下列端点尚未实现。请求/响应、错误、界限及 owner 见详细设计。P0 `probability` 必须为 null,并附原因 `not_calibrated`。
|
||||
|
||||
## 3. Surface Specification
|
||||
|
||||
项目预审总览:结论和信息基础在顶部;中间是核查问题与经验比较;右侧动作模拟;详情抽屉展示来源。历史经验页:时间线、原文与经验卡并排。验证页:样本锁定、结果对照和分歧复盘。
|
||||
|
||||
统一视图状态:idle/loading/ready/empty/error/submitting;运行另有 queued/running/awaiting_input/completed/partial/failed/cancelled。动作权限由后端判定,前端隐藏无权动作不能代替后端授权。详见 [UI Spec](04-ui-spec.md)。
|
||||
|
||||
## 4. Business Rules
|
||||
|
||||
| ID | 可测试规则(唯一职责 owner) |
|
||||
|---|---|
|
||||
| BR-01 | 材料提取候选须经授权用户确认后才能进入项目事实;保留原件与来源。owner:材料确认服务 |
|
||||
| BR-02 | 历史事件缺少时间或原文时保留未知值和缺证标识,不生成虚构经过。owner:历史过程服务 |
|
||||
| BR-03 | 经验仅能通过草稿→待审核→发布的受控状态转换生效;无发布资格者不得发布。owner:经验治理 |
|
||||
| BR-04 | 检索有效经验时先按数据域、权限、状态、有效期和适用条件过滤,再做相关性比较。owner:经验检索 |
|
||||
| BR-05 | 主审形成综合预审意见;任一专项模型的单题结果不得直接写入 recommendation。owner:预审编排 |
|
||||
| BR-06 | 已确认的硬性阻断不能被模型或其他维度高分覆盖。owner:结果校验 |
|
||||
| BR-07 | 缺数据记 unknown;全部关键核查不可完成时 recommendation=insufficient_information。owner:结论完整性校验 |
|
||||
| BR-08 | 未通过来源校验的引用不能进入有效结论;相关判断退回缺证/复核。owner:证据校验 |
|
||||
| BR-09 | 专项关闭或运行期间所选服务失效时记录 skipped/failed 及降级原因;不能伪造判断。owner:专项模型适配 |
|
||||
| BR-10 | 材料中的指令不能扩展主审工具集合;金额与日期运算只能由确定性工具执行。owner:工具策略 |
|
||||
| BR-11 | 情景模拟只写独立假设结果,不能修改项目事实、正式运行或审批状态。owner:模拟服务 |
|
||||
| BR-12 | 未校准时 probability=null;Score、Noul、相似案例通过占比均不能直接映射为通过概率。owner:结果序列化 |
|
||||
| BR-13 | 每次运行冻结输入和规则/Skill/经验/模型/问题版本,过程修订不覆盖旧结果。owner:运行存储 |
|
||||
| BR-14 | 相同 actor+project+operation+幂等键和相同载荷返回同一对象;载荷不同返回冲突。owner:命令入口 |
|
||||
| BR-15 | 盲测在预测锁定之前不向推理输入提供目标项目的标签、最终意见或后续表现。owner:评测服务 |
|
||||
| BR-16 | 真实数据外发前按数据域与接收端策略核验;未批准出口不可调用。owner:模型出口策略 |
|
||||
| BR-17 | 专项问题经统一入口路由到所选的 Jev 或本地提供方;local 路径不读取 Jev 凭据,不调用 Jev。owner:判断路由 |
|
||||
| BR-18 | 统一输出只接受题目规定的答案或 unknown;提供方原生指标保留语义且不得互换阈值或补造缺失概率。owner:判断结果归一化 |
|
||||
| BR-19 | 选择仅限当前用户/数据域获准的已验证配置;不支持所需题型的配置拒绝执行该题。owner:判断配置校验 |
|
||||
| BR-20 | 运行创建时冻结专项配置修订;切换仅影响新运行,故障不得自动切换提供方。owner:运行配置解析 |
|
||||
| BR-21 | 预测目标绑定公司评审会结果及材料时点;未送审/待定/撤回不映射为会议否决。owner:结果标签映射 |
|
||||
| BR-22 | 材料集合导入逐文件保留来源、定位、解析版本和状态;未确认候选不进入冻结事实。owner:导入清单 |
|
||||
| BR-23 | 多来源事实冲突保留候选并要求显式处理,不按上传先后覆盖。owner:事实冲突服务 |
|
||||
| BR-24 | 卡片保留 origin 与 data_domain;历史提炼后人工修改仍保留历史谱系。owner:来源存储 |
|
||||
| BR-25 | 自然语言运行要求只影响当前作用域,变为持久知识必须生成待审候选。owner:指令作用域 |
|
||||
| BR-26 | 历史归纳 Rule 默认 advisory;缺少正式制度/授权依据和审核不得发布 hard 规则。owner:规则资格校验 |
|
||||
| BR-27 | 运行只能装配获准且有效的已发布方案依赖,冻结数据/Skill/Rule/经验版本。owner:方案解析 |
|
||||
| BR-28 | 维度按方案依赖的 dimension_id 去重;同 ID 不同刻度/语义拒绝合并。owner:维度解析 |
|
||||
| BR-29 | 演示估计仅在 demo 域以独立字段显示,真实 probability 未校准仍为 null,导出保留来源标识。owner:概率呈现契约 |
|
||||
| BR-30 | 沙盘按完整动作组合重算,结果须匹配当前选择;失败/乱序不改基线。owner:情景状态 |
|
||||
| BR-31 | 一次运行保存一条轨迹与多个可追溯步骤,记录可观察动作与版本,不伪造隐藏推理。owner:轨迹存储 |
|
||||
| BR-32 | 会议结果追加保存并按材料版本对齐;更正引用旧记录,无匹配快照不倒填初期预测标签。owner:会议结果服务 |
|
||||
| BR-33 | 改进候选只有通过固定对照与独立审核后才可发布;原运行和原版本不覆盖。owner:改进治理 |
|
||||
| BR-34 | 批量模拟案例必须有多类结果、可复现种子与生成版本;全过程标 demo,不声称真实准确率。owner:模拟数据生成 |
|
||||
| BR-35 | 开发/校准/保留集在经验提炼前按客户/项目关联分组并结合时间划分;保留材料及其衍生知识不进入开发。owner:数据集隔离 |
|
||||
| BR-36 | 高预测组实际通过比例同时报告覆盖率、可观察标签数与未观察数,分母为零返回不适用。owner:业务指标 |
|
||||
| BR-37 | 专项配置按业务任务及题型登记已验证能力,某任务合格不自动授权其他任务。owner:专项准入 |
|
||||
| BR-38 | 本地判断运行固定具体模型/checkpoint及映射版本;内部路由不得静默切换权重。owner:本地适配 |
|
||||
| BR-39 | 输入超出已验证上下文预算不得静默截断;返回未完成并保留所选证据范围。owner:证据预算 |
|
||||
| BR-40 | 判断模型的效果以固定专家标注集比较,不把模型自评或自身生成标签当作独立真值。owner:专项评测 |
|
||||
| BR-41 | 卡片来源、数据域、审核状态分别显示;来源使用文字/图标与样式共同区分。owner:卡片呈现 |
|
||||
| BR-42 | 人工新增和历史提炼 Skills/Rules 共用审核发布路径;编辑已发布内容生成新草稿版本。owner:卡片治理 |
|
||||
| BR-43 | 雷达只对同刻度且3–8维绘制;其余用完整列表/分组,不遗漏关键项或由面积计算概率。owner:维度呈现 |
|
||||
| BR-44 | stop 只表示暂不建议推进并附依据;系统不得自动关闭项目或执行正式审批。owner:建议动作边界 |
|
||||
|
||||
## 5. Exception Scenarios
|
||||
|
||||
| ID | 触发 / HTTP与错误码 | 用户可见消息 / 恢复 |
|
||||
|---|---|---|
|
||||
| E-01 | 解析失败,422 MATERIAL_PARSE_FAILED | 材料未能完整解析,请核对原件或手工录入;保留原件 |
|
||||
| E-02 | 关键证据缺失,运行结果 MISSING_EVIDENCE | 关键证据尚未取得,暂不能确认;补件后新运行 |
|
||||
| E-03 | 无权限,403 ACCESS_DENIED | 无权执行此操作;不泄露其他项目对象是否存在 |
|
||||
| E-04 | 引用无效/跨项目,422 INVALID_EVIDENCE | 结论引用未通过核验,请复核来源;拒绝有效化 |
|
||||
| E-05 | 乐观锁不符,409 REVISION_CONFLICT | 内容已有更新,请刷新后重试;保留本地草稿 |
|
||||
| E-06 | 专项模型不可用,运行结果 JUDGMENT_UNAVAILABLE | 专项核查未完成,已保留其他结果;允许明确重试 |
|
||||
| E-07 | 非法枚举/载荷/版本,422 INVALID_REQUEST | 请求内容不符合当前版本,请检查后重试 |
|
||||
| E-08 | 预算耗尽,运行结果 RUN_BUDGET_EXCEEDED | 本次核查已达到执行上限,请复核未完成项 |
|
||||
| E-09 | 幂等键载荷冲突,409 IDEMPOTENCY_CONFLICT | 此请求编号已用于不同内容,请重新提交 |
|
||||
| E-10 | 未批准出口,403 EGRESS_NOT_APPROVED | 当前数据不允许发送至该模型服务 |
|
||||
| E-11 | 评测标签提前暴露,409 EVALUATION_CONTAMINATED | 当前样本不再满足盲测条件,已排除 |
|
||||
| E-12 | 经验已失效/不适用,运行结果 EXPERIENCE_EXCLUDED | 该经验不适用于本次核查;展示可见范围内的排除原因 |
|
||||
| E-13 | 配置不存在、不可用或未获准,422 JUDGMENT_CONFIG_INVALID | 当前专项模型配置不可用,请选择可用配置或关闭专项核查;不暴露无权限配置详情 |
|
||||
| E-14 | 不支持题型/映射未验证,运行结果 JUDGMENT_CAPABILITY_UNSUPPORTED | 当前模型尚不支持此项核查,已标记未完成;不改题、不猜测结果 |
|
||||
| E-15 | 非法答案/非有限数值/指标来源不明,运行结果 JUDGMENT_OUTPUT_INVALID | 专项结果未通过格式与语义校验,请复核或重试;不作为有效判断 |
|
||||
| E-16 | 文件集合空/类型或容量不满足,422 IMPORT_BATCH_INVALID | 材料集合不符合导入要求,请检查文件类型和大小;逐文件错误沿用 E-01 |
|
||||
| E-17 | 关键事实有未解决冲突,运行结果 FACT_CONFLICT_UNRESOLVED | 材料存在不一致,请核对并确认;不得静默选择 |
|
||||
| E-18 | 硬规则缺正式依据或审核,422 HARD_RULE_BASIS_REQUIRED | 硬性规则需要正式依据和审核,当前仅可保存为建议草稿 |
|
||||
| E-19 | 方案/依赖未发布、失效或不可访问,422 PLAN_DEPENDENCY_INVALID | 评审方案存在不可用组件,请更新后重新发起;不暴露无权组件 |
|
||||
| E-20 | 同维度ID语义/刻度冲突,422 DIMENSION_SCHEMA_CONFLICT | 核查维度定义不一致,请统一后保存方案 |
|
||||
| E-21 | 真实域请求/展示演示估计,422 DEMO_ESTIMATE_FORBIDDEN | 当前数据域不允许使用演示概率 |
|
||||
| E-22 | 假设互斥/前提缺失,422 SCENARIO_ASSUMPTION_CONFLICT | 所选推进条件存在冲突或缺少前提,请调整 |
|
||||
| E-23 | 会议结果无对应材料版本,记录状态 OUTCOME_SNAPSHOT_UNMATCHED | 评审记录已保存,但尚未关联送审材料版本;允许后续核对,不纳入该时点概率验证 |
|
||||
| E-24 | 改进未完成对照或未获审核,409 IMPROVEMENT_NOT_VALIDATED | 改进尚未完成验证与审核,暂不能发布 |
|
||||
| E-25 | 输入超出模型已验证预算,运行结果 JUDGMENT_CONTEXT_EXCEEDED | 本次证据超出专项核查范围,请缩小问题或转人工复核 |
|
||||
| E-26 | 会议结果代码无法映射,记录状态 OUTCOME_LABEL_UNMAPPED | 评审结果口径尚未确认,已保留原记录,暂不计入通过率 |
|
||||
|
||||
运行级错误保存在 degradations/finding 中,HTTP 200 仅表示结果可读取,不表示核查通过。禁止把 failed 状态当作 completed。
|
||||
|
||||
## 6. Acceptance Criteria
|
||||
|
||||
| ID | Given / When / Then | 覆盖 |
|
||||
|---|---|---|
|
||||
| AC-01 | Given 已解析候选,When 未确认/确认,Then 分别不进入/进入事实且能定位原文;解析失败可人工补录 | BR-01, E-01 |
|
||||
| AC-02 | Given 缺少事件日期的历史材料,When 提炼时间线,Then occurred_at=null 且显示缺证,不编日期 | BR-02, E-02 |
|
||||
| AC-03 | Given 草稿经验与无权发布人,When 请求发布,Then 拒绝且无有效版本;合资格审核走合法状态后生效 | BR-03, E-03, E-07 |
|
||||
| AC-04 | Given 过期/异域/例外触发/有效经验,When 新运行检索,Then 仅有效且授权的版本可应用 | BR-04, E-12 |
|
||||
| AC-05 | Given 任一专项模型返回正面单题判断但整体证据冲突,When 汇总,Then 主审记录冲突与理由,单题不能覆盖综合意见 | BR-05, E-02 |
|
||||
| AC-06 | Given 确认硬性阻断与模型建议推进,When 校验,Then 拒绝推进并指出规则版本;边界值由程序计算 | BR-06, E-07 |
|
||||
| AC-07 | Given 全部关键资料缺失,When 预审,Then 信息不足并列补件,不判企业高风险 | BR-07, E-02 |
|
||||
| AC-08 | Given 无效或跨项目引用,When 结论校验,Then 拒绝引用并标缺证,不暴露无权原文 | BR-08, E-04, E-03 |
|
||||
| AC-09 | Given 专项已关闭或运行时所选服务失效/超时/畸形输出,When 执行,Then 保留 skipped/failed 与降级,不生成默认高分 | BR-09, E-06, E-15 |
|
||||
| AC-10 | Given 材料包含终端调用指令,When 模型读材料,Then 工具权限不变;耗尽预算停止并列未完成项 | BR-10, E-08 |
|
||||
| AC-11 | Given 基线运行与假设动作,When 模拟,Then 原快照哈希不变;冲突假设被拒绝 | BR-11, E-07 |
|
||||
| AC-12 | Given 未校准模型,When 查看/导出结果,Then probability=null 且注明原因,即使 Noul 接近 1 也不改写 | BR-12, E-07 |
|
||||
| AC-13 | Given 同一项目产生新证据版本,When 重跑或旧 revision 更新,Then 新旧运行分别留存或返回版本冲突 | BR-13, E-05 |
|
||||
| AC-14 | Given 相同/不同载荷复用幂等键,When 并发提交,Then 分别返回同一运行/409,不重复写入 | BR-14, E-09 |
|
||||
| AC-15 | Given 客户保留集,When 锁定预测前尝试读取目标标签,Then 拒绝;发生泄露则样本作废 | BR-15, E-11, E-03 |
|
||||
| AC-16 | Given 未批准的真实数据出口,When 请求 Jev 或其他外部模型,Then 无网络发送并记录策略拒绝 | BR-16, E-10 |
|
||||
| AC-17 | Given 没有 Jev Key 和可用本地配置,When 本地实际运行并用厂商 fixture 验证 Jev 适配契约,Then 契约一致、local 不访问 Jev,主审不依赖厂商字段 | BR-17, E-06 |
|
||||
| AC-18 | Given local 自报 confidence 或 Jev 原生指标,When 归一化/展示,Then 不生成缺失概率、不跨提供方套阈值;畸形/NaN/未知选项返回失败 | BR-18, E-15 |
|
||||
| AC-19 | Given 未授权/不存在配置或缺题型能力,When 发起运行/执行题目,Then 分别返回配置错误/未完成,不发送该题,也不静默替代 | BR-19, E-13, E-14 |
|
||||
| AC-20 | Given 排队或执行中的旧运行,When 修改默认配置或所选服务故障,Then 旧运行保留已冻结版本;新选择创建新运行;不得自动外发或替换 | BR-20, E-06 |
|
||||
| AC-21 | Given 专项开关关闭且两种模型都无凭据,When 主审预审,Then 无专项模型调用,已计划题目 Judgment=skipped、运行明确关闭原因,主审仍受证据和硬规则约束 | BR-09, BR-17, E-06 |
|
||||
| AC-22 | Given 已确认会议事件和未送审/附条件记录,When 按版本映射标签,Then 未送审不当否决,未确认附条件口径保留原码与未映射状态 | BR-21, E-26 |
|
||||
| AC-23 | Given 文件集合含正常、损坏、超限及重复文件,When 导入与确认,Then 逐项保留状态和页码/单元格来源,失败可重试,未确认不入事实 | BR-22, E-16, E-01 |
|
||||
| AC-24 | Given 同期间金额的两个冲突来源,When 冻结事实,Then 保留冲突和来源并要求确认,不默认覆盖 | BR-23, E-17 |
|
||||
| AC-25 | Given 历史提炼卡及人工创建卡,When 人工编辑前者并保存,Then 前者仍为历史来源并有父版本,后者为人工来源,数据域独立 | BR-24, E-05 |
|
||||
| AC-26 | Given 本次补充说明要求优先核查或永久改规则,When 运行与保存,Then 仅当前授权范围生效,持久修改只能形成草稿且不能扩大工具权限 | BR-25, E-03, E-07 |
|
||||
| AC-27 | Given 只有历史频次的规则候选,When 请求发布为硬规则,Then 拒绝并给正式依据缺失文案,可保留 advisory 草稿 | BR-26, E-18 |
|
||||
| AC-28 | Given 含已发布/草稿/撤回/跨域组件的方案,When 启动运行,Then 只接受全部有效且授权的依赖并冻结版本,其他拒绝 | BR-27, E-19 |
|
||||
| AC-29 | Given 两张卡引用同一维度或相同ID不同刻度,When 保存方案,Then 相同定义只出现一次,不同定义拒绝合并 | BR-28, E-20 |
|
||||
| AC-30 | Given demo/production 项目与人工情景值,When 查看API/UI/导出,Then 仅demo显示独立演示字段及标识,真实 probability 仍为空,越域拒绝 | BR-29, E-21 |
|
||||
| AC-31 | Given 互斥动作及快速连续勾选,When 创建情景且旧请求晚到或当前请求失败,Then 冲突拒绝,旧结果丢弃,失败保留基线并标未完成,不累加提升 | BR-30, E-22, E-06 |
|
||||
| AC-32 | Given 一个run中两次工具调用及一次失败,When 查看轨迹,Then 同一trajectory有独立step及版本/证据引用,失败保留,不生成隐藏思维 | BR-31, E-04 |
|
||||
| AC-33 | Given 会议记录无法关联材料快照或后续更正,When 保存并对照,Then 无匹配单列,更正追加并引用旧版,不改原预测 | BR-32, E-23, E-05 |
|
||||
| AC-34 | Given 无对照证据或未经独立审核的改进,When 请求发布,Then 拒绝且旧版本有效;验证审核合格才生成新发布版本 | BR-33, E-24 |
|
||||
| AC-35 | Given 同seed/版本的模拟数据配置,When 生成两次并查看报告,Then 规范化清单一致且涵盖多种结果,所有材料/标签/导出标demo | BR-34, E-07 |
|
||||
| AC-36 | Given 同客户关联项目、近重复案例和保留集材料,When 划分后提炼或尝试混入衍生Skill,Then 关联组不跨集合;保留内容不可进入提炼,泄漏标作废 | BR-35, E-11 |
|
||||
| AC-37 | Given 高预测组有已评审和未送审样本或空分母,When 计算指标,Then 报告通过分子/可观察分母/覆盖率/未观察数,零分母不填0% | BR-36, E-26 |
|
||||
| AC-38 | Given 仅通过提炼质检验收的配置,When 用于实时预审或其他题型,Then 拒绝未获准任务并显示未完成,不以安装或其他任务成功放行 | BR-37, E-14 |
|
||||
| AC-39 | Given 冻结本地checkpoint的运行,When 内部路由尝试换模型,Then 拒绝不匹配并记录失败;新模型只可用于新配置/新运行 | BR-38, E-15 |
|
||||
| AC-40 | Given 超出上下文预算的证据包,When 执行判断,Then 不静默截断、不外发该题,记录未完成与原证据范围 | BR-39, E-25 |
|
||||
| AC-41 | Given 专项评价只有同模型自评或其生成标签,When 登记效果合格证据,Then 拒绝当作独立评测;专家标签和数据划分版本可追溯 | BR-40, E-24 |
|
||||
| AC-42 | Given 历史/人工/制度来源且审核状态不同的卡片,When 颜色关闭或键盘查看,Then 仍能通过文字和图标区分来源、数据域与状态 | BR-41, E-07 |
|
||||
| AC-43 | Given 人工新增/历史提炼候选与已发布卡片,When 保存/编辑/审核,Then 共用同一治理入口;已发布编辑产生新草稿,无权及自批均拒绝 | BR-42, E-03, E-05, E-07 |
|
||||
| AC-44 | Given 0/2/6/9个维度或异刻度,When 展示结果,Then 只对同刻度3–8维画雷达,其余完整列表,硬阻断独立且面积不推概率 | BR-43, E-20 |
|
||||
| AC-45 | Given 预审建议stop,When 查看结果或模型试图关闭项目,Then 展示依据及人工决定入口,不修改正式审批/项目关闭状态 | BR-44, E-03 |
|
||||
|
||||
## 7. Open Questions & Decision Record
|
||||
|
||||
OQ-01 至 OQ-06 见 [决策记录](09-decisions.md)。本轮规格是待评审草案;P0 演示可用模拟材料,真实数据出口、正式权限和概率校准不得用临时假设替代确认。
|
||||
|
||||
已定方向:公司评审会通过为目标、初始材料预审、三模块闭环、人工与历史卡片共治、方案动态维度、可切换专项判断、P0纯模拟演示、真实结果驱动受控改进。被否方案:单题判断直接审批、经验未经审核自动生效、复制整库后再定义用途、用模拟提升冒充因果效果。
|
||||
@@ -0,0 +1,119 @@
|
||||
# 兴邦预审 v2 架构设计
|
||||
|
||||
状态:候选设计 0.2,产品方向已确认、工程门禁待审阅;本文件严格区分当前事实与拟议架构。
|
||||
|
||||
## 1. 概览与已核验基线
|
||||
|
||||
代码快照 4d5a420 已保存在 Gitea。当前架构从代码确认如下,图中不包含尚未实现的新模块:
|
||||
|
||||
```mermaid
|
||||
flowchart LR
|
||||
U[业务用户] --> W[Next.js 项目工作台]
|
||||
W --> P[同源 Route Handler]
|
||||
P --> A[FastAPI 路由与权限]
|
||||
A --> S[ProjectAssistantService]
|
||||
S --> Q[DurableWorker]
|
||||
Q --> X[Skill 与规则执行]
|
||||
X --> M[受限模型 Agent Loop]
|
||||
S --> DB[SQLite 对象与审计]
|
||||
```
|
||||
|
||||
| 已有能力 | 已检查代码 | 复用限制 |
|
||||
|---|---|---|
|
||||
| 项目快照/证据/问题契约 | backend/contracts/project_assistant.py | 本期复用,不另造同名概念 |
|
||||
| 项目/任务/事务对象 | backend/services/project_assistant.py、assistant_store.py、assistant_worker.py | 巨大 service 不继续堆新领域,新增模块通过现有入口调用 |
|
||||
| 数据卡/材料 | backend/services/assistant_data.py、assistant_materials.py | 继续冻结来源与人工确认候选 |
|
||||
| 受限模型核查 | backend/services/assistant_model.py | 目前提示词禁止作审批决定;新增预审意见要单独设计并测试,不放宽旧版完整核查的权限 |
|
||||
| 可审核经验 | backend/services/assistant_experiences.py | 已有范围、有效期、条件、审核发布;不能等同已学到客户历史经验 |
|
||||
| 历史案例 | backend/data_layer/history_store.py | 实际是 JSONL + 行业/金额等简化筛选;文件注释不证明已建向量库 |
|
||||
| 默认团队模式 | backend/data_layer/team_experience.py | 内置频次/阈值为代码默认样例,不是真实兴邦统计 |
|
||||
| 模型与组件治理 | backend/services/component_registry.py、component_evaluation.py | 复用版本和验证机制 |
|
||||
|
||||
## 2. v2 拟议模块边界
|
||||
|
||||
以下是设计目标,尚未生成对应文件或调用链。owner 指代码唯一职责,人员待项目负责人分配。
|
||||
|
||||
| 模块 / 拟议落点 | 职责 | 依赖 / 禁止 |
|
||||
|---|---|---|
|
||||
| history_cases / backend/services/history_cases.py | 提炼历史事件、来源及未知项 | 依赖材料与存储;不直接批准经验 |
|
||||
| experience_catalog / backend/services/experience_catalog.py | 关联案例与经验版本、先授权过滤再相关性比较 | 复用既有经验生命周期,不建立平行发布路径 |
|
||||
| prescreen / backend/services/prescreen.py | 主审制定核查、调用专业能力、综合意见 | 只访问冻结授权上下文;不直接操作通用 terminal/SQL |
|
||||
| judgment_provider / backend/services/judgment_provider.py | 统一窄问题契约、Jev/本地适配、schema 校验、预算、失败状态 | 通过出口策略;不写审批或综合结论 |
|
||||
| prescreen_policy / backend/services/prescreen_policy.py | 硬规则、证据、缺证及概率输出约束 | 不依赖页面,不以模型高分绕过硬约束 |
|
||||
| scenario_service / backend/services/prescreen_scenarios.py | 保存独立情景与差异 | 引用不可变基线;不覆盖真实事实 |
|
||||
| prescreen_evaluation / backend/services/prescreen_evaluation.py | 冻结样本、版本、预测及专家对照 | 标签与推理侧隔离 |
|
||||
| prescreen contracts / backend/contracts/prescreen.py | 新对象与错误契约 | 后端单一定义,前端由 OpenAPI 生成;生成器待建设 |
|
||||
|
||||
拟议数据流:材料/授权数据 → 标准事实和来源 → 冻结快照 → 硬规则和计算 → 检索有效经验 → 主审提出具体核查问题 → 专业 Skills/可切换专项判断 → 验证证据与规则 → 主审综合预审 → 独立复核/正式审批入口。
|
||||
|
||||
历史经验用于选择核查动作和比较适用条件,不能用“相似案例通过”直接推出当前项目通过。专项模型的判断置信与主审解释都不是独立的真实性认证。
|
||||
|
||||
## 3. 数据模型与持久化
|
||||
|
||||
P0 候选使用现有 SQLite 事务存储承载新增对象类型。历史事件、经验版本、运行、判断、模拟和评测各有唯一 owner。schema 变更追加迁移,保留旧表;完整 DDL 与兼容策略在详细设计阶段定案。
|
||||
|
||||
本轮“v2”指产品代际。既有 xingbang_v2.py 和 schema_v2 是历史实现命名,不应重命名或删除。
|
||||
|
||||
材料保存原件哈希、段落/页码、发生时间和录入时间。经验同时记录来源事件、制度版本、专家确认及有效期。只持有最终批复的案例应标“过程不完整”。
|
||||
|
||||
演示和真实数据域分别存储或通过受测权限边界隔离;生产隔离架构未确认前只运行演示数据。版本冻结后撤回经验不删除历史记录,但新运行不得再应用;旧结果需标记失效经验并提示复核。
|
||||
|
||||
## 4. 关键流程与恢复
|
||||
|
||||
- 历史导入失败:保留原件和失败事件,允许补充/重新提炼,不伪造缺失过程。
|
||||
- 主审识别矛盾:记录待核查事项,使用授权证据工具验证,达到预算停止为 partial/awaiting_input。
|
||||
- 所选专项模型不可用或关闭:缺失项进入 degradations;主审只能依据已完成检查给出有限意见。
|
||||
- 硬规则冲突:结果校验阻断建议推进,保留模型原始结构化提案供审计。
|
||||
- 新证据进入:产生新快照、新运行,旧结果保留;模拟不进入这条正式更新路径。
|
||||
- Worker 恢复:复用持久任务机制;幂等范围包含 actor/project/operation/key,禁止重复生成运行。
|
||||
|
||||
## 5. 接口与集成
|
||||
|
||||
内部 API 以 /api/prescreen 为候选命名空间;沿用当前项目鉴权和同源代理。前端不能直接访问模型厂商。现有 assistant_model 的受信端点规则不自动适用于 Jev,专项模块需独立出口与域策略;local 也只能使用管理员批准的端点,不能从浏览器传入任意 URL。
|
||||
|
||||
Jev 接口概念参考 TypeSafe 官方文档:https://docs.typesafe.ai/introduction 、https://docs.typesafe.ai/confidence 。当前没有 SDK 安装、Key、版本或延迟实测;实施前重核版本与中文金租样本效果。Jev 是可选提供方,本地开源模型通过独立适配器执行同一业务任务;拿不到 Jev Key 不阻塞本地路径。统一契约和差异处理见 [专项判断模型切换](11-judgment-providers.md)。
|
||||
|
||||
概率预测为后续独立模型,输入仅使用预测时可得事实和判断特征。主审解释模型输出但不能改写原始概率;目标事件已明确为公司评审会通过;结果代码/时点/样本偏差和校准验证未明确前 probability=null。
|
||||
|
||||
## 6. 副作用边界
|
||||
|
||||
真实数据外发、经验发布、正式审批是不同权限。模型只能读冻结事实和生成候选意见;发布经验由授权人操作,正式审批不在 v2 自动化范围。普通聊天的终端/文件工具不能进入预审工具白名单。
|
||||
|
||||
2026-09-29本轮更新仅为文档写入;Gitea备份需另以本轮SHA核验记录为准;没有模型数据外发、云端部署、数据库迁移或镜像发布。
|
||||
|
||||
## 7. ADR
|
||||
|
||||
ADR-01 保留现有技术基线,按模块增量扩展,否决全面换框架。
|
||||
ADR-02 主审综合判断+确定性约束+可切换专项复核,否决单模型 yes/no 审批。
|
||||
ADR-03 经验以过程和来源为核心,否决只按最终结果记忆。
|
||||
ADR-04 经验发布复用现有治理,否决自动从反馈直接生效。
|
||||
ADR-05 先做验证和数据合作,再建设概率校准,否决专家分数转百分比。
|
||||
ADR-06 v2 独立目录与资源,旧版保留;本轮先文档后迁移,目录尚未创建。
|
||||
|
||||
状态、影响和未决项统一维护在 [决策记录](09-decisions.md)。
|
||||
|
||||
## 8. 拟建立的架构验证
|
||||
|
||||
业务 service 不导入 src;预审工具集合不含 terminal/任意 SQL;跨域经验不可检索;引用必须属于授权快照;模拟不修改真实快照;无校准时概率为 null;经验发布只能经过一个治理入口。专项模型只能通过统一接口接入;local 不依赖 Jev 凭据;配置冻结且故障不自动切换。映射 AC-04/06/08/10/11/12/16/17/18/19/20/21。
|
||||
|
||||
这些是待实施的机器检查;现有测试覆盖另列,不能标成 v2 已通过。
|
||||
|
||||
## 9. 三模块目标分层(未实现)
|
||||
|
||||
```text
|
||||
文件集合/授权数据源 → 证据与事实层 → 冻结快照
|
||||
历史开发案例 → 时间线/经验候选 → 人工编辑与统一发布 → Skills/Rules
|
||||
数据卡 + 已发布Skills/Rules → 评审方案与维度 → miniOpenClaw受控编排
|
||||
受控编排 → 确定性Tools/Rules + 可选专项判断 → 主审建议与补件
|
||||
冻结运行 → 独立沙盘 / 可回放trajectory
|
||||
trajectory + 对应材料版本的会议结果 → 改进候选 → 固定对照/审核 → 新版本
|
||||
概率模块:独立消费当时可得事实与核查特征,P0真实概率为空
|
||||
```
|
||||
|
||||
新增职责:material_import负责集合清单而不另造上传链;review_plan负责装配与维度版本;trajectory复用运行审计;review_outcomes拥有会议原始结果和映射;improvement复用经验/组件发布入口。详细对象owner见03第9节,不再为每个页面建立一套业务服务。
|
||||
|
||||
本地Laya部署为独立模型服务,后端通过judgment_provider的任务契约访问;其依赖不混入旧版venv。主审、专项、概率三类模型配置彼此独立。厂商模型不能写正式规则、概率或审批状态。每次run固定方案、证据和全部模型配置,撤销权限在实际调用前重验。
|
||||
|
||||
编排可以在方案授权范围内由模型决定先查什么、调用哪个Skill;必查项、硬规则、工具权限、预算和发布门禁由程序强制。初期改进针对知识/题库/编排配置,训练主审权重不在P0。
|
||||
|
||||
对应ADR-09–14;当前没有新增服务/迁移/模型进程,目标图不能作为运行事实。
|
||||
@@ -0,0 +1,172 @@
|
||||
# 兴邦预审 v2 详细设计候选
|
||||
|
||||
状态:0.2 草案,工程阶段①/②未定案;以下端点和新类型尚未实现。覆盖 BR-01–44 / E-01–26 / AC-01–45,先形成可评审的契约,再编写代码。
|
||||
|
||||
## 1. 约定与契约归属
|
||||
|
||||
唯一代码 owner 拟为 backend/contracts/prescreen.py,复用既有 Evidence / ProjectSnapshot,通过适配器处理版本差异;前端类型生成链在 M1 实现。API 路由仅授权和校验,业务决策在 service。
|
||||
|
||||
共同字段:id/project_id/snapshot_id 等为非空字符串(1–128 字符),revision 为正整数,时间为带时区 ISO-8601;未知发生时间允许 null,记录时间必填;data_domain 为 demo/production;所有输入禁止未知字段。列表分页候选 limit 默认 20,范围 1–100,cursor 可空。
|
||||
|
||||
P0 初始工程限制提案(非业务阈值):沿用单材料 10 MB;单次最多 10 个专项判断问题、每题最多 20 条证据、每次最多 10 个模拟动作;工具最多 20 次、总运行 120 秒、单次模型请求 30 秒、可重试故障最多重试 1 次且计入总预算。管理员只能在部署配置中降低初期限制;放宽须重新验证并更新规格。这些值在 OQ-04 定案前不得当作性能承诺。
|
||||
|
||||
## 2. 接口草案
|
||||
|
||||
路径前缀 /api/prescreen,写请求须身份、项目权限和 Idempotency-Key;更新已有对象需 expected_revision。Error 响应统一为 `{error:{code,message,retryable,request_id}}`,不得带密钥或无权限原文。
|
||||
|
||||
| 方法 / 路径 | 入参 | 成功响应 | owner / 主要异常 |
|
||||
|---|---|---|---|
|
||||
| POST /projects/{project_id}/case-timelines | document_ids:string[1..100] | 202 {timeline:CaseTimeline},状态 processing | history_cases;E-01/03/07/09 |
|
||||
| GET /case-timelines/{id} | 无 body | 200 CaseTimeline | history_cases;E-03;不存在统一 404 NOT_FOUND |
|
||||
| POST /case-timelines/{id}/experiences | title:string[1..200], source_event_ids:string[1..50], conditions:Condition[], exceptions:Condition[], scope:project/team, expires_at:datetime | 201 ExperienceCard draft | 经验治理;E-03/04/07/09 |
|
||||
| POST /experiences/{id}/transitions | action:submit/approve/reject/withdraw, expected_revision:int, note:string[1..2000] | 200 ExperienceCard | 复用经验治理;E-03/05/07 |
|
||||
| GET /projects/{project_id}/judgment-profiles | 无 body | 200 {profiles:[{id,revision,display_name,provider,capabilities}],default_profile_id:string?};仅授权可用项 | 判断配置;不存在/无权项目404;详见专项设计 |
|
||||
| POST /projects/{project_id}/runs | snapshot_id:string, enable_judgment:boolean=false, judgment_profile_id:string? | 202 ScreeningRun queued | prescreen;E-03/07/09/10/13 |
|
||||
| GET /runs/{id} | 无 body | 200 ScreeningRun | prescreen;E-03;不存在 404 NOT_FOUND |
|
||||
| POST /runs/{id}/cancel | expected_revision:int | 200 ScreeningRun | prescreen;E-03/05/07 |
|
||||
| POST /runs/{id}/simulations | assumptions:Assumption[1..10] | 202 Simulation queued(0.2异步增量见9.3) | scenario_service;E-03/05/07/09 |
|
||||
|
||||
材料上传/候选确认沿用已存在的项目助手接口,开发前核对调用方。此处不新增平行上传入口。
|
||||
|
||||
不存在与无访问权的对象统一对外为 404 NOT_FOUND,页面文案“对象不可访问或不存在”;E-03 用于已授权对象上的无权动作。评测先做离线内部入口,不开放目标标签 API 给主审。
|
||||
|
||||
## 3. 数据字段候选
|
||||
|
||||
| 对象 | 字段 / 类型 / 空值 | owner |
|
||||
|---|---|---|
|
||||
| CaseTimeline | id, project_id, data_domain, revision;status:processing/ready/partial/failed;events:DecisionEvent[];warnings:string[] | history_cases |
|
||||
| DecisionEvent | id;event_type:question/evidence/action/opinion/decision;occurred_at:datetime?;recorded_at:datetime;question:string;evidence_ids:string[];judgment_before:string?;judgment_after:string?;conditions:string[] | history_cases |
|
||||
| Condition | field:string(标准字段白名单);operator:eq/in/present/absent;value:string/bool/string[]/null;数据类型按 operator 校验,不执行表达式 | 经验治理 |
|
||||
| ExperienceCard | id, project_id, data_domain, revision;version:string;title;status:draft/in_review/published/rejected/withdrawn;source_event_ids:string[];conditions/ exceptions:Condition[];scope:project/team;team_id:string?;expires_at;reviewer_id:string?;policy_version:string? | 经验治理 |
|
||||
| Finding | 复用既有 Finding;展示 title/result/evidence_ids/basis_ids/suggested_action/status;无依据只能 unknown,已有枚举不改名 | 预审编排 |
|
||||
| ScreeningRun | id, project_id, data_domain, revision, snapshot_id;status 见第4节;recommendation:advance/supplement/stop/insufficient_information/null;findings:Finding[];missing_inputs:string[];applied_experiences:{id,version,reason,evidence_ids}[];probability:null;probability_reason:not_calibrated;degradations:{code,message}[];judgment_config:{enabled,profile_id?,profile_revision?,provider,model_version?,adapter_version?,prompt_version?,mapping_version?};versions:{schema,policy,skills,experiences,model,questions};created_at;finished_at:datetime? | 运行存储 |
|
||||
| Judgment | id, run_id, question_id, question_version;type:choice/score/binary;status:completed/skipped/failed;answer:JudgmentAnswer?;evidence_ids:string[];provider:jev/local/disabled;profile_id:string?;profile_revision:int?;model_version:string?;native_metrics:NativeMetric[];error_code:string?;skip_reason:string? | judgment_provider |
|
||||
| Assumption | action_id:string;description:string[1..1000];field_changes:{field,value}[];required_evidence_ids:string[] | scenario_service |
|
||||
| Simulation | id, project_id, base_run_id;assumptions:Assumption[];changed_findings:{code,before,after,basis_ids}[];unresolved_findings:string[];formal_result:false;created_at | scenario_service |
|
||||
| Evaluation | id, dataset_version, split_id;run_versions:object;locked_at:datetime?;status:prepared/running/locked/revealed/invalidated;metrics:{name,numerator,denominator,value?,scope}[] | prescreen_evaluation |
|
||||
|
||||
JudgmentAnswer、NativeMetric、JudgmentProfile 及配置选择规则统一详见 [专项判断模型切换](11-judgment-providers.md) 第3–5节。题型统一为 choice/score/binary;原草案中的 noul 是厂商语义,改由 Jev 适配器处理,不再进入业务题型。该草案从未实现,无已上线 API 迁移。未知可作为显式答案;completed 只表示完成该题处理与校验(允许缺证直接返回 unknown),不表示支持结论或项目通过。
|
||||
|
||||
Evidence 来源可定位不代表真实性已核验,真实性结果须单列 Finding。conditions 非空,team 范围必有 team_id;例外命中即排除;首次发布缺失 reviewer_id 不合法。撤回不删除历史引用。
|
||||
|
||||
迁移拟新增有版本守卫的历史事件/预审对象存储,具体 DDL 在 M1 定案;禁止覆写旧 schema_v2 初始化或复用旧生产库测试。
|
||||
|
||||
## 4. 状态机与权限
|
||||
|
||||
| 对象 | 合法转换 | 守卫与失败 |
|
||||
|---|---|---|
|
||||
| 历史过程 | processing→ready/partial/failed | 部分缺日期为 partial;重新提炼生成新 revision |
|
||||
| 经验 | draft→in_review→published/rejected;rejected→draft;published→withdrawn | submit 由编辑者;approve/reject/withdraw 由发布角色;审核不能自批,编辑后重提审;过期在读取时排除 |
|
||||
| 运行 | queued→running→completed/partial/awaiting_input/failed;queued/running→cancelled | awaiting_input 补件后创建新运行,旧运行保留;completed 不允许原地覆写 |
|
||||
| 模拟 | queued→running→completed/partial/failed;可取消,详见9.5 | 不存在“应用到真实项目”捷径;真实材料按原确认流程进入新快照 |
|
||||
| 评测 | prepared→running→locked→revealed;任一未完状态→invalidated | locked 前标签不可进入推理;发现泄漏保留作废理由 |
|
||||
|
||||
recommendation 在 queued/running 时为 null,终态仍可能为 insufficient_information;partial 不是通过。过时结果允许查看但显示版本差异,不能静默升级到新版本。
|
||||
|
||||
## 5. 错误与恢复
|
||||
|
||||
错误码与文案统一引用规格第5节,防止维护两份。补充 NOT_FOUND 的语义见第2节。403/422 不自动重试;408/429/5xx/连接错误可按预算重试一次,使用同一幂等键。无可恢复工作时终止并保留日志;不自动切换未批准厂商。
|
||||
|
||||
硬规则冲突保留原模型提案但有效 recommendation=stop;来源无法验证的判断为 unknown。若综合意见失去关键依据,降为 insufficient_information 或 supplement,必须记录缺失事项;具体业务“关键项”列表依方案版本管理,需 OQ-01 确认。
|
||||
|
||||
## 6. 边界清单
|
||||
|
||||
空材料/空经验集:展示 empty,允许现有规则核查,明确无历史经验支持。版本不支持:422;对象过时:409;跨项目和跨域:过滤+授权拒绝。不能将 lack of evidence 当成 yes/no 否定事实。
|
||||
|
||||
幂等键唯一范围 actor_id+project_id+operation+key,记录请求哈希;相同请求返回原对象,冲突 E-09。并发更新通过 revision 和事务;先写运行记录再入队,取消后禁止写成功结果。实施阶段须覆盖 Worker 崩溃后恢复。
|
||||
|
||||
## 7. 测试映射
|
||||
|
||||
history_cases→AC-01/02;经验治理与检索→AC-03/04/13;prescreen+policy→AC-05/06/07/08/12;judgment_provider→AC-09/16/17/18/19/20/21;工具策略→AC-10;scenario_service→AC-11;命令入口→AC-14;evaluation→AC-15。具体测试提案见验证方案,当前均不是已执行的新功能测试。
|
||||
|
||||
## 8. 未决项
|
||||
|
||||
OQ-01 业务类型和关键项;OQ-02 审核权限;OQ-03 模型出口;OQ-04 性能/预算与验收阈值;OQ-05 已确认会议事件的标签/窗口映射;OQ-06 独立仓库和部署资源。全部在决策记录中有 owner 和进入条件。本文件不可直接作为已批准实现合同。
|
||||
|
||||
## 9. 三模块闭环契约增量(0.2 / 未实现)
|
||||
|
||||
覆盖新增 BR-21–44 / E-16–26 / AC-22–45。本文是唯一业务契约说明,11 文档拥有 Judgment 子契约;14 文档解释流程,不复制类型。下列类型在独立 v2 后端 contracts 下落地,具体绝对路径由 T00 定案,不能直接在旧版新增平行持久化入口。
|
||||
|
||||
### 9.1 共用约束与枚举
|
||||
|
||||
Ref={id:string,version:string};EvidenceRef 使用既有证据 ID 与快照绑定,不接受浏览器自造授权。所有 ID/版本非空且最长128,字符串说明默认最长2000,时间为带时区 ISO8601。数组默认上限100,另有定义者从其定义;分页沿用第1节。金额使用十进制定点及币种/单位,不用浮点字符串直接运算。未知值使用 null,不使用 0 或空字符串代替。
|
||||
|
||||
Origin=history_derived/manual/policy_import;DataDomain=demo/production;KnowledgeKind=skill/rule。GovernanceStatus=draft/in_review/published/rejected/withdrawn。RuleEffect=advisory/hard。EventOutcome=approved/rejected/deferred/withdrawn/not_submitted/conditional/unknown;是否将 conditional 计入目标由 MappingProfile 固定,P0不得默认当approved。
|
||||
|
||||
知识候选中的条件复用 Condition 的安全表达方式;数值算子 gt/gte/lt/lte 作为候选 v2 扩展,必须声明字段类型、币种/单位并由程序校验,旧契约不接受时不能直接透传。禁止 eval、SQL 或自然语言直接执行。缺失输入为 unknown,不等于条件不成立。
|
||||
|
||||
### 9.2 类型字段与唯一 owner
|
||||
|
||||
| 对象 | 字段与约束(共同字段约定见上) | owner |
|
||||
|---|---|---|
|
||||
| ImportBatch | id,project_id,data_domain,revision,created_at;status:queued/parsing/ready/partial/failed/cancelled;items:ImportItem[1..100];total_bytes:int>=0;parser_version:string | 材料导入服务 |
|
||||
| ImportItem | id,document_id:string?,relative_path:string[1..512],sha256:string[64],size_bytes:int>=0,mime_type:string;status:queued/parsing/parsed/failed;error_code:string?;observed_at:datetime?;received_at:datetime | 材料导入服务 |
|
||||
| SourceLocator | document_id,document_version;kind:pdf/table/manual;page:int>=1?;sheet:string?;cell_range:string?;excerpt:string?;pdf必有page,table必有sheet和cell_range,manual必有说明;不得把任意本机路径当定位 | 证据层 |
|
||||
| FactConflict | id,project_id,field:string,candidate_evidence_ids:string[2..100];status:unresolved/resolved;resolution_note:string?;selected_evidence_ids:string[];resolved_by:string?;resolved需后两项及说明 | 事实确认服务 |
|
||||
| KnowledgeCard | id,project_id,data_domain,revision,version,kind,title:string[1..200],origin,status;source_event_ids:string[];source_evidence_ids:string[];parent_version:Ref?;created_by,edited_by;scope:project/team,team_id:string?;conditions/exceptions:Condition[];effective_at,expires_at;reviewer_id:string?;evaluation_ref:Ref?;dimensions:DimensionSpec[];content:SkillContent或RuleContent | 复用卡片治理 |
|
||||
| SkillContent | required_fields:string[];allowed_tools:string[](仅已登记工具ID);steps:{id,instruction:string,tool_ids:string[]}[];output_schema_ref:Ref;missing_input_action:supplement/manual_review;stop_conditions:Condition[] | Skill注册服务 |
|
||||
| RuleContent | effect:advisory/hard;predicate:Condition[];on_match:flag/block;basis_evidence_ids:string[];policy_ref:Ref?;authorization_ref:string?;hard发布必须具备正式依据和独立审核 | Rule注册服务 |
|
||||
| DimensionSpec | id,label:string[1..80],order:int>=0;scale_id:string;scale_version:string;levels:{value:int,label:string,criterion:string}[];component_refs:Ref[];required:boolean;同ID必须语义/刻度一致 | 方案维度解析 |
|
||||
| ReviewPlan | id,project_id,data_domain,version,revision,title,status:GovernanceStatus;data_card_refs/skill_refs/rule_refs/experience_refs:Ref[];dimensions:DimensionSpec[];critical_check_ids:string[];judgment_bindings:{task,profile_id,profile_revision}[];created_by,reviewer_id:string? | 方案治理 |
|
||||
| TrajectoryStep | id,run_id,parent_step_id:string?,sequence:int>=0;kind:plan/skill/tool/rule/judgment/synthesis;component_ref:Ref?;input_refs/output_refs:string[];evidence_ids:string[];status:queued/running/completed/skipped/failed/cancelled;started_at:datetime?,finished_at:datetime?;reason_summary:string?;error_code:string?;latency_ms:int>=0?;cost:number>=0?;cost_currency:string? | 运行存储 |
|
||||
| ReviewOutcome | id,project_id,meeting_id,revision,occurred_at:datetime,recorded_at:datetime;reviewed_snapshot_id:string?;raw_code:string[1..100];normalized:EventOutcome;mapping_ref:Ref?;label:bool?;conditions:string[];evidence_ids:string[1..100];status:matched/unmatched;supersedes_id:string?;recorded_by:string | 会议结果服务 |
|
||||
| ImprovementCandidate | id,project_id,data_domain,revision;target:knowledge/orchestration/question_profile;target_ref:Ref;source_run_ids/outcome_ids:string[];change_summary:string;proposed_revision_ref:Ref;status:draft/evaluating/ready/in_review/approved/rejected/released/withdrawn;evaluation_ref:Ref?;reviewer_id:string?;released_ref:Ref? | 改进治理 |
|
||||
| DatasetManifest | id,version,data_domain,seed:int?,generator_version:string?;template_version:string?;source_hash:string;split_id:string;split_policy_version:string;group_assignments_ref:string;counts:{outcome,count:int>=0}[];created_at;synthetic:boolean | 数据集服务 |
|
||||
| ProbabilityView | target_event:company_review_meeting_pass;snapshot_id;as_of:datetime;real_estimate:null(P0);reason:not_calibrated;demo_estimate:DemoEstimate? | 概率呈现服务 |
|
||||
| DemoEstimate | value:number[0..1];source:synthetic_demo;scenario_table_version:string;scenario_key:string;label:string(固定人工设定说明);仅demo域 | 演示估计服务 |
|
||||
|
||||
KnowledgeCard 是既有 Skill/Rule 注册对象的目标投影,不新建第二套发布库;ExperienceCard 仍保存支持方法/规则的历史过程依据,二者用 Ref 关联。历史提炼来源必有 source_event_ids 或 source_evidence_ids;manual 可以无历史案例,但 hard 发布仍需正式依据。policy_import 不自动获得 hard 权限。撤回保留旧引用,过期状态在使用时派生。
|
||||
|
||||
ReviewOutcome.label 仅在明确 mapping_ref 且材料版本 matched、结果有可用二元映射时有值;withdrawn/not_submitted/deferred/unknown 均为 null。结果更正生成新 id 并指向 supersedes_id,拒绝跨项目或循环更正。后台保留变更审计,禁止改写已锁定评测;受影响评测追加失效/重算记录。
|
||||
|
||||
TrajectoryStep 的输入/输出正文通过授权存储引用访问;cost 缺失时币种也为空;failed 必有 error_code。序号在 run 内唯一,父步骤必须属于同 run,无循环。正文输出按数据策略脱敏,不存密钥或隐藏思维链。
|
||||
|
||||
### 9.3 现有草案对象增量
|
||||
|
||||
- ScreeningRun 新增 plan_ref:Ref、trajectory_id:string、run_instruction:string[0..2000]、dimension_results:{id,stage:int?,state:unknown/checked/blocked,basis_ids:string[]}[]、probability_view:ProbabilityView。原 probability:null 与 probability_reason:not_calibrated 保留;probability_view.real_estimate 在P0也必须为空,不形成两套不同数值。
|
||||
- POST /projects/{project_id}/runs 新增必填 plan_ref:Ref 和可选 run_instruction;快照仍必填。原单一专项profile选项保留为默认绑定,ReviewPlan.judgment_bindings 按 task 精确覆盖;存在冲突或指定不支持任务则拒绝。首次实现前固化解析优先级测试。
|
||||
- Assumption 新增 kind:information/business_change、preconditions:Condition[]、conflicts_with:string[];field_changes 仅允许方案声明的可模拟字段,不能写审批状态或正式事实。required_evidence_ids 缺失不允许说真实核验已完成;纯假设显示未落实前提。
|
||||
- Simulation 新增 revision、selection_hash:string、status:queued/running/completed/partial/failed/cancelled、probability_view:ProbabilityView?、error_code:string?、frozen_versions:object(与base_run匹配)。异步创建从原201调整为202;原型没有业务API,因此无线上兼容迁移。空选择客户端恢复基线,不创建空情景。
|
||||
- JudgmentProfile 增量由11第8节定义;不在本节维护第二份模型字段。
|
||||
|
||||
### 9.4 候选接口补充
|
||||
|
||||
统一权限/幂等/expected_revision/error格式沿用第2节;以下全部未实现。GET按对象范围检查,列表用limit/cursor,返回items/next_cursor;跨域/不可访问对象404。拟新增请求参数必须在T00/T02契约定案及对应OpenAPI中完整列出,未定案不开始接口实现。
|
||||
|
||||
| 接口 | 输入 / 输出 | 权限 / 错误 |
|
||||
|---|---|---|
|
||||
| 既有材料上传/确认入口扩展 | 增加batch_id及SourceLocator;通过当前调用方核对实际路径,不建立平行上传API | 项目材料编辑;E-01/03/04/16/17 |
|
||||
| POST /projects/{project_id}/import-batches | manifest:{relative_path,mime_type,size_bytes,sha256}[1..100];202 ImportBatch;实际字节仍走原上传链并校验服务端哈希/大小 | 材料编辑;E-07/09/16 |
|
||||
| GET /import-batches/{id} | 200 ImportBatch | 项目查看;404 |
|
||||
| POST /import-batches/{id}/retry | item_ids:string[1..100],expected_revision;202 ImportBatch;仅失败项 | 材料编辑;E-05/07/09 |
|
||||
| POST /projects/{project_id}/knowledge-candidates | kind,origin,content,source_event_ids,source_evidence_ids,conditions,exceptions,scope,expires_at;201 KnowledgeCard draft;服务端决定创建人/状态/版本 | 提议者;E-03/04/07/18;完整body以9.2字段约束定案 |
|
||||
| PATCH /knowledge-candidates/{id} | expected_revision及允许编辑字段;200新草稿修订;已发布生成新版本对象 | 编辑者;E-03/05/07 |
|
||||
| POST /knowledge-candidates/{id}/transitions | action:submit/approve/reject/withdraw,expected_revision,note;200 KnowledgeCard;委托同一治理服务 | 发布按独立资格;E-03/05/07/18/24 |
|
||||
| POST /projects/{project_id}/review-plans | 方案字段(不含服务端ID/状态/审阅人);201 ReviewPlan draft | 方案编辑;E-03/07/19/20 |
|
||||
| POST /review-plans/{id}/transitions | action:submit/approve/reject/withdraw,expected_revision,note;200 ReviewPlan | 独立发布资格;E-03/05/19/20 |
|
||||
| GET /runs/{id}/trajectory | 200 {run_id,steps:TrajectoryStep[],next_cursor};seq稳定分页 | 项目查看;404;按当前权限解析引用 |
|
||||
| POST /projects/{project_id}/review-outcomes | meeting_id,occurred_at,reviewed_snapshot_id?,raw_code,conditions,evidence_ids,supersedes_id?;201 ReviewOutcome;服务端映射label | 指定评审记录人;E-03/04/07,E-23/26为已保存记录警示 |
|
||||
| POST /projects/{project_id}/improvements | target,target_ref,source_run_ids,outcome_ids,change_summary,proposed_revision_ref;201 ImprovementCandidate draft | 提议者;E-03/04/07 |
|
||||
| POST /improvements/{id}/transitions | action:evaluate/submit/approve/reject/release/withdraw,expected_revision,note;200 ImprovementCandidate | 审核与发布独立资格;E-03/05/24;release委托既有发布入口 |
|
||||
|
||||
提炼作业、数据生成与评测先做内部受控任务;不开放任意prompt/文件路径/SQL执行API。新增读取卡片、方案、会议结果和改进列表在T02沿既有组件目录/对象查询接口扩展;实际URL与所有前端消费字段须在Contract gate前补齐,当前明确为阻塞项,不由实现者临时猜路径。
|
||||
|
||||
### 9.5 状态、恢复与存储要求
|
||||
|
||||
| 对象 | 转换与守卫 | 失败/恢复 |
|
||||
|---|---|---|
|
||||
| ImportBatch | queued→parsing→ready/partial/failed;queued/parsing→cancelled;partial/failed可仅重试失败items | 已成功条目不重复写入;确认事实另走授权流程;取消后忽略迟到结果 |
|
||||
| 卡片/方案 | draft→in_review→published/rejected;rejected→draft;published→withdrawn | 审核不能自批;已发布编辑创建新draft版本;依赖撤回后新运行拒绝、旧运行保留 |
|
||||
| Simulation | queued→running→completed/partial/failed;queued/running→cancelled | 新选择生成新记录;前端按selection_hash+请求序号接收;错误保留基线 |
|
||||
| 会议结果 | 追加保存matched/unmatched;核对关联通过追加修订记录 | 无证据拒绝;E-23/26可保存但不计有效标签;更正不改原运行 |
|
||||
| ImprovementCandidate | draft→evaluating→ready或rejected;ready→in_review→approved或rejected;approved→released;released→withdrawn | rejected可新建修订draft;评测失败保留原因;release引用已有不可变发布结果 |
|
||||
|
||||
改进发布与卡片发布同一事务/幂等命令边界,不允许一边标released一边没有对应版本;若复用服务跨事务,须在详细实现设计中明确outbox/恢复协议并有故障测试。评测锁定后才揭示结果;标签污染任何阶段均可追加作废记录。
|
||||
|
||||
存储优先现有对象/版本/审计机制,通过追加迁移保存新增类型;唯一键至少覆盖run+sequence、project+版本引用、命令幂等范围。完整DDL、索引、读写白名单及迁移前后恢复测试属于T02门禁,当前未建表。新数据根与旧库物理隔离由T01验证。
|
||||
|
||||
### 9.6 验收映射与当前限制
|
||||
|
||||
导入/冲突→AC-23/24;来源与治理→AC-25/26/27/43;方案/维度→AC-28/29/44;概率/沙盘→AC-30/31;轨迹/结果→AC-22/32/33;改进→AC-34/41;数据集→AC-35/36;业务指标→AC-37;专项准入/冻结/预算→AC-38/39/40;卡片UI→AC-42;建议边界→AC-45。
|
||||
|
||||
本节明确了候选类型和写路径,但读接口完整清单、DDL、生产角色映射、容量/模型时延及实际目录尚未定案。T00先关闭首个实施切片的缺口,不能以“文档写完”宣布全部Contract gate通过。
|
||||
@@ -0,0 +1,101 @@
|
||||
# 兴邦预审 v2 UI Spec
|
||||
|
||||
状态:候选表面规格,生产UI尚未开发;Superdesign 原型单独见 [交互原型记录](12-prototype.md),不以原型替代生产验收。输入:需求规格与详细设计草案。
|
||||
|
||||
## 1. 交付面与骨架
|
||||
|
||||
| 表面 | 区域 / 信息层级 | 消费契约 |
|
||||
|---|---|---|
|
||||
| 预审总览 | 项目与数据域→意见及缺证状态→主要问题→经验对照→证据抽屉 | ScreeningRun、Finding、Evidence |
|
||||
| 历史过程 | 左:来源材料;中:争议/补件时间线;右:经验卡草稿与审核记录 | CaseTimeline、DecisionEvent、ExperienceCard |
|
||||
| 推进沙盘 | 左:证据→动作→问题变化图;右:假设动作;底:真实与模拟差异 | Simulation、ScreeningRun |
|
||||
| 验证看板 | 数据集版本/保留状态→对照指标→分歧案例→人工复盘 | Evaluation |
|
||||
|
||||
拟集成至 xingbang-workbench / review-workbench 的项目上下文,实际路由与组件拆分在 UI 实现前定案,不恢复已合并的旧页面。
|
||||
|
||||
## 2. 组件所有权
|
||||
|
||||
ProjectContext 拥有 project_id、data_domain 和当前 run_id;RunSummary 只展示运行结果;CaseTimelinePanel 拥有选中事件;EvidenceDrawer 拥有证据展开状态;ExperienceEditor 拥有草稿和 expected_revision;ScenarioPanel 拥有 assumptions,不能写真实项目事实;EvaluationPanel 拥有数据集选择,不能提前获得保留标签。
|
||||
|
||||
组件名为提案,尚未创建。URL 仅保存 project_id/run_id/tab 等非敏感可分享状态;身份令牌、材料文本和假设正文不放 URL。切换项目清空选中证据与模拟动作。
|
||||
|
||||
## 3. 状态机
|
||||
|
||||
| 状态 | 可见内容 | 允许动作 / 禁用动作 |
|
||||
|---|---|---|
|
||||
| idle | 项目说明与启动入口 | 有权限可发起;无项目不发请求 |
|
||||
| loading | 对应区域骨架与加载文案 | 可退出;禁重复提交 |
|
||||
| ready | 已获数据与版本信息 | 按权限操作 |
|
||||
| empty | “尚无历史经验”或“尚无运行”及下一步 | 可导入/发起;不能绘制虚构节点 |
|
||||
| error | 错误码映射的文案、请求编号和恢复入口 | 仅可恢复错误显示重试 |
|
||||
| submitting | 保留原内容,显示提交中 | 禁二次提交;不清除草稿 |
|
||||
| stale(ready 附加标识) | “项目已有新版本,当前为历史结果” | 可查看/新运行;禁止覆写旧结果 |
|
||||
|
||||
业务运行 queued/running/awaiting_input/completed/partial/failed/cancelled 单独展示;partial 必须突出未完成项。更新失败时回 ready/error 且保留草稿,版本冲突提示刷新后合并。
|
||||
|
||||
## 4. 动作与权限
|
||||
|
||||
| 动作 | 客户经理 | 评审员/发布人 | 管理员 | 只读访客 |
|
||||
|---|---|---|---|---|
|
||||
| 查看项目结果和证据 | 授权项目 | 授权范围 | 授权范围,非默认全量 | 仅指定演示项目 |
|
||||
| 确认材料、发起预审 | 项目授权 | 项目授权 | 不自动继承业务权限 | 隐藏 |
|
||||
| 模拟动作 | 项目授权 | 项目授权 | 项目授权 | 仅演示授权 |
|
||||
| 编辑经验候选 | 提议权限 | 编辑权限 | 不自动继承 | 隐藏 |
|
||||
| 审核发布/撤回 | 隐藏 | 独立发布资格且不可自批 | 治理授权后 | 隐藏 |
|
||||
| 修改模型出口与数据域 | 隐藏 | 隐藏 | 策略管理资格 | 隐藏 |
|
||||
| 揭示保留集结果 | 隐藏 | 指定验证负责人且预测已锁定 | 不因管理员身份自动开放 | 隐藏 |
|
||||
|
||||
后端始终重验权限。无权限动作不显示控件;有权限但条件未满足显示禁用原因。经验发布前展示范围、例外、有效期和变更差异;撤回说明新运行不再使用、历史引用保留。
|
||||
|
||||
## 5. 沙盘视觉规则
|
||||
|
||||
证据→动作→受影响问题→预审意见;线宽最多三档,对应已定义影响等级,不能直接代表概率提升。未验证假设使用虚线和“模拟”文字;真实核验使用实线及来源。通过点击/键盘打开依据,颜色不单独传意。
|
||||
|
||||
一次只突出当前选中问题的关联路径,其他弱化;未知项不伪装为否定。补件可能发现新风险,允许意见变得更谨慎。图旁提供等价列表,缩小窗口时改纵向排列,不依赖复杂图才能理解结果。
|
||||
|
||||
P0 真实业务未校准时不显示百分比“通过率”,展示 recommendation、missing_inputs、degradations 和数据域/版本。用户新增要求在设计原型中展示概率及沙盘联动,因此仅演示域允许使用独立的演示值,紧邻“人工设定、未经校准”标识;不得填入真实 probability。具体语义、依据链和即时联动见 [概率与沙盘设计](13-probability-prototype.md)。真实概率仍须独立算法、数据与验收。
|
||||
|
||||
## 6. 文案与视觉
|
||||
|
||||
[DESIGN.md](DESIGN.md) 管理语义 token 候选。新增文案拟 key 化:prescreen.result.*, prescreen.error.*, experience.status.*, simulation.*, evaluation.*;每个错误 key 对应规格 E-*,中英文范围在 UI 门禁前确定。当前无对应 i18n 实现,不伪称可用。
|
||||
|
||||
正文按现有 16px 基线,主动作可键盘访问;可见 focus、表单 label、错误定位、减少动效、文本与图的等价表达。长标题换行,证据抽屉不截断关键原文。产品页面默认不暴露 question_version 等实现细节,只在“依据与版本”展开。
|
||||
|
||||
## 7. 验收映射与未决
|
||||
|
||||
来源点击与权限 AC-01/08;未知时间 AC-02;经验审核 AC-03/04;降级 AC-07/09;模拟隔离 AC-11;无伪概率 AC-12;盲测标签 AC-15。
|
||||
|
||||
UI 门禁尚未通过:路由位置、统一 token 实现、i18n 文件、视觉稿、键盘和对比度验收待完成。截图自评不能单独算通过,应有可复现的 DOM/行为断言及独立评审记录。
|
||||
|
||||
## 8. 专项判断选项(候选)
|
||||
|
||||
预审发起表单增加“专项核查”:关闭 / 本地模型 / Jev 官方服务;实际选项来自后端授权配置(JudgmentProfile),不能只按品牌静态显示可用。用户看到模型名称、提供方和可用状态;配置 ID/修订和供应商指标放“依据与版本”。管理员在部署配置中管理端点和凭据,P0 不新增在线编辑密钥页面。
|
||||
|
||||
无 Jev Key 时 Jev 配置不进入可选列表;本地可用则可选择本地。没有可用配置时仅保留关闭并说明未配置。业务请求只传 judgment_profile_id,不传 URL 或 Key;后端重新校验,失败按 E-13 显示。提交中禁改本次选择,运行结束或排队后修改选择均需发起新运行。
|
||||
|
||||
结果展示本次实际提供方、未完成题目和拒答/unknown;关闭显示“专项核查已关闭”。失效/超时不把选中项悄悄变为另一个模型,不展示占位高分。对应 AC-17/18/19/20/21;页面路由及真实交互待 UI 阶段实施。
|
||||
|
||||
概率可视化增量:主结果使用概率环、六轴证据核验阶段雷达和维度追溯;具体阶段含义、假设联动、miniOpenClaw/Skills/Tools/Rules职责及P-14–17验收见[概率设计第6节](13-probability-prototype.md#6-概率环证据雷达与解释链2026-09-29增量)。演示数值不能转换为真实信用评分或概率贡献。
|
||||
|
||||
## 9. 三模块表面规格增量(0.2,未改原型)
|
||||
|
||||
深色导航+浅色工作区方向不变;本轮只补交互规格,不宣称新页面已由Superdesign生成。业务首页显示历史经验加工、AI预审、轨迹复盘三个入口,保留项目上下文;具体路由在T00/T09定案,不恢复旧独立页。
|
||||
|
||||
| 表面 / 状态owner | 骨架与消费字段 | 动作与异常 |
|
||||
|---|---|---|
|
||||
| 材料集合 / ImportBatchPanel | 文件清单、逐项状态、解析结果和冲突;ImportBatch/FactConflict/SourceLocator | 材料编辑者可选文件/重试失败项/确认;E-16逐项说明,E-17保留冲突,切换项目清空选择 |
|
||||
| 经验加工 / KnowledgeCandidateEditor | 左来源事件,中提炼要求与差异,右Skill/Rule草稿;KnowledgeCard | 提议者可生成/手工新增/编辑;发布人审核但不可自批;E-18缺依据不得硬规则发布 |
|
||||
| 方案装配 / ReviewPlanEditor | 数据/Skills/Rules三类卡,依赖及核查维度预览;ReviewPlan/DimensionSpec | 编辑者保存草稿、提交审核;E-19/20定位不可用依赖/冲突;不显示Tools配置卡 |
|
||||
| 预审与沙盘 / RunSummary、ScenarioPanel | 概率状态/建议→动态维度→证据→动作组合;ScreeningRun/ProbabilityView/Simulation | 等待新情景时保基线并显示计算中;只接受最新选择响应;失败不显示旧情景为新结果 |
|
||||
| 轨迹复盘 / TrajectoryPanel | 左Agent步骤,右会议时间线,中间差异;TrajectoryStep/ReviewOutcome | 授权查看者展开来源;记录人可追加会议结果;E-23/26保留未对齐/未映射标识 |
|
||||
| 改进对照 / ImprovementPanel | 偏差→候选修订→固定对照→审核/发布;ImprovementCandidate/Evaluation | 提议者提交,评测员锁定/揭示,发布人审核;E-24显示未完成门禁,不提供自动上线按钮 |
|
||||
|
||||
上述表面全部继承第3节idle/loading/ready/empty/error/submitting与stale附加状态;业务状态由03第9节决定。只读访客无编辑/发布按钮;后端对每次动作重验。载入失败显示请求编号,版本冲突保留草稿。切项目时取消或忽略旧请求,清空证据、卡片选择、沙盘和轨迹节点;不能把前项目片段带入后项目。
|
||||
|
||||
卡片来源采用独立视觉:history_derived=“历史提炼”+历史图标+origin-history样式;manual=“人工创建”+编辑图标+origin-manual样式;policy_import=“制度导入”+文件图标+origin-policy样式。另显示data_domain与status徽标。历史卡被人工编辑后仍显示历史提炼及人工修订记录。来源色与通过/阻断状态色分开,去色仍能区分(AC-25/42/43)。
|
||||
|
||||
动态维度遵守14第5节:同刻度3–8维用雷达,其他完整列表或分组,来源抽屉可追溯数据/Skill/Tool/Rule/经验版本。空维度显示“当前方案尚未配置核查维度”,不补六轴占位。硬规则单独突出(AC-29/44)。
|
||||
|
||||
轨迹使用可折叠的步骤流和时间轴,当前步骤高亮、失败/跳过用明确文字。缺少人工过程时只显示已知会议事件和“过程材料不完整”,不造装饰性成功节点。图旁提供等价列表;动画短时且可关闭,不以炫酷动效暗示模型隐藏推理已可见(AC-32/33)。
|
||||
|
||||
新增中文文案域:material.import.*、knowledge.origin.*、plan.validation.*、trajectory.step.*、outcome.mapping.*、improvement.status.*。P0语言范围只中文;统一文案模块的实际文件与token消费路径在T09前定案。视觉数值与对比度尚未验证,不以本文替代UI门禁。
|
||||
@@ -0,0 +1,59 @@
|
||||
# 兴邦 v2 实施与迁移计划
|
||||
|
||||
状态:计划,未执行 v2 代码迁移。当前用户要求补齐文档以便使用Claude Code/DeepSeek开发;本轮不开始业务实现。
|
||||
|
||||
## 1. 迁移边界
|
||||
|
||||
拟目标目录 F:/mini-OpenClaw-v2,当前尚不存在。先保护旧版,再从已备份提交白名单迁移,禁止把整个工作区连同数据/密钥/依赖一起复制。新仓库远程和独立部署资源见 OQ-06。
|
||||
|
||||
| 候选迁移内容 | 依赖理由 | 验证 |
|
||||
|---|---|---|
|
||||
| src/ 当前页面、组件、代理与 lib | workbench 和鉴权相互依赖,先保留可运行闭环 | 生产构建及既有 UI 脚本 |
|
||||
| backend/api、services、contracts、graph、tools、data_layer | app.py 注册路由与服务调用链 | unittest + 导入/启动冒烟 |
|
||||
| backend/skills、fixtures、requirements.txt | 固定方法和演示种子是运行/测试依赖 | fixtures 标为 demo,运行不读取旧数据目录 |
|
||||
| backend/app.py、config.py 与必要无密钥默认配置 | 真正入口是 app.py,不照抄旧文档的 backend.backend.main | 独立进程和健康检查 |
|
||||
| package*.json、Next/TS/CSS 配置、Dockerfile、入口脚本 | 构建完整性 | npm ci/build、Compose config |
|
||||
| backend/test_*.py、相关 scripts 测试与 verify.py | 保留既有回归能力 | 同一验证入口在 v2 运行 |
|
||||
| docs/project-process、docs/v2、根 AGENTS.md | 新流程与设计基线 | 链接/规则覆盖检查 |
|
||||
|
||||
排除:.env、server-deploy.conf、.docker-codex、node_modules、venv、.next*、日志、sessions/storage/raw_logs、实际 xingbang_data、原始客户材料、_backup*、office 临时文件。旧 DELIVERY.md 含凭据,不能原样进入新仓库;部署文档采用重写后的不含密钥说明。代码内默认演示数据需标注来源,不把默认频次当成客户经验。
|
||||
|
||||
抽取前按 import 与路由调用图确认必要依赖。先建立可运行基座,再根据测试逐项裁剪,不能按文件名猜核心。原版始终保留,禁止恢复用户此前主动合并删除的旧页。
|
||||
|
||||
## 2. 分批交付
|
||||
|
||||
| 里程碑 | 产出 | 进入条件 / 完成证据 |
|
||||
|---|---|---|
|
||||
| M0 文档与恢复点(本轮) | Gitea 快照、流程适配、URD/规格草案 | 远程 SHA 一致;文档检查;不是新版功能交付 |
|
||||
| M1 独立基座 | v2 源码、环境模板、契约生成与追加迁移骨架 | 阶段①–③相应门禁通过;独立路径、完整构建、回归通过 |
|
||||
| M2 历史过程与经验 | 时间线、原文定位、审核发布和检索 | AC-01/02/03/04/08/13,模拟与真实域隔离 |
|
||||
| M3 主审与专项判断 | 有界 Agent Loop、统一 JudgmentProvider、本地开源模型适配、可选 Jev 适配、证据和硬规则约束 | AC-05/06/07/09/10/12/14/16/17/18/19/20/21;先契约 mock,再验证本地路径;有 Key 后单独启用 Jev 实测,缺 Key 不阻塞 local 交付 |
|
||||
| M4 沙盘与展示 | UI 状态、假设动作、正式/模拟对照 | UI门禁通过,AC-11;源快照哈希不变 |
|
||||
| M5 脱敏试点 | 数据授权清单、保留集盲测和复盘 | AC-15/16,专家评审、指标事先锁定 |
|
||||
| M6 概率校准(后续) | 事件口径、训练/校准/测试、漂移监测 | OQ-05 关闭且样本支持;审批概率与违约风险分开 |
|
||||
|
||||
一次只交付一个可验证业务切片。新增文件按流程 ≤500 行;既有巨大 service 只接薄入口,不继续堆独立领域逻辑。新依赖先评估必要性和大小。
|
||||
|
||||
## 3. 每批标准动作
|
||||
|
||||
读 AGENTS 和对应流程 → 检查 status/log/调用方 → 更新需求规则与接口 → 增加行为测试 → 最小实现 → 相关测试 → 项目 verify.py → diff 自查 → 文档同步 → 独立提交和评审。
|
||||
|
||||
行为涉及权限、证据、模拟、外发时必须有反例;不以静态页面或模型的一句解释替代行为断言。失败先定位,不能反复重跑直到偶然通过。
|
||||
|
||||
## 4. 配置、迁移与回滚
|
||||
|
||||
代码通过可回滚提交/镜像标签恢复。数据迁移追加并有幂等守卫;旧库先快照,升级/回退边界经测试后才部署。回退代码不等于撤销已写入数据。v2 使用独立工作目录、Compose 项目、容器名、数据卷及端口,具体值在 OQ-06 定案。
|
||||
|
||||
本轮不实施剪裁、不改业务行为、不创建远程 v2 仓库、不部署。任务执行细分见 [开发交接](15-development-handoff.md),T00可立即文档核对,后续按切片过门禁。先把评审文档写清,避免规范到位后返工。
|
||||
|
||||
## 5. M3 专项模块实施顺序
|
||||
|
||||
按 [专项判断设计](11-judgment-providers.md) 先落统一题库/请求/答案契约与配置冻结,再接本地推理服务并完成真实本地集成测试。Jev 适配独立实现;无 Key 时只验证厂商响应 fixture,live 用例标 skipped,不宣称原版已接通。mock 仅用于测试,不能冒充业务推理结果。
|
||||
|
||||
两条路径都读取同一版历史经验和证据,主审不写提供方分支。上线某个配置之前,该提供方/模型/提示/题库组合必须独立完成相同业务验收;合同测试通过不能证明模型效果合格。
|
||||
|
||||
## 6. 三模块闭环与任务包映射
|
||||
|
||||
M0包含本次0.2规格更新;M1对应T00–T02;M2对应T03–T06;M3对应T07/T08;M4对应T09/T10/T11的模拟闭环;M5/M6对应T13真实试点/概率。T12是可选Jev及实时专项准入。原里程碑编号保留,不能把P0模拟会议回放推迟到真实数据才能演示。
|
||||
|
||||
核心复用是卡片/方案、材料来源、受限Agent Loop、运行存储和经验治理;代码抽取仍需依赖白名单,不全盘复制旧四Agent所有领域。本期不自动微调主审、不建Tools业务卡、不把前端演示数据充当后端能力。
|
||||
@@ -0,0 +1,83 @@
|
||||
# 兴邦 v2 验证与质量门
|
||||
|
||||
状态:新版验证计划;以下 AC 测试为待实现,不能以旧版测试通过替代。
|
||||
|
||||
## 1. 可追溯测试矩阵
|
||||
|
||||
| 用例组 | 规格 AC | 层级 / 断言 |
|
||||
|---|---|---|
|
||||
| 材料确认与历史时间线 | AC-01/02 | 单测/集成:未确认不入事实;未知时间不补造;解析失败保留原件 |
|
||||
| 经验审核、检索与版本 | AC-03/04/13 | 权限/集成:无资格、不适用、过期、撤回、异域不可应用;旧版本可追溯 |
|
||||
| 主审与硬约束 | AC-05/06/07 | 有冲突和缺证的固定样例:单题正面不覆盖硬规则,缺数据不判高风险 |
|
||||
| 证据真实性边界 | AC-08 | 伪造 ID、跨项目、无权片段被拒;有引用不等于真实性已证实 |
|
||||
| 专项模型降级 | AC-09/16 | mock:未配置、超时、畸形响应、未批准出口;零伪造判断、零未授权发送 |
|
||||
| 提供方切换与契约 | AC-17/18/19/20/21 | 单测/集成:无 Jev Key 的 local、disabled、畸形答案、题型缺失、配置冻结、无自动跨提供方回退;调用 spy 核验实际发送目标 |
|
||||
| Agent 工具与预算 | AC-10 | 注入材料无法调用 terminal/任意SQL;预算耗尽确实停止 |
|
||||
| 模拟隔离 | AC-11 | 真实快照哈希/数据库记录前后不变;关联改进不可简单相加 |
|
||||
| 概率门禁 | AC-12 | UI/API/导出均无未经校准概率;Noul、Score不转审批率 |
|
||||
| 幂等与并发 | AC-14 | 同键同载荷只一条运行;同键异载荷409;Worker重启不重复落库 |
|
||||
| 盲测 | AC-15 | 预测先锁定,标签后揭示;同项目不跨开发/验收集;泄漏样本作废 |
|
||||
|
||||
## 2. 工程验证顺序
|
||||
|
||||
使用 backend/venv,先运行本批相关 unittest 与 UI 检查,再运行根目录的 `backend/venv/Scripts/python.exe scripts/verify.py`。Linux 对应 backend/venv/bin/python。命令、cwd、revision、fixture 和完整日志保存在 test-evidence。
|
||||
|
||||
现有 verify.py 实际包含:git diff、全部 backend unittest、四项 UI 源码守卫、Next.js build、本地/云端 Compose config;这些 UI 脚本不等于真实浏览器 E2E。--docker 会构建并启动本地 Compose,有端口与停止副作用,不能在与旧版冲突的资源上随意运行。
|
||||
|
||||
文档任务运行链接、编号覆盖、文件来源、格式检查。GitHub workflow 文件存在不代表 Gitea CI 已执行;远程检查未观测记 Unobserved。
|
||||
|
||||
## 3. 业务验证设计
|
||||
|
||||
同一批材料按版本冻结比较:A=现有助手;B=主审+历史经验;C-local=B+本地专项模型;有 Key 且获准时加入 C-Jev=B+Jev。对照回答“经验有没有帮助”和“所选专项模型有没有额外收益”,不把两项改进混成一个原因。先用合成反例暴露故障,再用客户持有的脱敏保留集检验。
|
||||
|
||||
样本包含通过、退回、否决、附条件通过、资料不全及意见分歧。按项目分组、按预测时间截断,只使用当时已取得的材料;区分首次提交通过和补件后最终通过。开发集不能看到保留集答案,也不能通过完整历史报告间接泄漏目标答案。
|
||||
|
||||
| 指标 | 计算口径 | 限制 |
|
||||
|---|---|---|
|
||||
| 重大问题漏检 | 专家标注重大问题中未识别数 / 专家标注总数 | 先定义重大问题;无标注不计算 |
|
||||
| 无依据结论 | 复核为无依据的实质判断 / 被复核判断 | 引用存在但不支持也算无依据 |
|
||||
| 误报 | 被专家认定不成立的问题 / 系统提出问题 | 专家分歧单列 |
|
||||
| 有效补件 | 解决预定争议的补件 / 已完成补件 | 不把补件数量当质量 |
|
||||
| 一致性 | 与参考意见一致的项目 / 可比较项目 | 不等于正确率;分歧要复核 |
|
||||
| 效率与成本 | 相同边界下的人工耗时、端到端耗时、调用成本 | 同时检查重大问题漏检,不能只追求快 |
|
||||
|
||||
分母为0返回 not_applicable,不填0%。指标验收阈值在盲测前与兴邦锁定(OQ-04),不能看结果后调线。少量案例用于可行性和故障发现,不支持总体准确率宣传。
|
||||
|
||||
## 4. 概率后续门禁
|
||||
|
||||
定义审批事件、预测时点、样本纳入范围和制度时期;只观察已送审项目会有选择偏差。独立保留时间段测试校准情况,记录 Brier/校准曲线等指标并说明不确定性;通过概率不代表投放后无违约。具体样本量、模型选择和阈值另立规格,不在无数据时承诺。
|
||||
|
||||
动作模拟的分数变化属于模型条件判断,不能直接当作措施造成通过率提升的因果结论。
|
||||
|
||||
## 5. 失败和发布门
|
||||
|
||||
失败→复现→定位→最小修复→同一检查复验,完整记录。未解决故障不得发布镜像。仅保存源码恢复快照不等同发布,快照注明验证状态。
|
||||
|
||||
人工评审按正确性、一致性、安全、测试四维;未经独立评审不标通过。线上效果须在真实交付环境观测,本地测试不能替代。
|
||||
|
||||
## 6. 提供方效果与可用性分别验收
|
||||
|
||||
同一冻结题库、证据和专家标签验证 Jev/local 的业务含义与结构契约,不要求逐题答案或数值相同。分别统计错误、漏检、拒答/unknown、耗时及成本;模型不支持的题型也计入未完成项,不能从分母偷偷排除。阈值和映射按提供方/模型/题型独立登记,先定再测。
|
||||
|
||||
local 集成须在没有 Jev 凭据的环境实际执行,并验证未发送 Jev 请求;本地模型服务本身的授权配置另行处理。Jev live 无凭据则明确跳过,fixture 通过仅证明适配代码结构。两者未真实执行前,当前文档一律不宣称切换功能可用。
|
||||
|
||||
## 7. 三模块增量验收矩阵(0.2,待实现)
|
||||
|
||||
| 检查领域 | AC | 必须观察的行为 |
|
||||
|---|---|---|
|
||||
| 会议目标/结果对齐 | AC-22/33 | 结果代码保留;退出不当否决;未知快照和后期结果不倒填初始标签;更正追加 |
|
||||
| 多源导入与冲突 | AC-23/24 | 文件部分失败、容量/格式、表格定位/单位、未确认事实和重复导入隔离 |
|
||||
| 人工/历史卡片 | AC-25/26/27/42/43 | 来源谱系、临时要求不持久化、硬规则资格、统一治理、发布版本不可变、去色可识别 |
|
||||
| 方案与动态维度 | AC-28/29/44 | 无Tools配置入口;依赖权限/有效性;维度冲突;0/2/6/9维与异刻度列表不遗漏 |
|
||||
| 沙盘与概率状态 | AC-30/31 | API/UI/导出域隔离、最新选择匹配、失败保基线、互斥动作、组合不简单相加 |
|
||||
| 轨迹与建议边界 | AC-32/45 | 完整run/多step关联、失败保留、引用授权、成本unknown、不伪造隐藏推理、不自动关闭项目 |
|
||||
| 改进与独立判断 | AC-34/41 | 自评分非真值;固定对照;未评测/自批/退化均不能发布;发布幂等与旧版可读 |
|
||||
| 合成数据与隔离 | AC-35/36 | seed可复现、多类结果、划分先于提炼、关联客户/项目与近重复无交叉、衍生Skill不泄漏 |
|
||||
| 业务目标指标 | AC-37 | 高预测组通过分子/已观察分母、覆盖率、未观察数同时报告;空分母为不适用 |
|
||||
| 本地模型准入 | AC-38/39/40 | 每任务/用途验收、冻结checkpoint、否定/例外反例、超长拒绝而非截断、禁止静默路由 |
|
||||
|
||||
数据集划分必须早于检索库、经验/Skill提炼和模型调参;开发、校准、测试分开。真实评测的分母与未送审选择偏差单列,不能把只在已评审项目上的通过率推广给所有早期线索。
|
||||
|
||||
T08报告四层结果:契约fixture、真实本地连通、中文专项效果、运行用途准入。可连通但效果差时报告失败,disabled路径仍可运行。mock与模拟专家标签不能代替独立专家标注。模型更新对既有护栏有回归时不能发布。
|
||||
|
||||
文档验证只检查编号/链接/事实/格式及源代码未变;本轮不运行未实现的新功能测试,也不重跑与纯文档无关的全量构建。行为实现时统一verify要求不变。
|
||||
@@ -0,0 +1,109 @@
|
||||
# 部署与 Gitea 使用说明
|
||||
|
||||
日期:2026-09-28。本文区分已核验、本地配置、历史记录和未来提案;不包含密钥。本轮没有实际部署。
|
||||
|
||||
## 1. Git 远程事实
|
||||
|
||||
| 项 | 已核验值 |
|
||||
|---|---|
|
||||
| 当前 Gitea 远程 | origin |
|
||||
| SSH 仓库 | ssh://git@192.168.10.111:2222/qiaoqichao/mini-openclaw.git |
|
||||
| Web 地址线索 | http://8.163.107.248:13000/qiaoqichao/mini-openclaw (Gitea push 回执提供,网页本轮未单独测试) |
|
||||
| 默认分支 | main,git ls-remote --symref origin HEAD 已核对 |
|
||||
| 另一个远程 | github-backup → git@github.com:NathanAlex7/mini_openclaw.git;本轮未推送 |
|
||||
| 源码恢复点 | codex/backup-before-ai-prescreen-v2-20260928 / 4d5a420671cb073a56335bd617e7d0812b8179a9 |
|
||||
| 文档工作分支 | codex/xingbang-v2-docs-20260928 |
|
||||
|
||||
备份分支包含此次会话之前的 9 个已修改文件和选定的未跟踪源码、文档、流程原文,共37个变更文件;未改默认分支。其父提交为 b10093f。快照保存当时源码状态,不等同所有功能已验收。
|
||||
|
||||
## 2. 常用命令
|
||||
|
||||
先确认身份、网络和现有 SSH host key;不要为连接便利关闭主机指纹校验,不把口令放 URL。
|
||||
|
||||
```powershell
|
||||
git status --short
|
||||
git remote -v
|
||||
git ls-remote --symref origin HEAD
|
||||
git fetch origin
|
||||
git switch -c codex/<task-name>
|
||||
# 只暂存本次已检查文件,避免 git add . 带入临时凭据
|
||||
git add -- <file1> <file2>
|
||||
git diff --cached --check
|
||||
git commit -m "docs(v2): 说明改动与结果"
|
||||
git push -u origin HEAD
|
||||
git rev-parse HEAD
|
||||
git ls-remote --heads origin <branch-name>
|
||||
```
|
||||
|
||||
本地 HEAD 与指定远程分支 SHA 相同才可说“已备份”。只 commit、只 push 输出、网页旧分支都不能替代核验。需合并时在 Gitea 创建面向 main 的 PR,按流程至少一人评审并绑定最终修订验证;本轮不自动合并。
|
||||
|
||||
## 3. 无损恢复
|
||||
|
||||
恢复到全新目录检查,不在有工作成果的目录执行 reset --hard/clean。
|
||||
|
||||
```powershell
|
||||
git clone --branch codex/backup-before-ai-prescreen-v2-20260928 --single-branch ssh://git@192.168.10.111:2222/qiaoqichao/mini-openclaw.git F:\mini-OpenClaw-restore-20260928
|
||||
git -C F:\mini-OpenClaw-restore-20260928 rev-parse HEAD
|
||||
```
|
||||
|
||||
预期提交:4d5a420671cb073a56335bd617e7d0812b8179a9。目标须不存在。当前仅验证远程可提供该提交,未执行恢复目录创建或破坏性恢复演练。
|
||||
|
||||
这是源码备份:不包括实际业务数据库、上传文件、运行日志、会话、密钥或 Docker 数据卷;这些资产需要另行按部署环境建立备份。现有 Git 历史中的旧交付文档含遗留凭据,未重写既有历史;新文档和未来新仓库不得继续复制这些值。
|
||||
|
||||
## 4. 当前运行与部署事实
|
||||
|
||||
| 项 | 来源 / 状态 |
|
||||
|---|---|
|
||||
| 后端 | backend/app.py,python app.py 固定监听8002;或在 backend 工作目录用 uvicorn app:app --port 明确指定 |
|
||||
| 前端 | package.json 的 next dev/start,默认3000;Next代理默认后端127.0.0.1:8002 |
|
||||
| 本地 Compose | docker-compose.yml,容器 mini-openclaw-stable,宿主3200/8002 |
|
||||
| 云端 Compose | deploy/docker-compose.aliyun.yml,容器 mini-openclaw,loopback FRONTEND_PORT默认80/BACKEND_PORT默认8002 |
|
||||
| ECS 本机配置 | server-deploy.conf 指向 8.163.107.248:22,用户 qykj_qqc;不复制此含密钥文件 |
|
||||
| 旧项目远程目录 | /home/qykj_qqc/mini-OpenClaw,来自此前会话只读检查;本轮未复查服务器 |
|
||||
| 云端实时健康 | Unobserved,本轮未发起 SSH、重启或模型调用 |
|
||||
|
||||
当前 Dockerfile 在一个镜像中运行 Next 和 FastAPI,容器内部端口3000/8002;卷保存 xingbang_data 与日志。云端浏览器通过同源代理访问后端。受信模型 endpoint、密钥和 ERP 连接由环境提供,不提交到 Git。
|
||||
|
||||
## 5. 现有验证与发布链
|
||||
|
||||
```powershell
|
||||
.\backend\venv\Scripts\python.exe scripts/verify.py
|
||||
```
|
||||
|
||||
先安装项目依赖;必须使用项目虚拟环境。测试报告在 test-evidence,配置示例 deploy/aliyun.env.example 只有占位值。当前脚本 publish-acr.ps1/.sh 会验证、构建、推送;deploy-aliyun.sh 会 pull/up 并健康检查,这些是有副作用的发布脚本,不在本轮执行。
|
||||
|
||||
发布要求:验证通过、不可变镜像标签、部署配置单独保管、既有数据卷有备份、目标端口和容器隔离已确认。回滚用已验证的旧镜像标签;数据库变更的回退另行设计,不能把换镜像等同数据恢复。
|
||||
|
||||
## 6. v2 部署隔离提案
|
||||
|
||||
目标独立目录 F:/mini-OpenClaw-v2;独立 Git 项目、Compose 项目名、镜像名、容器、数据卷和宿主端口须在实施前确定。当前没有创建 v2 远程、部署文件或分配实际端口。不要执行原版 Compose 去部署 v2,否则会复用旧容器名和数据。
|
||||
|
||||
前端代理可通过 CORE_BACKEND_URL / RISK_AGENT_BACKEND_URL 指向隔离后端;启动命令和测试 smoke URL 必须随端口同步。将代码从旧版复制出来不自动完成资源隔离。
|
||||
|
||||
真实材料是否可发往 DeepSeek/Jev,取决于客户数据策略及实际部署方式;不能用“部署在客户服务器”推断“数据不会外发”。模型出口需要独立核对。
|
||||
|
||||
## 7. Gitea CI 状态
|
||||
|
||||
当前仓库只有 .github/workflows/verify.yml,未发现 .gitea/workflows。Gitea Actions 开关、runner、required checks 均未核验。不能声称 Gitea 已自动测试。
|
||||
|
||||
后续接入 CI 时:先核对服务器能力和 runner→使用同一本地验证入口→上传 test-evidence→验证失败阻断发布→确认对最终 SHA 真正执行。只新增 YAML 不算 CI 接入完成。
|
||||
|
||||
## 8. 专项判断提供方配置提案(尚未实现)
|
||||
|
||||
配置结构以 [专项判断模型切换](11-judgment-providers.md) 为准,不向现有 .env / Compose 写入尚未被代码消费的变量。拟新增后端专用配置 `judgment.default_profile_id`(可空)及 `judgment.profiles`;默认关闭,管理员验证本地配置后才选为默认或显式选择。
|
||||
|
||||
- Jev:按将来核实的官方接口配置端点与后端凭据引用;缺 Key 不影响主审或 local 配置启动。没有凭据不能标记 Jev 已就绪。
|
||||
- local:指定经许可的本地/内网推理服务、模型版本和提示版本;不需要 Jev Key。本地服务是否需要自己的访问令牌取决于其部署认证;开源模型权重许可、硬件资源、结构化输出能力和中文评审效果在接入前核实。
|
||||
- disabled:零专项请求,保留规则、历史经验和主审预审;结果显示缺失专项核查。不能把 disabled 当作 local 的成功结果。
|
||||
|
||||
模型服务与业务后端分开配置端口/资源。容器内 localhost 指容器自身,实际地址须从后端容器连通性验证,不能照抄宿主机地址。配置只接受已批准端点,校验重定向/解析目标和数据范围;名称叫 local 不证明全系统数据不外发,主审等其他模型出口也须核对。
|
||||
|
||||
每个配置有不可变修订,运行引用其版本;敏感值通过后端密钥引用解析,不写前端、Git或日志。变更默认配置只作用于新运行,回滚选择已验证旧配置并新建运行,不篡改旧记录。
|
||||
|
||||
## 9. 本地判断服务与编码工具隔离(0.2)
|
||||
|
||||
Laya为候选独立模型服务,独立依赖/权重目录、端口和健康检查,业务后端通过受控HTTP调用;实际镜像/启动命令尚未创建,见11第8节。部署验收包含固定修订、预加载权重、断网推理、资源上限、失败降级和后端容器到服务的连通性。未完成这些验证不承诺本地全功能可用。
|
||||
|
||||
Claude Code连接DeepSeek属于开发者工具设置,与后端主审/专项模型无关;本轮未修改CLI或环境变量。新增CLAUDE.md只导入AGENTS及交接入口,不含密钥。运行数据、模型权重、用户全局配置不进入源码备份。
|
||||
|
||||
本页第1节的Gitea事实是2026-09-28核验记录;最新提交是否已备份必须查看当次delivery.json与远程SHA,不沿用原版恢复点作为证明。
|
||||
@@ -0,0 +1,71 @@
|
||||
# 历史经验数据试点与客户展示方案
|
||||
|
||||
状态:产品方案草案,演示数据与真实验证必须分开。
|
||||
|
||||
## 1. 客户沟通目标
|
||||
|
||||
争取客户开放一批用途明确、范围可控的历史评审过程数据,通过盲测判断是否继续扩大。核心表达:让每个新项目调用兴邦历史上处理类似争议的核查方法。没有真实数据时不能证明真实判断准确,也不以模型品牌代替效果证据。
|
||||
|
||||
## 2. 四幕展示脚本
|
||||
|
||||
| 场景 | 屏幕内容 | 现场操作 | 能证明什么 / 不能证明什么 |
|
||||
|---|---|---|---|
|
||||
| 历史经验提炼 | 原始材料→问询→补件→判断变化→经验候选 | 点击争议展开原文;删掉发生日期 | 能展示来源和未知处理;模拟案例不能证明懂兴邦历史 |
|
||||
| 经验用于新项目 | 当前争议与正反历史案例并排 | 切换无经验/有经验两次实际运行 | 展示查什么、为什么查;不能预设“有经验必然更好” |
|
||||
| 项目推进沙盘 | 证据→动作→问题→建议变化 | 加保证、补回款证据、调融资额 | 展示条件推演;不能把模拟差值称为因果提升 |
|
||||
| 客户保留集验证 | 锁定预测→揭示参考→人工复盘 | 客户现场出题或持有未见案例 | 给出可核对的验证过程;小样本不宣传总体准确率 |
|
||||
|
||||
示例故事:利润增长但现金流偏弱,最初要求回款核查;部分证据支持正常账期,部分显示恶化;主审比较差异后形成补件或附条件推进意见。明确标“虚构演示案例”,不使用真实客户名称作背书。
|
||||
|
||||
技术展开层展示:冻结快照、命中经验版本、工具调用结果、专项模型具体问题及实际提供方、缺失项和硬规则。主页面显示业务含义,避免用技术图掩盖未验证结论。
|
||||
|
||||
## 3. 首批数据清单
|
||||
|
||||
| 数据 | 最小字段/材料 | 用途 | 缺失处理 |
|
||||
|---|---|---|---|
|
||||
| 项目索引 | 匿名project_id、业务类型、行业、阶段时间 | 同项目关联与分组 | 无稳定ID不用于跨版本比较 |
|
||||
| 初始送审材料 | 当时版本、取得时间、来源 | 恢复初始信息条件 | 不拿最终报告冒充初稿 |
|
||||
| 问询/评审意见 | 问题、提出时间、角色 | 识别争议和核查策略 | 角色用岗位或假名 |
|
||||
| 补件与答复 | 对应问题、材料版本、取得时间 | 看证据是否回应问题 | 无对应关系人工确认 |
|
||||
| 方案调整 | 金额/期限/增信等前后版本 | 区分补信息与改业务条件 | 不推断变化原因 |
|
||||
| 批复及附带条件 | 审批阶段、结果、日期、条件 | 决策标签与条件 | 与审批通过预测输入隔离 |
|
||||
| 当时制度 | 版本、适用时间和范围 | 判断旧经验是否适用 | 未知制度版本限制迁移 |
|
||||
| 后续表现(可后续) | 条件落实、回款/风险事件时间 | 另行检验经验有效性 | 不作为早期预测时可得输入 |
|
||||
|
||||
优先完整的少量案例链,数量和行业由双方确认。客户保留“原始身份→匿名ID”的映射;同项目全流程保持同一假名。不要求首先开放整库、全量个人信息或生产写权限。
|
||||
|
||||
## 4. 经验访谈提纲
|
||||
|
||||
1. 当时首先担心哪一件事,为什么?
|
||||
2. 哪条信息改变了你的判断;没有它还会同意吗?
|
||||
3. 哪项补件只是增加信息,哪项措施真正改变了项目条件?
|
||||
4. 这条经验有哪些例外,在哪类项目中会失效?
|
||||
5. 当时是否有分歧、例外授权或资料之外的背景?
|
||||
6. 后续结果是否支持当时判断,哪些结论仍不确定?
|
||||
|
||||
访谈是待确认意见,必须与原文和事件关联;不能把个人偏好直接发布成公司规则。
|
||||
|
||||
## 5. 数据流与边界
|
||||
|
||||
客户选择范围/匿名处理→授权导入→按客户/项目分组和时间划分并冻结保留集→仅对开发集核验材料/提炼经验→专家确认→开发样本验证→保留集独立预测并锁定→揭示结果→共同复盘。
|
||||
|
||||
部署前明确:原文保存位置、读取角色、模型出口、是否保留供应商日志、保留期限和删除责任。供应商条款及私有化能力尚未核验,不承诺 Jev 可本地部署。默认不把真实材料发送外部服务。
|
||||
|
||||
## 6. 试点验收与扩展条件
|
||||
|
||||
使用验证文档的重大问题漏检、无依据结论、误报、有效补件、专家分歧与效率指标。阈值先约定,结果差也如实展示;基线/经验增强/本地专项增强/Jev增强(可选)分开测。客户数据从开发样本到保留样本逐步开放,不以模型推荐代替专家复盘。
|
||||
|
||||
通过试点后再扩大业务范围;失败则给出问题归因(提取、检索、经验适用、主审推理、数据缺失),不靠调漂亮分数掩盖。数据接入后的价值应通过相同边界的对照证明。
|
||||
|
||||
## 7. P0模拟闭环演示顺序(2026-09-29)
|
||||
|
||||
1. 展示3,000条候选规模的虚构案例清单、生成版本及多种结果分布;不是兴邦真实记录。
|
||||
2. 选择开发集案例,展开原始问询/补件/会议事件,提炼一张Skill和一张advisory Rule。
|
||||
3. 自然语言修改适用范围,再人工新增卡片;颜色、文字、图标区分来源,统一审核发布。
|
||||
4. 数据卡+Skills+Rules组成方案,展示维度随方案变化;Tools只在依据中展示。
|
||||
5. 初期项目缺证→主审核查→问题与补件→演示概率来源;勾选动作比较情景,撤销恢复基线。
|
||||
6. 回放完整Agent trajectory,展开真实执行步骤或明确标记的演示步骤;对齐模拟会议记录,查看材料版本差异。
|
||||
7. 从漏检提出改进候选,在隔离样本对照后人工审核发布;展示旧版仍可回放。
|
||||
8. 专项可关闭或选已验证本地配置;Laya尚未接通/未达标时如实显示,不依赖Jev Key完成演示。
|
||||
|
||||
最终向客户展示的是“数据怎样转化为可治理经验,以及怎样验证效果”的方法。真实高预测组通过率、覆盖率和校准在客户保留集上另行报告。模拟标签与模拟专家意见不能被包装成真实业务验证。
|
||||
@@ -0,0 +1,64 @@
|
||||
# 决策、未决项与学习记录
|
||||
|
||||
日期:2026-09-29(0.2增量,原记录保留)。状态区分“用户已明确的方向”和“工程候选待评审”。
|
||||
|
||||
## 1. ADR
|
||||
|
||||
| ID | 决策 / 状态 | 被否方案 / 理由 | 影响 |
|
||||
|---|---|---|---|
|
||||
| ADR-01 | 复用 Next.js+FastAPI 与现有组件,工程候选 | 全面换框架;无法复用已验证链路 | 先迁移可运行基座,再逐步拆模块 |
|
||||
| ADR-02 | 主审综合意见、专项模型局部判断(Jev或本地),用户已明确 | Jev单题直接决定通过;缺乏整体研判 | 证据与硬规则约束最终有效输出 |
|
||||
| ADR-03 | 历史评审过程是核心资产,用户已明确 | 只存通过/不通过标签;丢失核查和判断变化 | 优先收集问询、补件、修改和批复条件 |
|
||||
| ADR-04 | 经验经审核、有适用范围,用户确认方向,工程细节待审阅 | 自动把任意反馈变成规则;会固化错误 | 复用现有经验治理,建立历史过程关联 |
|
||||
| ADR-05 | 无真实校准前不宣称审批概率,已讨论方向 | 分数/Noul直接转通过率;没有业务验证 | P0概率字段为空;先做可追溯预审和试点 |
|
||||
| ADR-06 | 独立v2代码目录待迁移,当前先备份与文档,用户最新顺序 | 直接覆盖现有部署;难回退 | 旧版Gitea恢复点先核验;v2目录尚未建立 |
|
||||
| ADR-07 | 按用户最新要求直接适配流程正文,原文保留在Gitea恢复点 | 照搬Electron路径/发布命令;无法执行 | AGENTS统一入口,正文按兴邦事实执行 |
|
||||
| ADR-08 | 专项判断支持 Jev 官方服务、本地开源模型和关闭;可切换方向用户已明确,契约细节为工程候选 | 把 Jev Key 作为产品依赖或用通用模型自评分伪装等效概率;供应依赖和指标口径不可控 | 统一业务题库/接口,独立适配/验收;本地路径先交付,Jev 接入不阻塞 |
|
||||
| ADR-09 | 公司评审会通过、初始材料介入、P0纯模拟,用户已确认 | 用违约率代替会议通过、只生成通过案例;偏离目标且没有反例 | 标签映射单列;未送审不当否决 |
|
||||
| ADR-10 | 三模块闭环与人工Skills/Rules入口,用户已确认 | 自动把反馈写入正式规则;不可控且丢失来源 | 来源/数据域/状态分离,统一审核和版本 |
|
||||
| ADR-11 | 数据/Skills/Rules装配方案,Tools受后台治理,用户确认方向 | 增加业务Tools卡、六维硬编码;权限负担且无法适配方案 | 维度随方案生成,工具只读追溯 |
|
||||
| ADR-12 | 按任务可替换专项服务,本地Laya为待测候选,用户接受建议 | 绑定Jev Key或称本地接口兼容即效果等价 | 独立环境、固定权重、各任务准入;缺Key不阻塞 |
|
||||
| ADR-13 | 轨迹+真实会议结果→改进候选→对照/审核→发布,用户确认方向 | 模型自评分自动训练/上线;循环强化错误 | 专家参考独立,划分先于经验提炼 |
|
||||
| ADR-14 | 编码模型与产品主审/专项模型独立;小任务交接,用户要求 | 一次让低成本模型重写全系统、双份开发规则 | CLAUDE导入AGENTS,T00–T13逐批验收;本机连接未配置 |
|
||||
|
||||
## 2. Open Questions
|
||||
|
||||
needed-by 是明确阶段门,不虚构双方尚未约定的日历时间。
|
||||
|
||||
| ID | 待定内容 | 当前处理 | owner | needed-by |
|
||||
|---|---|---|---|---|
|
||||
| OQ-01 | 首批业务类型、关键核查项、正式硬规则 | 只使用标注演示规则;不宣称兴邦制度 | 项目负责人+兴邦评审专家 | M2真实经验建模前 |
|
||||
| OQ-02 | 经验发布资格、独立复核、真实身份体系 | 演示角色明确标示;生产数据入口不开启 | 兴邦业务负责人+系统管理员 | M2生产权限实现前 |
|
||||
| OQ-03 | 专项/主审模型端点、本地模型与硬件、客户数据出口、保留策略 | mock/合成样本;先验证本地路径,缺 Jev Key 不阻塞;不发送真实材料 | 兴邦数据负责人+技术负责人 | 任何真实材料模型调用前 |
|
||||
| OQ-04 | 验收阈值、时延预算、资源/费用上限 | 文档工程限制仅提案,报告耗时不承诺效果 | 产品+测试+实施负责人 | M3配置定案及M5盲测前 |
|
||||
| OQ-05 | 已确认“公司评审会通过”和初期材料预审;尚需会议代码、附条件结果、观察窗口、样本量及选择偏差映射 | 方向已关闭;真实标签映射仍open,probability=null | 兴邦审批负责人+建模负责人 | M6概率需求进入架构前 |
|
||||
| OQ-06 | v2新仓库、云端目录、端口、容器/卷 | 暂用当前独立文档分支;不复用旧生产资源 | 项目负责人+运维 | M1迁移及任何v2部署前 |
|
||||
|
||||
以上待定不阻止当前文档交付;阻止相应业务实现/真实数据阶段越过门禁。用户新指令可直接关闭或调整范围,不重复请求已授权事项。
|
||||
|
||||
## 3. 当前阶段门检查
|
||||
|
||||
| 门 | 状态 / 证据缺口 |
|
||||
|---|---|
|
||||
| Term | 0.2已列闭环术语,用户确认产品方向,客户口径待审阅 |
|
||||
| Contract | 已有候选字段/状态/错误;新增读接口完整清单、DDL、类型生成未定案,见03第9节 |
|
||||
| Rule | BR-01–44已拆分并标职责,待评审 |
|
||||
| Exception | E-01–26有错误和文案,契约校验仍待实现 |
|
||||
| Coverage | 文档AC覆盖机械检查本轮执行;新功能行为测试未实现 |
|
||||
| Decision | OQ项按里程碑阻断,未宣告需求阶段全过 |
|
||||
|
||||
## 4. 学习与持久缺口
|
||||
|
||||
- 流程适配:来源文档含项目特例,最小owner是 XINGBANG-ADAPTATION.md 和根AGENTS入口;以后每次新增规范检查失效路径。当前完成文件与链接核验,不等同长期遵守效果。
|
||||
- 经验数据:默认团队模式和简化案例检索容易被误认为真实学习;owner为架构/产品说明,后续演示必须标来源。
|
||||
- Gitea CI:仅有GitHub YAML,runner与门禁未核验;owner运维,在首次v2合并前确认。
|
||||
- 历史文档密钥:旧DELIVERY.md有遗留凭据,当前恢复快照不改历史;新仓库迁移禁止携带;凭据有效性与轮换由凭据owner另行处理,本轮未访问验证。
|
||||
- 本地工具:沙箱进程初始化失败,已通过受审的升权命令完成工作;不将该环境问题误判为代码故障。
|
||||
|
||||
## 5. 0.2已确认与仍待定案
|
||||
|
||||
用户已明确业务目标,无须再次确认“三模块是否正确”“是否可以不用Jev”。本轮文档交付走纯文档路径;工程门禁不因为用户认可方向自动通过。
|
||||
|
||||
T00需收口:独立代码路径和资源、首个切片字段/全部读写接口/DDL/状态/测试,实际评审记录;T08需验证:本地硬件、checkpoint、中文任务阈值;T09需定案:路由/token/文案文件与可访问性。真实身份/制度/会议标签/出口由兴邦在P1前确认。未决项不阻塞写文档或模拟数据设计,但阻塞对应实现/真实用途。
|
||||
|
||||
学习缺口:跨编码代理容易失去上下文,最小owner是15-development-handoff及根CLAUDE导入入口;本次只验证文档结构,尚无Claude/DeepSeek实际接手效果,不能声称已节省成本。后续按任务耗时/返工/费用和验收记录评估。
|
||||
@@ -0,0 +1,70 @@
|
||||
# 本次交付记录:流程接入、版本备份和新版文档
|
||||
|
||||
日期:2026-09-28。业务实现未启动;文档仍为评审草案。
|
||||
|
||||
## 1. 用户授权与边界
|
||||
|
||||
用户要求:把 docs/project-process 接入 agent 开发规则;确保当前版本在 Gitea 备份;随后编写兴邦新版开发文档。沿用仓库唯一入口 AGENTS.md,不再建平行的 agent.md。
|
||||
|
||||
实际副作用:本地文档写入、创建Git分支/提交、向已配置origin推送独立分支。未部署、未调用真实模型、未更改数据库、未推送github-backup、未修改main。
|
||||
|
||||
## 2. 原版备份
|
||||
|
||||
- 原分支:codex/deploy-stable-20260909;上游origin/main。
|
||||
- 原HEAD:b10093f9d8a949c6a6f8f8ed6d5b9c1bb044b569。
|
||||
- 备份分支:codex/backup-before-ai-prescreen-v2-20260928。
|
||||
- 备份SHA:4d5a420671cb073a56335bd617e7d0812b8179a9。
|
||||
- 远程:ssh://git@192.168.10.111:2222/qiaoqichao/mini-openclaw.git。
|
||||
- 证据:git push成功后,git ls-remote返回完全相同SHA。
|
||||
- 内容:37个变更文件,包含用户已有未提交代码、测试、部署配置、脚本、resetdata页面、业务文档及新流程原文。
|
||||
- 排除:.docker-codex、本地Office锁文件、重复的project-process.zip;本来忽略的.env、server-deploy.conf、运行数据等均未加入。
|
||||
|
||||
备份扫描检查了新变更的常见凭据模式,包括docx XML,未发现匹配项;这不是完整历史密钥审计。已有旧文档凭据问题未扩散到新文档。
|
||||
|
||||
原始新增文档有11处行尾空格(部分为Markdown换行),备份原样保留并记录在baseline-whitespace.log;恢复快照不声称达到发布门禁。本轮新写文档另做diff检查。
|
||||
|
||||
## 3. 本次文档范围
|
||||
|
||||
根AGENTS流程入口、项目流程兴邦适配、docs/v2目录中的URD、七段规格、架构、详细设计、UI、视觉约束、迁移、验证、部署/Gitea、数据试点、决策和本记录。
|
||||
|
||||
按用户后续要求,project-process的README、01–08及两份URD模板已直接适配兴邦;保留八阶段与原规则编号,原始内容可从4d5a420恢复。根AGENTS同时修正为真实后端app.py和项目工作目录。
|
||||
|
||||
文档分支:codex/xingbang-v2-docs-20260928。最终提交与远程状态使用git rev-parse HEAD及git ls-remote核验;不把文档提交等同正式需求评审或新版发布。
|
||||
|
||||
## 4. 本轮验证
|
||||
|
||||
状态:旧版代码全量验证通过;规范和新版文档的机械检查通过。证据目录:test-evidence/20260928-v2-planning/。
|
||||
|
||||
2026-09-28 执行 backend/venv/Scripts/python.exe scripts/verify.py,工作目录为仓库根;报告在 test-evidence/20260928-164935-4d5a420/REPORT.md。124个后端测试、4项UI源码守卫、Next生产构建、本地与云端Compose配置及diff检查全部通过(9项检查)。未执行--docker,未启动/发布容器。后续仅修改规范文档,业务源码保持备份哈希不变;最终文档检查单独绑定最终文件摘要。
|
||||
|
||||
测试环境使用占位模型Key和测试开关,不复制真实密钥。Gitea CI、真实浏览器E2E和云端实时健康均未在本次验证。
|
||||
|
||||
本轮文档检查:25份Markdown、87个本地链接、16条BR/12条E/16条AC的唯一性与覆盖通过;原流程各R-*编号集合保持一致,来源项目无效命令/路径残留清除。26个非流程备份文件的字节哈希未变,确认未修改既有业务代码。新增文档摘要保存在final-document-hashes.json;git diff格式检查通过。HTML模板仅调整项目说明和例子,未变更脚本/样式,未做浏览器视觉验收。
|
||||
|
||||
审阅:已检查正确性(当前入口/路径)、一致性(前后端及草案状态)、安全(密钥与数据范围)、测试(检查覆盖与未完成项)。这是本轮作者自查;独立业务/技术评审尚未发生,不宣称需求阶段获批。旧版通过也不代表v2功能通过。
|
||||
|
||||
## 5. 回滚与剩余工作
|
||||
|
||||
源码恢复可从已核验分支克隆到新目录,不重置当前工作区。文档修改保留独立提交,可通过后续revert撤销,不删除原始规范。远程资源仅新增分支,无main改写;无需进行破坏性恢复演练。
|
||||
|
||||
剩余:需求与方案评审、独立v2代码抽取、真实权限/模型出口确认、历史过程提炼、Jev适配、沙盘实现、脱敏盲测与后续概率校准。全部列入实施计划和OQ,当前未宣称完成。
|
||||
|
||||
## 6. 追加:专项模型可选设计(2026-09-28)
|
||||
|
||||
用户补充可能无法取得 Jev Key,要求官方服务与本地开源模型可选且承担相同任务。新增 [专项判断设计](11-judgment-providers.md),同步 URD、规格、架构、详细接口、UI约束、实施/验证计划、部署、数据试点和 ADR-08。原有需求编号保留,追加 BR-17–20 / E-13–15 / AC-17–21。
|
||||
|
||||
统一题库和答案契约,提供 jev/local/disabled;local 不读取 Jev 凭据,故障不自动改用外部服务。主审形成综合意见,专项模型不能决定整体通过;模型原生指标分别验证,不将本地自报置信度转为审批概率。先实现本地路径,Jev live 缺 Key 可明确跳过。
|
||||
|
||||
检查:26份Markdown、94个本地链接、20条BR/15条E/21条AC的编号和覆盖、GWT、表格连续性、URD验收引用、文档范围与git diff格式均通过。命令/计划/文件哈希见 test-evidence/20260928-judgment-providers/。仅修改docs/v2,按纯文档轻量路径验证,本次未重跑旧版全量测试。新适配代码、真实模型调用和业务效果均未验证;未更改部署或旧版业务代码。
|
||||
|
||||
沿用 codex/xingbang-v2-docs-20260928 独立提交并备份;最终提交/远程SHA以该证据目录中的 delivery.json 为准。不修改原始备份分支或 main;独立评审及实现阶段仍待完成。
|
||||
|
||||
## 7. 追加:三模块闭环与跨编码代理交接(2026-09-29)
|
||||
|
||||
用户要求写清文档,准备使用Claude Code连接DeepSeek开发。本轮补齐14三模块闭环、15开发交接任务包,新增根CLAUDE.md导入AGENTS;同步URD/规格/架构/契约/UI/验证/部署/试点/决策。规则追加至BR-44、E-26、AC-45,旧编号保留。
|
||||
|
||||
记录公司评审会目标、初期介入、P0纯模拟;多源材料、人工与历史卡片同治理、动态维度、轨迹与会议结果关联、受控改进闭环;Laya独立服务按任务验证,Jev可选。编码模型与业务模型配置分离。现有原型和业务代码未改;未抽取v2、未装CLI或模型、未部署。
|
||||
|
||||
本轮按纯文档轻量路径,检查与修订哈希见 [文档检查报告](../../test-evidence/20260929-v2-handoff/REPORT.md),事实核对见 [来源记录](../../test-evidence/20260929-v2-handoff/FACTS.md)。不重跑无关业务全量测试;新功能行为测试均未实现。
|
||||
|
||||
独立业务/技术评审未发生,详细契约读清单/DDL/隔离资源仍由T00/T02收口。下一任务T00,不把产品认可当工程门禁完成。最终Git提交及远程备份以同证据目录delivery.json和实际SHA为准,不从4d5a420旧恢复点推断最新已备份。
|
||||
@@ -0,0 +1,158 @@
|
||||
# 可切换专项判断模块: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<max、options为空;binary 要求两者为空。题目版本一经冻结不变;适配器可以转格式,但不能更换业务问题、证据、等级定义或增减事实。证据为空按缺证处理,不请求模型,返回 completed+unknown,并保留缺证原因;不把材料缺失解释为不支持。
|
||||
|
||||
本地适配器采用所选服务已经验证支持的结构化输出方法,随后进行服务端严格校验;不能依赖“请返回 JSON”的提示就宣称有结构保证。不能支持所需题型时 E-14,畸形输出 E-15;不让主审悄悄猜一个分数补齐。
|
||||
|
||||
## 5. 统一答案与供应商差异
|
||||
|
||||
`JudgmentAnswer` 使用可辨识联合:
|
||||
|
||||
| kind | 字段 | 校验 |
|
||||
|---|---|---|
|
||||
| choice | value:string | 必须属于该题冻结 options |
|
||||
| score | value:number | 有限数值,且在该题 score_range 内 |
|
||||
| binary | value:boolean | 仅表达该题命题是否得到支持,不表示审批通过 |
|
||||
| unknown | reason_code:missing_evidence/inconclusive | 明确无法判断,不强制选择肯定或否定 |
|
||||
|
||||
正常答案 kind 与题型一致,unknown 对所有题型有效。结果字段见 [详细设计](03-detailed-design.md):completed 必须有合法 answer;failed/skipped 的 answer 必须为 null;failed 必须有 error_code,skipped 必须有 skip_reason(disabled/not_configured/not_authorized/unsupported)。例如能力缺失为 skipped+unsupported,并附 E-14;传输/输出错误为 failed,分别 E-06/E-15。关闭时已计划的题目可记 skipped+disabled;无计划题目时运行级保留关闭标识及降级说明,不制造题目。状态成功不等于业务通过。
|
||||
|
||||
`evidence_ids` 保存进入该判断的授权证据范围;它不证明模型真的使用或正确理解了证据。新增引用需再校验,主审仍逐项检查是否支持意见。
|
||||
|
||||
`NativeMetric`:`name:string`、`value:number`(有限值)、`semantics:string`(非空)、`source:provider_native/self_reported`。`native_metrics` 可为空;范围校验根据版本化适配规范,禁止把缺失值填0或1。它只用于审计/独立评测,不成为通用置信阈值或审批概率。
|
||||
|
||||
Jev 专有 Choice/Score/Noul 等响应只在适配器内部处理,具体厂商 schema 在真实接入前依据官方版本确认。若某题由原生连续输出转为 binary,须有该模型/题型独立验证过的映射和拒答区间;未验证就不声明 binary 能力,不默认套用0.5阈值。原始供应商指标仅保留原语义,不为 local 捏造同名概率。
|
||||
|
||||
本地模型可返回 choice/score/binary/unknown;没有原生概率就返回空指标。模型自己写的“置信度90%”即使记录也只能标 self_reported,不作为已校准概率。两类模型的原生指标都不能改写 ScreeningRun.probability;P0 仍为 null。
|
||||
|
||||
## 6. 失败边界与回滚
|
||||
|
||||
配置拒绝 E-13 发生在创建运行之前;运行中能力不支持 E-14、输出非法 E-15、调用故障 E-06、外发禁止 E-10、预算耗尽 E-08 均有可见记录。相关题目未完成时保留其他结果;关键依据缺失则依主审完整性规则给补件/信息不足,不能默认推进。
|
||||
|
||||
默认配置切回旧修订只影响未来新运行;持久化的运行配置与判断字段通过追加迁移引入。DDL 在 M1 定案,不覆盖旧对象或当前生产库。外部模型权重、密钥、原始材料不作为 Git 备份内容。
|
||||
|
||||
## 7. 验收与交付范围
|
||||
|
||||
AC-17:同题/同证据,两适配器输出可被同一主审契约消费;local 在无 Jev Key 的环境实际运行,调用记录无 Jev 请求。
|
||||
AC-18:畸形值拒绝;指标保留原语义;local 自评分不成为审批概率;无证据与合理拒答返回 unknown。
|
||||
AC-19:配置权限、禁用状态、能力缺失和出口撤销均有反例测试;不外发未批准材料。
|
||||
AC-20:排队后切换默认不会改变该运行;重试不改提供方,幂等重放不改配置。
|
||||
AC-21:两种服务均不可用时仍可关闭专项模块运行主审,结果明确限制。
|
||||
|
||||
业务效果验收使用同一冻结样本集和专家标准,分别统计两种模式的漏检、误报、无依据结论、拒答率、时延和成本。契约兼容不代表模型能力等价;验收合格才能将对应配置标为 ready。Jev 没有 Key 时其 live 测试标未验证,不阻塞已经通过验证的 local 模式。
|
||||
|
||||
本地具体模型、硬件和服务协议仍属于 OQ-03/04,接入前选择并验证;没有真实历史数据时只报告演示和合成用例结果。当前交付仅为设计,后续按 M3 落代码、测试与配置模板。
|
||||
|
||||
## 8. Laya 候选与按任务替换(2026-09-29)
|
||||
|
||||
用户已同意专项能力可替换、本地路径优先验证的方向。候选为 [NandhaKishorM/laya](https://github.com/NandhaKishorM/laya),官方仓库提供本地推理和HTTP服务。Jev 的有界题型参考 [TypeSafe 官方介绍](https://docs.typesafe.ai/introduction)。以上外部事实于2026-09-29查阅,实施时固定实际代码/权重修订并重新核验。
|
||||
|
||||
Laya 官方限制说明:基础模型在部分决策任务上需要领域适配;多语言概率不能视为已在兴邦校准;它的 confidence 与 Jev 定义不同。还存在上下文/选项预算及否定表述风险。因此“接口兼容”“本地可启动”“中文金租效果合格”是三项独立验收。不得复制宣传时延、把英文专项模型成绩推广为中文能力。[官方限制](https://github.com/NandhaKishorM/laya#honest-limits)
|
||||
|
||||
### 8.1 配置拆分与职责
|
||||
|
||||
保留现有 provider=jev/local/disabled 业务契约,不新增 Laya 业务卡片。local 表示受管本地服务,实际实现由以下配置描述;mock仅测试/演示fixture,不列入production可用模型。
|
||||
|
||||
| 新增字段(JudgmentProfile) | 类型 / 语义 |
|
||||
|---|---|
|
||||
| engine | jev_api/laya/structured_llm;与provider一致性校验 |
|
||||
| checkpoint_ref | string?;local模型必须固定权重修订与校验摘要;远程不可变版本不可得则unresolved |
|
||||
| tokenizer_revision / runtime_revision | string;无独立tokenizer则not_applicable;用于复现与预算计算 |
|
||||
| evidence_selector_version | string;冻结取证/分段规则,不允许暗改证据来“提升”结果 |
|
||||
| task_validations | {task,rubric_version,dataset_ref,report_ref,decision:passed/failed/unverified,allowed_usage:offline/shadow/runtime}[] |
|
||||
| task | extraction_grounding/experience_applicability/trajectory_quality/evidence_support,以上task字段的枚举 |
|
||||
| calibration_ref | string?;属于专项判断校准,绝不是项目通过概率校准 |
|
||||
| input_token_limit / option_token_limit | positive int;以选定模型和实测预算配置,不能照搬另一模型默认值 |
|
||||
| language_scope | string[];如zh-CN,仅在对应语料验收后声明 |
|
||||
| deployment_mode | managed_local/approved_remote;与端点及数据策略校验,local不自动获得生产数据权限 |
|
||||
|
||||
JudgmentRequest增加task、rubric_version、usage:offline/shadow/runtime;Judgment增加task、rubric_version、actual_checkpoint_ref:string?、input_digest:string、evidence_selector_version:string及运行实际版本记录。profile.capabilities验证题型,task_validations验证业务任务和用途,两者都通过才可执行;服务连通只能影响健康状态,不等于task合格。
|
||||
|
||||
任务与配置的绑定由管理员维护,业务人员装配方案并查看专项核查状态;授权高级选项可沿原设计显式选择已批准profile。未指定则使用方案冻结绑定。最终生效配置在入队时保存;任意一项越权、被撤销或不匹配均按E-13/14/15处理,不悄悄替换。
|
||||
|
||||
### 8.2 独立服务部署候选
|
||||
|
||||
Laya使用独立模型服务进程/容器与独立依赖环境,不将重型推理依赖直接安装进旧版backend/venv。项目后端及其测试仍用项目venv;模型服务环境属于新增独立服务,需另有锁定依赖与部署验收。P0先由内部HTTP适配器调用,不为此引入完整插件市场或新编排框架。
|
||||
|
||||
首次加载所需权重先在获准环境准备,记录模型许可/代码修订/权重摘要。离线验收断网验证预加载、重启恢复和零外发;不能因供应商称“本地模型”就承诺全产品离线,主审模型仍有独立出口。
|
||||
|
||||
使用明确checkpoint,禁用自动按语言更换权重的隐式路由;若未来需要路由,整个路由规则及各权重都需版本化单独验收。实际服务端口、CPU/GPU与资源上限在T08探测;不停止旧版服务抢端口。
|
||||
|
||||
### 8.3 有界问题与证据处理
|
||||
|
||||
一个请求只回答一个可核对的问题,例如“这些流水是否支持所述回款解释”。按冻结snapshot提取授权证据,保留反例与冲突来源;问题拆分、取证规则同样要评测。不要把全部PDF或整段长trajectory直接拼接输入。
|
||||
|
||||
调用前使用对应tokenizer计算正文、标准和全部选项预算;超过已验范围时返回failed+E-25,保留原引用范围,不默默截断。可由上层新建更窄问题后再次执行;新问题留新question/version记录,不在适配器里偷偷改变命题。映射未知、否定/例外存在歧义或证据不足时明确unknown/人工复核,不硬选正面结果。
|
||||
|
||||
Laya等非文本判断模型不必提供解释;解释由主审结合真实证据生成并验证,界面不得声称解释是模型内部推理。原始指标保留本义,各任务阈值依据固定评测单独确定;没有校准证据就不能使用统一“0.8即可信”的门限。
|
||||
|
||||
### 8.4 接入顺序与准入
|
||||
|
||||
1. 完成统一契约fixture,验证disabled、unknown、失败和越权反例。
|
||||
2. 先用本地候选评估 extraction_grounding 与 trajectory_quality。轨迹未实现前仅可测提炼任务。
|
||||
3. 固定专家标注题集,加入中文否定、条件例外、矛盾、长证据和工具失败样例;比较现有判断基线与Laya、其他可用本地模型。
|
||||
4. 分任务报告误判/漏判、无依据支持、拒答和覆盖、耗时/成本;未达到预先阈值则保持unverified/failed,不影响主审disabled路径。
|
||||
5. 合格后先shadow旁路对照,再按任务允许runtime;shadow输出不改变当次建议。
|
||||
6. 有Jev Key和授权后用同一题集独立评估;没Key时仅fixture通过,live未验证。
|
||||
|
||||
领域微调属于后续实验:训练/校准/测试分开,专家纠正和可追溯结果为来源;生成模型和判断模型互相打高分不能视为自我提升。回放、审核、发布及回滚走同一改进治理链。对应 AC-38/39/40/41,原 AC-17–21 保持有效。
|
||||
@@ -0,0 +1,95 @@
|
||||
# 兴邦智审 v2 · Superdesign 交互原型
|
||||
|
||||
日期:2026-09-28。目标:验证视觉风格、信息层级与核心操作,不代表新版业务功能已实现。
|
||||
|
||||
## 用户已选方向
|
||||
|
||||
深色导航+浅色工作区;高端大气、直观易用、有科技感。以深绿导航、白色证据面板和精确的关系图呈现金融评审工作台。首屏先回答“当前建议是什么、依据是什么、下一步做什么”。
|
||||
|
||||
## 原型范围
|
||||
|
||||
一个连通的项目工作台:综合预审、历史经验、推进沙盘通过页签切换。证据抽屉展示原文与缺证,补件清单弹窗说明具体材料。模型选项展示本地开源模型(演示)、Jev(未配置)和关闭。正式审批不纳入原型操作。
|
||||
|
||||
虚构企业与项目:恒远精密设备有限公司 / DEMO-026;3,000万元、36个月及全部材料数量均为演示数据。主审意见为“补充材料后再判断”,不展示未经校准的真实通过概率;按用户新增要求,原型可展示明确标记且与真实结果字段隔离的演示概率,见 [概率与沙盘设计](13-probability-prototype.md)。
|
||||
|
||||
## 状态与交互约束
|
||||
|
||||
- 综合页:结论、两项重点问题、证据关系和下一步;来源节点可展开,关闭抽屉返回原位置。
|
||||
- 历史经验:问询→补件→证据变化→历史意见,显示适用条件与例外;相似不直接导出相同结论。
|
||||
- 推进沙盘:选择假设补件→即时比较概率、原因与待核实事项;持续标记假设条件,返回真实预审后原意见不变。
|
||||
- 模型选择:本地仅演示,Jev未配置不可调用,关闭保留主审意见及缺失专项提示;切换不能伪称已连接模型。
|
||||
- 补件清单:打开/关闭、可复制内容;不提供伪造的报告下载。
|
||||
- 验证入口:只展示待开展的对照方案,不展示虚构准确率。
|
||||
|
||||
## 原型验收(与生产验收分开)
|
||||
|
||||
| ID | Given / When / Then | 需求关联 |
|
||||
|---|---|---|
|
||||
| P-01 | Given 演示项目,When 打开首页,Then 首屏显示预审意见、关键依据、下一步及演示标识 | AC-05/07/12 |
|
||||
| P-02 | Given 一条问题,When 点击证据,Then 可读原文、定位和缺失项,关闭后回到原页面 | AC-08 |
|
||||
| P-03 | Given 历史案例,When 切换历史经验,Then 看到问询/补件/判断变化与适用例外 | AC-02/04 |
|
||||
| P-04 | Given 模拟补件,When 勾选假设并返回真实预审,Then 原意见未变,模拟结果有持续标识 | AC-11 |
|
||||
| P-05 | Given 模型选项,When 选择关闭,Then 显示未执行专项核查;Jev未配置不可调用 | AC-17/21 |
|
||||
| P-06 | Given 补件需求,When 生成清单,Then 可查看具体材料要求,无虚假的后端完成状态 | AC-07 |
|
||||
| P-07 | Given 桌面/窄屏和键盘操作,When 阅读及展开界面,Then 正文无裁切、可见焦点、可退出弹层 | NFR-04 |
|
||||
|
||||
新增原型验收(用户新增概率可视化要求):
|
||||
|
||||
| ID | Given / When / Then | 需求关联 |
|
||||
|---|---|---|
|
||||
| P-08 | Given 未校准的演示项目,When 看首页,Then 42%紧邻演示标识和人为设定说明,真实probability仍为空 | AC-12 |
|
||||
| P-09 | Given 四种复选框组合,When 勾选/取消,Then 无需运行按钮即可得到42/58/51/64及0/16/9/22个百分点 | 概率与沙盘设计第2节 |
|
||||
| P-10 | Given 多选与再次取消,When 比较,Then 组合结果不作简单相加,原因与剩余事项同步更新 | AC-11 |
|
||||
| P-11 | Given 概率展示,When 查看依据,Then 看到数据卡/Skills/经验/规则及示例标识,并知道数字来自演示表 | AC-08/12 |
|
||||
| P-12 | Given 模拟或关闭专项核查,When 返回综合预审,Then 基线42%与原意见不变;模型选项不会伪造概率变化 | AC-11/21 |
|
||||
| P-13 | Given 窄屏,When 查看概率和比较,Then 数字/演示提示/原因完整可读,无横向裁切 | NFR-04 |
|
||||
|
||||
## 设计工具与数据边界
|
||||
|
||||
使用用户指定的 Superdesign,设计模型 Gemini 3.1 Pro。仅上传本轮独立编写的概念说明与虚构内容;上传现有前端源码的操作被自动审批拒绝,随后改用不含源码的概念设计。原项目源码不作为本次生成载荷。六份源码分析文件仅留本地供设计人员理解,不声称外部设计已与现有组件逐像素一致。
|
||||
|
||||
持久设计上下文及原型标识放 .superdesign/resume.json;临时生成日志/HTML在 .superdesign/tmp/,验证证据在 test-evidence/20260928-superdesign-prototype/。不修改现有应用路由、业务逻辑或部署。
|
||||
|
||||
## 实施边界
|
||||
|
||||
原型页面上的交互使用演示状态。源代码实现仍按 M3/M4 和项目流程落地;设计稿存在不证明接口、模型调用、权限或效果成立。视觉审阅与实际业务验收分别记录,不将作者目测称为独立验收。
|
||||
|
||||
## 已交付原型与检查
|
||||
|
||||
- [可点击预览](https://p.superdesign.dev/draft/7484f5c4-0415-4a87-a772-c42339680737)。
|
||||
- [Superdesign 画布](https://superdesign.dev/teams/657ee591-1f83-46ec-8917-918dec0f0d4b/projects/88a8388d-b079-4118-833b-c8b396bf346f)。
|
||||
- [本地 HTML](prototypes/prescreen-workbench.html) / [首页截图](prototypes/prescreen-overview.png)。HTML使用公开CDN样式和图标,首次打开需要网络。
|
||||
|
||||
首轮草稿 7484f5c4-0415-4a87-a772-c42339680737 保存为版本2(历史记录)。初稿由 Superdesign Gemini 3.1 Pro 生成,随后在同稿内直接补齐确定的交互、响应式和文案缺口;未额外生成视觉变体。云端回读HTML与本地已验文件一致;入库HTML仅清理3处行尾空白,内容与行为保持一致。
|
||||
|
||||
导出原型的20项行为检查通过:证据抽屉/关闭焦点、历史经验、空模拟守卫、假设结果与真实基线隔离、Jev禁用、本地/关闭切换、补件与验证弹窗、1440/1024/390三种宽度无文档横向溢出、移动导航及无运行脚本错误。首轮移动导航关闭失败,原因与修复留在fix-record.md,复验保留独立截图。同样20项检查在Superdesign线上预览再次通过,证据在remote-check-03/interaction-checks.json。
|
||||
|
||||
检查边界:使用独立无头浏览器验证演示状态;内置浏览器连接因本机环境故障未成功。作者截图自查不等于独立视觉评审;未完成全量无障碍审计,未连接业务接口或真实模型。首轮为设计文档交付,未重跑旧版套件;本次概率交互增量另按行为改动运行统一验证,结果见后续记录。
|
||||
|
||||
## 2026-09-29 概率沙盘增量交付
|
||||
|
||||
同一草稿更新为版本4。综合页显示42%演示基线;沙盘勾选与取消立即更新42/58/51/64、百分点、变化原因和待核实事项。依据抽屉串联数据卡、Skills、历史经验和规则,并明确概率数字来自人工情景表。缺证的规则状态为待核实,不视为通过。模型选择与模拟均不修改原项目结论。
|
||||
|
||||
- [概率首页截图](prototypes/prescreen-probability-overview.png) / [沙盘对照截图](prototypes/prescreen-probability-simulation.png)。首轮截图保留,不覆盖。
|
||||
- [浏览器回归脚本](prototypes/check-probability.cjs):需要Playwright与Chromium;可通过CHROMIUM_PATH指定浏览器,通过PROTOTYPE_URL选择线上预览,通过EVIDENCE_DIR指定新证据目录。默认检查旁边的HTML,不调用业务API。
|
||||
- 本地与Superdesign实际预览分别通过74项断言,覆盖P-01–13的本次相关交互:四种组合、正反选择顺序、取消还原、即时原因、人工概率来源、基线隔离、提供方切换、原有弹窗/经验/导航,以及1440/1024/390宽度。
|
||||
- 完整计划、交互日志及截图:test-evidence/20260929-probability-prototype/。浏览器检查不等于独立视觉验收或真实概率效果验证。
|
||||
- 使用backend/venv运行scripts/verify.py,9项检查全部通过:后端单测、4项UI守卫、前端构建、2项Compose配置与diff。证据:test-evidence/20260929-003310-e2883bb/REPORT.md。运行基于e2883bb及本次未提交原型;最终HTML哈希与绑定说明见本次证据manifest.json。
|
||||
- 云端回读版本4与入库HTML仅CRLF/LF换行不同;两端行为测试通过。中断前生成稿缺失即时原因更新、将缺证规则误写为通过,两项均在导入版本4前修正。
|
||||
|
||||
本次按原型交互轻量路径记录,沿用AC-08/11/12/21和P-01–13,补充设计与测试;没有越过业务实现门禁。交付为原型及文档备份,没有修改现有src/backend业务代码、没有合并main、没有发布镜像。真实概率仍待审批事件定义、历史数据验证与校准。
|
||||
|
||||
远程备份状态(2026-09-29):已配置origin在SSH握手阶段关闭连接,重试与只读诊断均复现。本次增量先保存本地提交,Gitea远端SHA未核验,不能标记本次已远程备份。此前已核验的备份不受本地提交影响。日志在test-evidence/20260929-probability-prototype/gitea-connection.log。
|
||||
|
||||
## 2026-09-29 六维雷达与解释链增量
|
||||
|
||||
同一Superdesign草稿现为版本6。新增首页概率环、六维证据阶段雷达、可点击维度与等价按钮、数据卡→Skill→授权只读Tools→Rules→经验的具体追溯。新增概率出处抽屉:区分当前人工DEMO-TABLE-v1与未来真实估计/校准链路。沙盘只改变所选回款/权属轴,基线虚线保持不变;出处抽屉同步高亮所选00/10/01/11与42/58/51/64结果。
|
||||
|
||||
- [雷达首页](prototypes/prescreen-radar-overview.png) / [沙盘叠图](prototypes/prescreen-radar-simulation.png);旧截图保留。
|
||||
- 新增P-14–17详见[概率设计第6节](13-probability-prototype.md),沿用BR-09/12/13与AC-08/11/12/13/21。
|
||||
- 新增[雷达测试](prototypes/check-radar.cjs)由[原型回归入口](prototypes/check-probability.cjs)调用。本地与线上各163项断言通过:六维键盘/图轴点击、来源映射、四种情景、未选轴不变、主结果隔离、响应式与既有交互。
|
||||
- 项目统一验证9项通过:test-evidence/20260929-010559-1351dd0/REPORT.md。执行期间仅补充手机SVG字号与测试,未改变业务源码;最终原型在local-final和remote-final重跑全部相关浏览器断言。完整日志、计划、图片与最终摘要位于test-evidence/20260929-radar-prototype/。
|
||||
- 生成稿曾遗漏首页雷达/维度动作,并将维度误换为信用属性;已按确定规格补齐。手机图内文字缩放过小,放大后重新验证。测试与截图不等于独立视觉审核或真实模型准确性验收。
|
||||
- 第6版云端回读与本地HTML仅换行风格不同。现有业务src/backend及部署未改;不越过业务实现门禁。
|
||||
|
||||
Gitea连接仍在SSH握手阶段被远端关闭,本次先保存本地提交,远程备份未完成。设计服务上的原型已更新;这与Gitea源码备份是不同边界。
|
||||
@@ -0,0 +1,77 @@
|
||||
# 审批概率与沙盘联动设计
|
||||
|
||||
日期:2026-09-29。用户明确要求:直观看到项目审批通过概率、判断依据,并在推进沙盘勾选后直观看到变化。当前交付为 Superdesign 原型的演示交互;真实概率服务仍未实现、未校准。
|
||||
|
||||
## 1. 页面表达
|
||||
|
||||
综合预审首屏:审批通过概率、主审意见、数据基础和“查看判断依据”并列。当前数字紧邻“演示值”;解释“人工设定,仅演示交互;未经历史数据校准”。演示事件口径是“以本次材料版本提交后的首次审批通过”,用于避免与最终获批、附条件通过或投放后违约混淆;用户后续已明确目标是公司评审会通过;现有原型的“首次”口径只作示例,真实结果代码、附条件映射和观察窗口仍须 OQ-05 确认。
|
||||
|
||||
推进沙盘:固定当前基线,展示所选情景、概率对照条、差值(百分点)、所选假设、变化原因和剩余问题。勾选/取消立即更新,无需点击运行;“查看概率与判断依据”打开追溯抽屉。全部取消恢复基线,返回真实预审不得改变原值。
|
||||
|
||||
## 2. 原型情景表(人为编写,非业务结果)
|
||||
|
||||
| 假设状态 | 演示值 | 较演示基线 | 尚未回应的问题(情景中) |
|
||||
|---|---|---|---|
|
||||
| 无假设 | 42% | 0个百分点 | 两项 |
|
||||
| 银行流水核验支持回款解释 | 58% | +16个百分点 | 设备权属 |
|
||||
| 权属材料核验一致 | 51% | +9个百分点 | 回款解释 |
|
||||
| 两项均核验支持 | 64% | +22个百分点 | 这两项均回应,仍需整体人工复核 |
|
||||
|
||||
组合值来自查表,不是42+16+9。此表只演示交互和非加和关系,不是预测模型、专家估计、历史统计或真实因果效果。实际补件可能揭示新风险,真实预测可能不变或下降。不能仅凭材料上传动作认定争议已解决。
|
||||
|
||||
原型数值使用独立 demoProbability / demoScenarios,不写真实 ScreeningRun.probability。生产业务的 BR-12 与 not_calibrated 约束继续有效:没有真实验证条件就保持 null,不把演示值兜底到真实结果。
|
||||
|
||||
## 3. 判断依据与原有体系的关系
|
||||
|
||||
依据抽屉用业务语言展示可追溯链:
|
||||
|
||||
| 层 | 展示内容 | 能说明什么 |
|
||||
|---|---|---|
|
||||
| 数据卡 | 现金流、回款、权属事实,来源/时间/缺失和版本 | 预审读到了哪些事实 |
|
||||
| Skills | 回款交叉核验、权属一致性检查,输入与执行状态 | 用了哪些专业核查方法 |
|
||||
| 历史经验 | H-018问询/补件过程、适用条件和例外 | 为什么选择这些核查动作 |
|
||||
| 规则 | 硬约束、未完成项、版本和复核要求 | 哪些条件不能被模型分数覆盖 |
|
||||
| 主审/概率服务 | 综合意见与概率结果分别记录 | 主审解释结论,不能任意编写概率 |
|
||||
|
||||
所有卡片编号、版本和记录在原型中均为示例,不能写“已查询兴邦系统”或伪造执行日志。必须明确:这些示例依据展示未来解释结构,不能从中计算出42%;42%来自原型情景表。不得把这类说明冒充真实的模型特征贡献分析。
|
||||
|
||||
miniOpenClaw承载受控编排与运行追溯;数据卡、Skills和经验资产继续复用。Jev/local负责局部判断,最终审批概率需要单独的业务概率估计与校准能力,不能直接拿专项模型置信度当通过概率。
|
||||
|
||||
## 4. 真实概率接入后的目标(后续设计)
|
||||
|
||||
真实模式要求已确认审批事件、预测时点、有效样本范围和制度版本,并具备保留集验证与校准证据。概率结果需绑定项目快照、模型及校准版本、数据适用范围和有效性状态;不足时显示“暂无法可靠估计”。这些条件由概率服务校验,不能只靠前端文案保证。
|
||||
|
||||
真实沙盘会基于相同模型/校准版本,对改变后的假设输入重新估计;只接受有明确含义的假设,不在前端手写加分。多选的交互效应、硬规则、剩余缺证一起评估。请求乱序时只接受当前选择对应的结果;取消/失败保留基线,提示情景未完成,不能用演示表回退。置信区间只有在统计方法和样本支持时才显示,不预先填范围。
|
||||
|
||||
正式审批由业务流程决定;预测不是批准指令。生产实现和业务验收在 M6 单独定案,本次不宣称已建成。
|
||||
|
||||
## 5. 原型验收映射
|
||||
|
||||
延续 [原型验收](12-prototype.md) 的编号,新增 P-08–13;保留原有P-01–07。验证所有四种组合、取消、立即更新、百分点、依据、基线隔离、提供方切换无伪造加分及演示标识。结果与截图存入 test-evidence/20260929-probability-prototype/,不与真实概率模型的验证混称。
|
||||
|
||||
## 6. 概率环、证据雷达与解释链(2026-09-29增量)
|
||||
|
||||
用户要求更有科技感的展示并看懂概率出处。采用概率环+六轴证据雷达+维度追溯抽屉+概率出处抽屉,在同一原型内替换简单概率展示。属于原型交互轻量路径,复用BR-09/12/13及AC-08/11/12/13/21;不变更生产概率契约、不把草案门禁当已通过。
|
||||
|
||||
六轴依次为回款核验、财务勾稽、权属核验、交易要素、经验适配、规则覆盖。刻度为演示的证据阶段:0未提供、1仅有说明、2资料待核、3交叉核验、4人工复核。它们是序数阶段,不是信用分或可平均的百分比;不能根据面积推出概率。生产应由版本化核验规则定义各阶段,不能让大模型随意赋分。
|
||||
|
||||
原型基线为[1,2,1,2,2,1]。沙盘流水假设只将回款从1改为3,权属假设只将权属从1改为3,其他轴不变;3在此意味着“假设核验成立”,未执行真实核验。基线轮廓用虚线、情景轮廓用实线,并有文字列表,颜色不是唯一载体。
|
||||
|
||||
维度详情包含data_card_id/version、skill_id/version、allowed_tools、示例输入/输出/缺证、rule_id/version/status和经验适用/例外。已核对现有backend/services/assistant_model.py的受控只读能力:read_project_snapshot、read_document、read_checks、read_method、read_experiences,并按skill.allowed_tools过滤。图中仅借用这些能力名称说明职责;读取核验记录不能被描述成该Tool亲自完成核验,原型不伪造成功日志。miniOpenClaw负责编排、冻结版本与轨迹;Skills组织方法及工具范围;Rules约束主审和模型;Jev/local为可选专项判断。
|
||||
|
||||
概率出处抽屉分为两层:当前原型展示DEMO-TABLE-v1、选择键00/10/01/11、高亮行和42/58/51/64结果(人工表,无模型和校准);未来规划展示受控事实与核验结果→特征构建→概率估计/历史校准→有效性与硬规则检查→主审解释及人工审批。待核实不等于通过,硬阻断不允许被高分抵消;真实模式缺少校准依然为null。不得画假权重、假特征贡献或用雷达面积装饰成计算依据。
|
||||
|
||||
表面状态:基线固定、所选情景即时更新;依据弹层打开/关闭、当前维度选择、来源表当前行均为本地状态。所有用户均为演示评审员,没有真实权限操作;无加载/接口错误态,因为没有网络业务请求,生产异常继续沿用E-06/07/15。按钮支持键盘与焦点返回、图表有等价文本、响应式不裁切、遵守reduced-motion。
|
||||
|
||||
| ID | Given / When / Then | 关联 |
|
||||
|---|---|---|
|
||||
| P-14 | Given 基线,When 查看雷达,Then 六维阶段和文本一致、清楚说明不计算概率 | AC-08/12 |
|
||||
| P-15 | Given 任一维度,When 点击或键盘激活,Then 展示该维度卡片/Skill/只读Tools/Rules与经验边界 | AC-08/21 |
|
||||
| P-16 | Given 基线或选中情景,When 查看概率出处,Then 显示对应演示表行与结果,规划链路明确未接入 | AC-12 |
|
||||
| P-17 | Given 勾选/取消/关闭专项模型,When 雷达更新,Then 只更新相关情景轴,基线及原意见不变 | AC-11/13/21 |
|
||||
|
||||
## 7. 后续产品方向与原型边界(2026-09-29)
|
||||
|
||||
用户已确认维度随数据卡/Skills/Rules装配方案变化。六轴与42/58/51/64是本原型现状,不能据此把生产实现固定为六维或四种组合。动态维度见14第5节,生产候选字段见03第9节。当前原型HTML及P-01–17检查本轮未改,也未验证新增卡片/轨迹界面。
|
||||
|
||||
模型替换不自动改变通过概率,专项模块自评分不参与人工加分。演示估计、真实概率空值、核查阶段图和未来校准模块分别展示,完整依据链不能伪装为当前42%的数学推导。
|
||||
@@ -0,0 +1,111 @@
|
||||
# 三模块闭环与数据设计补充
|
||||
|
||||
版本:0.2 · 2026-09-29。产品方向已经用户确认;本文件是新增设计候选,不代表兴邦业务签署、工程门禁通过或功能已实现。业务规则唯一编号在 [需求规格](01-requirements.md),本文件展开 BR-21–44;类型与接口 owner 在 [详细设计](03-detailed-design.md)。
|
||||
|
||||
## 1. 目标、事件和第一期范围
|
||||
|
||||
核心目标:在最初收集材料时帮助客户经理识别障碍、补件、比较推进方案;在适用范围内,高预测通过概率的项目在公司评审会上确有较高的通过比例。系统提供暂不建议推进的理由和剩余可能路径,由业务人员决定是否放弃,不自动关闭客户项目。
|
||||
|
||||
“通过”已经明确为公司评审会通过项目;具体会议结果代码、附条件通过是否计为通过、观察窗口及制度时期仍需兴邦映射。初期预测与后续补件预测是不同材料快照上的结果,不混为一条。没有送审、主动退出、待定不得当作否决标签。
|
||||
|
||||
P0:纯模拟数据,完成历史经验加工→卡片装配→预审/沙盘→轨迹与模拟评审对照的演示闭环。暂定演示种子 3,000 个虚构项目,属于可调整的工程演示规模,不是效果样本量承诺。真实数据、正式客户规则和真实概率属于 P1/P2 的独立门禁。
|
||||
|
||||
## 2. 三个模块与既有卡片的关系
|
||||
|
||||
| 模块 | 输入 | 处理 | 输出 / 人的职责 |
|
||||
|---|---|---|---|
|
||||
| 历史经验加工中心 | 历史材料、问询、补件、方案变更、会议记录 | 形成来源和时间线;提炼方法/经验候选;检查反例与适用范围 | Skills / Rules 草稿、来源案例;专家修订和审核发布 |
|
||||
| AI 预审工作台 | 当前项目数据卡、已发布 Skills/Rules、评审方案 | miniOpenClaw 在授权范围编排核查;程序计算、规则校验、可选专项判断 | 有依据的建议、补件清单、概率状态、独立沙盘;客户经理选择推进动作 |
|
||||
| 轨迹复盘与改进中心 | 冻结运行、真实会议结果及专家纠正 | 对齐材料版本和时间;归因遗漏/误判;比较改进版本 | 候选知识/编排策略、验证报告;授权人员决定发布和回滚 |
|
||||
|
||||
业务配置仍只有数据卡、Skills 卡、Rules 卡及串联它们的评审方案。经验是这些卡片背后的有来源知识对象,不要求用户再配置一套经验卡才能运行。Tools 由后台批准,通过 Skill 的 allowed_tools 和运行权限共同限制,在轨迹里可见,不开放业务 Tools 卡。
|
||||
|
||||
Skill 描述“如何核查”:适用条件、必要数据、允许工具、步骤、输出、缺证处理和退出条件。Rule 描述“必须满足什么/何时触发什么”:条件、效果、适用范围、例外与依据。历史常见做法是经验性建议;只有已确认制度或正式授权依据才能成为硬规则。
|
||||
|
||||
## 3. 多源材料进入统一证据层
|
||||
|
||||
目标链路:用户选择文件集合/授权数据源→导入清单→逐文件解析→提取候选→人工确认与冲突处理→数据卡→冻结项目快照。
|
||||
|
||||
- P0 支持选取 PDF、XLSX、CSV 文件集合;浏览器支持时可选目录,否则多文件选择。目录仅表达用户选择的文件集合,不让服务端根据浏览器传来的 F 盘路径扫描电脑。
|
||||
- ZIP 解包、任意共享盘监听、生产数据库直连不进入 P0。数据库接入保留现有受控连接器边界,P1 先确认表/字段、只读权限和提取时间。
|
||||
- 每个导入条目保存文件哈希、相对路径、上传者、导入时间、解析版本和状态。保留原始字节,文件名不能成为服务器写入路径。
|
||||
- PDF 定位页码/片段;表格定位工作表/单元格区域,并保留币种、单位、业务期间。导入时间不冒充材料发生时间。公式缓存值是否可靠要单独标记,不能直接宣称重新计算过。
|
||||
- 扫描件没有可用 OCR 时显示未解析,可人工补录并保留页码;不伪造 OCR 成功。密码保护、格式损坏、超限文件逐项失败,不隐藏部分导入。
|
||||
- 跨材料数值冲突并列展示候选值及来源,由有权限人员选择或标为未解决;不默认“最后上传覆盖前值”。未确认/未解决的关键事实不能进入已核实结论。
|
||||
- 同域、同项目、同哈希可复用原件;不同项目不泄露已有材料存在性。新一次导入保留自己的来源清单,业务期间不同的同名文件不合并。
|
||||
|
||||
P0 容量提案:每批最多 100 个文件,每个不超过 10 MiB,总计不超过 100 MiB;与既有上传限制对齐后才能定案。Worker 按文件处理,重试只处理失败项,不能因为一个文件失败重复确认其他事实。上述是待验证工程限制,不是客户 SLA。
|
||||
|
||||
## 4. 历史经验加工与人工干预
|
||||
|
||||
加工步骤:先划分开发/保留集→在允许的开发案例中恢复时间线→按问题聚合证据与处理动作→生成候选→查适用条件/反例/例外→专家修改→测试→独立审核→发布版本。
|
||||
|
||||
历史库只有最终报告时标“过程不完整”,可以提炼有来源的结论,不生成虚构问询顺序、评审员内心推理或完整人工 trajectory。提取出来的 Skill 是可复用核查方法;Rule 初始为 advisory,不能因模型看到频次高就变 hard。
|
||||
|
||||
自然语言入口分三种,界面明确显示作用范围:
|
||||
|
||||
| 入口 | 例子 | 效果 |
|
||||
|---|---|---|
|
||||
| 提炼要求 | “重点整理现金流与利润不一致的核查方法” | 约束本次加工任务,保留提示版本;不生成正式制度 |
|
||||
| 候选编辑 | “只适用于设备类租赁,并增加关联交易例外” | 创建候选的新修订,显示差异,修改后重新验证/送审 |
|
||||
| 本次预审补充说明 | “优先核查回款真实性” | 只影响当前运行,不能扩大 Tools 或覆写硬规则;保存为正式卡片需独立提议流程 |
|
||||
|
||||
人工新增 Skill/Rule 有独立入口。历史提炼、人工创建共享审核状态机,来源区别不意味着权限不同。业务侧不得通过自然语言提交可执行 Python/SQL/Shell;Rule 条件使用经批准的字段与算子。人工新增也不是默认可立即生效。
|
||||
|
||||
来源表示采用两个正交字段:origin=history_derived/manual/policy_import;data_domain=demo/production。历史提炼后经人工修改仍为 history_derived,增加 edited_by、parent_version 和变更说明,不能洗掉来源。
|
||||
|
||||
## 5. 评审方案与动态维度
|
||||
|
||||
方案固定数据卡引用、Skills/Rules 版本、相关经验版本、关键核查项及维度定义。保存草稿与发布方案分开。发起运行时验证所有依赖在当前项目/域获准,冻结 plan_id/version 和快照;草稿或已撤回组件不能进入新运行。
|
||||
|
||||
维度是 Skills/Rules 的元数据,不增加“维度卡”。方案生成时按 dimension_id 合并关联;同 ID 标签/量纲/刻度不同则报冲突并要求修订,不由模型临时猜测合并。重复维度不重复计数。方案发布时固定名称、顺序、标准和关联依据。
|
||||
|
||||
雷达用于展示证据核查状态,不是信用分。不同维度只有采用同一可解释刻度时才共用雷达;例如 0 未提供、1 仅有说明、2 材料待核、3 交叉核验、4 人工复核。完整度不等于真实性;该刻度由版本化标准驱动,不由大模型任意打分。模拟达到阶段 3 仍标“假设核验成立”。
|
||||
|
||||
- 同刻度 3–8 个维度:雷达加等价文字列表。
|
||||
- 少于 3 个:状态条/列表;多于 8 个:分组或列表,全部维度仍可查看,不默默丢失关键项。
|
||||
- 异量纲:分面展示,不强行归一化;硬阻断单列,不被平均数或面积覆盖。
|
||||
- 原型现有六轴仅为示例。用户更换方案后生成新运行,旧运行的维度布局和依据保持原版本。
|
||||
|
||||
## 6. 概率、补件与沙盘
|
||||
|
||||
必须分开:核查状态、专项模型对一题的判断指标、项目评审会通过概率。概率模块拥有原始估计与校准结果;主审解释依据、规则和限制,不修改概率。
|
||||
|
||||
P0 的真实 probability 仍为 null。演示显示 demo_estimate(来源=synthetic_demo),紧邻“人工设定、未经真实历史校准”,导出也带标识。现有 42/58/51/64 的情景表继续只属于原型,不扩展为假装学到的算法。
|
||||
|
||||
每条沙盘动作包含目标问题、前提条件、假设改变的事实、所需证据和互斥动作。区分“补信息”和“改变交易条件”;仅上传一份流水不等于已确认回款。真实核验失败可以使结果变差。
|
||||
|
||||
勾选变化创建带 selection_hash 的新情景请求,使用冻结基线和相同组件版本。后端对组合重新核查,不把单项提升相加;前端只接受当前选择对应的结果,旧请求晚到不得覆盖新结果。处理中显示待计算,不先演示乐观增幅。
|
||||
|
||||
取消全部动作回到基线;请求失败保留基线、标示该情景未完成。模拟永不直接写入实际项目事实;真正补件按材料确认流程产生新快照与新预审。沙盘输出是条件估计,不宣称动作有经过验证的因果提升。
|
||||
|
||||
## 7. 轨迹、会议记录与反向改进
|
||||
|
||||
一次完整 Agent 运行是一条 trajectory,多次工具/模型调用是其中的 step/span。最小步骤信息:run_id、step_id、parent_step_id、顺序、时间、动作类型、Skill/Tool/Rule/Profile 版本、输入输出引用、状态、可核对的简短理由、耗时与可得成本。成本未知为 null,不填 0。不采集或伪造模型隐藏思维链。
|
||||
|
||||
会议记录单独保存:project_id、meeting_id、会议时间、被审材料快照(可空)、原始结果代码、原文证据、条件、记录人、修订关系。未知快照标 unmatched;修正结果追加新记录并 supersedes_id 指向旧记录,不覆盖历史。
|
||||
|
||||
AI 轨迹与人工会议时间线并列展示。匹配只基于可核验的项目、材料版本和时间;最终已通过不能倒填成最初材料也会通过。未送审/撤回/等待另列,既不当否决,也不进入已观察会议通过率的分母。
|
||||
|
||||
专项模型可做提炼依据质检、经验适用性检查、轨迹步骤评价;专家确认和真实会议结果仍为参考。不能让同一模型自评高分直接成为训练真值。
|
||||
|
||||
改进闭环:标记偏差→区分提取/检索/Skill/Rule/编排/判断模型/概率校准问题→形成 ImprovementCandidate→固定旧版对照→隔离样本回放→人工审核→版本发布→后续效果观察。发布失败保留旧版;已发布版本撤回只影响新运行。P0 先改知识、题库和编排配置,自动训练权重和自动上线不在本期。
|
||||
|
||||
## 8. 模拟数据与真实验证隔离
|
||||
|
||||
候选演示组成(总数 3,000,配比只为覆盖场景):直接通过 900、补件后通过 900、会议未通过 600、未送审/退出/待定 600。包括条件通过子类型,但是否计入正式概率目标留给客户映射。生成每个项目的初始事实、可得时间、问询、补件、变更和最终结果;用一致性约束生成,不能只生成 3,000 段“同意通过”。
|
||||
|
||||
固定 seed、生成器版本、场景模板、规则版本和清单哈希;演示名称均虚构。先用少量边界 fixture 确认逻辑,再批量生成;默认程序组合结构化场景,不为每条案例进行多轮昂贵模型调用。
|
||||
|
||||
开发/校准/测试按客户关联组与项目分组并结合时间分割,之后才允许提炼经验;同客户/项目近重复不得跨集合。保留集标签、最终报告与由其生成的 Skill 都不得进入开发。合成数据的测试只证明设定分布上的逻辑与演示,不能证明真实泛化。
|
||||
|
||||
真实试点先锁定事件、观察窗口、预测时点、样本范围、指标与阈值,再揭示结果。核心指标:高预测概率组实际会议通过比例,同时报告该组覆盖率、已观察标签数量、未送审/待定数量、校准误差和重大问题漏检。不能只挑少数简单案例展示高通过率,也不能推断未送审项目如果送审会怎样。
|
||||
|
||||
## 9. 状态与事实来源
|
||||
|
||||
- 用户已确认:公司评审会通过、初始材料介入、P0 模拟演示、三模块闭环、人工卡片入口、可替换专项判断方向。
|
||||
- 代码已观察:assistant_model 的 allowed_tools 过滤和只读工具;assistant_experiences 的草稿、评测、发布版本。它们是复用基础,不证明本文件闭环已实现。
|
||||
- 原型已存在:概率环、六轴示例、四种沙盘组合与依据抽屉;见 [原型](12-prototype.md) 和 [概率设计](13-probability-prototype.md)。
|
||||
- 候选待定案:扩展契约/DDL、具体路由、数值容量、部署资源、真实身份与规则、Laya 中文业务效果、概率模型。
|
||||
|
||||
追溯:产品来源为 2026-09-29 之前用户连续讨论及“按照你的建议来”确认;代码定位见 [架构](02-architecture.md);任务与门禁见 [开发交接](15-development-handoff.md)。
|
||||
@@ -0,0 +1,109 @@
|
||||
# 开发交接与任务包:Claude Code / DeepSeek 等编码代理
|
||||
|
||||
版本:0.2 · 2026-09-29。用途:用小范围输入和明确验收降低重复阅读与返工成本。不是一次性让模型实现整个平台的提示词。规则统一由 [AGENTS.md](../../AGENTS.md) 管理,[CLAUDE.md](../../CLAUDE.md) 只做导入入口。
|
||||
|
||||
## 1. 接手时必须知道的事实
|
||||
|
||||
| 项 | 本次核验状态 |
|
||||
|---|---|
|
||||
| 当前仓库 | F:/mini-OpenClaw-local-stable;Next.js + FastAPI,非 Electron |
|
||||
| 当前分支 / 文档更新前 HEAD | codex/xingbang-v2-docs-20260928 / 47ec30a562f12864b7485bb7a43b967fa8f5b755;后续以 git 为准 |
|
||||
| 独立 v2 源码 | 尚未抽取;仓库内 v2/ 与候选 F:/mini-OpenClaw-v2 均未建立 |
|
||||
| 已有演示 | docs/v2/prototypes/prescreen-workbench.html;静态交互,不是生产业务实现 |
|
||||
| 真实数据 / 模型 | 无兴邦真实数据;Jev/Laya 接入未实现,未证明业务效果 |
|
||||
| 概率 | 原型人工情景值;真实 probability=null |
|
||||
| 恢复点 | 4d5a420 原版快照曾核验 Gitea SHA;不代表最新文档/原型已远程备份 |
|
||||
| 暂不触碰 | .docker-codex、project-process.zip、Office 临时文件、现有运行数据、用户删除的旧页面 |
|
||||
|
||||
新会话先 git status --short,再 git log --oneline -6;阅读对应任务调用方。本文不是实时进度数据库;每次结束更新第 7 节,事实冲突以实际工作区和证据为准。
|
||||
|
||||
## 2. 三种模型配置必须分开
|
||||
|
||||
1. 编码代理:用户可以使用 Claude Code 连接 DeepSeek,负责写代码与测试。
|
||||
2. 产品主审模型:miniOpenClaw 在运行时规划核查、调用批准工具、解释结果,独立配置。
|
||||
3. 专项判断模型:Jev / 本地 Laya / 其他已验证本地模型 / disabled,见 [专项设计](11-judgment-providers.md)。
|
||||
|
||||
开发选 DeepSeek 不构成修改产品模型、数据出口或判定阈值的指令。专项模块不能把模型置信度写为项目审批概率。
|
||||
|
||||
Claude 官方说明支持从 CLAUDE.md 用 @AGENTS.md 导入统一规则,本仓已采用该入口。用户本机 Claude/DeepSeek 连通性、版本兼容和费用未测试;本轮不安装 CLI、不修改用户全局配置、不写 API Key。接入时依据 [Claude 项目指令文档](https://code.claude.com/docs/en/memory) 和 [DeepSeek 官方 Claude Code 指南](https://api-docs.deepseek.com/quick_start/agent_integrations/claude_code/) 核对当前参数。前者正文已查阅,后者官方搜索结果可发现但本次正文抓取超时;不据此写死模型名称和配置命令。
|
||||
|
||||
## 3. 最小阅读包
|
||||
|
||||
首次:AGENTS→project-process/README 与 XINGBANG-ADAPTATION→v2/README→本任务相关规格行和设计章节→对应阶段规范。之后不反复全文读取所有文档,但切换阶段必须读对应章节。
|
||||
|
||||
| 任务领域 | 必读 v2 文档 | 首先定位的已有代码(只作复用线索) |
|
||||
|---|---|---|
|
||||
| 材料/历史 | 01、03、14 第3/4/8节 | assistant_data.py、assistant_materials.py、assistant_store.py |
|
||||
| 卡片/装配 | 01、03、14 第4/5节 | assistant_experiences.py、component_registry.py、component_evaluation.py |
|
||||
| 编排/专项 | 02、03、11、14 第2/7节 | assistant_model.py、assistant_worker.py、project_assistant.py 的调用方 |
|
||||
| UI/沙盘 | 04、DESIGN、13、14 第5/6节 | 当前 workbench 页面和已有原型;先确认路由仍存在 |
|
||||
| 复盘/评测 | 06、14 第7/8节 | 既有运行存储、审计与经验治理,不改写历史记录 |
|
||||
|
||||
表中代码位于 backend/services;拟议新模块落点在完成 T00 的路径清单后才成为可写白名单。不要因为文档有一个新模块名字就新建完整框架。
|
||||
|
||||
## 4. 小步任务队列
|
||||
|
||||
状态说明:ready-docs=可立即完成文档/现状核对;blocked-gate=须补齐并评审对应设计才能写业务代码;planned=依赖前项;optional=没有也能交付主闭环。下列均未被标记实现完成。
|
||||
|
||||
每张任务卡必须记录 parent_task、目标 BR/E/AC、准确文件白名单、输入/输出契约、状态机、测试命令和证据路径。表中是边界,不是授权一次修改整个目录。
|
||||
|
||||
| ID / 状态 | 依赖 / 阅读 | 单次产物与边界 | 验收 / 下一步 |
|
||||
|---|---|---|---|
|
||||
| T00 ready-docs:设计收口与路径清单 | 当前文档;流程①–④ | 核对现有调用方;输出核心依赖白名单、独立路径/资源候选;完成首个切片六道门与接口/DDL/状态设计,记录审阅者及未决项 | 文档链接/编号/事实/diff;禁止顺带复制源码或启动服务;形成 T01 的准确文件清单 |
|
||||
| T01 blocked-gate:独立基座 | T00;M1 | 从核验修订按白名单抽取可运行核心,排除密钥/库/依赖/旧凭据文档;独立 venv、端口和数据根 | 原版文件不变、独立健康检查、统一 verify 通过;不部署云端 |
|
||||
| T02 planned:闭环契约与存储 | T01;03第9节 | 定案 Pydantic 模型、追加迁移、授权与版本引用;同步前端契约消费。按材料/卡片/运行子卡分次实现 | AC-13/14/23/28/34/36/43;迁移幂等、版本冲突、重启恢复;不接模型 |
|
||||
| T03 planned:材料集合 | T02;14第3节 | 复用上传/确认入口,增加导入清单、定位和冲突候选;只处理 PDF/XLSX/CSV | AC-01/08/23/24;部分失败、重复/跨项目、未确认不生效 |
|
||||
| T04 planned:模拟案例 | T02;14第8节 | 先边界 fixture,再可复现批量生成、分组划分和 manifest;运行输出不默认入 Git | AC-35/36;数量/时间/标签一致性、无保留集泄漏;不声称真实效果 |
|
||||
| T05 planned:历史提炼与人工卡片 | T03/T04;14第4节 | 先 timeline,再候选,再编辑/测试/审核;每部分独立子卡,复用治理入口 | AC-02/03/04/25/26/27/43;自然语言修改不直接发布、不自批、硬规则有正式依据 |
|
||||
| T06 planned:评审方案与维度 | T05;14第5节 | 数据/Skill/Rule 装配、依赖检查、冻结方案;维度去重和刻度冲突;没有 Tools 卡 | AC-28/29/44;草稿/撤回组件拒绝、旧版本不变;空/2/6/9维和异刻度 |
|
||||
| T07 planned:预审执行 | T06;02/03 | 受限编排、确定性核查、缺证补件、结果约束;先 disabled 专项路径 | AC-05–10/12–14/21/45;工具越权拒绝、预算停止、硬阻断、失败不伪造;不实现真实概率 |
|
||||
| T08 planned:专项离线质检 | T05;11第8节 | 先统一适配 fixture,再独立本地服务;验证 Laya 中文题库的提炼依据和轨迹质检,失败可保持禁用 | AC-17–21/38/39/40;fixture/live 分开、否定和例外、上下文超限、逐任务注册;不得把安装成功当能力通过 |
|
||||
| T09 planned:预审与沙盘 UI | T07;04/DESIGN/13 | 分子卡实现组件、动态维度、证据抽屉、条件情景;演示值与真实字段分离 | AC-11/12/29/30/31/42/44;组合非加和、乱序丢弃、失败保基线、键盘与文字替代 |
|
||||
| T10 planned:轨迹和结果复盘 | T07;03/14第7节 | 先只读 step 回放,再模拟会议结果追加/对齐,最后偏差记录;不改旧运行 | AC-22/32/33;一个 run 多 step、unmatched、结果更正、只读权限;人工缺失过程不补造 |
|
||||
| T11 planned:改进对照与演示交付 | T08/T09/T10;06/08 | 固定版本做旧/新对照,ImprovementCandidate审核和发布;完成三模块演示脚本 | AC-15/16/34–37/41;泄漏拒绝、退化不发布;工程演示与模型效果分列 |
|
||||
| T12 optional:Jev 与实时专项 | T08;有端点/凭据及授权 | Jev adapter 与独立 live 验证;通过逐任务效果门禁后再启用实时用途 | AC-17–20/38–40;无 Key 标未验证,不阻塞主闭环 |
|
||||
| T13 future:真实数据与概率 | M5/M6;客户授权与 OQ | 接真实只读数据、映射会议标签、分组时间划分、训练/校准/盲测、适用范围与漂移门禁 | 高预测组通过率+覆盖率+校准+样本不确定性;新建概率详细规格,禁止照演示表实现 |
|
||||
|
||||
T08 可在 T05 后先做提炼质检;轨迹质检待 T10 提供轨迹。T09 不依赖 Jev,T11 可展示专项禁用或效果未达标的真实状态,不伪造模型成功。工作并行需要用户明确安排不同文件归属;默认同一工作区串行执行。
|
||||
|
||||
## 5. 通用执行提示词(替换任务编号即可)
|
||||
|
||||
```text
|
||||
你在 F:\mini-OpenClaw-local-stable 工作。先读取 CLAUDE.md/AGENTS.md、
|
||||
docs/project-process/README.md、XINGBANG-ADAPTATION.md,执行 git status --short
|
||||
和 git log --oneline -6,再读取 docs/v2/15-development-handoff.md。
|
||||
|
||||
本轮只做 T00。按任务卡读取相关文档和当前调用方,不读取无关整个仓库。
|
||||
先报告当前状态、该任务范围和验收项,然后完成已授权且不受门禁阻塞的工作。
|
||||
用户已确认产品方向,无须重问;工程未决项先查代码/文档,无法解决才集中提出。
|
||||
本任务若是文档收口,不写业务代码、不安装模型、不启动或部署服务。
|
||||
若是后续实现任务,先验证该切片①–④门禁证据,列准确文件白名单,补对应测试,
|
||||
用最小改动实现;行为变更必须用项目 backend/venv 运行 scripts/verify.py。
|
||||
不得恢复已合并删除的旧页、复制真实数据库/密钥、用演示值充当真实概率,
|
||||
不得把模型置信度当通过率或把反馈自动发布成正式规则。
|
||||
每批完成自查 diff;记录日志与测试证据,更新第7节交接,不自动开始下一任务。
|
||||
输出:本次改动、验证结果、未完成项、下一任务和所需输入。
|
||||
```
|
||||
|
||||
已有用户授权的文档或可逆修复不额外请求确认;门禁缺口按明确的规格条目记录,不能靠再问一句“可以开始吗”代替完成设计。
|
||||
|
||||
## 6. 控制开发成本的方式
|
||||
|
||||
- 一个会话一张小任务卡;大表中的 T02/T05/T09 等必须先拆成单一可验证子卡。优先服务+契约+最薄界面构成一条业务切片。
|
||||
- 每轮提交相同短交接格式,下一轮只读该卡及必要依赖;调用方用 rg 精确检索,避免上传整个仓库或反复读长日志。
|
||||
- 先固定 fixture 和结构验证,真实模型调用集中在小型专项评测;没有新改动/失败不重复跑相同昂贵测试。每个行为批次仍须完整 verify,节省成本不能省略强制验证。
|
||||
- 复杂度高的共享契约、数据隔离、概率口径和迁移先完成技术审阅;普通实现使用用户选定模型。模型不能仅凭自评宣称测试通过。
|
||||
- 失败先看准确日志并定位,修复后重跑同一检查;若同一问题两次无进展,停止扩大改动,形成最小复现与待解决问题,交给用户或审阅者。
|
||||
- 不预承诺节省比例;如需比较,记录每卡实际 token/费用(可得时)、耗时、返工和测试结果。
|
||||
|
||||
## 7. 当前交接记录
|
||||
|
||||
- 日期:2026-09-29。
|
||||
- 完成范围:产品闭环文档补充、BR/E/AC 扩展、模型替换设计、分批交接;业务源码未变。
|
||||
- 当前阶段:需求与后续候选设计;用户已确认方向,独立业务/技术评审和实现门禁尚未完成。
|
||||
- 验证入口:[本轮文档检查证据](../../test-evidence/20260929-v2-handoff/REPORT.md)。检查结果以该报告为准。
|
||||
- 下一任务:T00,首先把 T01 核心迁移依赖及隔离路径收口为可评审清单;不要重新讨论已确认产品目标。
|
||||
- 待输入:独立路径/仓库与资源定案;真实阶段才需要兴邦数据、制度、会议标签映射和客户身份权限。Laya 硬件和中文效果由 T08 探测,不凭宣传定性能。
|
||||
- Git:本轮提交/备份状态见证据中的 delivery.json(若有)和 git;不得从旧恢复点推断最新版本已备份。
|
||||
|
||||
后续每张卡用同一结构更新本节,并保留任务编号、验证路径和未决项;不要把动态进度写进 AGENTS.md。
|
||||
@@ -0,0 +1,75 @@
|
||||
---
|
||||
status: candidate-not-implemented
|
||||
colors:
|
||||
primary: "#17634c"
|
||||
surface: "#ffffff"
|
||||
text: "#1d1d1f"
|
||||
typography:
|
||||
bodySize: "16px"
|
||||
bodyLineHeight: 1.6
|
||||
family: '"Microsoft YaHei", "PingFang SC", sans-serif'
|
||||
rounded:
|
||||
navigationItem: "9px"
|
||||
spacing:
|
||||
navigationHorizontal: "24px"
|
||||
components:
|
||||
primaryAction:
|
||||
background: "{colors.primary}"
|
||||
foreground: "{colors.surface}"
|
||||
surfacePanel:
|
||||
background: "{colors.surface}"
|
||||
color: "{colors.text}"
|
||||
---
|
||||
|
||||
# 兴邦 v2 视觉契约草案
|
||||
|
||||
## Overview
|
||||
|
||||
当前是基于已观察代码整理的候选契约。此文件尚未被 CSS 或构建消费,状态为 Present,不能声称 Token-ready/Aligned/Backstopped。正式 token 文件路径、导出与防漂移测试在 M1/M4 决定并实现。
|
||||
|
||||
## Colors
|
||||
|
||||
primary #17634c 来自 src/components/xingbang/navigation.css 的 xb-brand-mark 及 src/app/globals.css 的 xingbang-mark;surface 白色取自现有业务面板;text #1d1d1f 来自 globals.css。当前全局 accent 是蓝色 #002fa7,与业务导航绿色并存,不能声称已经统一品牌主题。
|
||||
|
||||
提案:业务预审延续深绿和白色证据面板,减少装饰色。primary 用于主动作和品牌,不代表风险结论;成功/警告/阻断必须文字标识。辅助状态色和对比度尚待审查,未擅自编造正式 token。
|
||||
|
||||
## Typography
|
||||
|
||||
正文 16px、行高 1.6 来自 globals.css;中文字体延续现有字体栈。预审结果、问题、证据三层信息明确,不把大量技术标签放在首页。数字不得比证据更突出,真实业务不放未验证的通过概率。原型按用户新增要求展示独立的演示概率与沙盘对照,百分比旁必须有演示标识;解释、缺证与人工复核提示不能被数字淹没。
|
||||
|
||||
## Layout
|
||||
|
||||
项目与版本头部 → 判断摘要 → 核查/经验主区 → 证据抽屉/动作侧栏。小窗口切换为纵向,路径图始终有文字列表。导航水平 padding 24px 与导航项圆角 9px 来自 navigation.css 的后置业务可读性规则;不意味着其他组件强制使用这些值。
|
||||
|
||||
## Elevation & Depth / Shapes
|
||||
|
||||
只对抽屉与浮层建立必要层次。面板阴影、圆角、间距完整尺度待视觉评审,禁止各组件自行新增任意裸值。已观察导航值不等于全站设计系统。
|
||||
|
||||
## Components
|
||||
|
||||
RunSummary、EvidenceDrawer、CaseTimelinePanel、ExperienceEditor、ScenarioPanel、EvaluationPanel 均为提案,状态和权限以 UI Spec 为准。动作 hover/disabled/focus token 待补齐并验证;原型与正式实现必须使用同一来源。
|
||||
|
||||
## Do / Don't
|
||||
|
||||
- 用“依据、差异、尚未验证”帮助业务人员理解;不要用黑盒发光大脑代替证据链。
|
||||
- 线宽代表定义明确的等级;不要把模拟路径长度、线宽或模型确信度当作概率。
|
||||
- 减少动效可关闭动画;焦点、错误、成功必须有文字和可见形状。
|
||||
- 实施时验证正文/焦点对比度达到流程要求;当前尚未执行,不能标已通过。
|
||||
|
||||
## 缺口与门禁
|
||||
|
||||
needs-design-decision:完整状态色、间距尺度、响应断点、组件状态 token;owner 前端负责人;needed-by UI 实现前。需要 token 导出检查、对比度测试、键盘测试及文案 key 检查,结果纳入 test-evidence。
|
||||
|
||||
## 2026-09-28 原型方向补充
|
||||
|
||||
用户已选“深色导航+浅色工作区”。Superdesign 原型采用深绿导航、浅灰工作背景和白色证据面板,通过关系图与克制动效体现科技感。具体候选颜色、间距及交互在 .superdesign/concept-design-system.md;记录与验收见 [交互原型](12-prototype.md)。这些为原型设计决策,尚未写入生产CSS,以上已观察值的事实状态不变。
|
||||
|
||||
## 2026-09-29 概率解释可视化
|
||||
|
||||
沿用原型色板,概率环强调结果、六轴雷达强调证据阶段;局部科技面板使用现有深绿/青绿语义色,不引入营销插画。图表须附刻度定义、虚实线图例与等价可交互文字列表。只使用短时状态过渡,prefers-reduced-motion时关闭;无持续扫光或闪烁。维度选择进入依据抽屉,原型概率来源进入人工情景表。图形不能暗示权重、面积或资料完整度与真实审批概率等价。详见[概率设计](13-probability-prototype.md)。
|
||||
|
||||
## 2026-09-29 来源与状态分离
|
||||
|
||||
新增语义token候选:origin-history(历史提炼)、origin-manual(人工创建)、origin-policy(制度导入)。用于卡片标题条和来源徽标,要求视觉差异明显且不占用风险状态色;具体色值、hover/focus与对比度在T09依据现有设计系统定案。本轮未写生产CSS或重画原型。
|
||||
|
||||
每种来源必须同时有文字和图标;data_domain和审核status各有独立徽标。来源区别不是权限区别,也不是可信等级。图表维度改为方案驱动;六轴只描述已有原型,生产按UI Spec第9节处理2/6/9维及异刻度。
|
||||
@@ -0,0 +1,49 @@
|
||||
# 兴邦智审 v2:开发文档入口
|
||||
|
||||
版本:0.2 · 2026-09-29 · 状态:用户已确认产品方向,工程规格待评审。
|
||||
|
||||
产品方向:评审经验驱动的 AI 预审。主审 Agent 综合判断,可切换专项判断模块(Jev 官方服务 / 本地开源模型)承担局部判断,确定性程序执行计算和规则;历史评审过程是核心经验来源。当前没有兴邦真实历史数据,演示不能宣称真实审批通过概率。
|
||||
|
||||
## 当前工作边界
|
||||
|
||||
原版源码恢复点已保存;已制作独立 Superdesign 交互原型,本轮补齐三模块闭环与开发交接。未创建独立 v2 代码目录、未实施新版 API / Jev / 历史过程提炼、未部署或覆盖现有服务。迁移仍是后续任务,见实施计划;不能把现有名字含 v2 的旧模块误认为本轮新版已完成。
|
||||
|
||||
备份基线:`4d5a420671cb073a56335bd617e7d0812b8179a9`,Gitea `codex/backup-before-ai-prescreen-v2-20260928`;已通过远程 SHA 比对。此前主线:`b10093f9d8a949c6a6f8f8ed6d5b9c1bb044b569`。详情见交付记录。
|
||||
|
||||
## 新开发者先读
|
||||
|
||||
先读 [三模块闭环](14-experience-loop.md) 理解产品,再读 [开发交接与任务包](15-development-handoff.md) 选择一个小任务。Claude Code 从根 [CLAUDE.md](../../CLAUDE.md) 导入统一规则;可使用用户配置的 DeepSeek,编码模型与产品运行模型独立。
|
||||
|
||||
## 阅读顺序
|
||||
|
||||
| 文档 | 用途 |
|
||||
|---|---|
|
||||
| [流程适配](../project-process/XINGBANG-ADAPTATION.md) | 如何执行同事提供的八阶段规范 |
|
||||
| [三模块闭环](14-experience-loop.md) | 历史经验加工、卡片装配预审、轨迹与真实评审反馈 |
|
||||
| [开发交接与任务包](15-development-handoff.md) | T00–T13、最小阅读包、Claude/DeepSeek提示词与当前进度 |
|
||||
| [URD](URD.md) | 用户、产品目标、功能、分期与产品验收 |
|
||||
| [需求规格](01-requirements.md) | 七段规格、BR/E/AC 可追溯规则 |
|
||||
| [架构](02-architecture.md) | 已有能力、目标边界、职责与 ADR |
|
||||
| [详细设计](03-detailed-design.md) | 候选接口、数据契约、状态、失败处理 |
|
||||
| [专项判断模型切换](11-judgment-providers.md) | 无 Jev Key 的本地路径、统一契约、能力差异与切换验收 |
|
||||
| [概率与沙盘联动](13-probability-prototype.md) | 演示概率、可追溯依据与即时情景对照;真实概率校准边界 |
|
||||
| [交互原型](12-prototype.md) | Superdesign 视觉方向、演示范围与原型验收 |
|
||||
| [UI Spec](04-ui-spec.md) | 页面骨架、状态、权限和演示交互 |
|
||||
| [设计契约](DESIGN.md) | 已观察视觉来源、语义 token 提案及缺口 |
|
||||
| [实施计划](05-implementation-plan.md) | 核心代码迁移与分批交付 |
|
||||
| [验证方案](06-validation.md) | 自动化、专家盲测和概率验证边界 |
|
||||
| [部署与 Gitea](07-deployment-and-gitea.md) | 当前真实入口、备份恢复和 v2 隔离要求 |
|
||||
| [数据试点与展示](08-data-pilot-and-demo.md) | 争取历史数据开放的演示脚本与试点方案 |
|
||||
| [决策与未决项](09-decisions.md) | 已接受方向、候选决策、owner 与到期阶段 |
|
||||
| [本次交付记录](10-delivery-record.md) | 备份证据、检查结果和未完成事项 |
|
||||
|
||||
## 阶段状态
|
||||
|
||||
- ① 用户已确认公司评审会通过为目标、初始材料介入、P0模拟数据、三模块闭环和可替换专项判断;规格、真实制度与标签映射仍待审阅。
|
||||
- ②–④ 为支持需求评审提前记录的候选设计,不视为阶段门禁完成。
|
||||
- ⑤–⑧ 文档描述未来实施、验证、交付和经验沉淀方式;本轮仅更新文档并执行文档检查;此前的原型和备份证据各自保存,不能推断本轮已远程备份。
|
||||
- 现有基线测试结果仅证明旧版状态,不证明 v2 功能已经实现。
|
||||
|
||||
## 下一步
|
||||
|
||||
从 T00 完成首个实施切片的契约、依赖白名单、隔离路径和门禁审阅;随后按 T01–T11 分批实现模拟闭环。Jev接入可选,Laya须按任务验证。真实数据/概率留到T13,不能因文档完备就宣称已接通或已校准。
|
||||
+142
@@ -0,0 +1,142 @@
|
||||
# 兴邦智审 v2 用户需求文档
|
||||
|
||||
## 1. 文档控制
|
||||
|
||||
| 项 | 内容 |
|
||||
|---|---|
|
||||
| 编号 | URD-XB-V2-0.2 |
|
||||
| 日期 / 状态 | 2026-09-29 / 用户确认产品方向,规格待评审 |
|
||||
| 需求来源 | 用户本次会话:聚焦 AI 预审、历史评审经验、可切换专项模型(Jev / 本地开源模型)和数据开放展示 |
|
||||
| 产品 owner | 项目负责人;业务评审 owner 为兴邦指定评审专家,待指派 |
|
||||
| 维护位置 | docs/v2/URD.md |
|
||||
|
||||
变更记录:0.1 首次整理;0.2 补齐用户确认的三模块闭环、人工卡片和本地专项判断。用户确认不等于兴邦已签署或工程门禁通过。
|
||||
|
||||
## 2. 目的与范围
|
||||
|
||||
帮助客户经理在项目早期获得有依据的推进建议、主要障碍、最小补件路径;帮助评审人员将历史项目中的调查方法沉淀为可审核、可复用、可撤回的经验。
|
||||
|
||||
P0 范围:纯模拟数据的受控演示、项目事实与证据、历史案例过程与经验卡、主审综合预审、可选专项核查(Jev 官方服务 / 本地开源模型 / 关闭)、情景模拟、对照验证。先演示并验证经验链,再争取一批脱敏历史案例。
|
||||
|
||||
不在 P0:自动正式审批、自动放款、未经校准的通过概率、默认访问兴邦生产库、个人评审员通过倾向预测、用真实材料直接训练外部模型。这些能力或不属于本产品职责,或依赖另行确认的数据和验证条件。
|
||||
|
||||
成功条件:在明确标注的演示材料上,用户能追溯判断依据,理解新增材料为何改变或没有改变结论;脱敏试点效果经客户持有的保留样本验证后单独报告。
|
||||
|
||||
## 3. 参考
|
||||
|
||||
- [项目流程](../project-process/README.md)及 [URD 模板](../project-process/templates/URD-Template.md)。
|
||||
- [当前技术路径](../兴邦金租对公智能评审平台技术路径与AgentLoop说明-v1.0.md)。
|
||||
- [新版需求规格](01-requirements.md)、[架构](02-architecture.md)、[决策记录](09-decisions.md)。
|
||||
|
||||
## 4. 术语与角色
|
||||
|
||||
| 术语 | 用户语言定义 |
|
||||
|---|---|
|
||||
| 主审 Agent | 组织核查、比较证据并形成 AI 预审意见的助手 |
|
||||
| 预审意见 | 建议推进、补充后再判断、暂不建议推进、信息不足;均非正式审批 |
|
||||
| 经验卡 | 某类争议如何调查、哪些证据改变判断、适用与例外条件的记录 |
|
||||
| 判断节点 | 一项具体争议及其核查、证据和当时意见 |
|
||||
| 情景模拟 | 在假设动作完成的条件下重新评估,尚未改变真实项目事实 |
|
||||
| 审批概率 | 指定审批阶段和时间口径下的获批估计,须独立历史校准 |
|
||||
| 盲测 | 系统先锁定结果,再与保留的专家意见和结果对照 |
|
||||
|
||||
| 角色 | 任务 | 成功表现 |
|
||||
|---|---|---|
|
||||
| 客户经理 | 提供材料、理解障碍、补件 | 知道下一步优先做什么及依据 |
|
||||
| 评审员 | 核实经验、复核争议 | 看得懂证据链,能纠正和说明分歧 |
|
||||
| 经验发布人 | 审核适用范围、发布和撤回经验 | 候选经验不会未经审核直接生效 |
|
||||
| 数据/系统管理员 | 管理数据范围、模型出口和版本 | 每次运行有明确数据范围和访问记录 |
|
||||
| 项目负责人/只读访客 | 观看演示、比较效果 | 分清模拟能力和实测效果 |
|
||||
|
||||
发布人独立资格与真实身份接入方式见 OQ-02;P0 演示用明示的模拟角色,不当作生产鉴权。
|
||||
|
||||
## 5. 核心体验
|
||||
|
||||
三个核心模块:①历史经验加工中心:历史档案→时间线→Skills/Rules候选→专家审核;②AI预审工作台:数据卡+Skills卡+Rules卡装配方案→受控核查→补件与沙盘;③轨迹复盘中心:运行轨迹→会议结果对照→改进候选→验证和审核发布。
|
||||
|
||||
终局目标是让高预测通过概率的项目在公司项目评审会上具有较高实际通过比例,同时报告覆盖率和校准;不是预测违约,也不是自动审批。介入点为最初收集材料时;不值得继续推进的项目由客户经理据建议作决定。详见 [闭环设计](14-experience-loop.md)。
|
||||
|
||||
页面入口拟整合到项目工作台:预审总览、历史经验、证据详情、推进沙盘、验证看板。保持当前项目上下文;不新增一批与现有工作台重叠的孤立旧页面。
|
||||
|
||||
交付面为中文 Web;保留现有 Next.js + FastAPI 技术基线。桌面应用、移动专用端暂不纳入。
|
||||
|
||||
## 6. 功能模块需求
|
||||
|
||||
| 模块 | 功能编号 | 用户任务 / 主流程 | 异常与用户行为 | 验收 |
|
||||
|---|---|---|---|---|
|
||||
| MOD-01 项目事实 | FR-FACT-01 | 上传材料→查看提取候选→确认事实与来源 | EX-FACT-01 解析失败:保留原件,允许人工录入并标注来源 | AC-U01 |
|
||||
| MOD-02 历史过程 | FR-HIST-01 | 导入案例→整理争议、补件、证据、决定的时间线 | EX-HIST-01 时间或来源缺失:显示未知,禁止补造 | AC-U02 |
|
||||
| MOD-03 经验治理 | FR-EXP-01 | 提炼候选→专家修改→审核发布→必要时撤回 | EX-EXP-01 无审核资格/过期:不进入有效经验集 | AC-U03 |
|
||||
| MOD-04 主审预审 | FR-REV-01 | 发起预审→查看核查过程→获得意见与补件清单 | EX-REV-01 关键材料不足/工具失败:显示信息不足或部分结果 | AC-U04 |
|
||||
| MOD-05 专项核查 | FR-JEV-01 | 查看具体材料是否支持结论及核查状态 | EX-JEV-01 未配置/超时:显示未执行,不伪造返回值 | AC-U05 |
|
||||
| MOD-05 专项核查 | FR-JUD-01 | 管理员配置可用模型,用户在授权配置中选择后发起新预审;同一套业务问题可由 Jev 或本地开源模型执行 | EX-JUD-01 配置/能力不满足:显示原因,不自动改用外部服务 | AC-U09 |
|
||||
| MOD-06 推进沙盘 | FR-SIM-01 | 选择假设动作→比较问题变化→返回真实结果 | EX-SIM-01 假设冲突/无证据:提示限制,禁止当作正式改善 | AC-U06 |
|
||||
| MOD-07 效果验证 | FR-EVAL-01 | 锁定样本与版本→运行→揭示参考结果→专家复盘 | EX-EVAL-01 参考答案提前泄露:样本作废,不计盲测 | AC-U07 |
|
||||
| MOD-08 数据试点 | FR-PILOT-01 | 查看数据用途→选择受控案例范围→审核导入 | EX-PILOT-01 数据出口未批准:阻止外部发送 | AC-U08 |
|
||||
|
||||
各功能前置条件均为项目/案例访问范围有效;真实数据须有授权范围。详见规格的权限、错误和状态定义。上述模块归入三个核心模块;P0只实现模拟流程,FR-PILOT-01的真实接入属于P1;FR-JEV-01 保留历史编号,专项模块的实现不绑定 Jev 品牌。各模块按实施计划分批实现,不能一批全上。
|
||||
|
||||
## 7. 数据与内容
|
||||
|
||||
优先需要同一历史项目的初始材料、问询、补件、方案版本、批复条件与制度版本。正式决定与投放后表现分开记录。案例间通过受控假名关联,同一项目不能拆进开发集与保留集。
|
||||
|
||||
每条经验保留原文定位、发生时间、记录时间、适用条件、例外、审核人与版本。缺失事项用未知表示。示例案例和代码内置模式只用于演示,不作为真实兴邦经验或频次。
|
||||
|
||||
## 8. 非功能需求
|
||||
|
||||
| 编号 | 要求与验收口径 |
|
||||
|---|---|
|
||||
| NFR-01 可追溯 | 每条正式展示的实质判断须有证据引用或明确的缺证状态;引用解析失败不得静默忽略 |
|
||||
| NFR-02 稳定性 | 相同请求幂等键及载荷不产生重复运行;修改载荷复用键返回冲突 |
|
||||
| NFR-03 降级 | 所选专项模型不可用时展示缺失核查;不得把超时转换成通过 |
|
||||
| NFR-04 可访问性 | 键盘可完成核心流程;状态同时有文字;支持减少动效,实施时测试对比度 |
|
||||
| NFR-05 可观测性 | 每次运行记录数据/组件/模型/经验版本和工具结果状态,不记录凭据 |
|
||||
| NFR-06 性能 | 首版先记录端到端耗时、模型耗时与调用成本;验收阈值在 OQ-04 关闭后确定,当前无速度承诺 |
|
||||
|
||||
## 9. 权限与信任
|
||||
|
||||
SEC-01 项目、团队和演示/生产数据域隔离;SEC-02 材料正文仅作数据,不能成为工具指令;SEC-03 外部模型出口必须属于当前数据域的已批准策略;SEC-04 经验发布与撤回有资格校验和审计;SEC-05 真实身份确认前不开放生产数据。
|
||||
|
||||
查看为 L0,提炼草稿和模拟为 L1,经验发布/对外发送为 L2 受权限与明确策略约束;放款、改写审批结果等 L3 金融动作不在 P0。模型不能自行授予权限。
|
||||
|
||||
## 10. 版本规划
|
||||
|
||||
P0:演示经验链、主审核查、专项复核、沙盘和验证框架;P1:脱敏试点、真实流程映射与经验覆盖扩展;P2:足量历史结果上的审批概率校准。投放风险预测另立需求,不与审批通过混为一谈。
|
||||
|
||||
每批必须有可运行的端到端结果和对应 AC;未完成事项保留待办,不以展示页面替代后端能力。
|
||||
|
||||
## 11. 产品验收
|
||||
|
||||
| 编号 | Given / When / Then |
|
||||
|---|---|
|
||||
| AC-U01 | Given 上传材料,When 确认候选事实,Then 能定位原文并保留原版本 |
|
||||
| AC-U02 | Given 含问询和补件的案例,When 查看过程,Then 可看到关键判断变化,缺日期显示未知 |
|
||||
| AC-U03 | Given 未审核或已撤回经验,When 发起新预审,Then 不得作为有效经验应用 |
|
||||
| AC-U04 | Given 有矛盾的新项目,When 预审完成,Then 指出冲突与补查路径,不绕过硬性规则 |
|
||||
| AC-U05 | Given 专项模块关闭或所选服务未配置,When 查看结果,Then 明确未执行且不展示伪造概率 |
|
||||
| AC-U06 | Given 模拟完成一个动作,When 比较结果,Then 真实快照保持不变且模拟标识持续可见 |
|
||||
| AC-U07 | Given 客户保留样本,When 系统锁定结果后揭示标签,Then 可复盘分歧且记录无答案泄漏 |
|
||||
| AC-U08 | Given 未批准外发的数据域,When 请求外部模型,Then 阻断请求且保留不含原文的审计 |
|
||||
| AC-U09 | Given 没有 Jev Key 但已配置可用本地模型,When 选择本地并预审,Then 相同问题与证据完成专项核查且不访问 Jev;切换后留新运行,不覆盖旧结果 |
|
||||
|
||||
核心效果指标:重大问题漏检、无依据结论、误报、有效补件、专家分歧、耗时与成本。目标值由试点双方在开测前确定;不预先承诺准确率。
|
||||
|
||||
## 12. 假设与未决项
|
||||
|
||||
当前假设:中文 Web、无真实历史库、先用标注演示数据、主审负责综合意见。首批行业、专家发布权限、模型数据出口、验收阈值和会议结果代码/观察窗口映射均见 [OQ 清单](09-decisions.md),有 owner 与 needed-by。真实试点前必须关闭对应阻塞项。
|
||||
|
||||
附录:原有 FR/EX 索引在第 6 节,新增功能与验收映射在第13节;演示脚本见 [数据试点与展示](08-data-pilot-and-demo.md)。本版从既有综合平台聚焦经验驱动预审,保留旧能力供迁移,不声称重写完成。
|
||||
|
||||
## 13. 本次确认的功能增量
|
||||
|
||||
| 功能编号 | 用户任务 | 规格验收 |
|
||||
|---|---|---|
|
||||
| FR-FACT-02 | 选择文件集合,查看逐文件解析与来源冲突,确认后生成数据卡 | AC-23/24 |
|
||||
| FR-EXP-02 | 用自然语言干预提炼,人工新增Skills/Rules,保留来源并审核 | AC-25/26/27/43 |
|
||||
| FR-PLAN-01 | 装配数据/Skill/Rule,生成随方案变化的核查维度,不开放Tools卡 | AC-28/29/44 |
|
||||
| FR-SIM-02 | 查看明确标注的概率状态及依据,勾选后比较完整情景 | AC-30/31 |
|
||||
| FR-TRACE-01 | 回放AI轨迹、查看会议记录,区分材料版本和未知经过 | AC-22/32/33 |
|
||||
| FR-LEARN-01 | 从偏差提出改进,固定对照、审核后发布,继续观察效果 | AC-34/36/37/41 |
|
||||
| FR-DEMO-01 | 用可复现的多结果模拟案例演示完整闭环 | AC-35 |
|
||||
|
||||
以上AC均引用需求规格的稳定编号,不新增重复AC-U口径。P0验收结构与交互;真实预测效果须P1/P2单独验证。历史提炼和人工维护的卡片颜色/图标/文字区别清晰,来源和发布状态分开呈现(AC-42)。
|
||||
@@ -0,0 +1,54 @@
|
||||
// Prototype-only browser checks. Requires Playwright and a Chromium installation.
|
||||
// PROTOTYPE_URL optionally targets the Superdesign preview; otherwise tests saved HTML.
|
||||
const {chromium}=require('playwright');
|
||||
const fs=require('fs'),path=require('path'),{pathToFileURL}=require('url');
|
||||
(async()=>{
|
||||
const dir=path.resolve(process.env.EVIDENCE_DIR||'test-evidence/20260929-radar-prototype/local');fs.mkdirSync(dir,{recursive:true});
|
||||
const browser=await chromium.launch({headless:true,...(process.env.CHROMIUM_PATH?{executablePath:process.env.CHROMIUM_PATH}:{})});
|
||||
const page=await browser.newPage({viewport:{width:1440,height:1000}});const errors=[],checks=[];page.on('pageerror',e=>errors.push(e.message));
|
||||
const check=(name,value)=>{checks.push({name,passed:!!value});if(!value)throw Error(name)};
|
||||
const shot=async(name)=>page.screenshot({path:path.join(dir,name+'.png'),fullPage:true});
|
||||
try{
|
||||
await page.goto(process.env.PROTOTYPE_URL||pathToFileURL(path.join(__dirname,'prescreen-workbench.html')).href,{waitUntil:'networkidle',timeout:60000});
|
||||
await page.waitForFunction(()=>getComputedStyle(document.querySelector('[data-sd-id="1"]')).display==='flex',{timeout:15000});
|
||||
check('P08 baseline 42%',await page.locator('#baseline-probability').innerText()==='42%');
|
||||
check('P08 explicit demo label',await page.getByText('审批通过概率 · 演示值',{exact:true}).isVisible());
|
||||
check('P08 uncalibrated explanation',await page.getByText('人工设定,仅演示交互;未经历史数据校准。',{exact:false}).isVisible());
|
||||
await require('./check-radar.cjs')({page,check,shot});
|
||||
const baseline=await page.locator('#real-recommendation').innerText();await shot('01-overview');
|
||||
await page.locator('#btn-show-basis').click();check('P11 basis opens',await page.locator('#basis-dialog').isVisible());
|
||||
const basis=await page.locator('#basis-dialog').innerText();
|
||||
for(const word of ['DC-CASH','SKILL-04','H-018','RULE-01','非模型计算','原型情景表','不代表红线核查已经通过'])check('P11 trace '+word,basis.includes(word));
|
||||
await shot('02-basis');await page.keyboard.press('Escape');check('P07 focus restored',await page.locator('#btn-show-basis').evaluate(e=>e===document.activeElement));
|
||||
await page.locator('#tab-simulation').click();
|
||||
for(const [bank,title,prob,delta,remaining,reason] of [[false,false,42,0,'2 项','未选择'],[true,false,58,16,'设备权属','银行流水'],[true,true,64,22,'两项证据','不简单相加'],[false,true,51,9,'实际回款','合同'],[false,false,42,0,'2 项','未选择'],[false,true,51,9,'实际回款','合同'],[true,true,64,22,'两项证据','不简单相加']]){
|
||||
await page.locator('#assume-bank').setChecked(bank);await page.locator('#assume-title').setChecked(title);
|
||||
check(`P09 immediate ${bank}/${title} = ${prob}`,await page.locator('#sim-prob-val').innerText()===prob+'%');
|
||||
check(`P09 delta ${delta}`,await page.locator('#sim-prob-delta').innerText()==='+'+delta+' 百分点');
|
||||
check(`P10 remaining ${bank}/${title}`,(await page.locator('#sim-remaining').innerText()).includes(remaining));
|
||||
check(`P10 reason ${bank}/${title}`,(await page.locator('#sim-explanation').innerText()).includes(reason));
|
||||
check('P10 comparison visible',await page.locator('#simulation-comparison').isVisible());
|
||||
}
|
||||
await page.locator('#panel-simulation').scrollIntoViewIfNeeded();await shot('03-simulation-64');
|
||||
await page.locator('#run-simulation').click();check('P11 scenario basis',await page.locator('#basis-dialog').isVisible());await page.keyboard.press('Escape');
|
||||
await page.getByRole('button',{name:'← 返回真实预审'}).click();check('P12 recommendation unchanged',await page.locator('#real-recommendation').innerText()===baseline);check('P12 baseline unchanged',await page.locator('#baseline-probability').innerText()==='42%');
|
||||
check('P05 Jev disabled',await page.getByRole('radio',{name:'Jev官方服务(未配置)'}).isDisabled());
|
||||
await page.getByRole('radio',{name:'关闭专项核查',exact:true}).check();check('P05 off label',(await page.locator('#model-status').innerText()).includes('已关闭'));check('P12 provider preserves baseline',await page.locator('#baseline-probability').innerText()==='42%');
|
||||
await page.locator('#tab-simulation').click();check('P12 provider preserves scenario',await page.locator('#sim-prob-val').innerText()==='64%');await page.locator('#tab-overview').click();await page.getByRole('radio',{name:'本地开源模型(演示)',exact:true}).check();
|
||||
await page.locator('#btn-open-drawer-1').click();await page.locator('#evidence-basis-tab').click();check('P02 evidence',await page.locator('#evidence-basis').isVisible());await page.keyboard.press('Escape');
|
||||
await page.locator('#tab-experience').click();check('P03 experience',await page.locator('#panel-experience').isVisible());await page.locator('#tab-overview').click();
|
||||
await page.locator('#btn-generate-list').click();check('P06 checklist',await page.locator('#checklist-dialog').isVisible());await page.keyboard.press('Escape');
|
||||
await page.locator('#nav-link-4').click();check('P07 validation',await page.locator('#validation-dialog').isVisible());await page.keyboard.press('Escape');
|
||||
for(const width of [1440,1024,390]){
|
||||
await page.setViewportSize({width,height:1000});
|
||||
for(const tab of ['overview','simulation']){
|
||||
await page.locator('#tab-'+tab).click();await page.locator('[data-sd-id="8"]').evaluate(e=>e.scrollTop=0);await shot(`responsive-${width}-${tab}`);
|
||||
check(`P13 document width ${width}/${tab}`,await page.evaluate(()=>document.documentElement.scrollWidth<=innerWidth));
|
||||
check(`P13 content width ${width}/${tab}`,await page.locator('[data-sd-id="8"]').evaluate(e=>e.scrollWidth<=e.clientWidth+1));
|
||||
}
|
||||
}
|
||||
check('P07 mobile nav closed',!await page.locator('#prototype-navigation').isVisible());await page.locator('#mobile-menu').click();check('P07 mobile nav opens',await page.locator('#prototype-navigation').isVisible());await page.locator('#nav-link-2').click();check('P07 mobile navigation',await page.locator('#panel-experience').isVisible()&&!await page.locator('#prototype-navigation').isVisible());
|
||||
check('no runtime errors',errors.length===0);
|
||||
}catch(e){checks.push({name:'execution',passed:false,error:e.message});await shot('failure');}
|
||||
await browser.close();const result={status:checks.every(x=>x.passed)?'PASS':'FAIL',target:process.env.PROTOTYPE_URL||'saved prototype',checks,errors,boundary:'Fictional prototype only; no backend/model connection or independent visual review'};fs.writeFileSync(path.join(dir,'interaction-checks.json'),JSON.stringify(result,null,2));console.log(JSON.stringify(result,null,2));process.exit(result.status==='PASS'?0:1);
|
||||
})();
|
||||
@@ -0,0 +1,40 @@
|
||||
// Shared radar assertions for the standalone prototype test runner.
|
||||
module.exports = async function verifyRadar({page,check,shot}) {
|
||||
const dimensions=['回款核验','财务勾稽','权属核验','交易要素','经验适配','规则覆盖'];
|
||||
await page.locator('#tab-overview').click();
|
||||
check('P14 baseline radar visible',await page.locator('#radar-baseline').isVisible());
|
||||
const points=await page.locator('#radar-baseline polygon[data-series="baseline"]').getAttribute('points');
|
||||
check('P14 six vertices',points.trim().split(/\s+/).length===6);
|
||||
for(let i=0;i<6;i++){
|
||||
const button=page.locator(`button[data-dimension="${i}"][data-context="baseline"]`).first();
|
||||
await button.focus();await page.keyboard.press('Enter');
|
||||
check(`P15 dimension ${i} title`,(await page.locator('#dimension-title').innerText()).includes(dimensions[i]));
|
||||
const trace=await page.locator('#dimension-trace').innerText();
|
||||
for(const term of ['数据卡','Skill','Tools','Rules','read_'])check(`P15 ${i} trace ${term}`,trace.includes(term));
|
||||
check(`P15 ${i} simulated trace`,trace.includes('演示'));
|
||||
await page.keyboard.press('Escape');check(`P15 ${i} focus return`,await button.evaluate(e=>e===document.activeElement));
|
||||
}
|
||||
await page.locator('#radar-baseline [data-dimension="2"]').click();check('P15 radar axis clickable',(await page.locator('#dimension-title').innerText()).includes('权属核验'));await page.keyboard.press('Escape');
|
||||
await page.locator('#btn-probability-method').click();
|
||||
check('P16 baseline lookup', (await page.locator('#method-result').innerText()).includes('42%'));
|
||||
check('P16 demo table version',(await page.locator('#probability-method-dialog').innerText()).includes('DEMO-TABLE-v1'));
|
||||
await shot('radar-method-baseline');await page.keyboard.press('Escape');
|
||||
await page.locator('#tab-simulation').click();
|
||||
const scenarioBase=await page.locator('#radar-scenario polygon[data-series="baseline"]').getAttribute('points');
|
||||
const basePoints=scenarioBase.trim().split(/\s+/);
|
||||
for(const [bank,title,key,value] of [[false,false,'00',42],[true,false,'10',58],[true,true,'11',64],[false,true,'01',51],[false,false,'00',42]]){
|
||||
await page.locator('#assume-bank').setChecked(bank);await page.locator('#assume-title').setChecked(title);
|
||||
const selected=(await page.locator('#radar-scenario polygon[data-series="scenario"]').getAttribute('points')).trim().split(/\s+/);
|
||||
check(`P17 unchanged baseline ${key}`,await page.locator('#radar-scenario polygon[data-series="baseline"]').getAttribute('points')===scenarioBase);
|
||||
check(`P17 independent baseline ${key}`,await page.locator('#radar-baseline polygon[data-series="baseline"]').getAttribute('points')===points);
|
||||
check(`P17 cash axis ${key}`,bank?selected[0]!==basePoints[0]:selected[0]===basePoints[0]);
|
||||
check(`P17 title axis ${key}`,title?selected[2]!==basePoints[2]:selected[2]===basePoints[2]);
|
||||
check(`P17 other axes ${key}`,[1,3,4,5].every(i=>selected[i]===basePoints[i]));
|
||||
await page.locator('#btn-scenario-method').click();check(`P16 scenario result ${key}`,(await page.locator('#method-result').innerText()).includes(value+'%'));
|
||||
check(`P16 selected row ${key}`,await page.locator('#method-row-'+key).getAttribute('aria-selected')==='true');await page.keyboard.press('Escape');
|
||||
}
|
||||
await page.locator('#assume-bank').check();await page.locator('#assume-title').check();
|
||||
await page.locator('button[data-dimension="0"][data-context="scenario"]').first().click();check('P15 scenario labeled assumption',(await page.locator('#dimension-trace').innerText()).includes('假设'));await shot('radar-dimension-scenario');await page.keyboard.press('Escape');
|
||||
await page.locator('#radar-scenario').scrollIntoViewIfNeeded();await shot('radar-scenario-overlay');
|
||||
await page.locator('#tab-overview').click();await page.locator('[data-sd-id="8"]').evaluate(e=>e.scrollTop=0);await shot('radar-overview');
|
||||
};
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 121 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 119 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 97 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 163 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 108 KiB |
@@ -0,0 +1,473 @@
|
||||
<!DOCTYPE html>
|
||||
|
||||
<html lang="zh-CN">
|
||||
<head>
|
||||
<meta charset="utf-8"/>
|
||||
<meta content="width=device-width, initial-scale=1.0" name="viewport"/>
|
||||
<title>兴邦金租 - 智审工作台</title>
|
||||
<meta content="same-origin" name="view-transition"/>
|
||||
<script src="https://cdn.tailwindcss.com"></script>
|
||||
<script src="https://code.iconify.design/iconify-icon/1.0.7/iconify-icon.min.js"></script>
|
||||
<script>
|
||||
tailwind.config = {
|
||||
theme: {
|
||||
extend: {
|
||||
colors: {
|
||||
nav: { bg: '#102B27', active: '#244D41', text: '#F3F7F5', muted: '#B1C6BE' },
|
||||
canvas: '#F3F5F4',
|
||||
card: '#FFFFFF',
|
||||
panel: '#F8FAF9',
|
||||
border: '#DCE4DF',
|
||||
ink: { main: '#182D26', sub: '#52675C', mute: '#64766C' },
|
||||
primary: { DEFAULT: '#17634C', hover: '#124F3D', text: '#FFFFFF' },
|
||||
warning: { text: '#805418', bg: '#FBF2DF' },
|
||||
risk: { text: '#A33C38', bg: '#FBEFEC' },
|
||||
tech: { line: '#226A7A', bg: '#EDF5F7' },
|
||||
normal: { text: '#17634C', bg: '#EAF3EC' }
|
||||
},
|
||||
fontFamily: { sans: ['Microsoft YaHei', 'PingFang SC', 'sans-serif'] },
|
||||
spacing: { 4: '4px', 8: '8px', 12: '12px', 16: '16px', 20: '20px', 24: '24px', 32: '32px', 40: '40px', 48: '48px' },
|
||||
borderRadius: { button: '8px', panel: '12px' },
|
||||
boxShadow: { card: '0 4px 20px rgba(16,43,39,.04)' },
|
||||
transitionDuration: { 160: '160ms', 200: '200ms' }
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
<style>
|
||||
body { font-family: 'Microsoft YaHei', 'PingFang SC', sans-serif; background-color: #F3F5F4; color: #182D26; margin: 0; padding: 0; }
|
||||
*:focus-visible { outline: 2px solid #17634C; outline-offset: 2px; }
|
||||
@media (prefers-reduced-motion: reduce) { * { animation-duration: 0.01ms !important; animation-iteration-count: 1 !important; transition-duration: 0.01ms !important; scroll-behavior: auto !important; } }
|
||||
::-webkit-scrollbar { width: 6px; height: 6px; }
|
||||
::-webkit-scrollbar-track { background: transparent; }
|
||||
::-webkit-scrollbar-thumb { background: #DCE4DF; border-radius: 3px; }
|
||||
::-webkit-scrollbar-thumb:hover { background: #B1C6BE; }
|
||||
[hidden]{display:none!important}main,body [data-sd-id="9"]{min-width:0}button,a,input{touch-action:manipulation}button{cursor:pointer}button:disabled,input:disabled{cursor:not-allowed}
|
||||
#prototype-navigation{flex-shrink:0}#prototype-navigation a:hover,#prototype-navigation a.is-active{background:#244D41;border-radius:8px}#prototype-navigation a:first-child:hover{background:transparent}
|
||||
body [data-sd-id="3"]{gap:16px}body [data-sd-id="5"]{font-size:12px}body [data-sd-id="6"]{white-space:nowrap}body [data-sd-id="11"],body [data-sd-id="14"],body [data-sd-id="20"]{flex-wrap:wrap;gap:16px}body [data-sd-id="22"]{font-size:24px}body [data-sd-id="12"]{font-weight:600}
|
||||
body [data-sd-id="46"]{padding-left:0;padding-right:0;gap:12px}body [data-sd-id="46"] button{padding:12px;min-width:0}body [data-sd-id="60"]{padding:16px 12px;font-size:14px;max-width:104px}body [data-sd-id="42"]{min-height:280px}
|
||||
#panel-overview body [data-sd-id="70"],#panel-overview body [data-sd-id="79"]{font-size:15px}.mobile-menu{display:none}
|
||||
.proto-panel{background:#fff;border:1px solid #DCE4DF;border-radius:12px;padding:24px}.proto-panel h2,.center-dialog h2,.evidence-dialog h2{font-size:22px;font-weight:600;margin:8px 0 16px}.proto-panel h3,.evidence-dialog h3{font-size:16px;font-weight:600;margin:8px 0}.proto-panel p,.evidence-dialog p,.center-dialog p{font-size:15px;line-height:1.75;margin:8px 0 16px}.muted{color:#64766C}.section-eyebrow{font-size:12px;letter-spacing:1.5px;color:#52675C}.notice{padding:16px;border-radius:8px;background:#FBF2DF;color:#805418;font-size:14px;line-height:1.7;margin:16px 0}
|
||||
.experience-timeline{list-style:none;padding:16px 0;margin:0}.experience-timeline li{display:flex;gap:16px;position:relative;padding-bottom:24px}.experience-timeline li:not(:last-child):before{content:'';position:absolute;left:19px;top:40px;bottom:0;width:1px;background:#DCE4DF}.step-num{width:40px;height:40px;display:grid;place-items:center;border:1px solid #DCE4DF;border-radius:50%;background:#F8FAF9;color:#17634C;font-size:14px;flex-shrink:0}.experience-timeline small{font-size:12px;color:#64766C}.condition-grid{display:grid;grid-template-columns:1fr 1fr;gap:16px;margin:16px 0}.condition-grid>div{background:#F8FAF9;border:1px solid #DCE4DF;border-radius:8px;padding:16px}.condition-grid strong{color:#17634C;font-size:15px}.condition-grid small{font-size:12px;color:#64766C}
|
||||
.primary-button{background:#17634C;color:#fff;border:0;border-radius:8px;min-height:44px;padding:12px 24px;font-size:14px;font-weight:600;margin-top:16px}.primary-button:hover{background:#124F3D}.text-action{color:#17634C;font-size:14px;min-height:44px;text-align:left}.scenario-choice{display:flex;gap:12px;align-items:flex-start;padding:16px;border:1px solid #DCE4DF;border-radius:8px;margin:12px 0;cursor:pointer}.scenario-choice input{margin-top:5px;accent-color:#17634C;width:16px;height:16px}.scenario-choice small{display:block;color:#64766C;font-size:13px;margin-top:8px}
|
||||
dialog{color:#182D26;border:1px solid #DCE4DF;box-shadow:0 16px 48px rgba(16,43,39,.16);padding:24px;background:#fff}dialog::backdrop{background:rgba(16,43,39,.32)}.center-dialog{width:min(560px,calc(100% - 32px));border-radius:12px;max-height:90vh}.evidence-dialog{height:100dvh;max-height:100dvh;width:min(520px,100%);max-width:100%;margin:0 0 0 auto;border-radius:12px 0 0 12px;border-right:0}.dialog-header{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;border-bottom:1px solid #DCE4DF;margin-bottom:20px}.close-button{width:44px;height:44px;font-size:28px;color:#52675C;flex-shrink:0}.drawer-tabs{display:flex;gap:24px;border-bottom:1px solid #DCE4DF;margin-bottom:24px}.drawer-tabs button{min-height:44px;font-size:14px}.drawer-tabs [aria-selected=true]{border-bottom:2px solid #17634C;color:#17634C}blockquote{font-size:18px;line-height:1.9;border-left:3px solid #17634C;padding:24px;background:#F8FAF9;margin:24px 0}.checklist{list-style:decimal;padding-left:24px;font-size:15px;line-height:1.8}.checklist li{padding:8px 0}.checklist p{color:#52675C}
|
||||
@media(max-width:1100px){body [data-sd-id="8"]{flex-direction:column}body [data-sd-id="82"]{width:100%;display:grid;grid-template-columns:1fr 1fr}body [data-sd-id="5"]{line-height:1.6}body [data-sd-id="6"]{display:none}}
|
||||
@media(max-width:768px){.mobile-menu{display:flex;font-size:22px;min-width:44px;height:44px;align-items:center;justify-content:center}#prototype-navigation{display:none!important;position:fixed;top:68px;bottom:0;left:0;z-index:30;min-height:0!important;box-shadow:0 16px 48px rgba(16,43,39,.16)}#prototype-navigation.mobile-open{display:flex!important}body [data-sd-id="8"]{padding:20px}body [data-sd-id="3"]{padding:8px 12px}body [data-sd-id="12"]{font-size:24px}body [data-sd-id="19"]{padding:20px}body [data-sd-id="82"]{display:flex}body [data-sd-id="46"]{display:grid;grid-template-columns:1fr 1fr}body [data-sd-id="53"]{gap:12px}body [data-sd-id="60"]{max-width:none;text-align:center}body [data-sd-id="44"]{display:none}.condition-grid{grid-template-columns:1fr}body [data-sd-id="37"]{gap:24px}body [data-sd-id="26"]{gap:32px}body [data-sd-id="14"]{font-size:14px}.proto-panel{padding:20px}}
|
||||
body [data-sd-id="60"]{min-width:112px;max-width:none;white-space:nowrap;text-align:center}input[type=radio]{accent-color:#17634C}#prototype-navigation>a.is-active{background:transparent}
|
||||
|
||||
#probability-hero{flex-wrap:wrap}#probability-hero>div{flex-wrap:wrap;gap:12px}#probability-hero>div>span:last-child{white-space:nowrap}#sim-prob-delta{white-space:nowrap}#basis-dialog>div{padding:0;height:auto!important}body [data-sd-id="9"]{flex-shrink:0}
|
||||
.radar-polygon { transition: all 300ms ease; }
|
||||
.radar-polygon-sandbox { fill: rgba(23,99,76,0.15); stroke: #17634C; stroke-width: 2; }
|
||||
.radar-polygon-baseline { fill: transparent; stroke: #DCE4DF; stroke-width: 1; stroke-dasharray: 4; }
|
||||
.radar-axis { stroke: #DCE4DF; stroke-width: 1; }
|
||||
.radar-tick { stroke: #B1C6BE; stroke-width: 1; }
|
||||
.radar-label { font-size: 11px; fill: #52675C; cursor: pointer; }
|
||||
.radar-label:hover { fill: #17634C; font-weight: bold; }
|
||||
|
||||
body #probability-hero{display:block;width:100%;background:#102B27;color:#F3F7F5;border:1px solid #244D41;border-radius:12px;padding:20px;background-image:linear-gradient(#B1C6BE08 1px,transparent 1px),linear-gradient(90deg,#B1C6BE08 1px,transparent 1px);background-size:24px 24px}
|
||||
.cockpit-heading{display:flex;justify-content:space-between;gap:12px;flex-wrap:wrap;font-size:12px;letter-spacing:1px;color:#B1C6BE}.cockpit-badge{border:1px solid #52675C;border-radius:20px;padding:3px 10px}.cockpit-grid{display:grid;grid-template-columns:minmax(190px,.8fr) minmax(260px,1.2fr);gap:16px;align-items:center}.probability-center{text-align:center}.probability-ring{position:relative;width:200px;height:200px;margin:0 auto}.probability-ring svg{width:100%;height:100%}.ring-ticks{fill:none;stroke:#52675C;stroke-width:2;stroke-dasharray:1 7}.ring-track{fill:none;stroke:#244D41;stroke-width:8}.ring-value{fill:none;stroke:#B1C6BE;stroke-width:8;stroke-linecap:round;transform:rotate(-90deg);transform-origin:100px 100px}.ring-copy{position:absolute;inset:0;display:flex;flex-direction:column;justify-content:center;align-items:center;gap:8px}.ring-copy strong{font-size:46px;line-height:1;font-weight:600;letter-spacing:-2px}.ring-copy span{font-size:12px;color:#B1C6BE}.cockpit-button{border:1px solid #B1C6BE;border-radius:8px;padding:10px 16px;font-size:14px;color:#F3F7F5;min-height:44px}.cockpit-button:hover{background:#244D41}.cockpit-muted{font-size:12px;color:#B1C6BE;margin-top:12px}.radar-caption{font-size:15px;font-weight:600;display:flex;justify-content:space-between;gap:12px}.radar-caption small{font-size:12px;color:#B1C6BE}.radar-chart svg{width:100%;height:auto;max-height:275px;overflow:visible;display:block}.radar-chart .grid-line{fill:none;stroke:currentColor;opacity:.25;stroke-width:1}.radar-chart .stage-label{font-size:10px;fill:currentColor;opacity:.75}.radar-chart .dimension-label{font-size:12px;fill:currentColor;cursor:pointer}.radar-chart .dimension-label:hover{text-decoration:underline}.radar-chart [data-series=baseline]{fill:#B1C6BE22;stroke:#B1C6BE;stroke-width:2}.dimension-list{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:6px}.dimension-list button{font-size:12px;text-align:left;padding:8px;border:1px solid #52675C;border-radius:6px;min-height:44px}.dimension-list b{font-weight:500;display:block}.dimension-list span{font-size:11px;color:#B1C6BE}.dimension-list button:hover{background:#244D41}.cockpit-foot{font-size:12px;line-height:1.8;color:#F3F7F5;border-top:1px solid #52675C;padding-top:12px;margin-top:16px}.cockpit-foot span{color:#B1C6BE}.trace-strip{display:flex;flex-wrap:wrap;align-items:center;gap:8px 16px;font-size:12px;color:#52675C}.trace-strip .text-action{font-size:12px;min-height:36px}.scenario-radar-card{min-width:0;flex:1;background:#F8FAF9;border:1px solid #DCE4DF;border-radius:12px;padding:20px;color:#52675C}.scenario-probabilities{display:flex;justify-content:space-between;gap:16px}.scenario-probabilities>div:last-child{text-align:right}.scenario-probabilities small{display:block;font-size:12px}.scenario-probabilities strong{display:block;font-size:30px;color:#17634C}.scenario-probabilities #sim-prob-delta{font-size:12px;color:#17634C;display:block;white-space:nowrap}.scenario-meter{height:5px;background:#DCE4DF;border-radius:4px;margin:12px 0;overflow:hidden}.scenario-meter>div{height:100%;background:#17634C;transition:width 180ms}.radar-legend{display:flex;justify-content:center;gap:16px;font-size:12px}.scenario-radar-card [data-series=baseline]{fill:none;stroke:#64766C;stroke-dasharray:5 4}.scenario-radar-card [data-series=scenario]{fill:#17634C22;stroke:#17634C;stroke-width:2}.scenario-radar-card .dimension-list{grid-template-columns:repeat(2,minmax(0,1fr))}.scenario-radar-card .dimension-list button{border-color:#DCE4DF}.scenario-radar-card .dimension-list span{color:#52675C}.scenario-radar-card .dimension-list button:hover{background:#EAF3EC}.proto-panel .radar-help{font-size:12px;line-height:1.65;margin:12px 0;color:#64766C}.method-table{width:100%;font-size:14px;border-collapse:collapse}.method-table caption{font-size:12px;color:#64766C;text-align:left;margin-bottom:12px}.method-table th,.method-table td{padding:12px 8px;border-bottom:1px solid #DCE4DF;text-align:left}.method-table [aria-selected=true]{background:#EAF3EC;color:#17634C;font-weight:600;outline:1px solid #17634C}.method-subheading{font-size:17px;font-weight:600;margin:24px 0 12px}.trace-chain{list-style:none;padding:0;margin:0}.trace-chain li{border-left:2px solid #B1C6BE;padding:0 0 16px 16px;margin-left:5px}.trace-chain li b{font-size:14px}.trace-chain li p{font-size:14px;overflow-wrap:anywhere}.trace-chip{font-size:12px;color:#52675C;background:#F8FAF9;padding:8px;border:1px solid #DCE4DF;border-radius:6px;overflow-wrap:anywhere}.cockpit-grid *:focus-visible{outline-color:#B1C6BE}body [role=tab][data-tab][aria-selected=false]{border-color:transparent!important}
|
||||
@media(max-width:1250px) and (min-width:1101px){.cockpit-grid{grid-template-columns:1fr}.probability-ring{width:170px;height:170px}}
|
||||
@media(max-width:768px){body #probability-hero{padding:16px}.cockpit-grid{grid-template-columns:1fr}.radar-chart svg{max-height:none}.probability-ring{width:180px;height:180px}.cockpit-heading{font-size:11px}.dimension-list{grid-template-columns:repeat(2,minmax(0,1fr))}.scenario-radar-card{padding:12px}.radar-caption{margin-top:16px}.trace-strip{line-height:1.8}}
|
||||
@media(max-width:768px){.radar-chart .dimension-label{font-size:16px}.radar-chart .stage-label{font-size:14px}}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="min-h-screen flex w-full max-w-[1440px] mx-auto bg-canvas overflow-hidden" data-sd-id="1">
|
||||
<aside id="prototype-navigation" style="width:216px;min-height:100vh;background:#102B27;color:#F3F7F5;display:flex;flex-direction:column;padding:32px 16px;font-family:'Microsoft YaHei','PingFang SC',sans-serif;box-sizing:border-box">
|
||||
<a href="#overview" id="nav-link-0" style="display:block;padding:0 12px 32px;text-decoration:none;color:inherit"><strong style="font-size:22px;letter-spacing:2px">兴邦金租</strong><span style="display:block;font-size:12px;letter-spacing:3px;color:#B1C6BE;margin-top:8px">智审工作台</span></a>
|
||||
<div style="padding:0 12px 12px;color:#B1C6BE;font-size:12px">业务工作区</div>
|
||||
<nav aria-label="兴邦预审导航" style="display:flex;flex-direction:column;gap:8px">
|
||||
<a class="flex items-center gap-3 rounded-lg px-3 py-3 text-sm" data-nav="overview" href="#overview" id="nav-link-1" style="text-decoration:none;color:inherit"><iconify-icon icon="lucide:layout-dashboard" style="width:18px;height:18px;font-size:18px"></iconify-icon>项目预审</a>
|
||||
<a class="flex items-center gap-3 rounded-lg px-3 py-3 text-sm" data-nav="experience" href="#experience" id="nav-link-2" style="text-decoration:none;color:inherit"><iconify-icon icon="lucide:history" style="width:18px;height:18px;font-size:18px"></iconify-icon>历史经验</a>
|
||||
<a class="flex items-center gap-3 rounded-lg px-3 py-3 text-sm" data-nav="simulation" href="#simulation" id="nav-link-3" style="text-decoration:none;color:inherit"><iconify-icon icon="lucide:git-branch" style="width:18px;height:18px;font-size:18px"></iconify-icon>推进沙盘</a>
|
||||
<a class="flex items-center gap-3 rounded-lg px-3 py-3 text-sm" data-nav="validation" href="#validation" id="nav-link-4" style="text-decoration:none;color:inherit"><iconify-icon icon="lucide:chart-no-axes-combined" style="width:18px;height:18px;font-size:18px"></iconify-icon>验证看板</a>
|
||||
</nav>
|
||||
<div style="margin-top:auto;padding:32px 12px 0"><div style="border-top:1px solid #244D41;padding-top:24px"><span style="font-size:14px">演示评审员</span><p style="font-size:12px;line-height:1.6;color:#B1C6BE;margin:8px 0 0">历史经验驱动<br/>每一步判断都有依据</p></div></div>
|
||||
</aside>
|
||||
<main class="flex-1 flex flex-col h-screen overflow-hidden" data-sd-id="2">
|
||||
<div class="bg-warning-bg text-warning-text px-32 py-12 text-[14px] flex items-center justify-between border-b border-warning-text/10 shrink-0" data-sd-id="3">
|
||||
<button aria-expanded="false" aria-label="打开导航" class="mobile-menu" id="mobile-menu"><iconify-icon icon="lucide:menu"></iconify-icon></button>
|
||||
<div class="flex items-center gap-8" data-sd-id="4">
|
||||
<iconify-icon icon="lucide:alert-circle"></iconify-icon>
|
||||
<span data-sd-id="5">原型演示 · 未连接真实数据与模型。所有材料、判断、数值为虚构演示。综合意见不是正式审批意见。</span>
|
||||
</div>
|
||||
<div class="flex items-center gap-16" data-sd-id="6">
|
||||
<span class="flex items-center gap-4" data-sd-id="7">
|
||||
<iconify-icon icon="lucide:user"></iconify-icon>
|
||||
演示评审员
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="flex-1 overflow-y-auto p-32 flex gap-24 relative" data-sd-id="8">
|
||||
<div class="flex-1 flex flex-col gap-24" data-sd-id="9">
|
||||
<header class="flex flex-col gap-12" data-sd-id="10">
|
||||
<div class="flex items-center gap-16" data-sd-id="11">
|
||||
<h1 class="text-[28px] font-bold leading-tight" data-sd-id="12">恒远精密设备有限公司</h1>
|
||||
<span class="bg-normal-bg text-normal-text px-12 py-4 rounded-full text-[12px] font-medium border border-normal-text/20" data-sd-id="13">项目 DEMO-026</span>
|
||||
</div>
|
||||
<div class="flex items-center gap-24 text-[16px] text-ink-sub" data-sd-id="14">
|
||||
<span class="flex items-center gap-8" data-sd-id="15"><iconify-icon icon="lucide:briefcase"></iconify-icon>设备直租</span>
|
||||
<span class="flex items-center gap-8" data-sd-id="16"><iconify-icon icon="lucide:coins"></iconify-icon>融资 3,000 万元</span>
|
||||
<span class="flex items-center gap-8" data-sd-id="17"><iconify-icon icon="lucide:calendar"></iconify-icon>36 个月</span>
|
||||
<span class="flex items-center gap-8" data-sd-id="18"><iconify-icon icon="lucide:settings"></iconify-icon>装备制造</span>
|
||||
</div>
|
||||
</header>
|
||||
<section class="bg-card rounded-panel p-32 shadow-card border border-border flex flex-col gap-24" data-sd-id="19">
|
||||
<div class="flex justify-between items-start" data-sd-id="20">
|
||||
<div class="flex flex-col gap-8 w-full max-w-3xl" data-sd-id="21">
|
||||
<div class="probability-cockpit" id="probability-hero">
|
||||
<div class="cockpit-heading"><span>DECISION INTELLIGENCE / 预审透视</span><span class="cockpit-badge">DEMO · 人工演示</span></div>
|
||||
<div class="cockpit-grid"><div class="probability-center"><div class="probability-ring"><svg aria-hidden="true" viewbox="0 0 200 200"><circle class="ring-ticks" cx="100" cy="100" r="87"></circle><circle class="ring-track" cx="100" cy="100" r="73"></circle><circle class="ring-value" cx="100" cy="100" pathlength="100" r="73" stroke-dasharray="42 100"></circle></svg><div class="ring-copy"><strong id="baseline-probability">42%</strong><span>审批通过概率 · 演示值</span></div></div><button class="cockpit-button" id="btn-probability-method">42% 如何得到 <span aria-hidden="true">↗</span></button><p class="cockpit-muted">依据可追溯 · 正式审批由人工决定</p></div>
|
||||
<div class="radar-main"><div class="radar-caption">六维证据雷达 <small>基线 / 阶段 0—4</small></div><div class="radar-chart"><svg aria-label="六维证据核验阶段,详细内容见下方维度按钮" id="radar-baseline" role="group" viewbox="-180 -140 360 280"></svg></div><div class="dimension-list" data-dimension-list="baseline"></div></div></div>
|
||||
<div class="cockpit-foot">证据阶段 ≠ 审批概率 · 雷达面积不换算为 42%<br/><span>0 未提供 · 1 仅有说明 · 2 资料待核 · 3 交叉核验 · 4 人工复核</span></div>
|
||||
</div><div class="trace-strip"><span><b>miniOpenClaw</b> 受控编排</span><span>数据卡 → Skills → Tools → Rules → 主审</span><button class="text-action" id="btn-show-basis">查看判断依据 ↗</button></div>
|
||||
<div class="text-[12px] text-warning-text bg-warning-bg px-12 py-8 rounded-button border border-warning-text/20 inline-flex w-fit items-center gap-6 mb-8">
|
||||
<iconify-icon class="text-[14px]" icon="lucide:info"></iconify-icon> 人工设定,仅演示交互;未经历史数据校准。目标定义:以本次材料版本提交后的首次审批通过。
|
||||
</div>
|
||||
<h2 class="text-[24px] font-bold text-ink-main mt-4" data-sd-id="22" id="real-recommendation">主审意见:补充材料后再判断</h2>
|
||||
<p class="text-[16px] text-ink-sub max-w-2xl leading-relaxed" data-sd-id="23">
|
||||
经营现金流与回款说明存在待核实差异,建议先补齐两项关键证据,再推进评审。
|
||||
</p>
|
||||
</div>
|
||||
<div class="flex gap-16 items-start shrink-0" data-sd-id="24">
|
||||
<button class="h-[44px] px-24 bg-primary text-primary-text rounded-button text-[14px] font-medium transition-colors duration-160 hover:bg-primary-hover flex items-center gap-8 focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:ring-primary" data-sd-id="25" id="btn-generate-list">
|
||||
<iconify-icon icon="lucide:list-checks"></iconify-icon>
|
||||
生成补件清单
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="flex gap-40 pt-24 border-t border-border mt-8" data-sd-id="26">
|
||||
<div class="flex flex-col gap-4" data-sd-id="27">
|
||||
<span class="text-[12px] text-ink-mute uppercase tracking-wider" data-sd-id="28">引用材料</span>
|
||||
<span class="text-[20px] font-medium" data-sd-id="29">6 份</span>
|
||||
</div>
|
||||
<div class="flex flex-col gap-4" data-sd-id="30">
|
||||
<span class="text-[12px] text-ink-mute uppercase tracking-wider" data-sd-id="31">参考经验</span>
|
||||
<span class="text-[20px] font-medium" data-sd-id="32">3 条</span>
|
||||
</div>
|
||||
<div class="flex flex-col gap-4" data-sd-id="33">
|
||||
<span class="text-[12px] text-warning-text uppercase tracking-wider font-medium" data-sd-id="34">待补充项</span>
|
||||
<span class="text-[20px] font-medium text-warning-text" data-sd-id="35">2 项</span>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<section class="flex flex-col gap-24 flex-1" data-sd-id="36">
|
||||
<div aria-label="预审内容" class="flex items-center gap-32 border-b border-border" data-sd-id="37" role="tablist">
|
||||
<button aria-controls="panel-overview" aria-selected="true" class="pb-12 text-[16px] font-medium text-primary border-b-2 border-primary" data-sd-id="38" data-tab="overview" id="tab-overview" role="tab">综合预审</button>
|
||||
<button aria-controls="panel-experience" aria-selected="false" class="pb-12 text-[16px] font-medium text-ink-sub hover:text-ink-main transition-colors duration-160 border-b-2 border-transparent" data-sd-id="39" data-tab="experience" id="tab-experience" role="tab">历史经验</button>
|
||||
<button aria-controls="panel-simulation" aria-selected="false" class="pb-12 text-[16px] font-medium text-ink-sub hover:text-ink-main transition-colors duration-160 border-b-2 border-transparent" data-sd-id="40" data-tab="simulation" id="tab-simulation" role="tab">推进沙盘</button>
|
||||
</div>
|
||||
<div aria-labelledby="tab-overview" class="flex flex-col gap-24" data-sd-id="41" id="panel-overview" role="tabpanel">
|
||||
<div class="bg-panel rounded-panel p-24 border border-border flex flex-col gap-16 min-h-[300px] relative overflow-hidden" data-sd-id="42">
|
||||
<h3 class="text-[14px] font-medium text-ink-main flex items-center gap-8" data-sd-id="43">
|
||||
<iconify-icon icon="lucide:git-merge"></iconify-icon>
|
||||
证据关系图
|
||||
</h3>
|
||||
<div class="absolute inset-0 top-[60px] flex items-center justify-center pointer-events-none opacity-50" data-sd-id="44">
|
||||
<svg data-sd-id="45" height="100%" preserveaspectratio="xMidYMid meet" viewbox="0 0 800 200" width="100%">
|
||||
<path d="M 100 100 L 250 100 L 400 50 L 600 100" fill="none" stroke="#226A7A" stroke-dasharray="4 4" stroke-width="2"></path>
|
||||
<path d="M 250 100 L 400 150 L 600 100" fill="none" stroke="#805418" stroke-width="3"></path>
|
||||
<circle cx="100" cy="100" fill="#17634C" r="6"></circle>
|
||||
<circle cx="250" cy="100" fill="#17634C" r="6"></circle>
|
||||
<circle cx="400" cy="50" fill="#226A7A" r="6"></circle>
|
||||
<circle cx="400" cy="150" fill="#805418" r="6"></circle>
|
||||
<circle cx="600" cy="100" fill="#182D26" r="8"></circle>
|
||||
</svg>
|
||||
</div>
|
||||
<div class="flex-1 flex items-center justify-between px-48 z-10" data-sd-id="46">
|
||||
<button class="bg-card border border-border px-16 py-12 rounded-panel shadow-sm hover:border-primary transition-colors text-[14px] text-ink-main flex flex-col gap-4 focus-visible:ring-2 focus-visible:ring-primary outline-none" data-sd-id="47" id="node-1">
|
||||
<span class="font-medium" data-sd-id="48">回款说明</span>
|
||||
<span class="text-[12px] text-ink-mute" data-sd-id="49">已提供</span>
|
||||
</button>
|
||||
<button class="bg-card border border-border px-16 py-12 rounded-panel shadow-sm hover:border-primary transition-colors text-[14px] text-ink-main flex flex-col gap-4 focus-visible:ring-2 focus-visible:ring-primary outline-none" data-sd-id="50" id="node-2">
|
||||
<span class="font-medium" data-sd-id="51">账期变化解释</span>
|
||||
<span class="text-[12px] text-ink-mute" data-sd-id="52">待核实</span>
|
||||
</button>
|
||||
<div class="flex flex-col gap-40" data-sd-id="53">
|
||||
<button class="bg-tech-bg border border-tech-line px-16 py-12 rounded-panel shadow-sm hover:bg-tech-bg/80 transition-colors text-[14px] text-ink-main flex flex-col gap-4 focus-visible:ring-2 focus-visible:ring-tech-line outline-none" data-sd-id="54" id="node-3">
|
||||
<span class="font-medium" data-sd-id="55">专项支持</span>
|
||||
<span class="text-[12px] text-tech-line" data-sd-id="56">不足</span>
|
||||
</button>
|
||||
<button class="bg-warning-bg border border-warning-text/30 px-16 py-12 rounded-panel shadow-sm hover:bg-warning-bg/80 transition-colors text-[14px] text-ink-main flex flex-col gap-4 focus-visible:ring-2 focus-visible:ring-warning-text outline-none" data-sd-id="57" id="node-4">
|
||||
<span class="font-medium" data-sd-id="58">银行流水匹配</span>
|
||||
<span class="text-[12px] text-warning-text font-medium" data-sd-id="59">待补充</span>
|
||||
</button>
|
||||
</div>
|
||||
<div class="bg-card border-2 border-ink-main px-24 py-16 rounded-panel shadow-sm text-[16px] font-bold text-ink-main" data-sd-id="60">
|
||||
主审补件建议
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="flex flex-col gap-16" data-sd-id="61">
|
||||
<h3 class="text-[20px] font-bold text-ink-main" data-sd-id="62">关键问题核实</h3>
|
||||
<div class="bg-card rounded-panel border border-border overflow-hidden" data-sd-id="63">
|
||||
<div class="p-20 border-b border-border hover:bg-panel transition-colors flex items-start gap-16" data-sd-id="64">
|
||||
<div class="mt-4 w-8 h-8 rounded-full bg-warning-text shrink-0" data-sd-id="65"></div>
|
||||
<div class="flex-1 flex flex-col gap-8" data-sd-id="66">
|
||||
<div class="flex justify-between items-center" data-sd-id="67">
|
||||
<h4 class="text-[16px] font-medium text-ink-main" data-sd-id="68">回款依据尚不完整</h4>
|
||||
<span class="text-[12px] text-warning-text bg-warning-bg px-8 py-2 rounded-full border border-warning-text/20" data-sd-id="69">待核实</span>
|
||||
</div>
|
||||
<p class="text-[14px] text-ink-sub leading-relaxed" data-sd-id="70">主要客户账期延长,需通过近六个月银行流水穿透核实实际回款情况,当前证据链断裂。</p>
|
||||
<div class="flex gap-12 mt-8" data-sd-id="71">
|
||||
<button class="text-[12px] text-primary hover:text-primary-hover font-medium flex items-center gap-4" data-sd-id="72" id="btn-open-drawer-1">
|
||||
<iconify-icon icon="lucide:file-text"></iconify-icon> 查看原文与依据
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="p-20 hover:bg-panel transition-colors flex items-start gap-16" data-sd-id="73">
|
||||
<div class="mt-4 w-8 h-8 rounded-full bg-warning-text shrink-0" data-sd-id="74"></div>
|
||||
<div class="flex-1 flex flex-col gap-8" data-sd-id="75">
|
||||
<div class="flex justify-between items-center" data-sd-id="76">
|
||||
<h4 class="text-[16px] font-medium text-ink-main" data-sd-id="77">设备权属证明待核实</h4>
|
||||
<span class="text-[12px] text-warning-text bg-warning-bg px-8 py-2 rounded-full border border-warning-text/20" data-sd-id="78">待核实</span>
|
||||
</div>
|
||||
<p class="text-[14px] text-ink-sub leading-relaxed" data-sd-id="79">拟租赁设备发票与实际采购清单存在部分品名不符,需核实底层资产真实权属。</p>
|
||||
<div class="flex gap-12 mt-8" data-sd-id="80">
|
||||
<button class="text-[12px] text-primary hover:text-primary-hover font-medium flex items-center gap-4" data-sd-id="81">
|
||||
<iconify-icon icon="lucide:history"></iconify-icon> 查看历史依据
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<section aria-labelledby="tab-experience" class="proto-panel" hidden="" id="panel-experience" role="tabpanel">
|
||||
<div class="section-eyebrow">EXPERIENCE / 历史示例</div><h2>一条经验,如何改变判断</h2>
|
||||
<p class="muted">案例 H-018 · 制造业设备直租 · 虚构演示案例</p>
|
||||
<ol class="experience-timeline">
|
||||
<li><span class="step-num">01</span><div><small>初审关注</small><h3>利润增长,经营现金流偏弱</h3><p>最初意见:暂不能确认还款来源,要求说明回款变化。</p></div></li>
|
||||
<li><span class="step-num">02</span><div><small>评审问询</small><h3>账期延长,还是回款能力下降?</h3><p>要求提供客户合同、应收账龄与逐笔回款记录,验证解释。</p></div></li>
|
||||
<li><span class="step-num">03</span><div><small>证据补充</small><h3>银行流水与应收明细逐笔匹配</h3><p>历史示例中,补充材料支持主要客户正常结算周期变化。</p><button class="text-action" data-open-evidence="history">查看历史证据示例 ↗</button></div></li>
|
||||
<li><span class="step-num">04</span><div><small>判断变化</small><h3>待核实 → 附条件推进(历史示例)</h3><p>约定持续跟踪回款。此历史意见不能直接用于当前项目。</p></div></li>
|
||||
</ol>
|
||||
<div class="condition-grid"><div><strong>适用条件</strong><p>客户结构稳定,回款与应收记录可逐笔匹配。</p></div><div><strong>例外边界</strong><p>收入集中、关联回款未穿透或材料真实性未核实。</p></div></div>
|
||||
<div class="notice">条件相似不等于结论相同。当前项目仍缺银行流水与权属核验。</div>
|
||||
</section>
|
||||
<section aria-labelledby="tab-simulation" class="proto-panel" hidden="" id="panel-simulation" role="tabpanel">
|
||||
<div class="section-eyebrow">SCENARIO / 证据成熟度推演</div>
|
||||
<h2>补齐证据之后,审批概率如何变化?</h2>
|
||||
<div class="notice">模拟结果,不改变真实项目。仅假设证据真实且核验支持解释;补件也可能发现新风险,实际概率未必上升。</div>
|
||||
<div class="flex flex-col lg:flex-row gap-24 mt-24 mb-24">
|
||||
<div class="flex-1 flex flex-col gap-12">
|
||||
<p class="muted mb-8">选择假设补充核验的材料,观察证据六边形扩张与概率变化:</p>
|
||||
<label class="scenario-choice"><input id="assume-bank" type="checkbox"/> <span><strong>假设银行流水逐笔匹配</strong><small>假设核验支持账期变化解释;只改变回款核验维度</small></span></label>
|
||||
<label class="scenario-choice"><input id="assume-title" type="checkbox"/> <span><strong>假设设备权属证明一致</strong><small>假设合同、发票与设备清单核验一致;只改变权属维度</small></span></label>
|
||||
</div>
|
||||
<div class="scenario-radar-card"><div aria-live="polite" class="scenario-probabilities"><div><small>当前基线 · 演示值</small><strong>42%</strong></div><div><small>所选情景 · 演示值</small><strong id="sim-prob-val">42%</strong><span id="sim-prob-delta">+0 百分点</span></div></div><div class="scenario-meter"><div id="sim-prob-bar" style="width:42%"></div></div><div class="radar-legend"><span>┄┄ 基线</span><span>━━ 所选假设</span></div><div class="radar-chart"><svg aria-label="六维证据核验阶段,详细内容见下方维度按钮" id="radar-scenario" role="group" viewbox="-180 -140 360 280"></svg></div><div class="dimension-list" data-dimension-list="scenario"></div><p class="radar-help">证据阶段 ≠ 审批概率;0 未提供 · 1 仅有说明 · 2 资料待核 · 3 交叉核验 · 4 人工复核</p><p class="radar-help">人工设定,仅演示交互;未经历史数据校准</p><button class="text-action" id="btn-scenario-method">所选情景概率如何得到 ↗</button></div>
|
||||
</div>
|
||||
<button class="primary-button" id="run-simulation">查看模拟判断依据</button>
|
||||
<p aria-live="polite" class="muted mt-12" id="simulation-feedback">概率、原因与待核实事项随勾选即时更新。</p>
|
||||
<div aria-live="polite" class="condition-grid mt-16" id="simulation-comparison">
|
||||
<div><small>真实预审 · 保持不变</small><h3>2 项待核实</h3><p>补充材料后再判断</p></div>
|
||||
<div><small>模拟情景 · 假设成立时</small><h3 id="sim-remaining"></h3><p id="sim-explanation"></p><strong>仍需人工复核</strong></div>
|
||||
</div>
|
||||
<button class="text-action mt-24 block" data-tab="overview">← 返回真实预审</button>
|
||||
</section>
|
||||
</section>
|
||||
</div>
|
||||
<aside class="w-[320px] shrink-0 flex flex-col gap-24" data-sd-id="82">
|
||||
<div class="bg-card rounded-panel p-24 border border-border shadow-card flex flex-col gap-16" data-sd-id="83">
|
||||
<h3 class="text-[16px] font-bold text-ink-main flex items-center gap-8" data-sd-id="84">
|
||||
<iconify-icon icon="lucide:arrow-right-circle"></iconify-icon>
|
||||
下一步行动
|
||||
</h3>
|
||||
<div class="flex flex-col gap-12" data-sd-id="85">
|
||||
<label class="flex items-start gap-12 p-12 bg-panel rounded-button border border-border cursor-pointer hover:border-primary transition-colors" data-sd-id="86">
|
||||
<span class="text-primary text-[14px] font-bold shrink-0">1</span>
|
||||
<div class="flex flex-col gap-4" data-sd-id="88">
|
||||
<span class="text-[14px] font-medium text-ink-main" data-sd-id="89">补充近六个月银行流水</span>
|
||||
<span class="text-[12px] text-ink-mute" data-sd-id="90">用于核实账期延长后的实际回款节奏</span>
|
||||
</div>
|
||||
</label>
|
||||
<label class="flex items-start gap-12 p-12 bg-panel rounded-button border border-border cursor-pointer hover:border-primary transition-colors" data-sd-id="91">
|
||||
<span class="text-primary text-[14px] font-bold shrink-0">2</span>
|
||||
<div class="flex flex-col gap-4" data-sd-id="93">
|
||||
<span class="text-[14px] font-medium text-ink-main" data-sd-id="94">核实设备权属</span>
|
||||
<span class="text-[12px] text-ink-mute" data-sd-id="95">提供品名不符的补充说明及采购合同附件</span>
|
||||
</div>
|
||||
</label>
|
||||
</div>
|
||||
<button class="w-full h-[44px] mt-8 bg-card border border-primary text-primary rounded-button text-[14px] font-medium transition-colors duration-160 hover:bg-primary/5 flex items-center justify-center gap-8 focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:ring-primary" data-sd-id="96">
|
||||
<iconify-icon icon="lucide:play"></iconify-icon>
|
||||
模拟补件 (沙盘)
|
||||
</button>
|
||||
</div>
|
||||
<div class="bg-panel rounded-panel p-24 border border-border flex flex-col gap-16" data-sd-id="97">
|
||||
<div class="flex justify-between items-center" data-sd-id="98">
|
||||
<h3 class="text-[14px] font-medium text-ink-main" data-sd-id="99">专项核查模型</h3>
|
||||
<button class="text-ink-mute hover:text-primary transition-colors" data-sd-id="100" title="验证看板">
|
||||
<iconify-icon icon="lucide:bar-chart-2"></iconify-icon>
|
||||
</button>
|
||||
</div>
|
||||
<div class="flex flex-col gap-8" data-sd-id="101">
|
||||
<label class="flex justify-between items-center p-8 -mx-8 rounded-button hover:bg-black/5 cursor-pointer" data-sd-id="102">
|
||||
<span class="text-[14px] text-ink-main" data-sd-id="103">本地开源模型 (演示)</span>
|
||||
<input aria-label="本地开源模型(演示)" checked="" class="text-primary focus:ring-primary" data-sd-id="104" name="model" type="radio" value="local"/>
|
||||
</label>
|
||||
<label class="flex justify-between items-center p-8 -mx-8 rounded-button hover:bg-black/5 cursor-pointer opacity-50" data-sd-id="105" title="未配置官方服务">
|
||||
<span class="text-[14px] text-ink-main" data-sd-id="106">Jev官方服务(未配置)</span>
|
||||
<input aria-label="Jev官方服务(未配置)" class="text-primary focus:ring-primary" data-sd-id="107" disabled="" name="model" type="radio" value="jev"/>
|
||||
</label>
|
||||
<label class="flex justify-between items-center p-8 -mx-8 rounded-button hover:bg-black/5 cursor-pointer" data-sd-id="108">
|
||||
<span class="text-[14px] text-ink-main" data-sd-id="109">关闭专项核查</span>
|
||||
<input aria-label="关闭专项核查" class="text-primary focus:ring-primary" data-sd-id="110" name="model" type="radio" value="off"/>
|
||||
</label>
|
||||
</div>
|
||||
<p aria-live="polite" class="text-[12px] text-ink-mute mt-4 border-t border-border pt-12" data-sd-id="111" id="model-status">
|
||||
仅演示。无真实模型请求。主审仍可基于证据给出有限意见。
|
||||
</p>
|
||||
</div>
|
||||
</aside>
|
||||
</div>
|
||||
</main>
|
||||
<dialog aria-labelledby="evidence-title" class="evidence-dialog" id="evidence-dialog">
|
||||
<header class="dialog-header"><div><div class="section-eyebrow">EVIDENCE / 演示材料</div><h2 id="evidence-title">回款说明与判断依据</h2></div><button aria-label="关闭证据抽屉" class="close-button" data-close="evidence-dialog">×</button></header>
|
||||
<div aria-label="证据视图" class="drawer-tabs" role="tablist"><button aria-controls="evidence-source" aria-selected="true" data-evidence-tab="source" id="evidence-source-tab" role="tab">原文片段</button><button aria-controls="evidence-basis" aria-selected="false" data-evidence-tab="basis" id="evidence-basis-tab" role="tab">判断依据</button></div>
|
||||
<section aria-labelledby="evidence-source-tab" id="evidence-source" role="tabpanel"><p class="muted" id="source-location">回款说明.pdf · 第3页 · 虚构演示</p><blockquote id="source-quote">主要客户账期延长,预计下一季度集中回款。</blockquote><div class="notice" id="source-gap">尚未提供对应银行流水,不能仅凭解释确认回款。</div><p class="muted">来源可定位不代表材料真实性已经核验。</p></section>
|
||||
<section aria-labelledby="evidence-basis-tab" hidden="" id="evidence-basis" role="tabpanel"><h3>从解释到判断,仍缺一环</h3><p id="basis-copy">现有说明提出了账期变化的解释,但需要银行流水与应收账龄交叉核验。专项判断不能替代主审综合意见。</p><h3>建议下一步</h3><p id="basis-next">补充近六个月银行流水,逐笔匹配主要客户回款。</p></section>
|
||||
</dialog>
|
||||
<dialog aria-labelledby="basis-title" class="evidence-dialog" id="basis-dialog">
|
||||
<header class="dialog-header">
|
||||
<div>
|
||||
<div class="section-eyebrow">BASIS / 判断依据</div>
|
||||
<h2 id="basis-title">为什么是这个判断</h2>
|
||||
</div>
|
||||
<button aria-label="关闭依据抽屉" class="close-button" data-close="basis-dialog">×</button>
|
||||
</header>
|
||||
<div class="p-24 overflow-y-auto" style="height:calc(100vh - 90px)">
|
||||
<div class="notice mb-24">当前基线 42% 来自人工设定的原型情景表,非模型计算、非历史统计。以下展示未来的追溯结构,不构成数字的计算来源。</div>
|
||||
<div class="flex flex-col gap-24">
|
||||
<div>
|
||||
<h3 class="text-[16px] font-bold text-ink-main mb-12 flex items-center gap-8"><iconify-icon icon="lucide:database"></iconify-icon> 1. 状态与数据卡</h3>
|
||||
<ul class="checklist">
|
||||
<li><strong>现金流 / 回款</strong> <span class="text-ink-mute text-[12px]">DC-CASH · v1.2(演示)</span><p>发现待核实差异,无法确认对应关系。</p></li>
|
||||
<li><strong>设备权属</strong> <span class="text-ink-mute text-[12px]">DC-TITLE · v1.0(演示)</span><p>品名存在部分不符,底层资产真实权属待确认。</p></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div>
|
||||
<h3 class="text-[16px] font-bold text-ink-main mb-12 flex items-center gap-8"><iconify-icon icon="lucide:cpu"></iconify-icon> 2. 技能与规则 (Skill Trace)</h3>
|
||||
<ul class="checklist">
|
||||
<li><strong>回款交叉核验</strong> <span class="text-ink-mute text-[12px]">SKILL-04 · v1.0(演示)</span><p>状态:待核实。缺少对应时间段银行流水,不能判定核验通过或不通过。</p></li>
|
||||
<li><strong>权属一致性比 timelines</strong> <span class="text-ink-mute text-[12px]">SKILL-09 · v1.0(演示)</span><p>发现发票与清单异常。</p></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div>
|
||||
<h3 class="text-[16px] font-bold text-ink-main mb-12 flex items-center gap-8"><iconify-icon icon="lucide:history"></iconify-icon> 3. 历史经验参考</h3>
|
||||
<div class="bg-panel p-16 rounded-panel border border-border">
|
||||
<div class="font-medium text-[14px] text-ink-main mb-8">案例 H-018 适用与例外</div>
|
||||
<p class="text-[13px] text-ink-sub leading-relaxed mb-8">适用条件:客户结构稳定且回款可逐笔匹配。<br/>例外:收入集中或关联回款未穿透。</p>
|
||||
<div class="text-[13px] text-warning-text bg-warning-bg p-8 rounded-button border border-warning-text/20">当前项目:尚未满足逐笔匹配证据条件,无法直接应用条件推进。</div>
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<h3 class="text-[16px] font-bold text-ink-main mb-12 flex items-center gap-8"><iconify-icon icon="lucide:shield-alert"></iconify-icon> 4. 硬性规则核查</h3>
|
||||
<p class="text-[14px] text-ink-sub">RULE-01 · v1.0(演示):权属证据不足,规则状态待核实。尚未确认阻断,不代表红线核查已经通过。</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</dialog>
|
||||
<dialog aria-labelledby="dimension-title" class="evidence-dialog" id="dimension-dialog"><header class="dialog-header"><div><div class="section-eyebrow">TRACE / miniOpenClaw</div><h2 id="dimension-title"></h2></div><button aria-label="关闭维度依据" class="close-button" data-close="dimension-dialog">×</button></header><div id="dimension-trace"></div></dialog><dialog aria-labelledby="method-title" class="center-dialog" id="probability-method-dialog"><header class="dialog-header"><div><div class="section-eyebrow">PROBABILITY / 结果出处</div><h2 id="method-title">这次概率如何得到</h2></div><button aria-label="关闭概率出处" class="close-button" data-close="probability-method-dialog">×</button></header><div aria-live="polite" class="notice" id="method-result"></div><p>当前依据:人工情景表 <strong>DEMO-TABLE-v1</strong>。没有模型计算、真实样本统计或校准结果;六维雷达不能求和、平均或按面积换算成概率。</p><table class="method-table"><caption>选择键:流水假设 / 权属假设;数字为人工演示值</caption><thead><tr><th>键</th><th>假设组合</th><th>演示输出</th></tr></thead><tbody><tr id="method-row-00"><td>00</td><td>两项均未选择</td><td>42%</td></tr><tr id="method-row-10"><td>10</td><td>流水核验支持解释</td><td>58%</td></tr><tr id="method-row-01"><td>01</td><td>权属核验一致</td><td>51%</td></tr><tr id="method-row-11"><td>11</td><td>两项假设均成立</td><td>64%</td></tr></tbody></table><h3 class="method-subheading">真实版如何计算 · 后续规划</h3><ol class="trace-chain"><li><b>01 数据卡 → Skills / 授权 Tools</b><p>读取冻结事实与核验记录,保留来源和方法版本。</p></li><li><b>02 特征构建 → 概率估计 → 历史校准</b><p>在明确审批口径、样本范围和制度版本后训练与验证。模型、样本、校准:当前均未接入。</p></li><li><b>03 Rules / 有效性检查 → 主审解释</b><p>缺证标待核实;硬性阻断不能被高概率抵消。未校准的真实概率保持空值。</p></li><li><b>04 miniOpenClaw 保留轨迹 → 人工审批</b><p>主审解释综合结论;Jev/local只承担可选专项判断,不能用其置信度替代审批概率。</p></li></ol></dialog>
|
||||
<dialog aria-labelledby="checklist-title" class="center-dialog" id="checklist-dialog">
|
||||
<header class="dialog-header"><div><div class="section-eyebrow">NEXT ACTION / 演示清单</div><h2 id="checklist-title">项目补件清单</h2></div><button aria-label="关闭补件清单" class="close-button" data-close="checklist-dialog">×</button></header>
|
||||
<ol class="checklist">
|
||||
<li><strong>近六个月银行流水与应收账龄</strong><p>标注主要客户逐笔回款,说明与合同账期的对应关系。</p></li>
|
||||
<li><strong>设备权属材料</strong><p>提供采购合同、发票和设备清单,并解释品名差异。</p></li>
|
||||
</ol>
|
||||
<div class="notice">DEMO-026 · 虚构演示,未发送至任何业务系统。</div>
|
||||
<button class="primary-button" id="copy-checklist">复制清单</button>
|
||||
<p aria-live="polite" id="copy-status"></p>
|
||||
</dialog>
|
||||
<dialog aria-labelledby="validation-title" class="center-dialog" id="validation-dialog">
|
||||
<header class="dialog-header"><div><div class="section-eyebrow">VALIDATION / 验证计划</div><h2 id="validation-title">待开展脱敏盲测</h2></div><button aria-label="关闭验证计划" class="close-button" data-close="validation-dialog">×</button></header>
|
||||
<p>先冻结样本和预测,再揭示专家参考意见。当前没有真实验证结果。</p>
|
||||
<ol class="checklist">
|
||||
<li>基础预审:不使用历史经验</li>
|
||||
<li>经验增强:主审结合已审核经验</li>
|
||||
<li>专项增强:分别验证本地模型与 Jev(可选)</li>
|
||||
</ol>
|
||||
<div class="notice">关注重大问题漏检、无依据结论、有效补件与耗时。阈值在试点前约定。</div>
|
||||
</dialog>
|
||||
<script>
|
||||
(()=>{
|
||||
const $=s=>document.querySelector(s),all=s=>[...document.querySelectorAll(s)],sd=n=>$('[data-sd-id="'+n+'"]');
|
||||
let active='overview'; const openers=new WeakMap();
|
||||
function showDialog(id){const d=$('#'+id);openers.set(d,document.activeElement);d.showModal();d.querySelector('button').focus();}
|
||||
all('dialog').forEach(d=>{d.addEventListener('close',()=>openers.get(d)?.focus());d.addEventListener('click',e=>{if(e.target===d){const b=d.getBoundingClientRect();if(e.clientX<b.left||e.clientX>b.right||e.clientY<b.top||e.clientY>b.bottom)d.close();}})});
|
||||
all('[data-close]').forEach(b=>b.onclick=()=>$('#'+b.dataset.close).close());
|
||||
function tab(name){if(name==='validation'){showDialog('validation-dialog');return;}if(!['overview','experience','simulation'].includes(name))return;active=name;all('[role=tabpanel][id^="panel-"]').forEach(p=>p.hidden=p.id!=='panel-'+name);all('[role=tab][data-tab]').forEach(b=>{const selected=b.dataset.tab===name;b.setAttribute('aria-selected',selected);b.tabIndex=selected?0:-1;b.classList.toggle('text-primary',selected);b.classList.toggle('border-primary',selected);b.classList.toggle('border-transparent',!selected)});all('[data-nav]').forEach(a=>a.classList.toggle('is-active',a.dataset.nav===name));$('#prototype-navigation').classList.remove('mobile-open');$('#mobile-menu').setAttribute('aria-expanded','false');}
|
||||
all('[data-tab]').forEach(b=>b.onclick=()=>tab(b.dataset.tab));all('[data-nav]').forEach(a=>a.onclick=e=>{e.preventDefault();tab(a.dataset.nav)});
|
||||
all('[role=tab][data-tab]').forEach((b,i)=>b.addEventListener('keydown',e=>{if(!['ArrowLeft','ArrowRight','Home','End'].includes(e.key))return;e.preventDefault();const tabs=all('[role=tab][data-tab]');const j=e.key==='Home'?0:e.key==='End'?2:(i+(e.key==='ArrowRight'?1:2))%3;tabs[j].click();tabs[j].focus()}));
|
||||
$('#mobile-menu').onclick=()=>{const on=$('#prototype-navigation').classList.toggle('mobile-open');$('#mobile-menu').setAttribute('aria-expanded',on)};
|
||||
function evidence(kind='current'){const history=kind==='history';$('#evidence-title').textContent=history?'历史回款证据示例':'回款说明与判断依据';$('#source-location').textContent=history?'历史案例 H-018 · 补件记录 · 虚构演示':'回款说明.pdf · 第3页 · 虚构演示';$('#source-quote').textContent=history?'历史示例中,主要客户实际回款与应收明细逐笔匹配。':'主要客户账期延长,预计下一季度集中回款。';$('#source-gap').textContent=history?'仅为说明经验形成过程的虚构材料,不能替代当前项目核查。':'尚未提供对应银行流水,不能仅凭解释确认回款。';$('#basis-copy').textContent=history?'历史案例补充证据支持当时的解释,适用前提是客户结构稳定且回款可逐笔匹配。当前项目尚未满足同样的证据条件。':'现有说明提出了账期变化的解释,但需要银行流水与应收账龄交叉核验。专项判断不能替代主审综合意见。';$('#evidence-source-tab').click();showDialog('evidence-dialog');}
|
||||
['node-1','node-2','node-3','node-4','btn-open-drawer-1'].forEach(id=>$('#'+id).onclick=()=>evidence());all('[data-open-evidence]').forEach(b=>b.onclick=()=>evidence(b.dataset.openEvidence));
|
||||
all('[data-evidence-tab]').forEach(b=>b.onclick=()=>{all('[data-evidence-tab]').forEach(x=>x.setAttribute('aria-selected',x===b));$('#evidence-source').hidden=b.dataset.evidenceTab!=='source';$('#evidence-basis').hidden=b.dataset.evidenceTab!=='basis'});
|
||||
|
||||
$('#btn-generate-list').onclick=()=>showDialog('checklist-dialog');sd(81).onclick=()=>tab('experience');sd(96).onclick=()=>{tab('simulation');$('#assume-bank').focus()};sd(100).onclick=()=>showDialog('validation-dialog');
|
||||
$('#btn-show-basis').onclick=()=>showDialog('basis-dialog');
|
||||
|
||||
all('input[name=model]').forEach(r=>r.onchange=()=>{const off=r.value==='off';$('#model-status').textContent=off?'专项核查已关闭。主审仍可基于证据与经验给出有限意见。':'本地开源模型(演示)。无真实模型请求;主审负责综合预审意见。';sd(56).textContent=off?'未执行':'不足';sd(55).textContent=off?'专项核查':'专项支持'});
|
||||
|
||||
const dimensionNames=['回款核验','财务勾稽','权属核验','交易要素','经验适配','规则覆盖'];
|
||||
const baseStages=[1,2,1,2,2,1],stageNames=['未提供','仅有说明','资料待核','交叉核验','人工复核'];
|
||||
const dimensionTraces=[
|
||||
{card:'DC-CASH v1.2',skill:'SKILL-04 v1.0 · 回款交叉核验',tools:'read_project_snapshot / read_document / read_method / read_checks',input:'回款说明.pdf第3页与应收明细;近六个月银行流水缺失。',output:'账期变化仍只有说明,无法逐笔比对。',rule:'RULE-CASH v1.0 · 待核实,不能把解释当成已收回资金。',experience:'H-018:客户结构稳定且能逐笔匹配时参考;关联回款未穿透时不适用。'},
|
||||
{card:'DC-FIN v1.0',skill:'SKILL-FIN v1.0 · 财务口径核对',tools:'read_project_snapshot / read_document / read_method / read_checks',input:'演示报表与财务说明;原始凭证和口径待复核。',output:'仅说明资料待核,未完成收入、利润、现金流勾稽。',rule:'RULE-FIN v1.0 · 期间和口径未确认时不得直接比较或加分。',experience:'经验只在期间、口径、行业适用条件一致时参考,不能套用阈值。'},
|
||||
{card:'DC-TITLE v1.0',skill:'SKILL-09 v1.0 · 权属一致性',tools:'read_project_snapshot / read_document / read_method / read_checks',input:'设备清单与发票品名差异;采购合同附件待补。',output:'只有差异说明,真实权属尚待核验。',rule:'RULE-01 v1.0 · 待核实,尚未确认阻断不代表红线核查通过。',experience:'参考核验步骤而非套用审批结论;权属链不完整时不适用通过意见。'},
|
||||
{card:'DC-DEAL v1.0',skill:'SKILL-DEAL v1.0 · 交易要素核对',tools:'read_project_snapshot / read_method / read_checks',input:'演示融资3,000万元、36个月、设备直租。',output:'要素已列示,未核对合同条件和租金安排。',rule:'RULE-DEAL v1.0 · 条款和还款安排待复核,列示不等于有效。',experience:'交易类型与期限匹配只是筛选条件,不是审批依据。'},
|
||||
{card:'DC-EXP v1.0',skill:'SKILL-EXP v1.0 · 经验适用性核查',tools:'read_project_snapshot / read_method / read_experiences',input:'虚构经验H-018及适用条件与例外。',output:'已展示候选经验;当前缺少逐笔匹配证据,不能直接套用。',rule:'RULE-EXP v1.0 · 真实经验须审核、发布并冻结版本;本条仅演示。',experience:'客户结构稳定、逐笔回款匹配;收入集中或关联回款未穿透属于例外。'},
|
||||
{card:'DC-RULE v1.0',skill:'SKILL-RULE v1.0 · 规则结果汇总',tools:'read_project_snapshot / read_method / read_checks',input:'演示规则清单与缺证状态,真实制度尚未接入。',output:'仍有待核实规则,未形成规则全部通过的判断。',rule:'RULE-GATE v1.0 · 未知不能当通过;确认硬阻断时独立提示,不能被高分抵消。',experience:'历史案例不能豁免当前有效规则;制度版本变化需重新确认适用。'}
|
||||
];
|
||||
function scenarioKey(){return Number($('#assume-bank').checked)+''+Number($('#assume-title').checked)}
|
||||
function points(stages){return stages.map((v,i)=>{const a=i*Math.PI/3;return ((v/4)*90*Math.sin(a)).toFixed(2)+','+(-(v/4)*90*Math.cos(a)).toFixed(2)}).join(' ')}
|
||||
function selectedStages(){const v=[...baseStages];if($('#assume-bank').checked)v[0]=3;if($('#assume-title').checked)v[2]=3;return v}
|
||||
function buildRadar(context){
|
||||
const svg=$('#radar-'+(context==='baseline'?'baseline':'scenario'));
|
||||
let html='';
|
||||
for(let n=1;n<=4;n++)html+='<polygon class="grid-line" points="'+points(Array(6).fill(n))+'"/><text class="stage-label" x="5" y="'+(-n*22.5+3)+'">'+n+'</text>';
|
||||
const labelPositions=[[0,-111,'middle'],[96,-49,'start'],[96,58,'start'],[0,117,'middle'],[-96,58,'end'],[-96,-49,'end']];
|
||||
dimensionNames.forEach((name,i)=>{const a=i*Math.PI/3;html+='<line class="grid-line" x1="0" y1="0" x2="'+90*Math.sin(a)+'" y2="'+(-90*Math.cos(a))+'"/>'});
|
||||
html+='<polygon data-series="baseline" points="'+points(baseStages)+'"/>';
|
||||
if(context==='scenario')html+='<polygon data-series="scenario" points="'+points(baseStages)+'"/>';
|
||||
dimensionNames.forEach((name,i)=>{const [x,y,anchor]=labelPositions[i];html+='<text class="dimension-label" data-dimension="'+i+'" data-context="'+context+'" role="button" tabindex="0" aria-label="查看'+name+'依据" x="'+x+'" y="'+y+'" text-anchor="'+anchor+'">'+name+'</text>'});
|
||||
svg.innerHTML=html;
|
||||
$('[data-dimension-list="'+context+'"]').innerHTML=dimensionNames.map((name,i)=>'<button data-dimension="'+i+'" data-context="'+context+'"><b>'+name+'</b><span data-stage-label="'+i+'">'+baseStages[i]+' · '+stageNames[baseStages[i]]+'</span></button>').join('');
|
||||
}
|
||||
function updateRadar(){const stages=selectedStages();$('#radar-scenario [data-series="scenario"]').setAttribute('points',points(stages));all('[data-dimension-list="scenario"] [data-stage-label]').forEach(el=>{const i=Number(el.dataset.stageLabel),v=stages[i];el.textContent=v+' · '+(v!==baseStages[i]?'假设已核验':stageNames[v]);});}
|
||||
function openDimension(i,context){const d=dimensionTraces[i],assumed=context==='scenario'&&selectedStages()[i]!==baseStages[i];$('#dimension-title').textContent=dimensionNames[i]+' · '+(context==='scenario'?'情景依据':'当前依据');$('#dimension-trace').innerHTML='<div class="notice">虚构演示链,未执行真实工具调用。'+(assumed?'本情景假设该维度交叉核验成立;原项目仍待核实。':'当前材料仍须核验,不能仅凭阶段推出概率。')+'</div><div class="trace-chip">miniOpenClaw · 受控编排示意 / 组件版本为示例</div><ol class="trace-chain"><li><b>01 数据卡 · '+d.card+'</b><p>'+d.input+'</p></li><li><b>02 Skill · '+d.skill+'</b><p>组织专业方法;只使用授权的数据域与工具。</p></li><li><b>03 Tools · 允许的只读能力</b><p>'+d.tools+'</p><p>读取上下文、方法或核验记录,不代表读取工具已完成业务认证。</p></li><li><b>04 核查输出 · '+(assumed?'假设状态':'当前示例')+'</b><p>'+(assumed?'假设补充材料真实,交叉核验支持解释;实际调用尚未发生。':d.output)+'</p></li><li><b>05 Rules · 不可被模型分数覆盖</b><p>'+d.rule+'</p></li><li><b>06 历史经验 · 适用与例外</b><p>'+d.experience+'</p></li></ol><div class="notice">该链解释专业判断的方法与边界,不是42%的数学计算。Jev/local为可选专项判断;概率服务与校准仍待建设。</div>';showDialog('dimension-dialog');}
|
||||
function openMethod(context){const key=context==='baseline'?'00':scenarioKey(),value=demoScenarios[key].demoProbability;$('#method-result').textContent=(context==='baseline'?'当前基线':'所选假设情景')+' → 命中 '+key+' 条目 → '+value+'%(人工演示值)';all('[id^="method-row-"]').forEach(row=>row.setAttribute('aria-selected',row.id==='method-row-'+key));showDialog('probability-method-dialog');}
|
||||
buildRadar('baseline');buildRadar('scenario');
|
||||
all('[data-dimension][data-context]').forEach(el=>{el.onclick=()=>openDimension(Number(el.dataset.dimension),el.dataset.context);if(el.tagName.toLowerCase()==='text')el.onkeydown=e=>{if(e.key==='Enter'||e.key===' '){e.preventDefault();el.onclick()}}});
|
||||
$('#btn-probability-method').onclick=()=>openMethod('baseline');$('#btn-scenario-method').onclick=()=>openMethod('scenario');
|
||||
|
||||
// Artificial prototype lookup only: never writes a production probability.
|
||||
const demoScenarios = {
|
||||
'00': {demoProbability:42, remaining:'2 项仍待核实(模拟)', reason:'未选择假设。回款与设备权属证据仍有缺口,保持演示基线。'},
|
||||
'10': {demoProbability:58, remaining:'设备权属仍待核实(模拟)', reason:'假设银行流水逐笔核验后支持账期变化解释,回款不确定性减小;设备权属缺口仍在。演示变化 +16 个百分点。'},
|
||||
'01': {demoProbability:51, remaining:'实际回款仍待核实(模拟)', reason:'假设合同、发票与清单一致且经核验,权属争议得到回应;实际回款仍缺银行流水。演示变化 +9 个百分点。'},
|
||||
'11': {demoProbability:64, remaining:'两项证据缺口在假设下得到回应', reason:'假设回款与权属核验均支持项目解释。组合情景为 64%,变化 +22 个百分点;组合影响不简单相加,仍需综合复核其他风险。'}
|
||||
};
|
||||
function updateSimulation(){
|
||||
const key=Number($('#assume-bank').checked)+''+Number($('#assume-title').checked);
|
||||
const scenario=demoScenarios[key];
|
||||
$('#sim-prob-val').textContent=scenario.demoProbability+'%';
|
||||
$('#sim-prob-delta').textContent='+'+(scenario.demoProbability-42)+' 百分点';
|
||||
$('#sim-prob-delta').style.opacity='1';
|
||||
$('#sim-prob-bar').style.width=scenario.demoProbability+'%';
|
||||
$('#sim-remaining').textContent=scenario.remaining;
|
||||
$('#sim-explanation').textContent=scenario.reason;
|
||||
$('#simulation-comparison').hidden=false;
|
||||
updateRadar();
|
||||
}
|
||||
['assume-bank','assume-title'].forEach(id=>$('#'+id).addEventListener('change',updateSimulation));
|
||||
$('#run-simulation').onclick=()=>showDialog('basis-dialog');
|
||||
updateSimulation();
|
||||
$('#copy-checklist').onclick=async()=>{const text='DEMO-026 演示补件清单\n1.近六个月银行流水及应收账龄,逐笔匹配主要客户回款。\n2.设备采购合同、发票和清单,解释品名差异。';try{await navigator.clipboard.writeText(text);$('#copy-status').textContent='演示清单已复制。';}catch{$('#copy-status').textContent='浏览器未允许复制,请选择上方清单文字手动复制。'}};
|
||||
tab('overview');
|
||||
})();
|
||||
</script>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
Reference in New Issue
Block a user