大模型速通学习笔记(11)
环境搭建:优先轻量工具,降低入门门槛;数据处理:核心是 “去噪声、保语义、加元数据”,为检索精准度打基础;知识库存储:确保向量与文本关联完整,支持后续快速检索。下半程将聚焦 “在线检索流程搭建、生成优化、系统测试”,完成从 “知识库” 到 “可交互 RAG 系统” 的闭环。
·
RAG 系统搭建流程(上):离线基础工程落地指南
一、搭建核心前提:明确目标与技术选型
RAG 系统搭建的核心是 “围绕场景落地”,前期需先明确目标与工具选型,避免盲目开发:
- 场景目标:确定核心用途(如企业知识库问答、客服咨询、个人笔记检索),明确数据范围(如仅内部手册、含网页资讯)和性能要求(如响应速度、准确率);
- 技术选型原则:新手优先 “轻量、易部署、低成本”,企业级场景侧重 “高并发、可扩展”,核心工具选型聚焦三大模块(下文详细说明)。
二、第一步:环境搭建与工具准备
环境搭建是基础,需完成 “开发环境 + 核心工具” 部署,新手可按以下步骤快速落地:
1. 开发环境配置
- 基础环境:安装 Python 3.8+(兼容性最佳),搭配 PyCharm、VS Code 等开发工具;
- 依赖库安装:通过
pip命令批量安装核心库,关键库及作用如下:- 工具链核心:
langchain(串联全流程)、langchain-community(扩展组件); - 向量处理:
sentence-transformers(开源嵌入模型)、openai(闭源嵌入模型,需 API 密钥); - 向量数据库:
chromadb(轻量本地库)、faiss-cpu(单机海量数据)、pymilvus(企业级分布式库); - 数据处理:
pypdf(PDF 解析)、python-docx(Word 处理)、beautifulsoup4(网页爬取)。
- 工具链核心:
2. 核心工具选型(按场景分类)
| 工具类型 | 新手 / 轻量场景 | 企业级场景 | 核心优势 |
|---|---|---|---|
| 嵌入模型 | Sentence-BERT(all-MiniLM-L6-v2) | OpenAI Embeddings、通义 Embeddings | 轻量模型:免费、本地运行;闭源模型:语义匹配更精准 |
| 向量数据库 | Chroma | Milvus、Pinecone | 轻量库:无需部署,本地启动;企业库:支持亿级数据、高并发 |
| 数据处理工具 | LangChain 内置 Loader(PyPDFLoader 等) | 自定义 Loader+Spark 数据清洗 | 内置工具:快速上手;自定义工具:适配复杂数据格式 |
三、第二步:数据处理全流程(离线核心环节)
数据处理直接决定知识库质量,核心是 “从原始数据到可检索片段” 的转化,分四步落地:
1. 数据采集:聚焦 “相关、权威”
- 采集范围:按场景目标筛选数据源,例如企业知识库场景可采集:
- 内部文档:产品手册(PDF/Word)、规章制度、培训资料、客服对话记录;
- 公开数据:行业报告、官方网页资讯(需合规爬取);
- 采集工具:
- 本地文档:用 LangChain 的
PyPDFLoader(PDF)、Docx2txtLoader(Word)直接读取; - 网页数据:用
WebBaseLoader爬取静态网页,需配置请求头(避免反爬); - 数据库数据:用
SQLDatabaseLoader连接 MySQL/PostgreSQL,通过 SQL 查询提取文本数据。
- 本地文档:用 LangChain 的
2. 数据清洗:去除噪声,优化质量
- 核心目标:剔除无关信息,确保数据准确性与可读性;
- 关键操作:
- 格式统一:将扫描件 PDF 通过 OCR(如
pytesseract)转化为纯文本,Excel 表格提取 “字段名 + 内容” 组合文本; - 噪声过滤:删除页眉页脚、水印、重复段落、特殊字符(如
\n、乱码); - 内容筛选:剔除广告、无意义短句(如 “仅供参考”)、与场景无关的内容(如企业知识库剔除个人闲聊记录);
- 脱敏处理:对私有数据(手机号、身份证号、敏感业务数据)进行替换(如 “138XXXX1234”)或删除。
- 格式统一:将扫描件 PDF 通过 OCR(如
3. 文本拆分:兼顾 “检索精准度 + 语义完整性”
文本拆分是 RAG 搭建的关键步骤,直接影响后续检索效果:
- 拆分原则:按 “语义完整单元” 拆分,而非固定字数,避免拆分后语义断裂;
- 拆分策略与工具:
- 基础拆分:用 LangChain 的
RecursiveCharacterTextSplitter,按标点(。!?)、段落分隔符智能拆分,单段长度建议 300-500 字(轻量场景)、500-800 字(长文本场景); - 进阶拆分:复杂文档(如技术手册)用
SemanticChunker,基于语义相似度拆分,确保同一主题的内容不被拆分; - 元数据添加:为每个拆分后的文本片段(Chunk)添加元数据,包含 “来源文档名、章节、页码、采集时间”,方便后续溯源。
- 基础拆分:用 LangChain 的
4. 向量转化:将文本转为 “可检索格式”
通过嵌入模型将文本片段转化为向量,为后续相似度检索奠定基础:
- 模型选择与调用:
- 新手首选:Sentence-BERT 的
all-MiniLM-L6-v2模型(轻量、免费、本地运行),调用代码示例:python
运行
from sentence_transformers import SentenceTransformer model = SentenceTransformer('all-MiniLM-L6-v2') chunk_embeddings = model.encode(chunk_texts) # chunk_texts为拆分后的文本列表 - 专业场景:OpenAI Embeddings(需 API 密钥),语义表征更精准,调用代码示例:
python
运行
from openai import OpenAI client = OpenAI(api_key="your-api-key") def get_embedding(text): response = client.embeddings.create(input=text, model="text-embedding-3-small") return response.data[0].embedding chunk_embeddings = [get_embedding(chunk) for chunk in chunk_texts]
- 新手首选:Sentence-BERT 的
- 向量维度适配:确保嵌入模型输出维度与向量数据库兼容(如 Chroma 支持任意维度,Milvus 需提前指定维度)。
四、第三步:知识库构建与存储(离线收尾)
将转化后的向量与文本片段存储到向量数据库,形成可检索的知识库:
1. 向量数据库初始化
- 轻量场景(Chroma):无需复杂配置,本地启动即可,初始化代码示例:
python
运行
import chromadb # 创建本地数据库(持久化存储,重启后不丢失数据) db = chromadb.PersistentClient(path="./rag_database") # 创建集合(类似数据库表) collection = db.create_collection(name="enterprise_knowledge_base") - 企业级场景(Milvus):需先部署 Milvus 服务(支持本地或云端),再通过 SDK 连接,核心步骤:
- 安装 Milvus 服务(参考官方文档);
- 用
pymilvus连接服务,创建集合并定义字段(向量字段、文本字段、元数据字段)。
2. 数据入库:向量 + 文本 + 元数据关联存储
将向量、文本片段、元数据批量写入数据库,确保关联关系完整:
python
运行
# Chroma入库示例(批量插入)
collection.add(
documents=chunk_texts, # 拆分后的文本片段
embeddings=chunk_embeddings, # 对应的向量
metadatas=chunk_metadata, # 元数据列表(与文本片段一一对应)
ids=[f"chunk_{i}" for i in range(len(chunk_texts))] # 唯一ID(便于后续更新/删除)
)
- 关键注意:确保
documents、embeddings、metadatas、ids长度一致,避免数据错位; - 入库后验证:通过
collection.count()查看入库数量,用collection.query()查询指定 ID 的片段,确认数据存储正常。
五、上半程搭建核心总结
RAG 系统搭建(上)的核心是 “离线基础工程”,重点完成 “环境准备→数据处理→知识库构建” 三大环节:
- 环境搭建:优先轻量工具,降低入门门槛;
- 数据处理:核心是 “去噪声、保语义、加元数据”,为检索精准度打基础;
- 知识库存储:确保向量与文本关联完整,支持后续快速检索。
下半程将聚焦 “在线检索流程搭建、生成优化、系统测试”,完成从 “知识库” 到 “可交互 RAG 系统” 的闭环。
更多推荐



所有评论(0)