鱼C论坛

 找回密码
 立即注册
查看: 17|回复: 2

[AI工作流] 24. LangChain组件——Vector stores 向量存储

[复制链接]
发表于 2 小时前 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
1. 向量存储的作用?
下载 (46).png


2. 有哪几种存储形式?
  • InMemoryVectorStore,完成内存向量存储。(向量存储在内存中,当程序关闭后,存储的向量也消失了)
  • Chroma,外部数据库向量存储。(存储在本地,可以随时调用,存储的向量不消失)



3. 代码实战
①内存向量存储
  1. from langchain_core.vectorstores import InMemoryVectorStore
  2. from langchain_community.embeddings import DashScopeEmbeddings
  3. from langchain_community.document_loaders import CSVLoader

  4. vector_store = InMemoryVectorStore(   #内存存储
  5.     embedding=DashScopeEmbeddings()
  6. )


  7. loader = CSVLoader(
  8.     file_path="E:/P3_LangChainRAG开发/data/info.csv",
  9.     encoding="utf-8",
  10.     source_column="source",     # 指定本条数据的来源是哪里
  11. )

  12. documents = loader.load()

  13. print(documents[1])

  14. print(documents)
  15. # In[1]
  16. # id1 id2 id3 id4 ...
  17. # 向量存储的 新增、删除、检索
  18. vector_store.add_documents(
  19.     documents=documents,        # 被添加的文档,类型:list[Document]
  20.     ids=["id"+str(i) for i in range(1, len(documents)+1)] # 给添加的文档提供id(字符串)  list[str]
  21. )

  22. # 删除  传入[id, id...]
  23. vector_store.delete(["id1", "id2"])

  24. # 检索 返回类型list[Document]
  25. result = vector_store.similarity_search(
  26.     "风口",
  27.     3       # 检索的结果要几个
  28. )

  29. print(result)
复制代码

②外部向量持久化存储

  1. from langchain_chroma import Chroma
  2. from langchain_community.embeddings import DashScopeEmbeddings
  3. from langchain_community.document_loaders import CSVLoader

  4. # Chroma 向量数据库(轻量级的)
  5. # 确保 langchain-chroma chromadb 这两个库安装了的,没有的话请pip install

  6. vector_store = Chroma(
  7.     collection_name="test",     # 当前向量存储起个名字,类似数据库的表名称
  8.     embedding_function=DashScopeEmbeddings(),       # 嵌入模型
  9.     persist_directory="E:/chroma_db/chroma_db"     # 指定数据存放的文件夹
  10. )


  11. loader = CSVLoader(
  12.     file_path="E:/P3_LangChainRAG开发/data/info.csv",
  13.     encoding="utf-8",
  14.     source_column="source",     # 指定本条数据的来源是哪里
  15. )

  16. documents = loader.load()
  17. # # id1 id2 id3 id4 ...
  18. # # 向量存储的 新增、删除、检索
  19. vector_store.add_documents(
  20.     documents=documents,        # 被添加的文档,类型:list[Document]
  21.     ids=["id"+str(i) for i in range(1, len(documents)+1)] # 给添加的文档提供id(字符串)  list[str]
  22. )

  23. # # 删除  传入[id, id...]
  24. # vector_store.delete(["id1", "id2"])

  25. # 检索 返回类型list[Document]
  26. result = vector_store.similarity_search(
  27.     "Python是不是简单易学呀",
  28.     3,        # 检索的结果要几个
  29.     filter={"source": "黑马程序员"}
  30. )

  31. print(result)
复制代码


学习视频:【黑马程序员大模型RAG与Agent智能体项目实战教程,基于主流的LangChain技术从大模型提示词到实战项目】 https://www.bilibili.com/video/BV1yjz5BLEoY/?p=43&share_source=copy_web&vd_source=792a2cb63a1882bff4ed856eadc41a71



评分

参与人数 1荣誉 +2 贡献 +3 C币 +3 收起 理由
不二如是 + 2 + 3 + 3 鱼C有你更精彩^_^

查看全部评分

本帖被以下淘专辑推荐:

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2 小时前 | 显示全部楼层
②外部向量持久化存储 报错
  1. Your system has an unsupported version of sqlite3. Chroma                     requires sqlite3 >= 3.35.0.
  2. Please visit                     https://docs.trychroma.com/troubleshooting#sqlite to learn how                     to upgrade.
复制代码



还需要安装后再研究下
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2 小时前 | 显示全部楼层
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,向量数据持久化到本地或远程数据库,可长期使用。


代码实战
  • 内存向量存储示例


  1. from langchain_core.vectorstores import InMemoryVectorStore
  2. from langchain_community.embeddings import DashScopeEmbeddings
  3. from langchain_community.document_loaders import CSVLoader

  4. # 初始化向量存储和嵌入模型
  5. vector_store = InMemoryVectorStore(embedding=DashScopeEmbeddings())

  6. # 加载文档
  7. loader = CSVLoader(
  8.     file_path="data/info.csv",
  9.     encoding="utf-8",
  10.     source_column="source"
  11. )
  12. documents = loader.load()

  13. # 添加文档到向量存储(需提供id列表)
  14. ids = [f"doc_{i}" for i in range(len(documents))]
  15. vector_store.add_documents(documents=documents, ids=ids)

  16. # 相似性搜索
  17. result = vector_store.similarity_search("风口", 3)
  18. print(result)
复制代码


  • 外部向量持久化存储示例


  1. from langchain_chroma import Chroma
  2. from langchain_community.embeddings import DashScopeEmbeddings
  3. from langchain_community.document_loaders import CSVLoader

  4. # 初始化Chroma向量存储
  5. vector_store = Chroma(
  6.     collection_name="test",
  7.     embedding_function=DashScopeEmbeddings(),
  8.     persist_directory="chroma_db"
  9. )

  10. # 加载文档
  11. loader = CSVLoader(
  12.     file_path="data/info.csv",
  13.     encoding="utf-8",
  14.     source_column="source"
  15. )
  16. documents = loader.load()

  17. # 添加文档到向量存储(需提供id列表)
  18. ids = [f"doc_{i}" for i in range(len(documents))]
  19. vector_store.add_documents(documents=documents, ids=ids)

  20. # 相似性搜索并过滤
  21. result = vector_store.similarity_search(
  22.     "Python是不是简单易学呀",
  23.     3,
  24.     filter={"source": "黑马程序员"}
  25. )
  26. print(result)
复制代码


注意事项:
- 使用前请安装必要库,如 langchain-chromachromadb
- 文件路径请根据实际情况调整。
- 添加文档时,ids 参数应为与文档数量匹配的字符串列表。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2026-3-8 16:37

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表