项目 6579 的正式正文已换成真实解析内容,冲击波 PDF 写入 90 条带向量的切块,小文档仍全文注入。 Co-authored-by: Cursor <cursoragent@cursor.com>
5.7 KiB
5.7 KiB
确认候选并强制全量切块索引 测试报告
一、 测试背景 (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 Postgres5433;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.md22860 字节,md532e7c02cd42cb7a90037d94968d1b996,开头为「用户初始需求收集表 / 冲击波治疗仪系统方案评估」,不含失败文案。 - 新候选 537 为
needs_confirmation,7474 字节,不含「二进制压缩流」或「完全空白状态」,且含能量参数。正式 head 仍是候选 535。
- 创建 HTTP 202,
- 评价判定 (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。