context-budget-implementation-plan.md 13 KB

Claude Code 上下文省 token 工作流落地方案

背景问题

截图里的失败不是单次工具报错,而是会话已经背了过多原始资料、读取记录和中间推理。Claude Code 报出:

Input tokens exceed the configured limit of 272000 tokens.

这说明继续在同一会话里点“继续”,大概率还是会失败。技能包需要把“长任务上下文”从聊天窗口里搬到文件和工具里,让 Claude 每轮只读取必要的轻量状态,而不是反复读取所有原始图片、Excel、长 Markdown 和完整历史对话。

落地目标

claude-code-voc-intelligence 增加一套“省 token 长任务工作流”,用于真实采集任务文档、小红书样本整理、客户素材归档、批量图片/Excel/文本分析等场景。

目标效果:

  • 用户可以把大量资料放到工作区,Claude 不会一次读完全部文件。
  • 每轮最多处理 1 个样本单元,例如 XHS-001_1
  • 每个样本单元处理完后,必须写入中间摘要文件。
  • 后续会话只读取任务状态、中间摘要和下一个样本单元,不重复读取原始大文件。
  • 上下文不足时,技能包能主动生成交接摘要,并提示新会话如何继续。
  • 最终报告由多个中间摘要汇总而来,而不是由一个超长会话硬扛到底。

核心设计

采用“原始资料 -> 文件清单 -> 样本单元摘要 -> 总控任务状态 -> 最终报告”的流水线。

flowchart TD
  A["原始资料目录"] --> B["context scan 文件清单"]
  B --> C["sample units 样本单元索引"]
  C --> D["每轮只处理 1 个样本单元"]
  D --> E["unit summary 中间摘要"]
  E --> F["task-state 当前进度"]
  F --> G["handoff 新会话交接摘要"]
  E --> H["final report 汇总文档"]

关键原则:

  • 聊天上下文只放“当前要判断的内容”。
  • 大文件只让脚本读取,Claude 只读脚本生成的轻量摘要。
  • 任务进度写入文件,不依赖会话记忆。
  • 新会话从 task-state 恢复,而不是从聊天历史恢复。

需要新增的文件结构

建议先落在 claude-code-voc-intelligence 技能包内:

claude-code-voc-intelligence/
  docs/
    context-budget-implementation-plan.md
  skills/xiaohongshu-trend-intelligence/references/
    context-budget-workflow.md
  mcp/src/features/context-budget/
    file-manifest.js
    sample-units.js
    checkpoint.js
    handoff.js
  mcp/src/tools/
    context-budget-run.js
  scripts/
    smoke-context-budget.js

安装到工作区后,运行时在客户项目里生成:

.claude/task-state/
  voc-context-state.md
  voc-context-state.json
  handoff.md

outputs/voc-context/
  file-manifest.json
  sample-units.json
  unit-summaries/
    XHS-001_1.md
    XHS-002_1.md
  final/
    真实采集任务文档.md

技术实现模块

1. 文件清单扫描器

作用:先建立资料目录的轻量索引,避免 Claude 直接递归读取全部内容。

建议实现:

mcp/src/features/context-budget/file-manifest.js

输入保持简单:

{
  "rootDir": "docs/真实采集任务文档",
  "taskName": "小红书真实采集任务文档"
}

输出内容:

  • 文件路径
  • 文件类型
  • 文件大小
  • 修改时间
  • 所属样本单元推断,例如 XHS-001_1
  • 是否疑似大文件
  • 是否建议脚本预处理

不在第一步读取图片正文、Excel 全量内容或长 Markdown 全文。

2. 样本单元识别器

作用:把 01-06XHS-001_1XHS-008_8 这类目录识别成可独立处理的样本单元。

建议规则:

  • 优先识别 XHS-\d+(_\d+)?
  • 其次识别一级/二级目录名
  • 允许用户在状态文件里手动修正单元关系
  • 每个单元包含:截图、笔记正文、评论、Excel 行、人工备注、校验材料

输出:

outputs/voc-context/sample-units.json

示例字段:

{
  "unitId": "XHS-001_1",
  "status": "pending",
  "files": [],
  "summaryPath": "outputs/voc-context/unit-summaries/XHS-001_1.md",
  "estimatedRisk": "large-image-set"
}

3. 单元摘要生成器

作用:每轮只处理一个样本单元,并把结果写成结构化摘要。

建议实现:

