快速结论:该报错通常出现在 LiteLLM 代理升级到 v1.89.2 及之后的版本、并启用数据库存储(store_model_in_db: true)后,普通内部用户(非管理员)访问 /tag/list 或 /tag/daily/activity 等管理端点时触发。优先排查 tag_management_endpoints.py 和 tool_management_endpoints.py 中是否仍在使用 select={...} 参数调用 Prisma 读取方法。
适用环境:Issue 已确认 LiteLLM v1.89.2(问题报告版本)、v1.94.0(生产环境 traceback 版本)、v1.95.0-rc.3、v1.96.0-dev.2 均受影响;依赖 prisma>=0.11.0,<1.0(解析为 0.15.0);需要 DB 后端(store_model_in_db: true)。报告未提供 Python、CUDA、显卡信息。
最快修复方案:暂无确认的一步修复方案。Issue 中三个 select={...} 调用点在 litellm_internal_staging 分支上已通过提交 b5cfc2ca00 和 c943d9a9 修复,但截至报告时这些修复尚未进入任何 release tag,也尚未合并到 main。可优先尝试手动移除 select={...} 参数,改为返回完整行(结果仅通过 getattr 读取单个字段,功能等价),或关注 #35293 / #35288 进入正式发布。
注意事项:移除 select={...} 会返回整行数据,功能行为等价但可能带来轻微性能开销。该问题仅在非管理员内部用户(virtual key 属于 internal_user 且 user_id 非空)访问时触发;管理员或具有 admin view 的调用者会提前返回 HTTP 200,无法复现。截至报告时修复仅在 staging 分支,未进入任何 release。
问题场景
用户在 LiteLLM 代理启用数据库后端(store_model_in_db: true)并运行 v1.89.2 及之后的版本时,普通内部用户(非管理员)登录 Dashboard 加载标签列表或标签日活动数据,调用 GET /tag/list 或 GET /tag/daily/activity 时返回 HTTP 500。管理层端点中 _get_internal_user_api_keys() 和 _resolve_team_id_to_object_permission_id() 向 Prisma 读取方法传入了 select= 参数。
报错原文
{"detail": "LiteLLM_VerificationTokenActions.find_many() got an unexpected keyword argument 'select'"}
TypeError: LiteLLM_VerificationTokenActions.find_many() got an unexpected keyword argument 'select'
原因分析
LiteLLM v1.89.2 中多个管理端点开始向 Prisma 读取方法传入 select= 参数,但 prisma-client-py(prisma>=0.11.0,<1.0,解析为 0.15.0)不支持 find_many / find_unique 的运行时 select= 关键字参数——prisma-client-py 的字段选择仅通过构建时 partial types 提供。由于生成的 Prisma 方法签名未声明该参数,运行时抛出 Python TypeError,最终表现为 HTTP 500。Issue 中确认的三处调用点:
litellm/proxy/management_endpoints/tag_management_endpoints.py—_get_internal_user_api_keys()中的find_many(where={"user_id": user_id}, select={"token": True})。该函数有两个调用者:_get_tag_list_scope(服务于list_tags)和_get_tag_daily_activity_api_key_filter(服务于get_tag_daily_activity),因此移除该参数可同时修复两个端点。litellm/proxy/management_endpoints/tool_management_endpoints.py—_resolve_team_id_to_object_permission_id()中约 388 行和 409 行的两次find_unique(select={"object_permission_id": True})调用。
这三处的结果均通过 getattr(record, <field>, None) 消费,因此 select= 仅是优化,移除后返回完整行在功能上等价。
之所以难以复现,是因为失败路径受限于非管理员内部用户:_get_internal_user_api_keys 在 user_role.is_internal_user_role 为假时会在 tag_management_endpoints.py:147 提前返回,两个调用者在 user_api_key_has_admin_view(user_api_key_dict) 为真时也会提前返回。任何具有 admin view 的调用者都会从 /tag/list 得到 HTTP 200,不会触及 find_many。复现需要一个属于 internal_user 且 user_id 非空的 virtual key。
Issue 报告了一项 8 天生产窗口的统计:GET /tag/list 返回 HTTP 500 共 1363 次,GET /tag/daily/activity 3 次,全部来自加载 Dashboard 的普通用户;管理员流量 0 次失败。这说明在拥有普通非管理员用户的部署中,该问题并非边缘情况。
环境排查
- 确认 LiteLLM 版本:v1.89.2、v1.94.0、v1.95.0-rc.3、v1.96.0-dev.2 均受影响;检查是否仍在 release tag 中,或已使用包含
b5cfc2ca00/c943d9a9修复的分支。 - 确认 Prisma 版本:
prisma>=0.11.0,<1.0(解析为 0.15.0),这是不支持运行时select=的版本。 - 确认代理配置启用了数据库后端:
store_model_in_db: true,并有可用 DB 连接。 - 确认触发身份:使用属于
internal_user角色、user_id非空的 virtual key,而非具有 admin view 的 bearer token。 - 确认代码中是否仍有
select={...}残留:检查litellm/proxy/management_endpoints/tag_management_endpoints.py:160和tool_management_endpoints.py:483/:502(main分支位置)。
解决步骤
- 确认复现:以非管理员内部用户的 virtual key 调用
GET /tag/list?start_date=...&end_date=...,观察是否返回 HTTP 500 及unexpected keyword argument 'select'。同时测试GET /tag/daily/activity。 - 定位残留调用点:在代码库中搜索
select=,重点检查tag_management_endpoints.py的_get_internal_user_api_keys和tool_management_endpoints.py的_resolve_team_id_to_object_permission_id。 - 移除不支持的参数:删除三处 Prisma 读取调用中的
select={...},改为返回完整行(例如将find_many(where={...}, select={"token": True})改为find_many(where={...})),因为结果仅通过getattr(record, <field>, None)消费,功能等价。 - 如果你使用官方发布版本而非自行打补丁:关注修复是否进入正式 release。Issue 报告时
litellm_internal_staging分支已修复(b5cfc2ca00覆盖 tag 端点,c943d9a9覆盖 tool 端点),但main和所有 release tag 仍包含全部三处。 - 验证改动未引入回归:确保所有调用者仍能正常读取所需字段(
token、object_permission_id)。
验证方法
使用非管理员内部用户的 virtual key 重新调用 GET /tag/list?start_date=...&end_date=... 和 GET /tag/daily/activity,确认返回 HTTP 200 且数据内容正确(标签列表、API key 过滤结果符合预期)。同时用管理员或 admin view token 调用相同端点,确认其行为未改变,仍返回 HTTP 200。检查容器日志中不再出现 LiteLLM_VerificationTokenActions.find_many() got an unexpected keyword argument 'select'。
参考来源
AI 工具推荐
想把多个 AI 模型放在一个入口?
GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。
推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。
这个方案解决了吗?
可以继续搜索完整报错,或查看同一工具的其他排查指南。


