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

BedrockEmbeddings批量生成向量嵌入遇ModelTimeoutException求解决方案

解决BedrockEmbeddings批量生成向量嵌入超时问题的思路

关于自动重试功能

LangChain的BedrockEmbeddings本身没有内置超时自动重试,但可以通过配置底层依赖的boto3客户端来实现重试逻辑,针对ModelTimeoutException等可重试错误进行自动重试。

具体解决步骤

  • 配置boto3重试策略
    初始化BedrockEmbeddings时传入自定义的boto3客户端,通过botocore.config.Config设置重试次数、目标错误类型:

    from langchain_community.embeddings import BedrockEmbeddings
    import boto3
    from botocore.config import Config
    
    # 定义重试配置:最多重试3次,针对超时、限流等可重试异常
    retry_config = Config(
        retries={
            'max_attempts': 3,
            'mode': 'standard',
            'retryable_exceptions': [
                'ModelTimeoutException',
                'ThrottlingException',
                'ServiceUnavailableException'
            ]
        }
    )
    
    # 创建带重试配置的Bedrock Runtime客户端
    bedrock_client = boto3.client(
        'bedrock-runtime',
        region_name='us-east-1',
        profile_name='default',
        config=retry_config
    )
    
    # 初始化嵌入工具
    embeddings = BedrockEmbeddings(
        client=bedrock_client,
        model_id="amazon.titan-embed-text-v2:0"
    )
    
  • 减小批量处理规模
    当前单批次250个文档可能过大,尝试将批量拆分为更小的分组(比如50-100个文档一组),分多次调用embed_documents:

    def chunked_embed(embeddings, docs, chunk_size=100):
        all_embeddings = []
        for i in range(0, len(docs), chunk_size):
            chunk = docs[i:i+chunk_size]
            all_embeddings.extend(embeddings.embed_documents(chunk))
        return all_embeddings
    
    # 用分块方式处理原批量文档
    final_embeddings = chunked_embed(embeddings, batch, chunk_size=100)
    
  • 优化单文档长度
    如果存在过长的文档,先对其进行分段拆分(按字符数或语义拆分),生成嵌入后再根据需求合并或保留分段结果,避免单文档处理超时。

  • 切换区域或检查资源
    偶尔的超时可能是目标区域(us-east-1)资源紧张导致,可以尝试切换到其他支持Amazon Titan Embeddings的区域(如us-west-2),观察是否缓解超时问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 12:33:15