""" 任务相关的业务逻辑服务 """ import re from typing import Dict, Tuple from django.conf import settings class AITitleGenerator: """AI标题生成服务""" @staticmethod def generate_title_and_description(requirement: str) -> Tuple[str, str]: """ 根据用户需求生成任务标题和描述 Args: requirement: 用户需求描述 Returns: tuple: (标题, 描述) """ # 简化版本的关键词匹配(实际应该调用OpenAI API) keywords = requirement.lower() # 默认值 title = '信息监控任务' description = '智能监控和分析任务' # 关键词匹配规则 if any(keyword in keywords for keyword in ['openai', 'ai', '人工智能', '机器学习']): title = 'AI技术动态监控' description = '实时监控AI技术发展动态和产品更新' elif any(keyword in keywords for keyword in ['产品', '功能', '发布', '更新']): title = '产品功能监控' description = '跟踪产品功能更新和发布动态' elif any(keyword in keywords for keyword in ['新闻', '资讯', '动态', '消息']): title = '新闻资讯监控' description = '收集和分析相关新闻资讯' elif any(keyword in keywords for keyword in ['市场', '行业', '竞争', '分析']): title = '市场行业分析' description = '监控市场动态和行业发展趋势' elif any(keyword in keywords for keyword in ['股票', '金融', '投资', '财经']): title = '金融投资监控' description = '跟踪金融市场和投资机会' elif any(keyword in keywords for keyword in ['政策', '法规', '监管', '政府']): title = '政策法规监控' description = '监控政策变化和法规更新' # 从需求中提取关注对象,添加到标题中 object_match = re.search(r'关注对象[::]\s*([^\n\r,,。.]+)', requirement) if object_match: focus_object = object_match.group(1).strip() if focus_object and len(focus_object) < 20: title = f'{focus_object} - {title}' return title, description @staticmethod def generate_with_openai(requirement: str) -> Tuple[str, str]: """ 使用OpenAI API生成标题和描述(备用方案) Args: requirement: 用户需求描述 Returns: tuple: (标题, 描述) """ try: import openai if not settings.OPENAI_API_KEY: return AITitleGenerator.generate_title_and_description(requirement) openai.api_key = settings.OPENAI_API_KEY prompt = f""" 根据以下用户需求,生成一个简洁的任务标题和一句话描述: 用户需求: {requirement} 请返回JSON格式: {{ "title": "任务标题(不超过20字)", "description": "任务描述(不超过50字)" }} """ response = openai.ChatCompletion.create( model="gpt-3.5-turbo", messages=[ {"role": "system", "content": "你是一个专业的任务管理助手,擅长根据用户需求生成简洁明确的任务标题和描述。"}, {"role": "user", "content": prompt} ], max_tokens=200, temperature=0.7 ) result = response.choices[0].message.content # 解析JSON响应 import json parsed = json.loads(result) return parsed.get('title', '信息监控任务'), parsed.get('description', '智能监控和分析任务') except Exception as e: print(f"OpenAI API调用失败: {e}") # 降级到本地生成 return AITitleGenerator.generate_title_and_description(requirement) class TaskService: """任务业务逻辑服务""" @staticmethod def create_task(user, task_data: Dict): """ 创建新任务 Args: user: 用户对象 task_data: 任务数据 Returns: Task: 创建的任务对象 """ # 生成AI标题和描述 title, description = AITitleGenerator.generate_title_and_description( task_data['requirement'] ) # 构建信息源配置 sources_config = { 'presetSources': task_data.get('presetSources', []), 'customSources': task_data.get('customSources', []), 'webSearchEnabled': task_data.get('webSearchEnabled', True) } # 导入模型 from .models import Task, TaskLog # 创建任务 task = Task.objects.create( title=title, description=description, requirement=task_data['requirement'], type=task_data['type'], schedule_config=task_data.get('schedule'), sources_config=sources_config, web_search_enabled=task_data.get('webSearchEnabled', True), user=user ) # 记录创建日志 TaskLog.objects.create( task=task, action_type='created', message=f'任务创建成功: {title}' ) # 如果是单次任务,立即开始执行 if task.type == 'single': TaskService.start_task_execution(task) return task @staticmethod def start_task_execution(task): """ 开始执行任务 Args: task: 任务对象 """ # 更新任务状态 task.status = 'running' task.save(update_fields=['status']) # 导入模型 from .models import TaskLog # 记录开始执行日志 TaskLog.objects.create( task=task, action_type='started', message='任务开始执行' ) # 这里可以添加Celery异步任务调用 # from .tasks import execute_task # execute_task.delay(task.id) @staticmethod def pause_task(task): """暂停任务""" # 导入模型 from .models import TaskLog task.status = 'paused' task.save(update_fields=['status']) TaskLog.objects.create( task=task, action_type='paused', message='任务已暂停' ) @staticmethod def resume_task(task): """恢复任务""" # 导入模型 from .models import TaskLog task.status = 'running' task.save(update_fields=['status']) TaskLog.objects.create( task=task, action_type='resumed', message='任务已恢复' ) class ReportService: """报告业务逻辑服务""" @staticmethod def create_mock_report(task): """ 创建模拟报告(用于演示) Args: task: 任务对象 Returns: Report: 创建的报告对象 """ # 根据任务需求生成模拟报告内容 requirement = task.requirement.lower() if 'openai' in requirement or 'ai' in requirement: title = 'OpenAI GPT-4 Turbo重大更新' summary = 'OpenAI发布GPT-4 Turbo新版本,支持更长上下文,性能显著提升...' content = """# OpenAI GPT-4 Turbo重大更新 ## 主要更新内容 1. **上下文长度提升**: 支持128K tokens的上下文长度 2. **性能优化**: 推理速度提升2倍 3. **成本降低**: API调用成本降低50% ## 详细分析 这次更新标志着AI技术的重要进展... """ source_tag = 'OpenAI官网' else: title = f'{task.title} - 最新动态报告' summary = f'基于您的需求「{task.requirement[:50]}...」生成的分析报告' content = f"""# {task.title} ## 监控概要 根据您的需求进行信息收集和分析。 ## 关键发现 1. 相关信息已收集完成 2. 数据分析正在进行中 3. 将持续监控相关动态 ## 详细内容 {task.requirement} ## 下一步计划 继续监控相关信息源,及时更新分析结果。 """ source_tag = '联网搜索' # 导入模型 from .models import Report, ReportSource report = Report.objects.create( task=task, title=title, summary=summary, content=content, source_tag=source_tag, status='completed' ) # 创建报告来源记录 ReportSource.objects.create( report=report, source_type='web-search', source_name='联网搜索', extracted_content=summary ) return report