主要分为一下6个阶段,具体的数据内容需要根据业务在处理。
一、数据收集
推荐格式(高到低排序):
1、.txt / .md :纯文本格式,语义清晰,没有多余的格式符号,最容易被AI理解和切分。
2、.doc:能够很好地保留标题、段落等结构信息,方便后续提取。
3、.html:天然的DOM层级结构(如<h1>, <p>, <table>)非常适合程序化提取章节和内容。
不推荐格式:
1、.pdf:虽然常见,但极易包含复杂的排版、图片、表格嵌套,直接提取文本容易导致内容错乱。
2、.ppt:内容多为短语和图像,缺乏连贯的上下文,不适合作为主要的知识来源。
3、.jpg/.png:需要通过OCR技术提取文字,准确率和效率依赖于算法,且无法直接获取图像中的结构化信息(如表格)。
二、数据清洗
原始数据中往往包含大量对语义理解无益的“噪音”,必须在向量化前清除。
核心任务:
去除冗余信息: 删除页眉页脚、广告、版权声明、无意义的特殊字符和乱码。
统一术语和格式:将同义词统一(如“番茄”和“西红柿”),规范标点符号,统一为中文或英文标点。
处理特殊内容:
表格: 将图片格式的表格转换为Markdown或CSV等结构化文本,并保留表头。
图片: 对包含关键信息的图片,使用OCR提取文字并合并到相邻段落;对于展示类图片,可利用多模态模型生成文字描述。
pdf转文本、图片内容ocr识别为文本、表格内容转文本等等。
三、数据结构化
将清洗后的数据组织成AI易于理解的格式。以水果知识库举例,Markdown 是一个不错的选择,因为它能清晰地定义层级和属性。
采用层级标题: 使用 #, ##, ### 来明确文档结构,如一级标题是水果名称,二级标题是“外形特征”、“营养价值”等。
属性键值对: 对于“成熟时间”、“种植区域”等固定属性,使用 属性名: 属性值 的格式,清晰明了。
列表化信息: 将并列的信息(如主要品种、口感特点)用列表形式呈现。
下面以水果知识库举例:
错误案例(纯文本,结构混乱):
存在问题:所有信息混杂在一起,AI难以精准定位和区分不同维度的知识。
苹果是一种常见水果,颜色有红有绿,大小不一,富含维生素C,一般在秋季成熟,山东和陕西是主要产区。苹果的品种很多,比如红富士、嘎啦果。
香蕉是一种常见水果,颜色多为金黄,形状呈弯月形,富含钾元素和膳食纤维,一般全年均可成熟,海南、广东、广西是主要产区。香蕉的品种很多,比如香芽蕉、小米蕉。
正确案例(Markdown,结构清晰):
###苹果
颜色:常见红色、绿色、黄色
大小:直径约69厘米
成熟时间:秋季(8月10月)
主要种植区域:山东、陕西、甘肃
主要品种:红富士、嘎啦果、花牛苹果
营养价值:富含维生素C、膳食纤维和钾。
###香蕉
颜色:未成熟为青色,成熟后呈金黄色
大小:单根长度约1525厘米
成熟时间:全年均可成熟上市
主要种植区域:海南、广东、广西、云南
主要品种:小米蕉、皇帝蕉、巴西蕉
营养价值:富含钾元素、膳食纤维与多种碳水化合物
优点:结构一目了然,每个知识点都独立且带有明确的标签,极大地方便了后续的检索和分块。
四、数据分块
将结构化的长文本切分成大小合适的块(Chunk),是RAG系统性能的关键。分块的目标是保持每个块的语义完整性。
分块策略:
1、按结构边界切分:优先在标题、段落等自然边界处切分,而不是简单地按字符数硬切。对于水果知识库,可以按每种水果或每个属性章节进行切分。
2、设置重叠区:在相邻的两个块之间设置一定的重叠内容(如50-150个字符),可以有效防止关键信息在切分点被截断,保证语义的连续性。
3、控制块大小:推荐每个块的大小在300-512个Token之间,既能保证信息密度,又不会因过长而稀释语义。
数据分块示例
假设我们有上面“正确示例”中关于苹果的Markdown文本。
错误示例 (固定长度硬切):
设定每100个字符一切,可能会在“主要种植区域: 山东、”这里切断,导致第一个块信息不全,第二个块开头没有上下文。
正确示例 (按语义切分):
将每个二级标题(#### 苹果)下的所有内容作为一个完整的块。这样,关于“苹果”的所有属性信息都在同一个语义块内,检索时能一次性获得完整上下文。
数据分块的方式,如下图Dify默认的分段标识符是“\n\n”可能不准,我们在文本里可以使用“####”分隔作为分段标识符
为解决长文本表示问题,RAG系统普遍采用分段策略:
1、固定长度分块
简单按字符/词数分割(如256token一段)
优点:实现简单;
缺点:可能切断语义连贯性。
2、基于内容的分段
按段落、标题等自然边界分割使用文本结构分析算法识别最佳分割点。
3、重叠分块:
相邻分块保留部分重叠内容(如10%重叠)减少边界信息丢失,提高检索连贯性。
4、层次化分块
多粒度分块(小节、段落、句子级别)适应不同粒度的查询需求。
五、数据标注
为每个数据块(Chunk)附加元数据(Metadata),相当于给它贴上标签,可以实现更精准的过滤和检索。
标注建议:
1、来源信息: 记录数据块的来源文档、页码等,便于溯源。
2、内容标签: 为数据块打上内容相关的标签,如水果类别、属性类型、营养价值等。
3、结构化信息: 将关键信息(如问题、标题)作为独立的元数据字段存储。
数据标注示例
在向量化存储时,每个数据块可以是一个包含文本和元数据的对象。
错误示例 (仅有文本):
{
"text": "苹果...富含维生素C...秋季成熟..."
}
正确示例 (文本 + 元数据):
{
"text": "- **颜色**: 常见红色、绿色、黄色\n- **大小**: 直径约6-9厘米...",
"metadata": {
"source": "水果百科全书.md",
"fruit_name": "苹果",
"attribute_type": "外形特征",
"tags": ["水果", "仁果类", "秋季水果"]
}
}
优点:当用户提问“哪些秋季水果是红色的?”时,系统可以先通过tags和attribute_type快速过滤,再在少量数据中进行语义匹配,准确率和效率都更高。
六、向量化并验证、维护
完成嵌入后需要反复测试数据的召回是否正确,并不断调整数据,数据也需要维护,如一些过期的数据需要删除,老旧的回答需要更新等等。
其他资料:
嵌入式模型排行榜(embed model LeaderBoard):
https://huggingface.co/spaces/mteb/leaderboard
| 维度 | 本地知识库 | 模型微调 | Agent |
|---|---|---|---|
| 核心目标 | 补充实时 / 领域知识 | 适配特定任务或风格 | 自主完成复杂任务 |
| 实现方式 | 检索 + 提示工程 | 本地数据集 + 调整模型参数 | 任务规划 + 工具调用 |
| 数据依赖 | 需要高质量知识库 | 需要标注 / 领域数据 | 依赖工具 API 和交互环境 |
| 更新成本 | 低(直接修改知识库) | 高(需重新训练模型) | 中(调整工具链或提示词) |
| 典型场景 | 实时问答、文档查询 | 专业领域生成、风格定制 | 自动化流程、多步骤任务 |
1万+

被折叠的 条评论
为什么被折叠?



