W
AI-Wiki
CONCEPT

结构化文档标注

定义

结构化文档标注 是指把原本偏自由描述的业务文档,补充为带有明确层级、内容边界和语义标签的文档形式,使其不仅适合人阅读,也适合机器切分、索引、检索和召回。

它的核心不是“把文档写得更漂亮”,而是让文档在进入知识库前就具备稳定的结构:哪些内容属于主题,哪些属于字段说明,哪些属于业务规则,哪些属于样例、关联关系或查询场景,都能被清楚区分。

RAG 场景中,这种标注直接服务于知识入库与召回质量:当文档被切分成 chunk 后,每个语义块更容易保持完整,不会因为切分过细而丢失上下文,也不会因为切分过粗而把大量无关信息一并送入模型。

在本文语境中的含义

本文语境下的结构化文档标注,主要用于数据库表结构相关的业务文档,尤其适合以下内容:

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

这类文档通常同时包含多种信息维度。如果仍保持普通描述性写法,文档在入库后很容易出现两个问题:

  • 切分过粗:单个 chunk token 过多,占用大模型上下文窗口
  • 切分过细:表说明、字段定义、规则和关系被拆散,导致召回结果不完整

因此,结构化文档标注的目标不是单纯做格式规范,而是让“完整知识内容”能够以适当粒度进入知识库,并在检索时被整体召回。

为什么需要结构化文档标注

数据库业务文档对“完整召回一块知识内容”的要求很高。以表结构解读为例,一个问题往往不只依赖单个字段名,还可能同时依赖:

  • 表的业务定位
  • 字段含义
  • 编码规则
  • 父子层级关系
  • 与其他表的引用关系

如果这些内容在预处理时缺少层级和边界,系统即使检到了表名,也可能只召回到零散字段,无法把关键背景一起带出。

结构化标注的价值主要体现在三个方面:

  1. 精准识别:检索系统更容易识别哪些内容块是字段说明、规则说明或关系说明
  2. 完整性保障:减少信息被错误切断后造成的语义残缺
  3. 一致性维护:不同文档采用统一结构,后续扩展、维护、批量入库都更稳定

关键机制

1. 层级标注

最常见也最实用的做法,是用 Markdown 标题层级建立文档骨架。

典型约束包括:

  • 一级标题用于文档主题
  • 二级标题用于主要分类
  • 三级标题用于次级分类
  • 标题尽量简洁明了,通常 3 到 7 个字较合适

例如一份表结构文档,可以按“表说明—字段定义—业务规则—关联关系”组织。这样做的作用是,切分器或后续处理逻辑可以优先沿着标题边界切块,避免把两个不同语义单元混在一起。

这与 数据库文档分块 密切相关:分块效果不仅取决于 chunk 大小,也取决于原文是否已经提供了天然的结构锚点。

2. 边界标记

仅有标题还不够。对于表格、样例、字段列表、规则块等高价值内容,还需要补充显式的开始与结束标记,让系统知道一段内容的边界在哪里。

常见做法是使用 HTML 注释形式的标记,例如某块内容的 begin 与 end 成对出现。这类标记有几个特点:

  • 不影响文档正常阅读
  • 对机器友好,便于稳定识别
  • 可以强制声明内容块的起止范围
  • 适合和标题层级结合使用

边界标记的关键要求是:

  • 名称简洁明了
  • 风格统一
  • 开始和结束必须成对出现
  • 同一类内容尽量使用同一命名规则

这部分与 文档边界标记 是直接相关的:边界标记不是装饰,而是保障 chunk 完整性的核心手段之一。

3. 语义标记

结构化文档标注不仅要划分边界,还要表达“这块内容是什么”。

例如同样是一段文本,系统需要区分它到底是:

  • 表说明
  • 字段说明
  • 业务规则
  • 样例数据
  • 关联关系

这类语义区分可以通过标题命名、注释标记名或统一分隔符来实现。只要命名一致、结构固定,后续的解析、切分和索引就更容易围绕语义块展开,而不是只按字数硬切。

4. 统一模板

结构化标注强调“统一结构”而不是“每篇文档各写各的”。

对于同类数据库文档,应尽量采用同一套模板,例如固定包含:

  • 表说明
  • 业务用途
  • 数据样例解读
  • 字段说明
  • 关联关系

统一模板的意义在于:

  • 便于批量转换与批量评估
  • 便于后续构建稳定的知识入库流程
  • 便于在不同表之间做横向检索与对比
  • 降低 RAG 召回时的结构不确定性

常见标注方式

标题层级标注法

这是最通用、最容易落地的方法。通过 Markdown 的一级、二级、三级标题,把表级、分类级、子类级内容区分开。

优点是:

  • 简单直接
  • 可读性好
  • 与大多数 Markdown 处理链兼容
  • 适合作为第一层结构骨架

不足是:

  • 只能表达层级,不能精确表达每个信息块的开始和结束
  • 遇到表格、样例数据、长字段列表时,仍可能需要额外边界标记

信息块标记法

这种方法为高价值信息块增加显式 begin/end 标记。特别适合字段说明、样例数据、关系定义等内容。

优点是边界清楚,适合机器识别;缺点是文档会比普通 Markdown 更“工程化”,需要维护命名一致性。

语义分隔符方法

还可以使用特殊分隔符,把字段区块、规则区块等隔开。使用时需要注意:

  • 分隔符不能是文档里本来就会自然出现的普通内容
  • 整个文档库中要保持统一风格

这种方法比 HTML 注释更直观,但对解析逻辑的一致性要求更高。

实践中的典型组成

在数据库表结构文档中,一份经过结构化标注的文档,通常会包含以下组成:

  • 文档级起止标记
  • 表名或主题标题
  • 表说明
  • 业务用途
  • 数据样例解读
  • 字段说明,必要时按多个块拆分
  • 关联关系
  • 文档级结束标记

其中,“字段说明”经常需要单独作为重点块处理,因为它既是高频检索目标,又容易因字段过多而超出单个 chunk 的理想长度,所以常常需要在统一结构下进一步分块。

典型案例:account_acc