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

使用OpenAI Assistants API开发聊天机器人遇Thread属性错误

解决OpenAI Assistants API中Thread属性不存在的问题

问题描述

使用OpenAI Assistants API开发聊天机器人时,集成Thread功能调用openai.Thread.create创建线程,触发AttributeError,提示'openai'模块没有'Thread'属性。

原代码

import openai

openai.api_key = "my_key"

def my_chatbot(user_input, assistant_id):
    thread_id = openai.Thread.create(assistant=assistant_id)["id"]

    openai.Message.create(
        thread=thread_id,
        role="user",
        content=user_input
    )

    run = openai.Run.create(
        thread=thread_id,
        assistant=assistant_id
    )

    messages = openai.Message.list(thread=thread_id)
    return messages["data"][-1]["content"]

if __name__ == "__main__":
    assistant_id = "my_id"
    while True:
        user_input = input("Você: ")
        if user_input.lower() in ["sair", "fechar"]:
            break

        chatbot_response = my_chatbot(user_input, assistant_id)
        print("Chatbot:", chatbot_response)

报错信息

Traceback (most recent call last):
  File "/Users/felipestoker/PycharmProjects/chatbot/main.py", line 34, in <module>
    chatbot_response = chatbot_webjasper(user_input, assistant_id)
                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/felipestoker/PycharmProjects/chatbot/main.py", line 8, in chatbot_webjasper
    thread_id = openai.Thread.create(assistant=assistant_id)["id"]
                ^^^^^^^^^^^^^
AttributeError: module 'openai' has no attribute 'Thread'

问题原因

  1. SDK版本与API路径错误:OpenAI Assistants API属于beta功能,对应的Python SDK接口位于openai.beta命名空间下,而非根模块openai。直接调用openai.Thread会找不到对应属性。
  2. Thread创建参数错误:创建Thread时不需要传入assistant参数,Thread是独立的会话容器,Run操作时才需要关联助理ID。
  3. 异步处理缺失:原代码未等待Run执行完成就获取消息,此时助理还未生成回复,无法拿到正确结果。

修正方案

1. 升级OpenAI SDK

确保安装最新版本的openai包:

pip install --upgrade openai

2. 修正后的代码

import openai
import time

openai.api_key = "my_key"

def my_chatbot(user_input, assistant_id):
    # 创建线程(无需assistant参数)
    thread = openai.beta.threads.create()
    thread_id = thread.id

    # 添加用户消息到线程
    openai.beta.threads.messages.create(
        thread_id=thread_id,
        role="user",
        content=user_input
    )

    # 创建并启动Run
    run = openai.beta.threads.runs.create(
        thread_id=thread_id,
        assistant_id=assistant_id
    )

    # 轮询等待Run完成
    while run.status != "completed":
        time.sleep(1)
        run = openai.beta.threads.runs.retrieve(
            thread_id=thread_id,
            run_id=run.id
        )

    # 获取线程中的所有消息
    messages = openai.beta.threads.messages.list(thread_id=thread_id)
    # 助理消息位于列表开头(按创建时间倒序),取第一个的内容
    return messages.data[0].content[0].text.value

if __name__ == "__main__":
    assistant_id = "my_id"
    while True:
        user_input = input("Você: ")
        if user_input.lower() in ["sair", "fechar"]:
            break

        chatbot_response = my_chatbot(user_input, assistant_id)
        print("Chatbot:", chatbot_response)

关键说明

  • 使用openai.beta.threads、openai.beta.threads.messages、openai.beta.threads.runs路径调用对应接口,这是Assistants API的标准调用方式。
  • 创建Thread时无需绑定助理,一个Thread可以关联多个助理,或多次关联同一个助理。
  • 必须等待Run状态变为completed后再获取消息,否则无法拿到助理生成的回复。

内容的提问来源于stack exchange,提问作者Felipe Viero Goulart

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 18:23:41