Files
2026Technology-Competition/docs/design-review.md
T

9.3 KiB
Raw Blame History

设计评审报告

版本: v1.1 | 日期: 2026-07-30 | 状态: 评审完成 + 修复已完成

评审范围:全量四层(config+数据模型 → 核心 Agent+运行时 → RAG+API+WebUI → 一致性交付) 评审视角:结构 / 实现 / 需求 / QA 多视角交叉 严重级:P0=实现阻塞 P1=应修 P2=建议


评审进度与修复状态

范围 评审状态 修复
1 config-design + design §3/§6/§9 数据模型 完成 已修复
2 agent-runtime + design §2 Impact / §4 / §7 QA 完成 已修复
3 rag-layer + api-design + web-ui-design 完成 已修复(含第1/2层连带)
4 sample-spec + implementation-plan + 全量一致性 完成 已修复

第 1 层:config + 数据模型

发现问题

P0-1 数据模型前向引用 / 定义顺序倒置(实现阻塞)

design.md §2-3 的既有类型定义于 §9.4 数据类型之前,却在类体内引用后置类型。若按文档顺序在单一顶层模块实现,不加 from __future__ import annotations 会触发 NameError

引用类型 定义位置 引用位置(更早定义处) 问题
CellFormatting §3 行392 CellValue.formatting(行388,在 392 之前) 顺序倒置
SheetType §9.4.1 行1373 ExcelTable.detected_type(行406 跨章前向引用
ExtractionMethod §9.4.1 行1409 ExcelTable.extraction_method(行407 跨章前向引用
RuleDocument §9.4.2 行1417 StructuredSource.rule_docs(行436 跨章前向引用
ImageAnalysis §9.4.2 行1427 StructuredSource.image_analyses(行437 跨章前向引用

建议修复P0):

  1. 在 design.md §9.4 末尾新增「实现落地说明」:全部数据模型统一置于 src/.../data_models.py,文件顶部 from __future__ import annotations(注解惰性求值,类定义顺序无关)或调整枚举/类定义前置。
  2. implementation-plan Phase1 任务 1.2 补充「data_models.py 须启用 future.annotations」。

P1-1 运行时编排队列表述与配置决策冲突

  • agent-runtime-design.md §3.1(行203)写「步骤内部: 任务队列(Redis)」。
  • 但用户决策 + docs/api-design.md §5 + docs/config-design.md app.yaml task_queue.backend=memory 均约定「默认 InMemoryQueueRedis/Valkey 可选」。

建议修复agent-runtime §3.1 改为「任务队列(抽象 TaskQueue,默认 InMemory,可切 Redis/Valkey)」并指向 api-design §5。

P2-1 Embedding / 存储配置字段命名不一致

  • rag-layer-design.md manifest(§5.2)与存储适配(§9.4)使用键 embedding_modeladapterpersist_dir
  • config-design.md rag.yaml 使用嵌套 embedding.modelvector_store.adapter/chroma/qdrant

建议修复:统一为 embedding.modelembedding_model 二选一,并在 rag-layer §9.4 注明与 config 键名对齐;删除 manifest 中与 config 重复的 persist_dir 硬编码提示(应读 config)。

P2-2 ImageDescription vs ImageAnalysis 字段大量重复

  • ImageDescription(§9.4.3ImageAnalyzer 原始输出)与 ImageAnalysis(§9.4.2Parser 组装)含相同 image_ref/description/confidence/model,仅后者增加 sheet_name/anchor_cell/nearby_text/status。实现易混用(后续若切换,调用方拿错类型)。

建议修复:在此补注释「ImageDescription 为原始识别输出,ImageAnalysis 为带 Sheet 锚点与状态的组装结果」;delete 或改名其一,避免两个相似命名。

P2-3 config 未覆盖运行时子层配置(已核查,保持建议)

config-design.md 未定义记忆(runtime §4 三层容量/清理)、编排(状态机超时)等运行时参数,全部依赖 runtime 文档默认值。已核查:runtime §4 亦未给出配置项名。结论:不阻塞(记忆容量/超时为运行时内部策略,有默认值即可),实现期按实际调优再下沉 config(见文末「遗留建议」)。


第 1 层积极评价

  • inference.yaml 与 agent-runtime §2.3-2.7 高度对齐(重试退避 1/3/7s、超时 60s、structured_output.max_parse_retry=2、tiktoken 估算、裁剪优先级、prompts 目录、model deepseek/deepseek-chat)。
  • rag.yaml 与 rag-layer §6RRF k=60、通道 top-k=10、融合 top_k 默认 5、上下文增强、bge-small-zh)完全对齐。
  • 敏感项(API Key)全部收敛至 .env,未落入 yaml,符合 AGENTS.md 信息安全要求。
  • QUEUE_BACKEND/REDIS_URL 与 api-design TaskQueue 三实现(memory/redis/valkey)一一对应。

第 2 层:核心 Agent + 运行时

发现问题

P1-1 编排任务队列表述与配置决策冲突(三处)

agent-runtime-design.md §3.1(行205 附近)与 §3.5(行284 附近) 两处写「任务队列(Redis)」,与:

  • 用户决策(抽象 TaskQueue + InMemory 默认 + Redis/Valkey 可选)
  • docs/api-design.md §5TaskQueue 三实现)
  • docs/config-design.md app.yaml task_queue.backend=memory

冲突。已修复:两处改为「抽象 TaskQueue,默认 InMemory,生产可切 Redis/Valkey(接口见 api-design §5)」。

P2-4 impact_matrix 内部结构未定义

design.md §4.4 impact_matrix.impacts/impacted_by 原为 [...] 占位,下游 Writer 需消费关系对象但无 schema。 已修复:补示例 + 注明「复用 relations[] 关系对象结构,impacts=to 方向、impacted_by=from 方向」。

P2-5 writing 阶段回退端点缺失

runtime §3.2 白名单允许 writing → awaiting_impact_confirm,但 api-design 无对应端点。 已修复api-design §2.5 新增 POST /api/sessions/{id}/rollback-to-impactwriting → awaiting_impact_confirm)。

