_file-output-guard
目标
- 创建文件必须使用
create_file工具,禁止 HERE 文档。 - 大文件输出必须分段写入同一文件,避免会话输出过大导致失败。
适用范围
- 任何创建新文件的操作。
- 任何可能产生超长输出的内容(例如生成长文档、大型配置、长列表等)。
必须遵循的规则
1) 创建文件规则
- 必须使用
create_file创建新文件。 - 禁止使用 HERE 文档(如
cat > file << 'EOF')。 - 禁止用终端命令创建内容文件(除非用户明确要求)。
⚠️ 关键原则:提前识别,不事后补救
- 在创建文件时,立即评估内容大小。若预计内容 > 5KB,直接采用"分段创建"策略
- 禁止等到 API 调用失败或会话超限后才改为分段。应该在生成前就预判并主动分段
- 评估标准:参考
_session-safety中的超长阈值参考表(< 5KB 直接创建,5KB-20KB 建议分段,> 20KB 必须分段) - 若不确定大小,宁可分段,不可赌
2) 大文件分段写入规则
当内容可能超出单次回复或工具限制时:
- 先创建文件(第一段内容)使用
create_file。 - 后续内容分段追加:使用
apply_patch将新段落追加到同一文件末尾。 - 每段写入后提供简短确认,不在聊天中重复输出大段正文。
- 分段编号与续写标记:
- 每段开头写明
[Part X/Y](未知总数可用[Part X/?])。 - 续写时删除上一段的分段标记,并在文件末尾追加新的分段标记与内容。
- 续写时必须带上上一段的"最后一行"作为上下文锚点。
- 每段开头写明
3) 分段写入操作示例
首次创建:
create_file({
filePath: "/path/to/file.md",
content: "[Part 1/?]\n第一段内容..."
})
后续追加(示意):
*** Update File: /path/to/file.md
@@
既有末尾内容
+[Part 2/?]
+第二段内容...
检查清单
- 新文件是否通过
create_file创建? - 是否避免使用 HERE 文档?
- 大文件是否分段输出并持续写入同一文件?
- 是否避免在聊天中重复输出大段内容?
- 是否包含分段编号与续写标记?
与其他技能的关系
- 与
_context-ack配合:在"已启用技能"中标注该约束已生效。 - 与
_instruction-guard配合:在读取指令后执行文件输出约束。