如何基于GPT-3.5-Turbo API实现多轮对话(非OpenAI SDK)
实现GPT-3.5-Turbo的多轮对话关联
你的代码存在两个核心问题导致无法关联对话历史:
- 每次循环都重新创建
messages列表,没有保留之前的对话内容 - 错误地将用户输入标记为
system角色(system是用来设定AI行为的系统提示,用户消息应该用user角色)
要实现多轮对话,你需要维护一个持久的对话历史列表,每次交互都把用户的提问和AI的回复依次加入这个列表,再将完整的历史传给API。
修改后的完整代码
import requests import json # 替换为你的API密钥和端点 API_KEY = "your-api-key-here" API_ENDPOINT = "https://api.openai.com/v1/chat/completions" def generate_chat_completion(messages, model="gpt-3.5-turbo", temperature=1, max_tokens=100): headers = { "Content-Type": "application/json", "Authorization": f"Bearer {API_KEY}", } data = { "model": model, "messages": messages, "temperature": temperature, "max_tokens": max_tokens } response = requests.post(API_ENDPOINT, headers=headers, data=json.dumps(data)) if response.status_code == 200: return response.json()["choices"][0]["message"] else: raise Exception(f"Error {response.status_code}: {response.text}") # 初始化对话历史,可添加system提示设定AI角色(可选) conversation_history = [ {"role": "system", "content": "你是一个友好的助手,会用简洁易懂的语言回答问题。"} ] while True: input_text = input("Enter your message: ") # 将用户输入加入对话历史 conversation_history.append({"role": "user", "content": input_text}) # 调用API获取回复 assistant_message = generate_chat_completion(conversation_history) print(assistant_message["content"]) # 将AI的回复加入对话历史,供下一轮使用 conversation_history.append(assistant_message)
关键修改点说明
- 持久化对话历史:将
conversation_history定义在循环外,每次交互都向其中追加用户消息和AI回复 - 角色修正:用户消息使用
user角色,AI回复使用assistant角色,系统提示使用system角色(可选,用来定义AI的行为风格) - 函数返回值调整:让函数返回完整的AI消息对象(包含role和content),方便直接加入对话历史
- 修复max_tokens逻辑:原代码中先将
max_tokens设为100,再判断是否为None,逻辑错误,直接在函数参数中设置默认值更合理
额外注意事项
- 对话历史会占用token额度,当历史过长时可能触发token超限错误,你可以根据需求实现历史截断逻辑(比如只保留最近几轮对话)
temperature参数可以控制AI回复的随机性,值越低回复越稳定,值越高越有创意
内容的提问来源于stack exchange,提问作者dairy
相关产品推荐
相关产品推荐

