本章节介绍 GC-QA-RAG 智能问答系统的文档切片原理,即如何将原始文档的知识点切片后存入向量数据库。

1. 原始思路

将整个文档作为输入,交由大语言模型自动生成问答对(QA Pairs),以支持后续知识检索和问答系统的构建。

## 任务要求
提取下面文档中的知识点为 QA 问答对,按照指定格式输出。
{Content} ## 输出格式
[{"Question":"string","Answer":"string"}]

然而,在实际应用中我们发现该方案存在显著局限性。具体表现为:

短文档处理问题

当处理仅包含 1-2 句话的简短文本(如产品功能说明、API 简要描述)时,模型倾向于生成超出原文信息范围的问答对,出现信息编造现象。例如,对"支持多种数据格式"这样的简单描述,模型可能虚构出具体格式列表等原文未提及的内容。

长文档处理瓶颈

对于技术白皮书等长篇文档,模型输出的问答对数量存在明显天花板效应:

  • 稳定输出区间:10-15 个 QA 对
  • 超出阈值后出现:
    • 问题重复(相同知识点不同表述)
    • 信息选择性丢失(忽略重要内容细节)
    • 答案偏离(过度泛化或补充外部知识)

这些局限性直接影响了知识库的完整性和准确性,促使我们深入解决两个核心问题:

  1. 短文档精准控制

    如何建立约束机制,确保生成的问答对严格限定在原文信息范围内,杜绝信息编造?

  2. 长文档完整覆盖

    如何突破数量限制,确保长篇文档中的每个关键细节都能被准确提取并转化为问答对,实现无遗漏的知识点覆盖?

2. 短文档处理策略:基于句子计数的动态控制

针对短文档,我们提出一个强假设:每个句子对应一个独立知识点,可以被转化为一个 QA 对。由此设计一套基于句子数量预估生成 QA 数量的方法。

核心流程如下:

  1. 使用中文句子分割器将文档拆分为句子列表;
  2. 计算总句数 N
  3. 动态设置期望生成数量 QA_Count = N,并注入提示词中;
  4. 模型根据明确指示生成不少于 QA_Count 的 QA 对。

示例提示词模板如下:

single_group_template = """
需要针对文档生成不少于{{QA_Count}}个问答对...
文档内容:{{Content}}
"""

中文文本处理优化:

考虑到中文技术文档中可能存在代码片段或特殊符号(如“.”出现在变量名中),我们在分句时做了以下处理:

  • 主要使用“。”、“?”、“!”等作为断句标志;
  • 对包含特殊字符的语句进行保留不切分处理;
  • 自动过滤空白句与无效段落。

该策略显著提升了短文档的信息抽取完整性与准确性。

3. 长文档处理方案:两阶段记忆-聚焦对话机制

对于长文档,直接截断会导致信息缺失,而一次性全文输入又容易造成注意力扩散、生成内容片面。我们提出一种创新性的两阶段记忆-聚焦式对话机制

其核心思想是:

在第一轮对话中模拟“长期记忆”,向模型植入全文背景;在第二轮只发送当前片段,引导其聚焦于局部内容进行 QA 提取。

实现方式如下:

第一阶段:知识记忆(用户指令)

multi_group_template1 = "请记住下面的技术文档..."

第二阶段:聚焦生成(用户指令)

multi_group_template2 = "提取当前文档片段的 QA 问答对..."

构造完整的对话历史记录:

messages = [
{"role": "user", "content": self.prompt_config.multi_group_template1}, # 全文记忆
{"role": "assistant", "content": self.prompt_config.assistant_response}, # 响应确认
{"role": "user", "content": self.prompt_config.multi_group_template2} # 局部生成
]

处理流程总结:

  1. 将文档按句子分组(默认每组 10 句);
  2. 对每一组执行上述两阶段对话;
  3. 合并所有分组的结果,形成最终的 QA 库。

这种机制不仅解决了上下文覆盖问题,还提高了模型在局部内容中的专注度与生成质量。

4. 详细实现

(1)文本预处理流程

步骤 描述
HTML 解析 使用 BeautifulSoup 提取 class="main__doc" 的正文内容
句子分割 按照中文标点(句号、问号等)进行分句,并过滤空白句
动态分组 默认每组 10 个句子,若某组不足 5 句则合并至前一组

(2)统一输出格式

每个分组的输出均为标准化 JSON 格式,包含两个关键字段:

{
"Summary": "介绍活字格的布局类型及特点",
"PossibleQA": [
{
"Question": "活字格支持哪些布局方式?",
"Answer": "支持响应式布局、固定布局等三种方式"
},
...
]
}

