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

RAG 实战|向量数据库检索原理 + Chroma 实战全攻略

一、为什么 RAG 离不开向量数据库

RAG=LLM + 外部知识库,核心流程:索引→检索→增强生成

  • 索引:文档分块→向量化→存储向量
  • 检索:用户问题向量化→向量库相似度匹配→返回 Top-K 相关块
  • 生成:用检索内容增强 Prompt→LLM 输出答案

向量数据库解决两大痛点:

  1. 高效存储海量高维向量
  2. 毫秒级向量相似度检索,支撑 RAG 实时响应

二、向量与 Embedding 基础

1. 什么是向量(Embedding)

把文本 / 图像转为固定长度高维数值数组,语义相近的文本向量距离更近。例:"长沙"→ [0.8, -0.3, 0.5, ..., 0.5]

2. 向量模型(嵌入模型)

  • 在线:通义文本向量 v4、OpenAI Embedding
  • 本地:BGE-M3(多语言、长文本 8192token)、Ollama 一键部署
  • 部署命令:ollama pull bge-m3

3. 三大相似度计算方法

表格

方法原理适用场景
余弦相似度向量夹角余弦文本语义检索最常用
欧氏距离 L2空间直线距离归一化后效果好
点积向量内积

已归一化向量

三、向量数据库全景:选型与对比

1. 核心定义

专门存储、索引、查询向量嵌入,支持近似最近邻 ANN 搜索,比传统库快百倍。

2. 主流库对比(RAG 开发必看)

表格

数据库特点适用场景开源
Chroma轻量、易集成、LangChain 友好中小项目、快速开发
Milvus分布式、十亿级向量、毫秒级企业大规模
Pinecone全托管、去重 / 排名云上 SaaS
FaissMeta 出品、高效检索图像 / 推荐

四、Chroma 实战:RAG 开发标配步骤

1. 环境准备

bash

运行

pip install chromadb # 课程配套requirements.txt一键安装

2. 核心 API(背会直接用)

(1)创建客户端

python

运行

import chromadb # 持久化客户端(数据落地) client = chromadb.PersistentClient(path="./chroma_db")
(2)集合 Collection 操作
  • 列出:client.list_collections()
  • 创建:client.create_collection(name="rag_kc")
  • 有则获取、无则创建:client.get_or_create_collection(name="rag_kc")
  • 删除:client.delete_collection(name="rag_kc")
(3)添加文档(索引入库)

python

运行

collection.add( documents=["RAG是检索增强生成", "向量库存Embedding"], embeddings=[[0.1,...], [0.2,...]], # 必传 ids=["doc1", "doc2"] # 唯一ID必传 )
(4)相似度检索(核心)

python

运行

results = collection.query( query_embeddings=[0.1, 0.2, ...], # 问题向量 n_results=5 # Top-K ) # 返回:ids、distances、documents

五、RAG 检索全流程(面试高频)

  1. 文档分块:按字符 / 句子 / 递归切分,加重叠窗口防上下文断裂
  2. 向量化:嵌入模型转句向量
  3. 入库:存入向量库建索引
  4. 查询向量化:用户问题转向量
  5. 检索:相似度计算→Top-K
  6. 增强生成:拼接 Prompt→LLM 回答

六、复习要点速记

  1. RAG 用向量库解决大模型时效差、知识不全、幻觉
  2. 相似度:余弦相似度优先用于文本检索
  3. 开发首选:Chroma轻量易上手,课程实战标配
  4. 检索流程:分块→Embedding→入库→查询向量→召回→生成
  5. 本地向量模型:Ollama + BGE-M3,离线可用
http://www.jsqmd.com/news/599070/

相关文章:

  • 3步提升Windows 11系统效率:Win11Debloat开源优化工具全指南
  • python docker
  • 霍营,一个神奇的地方
  • 终极指南:如何彻底移除Windows Defender安全组件
  • 网站建设时如何考虑 SEO 因素_如何做好 SEO 竞争对手分析
  • SPIRAN ART SUMMONER高性能部署:PyTorch+4090D实现秒级响应唤醒体验
  • XS9950A国产芯片替代方案解析:3通道CVBS/HDCCTV视频信号处理与同轴音频支持
  • Google Calendar + Gemini:普通日历邀请竟能变成隐蔽监控工具
  • 2025届学术党必备的五大AI辅助写作平台推荐榜单
  • AI赋能开发:让快马解析免费资料智能生成语音助手框架
  • Anthropic官方Git MCP服务器曝三重漏洞:提示注入即可实现文件读写与远程代码执行
  • Cosmos-Reason1-7B实操手册:GPU显存监控脚本+自动清理占用进程Shell工具
  • NVIDIA 提出 PivotRL:不做整段长轨迹 RL,也能把 Agent 后训练做得又快又稳
  • (-aAa-) Linux,预制二进制文件 的 3 种安装方法 (***)
  • CLIP-GmP-ViT-L-14真实效果:多语言文本+图像跨模态检索演示
  • 别再只会Ctrl+C/V了!用WPS JS宏实现单元格的“智能复制”,效率翻倍
  • Whisper-large-v3在智能办公中的应用:会议记录自动化系统
  • MongoBleed(CVE-2025-14847):影响超8万台MongoDB服务器的高危内存泄露漏洞已在野活跃利用
  • 3步掌握3dsconv:从格式转换到自动化管理
  • 垂直行业落地:医疗场景下的 Agent 诊断辅助系统架构拆解
  • Bootstrap5 轮播详解
  • 用Proteus 8.10和AD21复刻一个51单片机光照报警器(附完整代码和避坑指南)
  • Jina AI 搜索底座模型生产部署:从选型到优化的全链路实战
  • C++ RAII 模式的工程价值
  • Linux系统编程 - 线程thread
  • C++的std--strong_ordering三路比较结果与排序算法的稳定性保证
  • 老旧Mac升级指南:使用OpenCore Legacy Patcher实现系统兼容性突破
  • k8s底层 containerd 容器,而非docker
  • 告别虚拟机!用 MSYS2 在 Windows 原生环境搭建 MRtrix3 神经影像处理工作流
  • Python 3 JSON:深度解析与应用指南