CrewAI 0.86 开 memory=True 之后启动直接报 ImportError: cannot import name 'EmbeddingFunction' from 'chromadb',环境里 chromadb 是 0.4.24,crewai 要求 0.5 以上;降级 chromadb 又把另一个 RAG 项目跑挂,两个服务共用一套虚拟环境。

原因不止一个,得分开看。crewai 依赖 chromadb 0.5 的 EmbeddingFunction 接口;同一虚拟环境里另一个包把 chromadb 锁在 0.4.24;pip 解析时先装了旧版,import 阶段才暴露冲突;poetry.lock 没更新,装出来的还是旧版本。

动手时先列出当前环境里 chromadb 的实际版本

pip show chromadb | grep -i version

再往下确认 crewai 要求的版本区间

pip index versions chromadb

然后把 chromadb 升到 0.5 系列后验证导入

pip install 'chromadb>=0.5.23,<0.6' && python -c "from chromadb.utils.embedding_functions import EmbeddingFunction;print('ok')"

给两个项目拆独立虚拟环境再各跑一次

python -m venv .venv-crewai && .venv-crewai/Scripts/pip install crewai==0.86.0

命令输出我都留了记录,免得改完记不清原来的值。

改之前先确认了最近有没有人动过配置,避免白查一遍。

改完先别撤,确认这几项。两个服务各自启动都不再报 ImportError,CrewAI 的 memory 能写入并召回上一轮结论,chromadb 的集合数量正常增长。

这类冲突不是版本越高越好,而是两个依赖树要能共存;推理服务和 RAG 服务共用环境迟早撞版本,拆 venv 或容器是最省事的做法。这类问题最好一次改到位,反复小改反而容易把原因搅混。

作者 9823189