用 Agnes-2.5-Flash 写长文总断在半路,先固定分段与续写规则

文章导读
让 Agnes-2.5-Flash 写两三千字长文,写到一半停住,或者从第二段开始重复第一段,通常不是模型“写不动了”,而是三件事里有一件先到了边界:单次输出长度上限、上下文窗口被历史内容占满、指令里没有明确“接着往下写”的接口。判断顺序建议反过来:先把分段与续写规则固定成一套能重复执行的流程,再看断点是否还停在同一个位置。断点随段落内容变化,多半要往上下文和指令上查;断点固定在某个长度附近反复出
📋 目录
  1. 一 记录每次停住的位置和现象
  2. 二 把长文拆成带依赖关系的段落
  3. 三 写一条能接上前文的续写指令
  4. 四 用同一批输入回放验证连贯性
A A

让 Agnes-2.5-Flash 写两三千字长文,写到一半停住,或者从第二段开始重复第一段,通常不是模型“写不动了”,而是三件事里有一件先到了边界:单次输出长度上限、上下文窗口被历史内容占满、指令里没有明确“接着往下写”的接口。判断顺序建议反过来:先把分段与续写规则固定成一套能重复执行的流程,再看断点是否还停在同一个位置。断点随段落内容变化,多半要往上下文和指令上查;断点固定在某个长度附近反复出现,更可能是输出上限。

长文写不完,先减少变量:固定大纲段、正文段、续写段的分工,每段开头带上前一段的结束句与已确认要点;续写指令里写清引用哪一句、不许重复什么、本段覆盖哪些要点。然后用同一主题、同一批输入回放一遍,逐段核对人称、术语和时间线。这套做法能把输出上限、上下文溢出、指令歧义三类原因分开,但具体阈值仍要以你所用客户端的配置和日志为准,换模型版本或参数后需要重跑。

记录每次停住的位置和现象

先别急着改提示词。把现在这一版原样重跑三次,记录停住的位置,目的是把“偶发”和“稳定复现”分开。偶发的截断通常和生成长度设置、采样参数、服务端排队有关,改分段没太大意义;每次都断在同一段附近,才值得去动结构。

记录字段建议固定成这几项:停在第几段第几句;断点形态,最后一个字符是句号、逗号还是半句话;同一提示词三次重跑的结果是否一致;客户端里设置的输出长度上限(字段名按你的接入方式替换,常见是 max_tokens 一类)。

# 截断记录模板(每次填一行)
run | 停止位置    | 断点形态     | 客户端输出上限 | 备注
----|-------------|--------------|----------------|------
1   | 第2段第7句  | 断在逗号后   | max_tokens=... |
2   | 第2段第7句  | 断在逗号后   | 同上           |
3   | 第3段第1句  | 断在句中     | 同上           |

粗判:
- 三次停在同一句、断点形态接近 -> 先查输出长度上限
- 停点逐次前移、越写越短       -> 先查上下文是否被历史内容占满
- 停点飘忽、每次都能写完一段   -> 先查指令里有没有段落边界

如果客户端能看到请求日志,顺手把每次请求带上的历史消息条数也记下来。历史消息越积越多,长文写到后半段被截掉一部分的可能性就越高,这一点和模型本身关系不大。

把长文拆成带依赖关系的段落

分段的目的是让每次提交都能独立成立,同时不丢前文信息。建议固定三类段落:大纲段、正文段、续写段。大纲段只产出主题、读者、结构(3-5 个一级要点)和术语表,不写正文,后面所有段落都从这里取“已确认要点”;正文段一次只写一个大纲要点,篇幅显式写明;续写段承接上一段结尾,只写本段要点,不重述已经写过的内容。

每段开头的衔接头不建议省略,它比正文本身更容易决定连贯性。一个可用的骨架:

[已确认要点]
- 主题:...
- 读者:...
- 术语:A=...,B=...(全篇统一,后续不改写)
- 已完成:第1节(...)、第2节(...)

[上一段结束句]
“………”(原样粘贴,不改写)

[本段任务]
只覆盖大纲第3个要点:...
篇幅:约 600 字。

把这段内容放在每次请求的开头,正文要求放在后面。大纲一旦确认就冻结,不要一边写一边改结构,否则续写段会按新结构走,前面几段就对不上了。

写一条能接上前文的续写指令

续写指令要解决两个具体问题:不要重复已经写过的内容,也不要另起一个话题。写法上建议把约束拆成四块,顺序固定:引用上一段最后一句原文;列出不可重复的内容;限定本段要覆盖的要点,最好只写一个主要点加一两个支撑点;写明大致篇幅和结尾停在哪里。

你在续写一篇中文技术长文。已完成部分的最后一句是:
“[粘贴上一段最后一句]”

请从这句话之后直接接着写,不要重述这句话,也不要重新开头。

本段只覆盖:[要点3:分段提交时如何保留上下文]
不可重复的内容:
- 已在第1节讲过的截断三类原因
- 已用过的“记录三次重跑”例子
- 已定义术语:大纲段、正文段、续写段(保持原词,不要换说法)

要求:
- 篇幅约 500-600 字,分 2-3 个自然段
- 人称保持“你”,不要切换成“我们”
- 结尾停在本要点讲完,不要提前写下一节
- 不要输出“小结”“综上所述”这类收尾段

如果续写段还是从第一句开始复述,通常是“引用上一段最后一句”这一块被压缩掉了,或者客户端把前面的历史截断了。可以先单独发一条只带衔接头和一句续写要求的短请求,确认衔接头有没有被模型读到,再决定是不是要调整历史消息的携带方式。

用同一批输入回放验证连贯性

规则改完不要直接拿去写新文章,用原来那个主题重跑一遍,输入尽量保持一致:同一份大纲、同一批要点、同一组参数。回放时只做核对,不做改写。

  • 人称:全文是否统一为同一种人称,有没有中段切成“我们”
  • 术语:同一个概念前后是否用同一个词,有没有出现同义替换
  • 时间线:叙述顺序是否被续写打乱,有没有先讲结果再讲原因的倒插
  • 接缝:每段第一句能否和上一段最后一句读通,去掉衔接头后是否还成立
  • 重复:有没有整段复述、重复举例
# 回放核对表
段号 | 与上段读通 | 人称 | 术语一致   | 时间线 | 断裂位置    | 归类
----|-----------|------|-----------|--------|-------------|------
1   | -         | 你   | 是        | 正序   | -           |
2   | 通        | 你   | 是        | 正序   | 第2段第5句  | 衔接头缺失
3   | 不通      | 我们 | 否(B改名)| 倒插   | 段首        | 术语未冻结

回放时把仍然断裂的位置记下来,注明段号、句号和归类。断裂集中在换段第一句,先回去补衔接头;断裂出现在段落中后部,多半是本段要点给得太宽,模型自己扩写了分支。

验证的边界要说清楚:这套回放只能证明在你这套客户端配置和这批输入下长文能连着写完,换模型版本、换参数、换长度上限都需要重跑。如果回放三次仍然在同一个长度附近停住,先去看客户端的输出长度上限,而不是继续改提示词。