为什么 ChatGPT 不断截断你的写作:名为 Truncation 的隐藏 AI 系统以及我们如何阻止它
Source: Dev.to
隐藏的 AI 系统——截断(Truncation)
每个主流的 AI 写作工具(ChatGPT、Claude、Gemini、Copilot)都会在系统层面运行一种行为,悄悄地把你的内容截短。它从不征求许可,也不发出警告,只是把被缩短的输出呈现出来,好像没有缺失任何内容一样。
我们是如何发现的
在使用 AI 辅助创作一部 30 章节、114,000 字的小说时,我们注意到大约在第 12 章时,原本应该有约 6,000 字的场景只剩下约 1,500 字。详细的对话被压缩成类似 “他们长时间讨论了情况” 的单句摘要,原本计划的角色戏份也完全消失。
没有错误信息或警告——只有看似完整的章节。但字数却讲述了不同的故事:我们要求 5,000 字的章节,却只收到约 1,400 字。
模型输出限制
AI 模型有两个容量限制:
| 模型 | 最大输出 Token 数 | 约等于字数 |
|---|---|---|
| GPT‑4 Turbo | 4,096 | ~3,000 |
| GPT‑4o(标准版) | 4,096 | ~3,000 |
| GPT‑4o(长输出,仅 API) | 64,000 | ~48,000 |
| GPT‑5 | 128,000 | ~96,000 |
| Claude 3 Haiku / Sonnet / Opus | 4,096 | ~3,000 |
| Claude 3.5 Sonnet | 8,192 | ~6,100 |
| Claude Opus 4.6 | 64,000 | ~48,000 |
| Gemini 1.5 Pro | 8,192 | ~6,100 |
| Gemini 2.5 Pro(默认) | 8,192 | ~6,100 |
| Gemini 2.5 Pro(最大,API) | 65,536 | ~49,000 |
如果你让任何标准 AI 模型写一章 5,000 字的内容,绝大多数模型都无法在一次响应中交付。当请求超过模型的输出上限时,截断会自动激活。
元数据可见性
当通过开发者 API 触发截断时,响应会包含一个元数据字段,指示被截断的情况:
- OpenAI:
finish_reason: "length" - Anthropic:
stop_reason: "max_tokens" - Google:
finishReason: "MAX_TOKENS"
在网页界面(ChatGPT、Claude、Gemini)中,这些元数据被隐藏,用户无法得知内容已丢失。
实用的缓解措施
- 对每次输出进行字数统计。
- 自行将长请求拆分成更小的块。
- 让 AI 确认它到底交付了多少内容。
- 使用 “从[精确引用]继续”,而不是模糊的 “继续”。
- 留意那些用摘要句子取代真实内容的情况。
Bulletproof Writer v3.1 中的截断防御
在小说创作的经历之后,我们在自己的 AI 写作工具中内置了一套防御系统,称为 截断防御(Truncation Defense)。它分为多个层面运行:
- 预检计算——在开始写作前估算请求的内容是否能在模型的输出容量内。
- 分块协议——将超大请求拆分为经过计算的片段,并使用明确的续写标记,避免出现空白、重复或摘要桥接。
- 零容忍执行——指示 AI 绝不悄悄截断、压缩、摘要或缩短创意内容。
- 截断检测——每次输出后,将实际字数与预期字数对比,若有不足立即标记。
如果你使用 AI 写作的文本长度超过约 3,000 字,极有可能已经因为截断而丢失内容。问题不在于它是否发生,而在于你在不知情的情况下已经失去了多少。
Bulletproof Writer v3.1 将截断防御与 90 多条 AI 写作输出完整性规则一起提供。