> [!NOTE] > Status: Historical snapshot. Current refactor results and validated baseline are tracked in `CHANGELOG.md` (updated 2026-04-07). # VLM 项目与 Skill 改进建议(2026-02-13) ## 1. 评估范围与依据 本建议基于以下真实运行结果与代码阅读: 1. 实际整理流程:`scan -> parse -> analyze -> plan -> execute(dry-run)`。 2. 实际产物:`inventory.csv`、`identities.json`、`analysis.json`、`plan.json`、`plan_manual_review.csv`。 3. 关键代码:`src/vlm/parser.py`、`src/vlm/planner.py`、`src/vlm/cli.py`、`src/vlm/executor.py`、`skills/vlm-library-workflow/SKILL.md`。 运行中观测到: 1. `plan.json` 总操作 `4710`,其中 `move=1623`、`quarantine=187`、`no-op=2900`。 2. 人工复核候选 `516` 条,其中: 1. `manual_review=349` 2. `source_is_sample=92` 3. `season>=20=75` 4. `episode>=40=27` 5. `truncated_title_pattern=8` 这说明当前系统“可用”,但在真实复杂片源命名下,仍存在高风险误解析与误搬运窗口。 ## 2. 代码层改进(按优先级) ## P0(必须先做) ### 2.1 修复 `parse_series` 的 `XXxYY` 误匹配分辨率问题 现象: 1. `1440x1080`、`1920x1080` 会被局部匹配成 `40x10`、`20x10`,导致生成 `Season 40/S40E10`、`Season 20/S20E10` 这类错误目标路径。 根因位置: 1. `src/vlm/parser.py:197`,模式 `(\d{1,2})x(\d{1,2})` 过于宽松且允许子串匹配。 改进建议: 1. 改为边界敏感模式,例如 `(? 15` 或 `episode > 100` 时改为 `no-op` 并标记 `manual review`)。 2. 阈值放入配置(如 `plan.max_season`, `plan.max_episode`),默认启用。 验收标准: 1. 出现异常季集号时,不得进入 `move/rename`。 2. `plan.json` 的 `summary_by_reason` 可见明确拦截原因。 ### 2.3 `Sample` 片段默认不应参与主文件整理 现象: 1. `Sample` 文件被移动为正片目标名,存在“样片覆盖正片语义”的风险。 根因位置: 1. 解析/规划阶段未区分样片;`duplicate_keep` 也未惩罚 sample。 改进建议: 1. 在扫描或规划阶段识别 `Sample`(路径段或文件名)。 2. 默认行为:`no-op` 或优先 `quarantine`,并提供开关(如 `plan.include_sample_files=false`)。 3. 在重复保留策略中将 sample 质量权重降到最低。 验收标准: 1. sample 不再成为默认保留/搬运目标。 2. 增加针对 `.../Sample/...` 的单元测试与集成测试。 ## P1(高价值) ### 2.4 优化标题规范化策略,避免语义损伤 现象: 1. `normalize_title()` 使用 `.title()` 会把 `CJ7 -> Cj7`、`R.I.P.D -> R I P D`,并可能对中日文混排标题产生副作用。 根因位置: 1. `src/vlm/parser.py:82-84`。 改进建议: 1. 默认不做 `.title()`,只做分隔符清洗与空白归一。 2. 增加可选 title-case 开关,仅用于纯英文场景。 验收标准: 1. 缩写与数字混排标题大小写保持稳定。 2. 新增包含中日文与缩写的测试用例。 ### 2.5 降低 dry-run 日志噪音,提升可审阅性 现象: 1. dry-run 会输出大量逐条日志,审阅效率低。 根因位置: 1. `src/vlm/executor.py` dry-run 对每条操作记 `INFO`。 2. `src/vlm/cli.py:771` 已做“Sample operations”,但日志层仍会刷屏。 改进建议: 1. 默认将逐条 dry-run 日志降为 `DEBUG`。 2. CLI 增加 `--verbose-ops` 选项,按需打印全量操作。 验收标准: 1. 默认 dry-run 输出聚合摘要 + 少量样本。 2. 显式开启 verbose 时仍可查看全量。 ### 2.6 提供内建“计划体检”命令 改进建议: 1. 新增 `vlm review-plan --input plan.json --output plan_manual_review.csv`。 2. 内建规则:异常季集号、sample、标题截断、高风险字符、手工审核项统计。 价值: 1. 将当前人工脚本化能力产品化,减少执行前漏检。 ## P2(体验与可维护性) ### 2.7 丰富解析模式(尤其东亚命名) 建议新增模式: 1. `EP01` / `E01` 独立模式(season 缺失时可推断 `S01` 或标记低置信)。 2. `第09話` / `第09集` 模式。 3. `S01 Complete`、`END`、`SP` 特判策略。 ### 2.8 用“真实语料回放测试”补齐回归 建议: 1. 在 `tests/fixtures/` 维护匿名化真实文件名样本。 2. 新增端到端测试:`parse -> plan` 断言“异常项不得进入 move”。 ## 3. Skill 描述改进建议(`vlm-library-workflow`) 当前 skill 已具备主流程与安全意识,但还可增强“执行前闸门”与“环境兼容性”。 ### 3.1 增加命令回退策略(`vlm` 不存在时) 问题: 1. 当前文档默认 `vlm ...`,但实际环境可能仅支持 `uv run vlm ...`。 建议: 1. 在 `SKILL.md` 与 `references/command-recipes.md` 增加规则: 1. 先试 `vlm --help` 2. 失败则自动切换 `uv run vlm --help` ### 3.2 把“人工复核闸门”写入 Skill 强制流程 建议: 1. 在 `execute --confirm` 之前新增固定步骤:生成并汇报高风险清单。 2. 若高风险计数 > 0,默认不执行确认,除非用户明确覆盖。 推荐规则(可直接写入 skill): 1. `season>=20` 或 `episode>=40` 2. `source_path` 包含 `Sample` 3. `reason` 包含 `manual review` 4. 标题截断模式(如路径中出现异常断裂片段) ### 3.3 在 Skill 中声明已知解析边界 建议: 1. 明确列出“当前 parser 对某些命名存在误判风险(如分辨率触发 `x` 模式)”。 2. 遇到这些模式时,优先建议“复核并降级为 no-op”。 ### 3.4 输出契约增加“风险摘要” 建议在 Output Contract 增加: 1. 高风险条目总数与分类计数。 2. 前 5 条代表样本。 3. 执行建议(继续/暂缓)。 ## 4. 推荐实施顺序(两周节奏) 第 1 周(风险收敛): 1. 修 `parse_series` 误匹配。 2. `planner` 增加异常季集号保护。 3. sample 文件默认降级处理。 4. 增加对应单测。 第 2 周(体验提升): 1. 加 `review-plan` 命令。 2. 优化 dry-run 日志粒度。 3. 迭代 `vlm-library-workflow` skill(执行前闸门 + 命令回退 + 风险摘要)。 ## 5. 可直接转任务的条目 1. `parser`: 修复 `XXxYY` 与分辨率冲突,新增回归测试。 2. `planner`: 增加 `max_season/max_episode` 风险闸门与配置项。 3. `planner/duplicate`: sample 文件降权或默认不搬运。 4. `cli`: 增加 `review-plan` 子命令。 5. `executor/logging`: dry-run 默认聚合输出,逐条改为 debug。 6. `skill`: 增加 `uv run vlm` fallback 与执行前人工复核强制步骤。