[Bug] Selecting GLM-IMAGE / CogView models in image workspace throws ZodError: prompt Required

用户使用 lobehub/lobe-chat-database Docker 镜像(PostgreSQL 16 + pgvector),在图像工作区下拉框中选择智谱AI的图像模型(GLM-IMAGE、CogView-4、CogView-3-Flash)进行生成时,弹出 ZodError 错误。其他图

[Bug] Selecting GLM-IMAGE / CogView models in image workspace throws ZodError: prompt Required

[Bug] Selecting GLM-IMAGE / CogView models in image workspace throws ZodError: prompt Required

快速结论:该报错发生在 LobeChat 数据库版(lobe-chat-database Docker 镜像)中,选择智谱AI图像模型(GLM-IMAGE、CogView-4、CogView-3-Flash)时触发。优先检查数据库中对应模型的 parameters 字段是否包含 prompt 字段,或通过 SQL 手工设置正确的参数。

问题场景

用户使用 lobehub/lobe-chat-database Docker 镜像(PostgreSQL 16 + pgvector),在图像工作区下拉框中选择智谱AI的图像模型(GLM-IMAGE、CogView-4、CogView-3-Flash)进行生成时,弹出 ZodError 错误。其他图像模型(如 OpenAI GPT-Image)正常工作。此外,在视频工作区中选择自定义 OpenAI 兼容提供商(如 Agnès API)的模型时,也可能触发相同的 ZodError: prompt Required 错误。

报错原文

{
  "name": "ZodError",
  "message": "[{\"code\":\"invalid_type\",\"expected\":\"object\",\"received\":\"undefined\",\"path\":[\"prompt\"],\"message\":\"Required\"}]"
}

原因分析

此 Bug 由两个相互作用的因素共同导致:

  • 数据库默认值阻止了回退机制触发:在 packages/database/src/schemas/aiInfra.ts 中,parameters 列定义了 default({}),即空对象。当通过 toggleModelEnabled / batchToggleAiModels 启用模型时,只保存了 idproviderIdenabledtypesourceparameters 未被填充,因此回退到数据库默认值 {}
  • 空对象的真值判断跳过了回退逻辑:在 src/store/aiInfra/slices/aiProvider/action.tsnormalizeImageModel 函数中,使用 model.parameters ? Promise.resolve(model.parameters) : getModelPropertyWithFallback(...) 进行判断。由于 {} 在 JavaScript 中为真值,导致回退函数 getModelPropertyWithFallback 永远不会被调用。空的 parameters 对象随后传给 ModelParamsMetaSchema.parse({}),因 prompt 为必填字段而验证失败。
  • 视频工作区同样受影响extractVideoDefaultValues 函数存在相同的 schema 回退缺失问题,自定义 OpenAI 兼容提供商的视频模型也会因缺少 prompt 字段而崩溃。

环境排查

  • Docker 镜像lobehub/lobe-chat-database:latest(digest: sha256:20136c08da376da970ad659d58c553effa739cb7cde8b936eb1d30716649b893
  • 数据库:PostgreSQL 16 with pgvector
  • 受影响模型glm-imagecogview-4cogview-3-flash;视频工作区中自定义 OpenAI 兼容提供商(如 Agnès API)的模型
  • 模式:已登录(数据库存储模型)

解决步骤

  1. 优先尝试 SQL 直接修复:通过数据库客户端(如 psql)执行以下 SQL 语句,为受影响模型设置正确的 parameters
    UPDATE ai_models 
    SET parameters = '{"prompt":{"default":""},"resolution":{"default":"hd","enum":["hd"]},"size":{"default":"1280x1280","enum":["1280x1280","1568x1056","1056x1568","1472x1088","1088x1472","1728x960","960x1728"]},"watermark":{"default":false}}'::jsonb 
    WHERE id = 'glm-image';
    
    UPDATE ai_models 
    SET parameters = '{"prompt":{"default":""},"resolution":{"default":"standard","enum":["hd","standard"]},"size":{"default":"1024x1024","enum":["1024x1024","768x1344","864x1152","1344x768","1152x864","1440x720","720x1440"]},"watermark":{"default":false}}'::jsonb 
    WHERE id IN ('cogview-4', 'cogview-3-flash');
  2. 等待官方补丁:开发者已修复图像工作区(PR #15534),但视频工作区仍受影响。建议关注后续更新是否覆盖视频工作区。
  3. 自定义提供商用户紧急修复(可优先尝试):对于视频工作区,可参考图像工作区的修复思路,修改 extractVideoDefaultValues 函数,在触发回退前检查 parameters 是否包含 prompt 字段。

验证方法

执行 SQL 修复后,重新在图像工作区选择 GLM-IMAGE 或 CogView 模型,尝试生成图像,确认不再弹出 ZodError。对于视频工作区,选择自定义 OpenAI 兼容提供商的视频模型,确认可正常生成视频。

参考来源

lobehub/lobe-chat #15493

GamsGo AI

AI 工具推荐

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

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

了解 GamsGo AI

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

celebrityanime
celebrityanime
文章: 15035

发表回复

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