DeepAI Paper API 中转站,OpenAI Compatible API,代码 Agent 教程,客户端接入,错误排查 n8n 接入 DeepAI API 中转站:Tools Agent 报 Cannot use tools with stream 怎么排查

n8n 接入 DeepAI API 中转站:Tools Agent 报 Cannot use tools with stream 怎么排查

n8n 的 AI Agent / Tools Agent 很适合把数据库查询、CRM 操作、日程创建和内部系统 API 串成自动化流程。但当它通过 OpenAI-compatible Chat Model 接入 DeepAI API 中转站 或其他模型网关时,普通聊天能通,带工具调用却失败,是很常见的生产排查题。一个典型错误是:Cannot use tools with stream

n8n Tools Agent 接入 DeepAI API 中转站报 Cannot use tools with stream 的排查流程
Tools Agent 的工具调用链路里,如果目标 OpenAI-compatible 服务不支持 stream:truetools 同时使用,需要切到非流式请求或升级包含修复的 n8n 版本。

GitHub Issue 背景:工具调用遇到 stream:true 直接 500

这个问题来自 n8n Issue #13112。用户在 n8n 1.76.1 中搭了一个 AI Agent(Tools Agent)工作流,工具用于执行 SQL 查询,OpenAI-compatible 端点后面接的是 LLaMA.cpp。AI Agent 发起请求后,服务端返回:

{"code":500,"message":"Cannot use tools with stream","type":"server_error"}

用户把 n8n 发出的 POST 请求抓出来,把 "stream": true 改成 "stream": false 后用 Postman 重发,流程就能正常工作。这说明问题不是 API Key、Base URL 或工具 schema,而是该 OpenAI-compatible 后端不支持在流式输出里同时处理工具调用。

修复线索:PR #16888 处理了 Tools Agent 的 streaming 问题

Issue 后续评论标记为 PR #16888 修复。PR 摘要里提到,在 Tools Agent 创建自定义 RunnableSequence 时,streamRunnable 没有正确传给 AgentExecutor,因此修复中显式设置了 streamRunnable: falsesingleAction: false

这点对 DeepAI API 中转站用户很重要:中转站能把 n8n 请求统一转发到兼容模型服务,并提供日志、鉴权、限流和模型路由。但如果客户端在工具调用链路里发送了目标后端不支持的参数组合,例如 tools + stream:true,中转站不能凭空判断业务意图。正确做法是让 n8n 侧进入非流式工具调用,或升级到包含相关修复的版本。

错误请求和正确请求有什么差别

失败请求通常类似下面这样:既带了工具定义,又开启了流式输出。

{
  "model": "your-model",
  "messages": [
    {"role": "user", "content": "查询最近 10 条订单"}
  ],
  "tools": [
    {
      "type": "function",
      "function": {
        "name": "query_sql",
        "parameters": {
          "type": "object",
          "properties": {
            "sql": {"type": "string"}
          },
          "required": ["sql"]
        }
      }
    }
  ],
  "stream": true
}

对不支持工具流式调用的后端,工具链路应改为非流式:

{
  "model": "your-model",
  "messages": [
    {"role": "user", "content": "查询最近 10 条订单"}
  ],
  "tools": [...],
  "stream": false
}

这不是说所有模型都不能同时支持 streaming 和 tools。有些服务可以在流式响应里分块返回 tool call,有些服务不支持。排查时要以目标模型服务和中转站日志中的实际错误为准。

DeepAI API 中转站场景下的排查步骤

  1. 确认 n8n OpenAI Chat Model 的 Base URL 写到 https://api.deepai.wang/v1,不要写成 /v1/chat/completions
  2. 先跑一个不带 Tools 的普通 AI Agent 请求,确认 Key、模型 ID 和 DeepAI API 中转站路由可用。
  3. 再接入一个最小工具,例如只返回固定字符串或查询一条 SQL,确认错误是否只在工具调用时出现。
  4. 查看 DeepAI API 中转站日志,确认请求体里是否同时存在 toolsstream:true
  5. 升级 n8n 到包含 Tools Agent streaming 修复的版本;若仍使用旧版,则避免在工具调用场景强制流式输出。

