快速结论:该报错通常发生在 LiteLLM v1.89.0+ 配合 redis-py 5.x 使用时,由于字符串类型的数字环境变量(如 REDIS_HEALTH_CHECK_INTERVAL)未做类型转换直接传给 Redis 客户端导致。优先排查所有 REDIS_* 数字类环境变量是否被设置为字符串。
适用环境:LiteLLM v1.89.0(Kubernetes 部署,使用 berriai/litellm chart 0.1.1,3 个副本),Redis 6(Azure Cache for Redis,启用 SSL),redis-py 5.3.1,Python 3.13。
最快修复方案:暂无确认的一步修复方案。临时缓解措施为取消设置所有数字类型的 REDIS_* 环境变量(如 REDIS_HEALTH_CHECK_INTERVAL),使 Redis 客户端使用内置默认值。官方修复已在 PR #30644 中提交,待后续版本发布。
注意事项:取消环境变量仅为临时方案,Redis 客户端将使用默认健康检查间隔,可能影响自定义配置。PR #30644 同时修复两个关联缺陷,需作为整体合并发布,单独修复参数发现会导致 redis-py ≥6 用户出现此 TypeError 回归。
问题场景
用户将 LiteLLM Proxy 从 main-v1.83.14-stable.patch.3 升级到 v1.89.0 后,在 Kubernetes 集群(3 个 Pod 副本)中使用 Redis 缓存时,每次 LLM 请求都会出现缓存写入失败、Redis 熔断器频繁触发的问题。Redis 使用 Azure Cache for Redis(Redis 6,SSL 强制启用)。
报错原文
redis_cache.py:632 - LiteLLM Redis Caching: async set() - Got exception from REDIS
unsupported operand type(s) for +: 'float' and 'str'
Writing value={'timestamp': 1781617633.1508543, 'response': '{...}'}
redis_cache.py:883 - LiteLLM Redis Caching: async async_increment() - Got exception from REDIS
unsupported operand type(s) for +: 'float' and 'str'
spend_log_error_logger.py:81 - Error in tracking cost callback - unsupported operand type(s) for +: 'float' and 'str'
ValueError: Either 'host' or 'url' must be specified for redis.
原因分析
可能原因:Issue 评论确认根因是 litellm/_redis.py 中的类型强制转换缺失。当通过环境变量(如 REDIS_HEALTH_CHECK_INTERVAL)或 Helm --set 传入数字参数时,redis-py 5.x 能正确发现这些参数但未将其从字符串转换为数字,导致 time() + '30' 这类浮点数和字符串相加的 TypeError。
注意:Issue 讨论强调该报错仅在 redis-py ≤5.x 出现(因为参数发现机制仍有效),而 redis-py ≥6 则因 inspect.getfullargspec 无法解析被装饰的 Redis.__init__ 参数,导致 REDIS_* 环境变量全部被静默丢弃,可能表现为 ValueError: Either 'host' or 'url' must be specified for redis. 或缓存功能静默失效。
环境排查
- 确认 LiteLLM 版本:v1.89.0(升级后出现的问题)
- 确认 redis-py 版本:依赖锁定为 5.3.1(参见
uv.lock) - 检查所有数字类型
REDIS_*环境变量:REDIS_HEALTH_CHECK_INTERVAL、REDIS_DB、REDIS_PORT等是否通过 Helm values 或环境变量以字符串形式传入 - 确认部署方式:Kubernetes(berriai/litellm chart 0.1.1,3 副本)
- 确认 Redis 连接信息:Azure Cache for Redis,Redis 6,SSL 强制
解决步骤
- 临时缓解:取消设置数字类的
REDIS_*环境变量(如REDIS_HEALTH_CHECK_INTERVAL),让 Redis 客户端使用内置默认值,验证 TypeError 是否消失(Issue 评论确认有效)。 - 如需自定义健康检查间隔,可考虑在代码中显式传递数字类型参数,而非依赖环境变量字符串。
- 跟踪官方修复:PR #30644 已在
litellm_oss_branch提交,包含类型强制转换和参数发现两个修复,并附带回归测试(通过 44 项 CI 检查),等待发布到正式版本后升级。
验证方法
取消相关环境变量后,执行任意 LLM 请求,观察日志中是否还出现 unsupported operand type(s) for +: 'float' and 'str' 报错,并确认 Redis 熔断器不再被触发、缓存写入正常。若使用 redis-py ≥6,还需验证 redis_cache.py 是否出现 ValueError: Either 'host' or 'url' must be specified for redis.,确认连接参数能正确传递。
参考来源
AI 工具推荐
想把多个 AI 模型放在一个入口?
GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。
推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。
这个方案解决了吗?
可以继续搜索完整报错,或查看同一工具的其他排查指南。
![[Feature Request]: Add MonkeyOCRv2 as a document parsing backend (working adapter included)](https://www.chat-gpts.plus/wp-content/uploads/2026/09/18671-00b219e6-768x403.jpg)

![[Bug] - response.completed always returns finish_reason='stop' even when response contains tool calls](https://www.chat-gpts.plus/wp-content/uploads/2026/09/19744-2f6a1033-768x403.jpg)