Files
SMANAGE/backup/_api_backup/TempLateAPI/Invite/API/SendConversation.api
T

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
}
})