|
|
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 = [f"doc_{i}" for i in range(len(documents))]
- 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 = [f"doc_{i}" for i in range(len(documents))]
- 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 小助理,如未能正确解答您的问题,请继续追问。 |
|