You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

OpenAI助理API调用随机触发IndexError: list index out of range问题排查

解决OpenAI Thread Run返回消息索引越界问题

问题根源

你碰到的IndexError: list index out of range本质是调用create_and_poll后,返回的消息列表为空,或者消息内容结构不符合预期,和速率限制无关,加5秒延迟解决不了核心问题。常见触发场景:

  • Run执行失败(比如文件解析出错、向量匹配异常),没生成任何消息
  • Run刚完成但消息还没同步到线程,返回的messages是空列表
  • 消息内容不是文本类型(比如包含图片),content[0].text不存在

修复方案

给代码加三层校验:确认Run执行成功→校验消息列表非空→校验文本内容存在,同时做异常兜底。

修改后的核心代码片段

# 调用create_and_poll后先检查run状态
run = client.beta.threads.runs.create_and_poll(
    thread_id=thread.id,
    assistant_id=assistant.id,
    instructions="你的指令内容"
)

# 1. 先确认run成功完成
if run.status != "completed":
    print(f"Run执行失败,状态:{run.status}")
    # 这里可以加日志记录或失败处理逻辑
    continue

# 2. 获取消息并校验非空
messages = list(client.beta.threads.messages.list(thread_id=thread.id, order="desc"))
if not messages:
    print("线程无返回消息")
    continue

# 3. 遍历消息内容,只取文本类型的内容
message_content = None
for content in messages[0].content:
    if content.type == "text":
        message_content = content.text.value
        break

if not message_content:
    print("消息中无有效文本内容")
    continue

# 后续CSV输出逻辑
# ...

关键修复点

  • Run状态校验:只有当run的状态为completed时才去获取消息,避免处理失败的run
  • 消息列表非空判断:用if not messages替代直接取messages[0],防止空列表索引越界
  • 内容类型校验:遍历消息的content,只提取text类型的内容,避免遇到非文本内容时报错
  • 异常捕获(可选):可以给整个消息获取逻辑套try-except块,兜底处理意外情况

额外建议

  • 每次迭代后清理线程/向量存储:确保每次都是独立上下文,避免旧数据干扰
  • 增加日志:记录每次run的状态、消息数量,方便快速定位问题

内容的提问来源于stack exchange,提问作者Adrian Lo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 00:30:55