# 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/ ``` --- ## 早报推送 ```powershell 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`: ```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 格式) | ```env # 开启 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` | **导语 + 信号 + 精选**,全中文叙述 | ```env 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` 已做截断