← Leo Labs

30 分钟翻消息 → 3 分钟结构化阅读:让 AI 搭一个只懂你的日报系统

从手动筛选到个性化简报,用 Claude Code + Gemini 搭建智能信息过滤架构

每天早上打开终端,输入 /morning,等 3 分钟。出来的不是一份「AI 新闻摘要」,而是一份完全基于我当前持仓、在跑的项目、本周待办生成的个性化简报。

今天的结果:17 篇 RSS 文章 + 10 个 TG 频道 → 筛出 22 条相关内容 → 5 篇深度解读,每条都带明确的行动项。

这篇文章分享一下它的架构和设计思路。

问题

我的信息源不少:20 多个 TG 频道、RSS 订阅的技术博客和新闻、X 上的内容。每天产出几十条信息,但真正跟我相关的可能不到 10 条。

之前的方式是手动翻 TG,瞄一眼标题,凭直觉决定看不看。问题很明显:

我需要的不是「更聪明的 RSS 阅读器」,而是一个理解我的上下文、帮我做第一层筛选的系统。

架构

核心是一个漏斗模型,三层过滤:全量扫描 → 相关性过滤 → 深度解读

数据源

两个自动化的信息管道,每天定时生成:

两份日报都是 Markdown 文件,落在 Obsidian vault 里。这意味着 Claude Code 可以直接读取。

个性化上下文

这是整个系统最关键的部分。 Claude 在扫描时,同时加载 3 个上下文文件:

有了这些上下文,Claude 不是在「总结新闻」,而是在回答一个具体的问题:今天这些信息里,哪些跟我正在做的事有关?

混合 AI 架构

这个分工不是为了炫技,而是实际的成本考量。让 Claude 去抓 5 篇文章原文再逐篇分析,token 消耗会很高。Gemini Flash 便宜快速,适合做这类「给定框架 + 分析内容」的任务。

相关性过滤

Skill 里定义了 7 个匹配维度。每条信息按命中的维度数分为三层:强相关(2+ 维度)、弱相关(1 维度)、无关(跳过)。

比如今天 insiders.bot 的一条信号 —「US strikes Iran 智能资金大量押 No」— 同时命中了「持仓相关」和「时效窗口」两个维度,被标为强相关,并且在输出里直接标注了我持有的方向和浮亏。

这种交叉比对是手动翻 TG 永远做不到的。

输出格式

最终输出分 4 个部分:

「发推素材」这个分类是意外的收获。简报在筛选过程中自然会发现适合发推的话题和角度,省去了单独找选题的时间。

实现:Claude Code Skill

整个系统是一个 Claude Code Skill。Skill 本质上就是一个结构化的 prompt 文件(skill.md),定义了:

Skill 的好处是可复现。不像聊天式 prompt 每次效果不一样,Skill 把流程固化了,每天跑出来的格式和质量是稳定的。

核心代码其实就两个文件:

加上两个数据管道(x-engine + tg-reader),总共不到 500 行代码。

几个设计决策

为什么不用纯 LLM 做全流程?

试过。让 Claude 直接读所有 TG 频道消息 + RSS 全文,一次性分析输出。问题是 context window 不够用(或者够用但太慢太贵),而且 Claude 对「筛选」比「分析」更擅长。拆成两步之后,筛选的准确率和分析的深度都提升了。

为什么用文件而不是 API?

所有数据交换都通过 Markdown 文件(日报、portfolio、projects)。文件的好处是可检查、可编辑、可版本控制。如果某天觉得筛选漏了什么,直接看文件就能 debug,不需要翻 API 日志。

为什么 0-10 篇而不是固定 5 篇?

有些天确实没什么值得深读的。强凑 5 篇只会降低信噪比。「不凑数」是刻意的设计。

实际效果

跑了几天下来,最明显的变化:

不完美的地方:Gemini 偶尔抓不到原文(付费墙),深读分析的质量取决于原文抓取的完整性。

总结

Morning Skill 不是什么高深的技术。漏斗模型、维度匹配、混合 AI 架构 — 每个单独拿出来都很简单。

但它解决了一个真实的问题:让 AI 不再是「通用助手」,而是一个理解你的上下文、帮你做筛选和判断的 copilot。

关键不在 Skill 的 prompt 写得多好,在于你投进去的个人上下文有多具体。 portfolio、项目状态、本周目标 — 这些才是让 AI 输出从「通用」变成「有用」的燃料。

如果你也在用 Claude Code,试试把你的工作上下文结构化成文件,喂给它。效果可能会超出预期。