快速结论:在 Dify 自托管实例中删除模型时触发 Pydantic 422 校验失败(`Field required`,定位到 `model` 与 `model_type`),通常是因为从 1.14 之前版本升级上来的数据库中残留了旧版 `model_type` 取值(`text-generation`、`embeddings`、`reranking`),未随 Dify 的重命名迁移。优先检查数据库中的 `model_type` 字段是否为旧值。
适用环境:Dify 1.17,Self Hosted(Docker)。Issue 中未提供操作系统、Python、CUDA 或显卡信息,无需据此排查。
最快修复方案:先备份数据库,然后执行 Issue 中给出的迁移 SQL,把各表中的旧 `model_type` 值更新为新值;执行后需要刷新 Redis 缓存或重启 API/worker 容器,因为凭据缓存在 Redis 中。若你的版本已包含 PR #41326 的 Alembic 迁移,则迁移会自动完成这一步。
注意事项:该 SQL 方案并非对所有用户都有效,Issue 评论中提到至少有一位用户在 #41421 反馈仅执行 SQL 未解决问题;此时可尝试重装受影响的模型插件。执行前务必备份数据库,避免不可逆的数据修改。
问题场景
用户在 Dify 1.17(Self Hosted,Docker 部署)中尝试删除模型,界面上删除操作无法正常完成,后端返回 Pydantic 校验错误。从 Issue 链接看,这个问题在多例自托管升级场景中重复出现,属于升级后遗留数据导致的接口校验失败。
报错原文
"type": "missing", "loc": ["model"], "msg": "Field required"
"type": "missing", "loc": ["model_type"], "msg": "Field required"
https://errors.pydantic.dev/2.12/v/missing
原因分析
最可能的原因:Dify 在约 1.14.x 版本对模型类型标识做了重命名(`text-generation` → `llm`、`embeddings` → `text-embedding`、`reranking` → `rerank`),但从更早版本升级而来的实例中,部分数据库表里的 `model_type` 仍是旧值。删除模型时接口按新枚举值解析请求体,遇到旧值就判定字段缺失,从而抛出 Pydantic 422 的 `Field required` 错误。PR #41326 新增了 Alembic 迁移用于自动修复,但如果当前 1.17 安装尚未包含该迁移,遗留值会继续存在。
环境排查
- 确认 Dify 版本是否为 1.17,以及是否为 Self Hosted(Docker)部署。
- 确认实例是否为从 1.14 之前版本升级而来。
- 确认要删除的模型属于哪个 Provider / 插件。
- 检查数据库中各表的 `model_type` 是否存在旧值,可用以下查询(Issue 中给出):
SELECT DISTINCT model_type FROM provider_models;
SELECT DISTINCT model_type FROM provider_model_credentials;
如果结果中出现 `text-generation`、`embeddings` 或 `reranking`,即可确认问题来源。
解决步骤
- 先备份数据库,确认可回滚后再进行后续操作。
- 检查 `model_type` 是否存在旧值(见上方查询)。
- 若存在旧值,执行以下 SQL 进行迁移(Issue 中给出的手动修复方案):
UPDATE provider_models SET model_type = 'llm' WHERE model_type = 'text-generation';
UPDATE provider_models SET model_type = 'text-embedding' WHERE model_type = 'embeddings';
UPDATE provider_models SET model_type = 'rerank' WHERE model_type = 'reranking';
UPDATE provider_model_credentials SET model_type = 'llm' WHERE model_type = 'text-generation';
UPDATE provider_model_credentials SET model_type = 'text-embedding' WHERE model_type = 'embeddings';
UPDATE provider_model_credentials SET model_type = 'rerank' WHERE model_type = 'reranking';
UPDATE tenant_default_models SET model_type = 'llm' WHERE model_type = 'text-generation';
UPDATE tenant_default_models SET model_type = 'text-embedding' WHERE model_type = 'embeddings';
UPDATE tenant_default_models SET model_type = 'rerank' WHERE model_type = 'reranking';
UPDATE provider_model_settings SET model_type = 'llm' WHERE model_type = 'text-generation';
UPDATE provider_model_settings SET model_type = 'text-embedding' WHERE model_type = 'embeddings';
UPDATE provider_model_settings SET model_type = 'rerank' WHERE model_type = 'reranking';
UPDATE load_balancing_model_configs SET model_type = 'llm' WHERE model_type = 'text-generation';
UPDATE load_balancing_model_configs SET model_type = 'text-embedding' WHERE model_type = 'embeddings';
UPDATE load_balancing_model_configs SET model_type = 'rerank' WHERE model_type = 'reranking';
- 刷新 Redis 缓存或重启相关容器,因为 Provider 凭据会缓存在 Redis 中:
docker compose down
docker compose up redis -d
docker compose exec redis redis-cli FLUSHALL
docker compose up -d
- 如果上述步骤完成后删除模型仍报错,可优先尝试重装受影响的模型插件(Issue 评论中提到的补充手段)。
验证方法
回到 Dify 的模型管理界面,再次对之前无法删除的模型执行删除操作。若能正常删除且不再返回 Pydantic 422 的 `Field required`(`model`、`model_type`),说明旧值问题已解决。也可再次执行 `SELECT DISTINCT model_type` 查询,确认结果中不再出现 `text-generation`、`embeddings`、`reranking`。
参考来源
AI 工具推荐
想把多个 AI 模型放在一个入口?
GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。
推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。
这个方案解决了吗?
可以继续搜索完整报错,或查看同一工具的其他排查指南。


