Files
PlantAI-dev/docs/nl_trigger_test_rounds/round_2.md
T

6.2 KiB
Raw Blame History

轻量版拓展分析自然语言触发 — 第二轮测试报告

  • 时间: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。