":{"type":"\u003cnil\u003e","message":"InvokeModelWithResponseStream: operation ...

2025年12月23日 16:24 error

错误信息

错误: HTTP 500 {"error":{"type":"\u003cnil\u003e","message":"InvokeModelWithResponseStream: operation error Bedrock Runtime: InvokeModelWithResponseStream, https response error StatusCode: 400, RequestID: 2e7bc8b9-2baa-4161-aa6c-458e1c480e2d, ValidationException: Input is too long for requested model. (request id: 20251223160021127023804SKD4lzpX)"},"type":"error"}

AI 解决方案

错误分析报告

1. 错误翻译

原文:ValidationException: Input is too long for requested model.
译文:验证异常:输入内容对于所请求的模型过长。

2. 原因分析

根本原因:请求发送给 Amazon Bedrock AI 模型的内容(prompt + 上下文)超出了该模型的输入令牌限制。

具体分析

  • HTTP 500 内部服务器错误实际上是转发的 Bedrock Runtime API 的 400 错误

  • Bedrock 模型的 InvokeModelWithResponseStream 操作失败

  • 错误类型为 ValidationException,表明输入参数验证失败

  • 请求 ID:2e7bc8b9-2baa-4161-aa6c-458e1c480e2d
  • 3. 解决方案

    方案一:缩减输入内容


    // 检查并限制输入内容的长度
    const MAX_TOKENS = 4000; // 根据具体模型调整
    
    function truncateInput(text, maxTokens) {
        // 简单的字符截断(实际应使用分词器计算token)
        const estimatedTokens = text.length / 4; // 近似估算
        if (estimatedTokens > maxTokens) {
            return text.slice(0, maxTokens * 4 * 0.9); // 保留90%空间
        }
        return text;
    }
    
    // 使用示例
    const userInput = "您的输入文本...";
    const truncatedInput = truncateInput(userInput, MAX_TOKENS);
    

    方案二:分块处理大型输入


    # 如果必须处理长文本,考虑分块处理
    def chunk_text(text, chunk_size=1000):
        """将长文本分割为多个块"""
        words = text.split()
        chunks = []
        for i in range(0, len(words), chunk_size):
            chunk = ' '.join(words[i:i + chunk_size])
            chunks.append(chunk)
        return chunks
    
    # 逐个处理每个块
    text_chunks = chunk_text(long_text)
    for chunk in text_chunks:
        # 发送每个块到模型
        response = invoke_bedrock_model(chunk)
        process_response(response)
    

    4. ️ 预防措施