[文本由claude 4.6 thinking撰写]
问题描述
使用 DeepSeek(deepseek-chat)模型生成笔记时,即使不开启「视频理解」功能,后端仍以 OpenAI 多模态格式(content 为数组)发送请求:
[{"type": "text", "text": "..."}]
而 DeepSeek 的 deepseek-chat 模型不支持多模态格式,只接受纯文本:
导致 DeepSeek 返回 Failed to deserialize the JSON body / invalid_request_error,后续 asdict() 被错误调用在 dict 上(非 dataclass),最终前端收到 null → 报 Cannot destructure property 'status' of 'G.data' as it is null。
影响范围
所有使用 非多模态模型 的用户(DeepSeek、部分 OpenAI 模型等)在不开启视频理解时都会触发此问题。
修复方案
文件: app/gpt/universal_gpt.py → create_messages() 方法
修改前 (约第43行):
# ⛳ 组装 content 数组,支持 text + image_url 混合
content = [{"type": "text", "text": content_text}]
video_img_urls = kwargs.get('video_img_urls', [])
for url in video_img_urls:
content.append({
"type": "image_url",
"image_url": {"url": url, "detail": "auto"}
})
# ✅ 正确格式:整体包在一个 message 里,role + content array
messages = [{"role": "user", "content": content}]
修改后:
# ⛳ 兼容非多模态模型(如 DeepSeek)
video_img_urls = kwargs.get('video_img_urls', [])
if video_img_urls:
# 多模态格式:text + image_url
content = [{"type": "text", "text": content_text}]
for url in video_img_urls:
content.append({
"type": "image_url",
"image_url": {"url": url, "detail": "auto"}
})
else:
# 纯文本格式:兼容所有模型
content = content_text
messages = [{"role": "user", "content": content}]
修改理由: OpenAI 规范中,content 字段可以是 string(纯文本)或 array(多模态)。没有图片时使用 string 格式,所有 OpenAI 兼容 API 都能正确解析。
[文本由claude 4.6 thinking撰写]
问题描述
使用 DeepSeek(deepseek-chat)模型生成笔记时,即使不开启「视频理解」功能,后端仍以 OpenAI 多模态格式(content 为数组)发送请求:
而 DeepSeek 的 deepseek-chat 模型不支持多模态格式,只接受纯文本:
导致 DeepSeek 返回 Failed to deserialize the JSON body / invalid_request_error,后续 asdict() 被错误调用在 dict 上(非 dataclass),最终前端收到 null → 报 Cannot destructure property 'status' of 'G.data' as it is null。
影响范围
所有使用 非多模态模型 的用户(DeepSeek、部分 OpenAI 模型等)在不开启视频理解时都会触发此问题。
修复方案
文件: app/gpt/universal_gpt.py → create_messages() 方法
修改前 (约第43行):
修改后:
修改理由: OpenAI 规范中,content 字段可以是 string(纯文本)或 array(多模态)。没有图片时使用 string 格式,所有 OpenAI 兼容 API 都能正确解析。