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

stream:true 与 tools 同时使用,需要切到非流式请求或升级包含修复的 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: false 和 singleAction: 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 中转站场景下的排查步骤
- 确认 n8n OpenAI Chat Model 的 Base URL 写到
https://api.deepai.wang/v1,不要写成/v1/chat/completions。 - 先跑一个不带 Tools 的普通 AI Agent 请求,确认 Key、模型 ID 和 DeepAI API 中转站路由可用。
- 再接入一个最小工具,例如只返回固定字符串或查询一条 SQL,确认错误是否只在工具调用时出现。
- 查看 DeepAI API 中转站日志,确认请求体里是否同时存在
tools和stream:true。 - 升级 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 Issue #13112:OpenAI Chat Model node add option to disable streaming
- n8n PR #16888:修复 Tools Agent streaming issue
- n8n Tools Agent bindTools 工具调用排查
- DeepAI API 中转站教程导航
总结
n8n 接入 DeepAI API 中转站后,Tools Agent 报 Cannot use tools with stream,优先检查工具调用请求是否同时包含 tools 和 stream:true。这个错误通常说明目标 OpenAI-compatible 后端不支持流式工具调用,而不是 Key 或 Base URL 错误。升级 n8n 到包含 PR #16888 相关修复的版本,或让工具调用走非流式链路,再结合 DeepAI API 中转站日志验证状态码和 token 用量,能更快把自动化工作流跑稳定。