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

OpenAI SDK更新后Python机器人报错'Choice' object has no attribute 'text'求助

修复OpenAI SDK更新后的'Choice' object has no attribute 'text'错误及潜在问题

核心错误修复

这个报错是因为OpenAI SDK从v0.x版本升级到v1.x后,API返回结构和调用方式发生了根本性变化:

  • 旧版v0.x中,获取生成文本的写法是response.choices[0].text
  • 新版v1.x中,需要改为response.choices[0].message.content

代码示例对比

旧版v0.x代码(已过时)

import openai
openai.api_key = "你的API密钥"
response = openai.Completion.create(model="text-davinci-003", prompt="请说一句问候语")
print(response.choices[0].text)

新版v1.x修正后代码

from openai import OpenAI
# 初始化客户端实例(v1.x强制要求)
client = OpenAI(api_key="你的API密钥")
# 使用chat模型替代旧的Completion模型
response = client.chat.completions.create(
    model="gpt-3.5-turbo",
    messages=[{"role": "user", "content": "请说一句问候语"}]
)
# 正确获取回复内容
print(response.choices[0].message.content)

其他潜在问题修复建议

  • 密钥安全:不要硬编码API密钥到代码里,改用环境变量管理:
    import os
    from openai import OpenAI
    client = OpenAI(api_key=os.getenv("OPENAI_API_KEY"))
    
  • 模型迁移:旧版的text-davinci-003等Completion模型已逐步淘汰,优先使用gpt-3.5-turbo或gpt-4系列的聊天模型,成本更低、响应更快
  • 异常处理:添加基础异常捕获,避免程序因网络或API错误直接崩溃:
    try:
        response = client.chat.completions.create(
            model="gpt-3.5-turbo",
            messages=[{"role": "user", "content": "请说一句问候语"}]
        )
        print(response.choices[0].message.content)
    except Exception as e:
        print(f"请求失败:{str(e)}")
    
  • 参数适配:旧版的prompt参数在chat模型中替换为messages列表,每个消息需指定role(可选值:user/assistant/system)和content字段

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 13:12:15