test(priv): R3 轮次报告——BUG-PRIV-R2-01 关闭,缺陷清零;用例表 v1.3(LLM 收到问题与参考资料)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -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 断言 |
|
||||
|
||||
@@ -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 终验执行)。
|
||||
Reference in New Issue
Block a user