大模型看不见哪些数据?
1.知识截至日期之前的的数据
2. 私有数据
3. 实时数据
因为大模型的数据是静态的,封闭的,但是业务是动态的,私有的
当然,我们可以把数据放入prompt里面
但是context window是有限的,全部放进去费token,还会稀释注意力
所以提出了RAG
RAG的核心思路是:先检索,再回答
就是不把所有的数据都塞进prompt,而是在每次回答之前,先检索最相关的几段,只把这几段放入prompt
RAG名字的含义:
Retrieval(检索):从知识库找出和当前问题最相关的内容
Augmented(增强):加入prompt
Generation(生成):大模型基于增强后的上下文生成回答
RAG的两大阶段:
1. 离线阶段
把私有数据处理成大模型能快速检索的格式,存进向量数据库
- 加载文档
- 文本切块(Chunking):按章节,小节标注
- 向量化(Embedding):每个chunk通过一个Embedding模型转换成向量(Vector)
- 存入向量数据库:优化了海量数据找最邻近的操作,能快速找到最相似的几条
2. 在线阶段
- 问题向量化:使用同一个Embedding模型,将用户问题转换成向量
- 语义搜索:用问题向量去向量库找最相似的几条
- 构造增强prompt:检索到的chunk放入prompt
- 大模型生成回答
传统的关键词搜索是逐字匹配,只能找到完全一样的,而向量库是语义搜索,可以找到意思差不多的,准确率高得多
RAG在Agent里面处于什么位置?
RAG本质上就是一个特殊的工具
当大模型认为这个问题需要访问私有数据时,就会通过Function Call下达指令调用知识库检索工具
agent执行这个工具调用,就是触发了RAG的在线流程
将结果回传给大模型
什么是向量数据库
向量数据库是为了在海量数据中,毫秒级找到最相似的topk条
秘诀是**ANN(Approximate Nearest Neighbor,近似最近邻)**搜索
不保证找到绝对最相似的,而是差不多最相似的
使用HNSW(Hierarchical Navigable Small World,分层可导航小世界图)
把向量组织成一个多层的结构
高层(稀疏层):只有少量节点,负责大范围快速跳转
低层(稠密层):精细定位最终的近邻候选
主流向量数据库
| 数据库 | 核心定位 | 适合场景 | 关键优势 | 主要缺点 |
|---|---|---|---|---|
| Chroma | 本地轻量级向量库 | 本地开发、功能验证、快速原型 | Python 原生 API,零配置、几行代码启动 | 不适合生产,无高可用、分布式特性 |
| Pinecone | 全托管云向量库 | 创业公司 / 小团队快速上生产 | 无需运维,API 直接调用 | 数据在第三方,合规有顾虑;按量收费,规模大成本高 |
| Milvus | 开源生产级向量库 | 私有化部署、数据不出内网、大规模场景 | 功能最全,支持分布式 / 持久化,国产维护活跃 | 部署运维复杂度高,学习曲线较陡 |
| Weaviate | 开源多模态向量库 | 多模态搜索、简化 Embedding 流程 | 内置 Embedding 集成,支持文本 / 图片 / 音频 | - |
| Qdrant | 高性能轻量向量库 | 资源受限 / 高并发生产环境 | Rust 实现,内存占用低、查询速度快 | - |