RAG(检索增强生成)技术构建垂直领域或个人知识库
利用RAG(检索增强生成)技术构建垂直领域或个人知识库,需通过数据准备、检索优化、生成控制、系统部署四个关键阶段实现。以下是具体实施步骤与技术方案:
一、数据准备:知识库构建
1. 数据收集与清洗
- 数据来源:
- 垂直领域:行业报告、论文、专利、产品手册、客服记录等。
- 个人知识库:笔记(Markdown/Notion)、邮件、聊天记录、网页收藏。
- 清洗方法:
- 去重:使用SimHash或MinHash算法剔除重复内容。
- 过滤:移除低质量文本(如广告、乱码)。
- 结构化:解析PDF/PPT中的表格、图表(使用
PyMuPDF
或pdfplumber
)。
2. 文本分块(Chunking)
- 策略:
- 按逻辑单元分块:
- 论文:按章节分块(摘要、方法、结论)。
- 对话记录:按会话主题分块。
- 重叠分块:相邻块保留20%重叠内容(避免信息割裂)。
- 按逻辑单元分块:
- 代码示例:
from langchain.text_splitter import MarkdownHeaderTextSplitter headers_to_split_on = [("#", "标题"), ("##", "子标题")] markdown_splitter = MarkdownHeaderTextSplitter(headers_to_split_on) chunks = markdown_splitter.split_text(markdown_content)
3. 元数据附加
为每个文本块添加可检索的元数据:
chunk_metadata = {
"source": "产品手册_v2.pdf",
"page": 42,
"keywords": ["安装指南", "故障排查"],
"create_time": "2023-05-10"
}
二、检索优化:精准知识定位
1. 向量化模型选型
场景 | 推荐模型 | 特点 |
---|---|---|
通用垂直领域 | bge-large-zh-v1.5 (中文) |
开源可微调,适配性强 |
多语言知识库 | paraphrase-multilingual-mpnet-base-v2 |
支持100+语言 |
轻量化个人知识库 | all-MiniLM-L6-v2 |
快速检索,内存占用低 |
2. 混合检索策略
- 语义检索:向量相似度(如余弦相似度)。
- 关键词检索:BM25/Algolia(适用于精确术语匹配)。
- 混合加权:
final_score = 0.7 * semantic_score + 0.3 * bm25_score
3. 领域微调检索模型
- 步骤:
- 构建领域相关的(query, positive_doc, negative_doc)三元组。
- 使用对比学习微调:
from sentence_transformers import InputExample, losses train_examples = [InputExample(texts=