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

如何将Chainlit连接至持久化ChromaDB,实现多用户共享向量库

解决Chainlit RAG应用连接共享持久化Chroma向量库的问题

步骤1:预初始化持久化Chroma向量库

先单独运行一次脚本,把需要共享的PDF文档导入Chroma并持久化存储,后续所有Chainlit会话直接复用这个库:

from langchain.document_loaders import PyPDFLoader
from langchain.embeddings.openai import OpenAIEmbeddings
from langchain.vectorstores import Chroma

# 加载目标PDF(替换为你的文件路径)
loader = PyPDFLoader("target_document.pdf")
documents = loader.load_and_split()

# 初始化Embeddings并创建持久化Chroma库
embeddings = OpenAIEmbeddings()
# 指定本地持久化目录,所有会话将共享此目录下的向量数据
db = Chroma.from_documents(
    documents=documents,
    embedding=embeddings,
    persist_directory="./shared_chroma_db"
)
# 强制持久化数据到磁盘
db.persist()

步骤2:修改Chainlit应用代码,连接共享向量库

移除原代码中每次会话要求用户上传PDF的逻辑,改为在应用启动时直接连接已有的持久化Chroma库:

import chainlit as cl
from langchain.embeddings.openai import OpenAIEmbeddings
from langchain.vectorstores import Chroma
from langchain.chains import RetrievalQA
from langchain.llms import OpenAI

# 全局初始化:仅在应用启动时执行一次,复用共享向量库
embeddings = OpenAIEmbeddings()
db = Chroma(
    persist_directory="./shared_chroma_db",
    embedding_function=embeddings
)
retriever = db.as_retriever()
qa_chain = RetrievalQA.from_chain_type(
    llm=OpenAI(temperature=0),
    chain_type="stuff",
    retriever=retriever
)

@cl.on_chat_start
async def start_session():
    # 告知用户已连接共享知识库,无需上传文件
    await cl.Message(content="已接入共享知识库,可直接提问。").send()

@cl.on_message
async def handle_message(message: cl.Message):
    # 调用QA链处理用户查询并返回结果
    result = qa_chain({"query": message.content})
    await cl.Message(content=result["result"]).send()

关键注意事项

  • 目录权限:确保./shared_chroma_db目录在Chainlit运行环境中具备读写权限,所有会话都能访问该目录
  • 知识库更新:若需新增/替换文档,重新运行步骤1的初始化脚本即可,Chroma会自动更新向量数据
  • 环境变量:运行脚本和Chainlit应用时,需设置OPENAI_API_KEY环境变量以调用OpenAI的Embeddings和LLM服务

内容的提问来源于stack exchange,提问作者raju

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 05:07:14