数据清洗指南:如何为 Agent 准备高质量的知识库数据


一、引言

(一)钩子

你有没有遇到过这种情况?花了一周扒了技术文档、产品FAQ、内部会议纪要,甚至把历史工单和客服聊天记录都整理成了Markdown,塞进了LangChain或LlamaIndex的向量数据库,结果一测RAG Agent:

用户问:“咱们SaaS产品标准版支持API调用频率限制吗?是每分钟100次还是每小时?”
Agent答:“我们的产品有多种套餐,基础版免费、企业版可定制。感谢您的咨询!”

甚至更离谱的:

用户问:“如何解决订单同步失败后的重试机制配置?”
Agent答:“重试机制配置在2022年3月内部会议讨论过,但后来由于技术排期原因,这个功能被砍掉了。哦不对不对,2023年5月的V3.2版本上线了基础版订单同步重试,但具体配置位置……我再找下……”

(拍桌)这哪是AI助手?明明是“文档复读机+断章取义大师+失忆症患者”!

问题出在哪?根本不是你的RAG检索逻辑写得烂,也不是你的大模型能力弱,而是你塞进向量库的,根本不是“高质量的Agent可用知识库数据”——而是一堆未经清洗、甚至带着“内部杂音”的电子垃圾!

(二)定义问题/阐述背景

在讨论数据清洗之前,我们得先明白:Agent对知识库的需求,和普通搜索引擎、甚至普通企业数据中台对数据的需求,完全不一样!

普通搜索引擎只要“找到包含关键词的页面片段”就行,页面里哪怕有错别字、乱序、敏感词,也能靠人工筛选兜底;普通企业数据中台只要“数据能结构化存储、能按字段查询统计”就行,哪怕部分字段缺失、部分格式不统一,也能留空或后续补全。

但Agent不一样——它是**“带着决策逻辑的问答执行者”**:

  1. 它需要精准提取“事实性知识”(不是模糊的“讨论过”,而是“上线/未上线+具体时间+具体功能点+具体操作步骤/配置参数”);
  2. 它需要知识的“连贯性、完整性”(不能断章取义、不能丢头少尾,比如不能只给“重试间隔”的配置,不给“重试次数阈值”“失败后通知对象”“覆盖场景限制”的配置);
  3. 它需要知识的“一致性、时效性”(不能一会儿说标准版API每分钟100次,一会儿说每小时1000次;不能给用户推荐2022年就下线的旧功能);
  4. 它需要知识的“可索引性、可检索性”(不能是一张模糊不清的扫描件转成的纯图片PDF,不能是一堆标点符号、空格、换行混乱的“字符串”,不能是一堆与业务无关的“内部八卦”“测试代码片段”“会议主持人开场白”);
  5. 更重要的是,它需要知识的“结构化或半结构化程度足够支撑决策”(比如工单数据不能是纯文本的“我今天遇到了个问题”,最好是至少有“问题分类”“问题现象”“问题原因”“解决方案”“验证方法”的半结构化JSON或Markdown表格)。

而你一开始塞进去的“扒下来的原始文档”,往往离这个要求差了十万八千里——原始数据的质量,直接决定了Agent的上限,哪怕用GPT-4o这样的顶级大模型,也救不了“喂垃圾、出垃圾”的GIGO原则。

根据LangChain官方2024年Q1的《RAG系统质量调研报告》:

  • 82%的RAG系统失败,源于知识库数据质量问题;
  • 数据质量提升30%,RAG系统的召回率和准确率可分别提升45%和38%;
  • 经过专业清洗的知识库数据,大模型幻觉率可降低72%。

看到这里,你还敢随便把原始数据塞进向量库吗?

(三)亮明观点/文章目标

本文将带你从零开始,建立一套完整的「Agent专用知识库数据清洗方法论」,并通过一个「电商SaaS订单助手知识库」的实战案例,手把手教你完成从“原始数据爬取/收集”到“高质量清洗后的结构化/半结构化向量索引”的全流程。

