”: { “message”: “Error code: 400 - {‘error’: {‘message’: ‘<400> ..InvalidParamet...

2026年05月29日 08:29 31.91 秒 success

错误信息

{ “error”: { “message”: “Error code: 400 - {‘error’: {‘message’: ‘<400> ..InvalidParameter: Range of input length should be [1, 202752]’, ‘type’: ‘invalid_request_error’, ‘param’: None, ‘code’: ‘invalid_parameter_error’}, ‘id’: ‘chatcmpl-6caac0ae-533a-4b38-a944-b9d66a1a0bd1’, ‘request_id’: ‘6caac0ae-533a-4b38-a944-b9d66a1a0bd1’}”, “type”: “rix_api_error”, “param”: “”, “code”: “InvalidParameter” } }

AI 解决方案

🌐 错误翻译


原文:InvalidParameter: Range of input length should be [1, 202752]
译文:无效参数:输入长度范围应为[1, 202752]

🎯 原因分析


根本原因是您发送给API(如聊天补全接口)的输入内容总长度(以token计)超出了该模型或服务设定的上限(202752个token)。这通常发生在对话历史过长系统提示词(system prompt)过于冗长时。

💡 解决方案


核心原则: 计算并压缩您的输入长度(token数),使其低于202752。

以下是通用的修复思路和代码示例(以Python为例,需根据您的实际API调用进行调整):

import tiktoken # 需要安装:pip install tiktoken

def count_tokens(messages, model="gpt-4"):
    """计算消息列表的总token数"""
    encoding = tiktoken.encoding_for_model(model)
    num_tokens = 0
    for message in messages:
        # 每条消息的格式开销
        num_tokens += 4
        for key, value in message.items():
            num_tokens += len(encoding.encode(value))
            if key == "name": # name字段的额外token开销
                num_tokens += 1
    num_tokens += 2 # 每个回复的引导token
    return num_tokens

def truncate_messages(messages, max_tokens=202700):
    """通过移除最早的消息来截断对话历史,使其总token数低于限制"""
    # 1. 保留最后一条系统消息(如果有)和所有用户/助手消息对
    # 2. 从最老的用户-助手消息对开始移除
    truncated_messages = []
    current_tokens = count_tokens(messages) # 初始token数
    
    # 倒序遍历消息,尝试构建一个不超限的列表
    temp_messages = messages.copy()
    while current_tokens > max_tokens and len(temp_messages) > 1:
        # 移除最老的一对消息(通常是第一条用户消息及其对应的助手回复)
        # 注意:此逻辑需根据你的对话结构调整
        removed_msg = temp_messages.pop(0)
        current_tokens = count_tokens(temp_messages)
    
    return temp_messages

# --- 使用示例 ---
your_messages = [
    {"role": "system", "content": "你是一个很长的系统提示..."}, # 假设这个很长
    {"role": "user", "content": "一个很长的问题..."},
    {"role": "assistant", "content": "一个很长的回答..."},
    # ... 更多历史对话
]

# 步骤1:检查当前token数
current_count = count_tokens(your_messages)
print(f"当前输入token数: {current_count}")
# 步骤2:如果超限,则进行截断
if current_count > 202700: # 留一些余量
    your_messages = truncate_messages(your_messages)
    print(f"截断后token数: {count_tokens(your_messages)}")

# 然后将截断后的 `your_messages` 发送给API
# response = client.chat.completions.create(model="...", messages=your_messages)

🛡️ 预防措施


  • 预先计算Token:在调用API前,务必使用tiktoken等库计算输入的总token数,并与模型限制进行比对。

  • 设计分块处理逻辑:对于超长文本(如长文档摘要),应设计逻辑将其拆分为符合长度限制的多个批次进行处理,然后合并结果。