GPT-3.5-turbo API无聊天响应:Repl拉丁导师API问题排查
问题分析与修复方案
核心问题梳理
- 无限循环阻塞程序:第一个
while True循环无终止条件,会持续调用OpenAI接口,导致后续交互逻辑完全无法执行。 - 用户输入未纳入对话:获取用户学习主题的
topic变量未添加到对话上下文messages中,AI无法知晓用户的学习需求。 - 交互触发逻辑失效:第二个循环中
first初始为False,if first:判断永远不成立,无法启动用户输入与AI响应流程。 - 响应提取键名错误:代码中使用
response['choices'][0]['messages']['content'],正确键应为message(单数)。 - 系统提示存在拼写错误:提示文本里的“laguage”应改为“language”,“it get”应改为“I get”,避免影响AI指令理解。
修正后的完整代码
import os import openai import sys try: openai.api_key = os.environ['OPENAI_API_KEY'] except KeyError: sys.stderr.write(""" 你还未配置API密钥。 若还没有API密钥,请按以下步骤操作: 1. 注册或登录账号 2. 点击右上角菜单的「查看API密钥」 3. 点击「创建新的密钥」 之后在Secrets工具中添加OPENAI_API_KEY作为密钥。 """) exit(1) topic = input("我是你的拉丁语导师,你想学习什么内容?\n> ").strip() # 初始化对话上下文,加入用户的学习主题 messages = [ {"role": "system", "content": "我需要交互式教学。请先以10年级的难度向我讲解拉丁语相关概念,然后停止并给出一道选择题测试,批改测试后继续讲解。如果我答错,就把讲解难度降低3个等级,用更简单的语言表述;如果答对,就提高难度。之后重复测试和讲解的流程。不要提及难度调整的事,在我作答前不要泄露答案。每次提问后停止等待我的回答。"}, {"role": "user", "content": f"我想学习:{topic}"} ] # 发起第一次AI响应 response = openai.ChatCompletion.create( model="gpt-3.5-turbo", messages=messages ) content = response['choices'][0]['message']['content'].strip() print(content) messages.append({"role": "assistant", "content": content}) # 进入交互循环 while True: question = input("> ") messages.append({"role": "user", "content": question}) response = openai.ChatCompletion.create( model="gpt-3.5-turbo", messages=messages ) content = response['choices'][0]['message']['content'].strip() print(content) messages.append({"role": "assistant", "content": content})
修复说明
- 移除了阻塞程序的无限循环,先初始化包含用户学习主题的对话上下文。
- 先发起第一次AI响应,开启教学流程。
- 修正了响应提取的键名错误,确保能正确获取AI返回内容。
- 修正了系统提示中的拼写错误,优化指令清晰度。
- 调整交互逻辑,确保用户输入能正常触发AI响应,形成完整的对话闭环。
内容的提问来源于stack exchange,提问作者Jack Francis
相关产品推荐
相关产品推荐