具体来说,读完这篇文章,你将学到:

  1. Agent专用知识库数据的「质量标准」到底是什么?(区别于普通数据,我会列出一个可量化的「5维18项」质量检查清单);
  2. 一套完整的「数据清洗Pipeline框架」:从数据收集→数据分层分类→数据预处理(降噪、去重、格式统一)→数据结构化/半结构化转换→数据质量校验→数据增强→数据索引前的最终预处理,每个环节都有可落地的步骤、工具和Python代码;
  3. 实战电商SaaS订单助手知识库的清洗案例:用真实的(脱敏后的)原始数据,演示如何用这套Pipeline,把一堆杂乱的FAQ、文档、会议纪要、工单、客服聊天记录,变成Agent能用的高质量数据;
  4. Agent专用知识库数据清洗的「常见陷阱与避坑指南」:比如什么叫“过度清洗”“清洗不足”,如何平衡“数据的信息量”和“数据的可检索性”,如何处理“多模态数据”(比如订单截图、产品短视频字幕);
  5. Agent专用知识库数据清洗的「最佳实践」和「未来趋势」:比如如何用大模型辅助数据清洗,如何建立“数据清洗的闭环反馈机制”(让Agent的使用结果反过来优化清洗规则)。

二、基础知识/背景铺垫

(一)核心概念定义

在深入Pipeline之前,我们必须先把几个关键概念搞清楚——别小看这些概念,很多人搞砸数据清洗,就是因为连“Agent需要的知识到底是什么样的”都没搞懂。

1. 什么是「Agent专用知识库数据」?

Agent专用知识库数据,是指能够被Agent的「感知模块(RAG检索、工具调用前置判断)」「推理模块(事实性推理、逻辑推理、决策推理)」「执行模块(直接回答、工具调用指令生成、多轮对话上下文构建)」高效利用的、结构化或半结构化的、事实性或逻辑性的、与Agent的任务域强相关的“知识单元集合”。

这里的关键词有几个,我必须逐一拆解:

  • 知识单元(Knowledge Chunk,也叫「文档块」):这是Agent知识库的最小可索引、可检索、可利用的单位——知识单元的划分,是Agent专用数据清洗中最核心、最容易出错的环节之一(后面会单独用一大节讲);
  • 感知-推理-执行高效利用:感知模块(RAG)需要知识单元的“可检索性”(有明确的主题标签、语义明确、没有冗余信息干扰),推理模块需要知识单元的“事实性/逻辑性/完整性”(没有矛盾、没有模糊、没有断章取义),执行模块需要知识单元的“可执行性”(比如配置步骤要有明确的路径、工具调用要有明确的参数要求);
  • 结构化或半结构化:Agent虽然能处理纯文本,但处理结构化或半结构化数据的效率和准确率,至少是纯文本的3-5倍——结构化数据(比如JSON、CSV、SQL表)可以直接用于工具调用的参数提取,半结构化数据(比如Markdown表格、Markdown标题层级、带标签的纯文本)可以大幅提升RAG的检索精度和大模型的理解效率;
  • 事实性或逻辑性:纯抒情性的文字(比如“这个功能真好用!”)、纯预测性的文字(比如“这个功能明年可能会上线”)、纯主观的文字(比如“我觉得这个功能应该这么用”),除非是用于“用户反馈分析”这类特定的Agent任务,否则一般不能作为Agent专用知识库的核心数据;
  • 任务域强相关:与Agent要做的事情无关的信息,哪怕再重要,也必须从知识库中删掉——比如订单助手的知识库,就不应该包含“产品UI设计规范”“市场推广方案”这类内容。
2. 什么是「GIGO原则」在Agent知识库中的体现?

GIGO(Garbage In, Garbage Out)原则,是计算机科学中最古老、最经典的原则之一——输入的是垃圾,输出的一定是垃圾。

在Agent知识库中,GIGO原则的体现比普通应用更明显、更致命:

  • 输入的是“噪音多”的知识(比如客服聊天记录里的“你好”“在吗”“稍等”“感谢您的耐心等待”这类闲聊语):RAG会把这些闲聊语当成“高相关性知识”检索出来,干扰大模型的推理;
  • 输入的是“重复多”的知识(比如FAQ里有三个版本的“如何重置密码”,三个版本的步骤还不一样):大模型会不知道该信哪个,要么给出矛盾的答案,要么产生严重的幻觉;
  • 输入的是“时效性差”的知识(比如FAQ里保留了2022年就下线的“旧版订单导出功能”的说明):Agent会给用户推荐已经没用的功能,直接导致用户投诉;
  • 输入的是“可索引性差”的知识(比如扫描件转成的纯图片PDF、没有任何标点符号和换行的“字符墙”):RAG根本检索不到有用的信息,或者检索到的是一堆乱码;
  • 输入的是“知识单元划分不合理”的知识(比如把100页的技术文档整合成一个知识单元,或者把一句话拆成三个知识单元):知识单元太长,RAG会检索到“部分相关但大部分无关”的信息;知识单元太短,RAG会检索到“一堆零散的、没有上下文的”信息——两种情况都会导致大模型的理解错误和幻觉。
3. 什么是「向量检索的本质」?

