8
n8n 中文网amn8n.com

自动化学术论文监控,含PDF向量、GPT-3.5和Slack提醒

中级

这是一个Personal Productivity, Multimodal AI领域的自动化工作流,包含 10 个节点。主要使用 Set, Code, Slack, OpenAi, EmailSend 等节点。 自动化学术论文监控,含PDF向量、GPT-3.5和Slack提醒

前置要求
  • Slack Bot Token 或 Webhook URL
  • OpenAI API Key
工作流预览
可视化展示节点连接关系,支持缩放和平移
导出工作流
复制以下 JSON 配置到 n8n 导入,即可使用此工作流
{
  "meta": {
    "instanceId": "placeholder"
  },
  "nodes": [
    {
      "id": "config-note",
      "name": "机器人配置",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        250,
        150
      ],
      "parameters": {
        "content": "## 论文监控机器人"
      },
      "typeVersion": 1
    },
    {
      "id": "schedule-trigger",
      "name": "每日计划",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        450,
        300
      ],
      "parameters": {
        "rule": {
          "interval": [
            {
              "field": "hours",
              "hoursInterval": 24,
              "triggerAtHour": 9
            }
          ]
        }
      },
      "typeVersion": 1
    },
    {
      "id": "set-params",
      "name": "设置搜索参数",
      "type": "n8n-nodes-base.set",
      "position": [
        650,
        300
      ],
      "parameters": {
        "values": {
          "number": [
            {
              "name": "daysBack",
              "value": 1
            }
          ],
          "string": [
            {
              "name": "searchQueries",
              "value": "machine learning,neural networks,computer vision,deep learning"
            }
          ]
        }
      },
      "typeVersion": 1
    },
    {
      "id": "split-queries",
      "name": "拆分查询",
      "type": "n8n-nodes-base.code",
      "position": [
        850,
        300
      ],
      "parameters": {
        "functionCode": "const queries = $json.searchQueries.split(',').map(q => q.trim());\nreturn queries.map(query => ({ query }));"
      },
      "typeVersion": 1
    },
    {
      "id": "pdfvector-search",
      "name": "PDF向量 - 搜索新论文",
      "type": "n8n-nodes-pdfvector.pdfVector",
      "position": [
        1050,
        300
      ],
      "parameters": {
        "limit": 10,
        "query": "={{ $json.query }}",
        "fields": [
          "title",
          "authors",
          "abstract",
          "date",
          "doi",
          "pdfUrl",
          "totalCitations"
        ],
        "resource": "academic",
        "yearFrom": "={{ new Date().getFullYear() }}",
        "operation": "search",
        "providers": [
          "arxiv",
          "pubmed",
          "semantic_scholar"
        ]
      },
      "typeVersion": 1
    },
    {
      "id": "filter-recent",
      "name": "筛选近期论文",
      "type": "n8n-nodes-base.code",
      "position": [
        1250,
        300
      ],
      "parameters": {
        "functionCode": "// Filter papers from last N days\nconst daysBack = $node['Set Search Parameters'].json.daysBack;\nconst cutoffDate = new Date();\ncutoffDate.setDate(cutoffDate.getDate() - daysBack);\n\nconst recentPapers = $json.filter(paper => {\n  const paperDate = new Date(paper.date);\n  return paperDate >= cutoffDate;\n});\n\nreturn recentPapers.length > 0 ? recentPapers : [];"
      },
      "typeVersion": 1
    },
    {
      "id": "summarize-paper",
      "name": "生成摘要",
      "type": "n8n-nodes-base.openAi",
      "position": [
        1450,
        300
      ],
      "parameters": {
        "model": "gpt-3.5-turbo",
        "messages": {
          "values": [
            {
              "content": "Summarize this research paper in 2-3 sentences:\n\nTitle: {{ $json.title }}\nAuthors: {{ $json.authors.join(', ') }}\nAbstract: {{ $json.abstract }}\n\nFocus on the main contribution and findings."
            }
          ]
        }
      },
      "typeVersion": 1
    },
    {
      "id": "format-digest",
      "name": "格式化简报",
      "type": "n8n-nodes-base.code",
      "position": [
        1650,
        300
      ],
      "parameters": {
        "functionCode": "// Format papers for notification\nconst papers = $items().map(item => {\n  const paper = item.json;\n  return {\n    title: paper.title,\n    authors: paper.authors.slice(0, 3).join(', ') + (paper.authors.length > 3 ? ' et al.' : ''),\n    summary: paper.summary,\n    link: paper.doi ? `https://doi.org/${paper.doi}` : paper.url,\n    citations: paper.totalCitations || 0,\n    query: paper.originalQuery\n  };\n});\n\n// Group by query\nconst grouped = papers.reduce((acc, paper) => {\n  if (!acc[paper.query]) acc[paper.query] = [];\n  acc[paper.query].push(paper);\n  return acc;\n}, {});\n\nreturn { papers: grouped, totalCount: papers.length, date: new Date().toISOString() };"
      },
      "typeVersion": 1
    },
    {
      "id": "slack-notify",
      "name": "发送Slack提醒",
      "type": "n8n-nodes-base.slack",
      "position": [
        1850,
        300
      ],
      "parameters": {
        "channel": "#research-alerts",
        "message": "=📚 *Daily Research Digest* - {{ $now.format('MMM DD, YYYY') }}\n\nFound {{ $json.totalCount }} new papers:\n\n{{ Object.entries($json.papers).map(([query, papers]) => `*${query}:*\\n${papers.map(p => `• ${p.title}\\n  _${p.authors}_\\n  ${p.summary}\\n  🔗 ${p.link}`).join('\\n\\n')}`).join('\\n\\n---\\n\\n') }}",
        "attachments": []
      },
      "typeVersion": 1
    },
    {
      "id": "email-digest",
      "name": "邮件简报",
      "type": "n8n-nodes-base.emailSend",
      "position": [
        1850,
        450
      ],
      "parameters": {
        "html": "=<h2>Daily Research Digest</h2>\n<p>Found {{ $json.totalCount }} new papers</p>\n\n{{ Object.entries($json.papers).map(([query, papers]) => \n  `<h3>${query}</h3>\n  ${papers.map(p => \n    `<div style=\"margin-bottom: 20px;\">\n      <h4>${p.title}</h4>\n      <p><em>${p.authors}</em></p>\n      <p>${p.summary}</p>\n      <p><a href=\"${p.link}\">Read Paper</a> | Citations: ${p.citations}</p>\n    </div>`\n  ).join('')}`\n).join('\\n') }}",
        "subject": "=Daily Research Digest - {{ $now.format('MMM DD, YYYY') }}",
        "toEmail": "research-team@company.com"
      },
      "typeVersion": 1
    }
  ],
  "connections": {
    "Format Digest": {
      "main": [
        [
          {
            "node": "Send Slack Alert",
            "type": "main",
            "index": 0
          },
          {
            "node": "Email Digest",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Split Queries": {
      "main": [
        [
          {
            "node": "PDF Vector - Search New Papers",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Daily Schedule": {
      "main": [
        [
          {
            "node": "Set Search Parameters",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Generate Summary": {
      "main": [
        [
          {
            "node": "Format Digest",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Filter Recent Papers": {
      "main": [
        [
          {
            "node": "Generate Summary",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Set Search Parameters": {
      "main": [
        [
          {
            "node": "Split Queries",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "PDF Vector - Search New Papers": {
      "main": [
        [
          {
            "node": "Filter Recent Papers",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}
常见问题

如何使用这个工作流?

复制上方的 JSON 配置代码,在您的 n8n 实例中创建新工作流并选择「从 JSON 导入」,粘贴配置后根据需要修改凭证设置即可。

这个工作流适合什么场景?

中级 - 个人效率, 多模态 AI

需要付费吗?

本工作流完全免费,您可以直接导入使用。但请注意,工作流中使用的第三方服务(如 OpenAI API)可能需要您自行付费。

工作流信息
难度等级
中级
节点数量10
分类2
节点类型8
难度说明

适合有一定经验的用户,包含 6-15 个节点的中等复杂度工作流

作者
PDF Vector

PDF Vector

@pdfvector

A fully featured PDF APIs for developers - Parse any PDF or Word document, extract structured data, and access millions of academic papers - all through simple APIs.

外部链接
在 n8n.io 查看

分享此工作流