W
AI-Wiki
CONCEPT

文档边界标记

定义

文档边界标记 是一种文档组织与标注方法:通过显式声明某个信息块“从哪里开始、到哪里结束”,把原本连续流动的正文切分成边界清晰的模块。

它不要求只能使用一种语法,常见实现方式包括:

  • 用 Markdown 标题层级声明上位结构与子结构
  • 用开始/结束注释包裹一个完整信息块
  • 用特殊分隔符标出某类内容区域

其核心目标不是美化文档,而是让机器在后续切块、索引、检索和组装上下文时,能够更稳定地判断“哪些内容属于同一块知识”。

在本文档中的语境

在本文语境里,文档边界标记主要服务于数据库与数据表说明类知识库建设,重点解决 RAG 中“召回不完整”与“召回内容混杂”这两个问题。

原始问题并不只是“能不能检到相关文本”,而是:

  • 切分过粗时,单个 chunk token 太多,会占用大模型上下文窗口
  • 切分过细时,表说明、字段定义、业务规则、关联关系等上下文容易被拆散
  • 数据库文档往往同时包含多维度内容,若边界不清,检索结果容易把不同模块混在一起

因此,这里的边界标记,本质上是在为“完整召回一块知识内容”创造前提。它与结构化文档标注数据库文档标注 摘要数据库文档分块直接相关。

关键机制

标题层级声明结构

最直接的做法,是用 Markdown 标题层级构建文档骨架,例如:一级标题表示文档主题,二级标题表示主要分类,三级标题表示子类。

典型层次是:

  • 一级标题:仅用于整个文档主题
  • 二级标题:用于主要分类
  • 三级标题:用于次要分类

在实践建议中,标题应简洁明了,长度以 3 到 7 个字为佳,这样既便于人读,也便于系统把标题当作稳定标签。

这种方式的作用,是先给文档建立“天然层级边界”。例如字段定义和业务规则虽然都属于同一主题,但可以被放到不同三级标题下,后续切块时更容易按层级聚合。

用开始和结束标记包裹信息块

当仅靠标题还不足以精确圈定内容范围时,可以为关键信息块显式加上开始与结束标记。常见做法是使用 HTML 注释,例如:

  • 某段字段说明前放置“字段说明开始”
  • 某段字段说明后放置“字段说明结束”
  • 某段样例数据前后分别加“示例数据开始/结束”

这种方法有几个明确特点:

  • 注释本身通常不影响文档可读性
  • 标记名称可以直接表达块的语义,便于系统识别
  • 开始和结束标记必须成对出现,否则边界会变得不可靠

也就是说,文档边界标记不是只声明“这是字段说明”,还要声明“字段说明到这里结束”。只有起止都明确,系统才能稳定识别模块范围。

用特殊分隔符划出语义区块

第三种方式是使用特殊分隔符,例如自定义“字段区块”“规则区块”的起止线。

它的关键要求有两点:

  • 分隔符应尽量选择文档中不会自然出现的形式,避免误判
  • 整个知识库内要保持统一风格,不能一篇文档一个写法

这种方式比标题更灵活,比 HTML 注释更直观,适合在一些正文型资料里快速标出区块边界。

支持系统识别模块范围

文档边界标记 的直接价值,是帮助系统判断一个模块到底覆盖哪些内容。

在数据库说明文档中,常见模块包括:

  • 表说明
  • 业务用途或业务说明
  • 表数据样例解读
  • 字段说明
  • 关联关系
  • 常见查询或规则说明

如果这些内容只是顺序堆在一起,检索系统很难知道某一行字段定义是否仍属于“字段块”,或某段业务解释是否已经进入“关联关系”模块。边界标记提供的就是这种范围判定能力。

典型实践形态

在实践案例中,一个完整的结构化文档会先有总起始标记,再在其内部按模块继续细分。比如:

  • 文档级开始与结束标记,声明整份表文档的范围
  • 表说明块的开始与结束
  • 业务用途块的开始与结束
  • 数据样例块的开始与结束
  • 字段块的开始与结束
  • 关联关系块的开始与结束

这说明边界标记可以有层次:

  • 最外层用于声明整篇主题对象
  • 中间层用于声明模块类别
  • 更细层可用于声明字段块编号、分段范围等

这种层次化标记方式,本质上是在把文档从“可阅读文本”改造成“可解析结构”。

对 RAG 的作用

减少召回内容混杂

在普通描述型文档中,信息通常以自由叙述形式连续出现,没有明显结构边界。这样一来,切块后即使通过关键词或表名召回,也很可能把字段、业务解释、样例数据、关系说明混进同一个 chunk,或者把本来应当一起出现的内容拆开。

边界标记的主要改进正体现在这里:

  • 让切块更容易沿着模块边界发生,而不是在任意字数位置截断
  • 让检索结果更接近“完整模块”,而不是“半截内容”
  • 让后续生成模型收到的上下文噪声更少

因此,它既提升召回完整性,也提升召回准确性。

为上下文压缩提供更干净的输入

RAG 流程中,如果前面的召回 chunk 已经结构清楚、边界明确,那么后面的上下文压缩会更容易工作。

原因在于:

  • 压缩模型更容易判断一个整块是否相关
  • 不相关模块更容易整体丢弃,而不必句子级艰难拆分
  • 同一块中的字段、规则、样例之间语义连续,保留后更不易失真

换言之,文档边界标记虽然属于文档预处理阶段,但它会直接影响后续检索和压缩链路的效果。

支持统一模板化处理

文档边界标记 的另一项重要价值,是支持统一模板化处理。

当多份文档都遵循相同的标题层级、相同的块名称、相同的开始/结束模式时,可以形成稳定模板。这样带来的收益包括:

  • 不同文档之间结构一致,维护成本更低
  • 批量转换脚本更容易实现
  • LLM 更容易学习固定格式并生成一致结果
  • 评估过程也更容易比对缺失项、错位项和边界错误

原文明确提出可以让 LLM 先学习标注模板,再配合 LangChain 脚本做半自动批量转换,其流程包括:

  1. 先让 LLM 学习标注模板
  2. 读取待转换文档清单
  3. 解析文档内容并提交给 LLM
  4. 由 LLM 按模板生成转换后的结构化文档
  5. 调用评估模型评估转换质量
  6. 生成评估报告