AttributeError: ‘coroutine’ object has no attribute ‘get_or_create_collection’

用户在 LangChain 中使用 langchain_chroma.Chroma 向量存储,并意图配合 chromadb.AsyncHttpClient 异步 HTTP 客户端。触发于 Chroma 构造函数初始化时,调用内部方法 __ensure_collection 以获取或创建集合。

AttributeError: 'coroutine' object has no attribute 'get_or_create_collection'

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(本例)。

解决步骤

  1. 确认异步客户端是否正确初始化:在调用 chromadb.AsyncHttpClient(...) 时,务必加上 await 关键字。例如:
    self._client = await chromadb.AsyncHttpClient(host=..., port=..., headers=..., tenant=..., database=...)
    如果调用发生在 __init__ 或其他非异步函数中,请确保其位于 async def 函数内部。
  2. 检查 langchain_chroma.Chroma 构造函数是否支持异步客户端:查看已安装的 langchain_chroma 版本。在 Issue 提到的版本中,Chroma 构造函数设计为仅接收同步客户端。如果必须使用异步客户端,可优先尝试以下方案:
    • 使用同步的 chromadb.HttpClient:如果不要求异步非阻塞操作,可改用 chromadb.HttpClient()(同步版)。
    • 升级 langchain-chroma 到包含异步支持的版本:查阅 release notes 或相关 PR(如 #36692, #36950),确认是否有官方实现的异步 Chroma 支持;如果有,则可按文档使用新的 async_client 参数。
  3. 如果官方尚未完全支持异步客户端:可参考社区 PR(如 #35892)中提出的“快速失败”方案:在同步构造函数中检测到异步/协程客户端时,立即抛出明确的 ValueError 提示,帮助开发者更快定位问题,避免被 AttributeError 误导。此方案可在源码手动补丁或等待正式合并。
  4. 或临时采用其他向量数据库:Issue 作者提到已切换至 PostgreSQL 向量数据库(pgvector)。在官方 Chroma 异步支持稳定前,可考虑此替代方案。

验证方法

确认问题已解决的标准:

  • 初始化 Chroma 时不再抛出 AttributeError
  • 如果使用的是异步客户端,确认已正确 await
  • 后续的增删改查操作(如 add_texts, similarity_search)能正常执行。

参考来源

langchain-ai/langchain #30704

GamsGo AI

AI 工具推荐

想把多个 AI 模型放在一个入口?

GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。

了解 GamsGo AI

推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。

celebrityanime
celebrityanime
文章: 8152

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注