解决TypeError: 'ChatCompletion'不可下标问题及Reddit机器人报错
问题修复方案
核心错误原因
你遇到的TypeError: 'ChatCompletion' object is not subscriptable,是因为OpenAI Python SDK v1版本返回的是对象实例而非字典,不能用[]下标访问属性,必须使用.点语法读取。
其他代码问题及修复
除核心错误外,代码还存在以下问题需修正:
detailed_prompt定义不完整,且后续代码结构混乱(try-except块直接接在字符串定义后,导致语法错误)- API密钥获取方式错误:
os.environ.get()参数应为环境变量名,而非密钥本身 - 缺少必要的模块导入语句
- 无关的微调代码块位置错误,干扰正常逻辑执行
修复后的完整代码
import os from dotenv import load_dotenv import openai # 加载环境变量 load_dotenv() # 初始化OpenAI客户端 client = openai.OpenAI( api_key=os.environ.get("OPENAI_API_KEY") # 从.env文件读取API密钥 ) # 定义提示模板 detailed_prompt = """ 作为投资专家Prospero的CEO George Kailas,请针对以下Reddit帖子给出专业投资建议: [Your Reddit Post Here] """ # 生成回复的函数 def generate_response(prompt): response = client.chat.completions.create( model="gpt-3.5-turbo", messages=[ {"role": "system", "content": "You are George Kailas, an expert in investing and the CEO of Prospero."}, {"role": "user", "content": prompt} ], max_tokens=150, temperature=0.7 ) # 使用点语法访问ChatCompletion对象属性 return response.choices[0].message.content.strip() # 测试Reddit帖子回复 reddit_post = "What are some good resources to learn about stock market investing?" formatted_prompt = detailed_prompt.replace("[Your Reddit Post Here]", reddit_post) response = generate_response(formatted_prompt) print(response)
额外注意事项
- 确保
.env文件中设置OPENAI_API_KEY=你的密钥 - 若不需要微调功能,可删除原代码中
client.fine_tuning.jobs.create相关代码块 - 后续若遇API错误(如连接失败、速率限制),可在
generate_response函数中添加对应异常捕获逻辑
内容的提问来源于stack exchange,提问作者Beata Tali Gold
相关产品推荐
相关产品推荐

