From 05425ba9bf785213a472c596eb7a2d9b10483524 Mon Sep 17 00:00:00 2001 From: ganweichong Date: Sun, 12 Oct 2025 13:43:20 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docker-compose.yaml | 15 +- selenium/config.py | 6 +- selenium/main.py | 58 +++-- selenium/parseApi/api.py | 3 + selenium_django/Dockerfile | 5 - selenium_django/api/models.py | 123 +++++----- selenium_django/api/scheduler.py | 230 ++++++++++-------- selenium_django/api/tasks.py | 230 +++++++++--------- selenium_django/api/views.py | 68 +++++- selenium_django/db.sqlite3 | Bin 4009984 -> 4579328 bytes selenium_django/entrypoint.sh | 12 +- selenium_django/selenium_django/settings.py | 14 +- selenium_vue/Dockerfile | 9 +- selenium_vue/frontend-vite/index.html | 4 +- selenium_vue/frontend-vite/src/api/config.js | 41 ++-- .../frontend-vite/src/views/Tasks.vue | 16 +- 16 files changed, 485 insertions(+), 349 deletions(-) diff --git a/docker-compose.yaml b/docker-compose.yaml index a8f0e24..96eae4c 100755 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -14,7 +14,10 @@ services: container_name: selenium-crawl-container ports: - "5001:5000" - + environment: + API_MODEL: "glm-4.5" + API_BASE_URL: "https://open.bigmodel.cn/api/paas/v4" + API_KEY: "ce39bdd4fcf34ec0aec75072bc9ff988.hAp7HZTVUwy7vImn" # ---------- Django + Celery ---------- selenium_django: build: ./selenium_django @@ -24,7 +27,11 @@ services: CELERY_BROKER_URL: redis://redis:6379/0 CELERY_RESULT_BACKEND: redis://redis:6379/0 # Django 调用爬虫服务的地址 - CRAWL_API_URL: http://47.83.141.164:5001/crawl + CRAWL_API_URL: http://47.83.141.164:5001 + # API 配置 + API_MODEL: "glm-4-long" + API_BASE_URL: "https://open.bigmodel.cn/api/paas/v4" + API_KEY: "ce39bdd4fcf34ec0aec75072bc9ff988.hAp7HZTVUwy7vImn" volumes: - "./selenium_django:/app" depends_on: @@ -39,8 +46,8 @@ services: context: ./selenium_vue # 上一级目录 dockerfile: Dockerfile args: - VITE_API_BASE_URL: http://47.83.141.164:8002 - VITE_CRAWL_URL: http://47.83.141.164:5001/crawl + VITE_API_BASE_URL: http://47.83.141.164:8002 # 改为远程 IP + VITE_CRAWL_URL: http://47.83.141.164:5001 # 改为远程 IP container_name: selenium-vue-container environment: PORT: 80 diff --git a/selenium/config.py b/selenium/config.py index ea9fca8..de0f716 100755 --- a/selenium/config.py +++ b/selenium/config.py @@ -4,9 +4,9 @@ from selenium import webdriver from selenium.webdriver.chrome.service import Service import os api_info = { - "model": "glm-4.5", - "base_url": "https://open.bigmodel.cn/api/paas/v4", - "api_key": "ce39bdd4fcf34ec0aec75072bc9ff988.hAp7HZTVUwy7vImn" + "model": os.environ.get("API_MODEL", "glm-4.5"), # 默认值可选 + "base_url": os.environ.get("API_BASE_URL", "https://open.bigmodel.cn/api/paas/v4"), + "api_key": os.environ.get("API_KEY", ""), } # chrome浏览器以及驱动配置 diff --git a/selenium/main.py b/selenium/main.py index 93c042d..43b1740 100755 --- a/selenium/main.py +++ b/selenium/main.py @@ -39,26 +39,31 @@ def translate_text(text): return {"chinese": [], "english": []} # 构造 prompt - prompt = ( - "你是科研助手,输入是一句话或中文关键词列表。" - "请从输入中理解语义,提取与科研论文主题最相关、最核心的中文主题,并翻译为英文。" - "只保留1~2个最核心主题,不要加入无关内容。" - "输出必须严格遵守 JSON 格式,不允许有额外文字或符号:{\"chinese\": [...], \"english\": [...]}。\n" - "示例输入输出:\n" - "输入: '我想获取基于深度学习的图像识别方面的研究'\n" - "输出: {\"chinese\": [\"基于深度学习的图像识别\"], \"english\": [\"Deep Learning-based Image Recognition\"]}\n" - "输入: '图像识别在深度学习方面的研究'\n" - "输出: {\"chinese\": [\"基于深度学习的图像识别\"], \"english\": [\"Deep Learning-based Image Recognition\"]}\n" - "输入: '自然语言处理模型在文本分类中的应用'\n" - "输出: {\"chinese\": [\"自然语言处理文本分类\"], \"english\": [\"NLP Text Classification\"]}\n" - "输入: '强化学习在自动驾驶决策中的最新进展'\n" - "输出: {\"chinese\": [\"强化学习自动驾驶决策\"], \"english\": [\"Reinforcement Learning for Autonomous Driving Decision-Making\"]}\n" - "输入: '使用图神经网络进行社交网络分析的研究'\n" - "输出: {\"chinese\": [\"图神经网络社交网络分析\"], \"english\": [\"Graph Neural Networks for Social Network Analysis\"]}\n" - "输入: '我想研究深度强化学习在机器人控制中的应用'\n" - "输出: {\"chinese\": [\"深度强化学习机器人控制\"], \"english\": [\"Deep Reinforcement Learning for Robot Control\"]}\n" - f"现在请对输入提取核心主题:\n输入: {text}" - ) + system_prompt = """你是一名科研检索关键词提炼专家,任务是将用户输入的自然语言直接提炼为学术检索关键词。 + 【要求】 + 1. 提炼输入中的核心研究对象、问题、方法或应用场景。 + 2. 用学术化中文表达,避免口语化或宽泛词汇。 + 3. 给出对应英文表达,使用国际学术界常用专业术语。 + 4. 如果输入包含多个研究问题,请分别提炼关键词,每个字段最多 3 个关键词。 + 5. 删除无关修饰词或无检索价值的词。 + 6. 输出严格 JSON 格式,仅包含 `chinese` 和 `english` 字段,值为列表。 + + 【示例】 + 输入: '我想研究深度强化学习在机器人控制中的应用' + 输出: {"chinese": ["深度强化学习", "机器人控制"], "english": ["Deep Reinforcement Learning", "Robot Control"]} + + 输入: '大模型多轮对话迷失的问题及解决方案' + 输出: {"chinese": ["大型语言模型", "多轮对话上下文漂移"], "english": ["Large Language Models", "Context Drift in Multi-turn Dialogue"]} + + 输入: '人工智能幻觉问题及多轮对话迷失的解决方法,包括意图识别工作' + 输出: {"chinese": ["人工智能幻觉", "多轮对话上下文漂移", "意图识别"], "english": ["AI Hallucination", "Context Drift in Multi-turn Dialogue", "Intent Recognition"]} + + 输入: '了解生态系统的能量流动和物种多样性' + 输出: {"chinese": ["生态系统能量流动", "物种多样性"], "english": ["Ecosystem Energy Flow", "Species Diversity"]} + """ + user_prompt=f"""输入:{text} + 请严格输出符合 JSON 格式的核心科研关键词: + """ url = f"{api_info['base_url']}/chat/completions" @@ -68,12 +73,21 @@ def translate_text(text): } payload = { "model": api_info["model"], - "messages": [{"role": "user", "content": prompt}], + "messages": [ + {"role": "system", "content": system_prompt}, + {"role": "user", "content": user_prompt} + ], + "thinking": { + "type": "disabled" + }, "max_output_tokens": 512 } + + + try: - resp = requests.post(url, headers=headers, json=payload, timeout=30) + resp = requests.post(url, headers=headers, json=payload, timeout=60) resp.raise_for_status() result = resp.json() diff --git a/selenium/parseApi/api.py b/selenium/parseApi/api.py index e4a7d0b..9a3b275 100755 --- a/selenium/parseApi/api.py +++ b/selenium/parseApi/api.py @@ -25,6 +25,9 @@ async def call_model_api(prompt): payload = { "model": api_info["model"], "messages": [{"role": "user", "content": prompt}], + "thinking": { + "type": "disabled" + }, "max_output_tokens": 1024 } diff --git a/selenium_django/Dockerfile b/selenium_django/Dockerfile index 6df2474..b31f1f3 100755 --- a/selenium_django/Dockerfile +++ b/selenium_django/Dockerfile @@ -20,11 +20,6 @@ ENV CELERY_BROKER_URL=${CELERY_BROKER_URL:-redis://redis:6379/0} ENV CELERY_RESULT_BACKEND=${CELERY_RESULT_BACKEND:-redis://redis:6379/0} ENV CRAWL_API_URL=${CRAWL_API_URL:-http://47.83.141.164:5001/crawl} -# 在构建时替换 settings.py 中的配置 -RUN sed -i "s#CELERY_BROKER_URL = .*#CELERY_BROKER_URL = '${CELERY_BROKER_URL}'#" selenium_django/settings.py && \ - sed -i "s#CELERY_RESULT_BACKEND = .*#CELERY_RESULT_BACKEND = '${CELERY_RESULT_BACKEND}'#" selenium_django/settings.py && \ - sed -i "s#CRAWL_API_URL = .*#CRAWL_API_URL = '${CRAWL_API_URL}'#" selenium_django/settings.py - # 入口脚本 COPY entrypoint.sh /entrypoint.sh RUN chmod +x /entrypoint.sh diff --git a/selenium_django/api/models.py b/selenium_django/api/models.py index 0067a5e..1c69683 100755 --- a/selenium_django/api/models.py +++ b/selenium_django/api/models.py @@ -1,55 +1,68 @@ -from django.db import models - -# Create your models here. -from django.db import models - -class Task(models.Model): - TASK_STATUS_CHOICES = [ - ('running', '进行中'), - ('idle', '空闲中'), - ('done', '完成'), - ('failed', '失败'), - ] - - EXECUTION_TYPE_CHOICES = [ - ('scheduled', '定期执行'), - ('predefined', '预定时间执行'), - ] - - task_id = models.CharField(max_length=64, unique=True) - name = models.CharField(max_length=200) - description = models.TextField(blank=True, null=True) - last_run_date = models.DateField(null=True, blank=True) - execution_type = models.CharField( - max_length=20, - choices=EXECUTION_TYPE_CHOICES, - blank=True, - null=True - ) - # 一次性执行使用 DateTimeField - execution_time = models.DateTimeField(blank=True, null=True) - # 每天执行使用 TimeField - scheduled_time = models.CharField(max_length=10, blank=True, null=True) # 改为字符串 HH:MM - parse_flag = models.BooleanField(default=False) - limit = models.IntegerField(default=60) # ⭐ 新增的字段,默认60 - status = models.CharField(max_length=20, choices=TASK_STATUS_CHOICES, default='idle') - created_at = models.DateTimeField(auto_now_add=True) - updated_at = models.DateTimeField(auto_now=True) - - def __str__(self): - return self.name -class TaskDetail(models.Model): - task = models.ForeignKey(Task, related_name="details", on_delete=models.CASCADE) - author = models.CharField(max_length=500, blank=True) - date = models.CharField(max_length=100, blank=True, null=True) # 改为字符串 - download = models.IntegerField(blank=True, null=True) - keywords = models.TextField(blank=True) # 存储 ; 分隔的关键字 - original_link = models.URLField(blank=True) - pdf_url = models.URLField(blank=True) - quote = models.TextField(blank=True) - source = models.CharField(max_length=200, blank=True) - site = models.CharField(max_length=200, blank=True) - summary = models.TextField(blank=True) - parsed_summary = models.JSONField(blank=True, null=True) # 存储 JSON - title = models.CharField(max_length=300, blank=True) - created_at = models.DateTimeField(auto_now_add=True) +from django.db import models + +# Create your models here. +from django.db import models + + + +class Task(models.Model): + TASK_STATUS_CHOICES = [ + ('running', '进行中'), + ('queued', '进行中'), + ('idle', '空闲中'), + ('done', '完成'), + ('failed', '失败'), + ] + EXECUTION_TYPE_CHOICES = [ + ('scheduled', '定期执行'), + ('predefined', '预定时间执行'), + ] + + task_id = models.CharField(max_length=64, unique=True) + name = models.CharField(max_length=200) + description = models.TextField(blank=True, null=True) + last_run_date = models.DateField(null=True, blank=True) + execution_type = models.CharField( + max_length=20, + choices=EXECUTION_TYPE_CHOICES, + blank=True, + null=True + ) + # 一次性执行使用 DateTimeField + execution_time = models.DateTimeField(blank=True, null=True) + # 每天执行使用 TimeField + scheduled_time = models.CharField(max_length=10, blank=True, null=True) # 改为字符串 HH:MM + parse_flag = models.BooleanField(default=False) + limit = models.IntegerField(default=60) # ⭐ 新增的字段,默认60 + status = models.CharField(max_length=20, choices=TASK_STATUS_CHOICES, default='idle') + created_at = models.DateTimeField(auto_now_add=True) + updated_at = models.DateTimeField(auto_now=True) + + def __str__(self): + return self.name +class TaskDetail(models.Model): + task = models.ForeignKey(Task, related_name="details", on_delete=models.CASCADE) + author = models.CharField(max_length=500, blank=True) + date = models.CharField(max_length=100, blank=True, null=True) # 改为字符串 + download = models.IntegerField(blank=True, null=True) + keywords = models.TextField(blank=True) # 存储 ; 分隔的关键字 + original_link = models.URLField(blank=True) + pdf_url = models.URLField(blank=True) + quote = models.TextField(blank=True) + source = models.CharField(max_length=200, blank=True) + site = models.CharField(max_length=200, blank=True) + summary = models.TextField(blank=True) + parsed_summary = models.JSONField(blank=True, null=True) # 存储 JSON + title = models.CharField(max_length=300, blank=True) + created_at = models.DateTimeField(auto_now_add=True) + +class CrawlQueue(models.Model): + task = models.ForeignKey(Task, on_delete=models.CASCADE, related_name="queue") + texts = models.TextField() + parse_flag = models.BooleanField(default=True) + limit = models.IntegerField(default=10) + sort_options = models.JSONField(default=list) + status = models.CharField(max_length=20, default="pending") # pending / processing / done / failed + created_at = models.DateTimeField(auto_now_add=True) + updated_at = models.DateTimeField(auto_now=True) + diff --git a/selenium_django/api/scheduler.py b/selenium_django/api/scheduler.py index b33901f..3528311 100755 --- a/selenium_django/api/scheduler.py +++ b/selenium_django/api/scheduler.py @@ -1,104 +1,126 @@ -from apscheduler.schedulers.background import BackgroundScheduler -from apscheduler.triggers.date import DateTrigger -from django.utils import timezone -from datetime import datetime, date -from .models import Task -from .tasks import trigger_task_execution -import logging -logger = logging.getLogger(__name__) -scheduler = BackgroundScheduler(timezone=None) # 使用本地时间 -scheduler_started = False - - -def start_scheduler(): - global scheduler_started - if scheduler_started: - return - scheduler_started = True - - scheduler.start() - logger.info("APScheduler 启动成功") - # 定期检查一次性任务,每30秒 - scheduler.add_job(check_predefined_tasks, 'interval', seconds=30) - - # 定期检查新创建的每日定时任务,每30秒 - scheduler.add_job(sync_scheduled_tasks, 'interval', seconds=30) - -def check_predefined_tasks(): - """检查一次性任务并触发 Celery 异步执行""" - logger.info("检查一次性任务: 开始") - now = datetime.now() # 使用本地时间 - tasks = Task.objects.filter(status='idle', execution_type='predefined') - logger.debug(f"[Predefined] 检查 {len(tasks)} 个一次性任务, 当前时间 {now}") - - for task in tasks: - exec_time = task.execution_time - if not exec_time: - logger.warning(f"Task {task.id} 没有设置 execution_time,跳过") - continue - - # 数据库里已经是本地时间,不需要再做 timezone aware - if exec_time <= now: - try: - # 异步调用 Celery 执行任务,只传 task.id - trigger_task_execution.delay(task.id) - logger.info(f"Task {task.id} 已触发 Celery 异步执行") - - # 更新任务状态为 done,避免重复触发 - task.status = 'done' - task.save(update_fields=['status']) - except Exception as e: - logger.error(f"触发 Task {task.id} 时出错: {e}") - - -def sync_scheduled_tasks(): - """同步每日定时任务到 APScheduler""" - today = date.today() - now = datetime.now() # 本地时间 - tasks = Task.objects.filter(status='idle', execution_type='scheduled') - logger.debug(f"[Scheduled] 检查 {len(tasks)} 个每日任务, 当前时间 {now}") - - for task in tasks: - st = task.scheduled_time - if not st: - continue - - # 解析时间字符串 - try: - scheduled_time_obj = datetime.strptime(st, "%H:%M:%S").time() - except ValueError: - scheduled_time_obj = datetime.strptime(st, "%H:%M").time() - - last_run = task.last_run_date - if last_run != today: - # 直接用本地时间,不再 make_aware - exec_datetime = datetime.combine(today, scheduled_time_obj) - - job_id = f"scheduled_task_{task.id}" - if not scheduler.get_job(job_id): - scheduler.add_job( - run_scheduled_task, - trigger=DateTrigger(run_date=exec_datetime), - id=job_id, - args=[task.id], - replace_existing=True, - misfire_grace_time=1 # 只允许 1 秒的延迟,超过就跳过 - ) - - - -def run_scheduled_task(task_id): - """执行每日定时任务""" - try: - task = Task.objects.get(id=task_id) - except Task.DoesNotExist: - logger.warning(f"[Scheduled] Task {task_id} 不存在") - return - - try: - trigger_task_execution.delay(task.id) - logger.info(f"[Scheduled] Task {task.id} 已触发 Celery 执行") - task.last_run_date = date.today() - task.save(update_fields=['last_run_date']) - except Exception as e: - logger.error(f"[Scheduled] 执行 Task {task.id} 出错: {e}") +from apscheduler.schedulers.background import BackgroundScheduler +from apscheduler.triggers.date import DateTrigger +from django.utils import timezone +from datetime import datetime, date +from .models import Task,CrawlQueue +from .tasks import trigger_task_execution +import logging +logger = logging.getLogger(__name__) +scheduler = BackgroundScheduler(timezone=None) # 使用本地时间 +scheduler_started = False + + +def start_scheduler(): + global scheduler_started + if scheduler_started: + return + scheduler_started = True + + scheduler.start() + logger.info("APScheduler 启动成功") + # 定期检查一次性任务,每30秒 + scheduler.add_job(check_predefined_tasks, 'interval', seconds=30) + + # 定期检查新创建的每日定时任务,每30秒 + scheduler.add_job(sync_scheduled_tasks, 'interval', seconds=30) + +def check_predefined_tasks(): + """检查一次性任务并加入队列""" + logger.info("检查一次性任务: 开始") + now = datetime.now() + tasks = Task.objects.filter(status='idle', execution_type='predefined') + logger.debug(f"[Predefined] 检查 {len(tasks)} 个一次性任务, 当前时间 {now}") + + for task in tasks: + exec_time = task.execution_time + if not exec_time: + logger.warning(f"Task {task.id} 没有设置 execution_time,跳过") + continue + + if exec_time <= now: + try: + # 排队逻辑 + task.status = 'running' # 前端显示为进行中 + task.save(update_fields=['status']) + + CrawlQueue.objects.create( + task=task, + texts=task.description, + parse_flag=task.parse_flag, + limit=task.limit, + sort_options=[], + status="pending" + ) + process_crawl_queue.delay() + + logger.info(f"Task {task.id} 已加入队列") + except Exception as e: + logger.error(f"触发 Task {task.id} 时出错: {e}") + + + + + +def sync_scheduled_tasks(): + """同步每日定时任务到 APScheduler""" + today = date.today() + now = datetime.now() + tasks = Task.objects.filter(status='idle', execution_type='scheduled') + logger.debug(f"[Scheduled] 检查 {len(tasks)} 个每日任务, 当前时间 {now}") + + for task in tasks: + st = task.scheduled_time + if not st: + continue + + # 解析时间字符串 + try: + scheduled_time_obj = datetime.strptime(st, "%H:%M:%S").time() + except ValueError: + scheduled_time_obj = datetime.strptime(st, "%H:%M").time() + + last_run = task.last_run_date + if last_run != today: + exec_datetime = datetime.combine(today, scheduled_time_obj) + job_id = f"scheduled_task_{task.id}" + + if not scheduler.get_job(job_id): + scheduler.add_job( + run_scheduled_task, + trigger=DateTrigger(run_date=exec_datetime), + id=job_id, + args=[task.id], + replace_existing=True, + misfire_grace_time=1 # 只允许 1 秒的延迟,超过就跳过 + ) + + +def run_scheduled_task(task_id): + """执行每日定时任务""" + try: + task = Task.objects.get(id=task_id) + except Task.DoesNotExist: + logger.warning(f"[Scheduled] Task {task_id} 不存在") + return + + try: + # 排队逻辑 + task.status = 'running' + task.save(update_fields=['status']) + + CrawlQueue.objects.create( + task=task, + texts=task.description, + parse_flag=task.parse_flag, + limit=task.limit, + sort_options=[], + status="pending" + ) + process_crawl_queue.delay() + + logger.info(f"[Scheduled] Task {task.id} 已加入队列") + task.last_run_date = date.today() + task.save(update_fields=['last_run_date']) + except Exception as e: + logger.error(f"[Scheduled] 执行 Task {task.id} 出错: {e}") + diff --git a/selenium_django/api/tasks.py b/selenium_django/api/tasks.py index 79b9420..95e086e 100755 --- a/selenium_django/api/tasks.py +++ b/selenium_django/api/tasks.py @@ -2,9 +2,9 @@ import requests from datetime import datetime, date -from django.db import transaction +from django.db import transaction, DatabaseError -from .models import Task, TaskDetail +from .models import Task, TaskDetail,CrawlQueue from django.utils import timezone import threading import time @@ -18,123 +18,135 @@ def safe_dict_get(d, key, default=None): return d.get(key, default) return default -@shared_task(bind=True, max_retries=3, default_retry_delay=60) +@shared_task(bind=True, queue='crawler', max_retries=3, default_retry_delay=60) def trigger_task_execution(self, task_id): - """异步执行单个任务""" - task = None + """接收任务 → 入队等待处理""" try: - # 获取任务 task = Task.objects.get(id=task_id) - task.status = 'running' + # 标记为排队状态 + task.status = 'queued' task.save(update_fields=['status']) - print(f"任务 {task_id} 状态更新为 running") + print(f"任务 {task_id} 状态更新为 queued") - # 爬虫请求 - payload = { - "texts": task.description, - "parse": task.parse_flag, - "limit": task.limit - } + # 将任务存入 CrawlQueue + CrawlQueue.objects.create( + task=task, + texts=task.description, + parse_flag=task.parse_flag, + limit=task.limit, + sort_options=[], + status="pending", + ) + print(f"任务 {task_id} 已加入爬虫队列") - try: - resp = requests.post(CRAWL_API_URL, json=payload, timeout=30000) - resp.raise_for_status() - except requests.RequestException as e: - print(f"Task {task_id} 爬虫请求失败: {e}") - raise self.retry(exc=e) - - # 安全解析 JSON - try: - data = resp.json() - if not isinstance(data, dict): - print(f"Task {task_id} 返回数据不是字典,用空 dict 代替") - data = {} - except ValueError: - print(f"Task {task_id} 返回非 JSON 数据: {resp.text[:200]}") - data = {} - - # code==20000 说明提取失败 - if safe_dict_get(data, "code") == 20000: - print(f"Task {task_id} 爬虫返回 code=20000, message={data.get('message')}") - return {"success": False, "message": data.get("message", "提取不到关键词")} - - # 保存任务详情 - results = safe_dict_get(data, "results", []) - if not isinstance(results, list): - results = [] - - with transaction.atomic(): - for idx, item in enumerate(results, start=1): - if not isinstance(item, dict): - print(f"Task {task_id} results 第 {idx} 个元素不是字典,跳过") - continue - - download_val = item.get("download") or 0 - try: - download_val = int(download_val) - except (ValueError, TypeError): - download_val = 0 - - date_val = str(item.get("date")) if item.get("date") else None - - author_val = item.get("author") - if isinstance(author_val, list): - author_val = ';'.join(author_val) - elif author_val is None: - author_val = '' - - keywords_val = item.get("keywords") - if isinstance(keywords_val, list): - keywords_val = ';'.join(keywords_val) - else: - keywords_val = '' - - pdf_url = item.get("pdfUrl") or '' - parsed_summary = item.get("parsed_summary") or {} - quote_val = item.get("quote") or '' - site_val = item.get("site") or '' - source_val = item.get("source") or '' - summary_val = item.get("summary") or '' - title_val = item.get("title") or '' - original_link = item.get("originalLink") or '' - - # 保存 TaskDetail,单条失败不影响其他条 - try: - TaskDetail.objects.get_or_create( - task=task, - original_link=original_link, - defaults={ - 'author': author_val, - 'date': date_val, - 'download': download_val, - 'keywords': keywords_val, - 'pdf_url': pdf_url, - 'parsed_summary': parsed_summary, - 'quote': quote_val, - 'site': site_val, - 'source': source_val, - 'summary': summary_val, - 'title': title_val - } - ) - print(f"Task {task_id} 保存第 {idx} 条结果成功") - except Exception as e: - print(f"Task {task_id} 保存第 {idx} 条结果失败: {e}") - continue - - # 更新任务状态为 done - task.status = 'done' - task.save(update_fields=['status']) - print(f"任务 {task_id} 执行完成") + # 立即触发队列处理任务 + process_crawl_queue.delay() except Task.DoesNotExist: print(f"Task {task_id} 不存在") except Exception as e: - print(f"Task {task_id} 执行失败: {e}") + print(f"Task {task_id} 入队失败: {e}") + raise self.retry(exc=e) + +@shared_task(bind=True, queue='crawl_worker', max_retries=3, default_retry_delay=60) +def process_crawl_queue(self): + """ + 顺序执行队列任务,确保一个接着一个执行 + """ + item = None + try: + # 获取最早 pending 任务(加锁避免并发) + with transaction.atomic(): + item = ( + CrawlQueue.objects + .select_for_update(skip_locked=True) + .filter(status='pending') + .order_by('created_at') + .first() + ) + if not item: + return "no task" + + # 标记队列和任务状态 + item.status = 'processing' + item.save(update_fields=['status']) + + task = item.task + task.status = 'running' + task.save(update_fields=['status']) + + # 事务之外执行网络请求,减少锁表时间 + payload = { + "texts": item.texts, + "parse": item.parse_flag, + "limit": item.limit, + "sort": item.sort_options + } + print(f"开始请求爬虫 task_id={task.id}") + resp = requests.post(CRAWL_API_URL, json=payload, timeout=300) + resp.raise_for_status() try: - if task: + data = resp.json() + except ValueError: + print(f"Task {task.id} 返回非 JSON 数据: {resp.text[:200]}") + data = {} + + results = data.get("results", []) + if not isinstance(results, list): + results = [] + + # 保存结果,事务保护 + with transaction.atomic(): + for idx, r in enumerate(results, start=1): + TaskDetail.objects.get_or_create( + task=task, + original_link=r.get("originalLink") or "", + defaults={ + "author": ";".join(r.get("author", [])) if isinstance(r.get("author"), list) else (r.get("author") or ""), + "date": str(r.get("date")) if r.get("date") else None, + "download": int(r.get("download") or 0), + "keywords": ";".join(r.get("keywords", [])) if isinstance(r.get("keywords"), list) else (r.get("keywords") or ""), + "pdf_url": r.get("pdfUrl") or "", + "parsed_summary": r.get("parsed_summary") or {}, + "quote": r.get("quote") or "", + "site": r.get("site") or "", + "source": r.get("source") or "", + "summary": r.get("summary") or "", + "title": r.get("title") or "", + } + ) + print(f"Task {task.id} 保存第 {idx} 条结果成功") + + # 标记完成 + with transaction.atomic(): + task.status = 'done' + task.save(update_fields=['status']) + item.status = 'done' + item.save(update_fields=['status']) + print(f"任务 {task.id} 执行完成") + + except requests.RequestException as e: + print(f"网络请求失败 task_id={item.task.id if item else 'N/A'}: {e}") + if item: + with transaction.atomic(): + item.status = 'pending' + item.save(update_fields=['status']) + raise self.retry(exc=e) + + except DatabaseError as e: + print(f"数据库异常 task_id={item.task.id if item else 'N/A'}: {e}") + raise self.retry(exc=e) + + except Exception as e: + print(f"任务执行失败 task_id={item.task.id if item else 'N/A'}: {e}") + if item: + with transaction.atomic(): task.status = 'failed' task.save(update_fields=['status']) - except Exception as e2: - print(f"更新任务失败状态失败: {e2}") - raise self.retry(exc=e) \ No newline at end of file + item.status = 'failed' + item.save(update_fields=['status']) + raise self.retry(exc=e) + + finally: + # 触发下一个队列任务 + process_crawl_queue.apply_async(countdown=1) \ No newline at end of file diff --git a/selenium_django/api/views.py b/selenium_django/api/views.py index c63d405..d65661a 100755 --- a/selenium_django/api/views.py +++ b/selenium_django/api/views.py @@ -10,13 +10,21 @@ from django_filters.rest_framework import DjangoFilterBackend # Create your views here. from rest_framework import viewsets, filters from rest_framework.pagination import PageNumberPagination -from .models import Task, TaskDetail +from .models import Task, TaskDetail,CrawlQueue from .serializers import TaskSerializer, TaskDetailSerializer, TaskListSerializer from rest_framework.decorators import action from rest_framework.response import Response from rest_framework import status -from .tasks import trigger_task_execution +from .tasks import trigger_task_execution,process_crawl_queue import threading +import logging +logger = logging.getLogger(__name__) + + +print(f'----------chat----------init---------') + + + # 分页设置 class StandardResultsSetPagination(PageNumberPagination): page_size = 10 @@ -36,6 +44,7 @@ def sync_stream(generator): # 获取异步生成器的下一条数据 chunk = loop.run_until_complete(async_gen.__anext__()) if chunk and chunk.strip(): + print(chunk) yield chunk except StopAsyncIteration: break @@ -52,6 +61,9 @@ async def call_model_stream(messages): "model": api_info["model"], "messages": messages, "max_output_tokens": 1024, + "thinking": { + "type": "disabled" + }, "stream": True } @@ -77,6 +89,12 @@ class TaskViewSet(viewsets.ModelViewSet): ordering_fields = ['created_at', 'updated_at'] def get_serializer_class(self): + + + print(f'----------get_serializer_class-------------------') + print(f'1111111111') + + if self.action == 'list': return TaskListSerializer # list 返回简化字段 return TaskSerializer # retrieve 返回完整字段,含 details @@ -86,14 +104,26 @@ class TaskViewSet(viewsets.ModelViewSet): task = self.get_object() try: - # 异步触发 Celery 任务 - async_result = trigger_task_execution.delay(task.id) - - # 直接返回任务已触发,不访问 async_result 的内容 + # 标记任务为排队状态(前端显示“进行中”) + task.status = 'running' # 前端仍然可理解为“进行中” + task.save(update_fields=['status']) + + # 创建队列记录 + CrawlQueue.objects.create( + task=task, + texts=task.description, + parse_flag=task.parse_flag, + limit=task.limit, + sort_options=[], + status="pending" + ) + + # 触发队列处理任务(异步,单 worker 串行执行) + process_crawl_queue.delay() + return Response({ "success": True, - "task_id": async_result.id, - "message": f"任务 {task.id} 已触发" + "message": f"任务 {task.id} 已加入队列" }, status=status.HTTP_200_OK) except Exception as e: @@ -104,12 +134,23 @@ class TaskViewSet(viewsets.ModelViewSet): @action(detail=True, methods=['post']) def chat(self, request, pk=None): + + print(f'----------chat-------------------') + print(f'222222222222222') + task = self.get_object() user_question = request.data.get("question", "") + + + print(f'----chat--------------user_question={user_question}--------------') + if not user_question: return Response({"success": False, "message": "question 参数不能为空"}, status=400) # 构造结构化文档 + + print(f'----chat--------------task={task}--------------') + all_docs = TaskDetail.objects.filter(task=task) all_docs_list = [] for doc in all_docs: @@ -124,6 +165,9 @@ class TaskViewSet(viewsets.ModelViewSet): "keywords": doc.keywords or "" }) all_docs_json = json.dumps(all_docs_list, ensure_ascii=False) + + + print(f'----chat--------------all_docs_json={all_docs_json}--------------') SYSTEM_PROMPT = """ 你是专业文献问答助手。请严格根据提供的任务文档回答用户问题。 @@ -144,6 +188,9 @@ class TaskViewSet(viewsets.ModelViewSet): # 使用 Django 的 StreamingHttpResponse 返回 response = StreamingHttpResponse(sync_stream(call_model_stream(messages)), content_type="text/event-stream") + + print(f'----chat--------------666666666--------------') + return response from rest_framework import status from rest_framework.response import Response @@ -156,6 +203,11 @@ class TaskDetailViewSet(viewsets.ModelViewSet): search_fields = ['title', 'author', 'site'] def get_queryset(self): + + + print(f'----------get_queryset-------------------') + print(f'33333333333333') + queryset = super().get_queryset() task_id = self.request.query_params.get('task') if task_id and task_id.isdigit(): diff --git a/selenium_django/db.sqlite3 b/selenium_django/db.sqlite3 index 55def6fd201cbf71cedbab538d2ff6dabedfb072..769b69c352582204ec3f865a351ad207f7aef4bb 100755 GIT binary patch delta 313673 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 Ccv0NoL_4Gt*>*4}SR(ZNg!B=zeBOoc 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 - - - + \ No newline at end of file diff --git a/selenium_vue/frontend-vite/src/api/config.js b/selenium_vue/frontend-vite/src/api/config.js index d152ee8..69b4e5b 100755 --- a/selenium_vue/frontend-vite/src/api/config.js +++ b/selenium_vue/frontend-vite/src/api/config.js @@ -1,49 +1,56 @@ +// src/config/API_CONFIG.ts + // API配置 - 支持环境变量参数化 export const API_CONFIG = { - // 从环境变量获取API基础URL,如果没有则使用默认值 - BASE_URL: import.meta.env.VITE_API_BASE_URL || 'http://localhost:8000/api', - CRAWL_URL: import.meta.env.VITE_CRAWL_API_URL || 'http://localhost:5000', - + // 访问宿主机映射端口,不要用 Docker 服务名 + BASE_URL: import.meta.env.VITE_API_BASE_URL + ? import.meta.env.VITE_API_BASE_URL.replace(/\/$/, "") // 不再拼 /api + : "http://47.83.141.164:8002/api", // 默认远程服务器 API 根路径 + + CRAWL_URL: import.meta.env.VITE_CRAWL_URL + ? import.meta.env.VITE_CRAWL_URL.replace(/\/$/, "") + : "http://47.83.141.164:5001/crawl", // 默认远程爬虫服务 + // 超时配置 TIMEOUT: { DEFAULT: 3600000, // 60分钟 CRAWL: 120000, // 2分钟 }, - + // 请求头配置 HEADERS: { - 'Content-Type': 'application/json', + "Content-Type": "application/json", }, -} +}; // 动态配置设置(支持运行时修改) export const settings = { get baseUrl() { - return localStorage.getItem('api_base_url') || API_CONFIG.BASE_URL + return localStorage.getItem("api_base_url") || API_CONFIG.BASE_URL; }, set baseUrl(v) { - localStorage.setItem('api_base_url', (v || '').replace(/\/$/, '')) + localStorage.setItem("api_base_url", (v || "").replace(/\/$/, "")); }, - + get crawlUrl() { - return localStorage.getItem('crawl_url') || API_CONFIG.CRAWL_URL + return localStorage.getItem("crawl_url") || API_CONFIG.CRAWL_URL; }, set crawlUrl(v) { - localStorage.setItem('crawl_url', (v || '').replace(/\/$/, '')) + localStorage.setItem("crawl_url", (v || "").replace(/\/$/, "")); }, -} +}; -// 获取当前环境信息 +// 获取当前环境信息(调试用) export const getEnvironmentInfo = () => ({ NODE_ENV: import.meta.env.NODE_ENV, BASE_URL: import.meta.env.BASE_URL, API_BASE_URL: import.meta.env.VITE_API_BASE_URL, - CRAWL_API_URL: import.meta.env.VITE_CRAWL_API_URL, + CRAWL_API_URL: import.meta.env.VITE_CRAWL_URL, currentBaseUrl: settings.baseUrl, currentCrawlUrl: settings.crawlUrl, -}) +}); // 开发环境调试信息 if (import.meta.env.DEV) { - console.log('🔧 API Configuration:', getEnvironmentInfo()) + console.log("🔧 API Configuration:", getEnvironmentInfo()); } diff --git a/selenium_vue/frontend-vite/src/views/Tasks.vue b/selenium_vue/frontend-vite/src/views/Tasks.vue index bd24516..4a4ef0b 100755 --- a/selenium_vue/frontend-vite/src/views/Tasks.vue +++ b/selenium_vue/frontend-vite/src/views/Tasks.vue @@ -80,7 +80,7 @@
{{ it.name || '未命名任务' }}
- {{ statusText(it.status) }} + {{ statusText(it.status, it.id) }}
{{ it.task_id || '(无ID)' }}
{{ it.description || '(无描述)' }}
@@ -481,9 +481,14 @@ function statusPill(s){ const c = color[s] || '#6b7280' return { background:bg, color:c, padding:'4px 10px', borderRadius:'999px', fontWeight:'600', fontSize:'12px' } } -function statusText(s){ +function statusText(s, id){ + const local = localStatusMap.value[id] + if (local === 'running') return '运行中' // ✅ 强制运行中 + if (local === 'done') return '完成' + if (local === 'failed') return '失败' const map = { running:'运行中', + queued:'运行中', idle:'空闲中', done:'完成', failed:'失败', @@ -601,14 +606,14 @@ async function runTasksConcurrently(tasks) { await fetchTasks() } +const localStatusMap = ref({}) // { [taskId]: 'running' | 'done' | null } // 手动运行任务 async function runNow(task) { // 防重复点击 if (runningIds.value.has(task.id)) return runningIds.value.add(task.id) - - // 前端立即显示运行中状态 - task.status = 'running' + localStatusMap.value[task.id] = 'running' // ✅ 强制锁定为运行中 + // 不立即调用 fetchTasks,避免被后端数据覆盖 try { @@ -650,6 +655,7 @@ async function runNow(task) { console.log(`任务 ${task.id} 达到终止状态: ${currentTask.status},停止轮询`) clearInterval(interval) runningIds.value.delete(task.id) + localStatusMap.value[task.id] = data.status // ✅ 解锁并设置为最终状态 } } else { console.error(`轮询中未找到任务 ${task.id}`)