|
@@ -0,0 +1,71 @@
|
|
|
+const API = require("../../lib/API")
|
|
|
+const AccessControl = require("../../lib/AccessControl")
|
|
|
+const { BaseStdResponse } = require("../../BaseStdResponse")
|
|
|
+const db = require("../../plugin/DataBase/db")
|
|
|
+const axios = require("axios")
|
|
|
+const { core_url } = require("../../config.json")
|
|
|
+
|
|
|
+class AIChat extends API {
|
|
|
+ constructor() {
|
|
|
+ super()
|
|
|
+ this.setMethod("POST")
|
|
|
+ this.setPath("/AI/Chat")
|
|
|
+ }
|
|
|
+
|
|
|
+ async onRequest(req, res) {
|
|
|
+ const { uuid, session, message } = req.query
|
|
|
+
|
|
|
+ // 参数校验
|
|
|
+ if (!uuid || !session || !message) {
|
|
|
+ return res.json({ ...BaseStdResponse.MISSING_PARAMETER })
|
|
|
+ }
|
|
|
+
|
|
|
+ // session 校验
|
|
|
+ const sessionValid = await AccessControl.checkSession(uuid, session)
|
|
|
+ if (!sessionValid) {
|
|
|
+ return res.status(401).json({ ...BaseStdResponse.ACCESS_DENIED })
|
|
|
+ }
|
|
|
+
|
|
|
+ const userTime = new Date().getTime() // 用户消息发送时间
|
|
|
+
|
|
|
+ try {
|
|
|
+ const endpoint = `${core_url}/ai/chat`
|
|
|
+ const aiResponse = await axios.post(endpoint, { uuid, message })
|
|
|
+ console.log(aiResponse.data)
|
|
|
+
|
|
|
+ const aiData = aiResponse?.data?.loc[0]
|
|
|
+ if (!aiData || !aiData.msg) {
|
|
|
+ throw new Error("AI响应格式错误")
|
|
|
+ }
|
|
|
+
|
|
|
+ const aiContent = aiData.msg
|
|
|
+ const aiTime = new Date().getTime()
|
|
|
+
|
|
|
+ res.json({
|
|
|
+ ...BaseStdResponse.OK,
|
|
|
+ data: aiData
|
|
|
+ })
|
|
|
+
|
|
|
+ // 异步写入数据库
|
|
|
+ const insertUserMessage = db.query(
|
|
|
+ 'INSERT INTO messages (uuid, content, time, type) VALUES (?, ?, ?, "user")',
|
|
|
+ [uuid, message, userTime]
|
|
|
+ )
|
|
|
+
|
|
|
+ const insertAIMessage = db.query(
|
|
|
+ 'INSERT INTO messages (uuid, content, time, type) VALUES (?, ?, ?, "ai")',
|
|
|
+ [uuid, aiContent, aiTime]
|
|
|
+ )
|
|
|
+
|
|
|
+ await Promise.all([insertUserMessage, insertAIMessage])
|
|
|
+ } catch (error) {
|
|
|
+ this.logger.error("消息发送失败:" + error.stack)
|
|
|
+ res.json({
|
|
|
+ ...BaseStdResponse.ERR,
|
|
|
+ msg: "消息发送失败,请稍后再试"
|
|
|
+ })
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+module.exports.AIChat = AIChat
|