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

Docker部署ChromaDB跨Lambda函数无法持久化集合问题

Lambda创建Chroma集合后查询不到的解决方法

1. 异步操作未完成导致集合未实际创建

你的创建Lambda代码中,forEach遍历异步函数时没有等待所有操作完成,Lambda执行到代码末尾就会终止,此时集合可能还未创建成功或数据未写入完成。

问题代码片段

body.branches.forEach((branch) => {
    chroma.createCollection({
        name: `${body.userId}--${body.path}--${branch}`,
    });
});

body.projectFiles.forEach(async (projectFile) => {
    const collection = await chroma.getCollection({
        name: `${body.userId}--${body.path}--${projectFile.branch}`,
        embeddingFunction: defaultEF,
    });

    await collection.add({
        ids: projectFile.files.map((file) => file.path),
        documents: projectFile.files.map((file) => file.contents),
    });
});

修正代码

改用Promise.all等待所有异步操作完成:

// 等待所有集合创建完成
await Promise.all(body.branches.map(async (branch) => {
    await chroma.createCollection({
        name: `${body.userId}--${body.path}--${branch}`,
    });
}));

// 等待所有文件数据写入完成
await Promise.all(body.projectFiles.map(async (projectFile) => {
    const collection = await chroma.getCollection({
        name: `${body.userId}--${body.path}--${projectFile.branch}`,
        embeddingFunction: defaultEF,
    });

    await collection.add({
        ids: projectFile.files.map((file) => file.path),
        documents: projectFile.files.map((file) => file.contents),
    });
}));

2. Chroma Docker未配置持久化存储

默认Chroma使用内存存储,容器重启后数据会丢失。必须挂载本地卷实现数据持久化。

修改Docker启动命令

docker run -d -p 8000:8000 -v ./chroma-data:/chroma/chroma langchain/chroma

将./chroma-data替换为你本地要存储数据的目录,确保容器重启后数据不会丢失。

3. 检查ChromaClient配置一致性

确保两个Lambda的ChromaClient配置完全一致,特别是path参数必须指向同一个Chroma服务地址(不能用localhost,需填写Chroma容器的实际IP或域名)。

示例正确配置:

const chroma = new ChromaClient({
    path: "http://your-chroma-docker-ip:8000",
});

4. 验证集合名称是否完全匹配

创建集合的名称是${body.userId}--${body.path}--${branch},查询时是${auth.user}--${body.projectPath}--${body.projectBranch},需确认:

  • body.userId与auth.user值完全一致(注意大小写、格式差异)
  • body.path与body.projectPath路径完全匹配
  • branch与body.projectBranch分支名称一致

可以添加日志打印对比:

// 创建Lambda日志
body.branches.forEach(async (branch) => {
    const colName = `${body.userId}--${body.path}--${branch}`;
    console.log("创建集合:", colName);
    await chroma.createCollection({ name: colName });
});

// 查询Lambda日志
const colName = `${auth.user}--${body.projectPath}--${body.projectBranch}`;
console.log("查询集合:", colName);
const collection = await chroma.getCollection({
    name: colName,
    embeddingFunction: defaultEF,
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 04:25:14