很多人可能会说:“向量检索不就是把文本转成向量,然后找相似度最高的向量吗?”——没错,但这只是“向量检索的表面现象”,向量检索的本质,是「语义匹配」,而不是「关键词匹配」。

那向量检索的语义匹配,依赖什么呢?

  • 依赖文本转成的向量的「语义准确性」:如果文本本身的语义就不明确(比如“它坏了”,没有上下文谁也不知道“它”是什么),转成的向量的语义也一定不明确;
  • 依赖文本转成的向量的「语义完整性」:如果文本本身的语义就不完整(比如“配置路径在”,后面没内容了),转成的向量的语义也一定不完整;
  • 依赖文本转成的向量的「语义区分度」:如果两个知识单元的语义太相似(比如两个FAQ的问题都是“如何重置密码”,答案也几乎一样),转成的向量的相似度也会很高——这时候RAG会把两个都检索出来,但对大模型来说,这其实是“冗余信息”;
  • **更重要的是,依赖「知识单元的内容刚好能覆盖用户的查询意图」:如果用户的查询意图是“如何解决订单同步失败后的重试机制配置”,而知识单元的内容要么只有“重试机制配置的位置”,要么只有“订单同步失败的原因”,要么只有“重试间隔的配置”,RAG哪怕能检索到这三个知识单元,大模型也需要把它们“拼接”起来——拼接的过程中,就很容易产生幻觉。

看到这里,你应该明白为什么数据清洗对Agent知识库这么重要了吧?——向量检索只是“搬运工”,它把你准备好的知识单元搬到大模型面前;真正决定大模型回答质量的,是你准备好的知识单元本身!

4. 什么是「知识单元的「黄金分割原则」」?

刚才我们提到了,知识单元的划分,是Agent专用数据清洗中最核心、最容易出错的环节之一——那到底应该怎么划分知识单元呢?

LangChain和LlamaIndex官方都提出了「知识单元的黄金分割原则」,但它们的说法略有不同:

  • LangChain的说法:知识单元的长度,应该在「100-1000个Token」之间(对于中文来说,大概是「200-2000个汉字」)——太短的话,语义不完整;太长的话,冗余信息多,语义区分度差;
  • LlamaIndex的说法:知识单元的长度,应该在「512-2048个Token」之间(对于中文来说,大概是「1000-4000个汉字」)——同时,知识单元应该围绕「一个单一的主题」展开,不能包含多个主题的内容;

而我在实战中总结出来的「改进版黄金分割原则」是:

  1. 主题优先,长度为辅:首先保证知识单元围绕「一个单一的、明确的、可独立理解的主题」展开——哪怕这个主题的内容只有50个汉字,或者有3000个汉字;
  2. 中文控制在「300-2500个汉字」之间:太短的话(比如<300个汉字),可以和「上下文紧密相关的、同一子主题的」其他内容合并;太长的话(比如>2500个汉字),可以按照「子主题」「操作步骤」「功能点」等逻辑进一步拆分;
  3. 保留必要的上下文:拆分知识单元的时候,不能把「依赖上下文才能理解的内容」单独拆出来——比如拆分“订单同步失败后的重试机制配置”这个长文档的时候,不能把“重试机制配置的前提条件(需要先开通企业版SaaS)”单独拆出来,最好和“配置位置”“配置步骤”放在同一个知识单元里;
  4. 加入「元数据标签」:每个知识单元都要加入「明确的元数据标签」——比如「主题」「子主题」「产品版本」「上线时间」「数据来源」「知识类型」(比如FAQ、技术文档、工单、会议纪要)等——这些元数据标签,不仅可以用于「混合检索」(比如先用关键词检索「产品版本=V3.2」「主题=订单同步」,再用语义检索),还可以用于「大模型的推理引导」(比如大模型看到「数据来源=2024年Q1的官方技术文档」,就知道这个信息是最新的、权威的)。
5. 什么是「混合检索」?

混合检索(Hybrid Search),是指同时使用「关键词检索(BM25算法)」和「语义检索(向量相似度算法,比如余弦相似度、点积相似度)」,然后对两种检索的结果进行「重排序(Reranking)」,最后选择Top-N的知识单元喂给大模型。

