OpenAI ChatCompletion迁移问题求助:已尝试官方方案仍未解决
解决OpenAI API版本1.0.0+的ChatCompletion兼容性问题
问题根源
openai-python库1.0.0及以上版本重构了API架构,原有的openai.ChatCompletion.create调用方式已被移除,必须采用新的客户端实例模式调用接口。
解决方案一:适配新版本API(推荐)
修改app.py中的OpenAI客户端初始化逻辑与API调用代码,具体改动如下:
- 替换导入与客户端初始化
将直接导入openai并设置密钥的方式,改为创建OpenAI客户端实例:
# 替换原 import openai from openai import OpenAI # 替换原 openai.api_key = ... client = OpenAI(api_key=config['OpenAI']['api_key'])
- 调整API调用与响应解析
将openai.ChatCompletion.create替换为client.chat.completions.create,同时修改响应读取逻辑(新版本返回对象而非字典):
# 替换原API调用代码 response = client.chat.completions.create( model=config['LanguageModel']['model'], messages=conversation ) # 替换原响应解析代码 bot_response = response.choices[0].message.content
修改后的完整代码
from flask import Flask, render_template, request, jsonify from openai import OpenAI # 调整导入方式 import configparser # Read configurations from config.ini config = configparser.ConfigParser() config.read('config.ini') # Check if the required OpenAI API key is present in the configuration if 'OpenAI' not in config or 'api_key' not in config['OpenAI']: raise ValueError("OpenAI API key not found in config.ini") # Initialize the OpenAI client - 调整客户端初始化 client = OpenAI(api_key=config['OpenAI']['api_key']) app = Flask(__name__) app.static_folder = 'static' @app.route('/') def home(): return render_template('chat.html') @app.route('/send', methods=['POST']) def send_message(): user_message = request.json.get('message', '') character_info = { "name": "Unknown Character", "appearance": { "body_type": "Unknown", "complexion": "Unknown" }, "bio": { "House_of_Ashes": "Unknown", "accident": "Unknown" }, "traits": "Unknown" } prompt = config['Prompt']['prompt'].format( name=character_info['name'], traits=character_info['traits'], appearance=character_info['appearance'], bio=character_info['bio'], conversation_summary='' ) conversation = [ {"role": "system", "content": f"You are {character_info['name']}, and you are talking to {user_message}."}, {"role": "user", "content": user_message} ] try: print("Sending conversation to OpenAI API:", conversation) # 调整API调用方式 response = client.chat.completions.create( model=config['LanguageModel']['model'], messages=conversation ) print("Received response from OpenAI API:", response) # 调整响应解析逻辑 bot_response = response.choices[0].message.content except Exception as e: print("Error:", str(e)) return jsonify(response="OpenAI API error: " + str(e)) prompt = prompt.replace('{conversation_summary}', f'Player: {user_message}\nCharacter: {bot_response}\n') return jsonify(response=bot_response) if __name__ == '__main__': app.run(debug=True)
解决方案二:降级到旧版本库
若暂时不想修改代码,可执行以下命令将openai库降级至兼容版本:
pip install openai==0.28
注意:旧版本库后续不再接收安全更新与功能迭代,仅作为临时过渡方案。
内容的提问来源于stack exchange,提问作者Akhanta Nightshade
相关产品推荐
相关产品推荐

