本代码实现了一个chatgpt对话机器人,模型有达芬奇,可以设置为chatgpt3.5
from flask import Flask, render_template
from flask_socketio import SocketIO, emit
import openai
import re
import os
# 设置 OpenAI API 密钥
openai.api_key = os.getenv("OPENAI_API_KEY")
# 初始化 Flask 应用和 SocketIO 服务
app = Flask(__name__)
app.config['SECRET_KEY'] = 'secret!'
socketio = SocketIO(app)
# 定义上下文变量和对话历史记录
context = ""
conversation_history = []
# 定义生成 Markdown 格式的对话记录函数
def generate_markdown_dialogue(conversation_history):
dialogue = ""
for i in range(0, len(conversation_history), 2):
dialogue += f"- **User**: {conversation_history[i]}\n- **Bot**: {conversation_history[i+1]}\n\n"
return dialogue
# 定义对话事件处理函数
@socketio.on('my event')
def handle_my_event(json):
global context, conversation_history
# 获取用户输入
user_input = json['data']
# 将用户输入和上下文信息传递给 OpenAI API
response = openai.Completion.create(
engine="text-davinci-002",
prompt=f"{context}{user_input}",
max_tokens=1024,
temperature=0.7,
n=1,
stop=None,
)
# 解析 OpenAI API 返回的结果
bot_response = response.choices[0].text.strip()
bot_response = re.sub(r"[^\x00-\x7F]+", "", bot_response) # 移除非 ASCII 字符
context += f"{user_input}{bot_response}"
conversation_history.append(user_input)
conversation_history.append(bot_response)
# 发送机器人回答和对话历史记录到客户端
emit('my response', {'data': bot_response})
emit('dialogue history', {'data': generate_markdown_dialogue(conversation_history)})
# 定义主页路由
@app.route('/')
def index():
return render_template('index.html')
if __name__ == '__main__':
socketio.run(app, host='0.0.0.0', port=5000)