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

RAG 知识库核心模块全解(产品视角 + 技术细节)

“关于知识库这块,你有什么能讲的吗?”我一脸懵逼,数据咋清洗,数据格式咋定的不是刚说完吗??🤔复盘了一下,感觉应该是想问下面这些

🧱 1. 文档切分策略(切得好,才能召回准)

🌟 目标:

把长文档切成合适的语义段,既能保证上下文连贯,又不超出 token 限制。

📌 常见策略:

策略描述优点缺点
固定窗口 + 重叠每 N 词/句切一段,前后有部分重叠实现简单、信息不漏语义断裂、冗余多
基于分隔符以段落、标题、换行等结构切保留结构,适合规整文档不适合没有格式的内容
智能语义切分利用句向量计算相似度判断切点保证每段语义完整计算开销大、依赖模型
百炼等 SaaS 的“智能切分”大模型判断分段位置效果通常不错不透明、不稳定可控性

🧰 推荐做法:

langchain.text_splitter 中的 RecursiveCharacterTextSplitter(递归+分隔符):

from langchain.text_splitter import RecursiveCharacterTextSplittersplitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=100,separators=["\n\n", "\n", ".", " ", ""]
)
chunks = splitter.split_text(your_text)

💡 坑点:

  • chunk 太短 → 表达不完整
  • chunk 太长 → embedding稀释,token溢出
  • overlap 必须控制好,100左右比较稳

🧬 2. 向量生成(embedding)

🌟 目标:

把文本片段转化为模型能理解的向量(embedding),进入语义空间。

📌 常见 embedding 模型:

模型名维度语言优势
text-embedding-ada-002(OpenAI)1536英文/中英混合商用稳定
bge-base-zh / bge-large-zh768/1024中文优化免费、本地跑
text2vec 系列(阿里)768中文为主多任务优化好
e5-mistral(英文/多语)1024多语零样本搜索好用

🛠️ 示例代码:

from sentence_transformers import SentenceTransformer
model = SentenceTransformer("bge-base-zh")emb = model.encode("鼠标断连怎么解决")

🔥 记得用 BGE 模型要加 prompt:“为这个句子生成表示以用于检索相关文档:xxxx”


🔍 3. 向量库选择(存储+召回)

🌟 目标:

将 embedding 存入可快速近似搜索的数据库中,用于后续查询。

📌 常见库:

库名特点本地部署检索速度
FAISS最轻量,Python快快速
Milvus企业级,高并发分布式好
ChromaLangchain生态简单
Weaviate / Qdrant支持更多索引类型更复杂可扩展

🛠️ 示例:FAISS 本地构建

import faiss
import numpy as npindex = faiss.IndexFlatIP(768)  # 余弦相似度
index.add(np.array([vec1, vec2, vec3]))  # vec 是 np.array 的向量D, I = index.search(np.array([query_vec]), top_k)

🎯 4. 检索策略:向量、关键词、混合召回

🌟 目标:

提高召回的准度和覆盖率。

📌 召回方式对比:

策略原理优点风险
Dense 向量检索用embedding比对相似度抗表达差异易召回无关内容
Keyword(BM25)用关键词精准召回准确度高不支持变形表达
Hybrid(混合检索)两者并用 + 融合评分稳准平衡实现复杂

📌 混合召回核心是:关键词召回召不准 → 靠语义补;语义召回太泛 → 靠关键词兜底

🧠 常用组合:

  • 关键词召回 top30 + 向量召回 top30 → 合并 → rerank top10

🧠 5. Rerank 排序(二次排序)

🌟 目标:

提高最终召回片段的相关性排序,降低误召回风险。

📌 推荐模型:

名称原理优势
bge-reranker-base双句相似度评分中文好,性能稳定
Cohere Rerank商用API效果强
cross-encoder/ms-marco多语言开源

🛠️ 示例伪代码:

score = reranker(query, [chunk1, chunk2, chunk3])
ranked = sorted(zip(score, chunks), reverse=True)

🧩 6. Prompt 拼接策略(上下文注入)

🌟 目标:

将检索到的内容+用户问题组织成 Prompt 喂给 LLM。

📌 模板示例:

你是某品牌客服助手,以下是产品说明文档内容:【知识片段】
1. 鼠标若断连,请检查电量或更换接收器
2. 鼠标灯不亮通常为电池电量低用户提问:
鼠标今天怎么又断连了?请基于上方知识内容回答。

🧠 控制点:

  • 控制 token 长度:太多片段 LLM 会截断
  • CONTEXT_WINDOW = 3500 控制拼接字数
  • 多段知识片段要用编号或分隔符 ---,降低混淆

❌ 7. 检索失败处理机制(没命中咋办)

🌟 目标:

保证系统在没有命中知识时,不答错,不胡说。

📌 建议处理方式:

情况策略
没有任何召回给 LLM 明确提示:“未检索到相关知识,直接回答‘暂未收录该问题’”
命中不确定内容添加置信度判断逻辑(低于阈值不展示)
用户可能问了不支持的功能在知识库中加入“该设备不支持XX”明确表述,防止误空

end

相关文章:

  • day37
  • 项目开发中途遇到困难的解决方案
  • 详解Redis的热点key问题
  • Python 数据分析与可视化 Day 2 - 数据清洗基础
  • 【云创智城】YunCharge充电桩系统-深度剖析OCPP 1.6协议及Java技术实现:构建高效充电桩通信系统
  • 黑马程序员新版Linux学习笔记——第二部分 基础命令
  • 零基础学前端-传统前端开发(第四期-JS基础)
  • 西门子S7通信协议抓包分析应用
  • Springboot仿抖音app开发之Nacos 分布式服务与配置中心(进阶)
  • moments_object_model_3d这么理解
  • 蓝牙 5.0 新特性全解析:传输距离与速度提升的底层逻辑(面试宝典版)
  • Mac电脑 窗口分屏管理 Magnet Pro
  • 20250620-Pandas.cut
  • 伸缩线充电宝推荐丨倍思灵动充45W突破移动界限!
  • 基于YOLO的语义分割实战(以猪的分割为例)
  • 5G 浪潮:发展全景、困境突围与未来航向
  • 微软应用商店打不开怎么办2025,打开TLS1.3
  • 【Python】Excel表格操作:ISBN转条形码
  • 一个可以算相对介电常数和相对磁导率对角各向异性的FDFD(频域有限差分算法) matlab代码
  • Nginx常见功能
  • 网站用oracle做数据库/专业网络推广机构
  • sns社交网站 建设文档/中国软文网官网
  • 云南省住房和城乡建设厅官方网站/网站排名优化服务公司
  • 浙江专业网站建设商城供应/网络推广seo是什么
  • 怎么做企业网站推广赚钱/网络营销工具和方法
  • 上海专业做网站电话/自己做网站如何赚钱