第 2 层积极评价

  • 状态机 8 状态与 api-design 端点状态转移完全对齐uploading→parsing→…→doneconfirm/reparse/reject/run-qa/writer-fix 齐全)。
  • 幂等机制(runtime §7.2 (chapter_id, version))与 Writer ContentBlock (chapter_id, version) 一致;任务幂等键 (session, step, chapter_id) 与 api-design §5.3 一致。
  • 三层记忆 + DataGate ↔ Writer §6.8 数据门 ↔ WriterState 章间引用闭环。
  • 安全基线(Prompt 注入边界)与 Writer §6.8 prompt 组装一致;确认事件持久化(§3.4)支撑崩溃恢复。
  • 异常处理 UX(重试/跳过/中断)与 api-design 错误码 options 字段一一对应。

第 3 层:RAG + API + WebUI

发现问题

P2-1 Embedding / 存储配置字段命名不一致(连带修复)

rag-layer/design.md 技术选型与 manifest 使用 embedding_modelconfig-design/design.md rag.yaml 使用 embedding.model已修复rag-layer §2 统一指向 config/rag.yamlembedding.modelmanifest §4.3 加注释「embedding_model 为版本记录字段,值与 config 保持一致,不单独配置」。

第 3 层积极评价

  • rag.yamlembedding/chunk/retrieval)与 rag-layer §2/§3/§6 参数完全对齐(RRF k=60、通道 top-k=10、融合默认 5、上下文增强、bge-small-zh)。
  • api-design 端点、状态转移、错误码与 runtime §3 / design §8 页面完全对齐(除 P2-5 已修)。
  • 部署拓扑(单容器/生产、Valkey 零许可风险)与 config-design 6 章 Docker Compose 一致。

第 4 层:一致性 + 可交付

发现问题

P0-1 连带 plan §1.2 缺未来式注解说明(已修复)

implementation-plan §1.2 数据模型任务未提 future annotations → 已补充「文件头部 from __future__ import annotations,定义顺序不依赖」。

第 4 层积极评价

  • samples ↔ plan 验收项全覆盖:表格型/自由记述型/混合型/取消线/合并单元格/规则冲突对 → 7 个样本逐一对应(§2.9、§5.9、§9 验证)。
  • sample-spec 已注明 1000 行大数据样本需另行生成(不纳入本集)✓。
  • 全量交叉核查:术语(write/design/ref)、状态机编号、章节引用、docs/* 相互链接一致,无孤立文档。
  • config 敏感项全部收敛 .env,符合 AGENTS.md 信息安全约束 ✓。

修复执行记录

# 动作 文件 状态
1 §9.4 补「实现落地说明」(data_models.py + from __future__ import annotations design.md
2 §3.1 / §3.5 任务队列改抽象 TaskQueue 表述 agent-runtime-design.md
3 §1.2 补 future.annotations 要求 implementation-plan.md
4 embedding 字段命名统一 + manifest 记录字段说明 rag-layer.md
5 ImageDescription vs ImageAnalysis 区分注释 design.md §9.2/§9.3
6 impact_matrix 内部结构补全 design.md §4.4
7 writing → awaiting_impact_confirm 回退端点 api-design.md §2.5
8 评审报告落盘(本次) design-review.md

遗留建议(不阻塞,可后续迭代)

  • P2-3config 未定义记忆(runtime §4 三层容量/清理)、编排超时等运行时参数,当前依赖 runtime 默认值。实现期可根据实际调优再决定是否下沉到 config。
  • v2 预留:LLM 调用缓存 / 成本限流(runtime §9)按迭代计划推进。