From f588d1e46d4ffe3be1938f7e66f3bb6ee15dbcda Mon Sep 17 00:00:00 2001 From: bluish <734499798@qq.com> Date: Tue, 13 Jan 2026 09:38:11 +0000 Subject: [PATCH] =?UTF-8?q?=E7=8E=AF=E5=A2=83=E5=8F=98=E9=87=8F=E4=BF=AE?= =?UTF-8?q?=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/.env | 11 ++++++++++- backend/ai_service.py | 3 +++ backend/routes.py | 46 +++++++++++++++++++++++++++++-------------- docker-compose.yml | 5 ++++- frontend/js/api.js | 13 ++++++++++-- 5 files changed, 59 insertions(+), 19 deletions(-) diff --git a/backend/.env b/backend/.env index 23ea3f9..6e9f661 100644 --- a/backend/.env +++ b/backend/.env @@ -1,4 +1,13 @@ -# OpenAI API配置(可选,用于AI润色功能) +# AI服务配置(用于AI润色功能) +# 支持多个AI服务商:OpenAI、Anthropic、Google、自定义端点等 +AI_MODEL=gpt-3.5-turbo +AI_API_KEY=your_api_key_here +# AI_API_BASE=https://your-custom-endpoint.com/v1 # 可选:自定义API端点 +# AI_CUSTOM_PROVIDER=openai # 可选:自定义端点的API格式 +AI_TEMPERATURE=0.7 +AI_MAX_TOKENS=500 + +# 兼容旧配置 OPENAI_API_KEY=your_openai_api_key_here # 数据库配置 diff --git a/backend/ai_service.py b/backend/ai_service.py index d5edfe4..beb5aca 100644 --- a/backend/ai_service.py +++ b/backend/ai_service.py @@ -118,3 +118,6 @@ class AIService: # 创建全局AI服务实例 ai_service = AIService() + +if __name__=="__main__": + ai_service.polish_description("你好,我是奶龙,我打开附件打开房间啊看回归程序。") \ No newline at end of file diff --git a/backend/routes.py b/backend/routes.py index eadd341..0e916f3 100644 --- a/backend/routes.py +++ b/backend/routes.py @@ -149,26 +149,42 @@ async def delete_task(task_id: int, db: Session = Depends(get_db)): @api.post('/tasks/{task_id}/polish') async def polish_task_description(task_id: int, db: Session = Depends(get_db)): """AI润色任务描述""" - task = db.query(Task).filter(Task.id == task_id).first() - if not task: - raise HTTPException(status_code=404, detail='任务不存在') + try: + task = db.query(Task).filter(Task.id == task_id).first() + if not task: + raise HTTPException(status_code=404, detail='任务不存在') - if not ai_service.is_available(): - raise HTTPException(status_code=500, detail='AI服务不可用,请检查API密钥配置') + if not ai_service.is_available(): + raise HTTPException(status_code=400, detail='AI服务不可用,请检查API密钥配置') - if not task.description: - raise HTTPException(status_code=400, detail='任务描述为空,无法润色') + if not task.description: + raise HTTPException(status_code=400, detail='任务描述为空,无法润色') - polished_description = ai_service.polish_description(task.description) - task.polished_description = polished_description - task.updated_at = datetime.utcnow() + polished_description = ai_service.polish_description(task.description) - db.commit() + # 如果AI服务返回的内容与原内容相同,可能是AI调用失败 + if polished_description == task.description: + raise HTTPException(status_code=500, detail='AI润色服务调用失败,请检查配置和网络连接') - return { - 'original': task.description, - 'polished': polished_description - } + task.polished_description = polished_description + task.updated_at = datetime.utcnow() + + db.commit() + + return { + 'original': task.description, + 'polished': polished_description + } + except HTTPException: + # 重新抛出HTTP异常 + raise + except Exception as e: + # 捕获其他异常并返回详细错误信息 + import traceback + error_detail = f'AI润色失败: {str(e)}' + print(f"Polish task error: {error_detail}") + print(traceback.format_exc()) + raise HTTPException(status_code=500, detail=error_detail) # 计时器API @api.post('/timer/start') diff --git a/docker-compose.yml b/docker-compose.yml index 3c443f8..ee4e5cc 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -13,10 +13,13 @@ services: environment: - PYTHONUNBUFFERED=1 - SECRET_KEY=${SECRET_KEY:-your-secret-key-here} - - OPENAI_API_KEY=${OPENAI_API_KEY:-} # 默认用户配置 - DEFAULT_USERNAME=${DEFAULT_USERNAME:-admin} - DEFAULT_PASSWORD=${DEFAULT_PASSWORD:-admin123} + - AI_API_BASE=${AI_API_BASE} + - AI_CUSTOM_PROVIDER=${AI_CUSTOM_PROVIDER} + - AI_MODEL=${AI_MODEL} + - AI_API_KEY=${AI_API_KEY} volumes: # 持久化数据库 - 挂载到宿主机目录 - worklist-data:/app/data diff --git a/frontend/js/api.js b/frontend/js/api.js index aec37ec..b3a1c22 100644 --- a/frontend/js/api.js +++ b/frontend/js/api.js @@ -20,8 +20,17 @@ class WorkListAPI { const response = await fetch(url, config); if (!response.ok) { - const errorData = await response.json().catch(() => ({})); - throw new Error(errorData.error || `HTTP错误: ${response.status}`); + // 尝试解析错误响应 + let errorMessage = `HTTP错误: ${response.status}`; + try { + const errorData = await response.json(); + // 使用后端返回的详细错误信息 + errorMessage = errorData.detail || errorData.error || errorMessage; + } catch (parseError) { + // 如果无法解析JSON,使用默认错误消息 + console.error('无法解析错误响应:', parseError); + } + throw new Error(errorMessage); } return await response.json();