将文本向量化之后,下一步就是进行向量的存储。
2.5.1 向量数据库的理解
假设你是一名摄影师,拍了大量的照片。为了方便管理和查找,你决定将这些照片存储到一个数据库中。传统的关系型数据库(如 MySQL、PostgreSQL 等)可以帮助你存储照片的元数据,比如拍摄时间、地点、参数信息等。
但是,当你想要根据照片的内容(如颜色、纹理、物体等) 进行搜索时,传统数据库将无法满足你的需求,因为它们通常以数据表的形式存储数据,并使用查询语句进行精确搜索。那么此时,向量数据库就可以派上用场。
我们可以构建一个多维的空间使得每张照片特征都存在于这个空间内,并用已有的维度进行表示,比如时间、地点、相机型号、颜色….此照片的信息将作为一个点,存储于其中。以此类推,即可在该空间中构建出无数的点,而后我们将这些点与空间坐标轴的原点相连接,就成为了一条条向量,当这些点变为向量之后,即可利用向量的计算进一步获取更多的信息。当要进行照片的检索时,也会变得更容易更快捷。
注意:在向量数据库中进行检索时,检索并不是唯一的、精确的,而是查询和目标向量最为相似的一些向量,具有模糊性。
延伸思考:只要对图片、视频、商品等素材进行向量化,就可以实现以图搜图、视频相关推荐、相似宝贝推荐等功能。
2.5.2 常用的向量数据库
LangChain提供了众多向量存储的集成,包括开源的本地向量存储与云托管的私有向量存储。并公开了一个标准接口,可以轻松地在向量存储之间进行交换。
常用向量数据库:
![图片[1]-2.5 向量存储(Vector Stores)-大赛人网](https://www.dsrw.com/wp-content/uploads/2026/11/image-1362.png)
这里我们使用 Milvus 作为向量存储,参考《Milvus使用指南.md》
2.5.3 案例:Atguigu Assistant客服知识库
基于LangChain提供的相关组件实现一个简易知识库,并结合Agent进行交互。
它涵盖了 RAG 的核心生命周期:文档加载 文本切分 向量化 向量数据库存储 相似度检索大模型结合上下文生成回答。
① 全局配置
![图片[2]-2.5 向量存储(Vector Stores)-大赛人网](https://www.dsrw.com/wp-content/uploads/2026/11/image-1363.png)
② 初始化Milvus
创建数据库
![图片[3]-2.5 向量存储(Vector Stores)-大赛人网](https://www.dsrw.com/wp-content/uploads/2026/11/image-1364.png)
创建collectionmetric
![图片[4]-2.5 向量存储(Vector Stores)-大赛人网](https://www.dsrw.com/wp-content/uploads/2026/11/image-1365.png)
![图片[5]-2.5 向量存储(Vector Stores)-大赛人网](https://www.dsrw.com/wp-content/uploads/2026/11/image-1366.png)
![图片[6]-2.5 向量存储(Vector Stores)-大赛人网](https://www.dsrw.com/wp-content/uploads/2026/11/image-1367.png)
③ 初始化 Embedding 模型
![图片[7]-2.5 向量存储(Vector Stores)-大赛人网](https://www.dsrw.com/wp-content/uploads/2026/11/image-1368.png)
![图片[8]-2.5 向量存储(Vector Stores)-大赛人网](https://www.dsrw.com/wp-content/uploads/2026/11/image-1369.png)
④ 读取文档并切分
![图片[9]-2.5 向量存储(Vector Stores)-大赛人网](https://www.dsrw.com/wp-content/uploads/2026/11/image-1370.png)
![图片[10]-2.5 向量存储(Vector Stores)-大赛人网](https://www.dsrw.com/wp-content/uploads/2026/11/image-1371.png)
Langchain提供了一系列文档加载器和文本切分器,根据实际需求灵活选用
在复杂的RAG项目中,文档加载与切分是最关键也最复杂的部分,通常会选择更加专业的文档处理工具,Langchain工具链的优势在于快速上手,接口统一,适用于MVP(Minimum Viable Product,最小可行产品)开发或学习项目。
知识库文件是最容易处理的txt 格式文件,用TextLoader加载,得到统一的list[Document] 对象切分器选择RecursiveCharacterTextSplitter ,三个参数的作用是
- chunk_size :切分的块大小
- chunk_overlap :相邻块的重叠字符数
- separators :分隔符
⑤ 生成向量并写入 Milvus
![图片[11]-2.5 向量存储(Vector Stores)-大赛人网](https://www.dsrw.com/wp-content/uploads/2026/11/image-1372.png)
![图片[12]-2.5 向量存储(Vector Stores)-大赛人网](https://www.dsrw.com/wp-content/uploads/2026/11/image-1373.png)
我们通过query扫描collections,确定准确的数据条数
![图片[13]-2.5 向量存储(Vector Stores)-大赛人网](https://www.dsrw.com/wp-content/uploads/2026/11/image-1374.png)
⑥ 初始化模型与Agent
![图片[14]-2.5 向量存储(Vector Stores)-大赛人网](https://www.dsrw.com/wp-content/uploads/2026/11/image-1375.png)
⑦ 检索逻辑 (Retrieval)
![图片[15]-2.5 向量存储(Vector Stores)-大赛人网](https://www.dsrw.com/wp-content/uploads/2026/11/image-1376.png)
⑧ 生产与回答生成
![图片[16]-2.5 向量存储(Vector Stores)-大赛人网](https://www.dsrw.com/wp-content/uploads/2026/11/image-1377.png)
![图片[17]-2.5 向量存储(Vector Stores)-大赛人网](https://www.dsrw.com/wp-content/uploads/2026/11/image-1378.png)
![图片[18]-2.5 向量存储(Vector Stores)-大赛人网](https://www.dsrw.com/wp-content/uploads/2026/11/image-1379.png)

















请登录后查看评论内容