文档边界标记
定义
文档边界标记 是一种文档组织与标注方法:通过显式声明某个信息块“从哪里开始、到哪里结束”,把原本连续流动的正文切分成边界清晰的模块。
它不要求只能使用一种语法,常见实现方式包括:
- 用 Markdown 标题层级声明上位结构与子结构
- 用开始/结束注释包裹一个完整信息块
- 用特殊分隔符标出某类内容区域
其核心目标不是美化文档,而是让机器在后续切块、索引、检索和组装上下文时,能够更稳定地判断“哪些内容属于同一块知识”。
在本文档中的语境
在本文语境里,文档边界标记主要服务于数据库与数据表说明类知识库建设,重点解决 RAG 中“召回不完整”与“召回内容混杂”这两个问题。
原始问题并不只是“能不能检到相关文本”,而是:
- 切分过粗时,单个 chunk token 太多,会占用大模型上下文窗口
- 切分过细时,表说明、字段定义、业务规则、关联关系等上下文容易被拆散
- 数据库文档往往同时包含多维度内容,若边界不清,检索结果容易把不同模块混在一起
因此,这里的边界标记,本质上是在为“完整召回一块知识内容”创造前提。它与结构化文档标注、数据库文档标注 摘要、数据库文档分块直接相关。
关键机制
标题层级声明结构
最直接的做法,是用 Markdown 标题层级构建文档骨架,例如:一级标题表示文档主题,二级标题表示主要分类,三级标题表示子类。
典型层次是:
- 一级标题:仅用于整个文档主题
- 二级标题:用于主要分类
- 三级标题:用于次要分类
在实践建议中,标题应简洁明了,长度以 3 到 7 个字为佳,这样既便于人读,也便于系统把标题当作稳定标签。
这种方式的作用,是先给文档建立“天然层级边界”。例如字段定义和业务规则虽然都属于同一主题,但可以被放到不同三级标题下,后续切块时更容易按层级聚合。
用开始和结束标记包裹信息块
当仅靠标题还不足以精确圈定内容范围时,可以为关键信息块显式加上开始与结束标记。常见做法是使用 HTML 注释,例如:
- 某段字段说明前放置“字段说明开始”
- 某段字段说明后放置“字段说明结束”
- 某段样例数据前后分别加“示例数据开始/结束”
这种方法有几个明确特点:
- 注释本身通常不影响文档可读性
- 标记名称可以直接表达块的语义,便于系统识别
- 开始和结束标记必须成对出现,否则边界会变得不可靠
也就是说,文档边界标记不是只声明“这是字段说明”,还要声明“字段说明到这里结束”。只有起止都明确,系统才能稳定识别模块范围。
用特殊分隔符划出语义区块
第三种方式是使用特殊分隔符,例如自定义“字段区块”“规则区块”的起止线。
它的关键要求有两点:
- 分隔符应尽量选择文档中不会自然出现的形式,避免误判
- 整个知识库内要保持统一风格,不能一篇文档一个写法
这种方式比标题更灵活,比 HTML 注释更直观,适合在一些正文型资料里快速标出区块边界。
支持系统识别模块范围
文档边界标记 的直接价值,是帮助系统判断一个模块到底覆盖哪些内容。
在数据库说明文档中,常见模块包括:
- 表说明
- 业务用途或业务说明
- 表数据样例解读
- 字段说明
- 关联关系
- 常见查询或规则说明
如果这些内容只是顺序堆在一起,检索系统很难知道某一行字段定义是否仍属于“字段块”,或某段业务解释是否已经进入“关联关系”模块。边界标记提供的就是这种范围判定能力。
典型实践形态
在实践案例中,一个完整的结构化文档会先有总起始标记,再在其内部按模块继续细分。比如:
- 文档级开始与结束标记,声明整份表文档的范围
- 表说明块的开始与结束
- 业务用途块的开始与结束
- 数据样例块的开始与结束
- 字段块的开始与结束
- 关联关系块的开始与结束
这说明边界标记可以有层次:
- 最外层用于声明整篇主题对象
- 中间层用于声明模块类别
- 更细层可用于声明字段块编号、分段范围等
这种层次化标记方式,本质上是在把文档从“可阅读文本”改造成“可解析结构”。
对 RAG 的作用
减少召回内容混杂
在普通描述型文档中,信息通常以自由叙述形式连续出现,没有明显结构边界。这样一来,切块后即使通过关键词或表名召回,也很可能把字段、业务解释、样例数据、关系说明混进同一个 chunk,或者把本来应当一起出现的内容拆开。
边界标记的主要改进正体现在这里:
- 让切块更容易沿着模块边界发生,而不是在任意字数位置截断
- 让检索结果更接近“完整模块”,而不是“半截内容”
- 让后续生成模型收到的上下文噪声更少
因此,它既提升召回完整性,也提升召回准确性。
为上下文压缩提供更干净的输入
在 RAG 流程中,如果前面的召回 chunk 已经结构清楚、边界明确,那么后面的上下文压缩会更容易工作。
原因在于:
- 压缩模型更容易判断一个整块是否相关
- 不相关模块更容易整体丢弃,而不必句子级艰难拆分
- 同一块中的字段、规则、样例之间语义连续,保留后更不易失真
换言之,文档边界标记虽然属于文档预处理阶段,但它会直接影响后续检索和压缩链路的效果。
支持统一模板化处理
文档边界标记 的另一项重要价值,是支持统一模板化处理。
当多份文档都遵循相同的标题层级、相同的块名称、相同的开始/结束模式时,可以形成稳定模板。这样带来的收益包括:
- 不同文档之间结构一致,维护成本更低
- 批量转换脚本更容易实现
- LLM 更容易学习固定格式并生成一致结果
- 评估过程也更容易比对缺失项、错位项和边界错误
原文明确提出可以让 LLM 先学习标注模板,再配合 LangChain 脚本做半自动批量转换,其流程包括:
- 先让 LLM 学习标注模板
- 读取待转换文档清单
- 解析文档内容并提交给 LLM
- 由 LLM 按模板生成转换后的结构化文档
- 调用评估模型评估转换质量
- 生成评估报告