PROGRESS UPDATE

Issue #29 MVP 已跑通:AI Digest → Podcast → 草稿分发

2026-01-30 11:22 · Zon · Local-first pipeline

把 Issue #29 从“盘点”推进到“可复跑闭环”:并用可视化把模块与缺口标注清楚

你现在已经有一个最小可运行的管道:本机已有的 Weibo AI trending JSON → 统一 schema & SQLite → 每日 Digest.md + 公众号草稿文件 + 小红书发布包 + 3–5 分钟 TTS 播客(本地 RSS)。剩余工作主要集中在:sources 规则补齐、LLM 摘要/成本账本、播客托管与 HTTPS feed、以及更稳的“半自动发布”触点。

MVP RUNSQLITEDIGEST.MDWECHAT DRAFTXHS PACKAGETTSPODCAST RSSSCHEDULER

TL;DR

今日条目
8
播客时长
4:45
播客大小
2.0MB
默认发布策略
半自动

关于 Issue 链接:当前环境访问 github.com/EOMZON/myObsidian 返回 404(疑似私有/迁移)。本页以本机 assets + system skills + 现有代码与运行产物为“事实来源”。

Run Snapshot (2026-01-30)

本次成功运行(offline)产物与关键指标

产物 路径 说明
Digest.md projects/gh-issue-29-ai-digest-podcast/outputs/digest/2026-01-30/digest.md 每日 Top 条目 + show notes(MVP)
公众号稿件(文件) TASKS/CODEXhelpME/01_Agent与工作流/ref/articles/2026-01-30_ai-digest/article_ai-digest.md 默认只生成文件;可选 --publish-wechat 推草稿箱
小红书发布包 projects/gh-issue-29-ai-digest-podcast/outputs/xhs/2026-01-30/content.yaml 默认不自动发布;留给 Playwright 半自动
播客音频 projects/gh-issue-29-ai-digest-podcast/outputs/podcast/2026-01-30/podcast.mp3 macOS say + ffmpeg 转 mp3
播客 RSS(本地) projects/gh-issue-29-ai-digest-podcast/outputs/podcast/2026-01-30/feed.xml 默认 http://localhost:8787;需本地起 http.server
一条命令复跑(offline)

python3 projects/gh-issue-29-ai-digest-podcast/run_mvp.py --offline --date 2026-01-30

本地订阅播客 RSS(MVP)
  1. cd projects/gh-issue-29-ai-digest-podcast/outputs/podcast/2026-01-30
  2. python3 -m http.server 8787
  3. 在播客 App/播放器里打开 http://localhost:8787/feed.xml

Architecture (Now)

一张图看懂“从 sources 到产物”的真实路径

Sources Weibo AI trending (local JSON) search-flow/.../*_weibo_ai_trending.json GitHub Search (optional) api.github.com/search/repositories YouTube RSS (optional) Atom feed_url list Pipeline Core Collect collectors/* Normalize + Dedupe URL canon + per-source scores Store + Metrics SQLite: items / runs / run_metrics Outputs Digest.md outputs/digest/<date>/digest.md WeChat article ref/articles/<date>_ai-digest/ XHS package outputs/xhs/<date>/content.yaml Podcast script → mp3 + feed.xml (local) TTS: macOS say → ffmpeg
实际入口:projects/gh-issue-29-ai-digest-podcast/run_mvp.py(offline 默认;可选 --enable-network 启用 GitHub/YouTube)。

Status (Done vs Missing)

用“能否每天稳定交付”为标准打分(MVP=可跑;V1=可维护;V2=可分发)

0% 100% Collect (local) 100% DONE Store + Metrics 90% DONE Digest / WeChat / XHS 90% DONE Podcast (local RSS) 80% DONE Scheduler templates 60% PARTIAL LLM Summary + Cost (ck) 20% MISSING Hosting + HTTPS feed 10% MISSING
“Scheduler templates=60%” 表示:模板已写,但还没安装到 launchd 并跑一周验证稳定性。

Done (可复跑)

  • projects/gh-issue-29-ai-digest-podcast/pipeline/:collect → dedupe/score → sqlite → render
  • 默认 offline:不依赖外网也能每天交付(基于本机已有 JSON)
  • WeChat/XHS 保持“半自动”:只产出文件/包

Missing (可维护/可分发)

  • 把 sources 从“示例”变成“规则”:YouTube channels、GitHub queries、关键词库
  • LLM 摘要 + ck/成本账本:让 Digest 与播客更像“栏目化内容”
  • 托管与 HTTPS feed:让播客可在任何 App 订阅

Skills Map (System → Modules)

把“系统级 skills”放回到管道图里:你已经具备哪些积木?

hot-search-pipeline 热搜抓取 → 归档 → 看板输出 wechat-draft-publish 公众号草稿箱发布(含 IP 处理) xhs-playwright-cli / publish_xhs.js 小红书采集/半自动发布 best-minds-board 自动归档 + 看板聚合 Sources refresh search-flow outputs / RSS / API Pipeline (SQLite) items/runs/metrics + renderers Draft packages WeChat MD / XHS content.yaml Board / Reports docs/best-minds-board/
核心思路:把系统级能力当作“可插拔模块”,本项目只补齐中间层与统一输出。

Next Actions

从“能跑”走向“稳定 + 可分发”,按收益/风险排序

1) 补齐 Sources(当天收益最高)

  • 把 YouTube channels 与 GitHub queries 填进 config/sources.yaml
  • 再跑一次:--enable-network(可与 offline 对照)

2) LLM 摘要 + ck 账本(让内容更像栏目)

  • 摘要:每条 1 句“发生了什么 + 为什么重要”
  • 记账:tokens / cost / failures / latency

3) 托管与 HTTPS feed(让播客可订阅)

  • 上传 mp3 + feed.xml 到 R2/S3
  • PODCAST_BASE_URL 改成公网域名

One next action(建议现在就做):补齐 projects/gh-issue-29-ai-digest-podcast/config/sources.yaml 里的 YouTube channels,并跑一次 python3 projects/gh-issue-29-ai-digest-podcast/run_mvp.py --enable-network --date 2026-01-30

Best Minds (Why this structure works)

用“谁最懂这件事”的视角校验下一步不要走偏

Martin Kleppmann

先把内容当成数据系统:统一 schema、可追溯、可重跑(idempotent),再谈分发。SQLite 足够做 MVP 与复盘。

Charity Majors

自动化的关键在“坏了能否 1 分钟定位”:每一步要有 metrics、失败原因要能落盘;发布必须有开关与审阅点。

Podcast Producer

播客不是“摘要朗读”,而是“栏目化脚本 + 节奏控制 + show notes”:先固定结构,再迭代语言与停顿。

“先闭环,再优化:把不确定性留在可选开关里。”
Closing Summary · Next: fill sources.yaml