Files
daily-robots/README.md
yumao 728bd1b9d1 feat: Phase 1 添加 GHA 定时、run-daily.sh 与 Docker 部署
让早报可在无本地服务器环境下定时生成并推送企微,补齐 Linux/CI 入口。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-03 14:51:11 +08:00

170 lines
5.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# daily-robots
> **Daily Briefing** · **WeCom Push** · **Agent Mode**
给 AI 工程小团队推送**每日 curated 情报**skills.sh 榜单、GitHub AI 趋势、国际/国内 RSS生成叙事化早报并推到企业微信群。
与 TLDR AI / Ben's Bites 不同,这里专注 **Agent Skills 生态** + **可 fork 的自托管流水线**(不是又一个 email newsletter
**产出示例**[docs/sample-output/wecom-agent-sample.md](docs/sample-output/wecom-agent-sample.md)Agent 模式企微版节选)
---
## Quick Start
1. **Clone** 本仓库
2. **安装依赖**`pip install -r requirements.txt`
3. **配置环境**`copy .env.example .env`
4. **填写 webhook**:企微群 → 群机器人 → 添加 → 把 `key=` 写入 `.env`
```env
WECOM_WEBHOOK_KEY=your-webhook-key
```
5. **生成并推送**`.\run-daily.ps1`
生成文件在 `output/`
| 文件 | 说明 |
|------|------|
| `YYYY-MM-DD.wecom.md` | 企微推送版(主产物) |
| `YYYY-MM-DD.md` | 完整归档版 |
| `YYYY-MM-DD.data.json` | 结构化数据(供 LLM / 调试) |
常用变体:
```powershell
.\run-daily.ps1 -SkipPush # 只生成
python -m daily push output\2026-07-03.wecom.md # 只推送
```
Linux / macOS / CI 等价脚本:
```bash
chmod +x run-daily.sh
./run-daily.sh # 生成 + 推送
./run-daily.sh --skip-push # 只生成
./run-daily.sh --force # 忽略 30 分钟内重复运行锁
```
**前置条件**Python 3.10+、企业微信群机器人 webhook。无需 Bot API 凭证。
---
## 部署GitHub Actions / Docker
### GitHub Actions零服务器定时推送
仓库已包含 [`.github/workflows/daily.yml`](.github/workflows/daily.yml),默认每天 **08:30北京时间** 生成并推送。
1. Fork 或启用本仓库的 Actions
2. **Settings → Secrets and variables → Actions** 添加 Secrets
| Secret | 必需 | 说明 |
|--------|------|------|
| `WECOM_WEBHOOK_KEY` | 是 | 企微群机器人 webhook key |
| `GH_PAT` | 否 | 个人 GitHub PAT提高 API 限额;不设则用 Actions 内置 token |
| `CURSOR_API_KEY` | 否 | Agent 模式Cursor SDK |
| `DAILY_LLM_API_KEY` | 否 | Agent / 编辑层OpenAI 兼容 API |
3. 可选 **Variables**(不设则用代码默认值):`DAILY_REPORT_MODE`、`DAILY_LLM_MODEL`、`DAILY_AI_NEWS` 等
4. **Actions → daily → Run workflow** 可手动触发;勾选 *Skip WeCom push* 则只生成不上报
运行产物可在 workflow 的 **Artifacts** 中下载(`.md` / `.json`,保留 14 天)。
### Docker
```bash
cp .env.example .env # 填入 WECOM_WEBHOOK_KEY 等
docker compose build
docker compose run --rm daily # 生成 + 推送
docker compose run --rm daily --skip-push # 只生成
```
`output/`、`.cache/`、`logs/` 挂载到宿主机,与本地 `run-daily.ps1` 行为一致。
---
## Agent 模式(推荐)
默认 `classic` 是分区榜单模板;**推荐 Agent 模式**——导语 + 今日信号 + 精选新闻 + 榜单,全中文叙述。
```env
DAILY_REPORT_MODE=agent
CURSOR_API_KEY=cursor_...
CURSOR_MODEL=composer-2.5
DAILY_CURSOR_CWD=.
```
| 模式 | 环境变量 | 风格 |
|------|----------|------|
| `classic` | — | 分区榜单 + 模板 |
| `editor` | `DAILY_CURSOR_EDITOR=1` | 模板 + LLM 中文化 |
| **`agent`** | `DAILY_REPORT_MODE=agent` | **叙事化早报(推荐)** |
流水线:
```
Python 抓取 → Step1 趋势分析 (.trends.json) → Step2 写企微稿 (.wecom.md) → webhook 分条推送
```
- 规范见 `skills/daily-agent/SKILL.md`
- LLM 失败自动回退 `classic`,不影响 `run-daily.ps1`
- 无 `CURSOR_API_KEY` 时请用 `classic`,或配置 `DAILY_LLM_API_KEY`OpenAI 兼容 API
定时推送Windows 任务计划程序每日执行 `run-daily.ps1`,或 cron / `schtasks`。
---
## 自定义 RSS 源
国际 RSS 列表:`daily/news/feeds.py`
国内 RSS 列表:`daily/news/feeds_cn.py`
在对应文件的 `FEEDS` 列表中增删 URL 即可。常用开关(见 `.env.example`
```env
DAILY_AI_NEWS=1
DAILY_CN_AI_NEWS=1
DAILY_AI_NEWS_HOURS=72
DAILY_WECOM_AI_NEWS=10
DAILY_WECOM_CN_AI_NEWS=8
```
Skills 榜单默认爬 skills.sh 官网600+ 条);可改为第三方 feed
```env
# SKILLS_BOARD_SOURCE=feed
```
GitHub 新兴/Topic 榜需 `GITHUB_TOKEN`(见 `.env.example` 注释)。
---
## Experimental`bot/` 企微对话机器人
同仓库内的 **API 模式智能机器人**@ 机器人快查 skills、Cursor 任务、Playwright 截图)**不在 v1 开源支持范围内**,需独立 venv 与 `WECOM_BOT_ID` / `SECRET`。
详见 **[bot/README.md](bot/README.md)**。
---
## 项目结构
```
daily-robots/
├── run-daily.ps1 # 生成 + 推送
├── daily/ # 早报主包
├── shared/skills_data.py # skills feed 共用数据层
├── skills/daily-agent/ # Agent 工作流规范
├── output/ # 生成产物gitignore
└── bot/ # experimental
```
---
## 注意事项
- Webhook / API Key **勿提交 Git**,只用 `.env`
- 企微 markdown 为子集;超长报告**自动分条推送**(默认 4096 bytes/条)
- 完整配置项见 [`.env.example`](.env.example)
- 开发测试:`pip install -r requirements-dev.txt` → `pytest`