Agent build by chatting raise invoker error

该报错通常发生在 Dify 自托管环境使用第三方 vLLM 模型插件调用 Qwen 系列模型时,Dify Agent V2 运行时将系统消息插入到消息数组的非首位,Qwen 聊天模板严格拒绝并返回 400 错误。优先排查方式:确认使用的模型插件是否为第三方 vLLM 插件,尝试切换为内置 OpenA

快速结论:该报错通常发生在 Dify 自托管环境使用第三方 vLLM 模型插件调用 Qwen 系列模型时,Dify Agent V2 运行时将系统消息插入到消息数组的非首位,Qwen 聊天模板严格拒绝并返回 400 错误。优先排查方式:确认使用的模型插件是否为第三方 vLLM 插件,尝试切换为内置 OpenAI 兼容提供方。

适用环境:Dify 1.16.1(Docker 自托管),自建 vLLM 服务(Qwen3.8-27B),第三方插件 yangyaofei/vllm:0.2.3,本地沙箱(local_sandbox)与插件守护进程(plugin_daemon)。

最快修复方案:暂无确认的一步修复方案。Issue 中提出了三种可能方案,均为可优先尝试的替代思路:手动应用 PR #39136 补丁、改用内置 OpenAI 兼容提供方插件指向同一 vLLM 端点、或临时更换为不强制系统消息顺序的模型(如 DeepSeek、GPT-4o)验证 Agent 本身可用。

注意事项:上述方案均为推论或待验证思路,Issue 中未确认是否实际解决。手动打补丁可能影响后续升级,且需确认 PR #39136 是否适用于 1.16.1 版本;第三方插件可能绕过 dify-agent 适配层的系统消息规范化逻辑。

问题场景

用户使用 Dify 1.16.1(Docker 自托管)对接自建 vLLM 服务(Qwen3.8-27B),在 Dify 的 Agent 功能中通过“Build by Chatting”方式构建 Agent 时,触发异常。后端日志显示本地沙箱(local_sandbox)正常完成代码执行,随后调用 Qwen3.8-27B 模型,但插件守护进程(plugin_daemon)返回错误响应,导致 Agent 构建失败。

报错原文

[models] Error: API request failed with status code 400: {"error":{"message":"System message must be at the beginning.","type":"BadRequestError","param":null,"code":400}}

原因分析

可能原因是 Dify 的 Agent V2 运行时与 vLLM 服务的 Qwen 模型之间存在兼容性问题。具体来说:Agent 运行时在多轮对话执行过程中,可能会将指令/系统消息插入到消息数组的非首位位置,而 Qwen 的聊天模板严格限制系统消息必须位于消息数组的第一个位置,否则会直接返回 400 错误。第三方插件(yangyaofei/vllm:0.2.3)可能自行构建消息数组,从而绕过了 dify-agent 适配层的系统消息规范化处理。

Dify 侧已通过 PR #39136 尝试修复此问题,方案是将所有系统消息合并为一条并放置在数组最前面再发送给模型。但由于用户使用的是 1.16.1 版本,该修复可能尚未发布到该版本,或未覆盖第三方插件的消息处理逻辑。

环境排查

  • 确认 Dify 版本是否为 1.16.1,以及是否有更新补丁版本可升级(PR #39136 的修复可能包含在后续版本中)。
  • 确认当前使用的模型提供方插件类型:是第三方 yangyaofei/vllm 插件,还是内置的 OpenAI 兼容提供方插件。
  • 确认 vLLM 服务版本、Qwen 模型版本以及模型模板(chat template)是否对系统消息位置有严格限制。
  • 检查插件版本(yangyaofei/vllm:0.2.3)是否有更新版本,或 Dify 插件市场是否有替代的 vLLM 接入插件。

解决步骤

  1. 可优先尝试:在 Dify 模型提供方中改用内置的 OpenAI 兼容提供方,填入同一 vLLM 端点地址,再重新测试 Agent “Build by Chatting” 功能,验证是否仍会报错。
  2. 若问题消失,则确认是第三方插件消息处理导致;可继续使用 OpenAI 兼容提供方,或排查第三方插件是否提供更新的版本。
  3. 若需要继续使用第三方插件,可考虑手动应用 PR #39136(https://github.com/langgenius/dify/pull/39136)中的补丁,修改 dify-agent/src/dify_agent/adapters/llm/model.py,实现系统消息前置合并逻辑。
  4. 作为临时验证手段,可尝试更换为不强制系统消息顺序的模型(如 DeepSeek、GPT-4o),确认 Agent 流程本身可用,再回头排查 Qwen/vLLM 兼容性问题。

验证方法

完成上述任一解决方案后,重新在 Dify 中尝试使用 Agent 的 “Build by Chatting” 功能,观察是否仍出现 400 错误。若不再出现 “System message must be at the beginning.” 报错,且 Agent 构建流程正常执行,即可确认问题已解决。

参考来源

langgenius/dify #41047

GamsGo AI

AI 工具推荐

想把多个 AI 模型放在一个入口?

GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。

了解 GamsGo AI

推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。

这个方案解决了吗?

celebrityanime
celebrityanime
文章: 19630

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注