P224 · 上下文管理

写清未完成任务的续接位置

Explicit continuation contract

接口分页原样保存服务游标,文档续写记录最后完整单元,明确区分部分结果与完成。

编辑审核

以下接口响应、指令和输出都是本站编写的教学材料,不是实际服务响应或模型实测结果。

使用场景

任务暂时不能一次完成,但下一次必须从正确位置继续。例如,接口只返回一页记录,或者十二节文档写到第六节时接近响应预算。这两种任务需要不同的续接材料:接口使用服务返回的游标,生成内容使用自己记录的下一完整单元。

开始前分别确认接口的分页约定,或文档的章节清单。下面的字段名和完成判定仅为教学约定,实际调用以接口文档为准。

具体做法

接口分页:

  1. 保存服务原样返回的记录和下一页游标。“游标”是服务提供的续取标记,不是你计算出的页数。
  2. 报告本页返回数和目前已取得的记录数。只有权威响应提供总数时才报告总数、剩余数;否则明确写总数未知。
  3. 按接口规定判断是否还有下一页。有游标时报告部分结果并原样传回;下一次把该值放到接口要求的参数中。
  4. 没有有效续取方式、游标过期或请求失败时,保留已取得的结果,报告无法继续及原因,不编造替代游标。

长文续写:

  1. 先固定章节清单和顺序。每写完一节,记录最后一个完整章节。
  2. 在完整章节后停下,报告实际完成数、已知总数或总数未知,并写清下一节。
  3. 下一次提供清单、续接记录和必要的上一节上下文,从指定章节继续。中断在章节内部时,注明该节未完成,下一次补齐或重写这一节。

反例

接口任务的共同材料:第一页返回 A、B 两条记录,next_cursor="svc:page-2:demo",total=null;教学接口规定 next_cursor=null 才表示末页。用于演示续取的第二页教学响应为 items=[C], next_cursor=null, total=null。两个版本使用同一组响应材料。

整理这个接口的全部记录。拿到 A、B 后把结果写成“已完成”;总数就写 2,下一页游标自行填 C20。

生成任务的共同材料:文档计划为第 1 至第 12 节;第 1 至第 6 节已完整写出,第 7 节尚未开始。

十二节文档已经写到第六节,把交付标记为完成。下一次从头再写,续接位置就使用接口游标 C20。

前者编造总数和令牌,后者把部分文档写成完整并混用接口令牌。两者都会丢失真实的续接状态。

改进写法

接口任务:保留相同的第一页材料,使用下面的指令:

整理接口全部记录。保留第一页的 A、B,记录本页返回 2 条、累计 2 条。
total=null,因此总数和剩余数都写未知。next_cursor 非空,因此状态为部分结果。
原样保存服务返回的 svc:page-2:demo,下一次按接口规定传入 cursor 参数,不改写或自造令牌。
教学续取响应为 items=[C], next_cursor=null, total=null:依据接口末页约定标记完成,累计 3 条,总数仍未由服务提供。
如果真实接口没有有效续取方式或游标失效,报告无法继续,不宣称取齐。

其中 svc:page-2:demo 是教学响应里的示意值;实际任务必须替换为真实服务返回的完整值。接口分页的示意记录为:

第一页:返回 2,累计 2,总数未知,状态=部分
next_cursor=svc:page-2:demo
末页:返回 1,累计 3,总数未知,状态=完成(依据末页信号)

生成任务:保留相同的十二节清单和已完成状态:

继续十二节文档。第 1 至第 6 节已经完整完成;下一单元为第 7 节。
清单:第 1、2、3、4、5、6、7、8、9、10、11、12 节,按此顺序交付。
读取已完成内容以保持术语一致,但输出从第 7 节开始,不重复第 1 至第 6 节。
预算不足时在完整章节后停止,写出实际完成数、最后完整章节和下一章节。
只有第 12 节也完整完成后才标记全部完成。这里的章节标签不是接口游标。

实际套用时提供你的章节标题和已完成文档,替换示例序号。一次暂停的示意输出是 已完成 6/12;最后完整单元=第6节;下一单元=第7节;状态=部分。

为什么这样改

显式的部分状态防止接收者把当前片段误当作全部结果。原样保存服务游标让接口决定下一页;记录完整章节边界让续写明确从哪里开始。把两类材料分开,避免用自己写的标签冒充服务授权的续取令牌。

如何验证

接口检查每次真实响应、传出的游标和累计记录:游标应与服务给出的值完全一致,未知总数没有变成猜测,完成状态有接口末页信号支持。若服务确实给出总数 2,000,且当前累计 20,才能据此报告剩余 1,980;总数缺失时不能这么算。还要按接口约定检查重复记录或遗漏风险。

文档检查原清单与实际章节:续写从第 7 节开始,第 1 至第 6 节没有重新交付;最后完整章节与暂停记录一致。章节缺失、只写了标题或仍在半节中时,不能算已完成。

适用边界

游标可能过期,数据变动也可能影响分页一致性;保存令牌不保证一个稳定的数据快照。末页判定必须来自接口约定。文档续写需要保留清单和必要上下文,单写“继续”不能恢复丢失内容。总数、执行结果和完成状态没有依据时都要保持未知。

原文与版本

如何收录这些方法