Per-User Retrieval是否支持开源向量库ChromaDB?求实现示例
ChromaDB 多用户隔离与Per-User Retrieval实现
ChromaDB本身没有原生的多用户身份验证系统,但可以通过元数据过滤的方式实现用户数据隔离,这是构建Per-User Retrieval的核心思路——为每条向量数据绑定专属用户标识,检索时仅过滤返回该用户的内容,以此保证不同用户数据互不干扰。
实现步骤与示例代码
1. 初始化Chroma向量存储并添加带用户标识的文档
from langchain.vectorstores import Chroma from langchain.embeddings import OpenAIEmbeddings from langchain.text_splitter import CharacterTextSplitter from langchain.schema import Document # 示例文档,每条绑定不同user_id documents = [ {"text": "我的私人医疗记录:血压120/80", "user_id": "user_1"}, {"text": "我的项目计划:完成AI模型训练", "user_id": "user_1"}, {"text": "我的旅行攻略:去日本东京", "user_id": "user_2"}, {"text": "我的财务报表:月收入5000", "user_id": "user_2"}, ] # 转换为LangChain的Document格式,注入用户元数据 lang_docs = [] for doc in documents: lang_docs.append( Document(page_content=doc["text"], metadata={"user_id": doc["user_id"]}) ) # 拆分长文档(按需使用) text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0) split_docs = text_splitter.split_documents(lang_docs) # 初始化Chroma并持久化数据 embeddings = OpenAIEmbeddings() db = Chroma.from_documents(split_docs, embeddings, persist_directory="./chroma_multi_user_db") db.persist()
2. 构建带用户过滤的检索链
from langchain.chains import RetrievalQA from langchain.llms import OpenAI # 封装专属检索器生成函数,仅返回指定用户的内容 def get_user_specific_retriever(user_id): return db.as_retriever( search_kwargs={"filter": {"user_id": user_id}} ) # 为user_1构建检索QA链 user1_retriever = get_user_specific_retriever("user_1") user1_qa_chain = RetrievalQA.from_chain_type( llm=OpenAI(), chain_type="stuff", retriever=user1_retriever ) # 测试查询:仅返回user_1的相关数据 print(user1_qa_chain.run("我的健康情况如何?")) # 为user_2构建检索QA链 user2_retriever = get_user_specific_retriever("user_2") user2_qa_chain = RetrievalQA.from_chain_type( llm=OpenAI(), chain_type="stuff", retriever=user2_retriever ) # 测试查询:仅返回user_2的相关数据 print(user2_qa_chain.run("我计划去哪里旅行?"))
3. 关键注意事项
- 元数据过滤性能:ChromaDB会自动为元数据字段建立基础索引,数据量较大时也能保证过滤检索的效率。
- 权限安全补充:Chroma不负责用户身份校验,需在应用层添加用户登录、权限验证逻辑,确保只有合法用户能传入对应的
user_id。 - 数据持久化:通过
persist_directory保存向量数据,服务重启后用户隔离规则依然生效。
内容的提问来源于stack exchange,提问作者Ailurophile
相关产品推荐
相关产品推荐

