|
|
@@ -8,6 +8,7 @@ import json
|
|
|
import asyncio
|
|
|
from ..config.config import Config
|
|
|
from ..routers.users import get_current_active_user, User
|
|
|
+from ..db.mongo import save_chat_log
|
|
|
|
|
|
# =====================================================
|
|
|
# 全局变量和配置
|
|
|
@@ -251,10 +252,18 @@ async def generate_stream_response(request: ChatRequest, username: str):
|
|
|
# 异步让出控制权,避免阻塞事件循环
|
|
|
await asyncio.sleep(0.01)
|
|
|
|
|
|
- # 处理响应完成事件,获取response_id
|
|
|
+ # 处理响应完成事件,获取response_id并记录原始响应日志
|
|
|
elif event_type == 'response.completed':
|
|
|
if 'response' in chunk_dict and hasattr(chunk_dict['response'], 'id'):
|
|
|
response_id = chunk_dict['response'].id
|
|
|
+ # 记录原始响应日志
|
|
|
+ save_chat_log(
|
|
|
+ username=username,
|
|
|
+ question=latest_user_msg.content,
|
|
|
+ stream_mode=True,
|
|
|
+ raw_response=repr(chunk_dict.get('response')),
|
|
|
+ status="success",
|
|
|
+ )
|
|
|
|
|
|
# 流式响应结束后的处理
|
|
|
if accumulated_content:
|
|
|
@@ -292,6 +301,15 @@ async def generate_stream_response(request: ChatRequest, username: str):
|
|
|
"timestamp": datetime.now().isoformat() # 错误发生时间
|
|
|
}
|
|
|
|
|
|
+ # 记录错误日志到 MongoDB
|
|
|
+ save_chat_log(
|
|
|
+ username=username,
|
|
|
+ question=latest_user_msg.content if latest_user_msg else "",
|
|
|
+ stream_mode=True,
|
|
|
+ status="error",
|
|
|
+ error=str(e),
|
|
|
+ )
|
|
|
+
|
|
|
# 发送错误信息
|
|
|
yield f"data: {json.dumps(error_response)}\n\n"
|
|
|
|
|
|
@@ -407,6 +425,15 @@ async def chat(
|
|
|
previous_response_id=previous_response_id,
|
|
|
)
|
|
|
|
|
|
+ # 记录原始响应日志到 MongoDB(解析前)
|
|
|
+ save_chat_log(
|
|
|
+ username=username,
|
|
|
+ question=latest_user_msg.content,
|
|
|
+ stream_mode=False,
|
|
|
+ raw_response=repr(response),
|
|
|
+ status="success",
|
|
|
+ )
|
|
|
+
|
|
|
# 检查API响应是否有效
|
|
|
if response.output and len(response.output) > 0:
|
|
|
# 从output中提取文本内容
|
|
|
@@ -444,6 +471,15 @@ async def chat(
|
|
|
# 将AI回复添加到用户的聊天历史
|
|
|
chatHistory[username].append(assistant_message)
|
|
|
|
|
|
+ # 保存聊天日志到 MongoDB
|
|
|
+ save_chat_log(
|
|
|
+ username=username,
|
|
|
+ question=latest_user_msg.content,
|
|
|
+ answer=message_content,
|
|
|
+ stream_mode=False,
|
|
|
+ response_id=response.id,
|
|
|
+ )
|
|
|
+
|
|
|
# 构建完整的响应对象
|
|
|
chat_response = ChatResponse(
|
|
|
message=assistant_message, # AI回复消息
|
|
|
@@ -472,6 +508,13 @@ async def chat(
|
|
|
except Exception as e:
|
|
|
# 捕获所有其他异常并转换为HTTP异常
|
|
|
error_message = f"处理聊天请求时发生错误: {str(e)}"
|
|
|
+ save_chat_log(
|
|
|
+ username=current_user.username,
|
|
|
+ question=request.messages[-1].content if request.messages else "",
|
|
|
+ stream_mode=request.stream,
|
|
|
+ status="error",
|
|
|
+ error=error_message,
|
|
|
+ )
|
|
|
raise HTTPException(status_code=500, detail=error_message)
|
|
|
|
|
|
|