| name | fetch-arxiv-to-lexiang |
| description | 从 arXiv 抓取最新 AI 论文,精选 8-12 篇有价值论文,生成中英文摘要,下载原文 PDF,并上传到腾讯乐享知识库。支持通过定时任务自动执行,也可手动触发。 |
| description_zh | 抓取 arXiv 论文并归档到乐享知识库 |
| description_en | Fetch arXiv AI papers and archive to Tencent Lexiang knowledge base |
| version | 1.0.0 |
| homepage | https://github.com/ajaxhe/fetch-arxiv-to-lexiang |
arXiv AI 论文每日精选 → 乐享知识库
从 arXiv cs.AI 板块抓取最新论文,精选有价值的论文并生成结构化摘要,上传到腾讯乐享知识库归档。
触发条件
当以下信号出现时执行:
- 用户说"抓取今天的论文"、"今日论文"、"arxiv 精选"等
- 被 openclaw 定时任务调用
- 在其他 IM 中手动触发(如"执行 arxiv-daily")
输出产物
执行完成后,skill 产出以下内容:
| 产物 | 路径/位置 | 说明 |
|---|
| 摘要 Markdown | /tmp/arxiv-daily/YYYY-MM-DD/arxiv_daily_digest.md | 结构化论文摘要(含概览表格 + 详情) |
| 论文 PDF | /tmp/arxiv-daily/YYYY-MM-DD/*.pdf | 精选论文的原文 PDF |
| 乐享知识库条目 | arXiv最新AI论文 / YYYY-MM-DD / | 摘要和论文 PDF 均上传到乐享知识库 |
/tmp/arxiv-daily/ 为临时工作目录,每次执行前清理当天目录。
工作流程
Step 1:抓取论文列表
从 arXiv cs.AI recent 页面获取最新论文:
bash scripts/fetch_arxiv.sh
脚本会:
- 抓取
https://arxiv.org/list/cs.AI/recent 页面
- 提取论文 ID、标题、作者、摘要链接
- 输出 JSON 格式的论文列表到 stdout
也可使用 web_fetch 工具直接获取页面内容:
url: https://arxiv.org/list/cs.AI/recent
fetchInfo: "提取页面中所有论文条目,包括:论文ID(arXiv ID)、标题、作者列表、摘要页链接。以结构化格式输出。"
Step 2:精选论文
从抓取的论文列表中,精选 8-12 篇有价值的论文。
优先级排序:
- 顶会论文:ICLR, NeurIPS, ICML, ACL, EMNLP, CVPR, ICCV, AAAI, IJCAI 等
- 热门方向:
- Agent / Multi-Agent / Tool Use
- LLM(大语言模型训练、推理优化)
- RAG(检索增强生成)
- Reasoning(推理、CoT、规划)
- Multimodal(多模态、视觉语言模型)
- Code Generation(代码生成)
- RLHF / Alignment(对齐、安全)
- 知名机构:OpenAI, Google DeepMind, Anthropic, Meta FAIR, Microsoft Research 等
- 高引用/高关注:摘要中提及 SOTA、显著改进等
淘汰规则:
- 跳过纯数学理论、非 AI 核心的交叉学科论文
- 跳过 workshop 版本(如已有正式版)
- 跳过仅针对特定小语种/极小众数据集的论文
Step 3:获取论文详情并下载 PDF
对每篇精选论文:
- 获取完整摘要:访问
https://arxiv.org/abs/{paper_id} 获取英文摘要
- 翻译摘要:将英文摘要翻译为中文
- 识别方向标签:归类到 Agent / LLM / RAG / Reasoning / Multimodal / Code / Alignment / Other
- 下载 PDF:从
https://arxiv.org/pdf/{paper_id}.pdf 下载论文原文
TODAY=$(date +%Y-%m-%d)
WORK_DIR="/tmp/arxiv-daily/$TODAY"
mkdir -p "$WORK_DIR"
curl -L -o "$WORK_DIR/{paper_id}.pdf" "https://arxiv.org/pdf/{paper_id}.pdf"
Step 4:生成摘要 Markdown
将精选论文整理成结构化的 Markdown 文档,保存到 $WORK_DIR/arxiv_daily_digest.md。
格式模板:
# arXiv AI 论文每日精选 - YYYY-MM-DD
> 从 arXiv cs.AI 板块精选 N 篇最新论文
## 概览
| # | 标题 | 方向 | 亮点 |
|---|------|------|------|
| 1 | [论文标题](https://arxiv.org/abs/xxxx.xxxxx) | Agent | 一句话亮点 |
| 2 | [论文标题](https://arxiv.org/abs/xxxx.xxxxx) | LLM | 一句话亮点 |
| ... | ... | ... | ... |
## 标签分布
- Agent: N 篇
- LLM: N 篇
- RAG: N 篇
- ...
---
## 详细信息
### 1. 论文中文标题
**原标题**: English Title
**作者**: Author1, Author2, ...
**机构**: Institution
**arXiv ID**: xxxx.xxxxx
**方向**: Agent
**中文摘要**:
中文翻译的摘要内容...
**创新点**:
- 创新点1
- 创新点2
**链接**: [论文](https://arxiv.org/abs/xxxx.xxxxx) | [PDF](https://arxiv.org/pdf/xxxx.xxxxx.pdf)
---
### 2. 下一篇论文...
Step 5:上传到乐享知识库
将摘要和论文 PDF 上传到乐享知识库的指定位置。
配置文件与初始化
本 skill 的目标知识库等信息通过配置文件管理,不在 SKILL.md 中硬编码。
配置文件路径:config.json(位于 skill 根目录,即与本 SKILL.md 同级)
对话式配置初始化(首次使用时自动触发)
当 config.json 中 _initialized 为 false 或 space_id 为空时,在执行任何乐享操作前,必须先通过对话引导用户完成配置。
核心设计:用户只需要粘贴一个乐享知识库链接,Agent 自动完成所有配置。
链接格式:https://<domain>/spaces/<space_id>?company_from=<company_from>
流程如下:
第一步:检测 MCP 连接
- 尝试调用任意一个 lexiang MCP 工具(如
whoami)检测 MCP 是否已连接
- 如果调用成功 → MCP 已连接,进入第二步
- 如果调用失败(MCP 未连接)→ 引导用户完成 MCP 鉴权:
⚠️ 乐享 MCP 尚未连接。请先完成鉴权配置:
1. 访问 https://lexiangla.com/mcp 登录后获取 COMPANY_FROM 和 LEXIANG_TOKEN
2. 按照你使用的 Agent 配置 MCP 连接:
- CodeBuddy:在 MCP 管理面板中添加 lexiang server
- OpenClaw:运行 claw install https://github.com/tencent-lexiang/lexiang-mcp-skill
- 其他 Agent:在 MCP 配置文件中添加 lexiang server
3. 完成后告诉我,我会继续配置流程。
不要继续后续步骤,等待用户完成 MCP 连接后重试。
第二步:请求用户提供知识库链接
- 向用户发送引导消息:
🔧 首次使用,需要配置目标知识库。
请粘贴你想用来归档论文的乐享知识库链接,格式如:
https://lexiangla.com/spaces/xxxxx?company_from=yyyyy
💡 获取方式:在乐享中打开目标知识库,复制浏览器地址栏中的链接即可。
- 等待用户输入,不要自行猜测或列举知识库
第三步:解析链接并验证
- 从用户提供的链接中用正则解析出三个字段:
- domain:链接的域名部分(如
lexiangla.com)
- space_id:
/spaces/ 后面的路径段
- company_from:
company_from= 参数值
- 如果链接格式不正确(缺少
space_id 或 company_from)→ 提示用户重新粘贴正确的链接
- 调用
space_describe_space(参数:space_id=<解析出的 space_id>)验证知识库是否存在
- 如果验证失败 → 提示用户检查链接是否正确或是否有该知识库的访问权限
第四步:写入配置并确认
- 将解析和验证得到的信息写入
config.json
- 向用户确认配置结果
重新配置
当用户说「重新配置知识库」等类似意图时:将 config.json 中 _initialized 设为 false,重新执行初始化流程。
用户输入容错
| 用户输入 | 处理方式 |
|---|
完整链接 https://lexiangla.com/spaces/xxx?company_from=yyy | 直接解析 ✅ |
| 不带 company_from 的链接 | 提示补充 company_from 参数 |
| 纯 space_id | 提示提供完整链接 |
页面链接 https://lexiangla.com/pages/xxx | 提示提供知识库链接而非页面链接 |
配置结构
{
"_initialized": false,
"lexiang": {
"target_space": {
"space_id": "",
"space_name": "",
"company_from": ""
},
"access_domain": {
"domain": "lexiangla.com",
"page_url_template": "https://lexiangla.com/pages/{entry_id}?company_from={company_from}",
"space_url_template": "https://lexiangla.com/spaces/{space_id}?company_from={company_from}"
}
}
}
access_domain 会从用户粘贴的链接中自动提取域名,无需手动配置。
后续文档中所有 <SPACE_ID>、<COMPANY_FROM> 等占位符,均指从 config.json 中读取的实际值。
乐享 MCP 工具的调用方式(重要 — 多 Agent 适配)
本 skill 需要服务多个 Agent 产品(OpenClaw、CodeBuddy、Claude Desktop 等)。不同 Agent 连接乐享 MCP 的方式不同,但暴露的工具名称和参数完全一致(都是 lexiang MCP server 提供的标准工具)。
核心原则:本 skill 只描述「调用哪个工具 + 传什么参数」,不规定具体的 MCP 调用语法。每个 Agent 按自己的方式调用即可。
MCP 连接检测与 Token 刷新:
在执行乐享操作前,必须先检测 lexiang MCP 是否已连接:
- 读取
config.json,检查 _initialized 和 lexiang.target_space.space_id
- 如果未初始化 → 先触发对话式配置初始化
- 如果已初始化,尝试调用
space_describe_space(参数:space_id=<config 中的 space_id>)验证 MCP 连接
- 如果调用成功 → MCP 已连接,继续后续流程
- 如果调用失败 → 检查是否为 Token 过期错误:
- 如果错误信息包含
token、expired、unauthorized、401、403 等关键词,自动调用 refresh-lexiang-token skill 刷新 Token
- 刷新成功后,重试 lexiang MCP 调用
- 如果刷新后仍然失败 → 提示用户检查 MCP 连接
- 如果失败不是 Token 问题 → 提示用户检查 MCP 连接
⚠️ 禁止降级为 curl 调用 REST API:即使 MCP 未连接,也不要自行编写 curl 调用乐享 REST API。应该引导用户修复 MCP 连接。
Token 刷新触发条件:
当以下任一情况发生时,自动刷新 Token:
- MCP 调用返回 401/403 错误
- 错误信息包含
access_token、expired、unauthorized
- 任何乐享 MCP 调用失败,并提示可能是 Token 过期
Token 刷新流程:
1. 检测到 MCP 调用失败
2. 判断是否为 Token 过期(错误码或错误信息)
3. 是 → 调用 refresh-lexiang-token skill
4. 刷新成功后重试原操作
5. 刷新失败或仍然报错 → 提示用户手动处理
目标知识库
从 config.json 的 lexiang.target_space 中读取:
- 知识库名称:
config.lexiang.target_space.space_name
- Space ID:
config.lexiang.target_space.space_id
- 知识库访问链接:按
config.lexiang.access_domain.space_url_template 格式拼接
⚠️ 访问链接域名:用户可访问的乐享前端域名从 config.lexiang.access_domain.domain 读取,不是 mcp.lexiang-app.com(后者是 MCP API 服务端域名,浏览器无法直接访问)。所有展示给用户的链接必须按 config.json 中 page_url_template 格式生成。
目录组织
按天维度组织目录,日期目录直接放在知识库根目录下:
知识库根目录/
2026-03-18/
arxiv_daily_digest.md (摘要,在线文档 page 类型)
xxxx.xxxxx.pdf (论文 PDF)
yyyy.yyyyy.pdf
2026-03-19/
...
操作流程
通过 lexiang MCP 工具,按以下步骤完成上传:
步骤 0:读取配置(含初始化检测)
- 读取 skill 目录下的
config.json 文件
- 检查
_initialized 是否为 true 且 lexiang.target_space.space_id 非空
- 如果未初始化 → 触发对话式配置初始化流程,完成后再继续
- 提取
space_id、company_from、page_url_template 等配置项
步骤 1:获取知识库根节点
- 调用
space_describe_space(参数:space_id=<config 中的 SPACE_ID>)
- 从返回结果中提取
root_entry_id
步骤 2:检查/创建当天日期目录
- 调用
entry_list_children(参数:parent_id=<root_entry_id>)查询根目录下的子条目
- 查找是否已存在以当天日期命名(如
2026-03-18)的 folder 类型条目
- 如不存在,调用
entry_create_entry(参数:parent_entry_id=<root_entry_id>, name="2026-03-18", entry_type="folder")创建
日期目录直接放在知识库根目录下,不要挂在 CodeBuddy/Moltbot 等子文件夹下。
步骤 3:去重检查
- 调用
entry_list_children(参数:parent_id=<日期目录ID>)查询该日期目录下已有的条目
- 按「名称 + 类型」检查是否已存在同名文档,如果已存在则跳过上传并告知用户
步骤 4:上传摘要 Markdown
使用 entry_import_content 创建为在线文档(page 类型):
- 参数:
space_id=<SPACE_ID>, parent_id=<日期目录ID>, name="arxiv_daily_digest", content=<摘要Markdown文件内容>, content_type="markdown"
- 在线文档支持在乐享中直接编辑和阅读
步骤 5:上传论文 PDF
对每篇精选论文的 PDF 文件,通过三步上传流程上传:
file_apply_upload(参数:parent_entry_id=<日期目录ID>, name="<paper_id>.pdf", size=<文件字节数>, mime_type="application/pdf", upload_type="PRE_SIGNED_URL")
- 使用
curl -X PUT 将 PDF 文件上传到返回的 upload_url(预签名 URL 直传 COS,不涉及认证信息)
file_commit_upload(参数:session_id=<上一步返回的session_id>)
上传 PDF 时建议间隔 1-2 秒,避免触发频率限制。
步骤 6:输出结果
- 按
config.json 中的 page_url_template 格式拼接文档链接,告知用户
- 链接中的
{company_from} 占位符用 config.json 中的 company_from 值替换
注意事项
- 配置初始化是前置条件:首次使用时会自动通过对话引导完成知识库配置,无需手动编辑文件
- MCP 连接是前置条件:必须先确认 lexiang MCP 已连接才能执行操作
- 访问链接域名:展示给用户的链接一律按
config.json 中 page_url_template 格式生成,不要使用 mcp.lexiang-app.com
- 上传前自动去重:按「文档名称 + 文档类型」在目标日期目录下查重,避免重复上传
- 摘要以**在线文档(page)**格式创建,可在乐享中直接阅读和编辑
- 论文 PDF 以文件格式上传
- 如果同一天多次执行,它们会归入同一个日期目录下
- 使用
_mcp_fields 参数可以减少返回数据量,如 _mcp_fields=["id", "root_entry_id", "name"]
Step 6:返回结果
执行完成后,返回以下信息供调用方使用(如企微推送):
链接中的 {entry_id} 和 {company_from} 从 config.json 中的 page_url_template 和 company_from 拼接。
{
"date": "YYYY-MM-DD",
"paper_count": 10,
"digest_md_path": "/tmp/arxiv-daily/YYYY-MM-DD/arxiv_daily_digest.md",
"digest_entry_id": "乐享摘要条目ID",
"digest_entry_link": "<按 config.json 中 page_url_template 格式拼接>",
"date_dir_entry_id": "乐享日期目录ID",
"papers": [
{
"id": "xxxx.xxxxx",
"title": "论文标题",
"title_cn": "中文标题",
"direction": "Agent",
"highlight": "一句话亮点",
"pdf_path": "/tmp/arxiv-daily/YYYY-MM-DD/xxxx.xxxxx.pdf",
"arxiv_url": "https://arxiv.org/abs/xxxx.xxxxx"
}
]
}
依赖
- lexiang MCP 工具:乐享知识库操作(创建目录、上传文件、创建在线文档、设置属性等)。通过 MCP 协议连接,不同 Agent 按各自方式配置
- fetch-archive skill:
md_to_pdf.py(Markdown 转 PDF,可选)
- web_fetch 工具:抓取 arXiv 页面内容
网络异常处理
常见网络问题
| 问题 | 原因 | 解决方案 |
|---|
| TLS握手失败 | 企业防火墙/代理拦截 | 等待后重试或使用 Papers With Code 备选 |
| DNS解析失败 | 网络配置问题 | 使用备用 DNS 或 IP 直连 |
| 连接超时 | 网络拥堵/服务器负载 | 指数退避重试 |
| 403/429 错误 | 访问频率限制 | 降低请求频率或等待 |
网络诊断与重试策略
Step 1:执行网络诊断
curl -sL --max-time 10 "https://arxiv.org" -o /dev/null -w "HTTP: %{http_code}\n"
openssl s_client -connect arxiv.org:443 -servername arxiv.org 2>&1 | grep "CONNECTED"
nslookup arxiv.org
Step 2:带重试的请求函数
fetch_with_retry() {
local url="$1"
local max_attempts=3
local attempt=1
local delay=2
while [ $attempt -le $max_attempts ]; do
echo "Attempt $attempt/$max_attempts: $url" >&2
response=$(curl -sL --max-time 30 "$url")
http_code=$(curl -sL -o /dev/null -w "%{http_code}" --max-time 30 "$url")
if [ "$http_code" = "200" ]; then
echo "$response"
return 0
fi
echo "HTTP $http_code, retrying in ${delay}s..." >&2
sleep $delay
delay=$((delay * 2))
attempt=$((attempt + 1))
done
echo "Failed after $max_attempts attempts" >&2
return 1
}
Step 3:备用数据源
当 arXiv 无法访问时,自动切换到 Papers With Code:
FALLBACK_URL="https://paperswithcode.com/papers"
自动故障转移流程
1. 尝试连接 arXiv (3次重试,指数退避)
↓ 失败
2. 执行网络诊断,记录错误类型
↓
3. 切换到 Papers With Code 获取论文信息
↓
4. 标记 PDF 为"待手动下载",只上传摘要
↓
5. 完成后报告网络状态和恢复建议
注意事项
- arXiv 页面可能有访问频率限制,下载 PDF 时建议间隔 1-2 秒
- 工作日(周一到周五)arXiv 有新论文更新,周末可能无新内容
- 知识库配置通过
config.json 管理,首次使用时通过对话式引导自动完成初始化,无需手动编辑
- 乐享操作通过 MCP 工具执行,禁止降级为 curl 调用 REST API
- 日期目录放在根目录,不放在任何子文件夹下
- 链接格式按
config.json 中 page_url_template 拼接,必须带 company_from 参数
- 如果 arXiv 页面格式变化导致解析失败,优先使用
web_fetch 作为备选方案
- 网络异常已成为常态:请确保总是先诊断再重试,必要时使用备用数据源