oh-my-muse/design-docs/专题-03-AI编排上下文与质量评测实现规范.md
2026-05-23 17:55:05 +08:00

607 lines
26 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 专题-03AI 编排、上下文与质量评测实现规范
- 版本v1
- 更新日期2026-05-19
- 目标读者:架构 / 后端 / 前端 / 测试 / 文档维护者
- 阅读时间35-55 分钟
- 边界说明:本文件补齐 AI 编排、检索、上下文、风险路由和质量评测的跨文档设计合同。它描述目标设计,不代表当前代码都已实现。精确表结构仍以 `后端-04-统一数据库Schema-v1.md` 为准,精确 API 路径和错误码仍以 `后端-05-统一API契约-v1.md` 为准,阶段门禁和证据包仍归 `doc/dev/*`
## 1. 归属范围
本文件只承载第一类设计缺口:系统运行合同、接口语义、字段合同、失败路径和质量算法。以下内容不放在本文件:
- 阶段是否退出、证据包字段、review 记录和命令输出。
- 当前代码是否已经实现。
- 具体服务类名、JPA 泛型、前端 hook 或测试文件路径。
| 设计主题 | 本文件负责 | 其它主文档 |
|---|---|---|
| RAGFlow 运行合同 | 客户端调用语义、错误分类、阻塞边界、来源标记 | Schema 看 `后端-04`API 看 `后端-05` |
| Graph Query Provider | 查询能力矩阵、返回元信息、降级边界 | ADR 决策看 `架构-03` |
| Falsification Benchmark | query set、阈值、记录字段、失败原因分类 | 评测 API 和表结构看 `后端-04` / `后端-05` |
| 上下文组装(Context Assembly) | 请求/响应合同、Layer 0-3、权限二次过滤、Token Budget | 系统流程看 `流程-02A/02B` |
| Agent / Prompt | 能力矩阵、fallback、模板族、审计字段白名单 | 管理 API 看 `后端-05` |
| Pipeline / Risk Routing | 风险等级行为、重试与自动确认边界 | 状态机看 `架构-04` |
| Planning Candidate / Knowledge Draft | 待审对象字段合同和版本校验 | 表结构看 `后端-04` |
| 全书解析批量返回 / 一致性检查结果 | 用户可解释返回结构 | 普通用户操作流程看 `流程-01B` |
| 质量评测 | 多模型聚合、分歧惩罚、配置快照绑定 | 评测集 API 看 `后端-05` |
| S0-AUTH 默认超级管理员 | 初始化与凭据交付安全合同 | 认证 API 和 RBAC 表看 `后端-04` / `后端-05` |
## 2. RAGFlow 运行合同
### 2.1 定位
RAGFlow 是外部语义检索基座,不是 Muse 的事实源。它只能消费 PostgreSQL 中的规范数据(Canonical)和授权资料投影,不能反向决定作品事实。
允许进入正式检索的来源类型:
| sourceType | 含义 | 是否可进正式检索 |
|---|---|---:|
| `work_content` | 当前作品已确认正文、章节和文本块摘要 | 是 |
| `local_knowledge_base` | 当前作品已确认局域知识 | 是 |
| `global_knowledge_base` | 当前用户/作品被授权的全局知识库资料 | 是 |
| `shadow_draft` | Suggestion / Knowledge Draft / Planning Candidate 等待审内容 | 否。只能用于明确标记的预览或审计,不得进入正式生成上下文 |
### 2.2 调用输入
Muse 后端调用 RAGFlow 时,必须传入或等价计算以下上下文:
| 字段 | 要求 |
|---|---|
| `workId` | 当前作品 ID |
| `userId` | 当前用户 ID 或系统任务服务身份 |
| `scenario` | `generation` / `extraction` / `validation` / `planning` / `consistency_check` / `search` |
| `allowedGlobalKbIds` | 当前请求允许使用的全局知识库 ID 列表 |
| `sourceTypes` | 本次允许检索的来源类型,默认不包含 `shadow_draft` |
| `queryText` / `queryVectorInput` | 检索查询文本或等价输入 |
| `maxResults` | 最大返回数量 |
| `traceId` | 链路追踪 ID |
RAGFlow 请求不得只依赖物理 dataset 隔离做权限边界。即使多个全局知识库共用物理索引,请求或后处理也必须按 `global_kb_id IN allowedGlobalKbIds` 或等价规则过滤。
### 2.3 错误分类与阻塞边界
| 错误 | 系统行为 |
|---|---|
| RAGFlow 不可用 / 超时 / 认证失败 | 阻塞依赖检索上下文的生成、提取、校验、规划和一致性检查,返回可恢复失败 |
| RAGFlow 限流 | 任务进入可重试失败;不静默降级为低质量生成 |
| 投影落后 | 使用 watermark + overlay 补齐;补不齐时返回投影未追平错误 |
| 单条资料缺权限 | 丢弃该条结果,记录审计摘要,不进入上下文 |
| 单条资料缺来源元信息 | 丢弃该条结果,不作为事实上下文 |
RAGFlow 不可用不得阻塞:
- 正文保存。
- 手工编辑章节或文本块。
- 查看已确认正文和已确认作品知识。
- 处理不依赖检索上下文的本地 UI 状态。
### 2.4 投影失败与重建
正式写入 Canonical 后,投影事件通过 `projection_outbox` 或等价机制发送给 RAGFlow。投影消费者必须满足
- 幂等:同一 PG 业务 ID 重放不会生成重复事实。
- 可重试:超时、限流、临时不可用要保留失败原因和重试次数。
- 可观测:管理员能看到投影目标、失败原因、最后尝试时间和待处理数量。
- 可重建:重建索引时以 PostgreSQL 事实源为准,旧 RAGFlow 文档 ID 只能作为映射参考,不作为事实。
## 3. Graph Query Provider
### 3.1 能力矩阵
Graph Query Provider 是图查询抽象,不直接等同 Neo4j。它的实现可以是 RAGFlow GraphRAG、Neo4j 或其它 provider但对 Muse 的合同必须稳定。
| queryType | 必须支持的语义 | 典型用途 |
|---|---|---|
| `entity_adjacency` | 实体邻接关系、关系类型、方向、证据来源 | 角色关系、组织关系、地点关联 |
| `relationship_evolution` | 同一实体关系随章节或时间变化 | 角色关系演变、阵营变化 |
| `event_timeline` | 事件时间线、章节范围、先后顺序 | 时间线一致性 |
| `causal_chain` | 因果链、触发事件、后果事件 | 因果检查、伏笔回收 |
| `foreshadowing_trace` | 伏笔、铺垫、回收节点 | 长篇结构检查 |
| `consistency_evidence` | 支撑一致性检查的问题证据集合 | 风险解释和定位 |
### 3.2 请求合同
```json
{
"workId": "string-id",
"queryType": "entity_adjacency",
"entityIds": ["string-id"],
"chapterRange": {
"fromChapterId": "string-id",
"toChapterId": "string-id"
},
"allowedGlobalKbIds": ["string-id"],
"maxResults": 20,
"traceId": "request-trace-id"
}
```
### 3.3 返回合同
每条结果必须带可追溯来源。缺少来源对象、授权状态或置信度的结果不得进入上下文。
```json
{
"provider": "ragflow_graphrag",
"queryType": "entity_adjacency",
"degraded": false,
"watermark": {
"projectionTarget": "graph_provider",
"lastSyncedRevision": 123
},
"results": [
{
"sourceObjectType": "knowledge_relation",
"sourceObjectId": "string-id",
"sourceChapterId": "string-id",
"globalKnowledgeBaseId": null,
"authorization": "allowed",
"confidence": 0.87,
"evidence": "引用摘要或证据片段",
"metadata": {
"relationType": "ally",
"direction": "outgoing"
}
}
]
}
```
### 3.4 降级边界
- Graph Query Provider 不可用时,可以让非因果、非时间线类生成继续使用 RAGFlow 语义检索,但响应必须标记 `degraded=true`
- 因果链、事件时间线、伏笔回收和一致性检查不能静默降级为普通语义检索后假装完整。
- Provider 返回投影落后时,必须先尝试 PG overlay仍无法补齐时返回可恢复失败。
## 4. Falsification Benchmark
### 4.1 Query set
S1-B 起GraphRAG / Graph Query Provider 的决策不能靠主观感受。首批 benchmark query set 至少包含:
| 类别 | 目标 | 最低通过阈值 |
|---|---|---:|
| `local` | 当前作品局域知识、正文和规划项检索 | 90% |
| `global` | 授权全局知识库检索和过滤 | 90% |
| `temporal` | 时间线、章节顺序、事件先后关系 | 80% |
| `causal` | 因果链、伏笔铺垫和回收关系 | 80% |
低于阈值不自动等于必须引入 Neo4j但必须触发 ADR-006 决策复审并记录失败原因。mock provider 或手写假结果不得计入正式 benchmark 结论。
### 4.2 记录字段
每次 benchmark run 必须记录:
| 字段 | 说明 |
|---|---|
| `datasetVersion` | 固定 query set 版本 |
| `provider` | `ragflow_graphrag` / `neo4j` / `mock` 等 |
| `queryType` | local / global / temporal / causal |
| `queryText` | 查询输入 |
| `expectedEvidence` | 期望命中的事实、章节或关系 |
| `actualResults` | 实际返回摘要和来源 |
| `score` | 单条得分 |
| `failureReason` | 失败分类 |
| `testedConfigSnapshot` | RAGFlow、Graph Provider、Prompt、Agent、上下文策略和 New-API 摘要 |
| `traceId` | 可追踪请求 ID |
失败原因至少包含:`missing_fact``wrong_source``unauthorized_source``stale_projection``temporal_order_wrong``causal_link_missing``low_confidence``provider_error`
## 5. 上下文组装(Context Assembly)
### 5.1 请求合同
上下文组装是后端内部合同,可以有内部 API 或服务接口。无论实现形态如何,输入语义必须稳定:
```json
{
"workId": "string-id",
"userId": "string-id",
"scenario": "continuation",
"targetChapterId": "string-id",
"targetBlockId": "string-id",
"userIntent": "继续写下一段",
"currentText": "用户当前输入或选中文本",
"allowedGlobalKbIds": ["string-id"],
"tokenBudget": {
"maxInputTokens": 12000,
"reservedOutputTokens": 2000
},
"includeDebugSnapshot": false
}
```
`scenario` 至少包含:`continuation``rewrite``description``planning``extraction``validation``consistency_check``ner_preview``full_parse`
### 5.2 四层上下文
| Layer | 内容 | 缓存策略 | 可省略性 |
|---|---|---|---|
| Layer 0 当前输入 | 用户当前意图、目标文本、目标章节、目标 Block revision | 不跨请求缓存 | 不可省略 |
| Layer 1 近邻正文 | 当前章节、相邻 Block、章节目标、已确认规划项 | 可按章节和 revision 缓存 | 续写、改写、描写不可省略 |
| Layer 2 作品事实 | 正式局域知识、Narrative State、角色关系、事件时间线 | 可按 work watermark 缓存 | 一致性检查和规划不可省略 |
| Layer 3 授权全局资料 | 被授权全局知识库摘要、体裁规则、平台规范 | 可按授权策略版本缓存 | 可按场景省略,但不能越权 |
Token Budget 处理顺序:
1. 先保留输出预算。
2. Layer 0 必须完整保留。
3. Layer 1 优先于 Layer 2Layer 2 优先于 Layer 3。
4. 超限时先摘要化低优先级资料,再截断;不得丢失来源引用。
5. 被省略资料必须进入 `omittedSources`,写明原因:`token_budget``not_authorized``stale_projection``low_confidence``not_relevant`
### 5.3 场景注入矩阵
| 场景 | 必须注入 | 可以省略 |
|---|---|---|
| 续写 | Layer 0、Layer 1、核心 Layer 2、已授权且相关的 Layer 3 | 低相关全局资料、远距离章节摘要 |
| 改写 | Layer 0、目标 Block revision、局部上下文、风格约束 | 远距离时间线 |
| 描写 | Layer 0、目标实体/地点、风格约束、相关局域知识 | 与描写无关的事件链 |
| 规划生成 | 作品方向、章节规划、Narrative State、相关实体关系 | 当前正文全文 |
| 提取 | 来源文本、来源快照、MetaSchema | 全局资料,除非提取规则依赖它 |
| 校验 | 待审草稿、当前 Canonical、相关关系和事件 | 与冲突无关的风格规则 |
| 一致性检查 | 正式正文、正式知识、规划项、时间线/因果图 | 未确认草稿 |
| NER Preview | 当前文本和局部 MetaSchema | 正式检索上下文 |
| Full Parse | 章节文本、章节边界、MetaSchema、parse job 信息 | 其它章节全文,除非用于跨章冲突检查 |
### 5.4 响应合同
```json
{
"contextId": "string-id",
"scenario": "continuation",
"layers": [
{
"layer": "L1",
"tokenCount": 3200,
"sourceRefs": [
{
"sourceType": "block",
"sourceId": "string-id",
"revision": 12
}
]
}
],
"omittedSources": [
{
"sourceType": "global_knowledge_base",
"sourceId": "string-id",
"reason": "not_authorized"
}
],
"permissionFilters": {
"allowedGlobalKbIds": ["string-id"],
"droppedResultCount": 2
},
"projectionState": {
"usedOverlay": true,
"laggingTargets": ["ragflow"]
},
"userExplanation": "参考了当前章节、角色关系和已授权资料;部分资料因未授权未使用。",
"auditSnapshotRef": "string-id"
}
```
普通用户只能看到 `userExplanation` 和可理解来源摘要。完整 Prompt、配置快照、Layer 明细、Graph Query Provider 结果和 Token Budget 调试信息只允许管理员、审计或调试接口查看。
### 5.5 二次权限校验
上下文组装必须做两次权限控制:
1. 检索前:根据当前用户、作品、套餐、访问策略计算 `allowedGlobalKbIds`
2. 检索后:对每条外部返回再次校验来源、授权状态和元数据完整性。
检索后发现未授权、已撤销、缺 `global_kb_id` 或缺来源对象的结果时,必须丢弃并记录摘要。不得因为结果来自外部检索系统就直接进入 Prompt。
## 6. Planning Task 与规划候选
### 6.1 建模口径
Planning Task 是任务类型(`task_type`),不是 S3 阶段必需的独立 Planning Agent。
- S3 阶段:通过现有 Agent 能力执行 `task_type=planning`,输出规划候选。
- S5 后:如果 benchmark、可观测性和产品需求证明规划能力需要独立生命周期再新增独立 Planning Agent ADR。
- 任何规划候选仍然进入 Shadow由普通用户确认后才成为正式规划数据或生成上下文。
### 6.2 Planning Candidate 合同
规划候选至少需要以下语义字段:
| 字段 | 说明 |
|---|---|
| `candidateId` | 规划候选 ID |
| `workId` | 所属作品 |
| `sectionKey` | 作品设定、章节大纲、世界设定、角色关系、文风检查等分区 |
| `taskType` | 固定为 `planning` 或规划子类型 |
| `baseItemId` | 被修改的规划项;新建时为空 |
| `baseItemVersion` | 生成时读取的规划项版本 |
| `sourceSnapshot` | 输入文本、上下文、配置和来源摘要 |
| `proposedData` | 候选规划数据 |
| `evidence` | 支撑该候选的正文、知识或全局资料来源 |
| `riskLevel` | low / medium / high / critical |
| `expiresAt` | 过期时间 |
确认规划候选前必须校验 `baseItemVersion`。版本不匹配时返回 stale不得把旧候选强行写入 Canonical用户可以重新生成或手动修改后保存。
## 7. Agent 能力矩阵与 fallback
| 能力 | 输入 | 输出 | 可接受 fallback | 不允许 |
|---|---|---|---|---|
| Generation | 上下文、Prompt、当前文本、New-API 绑定 | Suggestion、可选 Knowledge Draft、Risk Markers | Agent 服务不可用时,可走直连 New-API fallback但必须标记 degraded 并保留任务记录 | 缺检索硬依赖时静默生成低质量候选 |
| Extraction | 来源快照、MetaSchema、正文或候选文本 | Knowledge Draft / Proposal | 旧 NER 只能作为预览或低置信草稿来源,不得自动确认 | 提取失败静默跳过 |
| Validation | Draft、当前 Canonical、关系和时间线 | 风险标记、冲突摘要、去重建议 | 可以返回 `needs_review` | 无校验时标记 safe |
| Planning | task_type、作品规划上下文、目标 section | Planning Candidate | 可使用通用生成能力执行规划任务 | S3 阶段强制引入独立 Planning Agent |
| Retrieval / Context | 查询、授权、场景和 Token Budget | 可解释上下文 | 非图强依赖场景可降级为语义检索 | 越权资料进入上下文 |
| Evaluation | 固定数据集、候选输出、评审模型集合 | 评测报告和风险结论 | 单模型临时评审只能做调试,不计正式结论 | 用评测结论替代用户确认 |
fallback 对用户的基本反馈:
- 生成不可用提示“AI 助手暂时不可用,可以稍后重试”。
- 检索资料未授权:提示“部分资料当前无权使用,已从本次参考中排除”。
- 来源已变更:提示“源文本已变更,需要重新生成或重新提取”。
- Token Budget 超限:提示“参考资料过多,系统已优先保留当前章节和关键设定”。
普通用户界面不得直接暴露 `Agent``Prompt``Token Budget``Graph Query Provider``Layer` 等系统词。
## 8. Prompt 工程合同
### 8.1 模板族
Prompt 至少按以下模板族管理:
| 模板族 | 用途 | 必含变量 |
|---|---|---|
| `generation` | 续写、改写、描写、插入 | 作品方向、当前章节目标、目标文本、上下文摘要、文风约束、输出格式 |
| `planning` | 作品设定、章节规划、世界设定、角色关系、文风检查 | 规划分区、当前规划项、约束条件、候选数量、输出 schema |
| `extraction` | 从正文、候选或导入内容提取知识草稿 | MetaSchema、来源快照、目标 domain/scope/targetType、输出 schema |
| `validation` | 校验来源、冲突、重复和风险 | 当前 Canonical、待审数据、风险等级规则、输出 schema |
| `evaluation` | 多模型评审和回归对比 | 评测场景、评分标准、候选输出、参考答案或参考证据 |
### 8.2 激活前要求
Prompt 新版本激活前必须满足:
- 变量结构完整,不能依赖运行时拼接隐式变量。
- 输出格式明确,能被后端解析或人工审阅。
- 禁止直接要求 AI 写 Canonical。
- 关联至少一个可回归评测场景,或者标记为临时实验版本。
- 激活、停用、回滚都有审计记录。
Prompt 工程的质量闭环是:模板版本 -> 固定评测集 -> 多模型评审 -> 聚合结论 -> 人工复核 -> 激活或回滚。不能只靠一次手工试跑决定上线。
## 9. New-API 审计字段白名单
Muse 不复制 New-API 的成本账本,也不持久化 New-API token 明文。Muse 可以保存的任务级摘要字段:
| 字段 | 说明 |
|---|---|
| `newApiBindingId` | Muse 侧 New-API 绑定引用 |
| `newApiRequestId` | New-API 返回的请求引用或 trace |
| `modelAlias` | 模型别名或逻辑模型名,不作为供应商路由权威 |
| `inputTokenCount` / `outputTokenCount` | 任务级 usage summary |
| `latencyMs` | 调用耗时 |
| `finishReason` | 正常结束、长度截断、内容过滤、错误等 |
| `errorCode` / `errorMessage` | 脱敏错误摘要 |
| `promptVersionRef` | Prompt 版本引用 |
| `agentConfigRef` | Agent 配置引用 |
| `contextSnapshotRef` | 上下文摘要引用 |
禁止保存:
- New-API token 明文。
- Prompt secret。
- 模型供应商成本明细作为 Muse 权威账本。
- 未脱敏的完整请求头。
- 普通用户不可见的系统配置全文,除非走管理员审计视图并受权限控制。
## 10. Risk Routing
### 10.1 风险等级行为表
| riskLevel | 系统行为 | 是否允许自动确认 |
|---|---|---:|
| `low` | 展示轻量提示,允许用户正常确认 | 可允许 |
| `medium` | 明确展示风险和来源,要求用户显式确认 | 不建议自动确认 |
| `high` | 阻止批量自动确认,要求用户逐项处理或重新生成 | 否 |
| `critical` | 阻止确认进入 Canonical要求重新生成、人工修改或管理员排查 | 否 |
生成链路最多自动重试 2 次。两次后仍为 high / critical 时,不继续循环重试,必须给出失败状态、替代候选或人工处理入口。
用户手工编辑正文时Risk Routing 只能标记风险、生成待审草稿或提示重新提取,不得自动改写用户正文。
### 10.2 与待审层的关系
- 风险标记属于 Shadow 解释的一部分,不是 Canonical 事实。
- high / critical 不得通过“一键确认全部可确认章节”绕过。
- 风险状态、来源证据和用户决策必须进入 Archive 或审计摘要,便于后续追溯。
## 11. Knowledge Draft 字段合同
Knowledge Draft / Proposal 至少需要以下语义字段:
| 字段 | 说明 |
|---|---|
| `id` | Draft / Proposal ID |
| `workId` | 所属作品 |
| `proposalType` | create_entity / update_attribute / add_relation / update_narrative_state / planning_update |
| `sourceKind` | block / suggestion / parse_job / planning_candidate |
| `sourceRefId` | 来源对象 ID |
| `sourceBlockRevision` | 来源 Block revision适用时必填 |
| `sourceContentHash` | 来源内容 hash |
| `evidence` | 支撑该草稿的证据数组 |
| `proposedData` | 拟写入数据 |
| `currentData` | 当前 Canonical 快照 |
| `riskLevel` | low / medium / high / critical |
| `suggestionId` | 生成链路中关联 Suggestion |
| `parseJobId` + `chapterId` | Full Parse 章节确认边界 |
| `expiresAt` | 过期时间 |
`evidence` 至少包含:
```json
{
"sourceType": "block",
"sourceId": "string-id",
"revision": 5,
"quoteOrSummary": "证据摘要",
"confidence": 0.82
}
```
缺少来源快照、来源 hash 或章节边界的旧草稿不得 best-effort 硬确认,应作废并重新提取。
## 12. 全书解析批量返回合同
批量选择和“一键确认全部可确认章节”只是用户操作效率优化。后端仍按章节逐个事务执行,并返回可解释摘要。
建议返回结构:
```json
{
"parseJobId": "string-id",
"summary": {
"requestedChapterCount": 12,
"succeededChapterCount": 10,
"failedChapterCount": 2
},
"chapters": [
{
"chapterId": "string-id",
"status": "succeeded",
"acceptedProposalCount": 18,
"archivedProposalCount": 18,
"outboxEventCount": 6,
"retryable": false
},
{
"chapterId": "string-id",
"status": "failed",
"failureCode": "CHAPTER_BATCH_CONFLICT",
"failureReason": "本章存在冲突草稿,需要逐项处理",
"retryable": true
}
],
"retryableChapterIds": ["string-id"]
}
```
失败章节不得回滚已成功章节;也不得只返回一个全局错误让用户无法定位。
## 13. 一致性检查结果结构
一致性检查是主动质量工具,不是强制审批。返回结果至少包含:
```json
{
"checkId": "string-id",
"workId": "string-id",
"issues": [
{
"issueId": "string-id",
"issueType": "timeline_conflict",
"severity": "high",
"title": "角色到达地点的时间冲突",
"description": "第 12 章和第 14 章对同一事件时间顺序描述不一致",
"locations": [
{
"chapterId": "string-id",
"blockId": "string-id",
"revision": 8
}
],
"relatedObjects": [
{
"type": "knowledge_entity",
"id": "string-id"
}
],
"evidence": [
{
"sourceType": "graph_provider",
"sourceId": "string-id",
"summary": "证据摘要"
}
],
"suggestedActions": [
"修改第 14 章事件描述",
"更新角色时间线"
]
}
]
}
```
严重程度使用 `low` / `medium` / `high` / `critical`。检查结果只提示、定位和解释风险,不自动写正文、规划项或知识。
## 14. 质量评测聚合算法
### 14.1 多模型评审输入
正式 Evaluation Run 至少绑定:
- 评测集版本。
- Prompt 版本。
- Agent 配置版本。
- 上下文策略版本。
- 全局知识库和访问策略版本。
- New-API 绑定摘要。
- judge model set。
### 14.2 加权中位数 + 分歧惩罚
每个评审模型返回 `score``confidence``rationale` 和结构化问题列表。聚合时:
1. 按模型可信度、场景适配度和历史稳定性计算权重。
2. 用加权中位数作为基础分,降低极端模型输出影响。
3. 计算分歧度,例如四分位距、最大最小差或高低分阵营差。
4. 根据分歧度扣减置信度或最终分。
5. 输出三态结论:`pass``needs_human_review``fail`
聚合结果必须保留:
| 字段 | 说明 |
|---|---|
| `baseScore` | 加权中位数基础分 |
| `disagreementPenalty` | 分歧惩罚 |
| `finalScore` | 最终分 |
| `confidence` | 聚合置信度 |
| `verdict` | pass / needs_human_review / fail |
| `judgeBreakdown` | 各模型得分摘要 |
| `failureReasons` | 失败或需复核原因 |
评测结论只能用于改进 Prompt、Agent、上下文策略和回归风险判断不替代普通用户对正文、规划和作品知识的确认。
## 15. 默认超级管理员初始化
Sa-Token 引入后,系统需要可审计的默认超级管理员初始化,但不能交付明文默认密码。
目标合同:
- 初始化只允许在安装、首启或明确的系统管理命令中执行。
- 初始化必须幂等:已存在超级管理员时不得重复创建或覆盖密码。
- 凭据交付只能使用一次性 bootstrap token、临时密码哈希、控制台一次性输出或等价安全机制。
- 首次登录必须强制改密或完成凭据轮换。
- 初始化行为必须写审计日志,记录时间、来源、操作者或系统服务身份。
- 日志、接口响应和文档不得包含明文默认密码。
错误处理:
| 场景 | 行为 |
|---|---|
| 超级管理员已存在 | 返回已初始化状态,不改写凭据 |
| bootstrap token 过期 | 拒绝初始化,要求重新生成 |
| 初始化部分失败 | 回滚用户/角色绑定或进入可重试失败状态 |
| 无安全凭据来源 | 拒绝创建默认账号 |
## 16. 与 doc/dev 的关系
`doc/dev/00-09` 仍负责研发管理基线、阶段依赖、验收门禁和证据包。本文件只把其中已经属于“目标设计合同”的内容沉入 `doc/design-docs`。后续如果 `doc/dev` 再出现新的设计合同,应先判断:
1. 是否属于产品/架构/API/Schema/流程目标设计。
2. 是否已有正式设计 owner。
3. 是否只是阶段门禁或证据要求。
只有第 1 类和第 2 类才需要进入 `doc/design-docs`;阶段门禁和证据要求继续留在 `doc/dev`