82 lines
3.2 KiB
Plaintext
82 lines
3.2 KiB
Plaintext
from PDAPI import *
|
|
|
|
|
|
__metadata__ = {
|
|
"methods": ["POST"],
|
|
"blueprint": "Invite",
|
|
"permission": 1.0,
|
|
"attributes": [],
|
|
"limit": "1/second",
|
|
"args": [
|
|
{"Name": "InviteID", "Type": "int"},
|
|
],
|
|
"form": [
|
|
{"Name": "Content", "Type": "str", "MaxLen": 2048}
|
|
]
|
|
}
|
|
def HandleRequest():
|
|
InviteID = flask.request.args.get("InviteID")
|
|
Content = flask.request.form.get("Content")
|
|
Conversation: InviteConversation = InviteConversation.query.filter_by(InviteID=InviteID).first()
|
|
if Conversation and Conversation.FinalStatus is not None:
|
|
return flask.jsonify({
|
|
"Success": False,
|
|
"Message": "对话已结束(已给出面试结果/拒绝回答),无法继续聊天",
|
|
"IsFinal": True
|
|
})
|
|
if not Conversation:
|
|
return flask.jsonify({"Success": False, "Message": "对话未初始化,请刷新页面"})
|
|
if not IsConversationValid(InviteID):
|
|
return flask.jsonify({"Success": False, "Message": "对话不存在或已过期"})
|
|
if len(Conversation.Messages) >= 50:
|
|
return flask.jsonify({"Success": False, "Message": "对话已达到最大消息数量(50句)"})
|
|
UserMessage = {"Role": "User", "Content": Content, "CreateTime": time.time()}
|
|
Messages = Conversation.Messages.copy()
|
|
Messages.append(UserMessage)
|
|
AiMessages = [{"role": Msg["Role"].lower(), "content": Msg["Content"]} for Msg in Messages]
|
|
Client = OpenAI(api_key="sk-e6e4206cded047818f7e329538c69613", base_url="https://api.deepseek.com")
|
|
Response = Client.chat.completions.create(model="deepseek-chat", messages=AiMessages, stream=False)
|
|
AiContent = Response.choices[0].message.content
|
|
FinalStatus = None
|
|
FinalResult = AiContent
|
|
FinalReason = ""
|
|
FinalMood = ""
|
|
try:
|
|
AiJson = json.loads(AiContent.strip())
|
|
if isinstance(AiJson, dict) and "status" in AiJson:
|
|
FinalStatus = AiJson["status"]
|
|
if "result" in AiJson:
|
|
FinalResult = AiJson["result"]
|
|
if FinalStatus == 1 and "because" in AiJson:
|
|
FinalReason = AiJson["because"]
|
|
if FinalStatus == 1 and "mood" in AiJson:
|
|
FinalMood = AiJson["mood"]
|
|
except json.JSONDecodeError:
|
|
pass
|
|
AiMessage = {"Role": "Assistant", "Content": FinalResult, "CreateTime": time.time()}
|
|
Messages.append(AiMessage)
|
|
Conversation.Messages = Messages
|
|
if FinalStatus is not None:
|
|
Conversation.FinalStatus = FinalStatus
|
|
Conversation.FinalResult = FinalResult
|
|
Conversation.FinalReason = FinalReason
|
|
Conversation.FinalMood = FinalMood
|
|
if len(Messages) > 50:
|
|
Conversation.Messages = Messages[-50:]
|
|
print(Conversation.Messages)
|
|
db.session.add(Conversation)
|
|
db.session.commit()
|
|
return flask.jsonify({
|
|
"Success": True,
|
|
"Data": {
|
|
"InviteID": InviteID,
|
|
"MessageCount": len(Messages),
|
|
"UserMessage": UserMessage,
|
|
"AiMessage": AiMessage,
|
|
"IsFinal": FinalStatus is not None,
|
|
"FinalStatus": FinalStatus,
|
|
"FinalReason": FinalReason,
|
|
"FinalMood": FinalMood
|
|
}
|
|
})
|