Bug反馈】Agent模式下「自定义模型」无法触发工具调用,仅思考/搜索网页而无任何文件改动

你的运行环境(版本号「点击帮助-关于-复制」):

TraeCode 版本:3.3.95(2026-08-27)/ Windows 操作系统

问题描述(你遇到了什么问题?):

通过「添加模型 ➔ 自定义模型」接入的 API 在 Agent 模式下无法触发文件操作工具(Tool Calling),导致 Agent 假死或任务误判完成(0 文件写入)。

对照测试结论:

  1. 正常情况:使用官方预设通道(如直接在列表选择 DeepSeek / 官方模型)时,Agent 可以正常调用 create_file、write_file,多文件创建和代码写入完全正常。
  2. 异常情况(仅红框「自定义模型」触发):通过「自定义模型」(OpenAI 兼容协议)配置的中转或自定义模型时,在 Agent 模式下:
    • Agent 无法正确发出底层文件写入的 tool_calls,反而频繁陷入无意义的 正在搜索网页… 或长时间空转思考;
    • 耗时数分钟后,模型输出“准备开始写代码”,但未实际写入任何代码文件即直接结束任务;
    • 最终工作区内没有任何文件改动(0 个文件已创建/已修改)

复现步骤(如何才能重现这个 Bug/问题?):
点击「添加模型」,选择最上方的 「自定义模型」(非下方 DeepSeek 等预设厂商);

  1. 配置一个标准 OpenAI 兼容协议的第三方 API Base URL 及 Key;
  2. 打开一个项目,切换到该自定义模型并进入 Agent 模式
  3. 发送多文件创建需求(例如:“请在项目中创建 Models 目录及相关文件并写入代码”);
  4. 观察结果:Agent 陷入搜索网页或长思考,未创建任何文件即提示完成;而换成预设厂商通道则能秒级创建文件。

报错信息或截图(如有):

你好,关于你在 Agent 模式下使用自定义模型无法触发工具调用的情况,当前帖子里的信息还不足以形成可靠结论。

请在本帖补充以下信息以便进一步排查:

  • TRAE IDE 版本
  • 操作系统
  • 复现步骤
  • 可用的截图或日志

(注意到你已经提供了版本、系统、步骤和截图,请在此基础上补充相关的运行日志文件。)

发下对话ID

1167027396164747:888bf3661aff25c08c9617a21be12290_6a9548a3b04e961d07ab2ad5.6a954f621245f3c214866b77.6a954f621245f3c214866b75:TraeCode CN.3.3.95.no_sid.no_ppe.T(2026/8/31 17:54:42)

1167027396164747:8654fe9af2f090d6567e7c99edd6699d_6a9548a3b04e961d07ab2ad5.6a9548b1b04e961d07ab2b1c.6a9548b1b04e961d07ab2b1a:TraeCode CN.3.3.95.no_sid.no_ppe.T(2026/8/31 17:26:09)

1167027396164747:3fcac07b8b4be9038e283cbc25685dab_6a953d9b9d2cbc2dd4719921.6a953daf9d2cbc2dd471993d.6a953daf9d2cbc2dd471993b:TraeWork CN.0.1.60.no_sid.no_ppe.T(2026/8/31 16:39:11)

1167027396164747:266cb2be15448866118ecafd6084fa3e_6a953d9b9d2cbc2dd4719921.6a953f149d2cbc2dd4719949.6a953f149d2cbc2dd4719947:TraeWork CN.0.1.60.no_sid.no_ppe.T(2026/8/31 16:45:08)

你好,这个问题我从技术角度帮你分析一下。自定义模型无法触发工具调用,通常和以下几个因素有关:

  1. 模型本身是否支持 Function Calling / Tool Calling

不是所有模型都原生支持 tool calling 协议。你配置的自定义模型(通过 OpenAI 兼容协议接入)需要在模型层面支持 function calling 能力。如果你的中转服务底层用的是不支持 tool calling 的模型(比如某些开源模型的老版本),Agent 模式下就无法发出工具调用指令。

建议排查方法:用 curl 直接调用你的自定义 API,发送一个带 tools 参数的请求,看返回中是否包含 tool_calls 字段。如果返回中没有 tool_calls,说明你的自定义模型不支持这个能力。

  1. API 中转服务的协议兼容性

即使底层模型支持 tool calling,如果你的中转服务(如 one-api、new-api 等)在转发时没有正确透传 tools 参数,或者对响应格式做了二次处理导致 tool_calls 字段丢失,也会出现你描述的现象。建议检查中转服务的日志,看 tools 参数是否被正确转发。

  1. TraeCode 客户端对自定义模型的 tool calling 支持

从你的截图来看,官方预设通道(DeepSeek 等)能正常触发工具调用,说明 TraeCode 客户端的工具调用逻辑本身没问题。问题出在自定义模型通道上。建议在 TraeCode 的日志中查看发送给自定义模型的请求体,确认 tools 参数是否被正确拼装到请求中。

希望这些排查方向能帮你定位问题!

感谢详细的排查指导!我已经按照建议,使用脚本对该 API(https://agentrouter.org 上的 glm-5.3 模型)进行了携带 tools 参数的完整请求抓包测试,定位到了核心原因:

1. 模型与中转的 Tool Calling 能力正常:
通过携带 tools 的请求测试,接口能够正常返回标准的 “tool_calls”: [{“name”: “get_weather”, …}] 以及 “reasoning_content”,证明模型和中转层本身是具备 OpenAI 格式的工具调用能力的。

2. 导致在 Trae 中假死 / 0 文件修改的直接原因:

  • 中转服务存在客户端白名单校验:该中转平台(AgentRouter)拦截了非白名单客户端。当使用 Trae 默认的请求头访问时,接口会直接拦截并返回 {“error”: {“message”: “unauthorized client detected”, “type”: “unauthorized_client_error”}};只有在请求头中伪装白名单 User-Agent 后才能正常放行并返回 tool_calls。
  • Trae 客户端的异常捕获机制存在优化空间:当第三方 API 返回上述鉴权/拦截错误时,Trae 的 Agent 模式并未直接向用户弹出 API 报错提示,而是退化成了“空转搜索 / 输出准备写代码但无操作”的假完成状态。

对 Trae 团队的两点优化建议:

  1. 支持自定义 HTTP Headers:建议在「自定义模型」配置中开放请求头设置(如允许用户自定义 User-Agent 等),以兼容部分有防刷/网关校验规则的第三方服务。
  2. 优化 Agent 错误提示:当自定义接口返回 4xx/5xx 或鉴权错误体时,希望能直接在界面高亮报错,而不是让 Agent 吞掉错误后静默结束任务。

再次感谢分析,目前已通过更换无白名单限制的中转渠道正常使用!