You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 15:46:08