qwen-plus-2025-04-28
enable_thinking=True
)在使用qwen-plus-2025-04-28
模型的thinking功能时,发现消息格式会显著影响模型的reasoning行为:
这种行为差异在官方文档中未有说明,给开发者造成困扰。
{
"role": "user",
"content": "解释什么是深度学习?"
}
结果: ✅ 产生reasoning内容,可以获取到delta.reasoning_content
{
"role": "user",
"content": [
{"type": "text", "text": "解释什么是深度学习?"}
]
}
结果: ❌ 不产生reasoning内容,delta.reasoning_content
始终为空
我们进一步测试了给qwen-plus-2025-04-28
(不支持多模态)发送图片的情况:
{
"role": "user",
"content": [
{"type": "text", "text": "请描述图片并解释AI"},
{"type": "image_url", "image_url": {"url": "data:image/jpeg;base64,..."}}
]
}
结果:
{
"role": "user",
"content": [
{"type": "image_url", "image_url": {"url": "data:image/jpeg;base64,..."}}
]
}
结果:
我们进行了严格的A/B测试,使用完全相同的问题和模型配置:
消息格式 | 思考过程chunks | 回答chunks | 思考内容长度 | reasoning状态 |
---|---|---|---|---|
字符串格式 | 81 | 77 | 563字符 | ✅ 正常 |
列表格式(纯文本) | 0 | 49 | 0字符 | ❌ 失效 |
列表格式(文本+图片) | 0 | 78 | 0字符 | ❌ 失效 |
列表格式(纯图片) | 0 | 10 | 0字符 | ❌ 失效 |
核心结论: 模型根据消息格式(不是内容)来决定是否启用reasoning功能。
from openai import OpenAI
client = OpenAI(
api_key="your_api_key",
base_url="https://dashscope.aliyuncs.com/compatible-mode/v1"
)
# 字符串格式
messages = [
{"role": "user", "content": "解释什么是深度学习?"}
]
completion = client.chat.completions.create(
model="qwen-plus-2025-04-28",
messages=messages,
extra_body={"enable_thinking": True},
stream=True,
)
reasoning_chunks = 0
for chunk in completion:
if chunk.choices and hasattr(chunk.choices[0].delta, 'reasoning_content'):
if chunk.choices[0].delta.reasoning_content is not None:
reasoning_chunks += 1
print(f"思考过程: {chunk.choices[0].delta.reasoning_content}")
print(f"总思考chunks: {reasoning_chunks}") # 输出: 80+ chunks
# 列表格式 - 相同的模型和配置
messages = [
{
"role": "user",
"content": [{"type": "text", "text": "解释什么是深度学习?"}]
}
]
completion = client.chat.completions.create(
model="qwen-plus-2025-04-28",
messages=messages,
extra_body={"enable_thinking": True}, # 相同的配置
stream=True,
)
reasoning_chunks = 0
for chunk in completion:
if chunk.choices and hasattr(chunk.choices[0].delta, 'reasoning_content'):
if chunk.choices[0].delta.reasoning_content is not None:
reasoning_chunks += 1
print(f"总思考chunks: {reasoning_chunks}") # 输出: 0 chunks
在开发多模态AI聊天系统时,为了统一处理文本和图片消息,开发者通常会使用列表格式:
# 统一的消息格式处理
def build_message(text_content, image_files=None):
content = []
# 添加文本
if text_content:
content.append({"type": "text", "text": text_content})
# 添加图片
if image_files:
for img in image_files:
content.append({"type": "image", "image": img})
return {"role": "user", "content": content}
希望模型在两种格式下都能产生reasoning内容,保持一致性。
如果这是设计行为,希望在官方文档中明确说明:
提供明确的参数控制reasoning行为,而不依赖于消息格式推断。
根据测试结果,我们推测模型内部可能有如下逻辑:
def process_message(message):
# 第一步:格式检测(优先级最高)
if isinstance(message.content, list):
# 进入多模态快速响应模式
enable_reasoning = False
mode = "multimodal_fast_response"
# 第二步:内容处理
for item in message.content:
if item.type == "image_url":
if model_supports_images:
process_image(item)
else:
# 忽略图片,不报错
ignore_image(item)
elif item.type == "text":
process_text(item)
elif isinstance(message.content, str):
# 进入深度文本对话模式
enable_reasoning = True
mode = "deep_text_conversation"
process_text(message.content)
关键洞察:
感谢阿里云团队的支持,期待您的回复和解决方案!
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
基于通义系列大模型和开源大模型的一站式大模型服务平台,提供「生成式大模型的全流程应用工具」和「企业大模型的全链路训练工具」。为大模型,也为小应用。 阿里云百炼官网网址:https://www.aliyun.com/product/bailian