快速结论:这个报错通常出现在 Dify 自托管环境中已禁用 RBAC(改用 legacy roles)、且被访问的 Agent 应用底层是 roster agent 时,Agent app detail API 返回的 permission_keys 始终为空。优先排查 detail 序列化时是否用原始 UUID 去查找权限映射。
适用环境:Dify(main 分支),自托管 Docker 部署。Issue 未提供操作系统、Python、CUDA、显卡或具体依赖版本,无法确认这些细节。
最快修复方案:暂无确认的一步修复方案。仓库已存在针对 _serialize_agent_app_detail 的修复 PR(#42151),但在 Issue 讨论时尚未合并,需等待合并或手动应用同类改动。
注意事项:#42095 只修复了列表序列化器,detail 序列化器被漏掉;在官方修复合并前,任何手动改动都属于未验证操作,可能与后续版本产生差异。
问题场景
在 Dify 自托管环境中禁用 RBAC(legacy roles)后,请求由 roster agent 支撑的 Agent 应用详情接口,响应中的 permission_keys 字段始终为空。对照第 42095 号修复后的 agents 列表接口,预期详情接口也应返回角色对应的 agent keys,但实际不是。
报错原文
Agent app detail returns empty permission_keys when agent.id is UUID
相关代码路径:_serialize_agent_app_detail 中调用
permissions.agent.permission_keys_by_resource_ids([agent.id]).get(agent.id, [])
原因分析
最可能的原因是类型不匹配:permission_keys_by_resource_ids 返回的字典以 str(resource_id) 为键,而 detail 序列化器却直接用 UUID 类型的 agent.id 去 .get(),导致永远匹配不到,只能回落到默认空列表 []。列表序列化器在第 42095 号 PR 中已改为 permission_keys_by_agent_id.get(str(agent.id), []),detail 序列化器被遗漏了。
环境排查
- 确认 Dify 版本或分支:Issue 基于
main分支。 - 确认部署方式:Self Hosted (Docker)。
- 确认是否已禁用 RBAC、切换为 legacy roles。
- 确认触发接口的应用是否由 roster agent 支撑。
- 确认是否已包含第 42095 号 PR 对列表序列化器的修复。
- Issue 未提供 Python、CUDA、PyTorch、显卡或节点依赖版本,无需臆测。
解决步骤
- 先复现并定位:在禁用 RBAC 的环境下,请求 roster agent 支撑的 Agent 应用详情 API,确认
permission_keys为空。 - 对照代码:检查
api/controllers/console/agent/roster.py中_serialize_agent_app_detail的权限查询逻辑,确认是否仍在使用原始agent.id查找。 - 参照列表序列化器的修复方式(第 42095 号 PR),将 detail 序列化器的查找键改为
str(agent.id),即.get(str(agent.id), [])。该改动已在 PR #42151 中提出,但 Issue 讨论时尚未合并。 - 如果不想自行改动,关注 PR #42151 的合并进度,合并后升级到包含该修复的版本。
验证方法
重新请求 Agent 应用详情接口,检查响应中的 permission_keys 是否返回角色对应的 agent keys,并与 agents 列表接口(第 42095 号修复后)的结果保持一致。若仍为空,说明修复未生效或环境未更新到对应版本。
参考来源
关联修复:langgenius/dify PR #42151(Issue 讨论时未合并);此前同类修复:langgenius/dify PR #42095。
AI 工具推荐
想把多个 AI 模型放在一个入口?
GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。
推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。
这个方案解决了吗?
可以继续搜索完整报错,或查看同一工具的其他排查指南。
![[Bug] Chatflow with Human Input node: input box remains disabled after workflow completion in v1.16.1](https://www.chat-gpts.plus/wp-content/uploads/2026/09/40076-32d8bdf5-768x403.jpg)

