问题概述
通过"自定义模型"(OpenAI 兼容接口)接入的模型,只要单轮 prompt 超过约 262,144 tokens(256K),必然报错:
模型请求失败,请稍后重试。(4054)
而此时:上游服务正常返回了完整响应、用户配置的 prompt_max_tokens(如 936000)已正确下发到客户端原生层。这是客户端原生模块对自定义模型的硬性 prompt 上限,与产品自身的配置字段矛盾。
环境信息
| 项 | 值 |
|---|---|
| 客户端 | Trae CN(Windows x64) |
| appVersion | 3.3.91 |
| buildVersion | 2.3.73737 |
| 模型接入方式 | 自定义模型(custom_openai_compatible,client_connect) |
| 上游 | OpenAI 兼容中转(kimi-k3,1M 上下文) |
复现步骤
- 设置 → 自定义模型,接入一个支持长上下文(≥512K)的 OpenAI 兼容端点,
prompt_max_tokens设为 936000(或 1048576) - 在 Agent(solo_agent)会话中持续对话,使累积上下文超过 256K tokens
- 发送下一条消息 → 必现 4054
证据链
1. 上游完全正常(直连测试)
绕过 Trae,用同一 API key 直接请求上游(流式模式):
| prompt tokens | 结果 |
|---|---|
| 198,464 / 258,406 / 317,597(随机文本,无缓存) | |
| 376,479 / 470,571 / 658,756 / 846,941 | |
| 故意超限 1,488,811 | Your request exceeded model token limit: 1048576 (requested: 1488811) |
上游硬上限为 1,048,576,且超过 256K 无任何限制。
2. 抓包证明:上游返回了完全正常的响应,Trae 仍报 4054
在自定义模型 base_url 与上游之间插入抓包代理,失败请求的完整响应为:
data: {"choices":[{"delta":{"tool_calls":[...]}}], ...}
data: {"choices":[{"delta":{},"finish_reason":"tool_calls",
"usage":{"prompt_tokens":282638,"completion_tokens":111,"total_tokens":282749}}]}
data: [DONE]
响应体合法、完整、正常结束(HTTP 200, text/event-stream, 以 [DONE] 收尾)。Trae 在收到该正常响应后报出 4054。
3. Trae 自身日志
%APPDATA%\Trae CN\logs\<时间戳>\window1\renderer.log:
[ai-chat/v2] [ErrorHandler] Handling error event
{"sessionId":"...","errorCode":4054,
"errorMessage":"Custom model internal error occurred. Please check the proxy response for details."}
4. 精确失败阈值
| prompt_tokens(上游 usage) | 结果 |
|---|---|
| 254,905 | |
| 264,740 / 265,032 / 265,284 / 282,638 |
阈值与 262,144(0x40000) 完全吻合。
5. 客户端原生层证据
-
ai_agent.dll内存在字符串[task] prompt token exceed limit:,与 4054 时序吻合 -
原生层数据库(
ModularData/ai-agent/database.db→chat_message.user_message_context)中,客户端下发给原生层的 model_info 为:
{
"config_name": "custom_openai_compatible//kimi-k3",
"config_source": 3,
"prompt_max_tokens": 936000,
"context_window_sizes": null,
"max_tokens": 64000,
"max_turn": 200
}
即 prompt_max_tokens: 936000 已正确送达原生层,但校验并未采用它;context_window_sizes 为 null,疑似落入 ~262144 的默认分支。
6. 自定义模型代码路径中存在相关配置键
ai_agent.dll 字符串表中存在 customPromptTokenLimit、customPromptTokenLimitM8 等配置键,但动态配置接口(/icube/api/v1/native/config/query)响应为加密数据,无法确认该限额的服务端设定值。
结论与诉求
-
Bug:自定义模型的 prompt 上限被客户端原生层限制为 ~262,144 tokens,且:
-
未采用用户配置的
prompt_max_tokens(936000 已送达仍无效) -
context_window_sizes为 null 时使用了过小的默认值 -
错误信息(“Please check the proxy response”)具有误导性——代理/上游完全正常,问题在客户端自身校验
-
-
诉求:
-
自定义模型的 prompt 校验应尊重
prompt_max_tokens配置(或context_window_sizes) -
若 256K 为产品有意限制,请在文档/设置页明确说明,并将错误码/错误信息改为明确提示(如"自定义模型 prompt 超出客户端限制 256K")
-
附:可提供的材料
-
抓包代理捕获的完整请求/响应样本(含 282,638 prompt_tokens 的正常响应)
-
直连上游的梯度测试脚本与结果
-
Trae 日志目录(renderer.log 中多次 4054 记录)
-
原生层数据库中 model_info 的完整 dump


