Files

88 lines
6.2 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 轻量版拓展分析自然语言触发 — 第二轮测试报告
- 时间:2026-08-27
- 被测提交:db610031c + afdb1614a(修复第一轮 7 项反馈 + PM 裁断修正,均未 push)
- 测试环境:/home/xzq/miniconda3/envs/plantai-bff/bin/python(Python 3.11.15 / pytest 9.1.1 / pytest-cov 7.1.0)
## 测试文件清单
| 文件 | 状态 | 用例数 | 结果 |
|---|---|---|---|
| tests/unit/test_extension_stage_lightweight_nl_intent.py | 更新+新增 | 79(上轮 58) | 全绿 |
| tests/unit/test_extension_stage_lightweight_nl_backend.py | 更新+新增 | 23(上轮 18) | 全绿 |
| tests/unit/test_extension_stage_lightweight_frontend_contract.py | 不变(与新实现一致,未删断言) | 20 | 全绿 |
## 通过/失败数
| 组 | 结果 |
|---|---|
| A 组(nl_intent 单元) | 79 passed,覆盖率 100%(223 stmts / 0 miss) |
| B 组(main.py 后端集成) | 23 passed |
| C 组(前端契约) | 20 passed |
| 相关四文件回归(A+B+C+deepseek_semantics) | 131 passed |
| Phase A 三件套(agent/input_binding/golden_runner_semantic) | 6 passed |
| test_agent_chat_actions | 36 passed |
| 全套 test_extension_stage_lightweight*.py | 337 passed + 6 既有失败(与第一轮相同 6 个,父提交复现,不拦路)+ 1 skip |
## 覆盖率
`nl_intent.py`:**223 stmts / 0 miss / 100%**。第一轮后新增代码(union 粗筛、_extension_id_tokens、_parameter_flag_tokens、_record_keyword_sources、compact_extension_name、catalog 24000、truncated reason、resolve 排序)全部覆盖。补测过程中 99%→100% 的一次补齐为 `_parameter_flag_tokens` 非 Mapping 元素跳过分支。
## 失败用例+关键报错
本轮无功能缺陷导致的失败;5 个上轮用例因行为有意变更而更新(工具词不再全量、extension_name 改紧凑形式、blast/hmmer 用例 fixture 隔离)。
## 第二轮修复验证结论(对应 main 要求的 5 项)
### 1. union 粗筛策略(afdb1614a)— 通过
- 带工具词+强触发词 → 关键词子集(不因强触发词全量):test_rough_candidates_union_strategy_with_strong_trigger_and_keyword ✅
- 纯强触发词无关键词命中 → 全量兜底:test_rough_candidates_pure_strong_trigger_falls_back_to_all ✅
- 纯工具词无强触发词 → 子集:参数化用例 "用 hmmsearch 搜索结构域" → ["ext_hmm"] ✅
- 无任何命中 → []:test_rough_candidates_no_match_returns_empty ✅
- 命中数降序(同分按 id):test_rough_candidates_sorted_by_hits_desc ✅
- 缺失 extension_id 过滤不产出 None:test_rough_candidates_skips_missing_extension_id ✅
- resolve 按候选分排序目录:test_resolve_orders_records_by_candidate_score ✅
### 2. compact_extension_name — 通过
参数化 6 例:去尾缀时间戳(`03___hmm_1787130993548`→`03___hmm`)、超长截 30、空串、无时间戳原样 ✅
### 3. catalog 24000 上限与 truncated reason — 通过
- MAX_CATALOG_CHARS == 24000 断言 ✅
- 60 条长 summary 记录截断、总长 ≤ 上限、截断点后首条追加超限 ✅
- 去重 seen_ids ✅
- 截断时 reason="ok; 候选过多已截断,请补充工具名" ✅
### 4. _extension_id_tokens / _parameter_flag_tokens — 通过
- id token:`03___hmm_1787130993548` → 含 hmm、剔 len<3 ✅
- flag token:`--samples` 保留、单字母剔除、停用词剔除、无 contract 返回 []、非 Mapping 元素跳过 ✅
- _record_keyword_sources 三源合并(summary + id token + flag)✅
### 5. B 组 message 中文模板 — 通过
- extension_id 为主、summary 首句截 60 字括号补充:"已识别为轻量拓展分析:ext_hmm(This tool searches sequences with hmmsearch)。请按引导上传或选择输入文件并核对参数后执行。" ✅
- 无 summary 时无括号补充 ✅
- params 新增 function_summary 字段 ✅
### 6. import-paths 第二轮修复 — 通过
- 目录同名冲突 _1 后缀(原目录不被覆盖)✅
- 多路径先整体校验后复制:合法+非法混合 → 400 且合法文件未复制 ✅
- 不存在路径混入 → 400 且未复制 ✅
- 多合法路径全部复制 ✅
### 7. PM 实测对齐(真实 store 固化)— 通过
test_real_store_pm_alignment_counts:HMM→9、DIAMOND→8、OrthoFinder→3、KaKs→2、ManifestQC→5、纯拓展分析→61,与 PM 实测完全一致;且 HMM 子集(9 条)构建 catalog 不截断(truncated=False),P0 截断问题在带工具词场景已解决。
### 8. C 组一致性 — 通过
index.html 两提交间零改动,现有 20 个契约测试(含上轮追加 5 个)全部保持绿色,无需调整。
## 遗留问题清单
| 编号 | 位置 | 现象 | 建议修复 |
|---|---|---|---|
| 1(P2) | nl_intent.py `_rough_candidates` / `_summary_keywords` | 纯中文功能词(如「样本表校验」)仍 0 候选不调 LLM——manifestqc 等中文场景只能靠「拓展分析」强触发词全量兜底(61 候选 + 24000 截断后 13 条进 catalog,排序靠目录名,manifestqc 18_ 系列仍在截断线外)。实测「用 ManifestQC 拓展分析」走 id token 命中可解,但用户不知工具英文名的场景仍受限 | 产品层面确认是否需要中文功能词→工具映射表;或截断时按 18 案例优先级排序 |
| 2(P3) | nl_intent.py `_extension_id_tokens` | extension_id 的通用英文 token(如 "ext"、数字时间戳)也进关键词源,实测 "ext" 已在 _ENGLISH_STOPWORDS 之外(是 "extension" 的子串场景会误命中);上轮实测 blast 消息误命中 "against" 属 summary 普通词干扰,union 策略下仍可能存在这类弱命中把无关记录顶进子集 | 低风险;可考虑给关键词源加权重(id token > summary > flag),弱命中不参与排序竞争 |
| 3(P3) | 全套 lightweight 回归 | 6 个既有失败(与第一轮相同清单),父提交 90f51ed60 复现,与本改动无关 | 不拦路;建议另开任务 |
## 测试环境备注
- 环境同第一轮(plantai-bff + 已补装的 pyyaml/openai/pandas/requests/openpyxl)。
- 工作区改动仅测试文件:tests/unit/test_extension_stage_lightweight_nl_intent.py(更新+新增)、tests/unit/test_extension_stage_lightweight_nl_backend.py(更新+新增)。开发代码未触碰,未 push。