mcp/src/features/context-budget/sample-units.js

摘要模板:

# XHS-001_1 样本摘要

## 已读取资料

## 账号/笔记信息

## 小红书趋势关键词

## 用户评论与真实顾虑

## 可验证话题方向

## 博主真实度/商业痕迹判断

## 证据片段

## 待复核问题

## 不要重复读取的原始文件

约束:

  • 单元摘要控制在 800-1500 字。
  • 摘要必须引用文件名,但不要复制大段原文。
  • 图片只记录观察结论、截图编号和需要复核的位置。
  • Excel 只读取表头、关键列、与当前单元相关的行。

4. 任务状态与检查点

作用:让新会话知道任务做到哪里,不靠历史聊天。

建议实现:

mcp/src/features/context-budget/checkpoint.js

生成两个文件:

.claude/task-state/voc-context-state.json
.claude/task-state/voc-context-state.md

状态内容:

  • 当前目标
  • 已完成样本单元
  • 正在处理的样本单元
  • 待处理样本单元
  • 已生成摘要文件
  • 禁止重复读取的原始目录
  • 下一步只允许读取哪些文件
  • 汇总报告缺口

voc-context-state.md 要给人看,voc-context-state.json 给工具读。

5. 新会话交接摘要

作用:上下文过大时,直接停止扩读,生成新会话启动提示。

建议实现:

mcp/src/features/context-budget/handoff.js

生成:

.claude/task-state/handoff.md

内容模板:

# 新会话交接摘要

## 当前任务

## 已完成

## 不要重新读取

## 新会话只读取

1. .claude/task-state/voc-context-state.md
2. outputs/voc-context/sample-units.json
3. outputs/voc-context/unit-summaries/

## 下一步

只处理 XHS-002_1,完成后写入对应摘要并停止。

## 可直接复制给 Claude Code 的 Prompt

需要新增的 MCP 工具

建议在 mcp/src/server.js 增加三个工具。入参保持简单,避免让用户理解技术参数。

voc_context_prepare

用途:初始化长任务,扫描目录,生成文件清单、样本单元和任务状态。

输入:

{
  "rootDir": "docs/真实采集任务文档",
  "taskName": "小红书真实采集任务文档"
}

输出:

  • assistantMessage:告诉用户识别出多少样本单元,建议先处理哪个。
  • data.statePath
  • data.sampleUnitsPath
  • nextActions

voc_context_next_unit

用途:读取任务状态,返回下一轮应该处理的单元和允许读取的文件清单。

输入:

{
  "statePath": ".claude/task-state/voc-context-state.json"
}

输出:

  • 下一单元 ID
  • 允许读取的文件
  • 禁止读取的文件
  • 摘要写入路径

voc_context_checkpoint

用途:处理完一个样本单元后,写入摘要、更新任务状态、生成必要的 handoff。

输入:

{
  "unitId": "XHS-001_1",
  "summary": "本轮摘要正文",
  "status": "completed"
}

输出:

  • 更新后的进度
  • 下一个单元
  • 新会话启动提示

CLI 命令设计

为了兼容 Claude Code 工具不可用或客户只会终端的情况,也建议在 claude-voc CLI 增加同款命令:

claude-voc context prepare --root "docs/真实采集任务文档" --task "小红书真实采集任务文档"
claude-voc context next
claude-voc context checkpoint --unit XHS-001_1 --summary "outputs/voc-context/unit-summaries/XHS-001_1.md"
claude-voc context handoff

客户不需要主动使用这些命令,但 Claude Code 可以通过 Bash 调用,作为稳定兜底。

Skill 文档需要加的规则

skills/xiaohongshu-trend-intelligence/SKILL.md 增加“长任务省 token 协议”:

## 长任务省 token 协议

- 如果用户要求处理多个样本目录、批量图片、Excel 或长文档,不要一次读取全部资料。
- 先调用/执行 context prepare,生成文件清单、样本单元和任务状态。
- 每轮最多处理 1 个样本单元。
- 每处理完一个样本单元,必须写入 unit summary,并更新 task-state。
- 后续汇总只能优先读取 unit summary,不重复读取原始大文件。
- 当上下文明显变大、用户说继续多次、或任务超过 3 个样本单元时,先生成 handoff,再建议开新会话。
- 新会话只读取 handoff、task-state、sample-units 和必要的 unit summary。

面向用户的话术

当用户给了大批资料时,Claude 应该这样说:

