[Bug]: IndexError: list index out of range when using azure openai with claudecode

该报错通常出现在通过 LiteLLM 转发 Azure OpenAI 的流式响应、并使用 Claude Code 走 /v1/messages 适配器时,Azure 返回了 choices 为空的 chunk,而代码直接索引 choices[0] 导致越界。优先确认 LiteLLM 版本并升级到包含

快速结论:该报错通常出现在通过 LiteLLM 转发 Azure OpenAI 的流式响应、并使用 Claude Code 走 /v1/messages 适配器时,Azure 返回了 choices 为空的 chunk,而代码直接索引 choices[0] 导致越界。优先确认 LiteLLM 版本并升级到包含 #35314 修复的版本。

适用环境:LiteLLM 1.95.0(报错版本);模型为 Azure 托管的 gpt-5-4-mini,经 LiteLLM 暴露后由 Claude Code 通过 LiteLLM endpoint 和 key 调用。评论中另报告 LiteLLM v1.102.0 + Azure AI Foundry(custom_llm_provider=azure_ai,模型 gpt-5.6-sol)在 /v1/responses 流式路径出现类似问题。Issue 未提供操作系统、Python、CUDA、显卡信息。

最快修复方案:升级到包含 #35314 修复的 LiteLLM 版本。该修复让 /v1/messages 适配器能够处理 choices: [] 的 Azure 流式 chunk,不再索引 choices[0],并已加入针对 metadata 与 usage-only chunk 的回归测试。

注意事项:该修复针对的是 Claude Code / /v1/messages 适配器路径。评论中报告的 /v1/responses 流式路径(streaming_iterator.py 约 902 行 delta = chunk.choices[0].delta)属于 Responses 转换层,Issue 中未确认已由同一修复覆盖,如仍复现需单独排查或跟进。

问题场景

用户将 Azure 上托管的 gpt-5-4-mini 通过 LiteLLM 暴露,使用虚拟 key 授权后,用 Claude Code 连接 LiteLLM endpoint。配置 Azure OpenAI 访问、设置 gpt 模型、授予虚拟 key、再通过 Claude Code 使用 LiteLLM endpoint 和 key 调用时触发崩溃。报错位置在 streaming_iterator.py:892,涉及流式响应中处理 finish_reason 的分支。

报错原文

IndexError: list index out of range
File: streaming_iterator.py, line 892

if chunk.choices[0].finish_reason is not None:

评论中补充的 Responses API 路径报错原文:

IndexError: list index out of range

File:
litellm/responses/litellm_completion_transformation/streaming_iterator.py

delta = chunk.choices[0].delta

File ".../streaming_iterator.py", line 902
delta = chunk.choices[0].delta
IndexError: list index out of range

原因分析

报错原因较明确:Azure 在流式返回中会发送 choices 为空数组(choices: [])的 chunk,而 LiteLLM 适配器在未判断空数组的情况下直接访问 choices[0],因此抛出 IndexError: list index out of range。用户已在 Issue 中定位到 finish_reason 判断处存在该模式。

官方回复确认 /v1/messages 适配器已修复该问题,即不再对空 choices 索引 choices[0]。评论中提到的 /v1/responses 报错具有相同模式,但发生在 Responses 流式转换层,属于“可能原因”相同的另一条代码路径,尚未在该 Issue 中确认被同一修复覆盖。

环境排查

  • 确认 LiteLLM 版本:报错版本为 1.95.0;评论中另行报告 v1.102.0 的 Responses 路径问题。
  • 确认调用的端点:Claude Code 走 /v1/messages,还是直接调用 /v1/responses 且 stream=true。
  • 确认 Azure 提供方配置:custom_llm_provider 是 azure 还是 azure_ai。
  • 确认模型:gpt-5-4-mini 或评论中的 gpt-5.6-sol。
  • 确认是否存在 Azure 返回 choices: [](如 metadata-only 或 usage-only chunk)的日志。
  • 检查 litellm/responses/litellm_completion_transformation/streaming_iterator.py 与 /v1/messages 适配器相关文件在所用版本中是否仍直接索引 choices[0]。
  • Issue 未提供操作系统、Python、CUDA、显卡版本,无需据此排查。

解决步骤

  1. 确认当前 LiteLLM 版本。报错出现在 1.95.0,先记录实际版本号。
  2. 升级到包含 #35314 修复的 LiteLLM 版本,该修复使 /v1/messages 适配器能处理 choices: [] 的 Azure 流式 chunk,并附带 metadata 与 usage-only chunk 的回归测试。
  3. 保持 Azure OpenAI 配置、模型设置、虚拟 key 授权与 Claude Code 调用方式不变,重新通过 LiteLLM endpoint 用 Claude Code 发起流式请求。
  4. 如果你使用的是 /v1/responses 且 stream=true,即使升级后仍可能遇到 Responses 转换层的相同索引问题(评论中在 v1.102.0 复现)。此时可先改用 /v1/chat/completions 的流式路径(评论中该路径 stream=true 可正常返回)作为规避,再单独反馈 Responses 适配器问题。
  5. 若升级后仍复现,收集完整堆栈和 Azure 返回的空 choices chunk 日志,在原 Issue 或新 Issue 中提供,便于定位是否属于未覆盖的路径。

验证方法

升级后,用 Claude Code 通过 LiteLLM endpoint 与虚拟 key 发起原本触发崩溃的调用,观察是否仍返回 IndexError: list index out of range。若流式响应能正常完成,且日志中不再出现对空 choices 的索引报错,即可确认该路径已修复。对于 /v1/responses 流式路径,需单独验证是否仍复现;Issue 中明确该修复的回归测试覆盖 /v1/messages 适配器的 metadata 与 usage-only chunk。

参考来源

BerriAI/litellm #35785

GamsGo AI

AI 工具推荐

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

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

了解 GamsGo AI

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

这个方案解决了吗?

celebrityanime
celebrityanime
文章: 25788

发表回复

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