当前位置: 首页 > news >正文

【一天一个知识点】RAG系统构建第二步:构建检索器模块(Retriever)

🎯 一、目的与重要性

在RAG系统中,生成模型(如ChatGPT)要想准确作答,必须依赖高质量、相关性强的外部知识。Retriever模块就是实现这个目标的关键:

  • 它承担着“为大模型提供上下文”的角色

  • 能够在千百万条知识中精准提取与问题相关的信息片段

  • 直接决定了整个RAG系统的响应质量与准确率


🧩 二、核心构建流程

我们将 Retriever 的构建过程分为 5 个子任务,如图所示:

🖼️ 总体流程图

 
flowchart TDA[1️⃣ 文本切分与清洗] --> B[2️⃣ 向量化编码]B --> C[3️⃣ 构建向量数据库]C --> D[4️⃣ 查询接口实现]D --> E[5️⃣ 可选精排器]


1️⃣ 文本切分与预处理

为了提高检索效果,必须将知识库中的文档进行“语义单元”的切分。

  • 切分策略

    • 固定长度切分(如每段500字)

    • 智能分句(按语义分段)

    • 使用工具:LangChain TextSplitter、Haystack PreProcessor

  • 预处理工作

    • 去除HTML标记、冗余空格

    • 统一格式:简繁转换、英文大小写统一

    • 添加 metadata(来源、标题、段落号等)


2️⃣ 嵌入编码(Embedding)

将每段文本转为向量,使其可以用于语义检索。

  • 常用模型(按开放性/性能选择):

模型名称提供方特点
text-embedding-ada-002OpenAI性能优秀,付费API
bge-base-zh / bge-m3百度+智源中文效果佳,开源
E5-small / E5-largeHuggingface多语言支持好
text2vec中文专用可本地部署

  • 编码示例(Python)

 
from sentence_transformers import SentenceTransformer
model = SentenceTransformer('BAAI/bge-base-zh')
embedding = model.encode("什么是RAG检索机制?")

  • 注意事项

    • 编码模型与查询必须统一

    • 可将结果缓存至磁盘,避免重复计算


3️⃣ 构建向量数据库

将所有知识段的向量存入数据库中,支持快速近似最近邻(ANN)搜索。

  • 主流工具对比

工具开源特点推荐场景
FAISS高性能、轻量、单机本地开发/原型
Milvus分布式、强扩展企业部署
WeaviateREST接口、支持分类/过滤数据检索API
QdrantRust性能、安全好本地 + 云部署
Pinecone云服务、免维护快速部署

  • 示意图:嵌入+入库过程

 
graph TDA[切分后段落] --> B[编码为向量]B --> C[存入向量数据库]C -->|支持相似度检索| D[返回 Top-K 文段]


4️⃣ 构建查询接口(Query API)

用户发起提问后,系统将其转换为向量并检索最相关的知识段落。

  • 接口工作流程

 
sequenceDiagramparticipant 用户 as Userparticipant RAG系统 as RAGparticipant 向量模型 as Embedderparticipant 向量库 as DB用户->>RAG系统: 输入问题(自然语言)RAG系统->>向量模型: 编码Query向量模型-->>RAG系统: 返回Query向量RAG系统->>向量库: 相似度检索Top-K向量库-->>RAG系统: 返回相关段落RAG系统-->>用户: 提供答案上下文

  • 关键参数

    • Top_k: 一次取出多少段(常为3-10)

    • score_threshold: 相似度阈值控制准确度

    • filter: 按文档来源/时间过滤内容(可选)


5️⃣ 可选:重排序模块(Reranker)

对 Top-K 检索结果进一步排序,提升最终质量。

  • 使用如 bge-rerankerColBERT 等模型,进行 Pair-wise 打分

  • LangChain、Haystack 等框架都支持 plug-in 式调用


🎓 示例:代码演示(基于FAISS + BGE)

 
from langchain.vectorstores import FAISS
from langchain.embeddings import HuggingFaceEmbeddingsembeddings = HuggingFaceEmbeddings(model_name="BAAI/bge-base-zh")
db = FAISS.load_local("faiss_index", embeddings)
docs = db.similarity_search("什么是RAG检索器?", k=5)
for doc in docs:print(doc.page_content)


 


📌 三、最终效果

完成 Retriever 模块后,我们将具备如下能力:

能力描述
精准匹配支持中文/多语言语义相似度检索
高效基于向量搜索,响应快,支持百万级规模
可扩展支持增量添加知识,动态更新
灵活可结合过滤器、权重、标签等定制策略


✅ 四、进阶建议

  • 结合元数据(metadata)进行多维度检索

  • 搭配缓存机制,加速高频query响应

  • 引入“检索失败兜底策略”提升健壮性

  • 评估指标:Hit@K、MRR、Recall、Latency


📦 输出成果整理

项目内容
向量数据库已建立,存储结构清晰
检索接口支持输入query返回Top-K文段
可视化/调试工具可展示向量间相似度
模块文档编码+检索流程文档、示例代码

相关文章:

  • 电路笔记(信号):一阶低通RC滤波器 一阶线性微分方程推导 拉普拉斯域表达(传递函数、频率响应)分析
  • 京东三年一革新:宣布进军酒旅行业,携程回应海外市场巨大
  • Seo工具使用与流量数据观察实践(上)
  • Java并发编程实战 Day 28:虚拟线程与Project Loom
  • 【Ambari3.0.0 部署】Step1—基础环境准备-适用于el8
  • YOLO v5详解(文字版)
  • 解决Matplotlib三维图无法旋转的问题
  • 全排列问题一文详解
  • 几种大功率远距传输WiFI解决方案
  • 1、使用STM32CubeMX在项目中添加FreeRTOS源码
  • 9. TypeScript 泛型
  • 【CiteSpace】引文可视化分析软件CiteSpace下载与安装
  • FPGA基础 -- Verilog 锁存器简介
  • 模拟/思维
  • 新发布的一款使用ReactNative新架构加载Svga动画的开源插件[android/ios]
  • RA信号处理
  • 生成https免费证书并绑定到nginx
  • 嵌入式之硬件学习(三)通信方式、串口通信
  • RK3568笔记八十四:rtmp转rtmp直播流测试
  • 亚矩阵云手机+Whatnot:直播电商的自动化增长引擎
  • wordpress建站上传不了图片/广州seo服务公司
  • 16岁做分期网站/百度还原
  • 专业做包包的网站/北京优化网站公司
  • 网站建设龙头企业/舆情视频
  • 武汉网站seo哪家公司好/电商怎么推广自己的产品
  • 网站开发保密协议模板/长沙官网优化公司