openclaw-paperdaily
v0.1.0
Published
Daily computer science paper recommendations for OpenClaw + Feishu
Readme
PaperDaily - OpenClaw + Feishu 论文推荐系统
每日从 arXiv 计算机科学论文中筛选高价值文献,自动生成中文摘要并发送到飞书。
功能特性
- 📚 每日推荐:从 arXiv CS 类近 7 天论文中筛选高价值文献
- 🎯 智能评分:基于时间新鲜度、关键词匹配、摘要信息量进行评分
- 💡 通俗讲解:为每篇论文提供简洁易懂的解读
- 🔄 缓存机制:同一天多次请求返回相同结果,支持强制刷新
- 🔧 模块化设计:collector/ranker/generator/policy/delivery/storage 分层架构
- 📱 OpenClaw 集成:可作为 OpenClaw 技能使用
- 🤖 飞书企业应用:支持飞书企业应用机器人(App Bot)
快速开始
1. 安装依赖
npm install2. 配置环境变量
复制 .env.example 到 .env 并配置:
cp .env.example .env编辑 .env 文件:
# Feishu App Bot Configuration
FEISHU_APP_ID=your_feishu_app_id_here
FEISHU_APP_SECRET=your_feishu_app_secret_here
FEISHU_CHAT_ID=your_feishu_chat_id_here
# Paper Selection
DEFAULT_TIMEZONE=Asia/Shanghai
# Ranking Configuration
KEYWORDS=machine learning,deep learning,neural networks,transformer,LLM,computer vision,natural language processing,reinforcement learning
# Cache Configuration
CACHE_HOURS=243. 一键启动
# 开发模式(直接运行 TypeScript)
npm run dev
# 或者先构建再运行
npm run build
npm start
# 启动 Webhook 服务器(接收飞书事件)
npm run server4. 使用命令
# 获取今日文献(使用缓存)
npm run dev -- 今日文献
# 强制刷新今日文献
npm run dev -- 刷新文献飞书企业应用机器人接入步骤
前提条件
- 已有飞书企业账号
- 有创建应用的权限
步骤 1:创建飞书应用
- 登录飞书开放平台:https://open.feishu.cn/
- 进入「管理后台」→「应用管理」→「创建应用」
- 选择「企业自建应用」
- 填写应用信息:
- 应用名称:PaperDaily
- 应用描述:每日计算机科学论文推荐
- 应用图标:可选
- 点击「创建」
步骤 2:获取凭证信息
- 在应用详情页,找到「凭证与基础信息」
- 记录以下信息:
App ID(复制到FEISHU_APP_ID)App Secret(点击「查看」后复制到FEISHU_APP_SECRET)
步骤 3:配置权限范围
- 进入应用详情页 →「权限管理」
- 搜索并开启以下权限:
im:message(发送消息权限)im:message:send_as_bot(以机器人身份发送消息)im:chat(获取会话信息,如需要)
- 点击「批量开通权限」或「申请权限」
步骤 4:获取群聊 ID
方法一:通过飞书开发者工具
- 在目标群聊中
- 点击群聊设置 → 群信息
- 记录
open_chat_id或chat_id(复制到FEISHU_CHAT_ID)
方法二:通过 API 获取
调用 https://open.feishu.cn/open-apis/im/v1/chats 获取群聊列表
步骤 5:配置事件订阅(可选,用于 Webhook 模式)
如果需要通过飞书事件触发(如群聊中发送命令),请配置事件订阅:
- 进入应用详情页 →「事件与回调」→「添加事件」
- 选择「添加事件订阅」
- 配置请求 URL:
- URL 格式:
https://your-server.com/webhook - 使用 ngrok 或类似工具进行本地测试:
ngrok http 3000
- URL 格式:
- 选择订阅事件:
im.message.receive_v1(接收消息事件)
- 配置加密(可选):
- 设置
Verify Token(复制到FEISHU_VERIFY_TOKEN) - 设置
Encrypt Key(复制到FEISHU_ENCRYPT_KEY)
- 设置
- 点击「保存」
步骤 6:将机器人添加到群聊
- 在应用详情页 →「应用功能」→「机器人」
- 启用机器人功能
- 点击「添加到群聊」或搜索应用名称添加到目标群
步骤 7:测试
在群聊中发送 今日文献 或 刷新文献,机器人应该会响应。
使用的飞书 API
本项目使用以下飞书开放平台 API:
| API 名称 | 说明 | 文档链接 |
|---------|------|---------|
| get_tenant_access_token | 获取租户访问令牌 | https://open.feishu.cn/document/server-docs/authentication-management/access-token/get_tenant_access_token |
| create | 发送消息 | https://open.feishu.cn/document/server-docs/im-v1/message/create |
| im.message.receive_v1 | 接收消息事件 | https://open.feishu.cn/document/server-docs/im-v1/message/event |
OpenClaw 集成
安装为 OpenClaw 技能
- 将
skills/paperdaily目录复制到你的 OpenClaw skills 目录:
cp -r skills/paperdaily /path/to/openclaw/skills/在 OpenClaw 配置中添加技能
重启 OpenClaw
使用方式
在支持的聊天平台(WhatsApp、Telegram、Discord、Feishu 等)中发送:
今日文献- 获取今日推荐论文(使用缓存)刷新文献- 强制刷新并获取新的今日论文
项目结构
paperdaily/
├── src/
│ ├── collector/ # 论文收集器(arXiv)
│ ├── ranker/ # 论文评分器
│ ├── generator/ # 内容生成器
│ ├── policy/ # 缓存策略
│ ├── delivery/ # 投递模块(Feishu App Bot)
│ │ ├── feishu-auth.ts # 飞书认证管理
│ │ ├── feishu-message.ts # 飞书消息 API
│ │ ├── feishu-event-handler.ts # 事件订阅处理
│ │ └── feishu-delivery.ts # 飞书投递服务
│ ├── storage/ # 存储模块(SQLite + Bitable 接口)
│ ├── types/ # 类型定义
│ ├── utils/ # 工具函数
│ ├── openclaw/ # OpenClaw 集成
│ ├── index.ts # 主入口(CLI)
│ └── server.ts # Webhook 服务器
├── config/ # 默认配置
├── skills/paperdaily/ # OpenClaw 技能
├── data/ # 数据目录(运行时生成)
├── .env.example # 环境变量示例
├── package.json
├── tsconfig.json
└── README.md模块说明
Collector(收集器)
- 从 arXiv API 获取近 7 天的 CS 类论文
- 支持自定义类别过滤
- 解析论文元数据(标题、作者、摘要、链接等)
Ranker(评分器)
- 时间新鲜度 (30%):越新的论文分数越高
- 关键词匹配 (40%):标题和摘要中关键词匹配度
- 信息量 (30%):摘要长度和结构(方法论、结果、创新点)
Generator(生成器)
- 生成格式化的论文推荐内容
- 包含标题、来源、链接、摘要要点
- 自动提取关键词
- 提供"通俗讲解"版本文档
Policy(策略)
- 缓存控制策略
- 同一天内多次请求返回缓存结果
- 支持强制刷新
Delivery(投递)
- 飞书 App Bot 消息推送
- 文本消息格式
- 事件订阅处理(可选)
Storage(存储)
- SQLite 存储(默认)
- Bitable 适配器接口(预留)
- 缓存管理
配置说明
环境变量
| 变量 | 说明 | 默认值 | 必填 |
|------|------|--------|------|
| FEISHU_APP_ID | 飞书应用 ID | 无 | 是 |
| FEISHU_APP_SECRET | 飞书应用 Secret | 无 | 是 |
| FEISHU_CHAT_ID | 飞书群聊 ID | 无 | 是 |
| FEISHU_VERIFY_TOKEN | 事件订阅验证令牌 | 无 | 否 |
| FEISHU_ENCRYPT_KEY | 事件订阅加密密钥 | 无 | 否 |
| DEFAULT_TIMEZONE | 默认时区 | Asia/Shanghai | 否 |
| KEYWORDS | 论文筛选关键词 | ML/DL/NN/Transformer 等 | 否 |
| CACHE_HOURS | 缓存时长(小时) | 24 | 否 |
评分权重
可在 config/default.ts 中调整:
const weights = {
freshness: 0.3, // 时间新鲜度权重
keywords: 0.4, // 关键词匹配权重
information: 0.3 // 信息量权重
};输出示例
📚 每日论文推荐
━━━━━━━━━━━━━━━━━━
Attention Is All You Need
arXiv · 2025年2月25日
🔗 链接: https://arxiv.org/abs/1706.03762
📋 摘要要点
The dominant sequence transduction models are based on complex recurrent or convolutional neural networks... [摘要要点]
👨💻 作者
Ashish Vaswani, Noam Shazeer 等
🏷️ 类别
cs.CL, cs.AI, cs.LG
🔑 关键词
Transformer · Attention · Neural Networks
(注:基于论文标题和摘要自动提取)
💡 通俗讲解
【研究领域:Transformer 架构】
这是一篇关于 Attention Is All You Need 的研究论文。
【研究背景】
从摘要来看,这项研究主要关注如何解决当前 Transformer 架构领域中的一个具体问题。
【主要贡献】
论文提出了一种新的方法/框架,试图通过改进现有技术来提升性能。
【应用价值】
该研究对相关领域的研究者和开发者有一定参考价值。
━━━━━━━━━━━━━━━━━━
由 OpenClaw PaperDaily 自动生成扩展开发
添加新的论文来源
实现 Collector 接口:
export interface Collector {
collect(config: CollectorConfig): Promise<Paper[]>;
}添加新的存储后端
实现 StorageAdapter 接口:
export interface StorageAdapter {
getDailyPaper(date: string): Promise<DailyPaper | null>;
saveDailyPaper(dailyPaper: DailyPaper): Promise<void>;
clearCache(date?: string): Promise<void>;
}添加新的投递渠道
实现 Delivery 接口:
export interface Delivery {
send(content: string, config: DeliveryConfig): Promise<boolean>;
}已知限制
- 论文来源:当前仅支持 arXiv,可扩展其他来源(如 Google Scholar、Semantic Scholar)
- 定时推送:当前仅支持手动触发,可扩展定时任务
未来计划
- [ ] 添加定时任务(每日自动推送)
- [ ] 支持更多论文来源
- [ ] 支持 Bitable 存储
- [ ] 添加 Web 管理界面
- [ ] 支持自定义评分规则
技术栈
- 运行时:Node.js 18+
- 语言:TypeScript 5+
- 存储:SQLite (better-sqlite3)
- HTTP 客户端:node-fetch
- Web 框架:Express
许可证
MIT License
贡献
欢迎提交 Issue 和 Pull Request!
联系方式
如有问题,请提交 GitHub Issue。