资料比较多,我会按省上下文方式处理:先建立文件清单和样本单元索引,然后每轮只处理一个样本单元。每个单元处理完都会写入摘要,后续汇总只读摘要,不重复读取原始大文件。

我先处理 XHS-001_1,处理完会停下来给你确认。

当上下文不足时:

当前会话已经接近上下文上限。我已经把进度写入 .claude/task-state/handoff.md。

建议新开一个 Claude Code 会话,并只让它读取 handoff、task-state 和已生成的 unit summary,不要重新读取所有原始图片和 Excel。

新会话启动 Prompt:

继续处理小红书真实采集任务文档,但请控制上下文。

先只读取:
1. .claude/task-state/handoff.md
2. .claude/task-state/voc-context-state.md
3. outputs/voc-context/sample-units.json
4. 已生成的 unit summary

不要重新读取所有 XHS 原始图片、Excel、长文档。
请先告诉我当前进度、缺什么、下一步只处理哪个样本单元。
每次最多处理一个样本单元,处理完写入对应摘要文件后停止。

分阶段实施计划

P0:先用规则和文档止血

改动:

  • 新增 references/context-budget-workflow.md
  • SKILL.md 引用省 token 协议
  • customer-quickstart.mddemo-runbook.md 补充大资料处理话术

收益:不改代码也能显著降低 Claude 一次性读取全部文件的概率。

P1:实现本地文件清单和任务状态

改动:

  • 新增 context-budget-run.js
  • 支持 preparenextcheckpointhandoff
  • 写入 .claude/task-stateoutputs/voc-context

收益:长任务可以跨会话续跑。

P2:接入 MCP 工具

改动:

  • server.js 注册 voc_context_prepare
  • 注册 voc_context_next_unit
  • 注册 voc_context_checkpoint
  • smoke 测试覆盖工具返回的 assistantMessage

收益:Claude Code 插件里可以直接调用工具,不必靠手写 Bash。

P3:增加文件预处理能力

按优先级实现:

  1. Markdown/TXT 分章节摘要。
  2. Excel 只提取 sheet 名、列名、前 N 行和命中当前样本 ID 的行。
  3. 图片只提取路径、大小、尺寸、所属样本,不直接 OCR 全图。
  4. 后续如需要,再接 OCR 或视觉模型,但必须按单元处理。

如果引入依赖,建议:

  • Excel:xlsx
  • 图片尺寸:image-size

第一版也可以先不加依赖,只做路径、大小、扩展名和目录归属。

P4:打包和发布

改动:

  • package.json 增加 smoke 脚本
  • scripts/smoke-package.js 增加 context workflow 检查
  • npm run claude-voc:npm-pack
  • npm run claude-voc:build
  • 升级 npm 版本并发布

验收标准

功能验收:

  • 给一个包含 6 个样本单元、图片、Excel、长文档的目录,prepare 后能生成 sample-units.json
  • Claude 第一轮只处理 1 个样本单元。
  • 处理完会生成 unit-summaries/<unitId>.md
  • task-state.md 能清楚显示已完成、待处理和下一步。
  • 新会话只读 handoff 和摘要,也能继续下一单元。

体验验收:

  • 不再出现“继续”后反复超 token。
  • 不让用户理解复杂参数。
  • 不把 JSON 调试信息直接甩给用户。
  • 不要求用户手动整理 01-06 到 XHS-001 的映射,工具能先自动推断,必要时再让用户确认。

安全验收:

  • 不把 VOC token、npm token 写入状态文件、摘要文件或报告。
  • .claude/task-state 可以进入工作区,但任何 .env.local.npmrc 不进入 git。

推荐优先落地顺序

建议先做 P0 + P1。

原因:

  • 这两个阶段能直接解决截图里的核心问题。
  • 不需要马上引入 Excel/OCR 复杂依赖。
  • 不改变小红书采集接口入参。
  • 后续再把工具挂到 MCP,风险更小。

第一轮实施后,真实工作流会变成:

用户给大资料目录
-> Claude 调 context prepare
-> 生成样本单元
-> Claude 只处理 XHS-001_1
-> 写摘要和 checkpoint
-> 用户确认
-> 下一轮处理 XHS-002_1
-> 最后汇总所有 unit summary

这套方案和当前小红书趋势情报官并不冲突。它是给“资料很多、任务很长、需要跨会话完成”的场景加一层上下文管理能力。