如果后台日志里没有请求,问题还在 n8n 到中转站的连接层;如果后台有请求且错误是 Cannot use tools with stream,重点就转到客户端发送的参数组合和目标模型服务能力。

不要把它和工具 schema 错误混淆

n8n、Dify、Cherry Studio 这类 Agent 工具接入中转站时,工具调用失败至少有三类常见原因:

  • 连接错误:Base URL、Key、模型 ID、代理网络配置错误,通常表现为 401、404 或后台无日志。
  • 工具 schema 错误:例如数组参数缺少 items,表现为 invalid_function_parameters 或类似校验失败。
  • 流式工具调用错误:请求有 tools,同时有 stream:true,后端返回 Cannot use tools with stream

只有把错误归类清楚,才不会陷入“换 Key、换模型、换 Base URL”的循环。DeepAI API 中转站日志在这里的价值,就是帮助你判断请求是否到达、路径是否正确、目标模型返回了什么字段。

生产环境建议:把工具调用单独做验收

很多团队上线 n8n Agent 时,只测试“模型能回答一句话”,但没有测试工具 roundtrip。真正稳定的验收应该包含:

  • 普通 Chat Completion 是否成功。
  • Tools Agent 是否能生成正确 tool call。
  • 工具执行结果是否能回传给模型。
  • 模型是否能基于工具结果生成最终回答。
  • DeepAI API 中转站是否记录了完整状态码、耗时和 token 用量。

如果目标后端暂时不支持工具流式调用,优先保证工具链路正确,再考虑是否需要流式输出体验。对自动化工作流来说,最终结果可靠通常比边生成边显示更重要。

适用场景

  • n8n AI Agent 调用 SQL、HTTP Request、CRM、表格或内部系统 API。
  • OpenAI-compatible 后端是自建模型、LLaMA.cpp、OpenWebUI、企业代理或第三方网关。
  • 通过 DeepAI API 中转站统一管理 Key、模型路由、额度和日志。
  • 普通聊天成功,但一接 Tools Agent 就返回 500 或工具调用失败。

参考资料

总结

n8n 接入 DeepAI API 中转站后,Tools Agent 报 Cannot use tools with stream,优先检查工具调用请求是否同时包含 toolsstream:true。这个错误通常说明目标 OpenAI-compatible 后端不支持流式工具调用,而不是 Key 或 Base URL 错误。升级 n8n 到包含 PR #16888 相关修复的版本,或让工具调用走非流式链路,再结合 DeepAI API 中转站日志验证状态码和 token 用量,能更快把自动化工作流跑稳定。

Related Post

Claude code deepai web search tool calling.png

Claude Code 接入 DeepAI API 中转站:正常对话可用但 Web Search 和工具调用失败怎么办Claude Code 接入 DeepAI API 中转站:正常对话可用但 Web Search 和工具调用失败怎么办

Claude Code 通过 API 中转站或兼容网关时,普通对话能用但 Web Search、MCP 或工具调用失败怎么办?本文结合 Bifrost GitHub 已关闭 Issue,整理 Base URL、Headers、模型能力和工具支持的排查方法。

Claude code deepai mcp empty params serialization.png

Claude Code 接入 DeepAI API 中转站:MCP 工具参数变成空对象 {} 的排查Claude Code 接入 DeepAI API 中转站:MCP 工具参数变成空对象 {} 的排查

Claude Code 使用 MCP 工具时,如果工具被调用但 MCP Server 收到的 arguments 变成 {},不要只排查 API 中转站。本文结合 anthropics/claude-code Issue #3966,讲清如何区分 DeepAI API 中转站请求、模型 tool use、Claude Code MCP 参数序列化和 MCP Server schema 四个层面。