Files
Agent-System/.doc/test-reports/2026-09-21-force-material-chunk-index-test-report.md
weichenandCursor 06b9278996 docs(test): 记录候选 535 确认与全量切块验收
项目 6579 的正式正文已换成真实解析内容,冲击波 PDF 写入 90 条带向量的切块,小文档仍全文注入。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-21 13:56:57 +00:00

5.7 KiB
Raw Permalink Blame History

确认候选并强制全量切块索引 测试报告

一、 测试背景 (Background)

项目 6579「新的测试项目」的正式正文仍停在 2026-09-21 07:28 的候选 526(快照 647)。那段文字把《冲击波治疗仪系统方案》写成 PDF 二进制压缩流,并称产品定位完全空白。修复后的候选 535 一直停在待确认,四个入口看到的都是这份旧正文。同时 material_chunks 为空:29KB 的解析结果没有越过 60KB 门槛,切块索引根本没有执行。

二、 测试目标 (Test Objectives)

  • 确认候选 535,使 doc_proj6579_bd_intake 正式正文改为真实解析内容。
  • 每份成功解析的材料都写入 material_chunks,正文不超过 60KB 时仍全文注入。
  • 用项目 6579 里已经上传的冲击波 PDF 验证切块、嵌入、重排和全文注入同时存在。

三、 测试方案与环境 (Test Plan & Environment)

  • OS:Linux;dev HTTP 127.0.0.1:8080;context Postgres 5433;schema 61。
  • 后端:pi-agent + MiniMax-M2.7-highspeed。MinerU 精度 token 仍过期,走 Agent 轻量 API 20 页分块。嵌入 bge-m3,重排 bge-reranker-v2-m3-free。
  • 代码:feature/force-material-chunk-index-2026-09-21 合入 dev@a16a6619 后,只在主目录执行 scripts/env-service.sh dev rebuild。容器挂载 /home/weichen/projects/Agent-System/data/dev -> /app/data。
  • 确认动作:编制人用户 398 的一次性会话调用决策接口,用完立即 revoked_at。系统管理员直接确认会得到 DOC_DUTY_FORBIDDEN。

四、 预期结果 (Expected Results)

  • 正式 content_sha256 变为 d50b2e292bf06472754390a88043933e8dec3b7b81a6ed9abfab0863e62d6536,正文不含「二进制压缩流」。
  • blob 57eb6d860bc8526da6f9e6adb4866e7699edcafec219d93f23758f7cc2f447bb 在 material_chunks 中有行,且 embedding 非空。
  • Pipeline.Search 对「能量参数是多少」返回重排后的片段,其中包含峰值 6-30MPa。
  • 工作区 materials_text 仍是全文 .md,不是目录加检索片段。

五、 实际测试结果与判定 (Actual Results & Evaluation)

用例 1:确认候选 535

  • 测试输入 (Input):POST /api/v1/documents/doc_proj6579_bd_intake/agent-candidates/535/decision,decision=commit,confirmed=true,expected_input_sha=4b3741e7642502f8960da08646e85ffad4337064fb8932b9420151e5a2cdb233。
  • 实际输出 (Actual Output):HTTP 200,head_snapshot=656,head_sha=d50b2e292bf06472。库内候选 535 为 committed。正文标志:still_binary_phrase=f,has_real_content=t(含「全自动体外冲击波」)。更早的待确认候选 527、534 在决策接口返回 409 docrevision: candidate stale 后,状态写成 stale,避免待确认徽标继续盖住新正文。
  • 评价判定 (Evaluation / Verdict):PASS。
  • 性能与耗时 (Duration & Latency):决策接口约 0.3s。

用例 2:项目 6579 真实任务切块

  • 测试输入 (Input):编制人一次性会话 POST /api/v1/tasks/runs,project_id=6579,task_key=bd_intake,run_id=run_1789998517646094684。
  • 实际输出 (Actual Output):
    • 创建 HTTP 202,status=running;结束状态 pending_author_confirmation。
    • material_chunks:rows=90,with_embedding=90。
    • 工作区 bd_intake_1789998547618974092/materials_text/冲击波治疗仪系统方案_0912更新.pdf.md 为 29152 字节,含「冲击波」和 MPa,不含「二进制压缩流」。
    • 根 output.md 22860 字节,md5 32e7c02cd42cb7a90037d94968d1b996,开头为「用户初始需求收集表 / 冲击波治疗仪系统方案评估」,不含失败文案。
    • 新候选 537 为 needs_confirmation,7474 字节,不含「二进制压缩流」或「完全空白状态」,且含能量参数。正式 head 仍是候选 535。
  • 评价判定 (Evaluation / Verdict):PASS。
  • 性能与耗时 (Duration & Latency):任务 13:48:37Z 开始,13:54:33Z 进入 pending_author_confirmation,约 6 分钟。

用例 3:检索与重排

  • 测试输入 (Input):Pipeline.Search(project=6579, blob=57eb6d86…, query=能量参数是多少, limit=3)。
  • 实际输出 (Actual Output):
    • hit0「待突破点」score=0.0210
    • hit1「核心竞品综合对比:技术、性能与价格」score=0.0166
    • hit2「核心技术与优势」score=0.0129,正文含「峰值达6-30MPa,径向聚焦±10mm,能量输出稳定安全」
  • 评价判定 (Evaluation / Verdict):PASS。能量参数片段在重排后的前三名里。分数整体偏低,第一名不是参数句本身。
  • 性能与耗时 (Duration & Latency):1.2s–2.1s(含嵌入与重排请求)。

六、 自动化测试套件汇总 (Test Suite Execution)

在集成候选 a16a6619 上执行:

ok  chat-agent-system/internal/mineru          3.007s
ok  chat-agent-system/internal/materialindex   0.003s
ok  chat-agent-system/internal/bizdev          0.111s

TestMaterialToItems_SmallDocStillFulltextAfterIndex 确认小文档 inject_mode=fulltext 且 chunks_indexed=true。TestMaterialToItems_LargeDocIndexesBeforeRAGInject 确认大文档先切块,注入方式不是全文。

七、 测试结论与后续优化建议 (Conclusion & Next Steps)

达到本次合入标准。正式正文已换成候选 535 的真实内容;同一份 PDF 同时有全文注入和 90 条带向量的切块。test/main 未晋升,production_ready 未改。

后续:新一轮 bd_intake 产生了待确认候选 537,需要编制人确认后才会替换现在的正式正文。重排分数偏低,能量参数句排在第三名,值得单独看检索 query 和 rerank 分数尺度。候选过期时外层事务会把 stale 回滚,这次是在决策接口返回 409 之后把 527/534 写成 stale。