|
|
@@ -5,6 +5,7 @@ from volcenginesdkarkruntime import Ark
|
|
|
from pydantic import BaseModel
|
|
|
from typing import List, Optional, Dict, Any, Annotated
|
|
|
from datetime import datetime
|
|
|
+from fastapi import Query
|
|
|
import json
|
|
|
import asyncio
|
|
|
import jwt
|
|
|
@@ -328,13 +329,15 @@ async def generate_stream_response(request: ChatRequest, username: str):
|
|
|
@router.post("/chat", response_model=ChatResponse)
|
|
|
async def chat(
|
|
|
request: ChatRequest,
|
|
|
- jwt_token: Annotated[Optional[str], Depends(oauth2_scheme_optional)] = None
|
|
|
+ jwt_token: Annotated[Optional[str], Depends(oauth2_scheme_optional)] = None,
|
|
|
+ source: Optional[str] = Query(default=None), # 从 URL 获取
|
|
|
+ token: Optional[str] = Query(default=None) # 从 URL 获取
|
|
|
):
|
|
|
try:
|
|
|
# ===== 认证分支 =====
|
|
|
- if request.source == "app" and request.token:
|
|
|
+ if source == "app" and token:
|
|
|
# 第三方 App token 认证
|
|
|
- app_user = get_app_user(request.token)
|
|
|
+ app_user = get_app_user(token)
|
|
|
if not app_user:
|
|
|
raise HTTPException(status_code=401, detail="无效的 App token")
|
|
|
username = f"app_{app_user['userId']}"
|
|
|
@@ -470,15 +473,6 @@ 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回复消息
|
|
|
@@ -508,7 +502,7 @@ async def chat(
|
|
|
# 捕获所有其他异常并转换为HTTP异常
|
|
|
error_message = f"处理聊天请求时发生错误: {str(e)}"
|
|
|
save_chat_log(
|
|
|
- username=current_user.username,
|
|
|
+ username=username,
|
|
|
question=request.messages[-1].content if request.messages else "",
|
|
|
stream_mode=request.stream,
|
|
|
status="error",
|