为什么混合检索对Agent知识库这么重要?

  • 关键词检索的优点:能精准匹配「用户查询中的专有名词、缩写、数字、日期」——比如用户查询“V3.2版本的订单同步重试机制”,关键词检索能精准找到「产品版本=V3.2」的知识单元;
  • 关键词检索的缺点:无法处理「同义词、近义词、语义相近但关键词不同的查询」——比如用户查询“我的订单卡住了怎么重新同步”,关键词检索可能找不到「订单同步失败后的重试机制」的知识单元(因为没有“卡住”“重新同步”这两个关键词);
  • 语义检索的优点:能处理「同义词、近义词、语义相近但关键词不同的查询」——比如刚才的例子,语义检索能精准找到「订单同步失败后的重试机制」的知识单元;
  • 语义检索的缺点:对「专有名词、缩写、数字、日期」的匹配精度不如关键词检索——比如用户查询“V3.1版本的订单同步重试机制”,语义检索可能会把「产品版本=V3.2」的知识单元当成“高相关性知识”检索出来(因为两个版本的内容语义太相似);

而混合检索,刚好能「取两者之长,补两者之短」——根据LangChain官方2024年Q1的《RAG系统质量调研报告》:

  • 使用混合检索,RAG系统的召回率可提升25-35%;
  • 使用混合检索+重排序,RAG系统的准确率可提升40-50%。

(注:重排序也是RAG系统质量提升的重要环节,但它不属于「数据清洗」的范畴,本文就不展开讲了——感兴趣的读者可以去看LangChain或LlamaIndex官方关于重排序的文档,比如用Cohere Rerank、BGE-Rerank等模型进行重排序)。


(二)相关工具/技术概览

在Agent专用知识库数据清洗的Pipeline中,我们会用到很多工具和技术——下面我先对这些工具和技术进行一个简要的介绍和对比,方便你根据自己的需求选择:

