":{"code":400,"message":"request (6930 tokens) exceeds the available context siz...

2026年08月05日 16:29 processing

错误信息

CC Switch local proxy failed while handling Codex endpoint /responses. Provider: Ollama; model: deepseek-r1:7b; upstream_status: HTTP 400; cause: {"error":{"code":400,"message":"request (6930 tokens) exceeds the available context size (4096 tokens), try increasing it","type":"exceed_context_size_error","n_prompt_tokens":6930,"n_ctx":4096}}

AI 解决方案

🔍 报错分析

1. 🌐 错误翻译


原文:request (6930 tokens) exceeds the available context size (4096 tokens), try increasing it
译文:请求(6930个token)超出了可用的上下文大小(4096个token),请尝试增加它

2. 🎯 原因分析


  • 根本原因:模型deepseek-r1:7b的最大上下文窗口为4096个token,但当前请求包含6930个token,远超模型支持的上限。

  • 错误位置:Ollama提供的模型服务端,在处理/responses端点时,对输入的上下文长度进行了校验,因超过限制返回HTTP 400错误。
  • 3. 💡 解决方案


    核心思路:控制输入模型的token总数在4096以内,可对长文本进行分块处理或截断,以下为使用分块策略的代码示例(Python示例,基于常见LLM调用逻辑):

    ```python
    def split_long_text_for_model(text, model_ctx_limit=4096, reserved_tokens=100):
    """
    将长文本分割为不超过模型上下文限制的块,保留空间给回复生成
    :param text: 待处理的长文本
    :param model_ctx_limit: 模型最大上下文token数
    :param reserved_tokens: 预留给模型生成回复的token空间
    :return: 文本块列表(每个块token数控制在限制内)
    """
    # 简单按句分割(实际需结合具体token计算逻辑,此处示例用句子切割)
    sentences = text.split('. ')
    chunks = []
    current_chunk = ""
    current_token_count = 0 # 简化模拟,实际需用tokenizer统计(如tiktoken)

    for sentence in sentences:
    # 估算句子token数(简化示例,实际需替换为真实的token计算)
    sentence_token_count = len(sentence.split()) + 1 # 粗略估算
    if current_token_count + sentence_token_count > model_ctx_limit - reserved_tokens:
    if current_chunk:
    chunks.append(current_chunk.strip())
    current_chunk = sentence + ". "
    current_token_count = sentence_token_count
    else:
    current_chunk += sentence + ". "
    current_token_count += sentence_token_count

    if current_chunk:
    chunks.append(current_chunk.strip())
    return chunks