用书生·浦语写中文长报告,先定切分策略再喂全文

文章导读
把一份几十页的中文报告整篇丢给书生·浦语,常见的结果是中段内容被跳过、章节之间语气不一致、同一个概念前后换了好几个词。可复现的处理顺序是三步:先在原文里标出章节和语义边界,再给每一段配上同一份全文摘要逐段送入,最后按原文顺序拼回并逐项核对衔接。切分粒度不要凭感觉,用原文的标题层级、段落主题和表格范围来定。
📋 目录
  1. 在报告原文里标出天然的章节与语义边界
  2. 估算每段文本长度并对照模型单次可接收的长度
  3. 给每一段补上统一的上下文说明再送入
  4. 把分段输出按原顺序拼回整篇并检查衔接
A A

把一份几十页的中文报告整篇丢给书生·浦语,常见的结果是中段内容被跳过、章节之间语气不一致、同一个概念前后换了好几个词。可复现的处理顺序是三步:先在原文里标出章节和语义边界,再给每一段配上同一份全文摘要逐段送入,最后按原文顺序拼回并逐项核对衔接。切分粒度不要凭感觉,用原文的标题层级、段落主题和表格范围来定。

长中文报告不适合一次性喂给书生·浦语:模型对中段的注意力会衰减,各段之间也没有共享上下文,输出容易出现漏段、人称漂移和术语不统一。可以先按标题层级切成章,再按语义段落和表格边界细分,每段携带同一份全文摘要与位置说明,逐段生成后按原文顺序拼接,核对标题编号、术语、人称和交叉引用。适用于目录清晰的中文报告;目录混乱的原文需要先人工整理出目录再切。

在报告原文里标出天然的章节与语义边界

切分的目标是让每一段自己能读懂,同时不切断同一个论点的上下文。原文里通常有三类边界可以直接用,不需要另造切分规则。

  • 标题层级:一级标题(“第一章”“一、”)和二级标题(“1.1”)之间的切换就是天然切点。判断标准是换标题即换主题,且该标题下的内容能独立成篇地生成。一般切到二级标题就够用;更深的编号列表不单独切,除非这一段明显长于其他同级段落。
  • 语义段落:没有标题的正文,按“一个完整论点、一组数据、一个流程环节”切。识别信号是主题句、空行,以及“但是”“此外”“综上”这类转折词出现的位置。判断标准:把切点两侧互换顺序后论述会断裂的地方,就是边界。
  • 表格:整张表尽量不切开,表头和表体一起送。跨页表或宽表可以按行分块,但每一块都要重复表头,否则模型会把第二块的行当成没有列名的新内容。

假设一份约三十页、四个一级章节的中文调研报告,按上面的规则可以切成这样:片段 0 是封面、摘要和目录,只用来生成全文摘要,不单独出正文;片段 1 是第一章“行业现状”,含 1.1、1.2 和一张市场规模表;片段 2 是第二章“问题分析”的 2.1 到 2.3;片段 3 是第三章“方案设计”的 3.1 和 3.2,其中 3.2 带两张表,拆成两段、每段各带表头;片段 4 是第四章“实施计划”加结论。切完后把片段编号和原标题列成一张对照表,后面拼接时直接按它核对。

用书生·浦语写中文长报告,先定切分策略再喂全文

估算每段文本长度并对照模型单次可接收的长度

中文长度有一个保守的估算方式:按 1 个汉字约 1 个 token 来估,实际分词结果以所用模型的分词器为准。数长度时不要用“页数”,用字符数更稳,Word 字数统计里的“字符数(不计空格)”比较接近可送入的文本量。把每段的字符数与模型的单次上下文上限相减,还要再留出期望输出的长度——输入和输出共用同一个窗口,输入占满就没有空间生成答案。

超长时的处理顺序建议是:先判断属于结构性超长还是冗余超长。报告里常见重复的背景介绍、可省略的附录清单、口水过渡段,属于冗余,先压缩成一句摘要或直接删掉;压缩之后仍然超预算,再按语义边界继续拆段。这个顺序不要反过来,先拆会把同一个论点的上下文切散,模型写出来的每段都像是新开的话题。下面这段脚本可以在切分阶段先看一遍每段有多长,替换文件路径即可运行。

用书生·浦语写中文长报告,先定切分策略再喂全文
import re
from pathlib import Path

text = Path("report.md").read_text(encoding="utf-8")
paras = [p.strip() for p in re.split(r"\n\s*\n", text) if p.strip()]
for i, p in enumerate(paras):
    n = len(re.sub(r"\s", "", p))
    print(i, n, p[:24].replace("\n", " "))

给每一段补上统一的上下文说明再送入

分段之后,每一段都不知道其他段写了什么,所以要在送入前补一段统一的说明。这段说明至少要包含四个字段:任务目标(这一段要产出的东西)、全文摘要(由片段 0 生成,各段共用同一份,不要每段重写)、当前段位置(第几章共几章,上一段结尾是什么,下一段开头是什么)、输出格式(标题层级、语气、禁止事项)。下面是一段可以直接套用的写法,方括号里的内容按实际替换。

任务目标:为一份中文行业调研报告生成第 2 章“问题分析”的正文初稿,保持正式书面语。
全文摘要:[60-120 字,概括全文四章的逻辑线,各段共用同一份]
当前段位置:第 2 章,共 4 章;本段覆盖 2.1 到 2.3。上一章结尾是行业现状数据,下一章开头进入方案设计。
输出格式:只输出本段正文,从二级标题开始;不改写其他章节;原文没有的数据不要新增,不确定的写成“待核”。
本段原文:
[粘贴片段 2 的原文]

“上一章结尾是什么、下一章开头是什么”这两句很关键,它让模型在写本段最后一句时知道该往哪个方向收,拼接时才不会出现断层。全文摘要必须各段一致,否则同一份报告在不同片段里会得到不同口径的定位。

用书生·浦语写中文长报告,先定切分策略再喂全文

把分段输出按原顺序拼回整篇并检查衔接

拼接顺序按原文顺序,不按生成时间顺序。拼之前先比对一次片段编号与原文标题列表,确认没有缺段、没有多段,再逐项检查衔接。

  • 标题编号是否连续:1.1 之后应该是 1.2,而不是跳到 1.3。
  • 术语是否统一:同一概念在全篇是否用了同一个词,比如“用户”和“客户”不要混用。
  • 人称与语气是否统一:全篇是否保持同一叙述人称,敬语和时态是否一致。
  • 交叉引用是否还成立:“如前所述”“见第三章”在拼接后指向的内容是否还存在。
  • 数字与单位是否一致:同一指标的单位、小数位和统计口径是否前后相同。
  • 是否重复:相邻片段的开头和结尾有没有重复写同一段过渡。

回修时不要重跑整篇,改动越小越好。发现断裂,只重跑相邻两段,把上一段的结尾和下一段的开头一起放进上下文说明,要求只补过渡句;发现重复,标出重复区间,保留信息更全的一段,另一段改成一句引用;发现术语漂移,把术语对照表加进统一说明,重跑受影响的片段。每次只改一个片段,改完立刻重新拼接并再走一遍上面的检查点,避免改动扩散到其他段。