实践方案

自动分段输出解决方案

问题背景

Hermes 在输出长内容时会遇到 length limit 限制,导致输出被截断。用户希望实现"遇到长度限制时自动分段输出"。


核心结论

分段输出应该是工作习惯,而不是依赖工具自动触发。

原因: 1. 真正的瓶颈在模型 API 层的 max_tokens,Hermes 无法在输出中途捕获 2. Python 工具需要手动调用,无法覆盖所有场景 3. 最有效的方式是把分段意识内化为工作习惯


解决方案组成

方案一:SOUL.md 规则(已生效)

位置: ~/.hermes/SOUL.md

内容:

**复杂任务自动拆分。** 当任务满足以下任一条件时,立即使用 delegate_task 或 todo 拆分,不要硬撑:

- 需要调用 5+ 个工具
- 涉及多个独立子任务
- 可能产生大量输出(文件分析、数据处理、多步骤流程)
- 用户说"又输出限制了"、"继续"这类话

拆分原则:宁可多拆,不可硬撑。拆小了只是多几步,撑爆了从头再来。

效果: 每次 Hermes 启动都会加载,指导行为


方案二:auto-segment-output Skill(已创建)

位置: ~/.hermes/skills/software-development/auto-segment-output/SKILL.md

触发条件:

必须立即分段的情况: 1. 系统提示:[System: Your previous response was truncated by the output length limit] 2. 用户反馈:用户说"输出限制"、"继续"、"分段"、"拆开"、"length limit" 3. 预判超长:内容超过 3000 字符 4. 工具输出限制:read_file 返回大量内容、terminal 输出过长

必须主动预判并分段的情况(不要等截断): 5. 生成文章/文档:用户要求"生成MD文件"、"写篇文章"、"保存为文档" 6. 分析/解释复杂系统:用户要求"详细介绍"、"全面解释"、"详细说明" 7. 代码生成:需要生成超过 100 行的代码 8. 文件内容输出:需要展示文件完整内容且文件超过 50 行 9. 多步骤任务:任务包含 5+ 个独立步骤或章节 10. 用户要求"结合"或"整合":需要把多个内容合并输出时

判断标准: 如果不确定是否需要分段,就分段。宁可多拆,不可硬撑。

分段策略:

  1. 按章节/模块拆分
  2. 按段落拆分(每段 5-8 个段落)
  3. 按文件拆分

执行方式:

  1. 直接分段输出:每段开头说明"这是第X部分,共Y部分"
  2. 使用 write_file 分段写入:先写第一部分,再用 patch 追加
  3. 使用 delegate_task 并行处理

方案三:Python 自动分段工具(可选)

位置: /Users/lvy/claudecode/qiyeweixin/src/auto_segment_retry.py

功能: - LengthLimitHandler 类:检测长度限制错误并自动分段重试 - auto_segment_retry() 函数:便捷函数 - execute_code_with_auto_segment() 函数:针对 execute_code 的适配器

局限性: - 需要手动调用 - 只适用于 execute_code 场景 - 无法覆盖 write_file、直接输出文本等场景

适用场景: - 在 Python 代码中执行可能产生长输出的操作 - 需要在代码层面自动处理分段


方案对比

方案 类型 效果 推荐度
SOUL.md 规则 行为指导 已生效,指导所有行为 ⭐⭐⭐⭐⭐
auto-segment-output Skill 明确规则 已创建,详细触发条件和策略 ⭐⭐⭐⭐⭐
Python 工具 代码工具 需手动调用,场景有限 ⭐⭐

最佳实践

1. 主动预判

不要等系统截断,提前判断内容长度: - 用户说"生成MD文件" → 立即预判需要分段 - 用户说"详细介绍" → 立即预判需要分段 - 内容超过 3000 字符 → 立即分段

2. 分段输出工作流

1. 预判任务会产生长输出
   ↓
2. 主动说"这个内容较长,我分段输出"
   ↓
3. 第一段输出(控制在 2000-3000 字符)
   ↓
4. 保存到文件(用 write_file)
   ↓
5. 后续段落用 patch 追加
   ↓
6. 每段完成后确认

3. 使用工具组合


实际案例

案例1:生成文章并保存

错误做法:

用户:把之前的回答保存为MD文件
助手:[一次性输出 8000 字] → 被截断

正确做法:

用户:把之前的回答保存为MD文件
助手:好的,这篇文章较长,我分段保存。

[用 write_file 写入第一部分]
[用 patch 追加第二部分]
[用 patch 追加第三部分]

完成!文件已保存到 /path/to/file.md

案例2:详细介绍复杂系统

错误做法:

用户:详细介绍一下 Hermes 记忆系统
助手:[一次性输出 6000 字] → 被截断

正确做法:

用户:详细介绍一下 Hermes 记忆系统
助手:好的,这个系统有三层架构,我分段介绍:

## 第一部分:系统架构概览
[内容...]

(第一部分完成,继续第二部分?)

配置调整(可选)

如果问题是模型 max_tokens 太小,可以调整:

# 查看当前配置
hermes config | grep max_tokens

# 修改配置(如果支持)
hermes config set model.max_tokens 16000

注意: 这只是治标不治本,真正有效的是养成分段习惯。


总结

核心原则:分段输出是工作习惯,不是应急措施。

三道防线: 1. SOUL.md:宏观指导,养成拆分意识 2. Skill:具体规则,明确触发条件和策略 3. Python 工具:代码层面的兜底方案

效果: - SOUL.md 已生效 - Skill 已创建 - 规则已完善(新增"生成文章/文档"等触发条件)

下一步: - 多次实践,形成肌肉记忆 - 遇到长输出任务时,立即预判并分段 - 宁可多拆,不可硬撑

#Hermes#分段输出#SOUL.md#Skills#长内容