by leiting-eric
AI 每日新闻简报 · GitHub 热门 + X 热门文章 + 行情技术分析 · 23 个数据源聚合 + LLM 中文摘要 · 本地或 GitHub Actions 部署
# Add to your Claude Code skills
git clone https://github.com/leiting-eric/DailyBriefNo comments yet. Be the first to share your thoughts!
中文 · English ↓
你的私人 AI 每日简报,跑在你自己掌控的基础设施上。 23 个数据源 · LLM 摘要 · 21 个股票/加密标的技术指标 + AI 交易点评 · 中英双语 · 5 个 LLM 后端可选。
三种部署任选:🚀 5 分钟 Fork 到 GitHub Actions · 💻 本地一键装 · 🤖 一句话让 AI Agent 帮你装。
🌐 Live demos — 📰 leiting-eric.github.io/DailyBrief(A 方式 · GitHub Actions + Pages) · 📰 daily.leiting.tech(B 方式 · 本地服务器部署)
REPORT_LOCALE=en 一切——数据源、prompt、UI 文案、Bullish/Bearish stance 全套切英文23 个数据源(zh 模式)/ 22 个(en 模式),分布如下:
BBC / Guardian / NYT / NPR / DW 中文 / Al Jazeera / The Diplomat — 7 家主流国际媒体的 World 频道
Bloomberg / WSJ / FT / BBC Business / Economist — 5 家全球财经主力
完整列表 + 启用状态:
npm run sources查看;改源 → 编辑sources.config.json。
| 方式 | 适合谁 | 你需要 | 几分钟搞定 | |---|---|---|---| | A. GitHub Actions + Pages | 没服务器、不想常开电脑 | 一个 API key(Anthropic / OpenAI / DeepSeek / MiniMax 任一) | ~5 分钟(推荐) | | B. 本地一键装 | 有常开的电脑/服务器、想极致便宜 | Node 20+,可选 Claude Code 登录 | ~3 分钟 | | C. 给 AI Agent 一句话 | 懒、想让 Cursor / Codex / Claude Code 帮你装 | 同上 | 一句话 |
Fork 这个 repo(GitHub 右上角 Fork 按钮)
进 Fork 的 repo → Settings → Actions → General → Workflow permissions 设为 Read and write permissions
Settings → Pages → Build and deployment → Source 选 "Deploy from a branch",分支 gh-pages / 路径 / (root)(第一次跑完才会出现 gh-pages 分支,先建 secret 再触发一次即可)
🔑 配置 LLM 后端 —— 这步是关键。每个后端都要一个 secret + 对应的 LLM_BACKEND variable(不只是 secret),按下表对照填:
⚠️ 最常踩的坑:只加了 secret(比如
DEEPSEEK_API_KEY)忘了加LLM_BACKENDvariable —— workflow 默认LLM_BACKEND=anthropic,所以无论你填的是哪家的 key,运行时都会报ANTHROPIC_API_KEY required。两个都要加。
| 你想用 | Secrets 标签加 | Variables 标签加 LLM_BACKEND | 大致成本 |
|---|---|---|---|
| 🟣 Anthropic Sonnet(默认,prompt 按 Sonnet 调优) | ANTHROPIC_API_KEY | 不填或填 anthropic | ~$0.03-0.05 / 天,月 < $2 |
| 🐋 DeepSeek(便宜大碗,中文友好) | DEEPSEEK_API_KEY | deepseek | ~$0.01-0.02 / 天,月 < $1 |
| 🟢 OpenAI | OPENAI_API_KEY | openai | gpt-4o-mini ~$0.02 / 天 |
| 🔵 MiniMax | MINIMAX_API_KEY | minimax | 类似 DeepSeek 量级 |
| 🌀 中转站 / 反代 / 其他 OpenAI 兼容服务(Moonshot / SiliconFlow / OpenRouter / 自建 Claude 反代 / 本地 Ollama / LM Studio 等) | LLM_API_KEY | openai(极少数 Anthropic 协议反代填 anthropic) | 看服务方定价 |
位置:Settings → Secrets and variables → Actions,左边切换 Secrets / Variables 两个标签。
🌀 选了最后一行"中转站"的额外步骤:Variables 还要加
LLM_BASE_URL(中转站给的 endpoint,如https://api.moonshot.cn/v1)和LLM_MODEL(如moonshot-v1-8k)。不确定协议?默认LLM_BACKEND=openai覆盖 95% 中转站;如果跑挂报 404 / 协议错误再改成anthropic。
(可选)同页 Variables 再加:
LLM_MODEL —— 覆盖该 backend 的默认模型(不填用 .env.example 里列的默认)LLM_BASE_URL —— 自定义 endpoint。选了上面"中转站"那行的话必填;本地 Ollama 填 http://localhost:11434/v1、LM Studio 填 http://localhost:1234/v1REPORT_LOCALE —— zh(默认)或 en,控制数据源 + UI + prompt 全套切英文REPORT_TZ —— IANA 时区名(默认 UTC),例 Asia/Shanghai / America/Los_Angeles。同时影响触发时间和日期标签REPORT_HOUR —— 触发的小时(基于 REPORT_TZ),默认 8(早 8 点)。逗号分隔可多次触发,如 8,18 = 早 8 + 晚 6REPORT_DAYS —— 触发的星期(cron 风格,0=周日 ... 6=周六),默认 *(每天)。例 1-5 = 工作日;1,3,5 = 周一三五Actions 标签 → 选 "Daily Brief" workflow → Run workflow 手动触发一次
跑完后报告在 https://<你的用户名>.github.io/<repo-名字>/。之后默认每天 REPORT_TZ 时区的 08:00 自动更新(不设 REPORT_TZ 就是 UTC 08:00)。
⏰ 触发机制:GitHub Actions 的 cron 只接受 UTC,所以工作流 cron 设置为每小时跑一次,里面有一个
gate任务用REPORT_TZ把当前小时和REPORT_HOUR/REPORT_DAYS对照——匹配才往下跑 build,否则秒退。这样不论你在哪个时区都能精准命中本地时间,夏令时也自动跟着切换(IANA 时区数据库内置)。
常用 schedule 配方:
| 想要 | REPORT_HOUR | REPORT_DAYS |
|---|---|---|
| 每天 08:00(默认) | 不填或 8 | 不填或 * |
| 每天早晚两次(8 + 18 点) | 8,18 | * |
| 工作日 09:00 | 9 | 1-5 |
| 周一/三/五 早 7 晚 9 两次 | 7,21 | 1,3,5 |
| 每 6 小时一次 | 0,6,12,18 | * |
只想要默认每天 08:00 本地时间,只填 REPORT_TZ 一个变量就够了(如 Asia/Shanghai),其他全部留空。
💸 成本估算:GitHub Actions 公开 repo 完全免费。Pages 公开 repo 也免费。唯一花钱的就是 LLM API 调用——DeepSeek 月成本不到 $1,Anthropic Sonnet < $2。
⚠️ 用 GH Actions 模式就意味着用不了本地
claudeCLI——Claude Code 的 OAuth 登录在你本机,GitHub 的服务器看不到。如果你已经在 Max 订阅里,建议两条路并行:本地装(B 方式)用 Claude CLI 跑你自己的服务器版本,GH Actions 用 DeepSeek 跑 Pages 公开版本。两份报告独立,互不影响。
"Upgrade or make this repository public to enable Pages" —— GitHub Pages 在 Free 账户的 Private repo 上不可用。Settings → General → Danger Zone → Change visibility 改 Public。Actions Secrets 在 Public repo 里依然加密保护,对其他人不可见
Variable name 报 "alphanumeric only" —— 输入 LLM_BACKEND 时下划线被中文输入法替换成了全角 _(U+FF3F)。切到英文输入法 Shift+- 重打
第一次跑完才能选 Pages source —— Pages 设置页要求选已存在的分支,但 gh-pages 是首次 workflow 跑成功后才创建出来。顺序:配 secret → 触发 workflow → 跑完 → 回 Settings → Pages 选 gh-pages
Action 红 X 怎么看具体原因 —— 点失败的 build → 左边列出每个 step → 找有红 X 的那步点开看 log。最常见两类:401/402 = API key 拼错或没余额;403 = workflow permissions 没设成 Read and write
报错 ANTHROPIC_API_KEY (or generic LLM_API_KEY) is required,但我填的是别家的 key —— 经典 secret/variable 不配对。Workflow 默认 LLM_BACKEND=anthropic,光填 DEEPSEEK_API_KEY / OPENAI_API_KEY 不够,必须同时去 Variables 标签加 LLM_BACKEND=deepseek / openai。从 v1.x 起启动期会直接告诉你哪个 key 已设、应该把 LLM_BACKEND 改成什么
配齐了 secret + variable 还是报同样的错 —— 99% 是配置放错了作用域。GitHub 上有两个长得几乎一样的页面:
environment: <name> 才会注入;本项目默认 workflow 没声明,所以放这里运行时拿不到排查方法:进配置页面看页眉。如果写的是 "Environment ..." 你有两种修法任选其一:
DEEPSEEK_API_KEY / ANTHROPIC_API_KEY)因为隐藏了值,最容易被忘掉只搬 variable 不搬 secret,导致换了个新错误("key 未设置")。两边都要搬完整.github/workflows/daily.yml,在 gate 和 build 两个 job 各加一行 environment: <你的环境名>(两个都要加,因为 gate 也读 vars.REPORT_TZ 等变量),名字必须跟 Settings → Environments 里建的一字不差。适合想用 environment 做审批门禁 / branch 限制的人跑了 30 秒就挂(其他情况) —— LLM API 返 400 / key 没余额 / 配额耗尽。看 step "Generate today's report" 的 log
# Linux / macOS
curl -sSL https://raw.githubusercontent.com/leiting-eric/DailyBrief/main/bootstrap.mjs | node
# Windows PowerShell
irm https://raw.githubusercontent.com/leiting-eric/DailyBrief/main/bootstrap.mjs | node -
这条命令会自动:
git clone 到 ~/daily-brief(Windows: %USERPROFILE%\daily-brief)npm install~/.daily-brief-config 记录项目路径~/.claude/ 建符号链接让 Claude Code 的 skill 和 slash command 全局可用npm run dry-run 烟测🎁 Claude Code 用户额外福利:装完后任意目录都能 /run-daily、/check-daily,描述问题("日报又挂了")也能触发 daily-brief skill 自动加载。其他 agent(Cursor / Codex)没有 skill 加载机制,但定时任务跑得起来。手动触发用:
| 平台 | 手动触发 |
|---|---|
| Windows | Start-ScheduledTask -TaskName DailyBrief |
| macOS | launchctl start com.daily-brief |
| Linux | node scripts/run-daily.mjs(cron 不支持手动触发) |
自定义路径 / 触发时间:
node bootstrap.mjs --target /custom/path --at 07:30
LLM 后端:默认走本地 claude CLI(首次需在浏览器登录一次:echo "hi" | claude --print --model sonnet,登录后永久生效)。不用 Claude Code,或想换模型 / 换家 / 接中转,都在 .env.local 里改 —— 完整可复制的配置示例见下方 [🤖 LLM 后端配置](#-ll