排查结论：问题真实存在，根因在 workspace/xhs/workspace_entry.py:859。

  事实链：

  - 第一次确认后，状态是 awaiting_confirmation。
  - 用户说“采集1条就行”不是“确认”，代码会在 workspace/xhs/workspace_entry.py:859 清掉原来的关键词/业务需求/目标人群，重新分类。
  - 重新分类时，extract_collect_params("采集1条就行") 实际得到：
    {"xhs_action":"collect","keywords":["1条就行"],"total_count":1}
  - 所以它随后提示还缺 business_need、target_audience，再补充后就变成“关键词：1条就行”。

  影响范围：只影响“确认页之后用户补充/修改采集数量”的多轮采集流程；不是采集执行、生成内容、飞书上传本身的问题。

  建议修复点：awaiting_confirmation 状态下，如果用户输入的是“采集1条/改成1条/1条就行”，应合并到原 payload 的 total_count，保留原 keywords/business_need/target_audience，然后重新展示确认页。


  ## Summary

  - 目标：用户在确认页后说“采集1条就行 / 改成3条 / 1条”时，只更新采集数量，不丢失已确认的关键词、业务需求、目标人群。
  - 原则：不靠固定句子硬编码，基于“当前会话状态 + 字段级增量解析 + payload 合并”处理。

  ## Key Changes

  - 在 awaiting_confirmation 状态下，除“确认/取消”外，不直接清空状态。
  - 对用户新输入做字段级解析：
      - 若能解析出 total_count，合并进原 payload。
      - 若解析出关键词、业务需求、目标人群，也只覆盖对应字段。
      - 未解析出有效字段时，再按现有逻辑结束当前确认状态并重新分类。
  - 抽出通用增量解析函数，例如 extract_collect_updates(text)：
      - 支持数量表达：1条、采集1条、改成1条、一条、只要1条。
      - 返回结构化字段，不返回完整新任务，避免把“1条就行”当关键词。
  - 调整关键词提取规则：
      - 采集动词后如果主体是数量/确认/修改语义，不作为关键词。
      - 关键词仍通过原主题句或显式“关键词是...”提取。

  ## Risks

  - 风险 1：过度合并，把用户的新任务误当成修改旧任务。
      - 控制方式：只有当前状态是 awaiting_confirmation 且输入解析到明确字段修改时才合并。
  - 风险 2：数量中文表达解析不全。
      - 控制方式：复用现有中文数字解析 parse_ref_index 思路，扩展为通用 1-20 数量解析。
  - 风险 3：影响确认后的重新发起任务。
      - 控制方式：如果输入包含新的完整采集主题和关键词，则按新任务重新分类，不合并旧 payload。
  - 风险 4：LLM 与本地正则结果不一致。
      - 控制方式：确认态下优先使用本地字段级解析；LLM 只用于新任务分类，不用于覆盖完整 payload。

  ## Test Plan

  - 复现原问题：
      - 帮我采集 推荐上海平价川味火锅的笔记
      - 种草引流涨粉 给热爱美食的人看
      - 采集1条就行
      - 期望确认页关键词仍是“推荐上海平价川味火锅”，采集数量为 1。
  - 数量修改：
      - 确认页后输入 改成3条
      - 期望只更新 total_count=3。
  - 直接确认：
      - 确认页后输入 确认
      - 期望行为不变，进入采集执行。
  - 新任务覆盖：
      - 确认页后输入 帮我采集北京烤肉笔记
      - 期望按新任务重新进入参数确认，不沿用旧关键词。
  - 回归：
      - python -m py_compile workspace\xhs\workspace_entry.py
      - corepack pnpm smoke:xhs-local-project-package