Vector stores 向量存储
基于LangChain的向量存储,存储嵌入数据,并执行相似性搜索。

image.png
如图,这是一个典型的向量存储应用,也即是典型的RAG流程。
这部分开发主要涉及到:
- 如何文本转向量
- 创建向量存储,基于向量存储完成:
** 存入向量
** 删除向量
** 向量检索
内置向量存储的使用
from langchain_core.vectorstores import InMemoryVectorStore
from langchain_community.embeddings import DashScopeEmbeddings
vector_store = InMemoryVectorStore(embedding=DashScopeEmbeddings())
# 添加文档到向量存储,并指定id
vector_store.add_documents(documents=[doc1, doc2], ids=["id1", "id2"])
# 删除文档(通过指定的id删除)
vector_store.delete(ids=["id1"])
# 相似性搜索
similar_docs = vector_store.similarity_search("your query here", 4)
外部(Chroma)向量存储的使用
from langchain_community.embeddings import DashScopeEmbeddings
from langchain_chroma import Chroma
vector_store = Chroma(
collection_name="example_collection",
embedding_function=DashScopeEmbeddings(),
persist_directory="./chroma_langchain_db", # Where to save data locally, remove if not necessary
)
stu.csv
name,age,gender,hobby
王梓涵,25,男,"吃饭,rap"
刘若曦,22,女,"睡觉,rap"
陈俊宇,20,男,"吃饭,rap"
赵思瑶,28,女,"睡觉,rap"
黄浩然,15,男,"吃饭,rap"
林雨桐,20,女,"唱跳,rap"
周博文,20,男,"吃饭,rap"
吴诗琪,24,女,"吃饭,rap"
马子轩,22,男,"睡觉,rap"
孙悦然,27,女,"吃饭,rap"
内存向量存储
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(
"data/stu.csv", # CSV文件路径
encoding="utf-8", # 编码格式
source_column="name" # 文档来源列名
)
documents = loader.load()
# 向量存储的新增、删除、检索
vector_store.add_documents(
documents = documents, # 被添加的文档,类型:list[Document]
ids = ["id"+str(i) for i in range(1, len(documents)+1)] #给添加的文档提供id(字符串)list[str]
)
# 删除传入[id,id...]
vector_store.delete(["id1", "id2"])
# 检索传入查询字符串
results = vector_store.similarity_search(
"周博文",
k=3 # 返回的文档数量,默认值为1
)
print(results)
外部向量持久化存储
from langchain_community.embeddings import DashScopeEmbeddings
from langchain_community.document_loaders import CSVLoader
from langchain_chroma import Chroma
# Chroma向量数据库(轻量级的)
# 确保langchain-chroma和chromadb这两个库安装了最新版本
vector_store = Chroma(
collection_name="test", #当前向量存储起个名字,类似数据库的表名称
embedding_function=DashScopeEmbeddings(), # 向量嵌入模型
persist_directory="./chroma_db" # 持久化目录
)
loader = CSVLoader(
"data/stu.csv", # CSV文件路径
encoding="utf-8", # 编码格式
source_column="name", # 文档来源列名
csv_args={"delimiter": ",", "quotechar": "\""} # 明确指定分隔符和引号
)
documents = loader.load()
# 向量存储的新增、删除、检索
vector_store.add_documents(
documents = documents, # 被添加的文档,类型:list[Document]
ids = ["id"+str(i) for i in range(1, len(documents)+1)] #给添加的文档提供id(字符串)list[str]
)
# 删除传入[id,id...]
vector_store.delete(["id1", "id2"])
# 检索传入查询字符串
results = vector_store.similarity_search(
"周博文",
k=3 # 返回的文档数量,默认值为1
# filter={"name": "周博文"} # 过滤条件,类型:dict[str, str]
)
print(results)
(用 python3.14运行此代码会报错,不是代码的问题是3.14太新了,换python3.11就可以正常运行了,langchain 和 chromadb 及其底层依赖库 pydantic 目前尚未完全适配 Python 3.14(目前 Python 3.14 还处于早期开发/测试阶段,并非稳定版)。chromadb 内部使用了 pydantic 的旧版本特性(v1),而这些特性在 Python 3.14 中无法正常工作,导致类型推断失败。)
Langchain内提供向量存储功能,可以基于:
- InMemoryVectorStore,完成内存向量存储
- Chroma,外部数据库向量存储
向量存储类均提供3个通用API接口:
- add_document,添加文档到向量存储
- delete,从向量存储中删除文档
- similarity_search:相似度搜索
整体向量存储使用流程如下(RAG流程):

image.png