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
相关产品推荐
相关产品推荐

