分块语义完整性评估方案

项目地址:https://github.com/WiSiW/AI-RAG

摘要

新增“规则检测 + LLM 语义评判 + 人工抽样校准”的评估体系,覆盖 L1、L2、L3 三种粒度。评估只读取现有 chunk、原文和父/邻接上下文,不重新分块;每次运行保存配置快照和 chunk 快照,支持文档级、知识库级查看以及历史版本对比。

评估模型与指标

自动规则指标

  • 边界完整性:检测断句、未闭合引号/括号、截断 Markdown 表格、代码块围栏和异常孤立标题。
  • 源文本覆盖率:将原文按句子、表格行、代码行标准化后,检查 L2 是否覆盖全部源内容;检测遗漏、重复和异常重叠。
  • 粒度合规:L2 目标 512–1024 token;L3 限制长度并检查表格/错误/参数行是否完整;L1 检查摘要长度。
  • 元数据完整性:章节路径、页码、上下文前缀、L3 的 parent_chunk_id、父块和邻块关系。
  • 结构健康度:重复片段率、过度重叠率、空 chunk、标题与正文错位。

LLM 语义指标

统一输出 1–5 分、问题标签、缺失事实和整改建议,按粒度使用不同 Rubric:

  • L2:自包含性、语义完整性、边界自然度、主题一致性、上下文依赖。
  • L1:章节关键事实覆盖、摘要忠实性、代表性和简洁性。
  • L3:原子事实清晰度、事实完整性、父块可还原性、父块/页码元数据是否正确。
  • LLM 输入包含目标 chunk、所属 section 原文、L1 摘要及前后邻块;不得用目标 chunk 自身摘要代替原文证据。
  • 默认复用知识库 enrichment_profile_id,运行请求可覆盖为其他启用的 LLM/增强模型。
  • LLM 输出非法或调用失败时保留规则结果并将运行标记为 partial,不阻塞整次评估。

综合评分

  • L2:边界 20%、源覆盖 25%、自包含 25%、一致性 15%、元数据 15%。
  • L1:关键事实覆盖 40%、忠实性 30%、元数据 20%、简洁性 10%。
  • L3:原子清晰度 30%、事实完整性 25%、父块可还原性 20%、元数据 15%、边界 10%。
  • 综合分为 0–100;文档总分先按粒度求平均,再对三个粒度等权汇总,避免数量更多的 L3 主导结果。
  • 等级:pass >= 80、warn 60–79、fail < 60。
  • 严重问题设置硬上限:L2 源内容丢失或表格/代码结构损坏最高 59 分;L3 缺少父块关联最高 69 分。

运行流程与数据模型

  • Celery 后台任务按文档或知识库执行;流程为提取源内容、规则评分、LLM 批量评判、汇总、抽样人工复核。
  • 每次运行记录 chunk 模式、大小、重叠、粒度筛选、模型、Prompt/Rubric 版本及分块快照;即使后续重新分块,历史结果仍可比较。
  • 新增 chunk_evaluation_runs:范围、模型、状态、进度、配置快照、汇总指标、错误和时间戳。
  • 新增 chunk_evaluation_results:run_id、chunk_id、正文/父块/章节/前缀快照、规则指标、LLM 指标、人工评分、综合分、等级、问题标签和建议。
  • 运行状态为 queued/running/partial/completed/failed;知识库范围内单个文档失败时继续处理其他文档,并记录失败清单。
  • 每个文档默认抽取 min(24, 全部结果) 个样本进行人工审核,按粒度分层且在可用时每层至少 4 个;使用固定随机种子保证可复现。
  • 人工评分不直接改写自动综合分,单独展示 LLM-人工 MAE 和相关性,用于判断 LLM 评判可信度。

API 与页面

  • POST /api/v1/chunk-evaluations:创建运行;参数包括 document_id、knowledge_base_id、granularities、judge_profile_id、llm_enabled。
  • GET /api/v1/chunk-evaluations:运行历史列表。
  • GET /api/v1/chunk-evaluations/{run_id}:汇总、配置快照和状态。
  • GET /api/v1/chunk-evaluations/{run_id}/results:按粒度、等级、问题标签分页查询。
  • PATCH /api/v1/chunk-evaluations/{run_id}/results/{result_id}/review:提交人工 1–5 分、问题标签和备注。
  • GET /api/v1/chunk-evaluations/compare?run_ids=...:比较历史运行的总分、粒度分数和主要问题变化。
  • 新增“分块评估”导航页,支持选择知识库/文档、粒度和评判模型,查看进度与历史运行。
  • 运行详情展示总分、各粒度分数、通过率、问题分布、待审核队列和 chunk 结果表。
  • 结果详情并排展示原文片段、命中 chunk、父块窗口、前后邻块、上下文前缀、规则证据、LLM 理由和整改建议。
  • 文档预览页增加“评估完整性”入口;对比视图展示两个运行的总分差、粒度差、问题增减及最大退化的 chunk。

测试与验收

  • 单元测试覆盖断句、表格/代码截断、元数据缺失、源句子覆盖、异常重复和不同粒度的评分权重。
  • 使用 fake gateway 验证 LLM JSON 解析、粒度 Rubric、批量失败降级为规则结果及 partial 状态。
  • API/任务测试覆盖 queued→running→completed/partial/failed、进度更新、分页筛选和失败文档列表。
  • 验证重新分块或删除 chunk 后,历史评估仍能通过快照展示和比较。
  • 验证人工抽样可复现、评分保存、LLM-人工一致性统计及运行对比。
  • 前端验证运行创建、轮询、结果筛选、人工审核和对比页面,并通过生产构建。
  • 冷启动验收使用至少 30 个分层样本,覆盖 L1/L2/L3、表格、代码、长段落和跨段依赖;L2 源覆盖率必须为 100%,人工与 LLM 总分平均绝对误差目标低于 15 分。

假设与默认值

  • 首版没有现成人工标注集,采用应用内冷启动抽样审核。
  • 评估不修改、不重分块现有索引;原始 DocumentChunk.content 和 chunk_id 保持不变。
  • L2 要求完整覆盖源内容;L1 评估章节级覆盖而非逐字覆盖;L3 只评估其抽取的原子事实,不要求覆盖全部父段。
  • LLM 评判默认开启;无可用模型时允许执行规则-only 运行。
  • 历史运行默认长期保留,由管理员手动删除。

最后更新: 2026年11月03日 15:01