92e0ed9a279040e595d6497f361cd1470ec138c3
theme_clusters/theme_names 经参数注入 THEME_RULES 与 skill_id_fn, 避免 generate.py 的循环 import(T3,为拆分 generate_report 铺路)。 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
skills-hot-daily
Skills / GitHub 早报推送(企微 Webhook)。
项目结构
skills-hot-daily/
├── README.md
├── .env.example # 早报 webhook、GitHub 等
├── requirements.txt # Python 依赖
├── run-daily.ps1 # 生成 + 推送一条龙
├── send-wecom.ps1 # 仅推送
├── daily/ # 早报 Python 包
│ ├── __main__.py # python -m daily [generate|push]
│ ├── config.py
│ ├── generate.py
│ ├── report_data.py # JSON 中间层
│ ├── cursor_editor.py # Cursor 编辑层
│ ├── llm_client.py
│ ├── localize.py # 仅中文化(Tier A)
│ ├── format_wecom.py
│ ├── webhook.py
│ ├── news/ # 国际 AI 时讯 RSS
│ │ ├── feeds.py
│ │ └── fetch.py
│ └── github/
│ ├── auth.py
│ ├── search.py
│ └── trending.py
├── output/ # YYYY-MM-DD.md / .wecom.md / .data.json / .editorial.json
├── skills/daily-editor/ # 早报 Cursor 编辑 Skill
│ └── SKILL.md
├── logs/
└── .cache/
早报推送
cd d:\LY\diy\daily-robots
pip install -r requirements.txt
copy .env.example .env
.\run-daily.ps1
- 生成:
output/YYYY-MM-DD.md(完整版)、output/YYYY-MM-DD.wecom.md(企微短版) - 仅生成:
.\run-daily.ps1 -SkipPush - 仅推送:
python -m daily push output\2026-06-25.wecom.md
Webhook 配置:企微群 → 群机器人 → 添加,将 key= 后的值写入项目根 .env:
WECOM_WEBHOOK_KEY=your-key
GitHub 数据源(见 .env.example):
| 来源 | 说明 |
|---|---|
| GitHub Trending | GITHUB_TRENDING_MODE=scrape 或 api |
| 新兴 / Topic | Search API,需 GITHUB_TOKEN |
| Release | 可选 GITHUB_REPOS=owner/repo |
国际 AI 时讯(RSS,见 daily/news/feeds.py):
| 类别 | 覆盖 |
|---|---|
| 厂商官方 | Anthropic、OpenAI、Google、Meta、Microsoft、Mistral、Cursor 等 |
| Agent / LLM 开发者 | LangChain、LlamaIndex、Hugging Face、Copilot 等 |
| 综合科技媒体 | The Verge、TechCrunch、Ars、Wired、MIT TR 等 |
| Newsletter | Ben's Bites、Latent Space、Simon Willison、TLDR AI 等 |
| 研究 / 论文 | arXiv cs.CL/AI/LG、HF Papers |
| 社区讨论 | HN、Reddit r/LocalLLaMA / ClaudeAI / ML 等 |
环境变量:DAILY_AI_NEWS=1 · DAILY_CN_AI_NEWS=1 · DAILY_AI_NEWS_HOURS=24 · DAILY_WECOM_AI_NEWS=10 · DAILY_WECOM_CN_AI_NEWS=10
国内 AI 时讯(RSS,见 daily/news/feeds_cn.py):
| 类别 | 覆盖 |
|---|---|
| AI 专业媒体 | 量子位 |
| 综合科技 | 36氪、雷锋网、Google News 中文 |
生成架构(Tier B · Cursor 编辑层)
早报默认走 Python 抓取 + 模板渲染;可选开启 Cursor 做「编辑」:
抓取数据 → output/日期.data.json → Cursor 读 Skill 写 editorial → 模板填字 → .md / .wecom.md
| 文件 | 说明 |
|---|---|
output/YYYY-MM-DD.data.json |
结构化榜单(供 LLM 输入) |
output/YYYY-MM-DD.editorial.json |
Cursor 输出的主题、速览、中文描述 |
skills/daily-editor/SKILL.md |
编辑规范(语气、JSON 格式) |
# 开启 Tier B(需 CURSOR_API_KEY 或 DAILY_LLM_API_KEY)
DAILY_CURSOR_EDITOR=1
- 开启后:一次 LLM 调用 生成
theme_line+highlights+ 全部中文描述 - 关闭时(默认):规则主题 +
DAILY_ZH_DESC仅中文化描述 - LLM 失败自动回退规则模式,不影响推送
生成架构(Agent 工作流 · 推荐)
若觉得模板版「榜单堆砌」不友好,可改用 Agent 三步流水线:
Python 抓取 → Step1 趋势分析 → Step2 叙事写稿 → Python 分条推送企微
(.trends.json) (.wecom.md)
| 模式 | 环境变量 | 企微版风格 |
|---|---|---|
classic(默认) |
— | 分区榜单 + 模板 |
editor |
DAILY_CURSOR_EDITOR=1 |
模板 + LLM 中文化 |
agent |
DAILY_REPORT_MODE=agent |
导语 + 信号 + 精选,全中文叙述 |
DAILY_REPORT_MODE=agent
CURSOR_API_KEY=cursor_...
CURSOR_MODEL=composer-2.5
DAILY_CURSOR_CWD=d:\LY\diy\daily-robots
| 文件 | 说明 |
|---|---|
output/YYYY-MM-DD.trends.json |
Step1 趋势分析结果 |
skills/daily-agent/SKILL.md |
Agent 工作流规范 |
- 完整版
YYYY-MM-DD.md仍为数据表格归档;企微版由 Agent 直接写 Markdown - Agent 失败自动回退
classic,不影响run-daily.ps1
定时推送:
- 常驻调度(推荐):
python -m daily schedule或.\run-scheduler.ps1(默认 08:50 生成、09:00 推送,见DAILY_SCHEDULE_*) - Windows 任务计划:
.\register-daily-task.ps1 - Cursor:
/loop 1d(时间会漂移,仅临时用)
其他推送方案
| 方案 | 适用场景 | 复杂度 |
|---|---|---|
| 群机器人 webhook | 推送到固定群 | 低 |
| 应用消息 API | 推送给指定成员/部门 | 中(需 corp_id、secret、agent_id) |
| 邮件 + 企业微信邮箱 | 已有 SMTP | 中 |
| PushPlus / Server酱 | 个人微信中转 | 低(第三方) |
注意事项
- Webhook 不要提交到 Git,只用环境变量
- 企业微信 markdown 为子集(不支持完整 GitHub 表格语法时可改为文本列表)
- 单条消息约 4096 字节 上限,
send-wecom.ps1已做截断
Description
Languages
Python
96.6%
PowerShell
2.1%
Shell
1.1%
Dockerfile
0.2%