From 5931ddca5eec81b8243ce5ac5fa9c319d0a87e64 Mon Sep 17 00:00:00 2001 From: admin Date: Tue, 8 Sep 2026 00:19:38 +0800 Subject: [PATCH] =?UTF-8?q?test(priv):=20R3=20=E8=BD=AE=E6=AC=A1=E6=8A=A5?= =?UTF-8?q?=E5=91=8A=E2=80=94=E2=80=94BUG-PRIV-R2-01=20=E5=85=B3=E9=97=AD,?= =?UTF-8?q?=E7=BC=BA=E9=99=B7=E6=B8=85=E9=9B=B6;=E7=94=A8=E4=BE=8B?= =?UTF-8?q?=E8=A1=A8=20v1.3(LLM=20=E6=94=B6=E5=88=B0=E9=97=AE=E9=A2=98?= =?UTF-8?q?=E4=B8=8E=E5=8F=82=E8=80=83=E8=B5=84=E6=96=99)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Fable 5 --- docs/team/TEST_CASES_PRIVATE.md | 3 +- docs/team/TEST_REPORT_PRIV_R3.md | 66 ++++++++++++++++++++++++++++++++ 2 files changed, 68 insertions(+), 1 deletion(-) create mode 100644 docs/team/TEST_REPORT_PRIV_R3.md diff --git a/docs/team/TEST_CASES_PRIVATE.md b/docs/team/TEST_CASES_PRIVATE.md index 81df737..ed193e5 100644 --- a/docs/team/TEST_CASES_PRIVATE.md +++ b/docs/team/TEST_CASES_PRIVATE.md @@ -6,6 +6,7 @@ > 基线:feature/bioflow-conversation-orchestration @ dea4640(编制时)。 > 修订记录:v1.1(TL 复查裁决)——假设 1 替换为实施方案 §1.2 语义(表格原位聚合、outline 不参与切块);假设 9 改行为级判据;TC-PRIV-L1-05/L1-07 修订并新增 L1-07b(outline 不影响输出)、L1-42(跨轮归属)。用例总数 90 → **92**,追溯矩阵已同步。 > 修订记录:v1.2(R2 回写)——TC-PRIV-L2-10/L2-11 信封含 ok:true;TC-PRIV-L2-12 确认空 question 与缺 question 均 422;TC-PRIV-L3-01/L4-03 注明无关查询 → hit:false(自谦答语确定性改判);TC-PRIV-L2-10 注明 BUG-PRIV-R2-01(LLM 上下文不含 question)现状。 +> 修订记录:v1.3(R3 回写)——TC-PRIV-L2-10 判据去掉 R2 注,改为「LLM 收到用户问题与参考资料」(BUG-PRIV-R2-01 已关闭,92e2754)。 ## 0. 约定 @@ -117,7 +118,7 @@ | 编号 | 对应 FR | 测试对象 | 前置条件 | 步骤 | 输入 | 期望输出 | 判据 | |---|---|---|---|---|---|---|---| -| TC-PRIV-L2-10 | FR-PRIV-004 | POST /api/qa/private 命中 | vstore chunk 库已就绪;DeepSeek key 有效 | curl POST /api/qa/private | {"question":"…与资料相关的问题","top_k":8,"min_score":0.30} | HTTP 200;{ok:true,hit:true,mode:"vector",answer:非空 markdown,items:[{doc_id,name,seq,chunk_id,snippet,score,category,tags,created_at,ref}],elapsed_ms}(R2 起信封含 ok:true) | answer 中每个 [资料n] 编号与 items[].ref 一一对应;answer ≤300 字;R2 注:当前 LLM 上下文不含 question(BUG-PRIV-R2-01),LLM 自谦答语会被确定性改判 hit:false | +| TC-PRIV-L2-10 | FR-PRIV-004 | POST /api/qa/private 命中 | vstore chunk 库已就绪;DeepSeek key 有效 | curl POST /api/qa/private | {"question":"…与资料相关的问题","top_k":8,"min_score":0.30} | HTTP 200;{ok:true,hit:true,mode:"vector",answer:非空 markdown,items:[{doc_id,name,seq,chunk_id,snippet,score,category,tags,created_at,ref}],elapsed_ms}(R2 起信封含 ok:true) | answer 中每个 [资料n] 编号与 items[].ref 一一对应;answer ≤300 字;R3 起:LLM 收到用户问题与参考资料(user_message = 用户问题 + [资料n] 参考资料) | | TC-PRIV-L2-11 | FR-PRIV-004 | /api/qa/private 未命中 | 库中无相关内容 | curl POST | {"question":"无关问题"} | HTTP 200;{ok:true,hit:false,mode:"empty",answer:"",items:[]}(R2 起信封含 ok:true;自谦答语确定性改判 hit:false) | 三态信封完整;无 error 字段 | | TC-PRIV-L2-12 | FR-PRIV-004 | /api/qa/private 参数校验 | 无 | curl POST | {"question":""} / 缺 question | HTTP 422 {ok:false,error:{code:"VALIDATION"}}(R2 确认:空 question 与缺 question 均 422,question min_length=1) | 统一 VALIDATION 信封(BFF 全局处理) | | TC-PRIV-L2-13 | FR-PRIV-004 | /api/qa/private vstore 宕机 | 停 vstore(TL 配合) | curl POST | {"question":"…"} | HTTP 503 {ok:false,error:{code:"UPSTREAM_DOWN", degraded:true}} | 信封 code 与 degraded 断言 | diff --git a/docs/team/TEST_REPORT_PRIV_R3.md b/docs/team/TEST_REPORT_PRIV_R3.md new file mode 100644 index 0000000..5933ed3 --- /dev/null +++ b/docs/team/TEST_REPORT_PRIV_R3.md @@ -0,0 +1,66 @@ +# TEST_REPORT_PRIV_R3 —— 私有资料问答轮次测试 R3(R2 缺陷复测 + 全量回归) + +> docs/team/TEST_REPORT_PRIV_R3.md | T1 执行 2026-09-08 | 用例表 docs/team/TEST_CASES_PRIVATE.md(v1.3) +> 基线:feature/bioflow-conversation-orchestration @ 92e2754(BUG-PRIV-R2-01 修复,BFF 已重启) +> L4 浏览器冒烟由 TL 终验执行。 + +## 1. 执行摘要 + +- **BUG-PRIV-R2-01 关闭**:真命中问题「批量导入压测样例 序号 38」→ hit:true + answer 明确回答「序号为 38,标志串 DOCGEN_PERF_SENTINEL_9F3A」并引 [资料1][资料2]。 +- **R1 三缺陷复验无回归**:ok 键 / 422(空+缺)/ 无关查询 hit:false 全部保持。 +- **全量回归全绿**:vstore 101/101;sdk 225 passed + 38 errors(预存基线);前端 373 + 23 = 396。 +- **红线 diff 复核**:全部为空。 +- **缺陷清零**(含观察项 1 条,非缺陷)——具备 TL 终验条件。 + +## 2. 缺陷复测结论 + +### BUG-PRIV-R2-01(ask_private 的 LLM 调用未传 question)——【关闭】 + +- 复现问题(R2 失败用例):`POST /api/qa/private {"question":"批量导入压测样例 序号 38"}` +- R3 实际:`{ok:true, hit:true, mode:"vector", items:8, elapsed_ms:…}` + - answer 关键句:「相关资料([资料1]、[资料2])仅显示该样例的标志串为 `DOCGEN_PERF_SENTINEL_9F3A`,序号为 38……其他资料([资料3]至[资料8])涉及序号 37、48、58,与序号 38 无关。」 + - [资料n] 编号与 items[].ref 对应;明确回答了用户问题指向。 +- 修复实现核对(git show 92e2754,仅 sdk/app/services/privateqa.py,+5/-1): + `user_message = f"用户问题:{question}\n\n参考资料:\n{context}"` 替换原 `context` 直传——LLM 现收到用户问题与参考资料。修复面与 R2 报告建议一致,无越界改动。 + +### R1 三缺陷复验(无回归) + +| 缺陷 | 复验结果 | 判定 | +|---|---|---| +| BUG-PRIV-R1-01(信封缺 ok 键) | 未命中态 keys=[answer,hit,items,mode,ok],ok:true | 保持关闭 | +| BUG-PRIV-R1-02(空 question 422) | 空 question HTTP 422 VALIDATION;缺 question HTTP 422 VALIDATION | 保持关闭 | +| BUG-PRIV-R1-03(无关查询零痕迹) | 无关查询 → ok:true, hit:false, mode:empty, items:0 | 保持关闭 | + +## 3. 全量回归统计 + +| 套件 | 结果 | 对比 R2 | +|---|---|---| +| vstore pytest(仓库根全量) | **101 passed**,2 warnings(fastapi DeprecationWarning 预存) | 一致 | +| sdk pytest(sdk/ 全量) | **225 passed / 0 failed / 38 errors**(38 errors = 预存基线 test_docgen_api.py collection ERROR,R1 报告 §5 已有 dea4640 对照证据) | 一致 | +| 前端 vitest 全量 | 27 files / **373 passed** | 一致 | +| 前端 private_docs | 4 files / **23 passed** | 一致 | + +## 4. 观察项(非缺陷) + +**O-R3-01**:sdk 全量首跑出现 1 failed(`app/services/test_docgen_pipeline.py::test_generate_outline_fallback_default`,断言「背景与目标」未命中)。排查结论:该测试文件与 pipeline.py 相对 dea4640 基线均零改动(`git diff dea4640 HEAD --stat` 为空),92e2754 仅改 privateqa.py;隔离单跑该用例 3/3 通过(0.6s),随后全量重跑恢复 **225 passed / 38 errors**——判定为偶发 flaky(大纲 LLM 降级测试的伪随机/顺序相关),**与本轮 FR-PRIV 改动无关**。建议 TL 知悉,若再现在独立任务中处理(测试文件不在 FR-PRIV 清单内,T1 不动)。 + +## 5. 红线 diff 复核(dea4640..HEAD) + +| 项 | 结果 | +|---|---| +| QA 金标树 8091(agent/qa) | diff 空 | +| 前端红线(modes/labels/bench/api/qa/sse/parser/PipelineCard) | diff 空 | +| vstore 红线(retrieval/parsing/backend/crypto) | diff 空 | +| sdk 红线(qa.py/sse_relay.py/compile_sdk.sh) | diff 空 | +| 新模块无 yield(privateqa.py / private_docs.py) | grep 0 / 0 | + +HEAD=92e2754,修复仅 1 文件(privateqa.py +5/-1),在清单内。 + +## 6. 用例表回写(TEST_CASES_PRIVATE.md v1.3) + +- TC-PRIV-L2-10 判据:去掉「LLM 上下文不含 question(BUG-PRIV-R2-01)」R2 注,改为「LLM 收到用户问题与参考资料(user_message = 用户问题 + [资料n] 参考资料)」。 +- 追溯矩阵复核:defined = used,无孤儿无缺漏。 + +## 7. 结论 + +**R3 缺陷清零**(R2-01 关闭 + R1 三缺陷保持关闭 + 无新缺陷;观察项 O-R3-01 为非 FR-PRIV 的偶发 flaky,已记录)。全量回归与红线复核全绿。具备 TL 终验条件(L4 浏览器项由 TL 终验执行)。