(3)JSON 提取与错误处理

为应对大模型生成 JSON 时可能出现的格式错误(如引号未闭合、括号不匹配等),我们设计了 extract_qa_object 函数进行容错处理。

  1. 优先提取 JSON 块:尝试从响应中提取被 ```json ... ``` 包裹的标准 JSON 内容;
  2. 强制转换为 JSON 对象:如果未提取到 JSON 内容,就将响应全文当做 JSON,尝试强制解析为 JSON 对象;
  3. 解析失败则回退正则提取:使用正则表达式手动匹配 "Question""Answer" 等字段,构造结构化输出;
  4. 异常捕获:通过 try-except 结构防止模型生成失败导致程序中断;
try:
response = chat_to_llm(prompt)
return extract_qa_object(response)
except Exception as e:
logger.error(f"Error generating QA: {e}")
return {"Summary": "", "PossibleQA": []}

(详细实现可参考开发教程中的相关章节或项目源码。)

5. 功能扩展

除了基础 QA 生成,我们进一步实现了多个实用扩展功能:

1. 摘要生成(Summary)

  • 每个分组生成一个简洁摘要;
  • 存入向量化数据库 payload 字段;
  • 提升检索匹配精度与模型理解效率。

2. 答案扩展(Full Answer)

  • 对关键 QA 对生成更详细的解释;
  • 同样存入向量化数据库 payload 字段;
  • 用于前端展示或辅助模型回答复杂问题。

3. 同义问法扩增(Question Variants)

  • 为每个问题生成多种不同表述;
  • 显著提升检索系统的召回率;
  • 适用于用户提问多样化的场景。

6. 工程建议

维度 推荐值
模型选择 至少 70B 参数规模(如 Qwen2.5-72B)
Temperature 0.7(平衡创造性与严谨性)
Top-P 0.7(控制输出多样性)
最大 token 数 ≥2048(保证输出长度)

️ 注意事项:小模型的知识面小,易产生幻觉,建议在 QA 质量评估中加入人工抽检机制,以评估技术限制。本项目的整体错误率控制在 5%~10%,可供参考。

7. 适用性与扩展性分析

本方案具有良好的通用性与适应性,适用于:

  • 文档类型广泛:技术文档、法律条规、知识百科、FAQ 页面等;
  • 规模弹性良好:受限于模型最大上下文长度(通常 8k~128k tokens);
  • 易于适配扩展:通过修改提示词模版即可支持不同业务需求。

8. 实际应用案例

以下是一个完整的处理流程示例:

# 输入文档
doc = "活字格支持三种布局方式...响应式布局会根据设备尺寸自动调整...固定布局保持像素级精确..." # 分组处理
groups = split_text_into_sentence_groups(doc) # QA 生成
generator = QAGenerator()
result = generator.generate_by_groups(doc, groups) # 输出结果
{
"Summary": "介绍活字格的布局类型及特点",
"PossibleQA": [
{
"Question": "活字格支持哪些布局方式?",
"Answer": "支持响应式布局、固定布局等三种方式"
},
{
"Question": "响应式布局有什么特点?",
"Answer": "会根据设备尺寸自动调整"
}
]
}

该方案融合了句子级处理、上下文记忆、结构化输出、错误控制与功能扩展等多项关键技术,具备良好的通用性与工程实用价值,可有效提升知识检索问答的准确率和用户体验。

葡萄城 AI 搜索地址: https://ai-assist.grapecity.com.cn/

