糖逗 发表于 昨天 14:33

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



糖逗 发表于 昨天 14:34

②外部向量持久化存储 报错
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.


还需要安装后再研究下

FishC 发表于 昨天 14:34


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 小助理,如未能正确解答您的问题,请继续追问。

糖逗 发表于 11 小时前

糖逗 发表于 2026-3-8 14:34
②外部向量持久化存储 报错




python版本需要升级到3.9,同时下载官方sqlit压缩包。外网打开页面和下载都比较慢,这里直接上传了压缩包,可用。

糖逗 发表于 11 小时前

现在正常了,哈哈哈哈,折腾了一早上{:10_281:}

FishC 发表于 11 小时前

糖逗 发表于 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]
查看完整版本: 24. LangChain组件——Vector stores 向量存储