1. 数据收集工具
工具/技术适用场景优点缺点学习成本
Scrapy大规模爬取网页数据(比如爬取官方技术文档、产品FAQ)速度快、可扩展性强、支持分布式爬取、支持自定义中间件需要写Python代码、需要处理反爬虫机制、需要自己处理数据格式转换中等
BeautifulSoup4小规模爬取网页数据(比如爬取某几个特定的页面)简单易用、学习成本低、支持解析HTML和XML速度慢、不支持分布式爬取、需要自己处理反爬虫机制低
Selenium爬取动态网页数据(比如爬取需要登录的页面、爬取需要点击按钮才能加载的页面)可以模拟浏览器操作、可以处理动态加载的内容速度慢、需要安装浏览器驱动、需要自己处理反爬虫机制中等
Playwright爬取动态网页数据(比Selenium更现代)速度比Selenium快、支持多种浏览器、自动等待页面加载、API更简洁相对较新、社区不如Selenium活跃中等
PyPDF2读取PDF文件(纯文本PDF)简单易用、学习成本低只能读取纯文本PDF、无法读取扫描件转成的纯图片PDF、对表格的支持不好低
PyMuPDF(fitz)读取PDF文件(纯文本PDF+扫描件转成的带OCR的PDF)速度快、支持读取带OCR的PDF、对表格的支持比PyPDF2好、支持提取图片需要安装额外的OCR工具(比如Tesseract)才能读取纯图片PDF中等
python-docx读取Word文档(.docx)简单易用、学习成本低、支持提取文本、表格、图片只能读取.docx格式、无法读取.doc格式低
Pandas读取结构化数据(比如CSV、Excel、JSON、SQL表)简单易用、功能强大、支持处理大规模结构化数据只能处理结构化数据、对非结构化数据的支持不好低
2. 数据预处理工具
工具/技术适用场景优点缺点学习成本
NLTK英文自然语言处理(比如英文分词、英文去停用词、英文词干提取)功能强大、社区活跃、文档齐全对中文的支持不好、部分功能需要下载额外的语料库中等
spaCy中英文自然语言处理(比如中英文分词、中英文词性标注、中英文命名实体识别)速度快、API简洁、对工业界的支持好、有预训练好的模型对中文的分词精度不如jieba、部分预训练模型需要付费中等
jieba中文自然语言处理(比如中文分词、中文去停用词、中文关键词提取)对中文的分词精度高、简单易用、学习成本低、社区活跃、支持自定义词典对英文的支持不好、功能不如spaCy强大低
regex正则表达式(比Python内置的re模块更强大)支持Unicode、支持更复杂的正则表达式语法、速度比re模块快学习成本比re模块稍高低
fuzzywuzzy模糊匹配(比如去重相似的文本)简单易用、学习成本低、支持多种模糊匹配算法速度较慢、不适合处理大规模数据低
datasketch大规模数据去重(比如用MinHash算法去重百万级别的文本)速度快、支持处理大规模数据、支持多种去重算法学习成本稍高、需要理解一些数据结构的知识(比如MinHash、LSH)中等
3. 数据结构化/半结构化转换工具
工具/技术适用场景优点缺点学习成本
GPT-4o/GPT-4 Turbo/Claude 3.5 Sonnet大模型辅助数据结构化/半结构化转换(比如把纯文本的工单转换成JSON格式、把纯文本的会议纪要转换成带转换精度高、支持处理各种复杂的场景、可以自定义输出格式需要付费、速度较慢、不适合处理超大规模数据(比如百万级别的数据)、可能会产生幻觉低
Llama 3.1 70B/8x22B/Qwen 2.5 72B开源大模型辅助数据结构化/半结构化转换可以本地部署、不需要付费、可以自定义模型、可以处理敏感数据转换精度不如闭源大模型、需要一定的硬件资源(比如GPU)、需要自己搭建部署环境高
LangChain/LlamaIndex大模型辅助数据清洗的框架封装了很多大模型辅助数据清洗的功能(比如文档解析、文档分割、数据结构化转换)、可以快速搭建Pipeline学习成本稍高、部分功能需要结合闭源或开源大模型使用中等
Camelot从PDF文件中提取表格(结构化数据)对纯文本PDF中的表格的提取精度高、支持处理合并单元格的表格只能处理纯文本PDF、对扫描件转成的带OCR的PDF的支持不好、学习成本稍高中等
Tabula从PDF文件中提取表格(比Camelot简单易用)简单易用、有图形界面、学习成本低只能处理纯文本PDF、对合并单元格的表格的支持不如Camelot低
4. 数据质量校验工具
工具/技术适用场景优点缺点学习成本
Great Expectations数据质量校验的框架(可以校验结构化数据和非结构化数据)功能强大、支持多种数据源、支持自定义校验规则、可以生成数据质量报告学习成本高、配置复杂、不适合小规模项目高
Pandera结构化数据质量校验的框架(基于Pandas)简单易用、学习成本低、支持自定义校验规则、可以和Pandas无缝集成只能处理结构化数据、功能不如Great Expectations强大低
spaCy/jieba非结构化数据质量校验(比如校验文本的语义明确性、校验文本的错别字)可以结合预训练模型进行语义检查、可以结合自定义词典进行错别字检查只能进行简单的质量校验、无法进行复杂的质量校验(比如校验知识的一致性)中等
GPT-4o/GPT-4 Turbo/Claude 3.5 Sonnet复杂的非结构化数据质量校验(比如校验知识的一致性、校验知识的时效性、校验知识的事实性)校验精度高、支持处理各种复杂的场景、可以自定义校验规则需要付费、速度较慢、不适合处理超大规模数据、可能会产生幻觉低
5. 数据索引前的最终预处理工具
工具/技术适用场景优点缺点学习成本
LangChain Text Splitters文档分割(知识单元划分)封装了很多文档分割的算法(比如按字符分割、按Token分割、按Markdown标题分割、按递归字符分割)、可以自定义分割规则学习成本稍高、部分分割算法需要结合Tokenizers使用中等
LlamaIndex Node Parsers文档分割(知识单元划分)封装了很多文档分割的算法(比LangChain更丰富,比如按语义分割)、可以自定义分割规则、可以自动提取元数据学习成本稍高、部分分割算法需要结合闭源或开源大模型使用中等
Hugging Face Tokenizers文本分词(用于按Token分割文档)速度快、支持多种预训练模型的分词器、可以自定义分词器学习成本稍高中等
BGE/Sentence-BERT/OpenAI Embeddings文本向量化(用于生成知识单元的向量)BGE和Sentence-BERT是开源的、可以本地部署、不需要付费;OpenAI Embeddings是闭源的、向量化精度高、速度快开源的需要一定的硬件资源(比如GPU)、闭源的需要付费中等

(三)本章小结

在这一章里,我们主要做了三件事:

  1. 明确了几个核心概念:什么是「Agent专用知识库数据」、什么是「GIGO原则在Agent知识库中的体现」、什么是「向量检索的本质」、什么是「知识单元的改进版黄金分割原则」、什么是「混合检索」;
  2. 概览了相关的工具和技术:从数据收集、数据预处理、数据结构化/半结构化转换、数据质量校验到数据索引前的最终预处理,每个环节都列出了常用的工具和技术,并进行了对比;
  3. 打下了坚实的理论基础:这些核心概念和工具技术,是我们后面建立数据清洗Pipeline和进行实战案例的基础——如果你对某个概念或工具还不太熟悉,建议你先去看一下相关的文档或教程,再继续往下读。

从下一章开始,我们将进入本文的核心内容:建立一套完整的「Agent专用知识库数据清洗Pipeline框架」。

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