GC-QA-RAG 智能问答系统的文档切片的更多相关文章

  1. 全网最详细中英文ChatGPT-GPT-4示例文档-智能编写Python注释文档字符串从0到1快速入门——官网推荐的48种最佳应用场景(附python/node.js/curl命令源代码,小白也能学)

    目录 Introduce 简介 setting 设置 Prompt 提示 Sample response 回复样本 API request 接口请求 python接口请求示例 node.js接口请求示 ...

  2. 文档转换为pdf格式帮助类

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using Word = M ...

  3. 接口文档管理工具-Postman、Swagger、RAP(转载)

    接口文档管理工具-Postman.Swagger.RAP 转自:http://www.51testing.com/html/10/n-3715910.html 在项目开发测试中,接口文档是贯穿始终的. ...

  4. C#在线预览文档(word,excel,pdf,txt,png)

    C#在线预览文档(word,excel,pdf,txt,png) 1.预览方式:将word文件转换成html文件然后预览html文件2.预览word文件:需要引入Interop.Microsoft.O ...

  5. 文档工具的王者Sphinx

    Sphinx https://www.sphinx.org.cn/ Sphinx是一个工具,可以轻松创建由Georg Brandl编写并根据BSD许可证授权的智能和美观文档 它最初是为Python文档 ...

  6. Android Studio帮助文档的安装及智能提示设置

    初次使用Android Studio,发现其智能提示不能像Visual Studio一样显示系统方法等的详细用途描述.经查找资料,问题原因是未安装SDK Document. 解决办法如下: 1.打开如 ...

  7. ABBYY FineReader 15新增智能PDF文档转换功能

    ABBYY FineReader 15(Windows系统)新增智能PDF文档转换功能,可自动检测导入PDF数字文档的文本层质量,确保转变为可编辑格式后的准确结果:从表单字段和文本框中提取文本,准确保 ...

  8. 加速 Document AI (文档智能) 发展

    在企业的数字工作流中充满了各种文档,包括信件.发票.表格.报告.收据等,我们无法自动提取它们的知识.如今随着文本.视觉和多模态人工智能的进步,我们有可能解锁这些知识,这篇文章向你展示了你的团队该如何使 ...

  9. Hibernate配置文档详解

    Hibernate配置文档有框架总部署文档hibernate.cfg.xml 和映射类的配置文档 ***.hbm.xml hibernate.cfg.xml(文件位置直接放在src源文件夹即可) (在 ...

  10. Solr开发参考文档(转)

    Solr开发文档 Solr 是一种可供企业使用的.基于 Lucene 的搜索服务器,它支持层面搜索.命中醒目显示和多种输出格式.在这篇文章中,将介绍 Solr 并展示如何轻松地将其表现优异的全文本搜索 ...

随机推荐

  1. Vue3组合式API终极指南:从原理到实战,彻底掌握高效开发!

    前言 在Vue3从发布到今天,组合式API已成为现代前端开发的标杆设计模式.本文通过真实项目场景,深度解析组合式API的核心特性,配以完整代码示例,助你彻底掌握企业级Vue应用开发精髓. 一.为什么组 ...

  2. mysql -- 自定义函数及循环结构

    和存储过程类似,区别在于存储过程可以有0个或多个返回,但是函数只能有唯一一个返回值 一般而言,存储过程适合批量插入,批量删除,增删改:函数则用于处理数据,查询某个值. 创建 create functi ...

  3. docker部署ceph集群

    1. 创建Ceph专用网络 sudo docker network create --driver bridge --subnet 172.20.0.0/16 ceph-network 2. 拉取搭建 ...

  4. 冒泡排序(LOW)

    博客地址:https://www.cnblogs.com/zylyehuo/ # _*_coding:utf-8_*_ import random def bubble_sort(li): for i ...

  5. 入门Dify平台:工作流节点分析

    要让智能体在实际应用中表现出色,掌握工作流的使用至关重要.今天,我们将深入探讨Dify平台中的各个节点的功能,了解它们的使用方法以及常见的应用场景.通过对这些节点的全面了解,将能够高效地设计和优化智能 ...

  6. 实现领域驱动设计 - 使用ABP框架 - 领域逻辑 & 应用逻辑

    领域逻辑 & 应用逻辑 如前所述,领域驱动设计中的业务逻辑分为两部分(层):领域逻辑和应用逻辑: 领域逻辑由系统的核心领域规则组成,应用逻辑实现应用特定的用例 虽然定义很明确,但实现起来可能并 ...

  7. Ubuntu给Appimage创建快捷方式

    下载 AppImageLauncher 2.安装 3.选择要运行的Appimage 双击运行即可.他会在home目录下创建一个applications文件夹,并且帮你自动创建快捷方式.

  8. Vite CVE-2025-30208 安全漏洞

    Vite CVE-2025-30208 安全漏洞 一.漏洞概述 CVE-2025-30208 是 Vite(一个前端开发工具提供商)在特定版本中存在的安全漏洞.此漏洞允许攻击者通过特殊的 URL 参数 ...

  9. 【手机】三星手机刷机解决SecSetupWizard已停止

    三星手机恢复出厂设置之后,出现SecSetupWizard已停止的解决方案 零.问题 我手上有一部同学给的三星 GT-S6812I,这几天搞了张新卡,多余出的卡就放到这个手机上玩去了.因为是获取了ro ...

  10. study Python3【4】字符串的判断

    判断类型: result为True和False str = '1122abc' str.isalnum()是数字或者字母 str = 'MDCA' str.isalpha() 是字母 str = '1 ...