
AttributeError: ‘coroutine’ object has no attribute ‘get_or_create_collection’
快速结论:这个报错发生在尝试将 chromadb.AsyncHttpClient(异步客户端)的协程对象直接传给 langchain_chroma.Chroma(同步初始化)时。优先排查在调用 chromadb.AsyncHttpClient() 时是否漏掉了 await 关键字,导致接收到的是协程对象,而不是真正的客户端实例。
问题场景
用户在 LangChain 中使用 langchain_chroma.Chroma 向量存储,并意图配合 chromadb.AsyncHttpClient 异步 HTTP 客户端。触发于 Chroma 构造函数初始化时,调用内部方法 __ensure_collection 以获取或创建集合。
报错原文
self._vector_store = Chroma(client = self._client, collection_name = self._collection, embedding_function = self._embeddings)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/khteh/.local/share/virtualenvs/rag-agent-YeW3dxEa/lib/python3.12/site-packages/langchain_chroma/vectorstores.py", line 342, in __init__
self.__ensure_collection()
File "/home/khteh/.local/share/virtualenvs/rag-agent-YeW3dxEa/lib/python3.12/site-packages/langchain_chroma/vectorstores.py", line 349, in __ensure_collection
self._chroma_collection = self._client.get_or_create_collection(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
AttributeError: 'coroutine' object has no attribute 'get_or_create_collection'
原因分析
可能原因:
chromadb.AsyncHttpClient()是一个异步工厂函数/类构造器,默认返回一个协程对象(coroutine),而不是一个可直接使用的异步客户端实例。用户未使用await关键字来等待协程执行完成,导致传入Chroma(client = ...)的是协程对象,而非chromadb.AsyncClientAPI实例。- 当前
langchain_chroma.Chroma类的__init__方法仅支持同步的chromadb.ClientAPI实例,不支持直接传入异步客户端或未解析的协程。 - 该项目(LangChain Chroma)的异步支持(如
AsyncHttpClient)尚未完整实现;有多个 PR 和社区讨论指出完全支持异步客户端可能需要独立的异步 Chroma 实现或额外的初始化逻辑。
环境排查
- langchain-chroma 版本:用户示例中为 0.2.2,建议确认最新兼容版本(如 > 0.2.2)。在编写本指南时,自检是否有更新。
- chromadb 版本:需满足
>=0.4.0, <0.7.0,但需确认 AsyncHttpClient 的具体支持版本。 - Python 版本:3.12.7(本例),但异步支持与版本关系不大。
- 操作系统:Linux(本例)。
解决步骤
- 确认异步客户端是否正确初始化:在调用
chromadb.AsyncHttpClient(...)时,务必加上await关键字。例如:
self._client = await chromadb.AsyncHttpClient(host=..., port=..., headers=..., tenant=..., database=...)
如果调用发生在__init__或其他非异步函数中,请确保其位于async def函数内部。 - 检查
langchain_chroma.Chroma构造函数是否支持异步客户端:查看已安装的langchain_chroma版本。在 Issue 提到的版本中,Chroma 构造函数设计为仅接收同步客户端。如果必须使用异步客户端,可优先尝试以下方案:- 使用同步的
chromadb.HttpClient:如果不要求异步非阻塞操作,可改用chromadb.HttpClient()(同步版)。 - 升级 langchain-chroma 到包含异步支持的版本:查阅 release notes 或相关 PR(如 #36692, #36950),确认是否有官方实现的异步 Chroma 支持;如果有,则可按文档使用新的
async_client参数。
- 使用同步的
- 如果官方尚未完全支持异步客户端:可参考社区 PR(如 #35892)中提出的“快速失败”方案:在同步构造函数中检测到异步/协程客户端时,立即抛出明确的
ValueError提示,帮助开发者更快定位问题,避免被AttributeError误导。此方案可在源码手动补丁或等待正式合并。 - 或临时采用其他向量数据库:Issue 作者提到已切换至 PostgreSQL 向量数据库(pgvector)。在官方 Chroma 异步支持稳定前,可考虑此替代方案。
验证方法
确认问题已解决的标准:
- 初始化
Chroma时不再抛出AttributeError。 - 如果使用的是异步客户端,确认已正确
await。 - 后续的增删改查操作(如
add_texts,similarity_search)能正常执行。



