本工作流用于每日自动抓取、筛选并整理 Arxiv 上 AI for Science(尤其是 AI for Materials)方向的论文,并生成中文报告上传至飞书。
每日执行以下步骤:
- 读取配置文件
- 构造 arXiv 查询语句
- 抓取论文元数据(增量 + 时间窗口)
- 数据清洗与去重
- 规则过滤(初筛)
- LLM评分(精筛)
- 选出Top论文
- 生成中文报告
- 上传飞书文档
- 更新状态文件
所有持久化文件必须写入 workspace/arxiv_daily/ 临时文件(如中间缓存)可以使用 /tmp/
arxiv_daily/
├── config.yaml # 配置文件
├── config_private.yaml # 隐私信息配置文件
├── main.py # 主流程入口
├── fetch.py # 抓取模块
├── filter.py # 规则过滤
├── rank.py # LLM评分
├── report.py # 报告生成
├── feishu.py # 飞书上传
├── data/
│ ├── raw/ # 原始抓取数据
│ ├── processed/ # 清洗后数据
│ └── state.json # 状态记录(非常重要)
├── logs/
│ ├── run.log
│ └── error.log
└── outputs/
│ └── report_YYYYMMDD.md
keywords:
- "AI for science"
- "scientific machine learning"
- "machine learning for materials"
- "materials discovery"
- "inverse design"
- "physics-informed neural networks"
- "foundation model for science"
- "computational materials"
- "molecular modeling machine learning"
categories:
- cs.LG
- cs.AI
- stat.ML
- cond-mat
- physics.comp-ph
- math.NA
query_max_results: 500
time_window_days: 30
filters:
- materials
- material
- molecule
- protein
- physics
- simulation
- PDE
- quantum
- science
llm:
temperature: 0
top_k: 3构造统一查询表达式(使用配置文件中keywords和categories项):
((ti:"keyword1" OR abs:"keyword1") OR (ti:"keyword2" OR abs:"keyword2") OR ...) AND (cat:cs.LG OR cat:cs.AI OR ...)
使用http://export.arxiv.org/api/query?search_query=... api 格式进行搜索。
必须满足:
submittedDate \in [today - time_window_days, today](使用配置文件中的time_window_days项)
- sortBy=submittedDate
- sortOrder=descending
编写fetch.py脚本爬取论文,爬取数量根据配置文件中query_max_results项决定。
使用 arXiv Query API 并添加 User-Agent:
OpenClaw-Arxiv-Agent ([email protected])
- 请求间隔 ≥ 3秒
- 分页获取
- 单次 max_results ≤ 100
- 最大重试次数:3
- 间隔:指数退避(1s, 3s, 9s)
- 失败写入 logs/error.log
state.json 结构:
{
"last_fetch_time": "...", # 上一次成功抓取论文的时间
"last_success_time": "...", # 上一次成功生成报告的时间
"last_processed_papers": "...", # 上一次LLM筛选前通过数据清洗的论文列表,对应的json文件路径
"top_paper_ids": [], # 时间窗口内被筛选出的优秀论文id
"last_removed_ids": [], # 超过时间窗口被删除的旧论文id
}执行逻辑:
- 读取 last_success_time
- 抓取时间 > last_success_time 的论文
- 读取 last_processed_papers 对应文件,将历史论文信息与本次抓取结果进行合并
- 删除超过时间窗口的旧论文(避免待评价论文无限膨胀)
- 得到本次待数据清洗论文列表
每篇论文必须包含:
- arxiv_id
- title
- authors
- abstract(必须完整,不允许截断)
- submittedDate
- categories
去重规则:
- 唯一键 = arxiv_id
- 重复论文只保留一份
保留满足以下条件的论文:
标题或摘要包含配置文件中filter项的关键词
abstract长度 ≥ 200字符
排除已经出现在历史top k中的优秀论文
历史Top论文ID存储在:
data/state.json → top_paper_ids
每次选出Top K后更新该列表(仅保留时间窗口内的论文)
逐篇评分(禁止批量评分)
每个维度 0-10 分:
定义:是否属于 AI for Science
评分标准:
- 0-3:无关
- 部分相关
- 明显相关
- 核心领域
定义:是否提出新方法/新问题
评分标准:
- 0-3:已有方法应用
- 4-6:小改进
- 7-8:明显创新
- 9-10:新范式
定义:方法复杂性、理论深度
评分标准:
- 0-3:浅层应用
- 4-6:中等
- 7-8:较深
- 9-10:高深理论/系统
定义:对科研/工业潜在价值
评分标准:
- 0-3:有限
- 4-6:一般
- 7-8:较大
- 9-10:可能重要突破
请根据以下论文信息进行评分:
标题:
{title}
摘要:
{abstract}
请按照以下标准评分(0-10分):
1. Relevance:
定义:是否属于 AI for Science
评分标准:
+ 0-3:无关
+ 部分相关
+ 明显相关
+ 核心领域
2. Novelty
定义:是否提出新方法/新问题
评分标准:
+ 0-3:已有方法应用
+ 4-6:小改进
+ 7-8:明显创新
+ 9-10:新范式
3. Technical Depth
定义:方法复杂性、理论深度
评分标准:
+ 0-3:浅层应用
+ 4-6:中等
+ 7-8:较深
+ 9-10:高深理论/系统
4. Potential Impact
定义:对科研/工业潜在价值
评分标准:
+ 0-3:有限
+ 4-6:一般
+ 7-8:较大
+ 9-10:可能重要突破
请严格输出JSON,不要包含任何额外内容:
{
"relevance": int,
"novelty": int,
"technical_depth": int,
"impact": int,
"reason": "不超过100字"
}final_score = 0.3*relevance + 0.3*novelty + 0.2*technical_depth + 0.2*impact
若LLM失败:
- 重试 2 次
- 仍失败 → 使用默认分数:
{
"relevance": 5,
"novelty": 5,
"technical_depth": 5,
"impact": 5,
"reason": "LLM Error. 使用默认分数"
}按 final_score 排序
取前 top_k(从配置文件中读取数量)
输出 Markdown 文件:
outputs/report_YYYYMMDD.md
报告结构(必须严格遵守):
# Arxiv Daily Report (YYYY-MM-DD)
## 1. 今日概览
- 抓取论文数:
- 过滤后:
- 评分后:
- 推荐论文数:
---
## 2. 推荐论文
### 1. 标题
- Authors:
- Date:
- Link: https://arxiv.org/abs/{id}
#### 英文摘要
#### 中文摘要
(完整翻译)
#### 评价
(根据评分reason得到)
#### 评分
- Relevance:
- Novelty:
- Technical Depth:
- Impact:
- Final Score:其中从英文翻译得到的中文摘要可以调用LLM工具进行翻译,Prompt模板:
请将以下标题为《$Title》的英文论文摘要翻译成中文:
$Abstract在执行前:复习 create_doc 工具使用方法
要求:
- 存放在飞书云盘 arxiv_daily 文件夹中(如果不存在新建一个)
- 文档标题:Arxiv Daily YYYY-MM-DD
内容:Markdown全文
上传成功后记录日志
使用 openclaw 定时任务在北京时间 08:00 执行
记录:
- 每一步开始/结束
- 处理论文数量
记录:
- API失败
- LLM失败
- 上传失败
任一模块失败:
- 写 error.log
- 不中断整体流程(尽可能继续)
- 禁止硬编码关键词和分类(必须来自config.yaml)
- 禁止超过 arXiv API 限速
- 禁止截断 abstract
- LLM调用必须结构化输出JSON
- 所有文件必须写入 arxiv_daily 目录
- 每次执行必须更新 state.json
- 生成高质量论文推荐
- 中文科研报告
- 自动上传飞书
- 可持续每日运行