daily 自建 Cursor bridge;DAILY_LLM_PROVIDER 控制后端;config/feeds.yaml 与 sensitive_words 可配置。 Co-authored-by: Cursor <cursoragent@cursor.com>
171 lines
5.5 KiB
Markdown
171 lines
5.5 KiB
Markdown
# 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 源配置在 **`config/feeds.yaml`**(国际 `intl` / 国内 `cn`),改 URL 或增删 feed 后无需改 Python。文件缺失或解析失败时,会回退 `daily/news/feeds_defaults.py` 内置列表。
|
||
|
||
可选 **`config/sensitive_words.yaml`** + `DAILY_CONTENT_FILTER=1`:标题/摘要命中敏感词则丢弃该条。
|
||
|
||
旧版硬编码路径(仍可读作参考):`daily/news/feeds_defaults.py`
|
||
|
||
```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`
|