paper-search:论文三段接力的第一段,刻意做得很轻
local/paper-search
检索 → 入库 → 逐篇精读,这条 skill 只管第一段,而且刻意不做判断,只把候选摊到桌面上让人判断。三种检索方式:search_papers.py(日常主路径)、直接打 arXiv API、已知 ID 用 defuddle parse。11 个预设话题,两层相关性过滤:arXiv 类别白名单加强排除关键词,agent 再按站点内容定位过一遍。
我们的判断交付物是「三十秒能决策」的四行:arXiv ID 加标题、agent 自己写的一句话概要、带理由的相关性判断、链接——理由那一栏比标题更重要。真正该抄的是不对称节流:检索可以一次批量列 20 篇,入库逐条确认,精读一次只能做 1 篇,禁止检索后自动批量入库再批量生成详情页。
它在链条上的位置
论文线是三段接力:paper-search(找到)→ robotworld-ingest(入库)→ paper-detail-generator(逐篇精读出详情页)。这条 skill 只负责第一段,而且刻意做得很轻——它不做判断,只把候选摊到桌面上让人判断。三段各自有一条不可越的边界:检索阶段可以批量(脚本按关键词扫 arXiv,一次返回一二十条候选),入库阶段逐条确认,详情页阶段逐篇精读。⛔ 禁止「检索后自动批量入库 + 批量生成详情页」,这条禁令的来源是仓库里那个已经删掉的 gen_paper_details.py 事故。
三种检索方式
| 方式 | 用法 | 什么时候用 |
|---|---|---|
1 search_papers.py(推荐) | 在生产容器里跑,支持 --query / --topic / --days N / --max N | 日常主路径。脚本内置两层过滤,返回的就是可看的候选 |
| 2 直接打 arXiv API | export.arxiv.org/api/query,自己拼 cat:cs.RO+AND+all:... 与 sortBy=submittedDate | 需要脚本没有的组合查询、或者要控制排序字段时 |
3 defuddle parse | 已知 arXiv ID 时直接解析 abs 页 | 不是检索,是把一篇确定的论文读进来 |
SERVER=root@43.162.123.152
ssh -F /dev/null -o BatchMode=yes $SERVER \
"docker exec -w /app robotinfo-api python /app/scripts/search_papers.py \
--query 'humanoid stair climbing' --days 30 --max 20"
预设话题共 11 个:embodied-ai、world-model、vla、vm、3dgs、simulation、spatial-intelligence、humanoid、manipulation、robotics、reinforcement-learning。给不出关键词但给得出方向时,用 --topic 比自由文本稳,因为每个话题背后是一条已经调过的查询串。
两层相关性过滤
脚本不是「搜到什么给什么」,它先按 arXiv 类别收窄,再用强排除关键词剔除噪声:
- 类别白名单:
cs.RO、cs.AI、cs.LG、cs.CV、cs.MA、eess.SY - 强排除:天文学、量子、纯艺术、纯医学、雷达遥感等与机器人无关的命中
过了脚本过滤只是及格线,agent 还要按内容定位再过一遍。站点聚焦机器人/具身 AI,以下几类即使关键词命中也不收:纯基准测试(只有 benchmark 没有方法创新)、GUI/移动端 agent(不是物理机器人)、非机器人应用(农业、光伏、医疗超声等)、纯认知或架构 review(没有机器人方法)、偏门 3DGS 与图形学(与机器人无关)、纯 BCI/神经科学(不做机器人控制)、软件测试与安全测试类。详细判据在 robotworld-ingest/SKILL.md 里,两处必须一致,否则检索放行、入库驳回,白跑一趟。
输出格式:让用户三十秒能决策
检索结果不是把 arXiv 摘要贴回来。每篇给四行:arXiv ID + 标题、一句话概要(agent 基于摘要自己写,不照抄)、相关性判断(高/中/低,且要写理由)、链接。概要是这一段的真正产物——用户看的是「这篇值不值得进库」,不是「这篇讲了什么」,所以理由那一栏比标题更重要。示例:
1. arxiv:2607.25895 — 论文标题
概要:XXX 方法在 YYY 场景下实现了 ZZZ
相关性:高(直接关于机器人爬楼梯)
链接:https://arxiv.org/abs/2607.25895
用户点头之后
ssh -F /dev/null -o BatchMode=yes $SERVER \
"docker exec -w /app robotinfo-api python /app/scripts/ingest.py --source paper <arxiv_url>"
入库只解决「这篇进了库、有了元数据行」,接下来两步不能省:用 SQL 补全中英标题与摘要(改完必须回读验证,不许凭返回码认定成功),然后逐篇交给 paper-detail-generator 精读。检索可以一次列 20 篇,精读只能一次做 1 篇。
另外有一条审计入口:scripts/cleanup_papers.py audit 会回扫已入库论文的类别与摘要,按上面的过滤规则挑出「当年收错了」的条目。检索口径调整之后跑一次,能把存量里的越界论文清出来,比在前端一条条翻要快。
诚实的边界
这是本站内部 skill,不是一个能在别处安装的开源包,也没有一行 install 命令可给:它依赖生产容器里的 search_papers.py、arXiv 出口、Postgres 和 admin 确认队列。可迁移的是方法论——「类别白名单 + 强排除」两层过滤、「检索可批量而入库与解读必须逐条」的不对称节流、以及把一句话概要和相关性理由作为唯一交付物。把这三条搬到任何垂直内容站上,都能显著降低「收进来一堆不相关内容」的返工成本。