support multi-round chat

This commit is contained in:
wangjiacai 2023-04-04 23:38:22 +08:00
parent f8ef238673
commit e0ad3f0059

View File

@ -2,6 +2,7 @@ from flask import Blueprint, render_template, current_app, request, flash, redir
from flask_login import login_required, current_user, login_manager from flask_login import login_required, current_user, login_manager
from .models import User, Conversation from .models import User, Conversation
from . import db from . import db
from datetime import datetime, timedelta
import openai import openai
main = Blueprint('main', __name__) main = Blueprint('main', __name__)
@ -75,13 +76,25 @@ def chat_post():
db.session.commit() db.session.commit()
if current_user.is_authenticated and current_user.isActivated: if current_user.is_authenticated and current_user.isActivated:
openai_resp = openai.ChatCompletion.create(
model=current_app.config['OPENAI_MODEL_NAME'],
messages = [ messages = [
{"role": "system", {"role": "system",
"content": current_app.config['OPENAI_PROMPT']}, "content": current_app.config['OPENAI_PROMPT']},
{"role": "user", "content": msg}
] ]
chats_desc = Conversation.query.filter_by(
userid=current_user.id, useremail=current_user.email).order_by(Conversation.datetime.desc()).limit(20).all()
for chat in reversed(chats_desc):
if chat.datetime <= datetime.utcnow() - timedelta(seconds=300):
continue
if chat.response:
messages.append(
{"role": "assistant", "content": chat.response})
else:
messages.append(
{"role": "user", "content": chat.request})
openai_resp = openai.ChatCompletion.create(
model=current_app.config['OPENAI_MODEL_NAME'],
messages=messages
) )
msg_resp = openai_resp['choices'][0]['message']['content'] msg_resp = openai_resp['choices'][0]['message']['content']
if msg_resp: if msg_resp: