[避坑指南]Qwen3.6-35B-A3B 不支持role仅有system

Qwen3.6-35B-A3B 不支持role仅有system

问题描述

Qwen3.6-35B-A3B 模型在正式服务中偶发报错。起初怀疑是空 chunk 处理问题但未修复。经对比正常与异常的请求入参发现,报错时的请求仅包含单一的 system 角色。结合此前的经验验证后推断: Qwen3.6 系列模型不支持仅包含 system 角色的消息输入 ,这是导致报错的根因。

当请求中只包含 system 消息而没有 user 消息时,模型可能会报如下错误:

("Connection broken: InvalidChunkLength(got length b'', 0 bytes read)", InvalidChunkLength(got length b'', 0 bytes read))

正确做法

方式一:将 system 转为 user(推荐)

将原有的 system 消息转换为 user 消息发送:

# 原始消息(不支持)
messages = [
    {"role": "system", "content": "你是一个有用的助手"}
]

# 转换后(支持)
messages = [
    {"role": "user", "content": "你是一个有用的助手"}
]

方式二:添加用户消息

system 消息后添加至少一条 user 消息:

messages = [
    {"role": "system", "content": "你是一个有用的助手"},
    {"role": "user", "content": "你好"}  # 必须有 user 消息
]

注意事项

  1. 历史对话保留:多轮对话中,历史消息的角色保持不变
  2. 系统提示词融入:如果需要系统提示词效果,可以将其融入第一条用户消息中
  3. 模型差异:不同模型对消息格式的要求可能不同,请根据实际使用的模型调整

试错经验分享

当请求中只有 system 消息时,某些模型(如 Qwen3.6 系列)不会返回任何流式数据,导致前端连接一直等待超时。这种 bug 和平常的理解不符合——按直觉 system 消息是合法的,为什么模型不处理?

排查方式除了试错,还有哪些?

  1. 看官方文档:公开大模型基本都有 API 文档的 Messages 章节,里面会说明消息格式要求。

    • OpenAI:platform.openai.com/docs/guides/text-generation
    • Qwen(通义千问):help.aliyun.com/zh/model-studio/ 开发者参考
    • DeepSeek:platform.deepseek.com/api-docs
    • 智谱 GLM:open.bigmodel.cn/dev/api
  2. 对比正常与异常的请求日志:这是我最常用的方法。把能跑通的请求和报错的请求分别打印出来逐字段对比,往往能一眼看出差异。

  3. 看模型返回的错误信息:某些模型虽然在 SSE 流里返回空,但响应头或第一个 chunk 里可能带了错误说明。

  4. 减少变量逐步测试:从最简单的请求开始(只有 user 消息),确认能跑通后逐步添加 system、工具调用等,直到找出触发错误的那个变量。

如果没有模型文档(如企业内部自研模型),上述 2-4 的方法同样适用。

输入消息的常见规则:

  • 消息列表至少包含一条 user 消息(大多数模型的硬性要求)
  • 消息角色顺序通常是 system -> user -> assistant -> user -> assistant
  • 部分模型不支持 system 消息,需要转成 user
  • 部分模型对消息总长度有限制(上下文窗口)
posted @ 2026-06-09 08:52  第十昵称  阅读(15)  评论(0)    收藏  举报