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

将Confluence数据存入Chroma向量库时触发APIConnectionError,求解决方案

将百万级Confluence文本持久化到Chroma向量库时出现APIConnectionError,如何解决?

我已成功加载并处理规模如下的Confluence数据:

  • 868份文档
  • 100万段拆分文本

但当我尝试通过以下代码将其持久化到向量库时:

vectordb = Chroma.from_documents(
    documents=splits,
    embedding=embedding,
    persist_directory=persist_directory
)

该操作在普通笔记本上运行了数小时,最终抛出APIConnectionError: Connection error异常。

请问这是否属于超时问题?若是,该如何解决?有任何思路吗?


问题分析与解决方案

这个APIConnectionError大概率和超时或远程API限流有关,尤其是处理百万级文本时,持续调用远程嵌入模型(比如Azure OpenAI嵌入)很容易触发连接中断、请求超时或API限制。以下是针对性解决思路:

  1. 拆分批次处理
    一次性处理100万条数据压力过大,分成小批次逐步处理,每批完成后持久化并短暂休眠,避免持续请求导致连接崩溃。示例代码:

    from langchain.vectorstores import Chroma
    import time
    
    batch_size = 500  # 根据自身情况调整批次大小
    vectordb = None
    
    for i in range(0, len(splits), batch_size):
        batch_splits = splits[i:i+batch_size]
        if not vectordb:
            # 初始化向量库
            vectordb = Chroma.from_documents(
                documents=batch_splits,
                embedding=embedding,
                persist_directory=persist_directory
            )
        else:
            # 追加文档到已有向量库
            vectordb.add_documents(documents=batch_splits)
        # 每批处理后持久化
        vectordb.persist()
        # 休眠避免触发API限流
        time.sleep(10)
    
  2. 延长嵌入模型超时时间
    如果使用的是远程嵌入服务(比如Azure OpenAI),初始化时设置更长的超时参数,给请求足够的响应时间:

    from langchain.embeddings import AzureOpenAIEmbeddings
    
    embedding = AzureOpenAIEmbeddings(
        azure_deployment="你的部署名称",
        openai_api_version="你的API版本",
        timeout=60  # 延长超时至60秒,可按需调整
    )
    
  3. 添加重试机制
    针对临时的连接中断,给嵌入请求添加重试逻辑,用tenacity库实现自动重试:

    from tenacity import retry, stop_after_attempt, wait_exponential
    from langchain.embeddings import AzureOpenAIEmbeddings
    
    class RetryEnabledEmbeddings(AzureOpenAIEmbeddings):
        @retry(stop=stop_after_attempt(3), wait=wait_exponential(multiplier=1, min=2, max=10))
        def embed_documents(self, texts):
            return super().embed_documents(texts)
    
    embedding = RetryEnabledEmbeddings(
        azure_deployment="你的部署名称",
        openai_api_version="你的API版本"
    )
    
  4. 切换本地嵌入模型
    若网络不稳定或远程API限制严格,改用本地开源嵌入模型(如BAAI/bge-small-zh-v1.5),完全避免远程调用的网络问题:

    from langchain.embeddings import HuggingFaceEmbeddings
    
    embedding = HuggingFaceEmbeddings(model_name="BAAI/bge-small-zh-v1.5")
    
  5. 优化数据质量
    检查拆分后的文本,过滤掉空白、重复或无意义的片段,减少实际需要处理的数据量,同时确保单段文本长度符合嵌入模型的输入限制,避免因超长文本导致请求失败。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 01:17:08