main
HuangHai 4 months ago
parent 1f72404b89
commit faae3ff8b2

@ -1,11 +1,37 @@
/*
Navicat Premium Dump SQL
Source Server : 10.10.14.210
Source Server Type : MySQL
Source Server Version : 50742 (5.7.42-log)
Source Host : 10.10.14.210:22066
Source Schema : ai_db
Target Server Type : MySQL
Target Server Version : 50742 (5.7.42-log)
File Encoding : 65001
Date: 25/03/2025 10:03:37
*/
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for t_chat_log
-- ----------------------------
DROP TABLE IF EXISTS `t_chat_log`; DROP TABLE IF EXISTS `t_chat_log`;
CREATE TABLE `t_chat_log` ( CREATE TABLE `t_chat_log` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键', `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',
`session_id` char(36) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '用户人员编号', `session_id` char(36) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '用户人员编号',
`user_input` varchar(2000) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '用户提出的问题', `user_input` varchar(2000) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '用户提出的问题',
`model_response` varchar(2000) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '大模型的反馈', `model_response` varchar(2000) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '大模型的反馈',
`audio_url` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '生成的语音文件路径',
`duration` double NULL DEFAULT 0 COMMENT '音频时长,单位:秒',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
PRIMARY KEY (`id`) USING BTREE, PRIMARY KEY (`id`) USING BTREE,
INDEX `idx_session_id`(`session_id`) USING BTREE, INDEX `idx_session_id`(`session_id`) USING BTREE,
INDEX `idx_create_time`(`create_time`) USING BTREE INDEX `idx_create_time`(`create_time`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; ) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = DYNAMIC;
SET FOREIGN_KEY_CHECKS = 1;

@ -4,7 +4,7 @@ import time
import uuid import uuid
from contextlib import asynccontextmanager from contextlib import asynccontextmanager
from fastapi import FastAPI, Form, HTTPException from fastapi import FastAPI, Form, HTTPException, Query
from openai import AsyncOpenAI from openai import AsyncOpenAI
from WxMini.Milvus.Config.MulvusConfig import * from WxMini.Milvus.Config.MulvusConfig import *
@ -12,7 +12,7 @@ from WxMini.Milvus.Utils.MilvusCollectionManager import MilvusCollectionManager
from WxMini.Milvus.Utils.MilvusConnectionPool import * from WxMini.Milvus.Utils.MilvusConnectionPool import *
from WxMini.Utils.OssUtil import upload_mp3_to_oss_from_memory from WxMini.Utils.OssUtil import upload_mp3_to_oss_from_memory
from WxMini.Utils.TtsUtil import TTS from WxMini.Utils.TtsUtil import TTS
from WxMini.Utils.MySQLUtil import init_mysql_pool, save_chat_to_mysql from WxMini.Utils.MySQLUtil import init_mysql_pool, save_chat_to_mysql, get_chat_log_by_session
from WxMini.Utils.EmbeddingUtil import text_to_embedding from WxMini.Utils.EmbeddingUtil import text_to_embedding
# 配置日志 # 配置日志
@ -178,6 +178,28 @@ async def reply(session_id: str = Form(...), prompt: str = Form(...)):
# 释放连接 # 释放连接
milvus_pool.release_connection(connection) milvus_pool.release_connection(connection)
# 获取聊天记录
@app.get("/get_chat_log")
async def get_chat_log(
session_id: str,
page: int = Query(default=1, ge=1, description="当前页码"),
page_size: int = Query(default=10, ge=1, le=100, description="每页记录数")
):
"""
根据 session_id 查询聊天记录并按 id 降序分页
:param session_id: 用户会话 ID
:param page: 当前页码
:param page_size: 每页记录数
:return: 分页数据
"""
try:
result = await get_chat_log_by_session(app.state.mysql_pool,session_id, page, page_size)
return result
except Exception as e:
logger.error(f"查询聊天记录失败: {str(e)}")
raise HTTPException(status_code=500, detail=f"查询聊天记录失败: {str(e)}")
# 运行 FastAPI 应用 # 运行 FastAPI 应用
if __name__ == "__main__": if __name__ == "__main__":
import uvicorn import uvicorn

@ -42,3 +42,54 @@ async def truncate_chat_log(mysql_pool):
await cur.execute("TRUNCATE TABLE t_chat_log") await cur.execute("TRUNCATE TABLE t_chat_log")
await conn.commit() await conn.commit()
logger.info("表 t_chat_log 已清空。") logger.info("表 t_chat_log 已清空。")
# 分页查询聊天记录
async def get_chat_log_by_session(mysql_pool,session_id, page=1, page_size=10):
"""
根据 session_id 查询聊天记录并按 id 降序分页
:param session_id: 用户会话 ID
:param page: 当前页码
:param page_size: 每页记录数
:return: 分页数据
"""
if not mysql_pool:
raise ValueError("MySQL 连接池未初始化")
offset = (page - 1) * page_size
async with mysql_pool.acquire() as conn:
async with conn.cursor() as cur:
# 查询总记录数
await cur.execute(
"SELECT COUNT(*) FROM t_chat_log WHERE session_id = %s",
(session_id,)
)
total = (await cur.fetchone())[0]
# 查询分页数据
await cur.execute(
"SELECT id, session_id, user_input, model_response, audio_url, duration, create_time "
"FROM t_chat_log WHERE session_id = %s ORDER BY id DESC LIMIT %s OFFSET %s",
(session_id, page_size, offset)
)
records = await cur.fetchall()
# 将查询结果转换为字典列表
result = [
{
"id": record[0],
"session_id": record[1],
"user_input": record[2],
"model_response": record[3],
"audio_url": record[4],
"duration": record[5],
"create_time": record[6].strftime("%Y-%m-%d %H:%M:%S")
}
for record in records
]
return {
"data": result,
"total": total,
"page": page,
"page_size": page_size
}
Loading…
Cancel
Save