24. LangChain组件——Vector stores 向量存储
1. 向量存储的作用?2. 有哪几种存储形式?
[*]InMemoryVectorStore,完成内存向量存储。(向量存储在内存中,当程序关闭后,存储的向量也消失了)
[*]Chroma,外部数据库向量存储。(存储在本地,可以随时调用,存储的向量不消失)
3. 代码实战
①内存向量存储
from langchain_core.vectorstores import InMemoryVectorStore
from langchain_community.embeddings import DashScopeEmbeddings
from langchain_community.document_loaders import CSVLoader
vector_store = InMemoryVectorStore( #内存存储
embedding=DashScopeEmbeddings()
)
loader = CSVLoader(
file_path="E:/P3_LangChainRAG开发/data/info.csv",
encoding="utf-8",
source_column="source", # 指定本条数据的来源是哪里
)
documents = loader.load()
print(documents)
print(documents)
# In
# id1 id2 id3 id4 ...
# 向量存储的 新增、删除、检索
vector_store.add_documents(
documents=documents, # 被添加的文档,类型:list
ids=["id"+str(i) for i in range(1, len(documents)+1)] # 给添加的文档提供id(字符串)list
)
# 删除传入
vector_store.delete(["id1", "id2"])
# 检索 返回类型list
result = vector_store.similarity_search(
"风口",
3 # 检索的结果要几个
)
print(result)
②外部向量持久化存储
from langchain_chroma import Chroma
from langchain_community.embeddings import DashScopeEmbeddings
from langchain_community.document_loaders import CSVLoader
# Chroma 向量数据库(轻量级的)
# 确保 langchain-chroma chromadb 这两个库安装了的,没有的话请pip install
vector_store = Chroma(
collection_name="test", # 当前向量存储起个名字,类似数据库的表名称
embedding_function=DashScopeEmbeddings(), # 嵌入模型
persist_directory="E:/chroma_db/chroma_db" # 指定数据存放的文件夹
)
loader = CSVLoader(
file_path="E:/P3_LangChainRAG开发/data/info.csv",
encoding="utf-8",
source_column="source", # 指定本条数据的来源是哪里
)
documents = loader.load()
# # id1 id2 id3 id4 ...
# # 向量存储的 新增、删除、检索
vector_store.add_documents(
documents=documents, # 被添加的文档,类型:list
ids=["id"+str(i) for i in range(1, len(documents)+1)] # 给添加的文档提供id(字符串)list
)
# # 删除传入
# vector_store.delete(["id1", "id2"])
# 检索 返回类型list
result = vector_store.similarity_search(
"Python是不是简单易学呀",
3, # 检索的结果要几个
filter={"source": "黑马程序员"}
)
print(result)
学习视频:【黑马程序员大模型RAG与Agent智能体项目实战教程,基于主流的LangChain技术从大模型提示词到实战项目】 https://www.bilibili.com/video/BV1yjz5BLEoY/?p=43&share_source=copy_web&vd_source=792a2cb63a1882bff4ed856eadc41a71
②外部向量持久化存储 报错
Your system has an unsupported version of sqlite3. Chroma requires sqlite3 >= 3.35.0.
Please visit https://docs.trychroma.com/troubleshooting#sqlite to learn how to upgrade.
还需要安装后再研究下
24. LangChain组件——Vector stores 向量存储
1.jpg1. 向量存储的作用?
2. 有哪几种存储形式?
InMemoryVectorStore,完成内存向量存储。(向量存储在内存中,当程序关闭后,存储的向量也消失了)
Chroma,外部数据库向量存储。(存储在本地,可以随时调用,存储的向量不消失)
3. 代码实战
①内存向量存储
from langchain_core.vectorstores import InMemoryVectorStore
from langchain_community.embeddings import DashScopeEmbeddings
from langchain_community.document_loaders import CSVLoader
vector_store = InMemoryVectorStore( #内存存储
embedding=DashScopeEmbeddings()
)
loader = CSVLoader(
file_path="E:/P3_LangChainRAG开发/data/info.csv",
encoding="utf-8",
source_column="source", # 指定本条数据的来源是哪里
)
documents = loader.load()
print(documents)
print(documents)
# In
# id1 id2 id3 id4 ...
# 向量存储的 新增、删除、检索
vector_store.add_documents(
documents=documents, # 被添加的文档,类型:list
ids= # 给添加的文档提供id(字符串)list
)
# 删除传入
vector_store.delete()
# 检索 返回类型list
result = vector_store.similarity_search(
"风口",
3 # 检索的结果要几个
)
print(result)
②外部向量持久化存储
from langchain_chroma import Chroma
from langchain_community.embeddings import DashScopeEmbeddings
from langchain_community.document_loaders import CSVLoader
# Chroma 向量数据库(轻量级的)
# 确保 langchain-chroma chromadb 这两个库安装了的,没有的话请pip install
vector_store = Chroma(
collection_name="test", # 当前向量存储起个名字,类似数据库的表名称
embedding_function=DashScopeEmbeddings(), # 嵌入模型
persist_directory="E:/chroma_db/chroma_db" # 指定数据存放的文件夹
)
loader = CSVLoader(
file_path="E:/P3_LangChainRAG开发/data/info.csv",
encoding="utf-8",
source_column="source", # 指定本条数据的来源是哪里
)
documents = loader.load()
# # id1 id2 id3 id4 ...
# # 向量存储的 新增、删除、检索
vector_store.add_documents(
documents=documents, # 被添加的文档,类型:list
ids= # 给添加的文档提供id(字符串)list
)
# # 删除传入
# vector_store.delete()
# 检索 返回类型list
result = vector_store.similarity_search(
"Python是不是简单易学呀",
3, # 检索的结果要几个
filter={"source": "黑马程序员"}
)
print(result)
向量存储的作用
向量存储主要用于存储文档的向量嵌入(embedding),并通过相似性搜索快速检索相关文档。它在RAG(检索增强生成)系统中扮演关键角色,帮助模型基于上下文信息生成更准确的回答。
存储形式
主要有两种存储形式:
[*]内存向量存储:例如 InMemoryVectorStore,向量数据存储在内存中,程序关闭后数据消失。
[*]外部向量存储:例如 Chroma,向量数据持久化到本地或远程数据库,可长期使用。
代码实战
[*]内存向量存储示例
from langchain_core.vectorstores import InMemoryVectorStore
from langchain_community.embeddings import DashScopeEmbeddings
from langchain_community.document_loaders import CSVLoader
# 初始化向量存储和嵌入模型
vector_store = InMemoryVectorStore(embedding=DashScopeEmbeddings())
# 加载文档
loader = CSVLoader(
file_path="data/info.csv",
encoding="utf-8",
source_column="source"
)
documents = loader.load()
# 添加文档到向量存储(需提供id列表)
ids =
vector_store.add_documents(documents=documents, ids=ids)
# 相似性搜索
result = vector_store.similarity_search("风口", 3)
print(result)
[*]外部向量持久化存储示例
from langchain_chroma import Chroma
from langchain_community.embeddings import DashScopeEmbeddings
from langchain_community.document_loaders import CSVLoader
# 初始化Chroma向量存储
vector_store = Chroma(
collection_name="test",
embedding_function=DashScopeEmbeddings(),
persist_directory="chroma_db"
)
# 加载文档
loader = CSVLoader(
file_path="data/info.csv",
encoding="utf-8",
source_column="source"
)
documents = loader.load()
# 添加文档到向量存储(需提供id列表)
ids =
vector_store.add_documents(documents=documents, ids=ids)
# 相似性搜索并过滤
result = vector_store.similarity_search(
"Python是不是简单易学呀",
3,
filter={"source": "黑马程序员"}
)
print(result)
注意事项:
- 使用前请安装必要库,如 langchain-chroma 和 chromadb。
- 文件路径请根据实际情况调整。
- 添加文档时,ids 参数应为与文档数量匹配的字符串列表。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 糖逗 发表于 2026-3-8 14:34
②外部向量持久化存储 报错
python版本需要升级到3.9,同时下载官方sqlit压缩包。外网打开页面和下载都比较慢,这里直接上传了压缩包,可用。 现在正常了,哈哈哈哈,折腾了一早上{:10_281:} 糖逗 发表于 2026-03-09 10:34
糖逗 发表于 2026-3-8 14:34
②外部向量持久化存储...
针对Chroma报错“sqlite3版本过低”的问题,你可以按照以下步骤解决:
解决方案
1. 升级Python版本到3.9或以上(建议使用Python 3.9+)
2. 更新系统中的sqlite3库
Windows系统解决方法
[*]安装Python 3.9或更高版本
[*]下载并安装新版本的sqlite3:
[*]下载sqlite3 DLL文件(例如:sqlite-dll-win64-x64-*.zip)
[*]将sqlite3.dll文件复制到Python安装目录的DLLs文件夹中(如:C:\Python39\DLLs\)
[*]如果Python安装目录中有sqlite3.dll文件,请先备份并替换
[*]验证安装是否成功:
import sqlite3
print(sqlite3.sqlite_version)
如果显示版本号>=3.35.0,则问题已解决。
替代方案:使用pysqlite3
如果你不想升级系统sqlite3,可以使用pysqlite3-binary:
1. 安装pysqlite3-binary:
pip install pysqlite3-binary
2. 在你的代码中添加以下代码,在导入Chroma之前:
import sys
import pysqlite3
sys.modules['sqlite3'] = sys.modules['pysqlite3']
或者在Python脚本开头添加:
__import__('pysqlite3')
import sys
sys.modules['sqlite3'] = sys.modules.pop('pysqlite3')
其他注意事项
1. 确保已安装必要的Python包:
pip install langchain-chroma chromadb
2. 如果使用conda环境,可以通过conda安装sqlite3:
conda install -c conda-forge sqlite
3. 完整的外部向量存储示例代码(包含错误处理):
import sys
# 尝试使用pysqlite3替代标准sqlite3
try:
__import__('pysqlite3')
sys.modules['sqlite3'] = sys.modules['pysqlite3']
except ImportError:
pass
from langchain_chroma import Chroma
from langchain_community.embeddings import DashScopeEmbeddings
from langchain_community.document_loaders import CSVLoader
# 检查sqlite3版本
import sqlite3
print(f"当前sqlite3版本: {sqlite3.sqlite_version}")
# 初始化Chroma向量存储
vector_store = Chroma(
collection_name="test",
embedding_function=DashScopeEmbeddings(),
persist_directory="E:/chroma_db/chroma_db"
)
# ... 其余代码与之前相同
希望这些解决方案能帮助你顺利使用Chroma向量存储!
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页:
[1]