Vector stores 向量存儲
基于LangChain的向量存儲,存儲嵌入數(shù)據(jù),并執(zhí)行相似性搜索。

image.png
如圖,這是一個典型的向量存儲應(yīng)用,也即是典型的RAG流程。
這部分開發(fā)主要涉及到:
- 如何文本轉(zhuǎn)向量
- 創(chuàng)建向量存儲,基于向量存儲完成:
** 存入向量
** 刪除向量
** 向量檢索
內(nèi)置向量存儲的使用
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"
孫悅?cè)?27,女,"吃飯,rap"
內(nèi)存向量存儲
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 # 返回的文檔數(shù)量,默認值為1
)
print(results)
外部向量持久化存儲
from langchain_community.embeddings import DashScopeEmbeddings
from langchain_community.document_loaders import CSVLoader
from langchain_chroma import Chroma
# Chroma向量數(shù)據(jù)庫(輕量級的)
# 確保langchain-chroma和chromadb這兩個庫安裝了最新版本
vector_store = Chroma(
collection_name="test", #當前向量存儲起個名字,類似數(shù)據(jù)庫的表名稱
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 # 返回的文檔數(shù)量,默認值為1
# filter={"name": "周博文"} # 過濾條件,類型:dict[str, str]
)
print(results)
(用 python3.14運行此代碼會報錯,不是代碼的問題是3.14太新了,換python3.11就可以正常運行了,langchain 和 chromadb 及其底層依賴庫 pydantic 目前尚未完全適配 Python 3.14(目前 Python 3.14 還處于早期開發(fā)/測試階段,并非穩(wěn)定版)。chromadb 內(nèi)部使用了 pydantic 的舊版本特性(v1),而這些特性在 Python 3.14 中無法正常工作,導致類型推斷失敗。)
Langchain內(nèi)提供向量存儲功能,可以基于:
- InMemoryVectorStore,完成內(nèi)存向量存儲
- Chroma,外部數(shù)據(jù)庫向量存儲
向量存儲類均提供3個通用API接口:
- add_document,添加文檔到向量存儲
- delete,從向量存儲中刪除文檔
- similarity_search:相似度搜索
整體向量存儲使用流程如下(RAG流程):

image.png