把你存过的东西,变成替你认出下一个该看的东西
这份稿子回答两类问题:要做什么(第 1–5 节:问题、判断、定下来的事、查证过的事实),和具体怎么做(第 6–12 节:周报格式、够格判定规则、标签体系、画像算法、每个界面的规则、异常处理、本地跑起来是什么形态)。界面长什么样不在这里——那是可点原型稿,两份配着看。
凡是带 默认值 的数字都是我替你定的起始值,不是需求。挑出来改就行,不改也能开工。
结论先说:你要的不是一个更好的收藏夹。你的收藏在这套系统里主要用来提炼出「你是谁、在关心什么」,然后拿这个去认下周该看的新项目。收藏本身能不能搜到,是副产品。
事实层部分验证外部接口字段逐条查过官方文档(X 与 GitHub)。本系统一行代码没写,标「待建」的字段都还不存在
需求层来自四轮追问每条决定都有 2026-08-25 对话里的原话出处,下面第 4 节逐条列了
设计层在另一份稿12 个场景 + 7 条状态图鉴在 info-hub;这里写的是那些界面背后的规则(第 10 节逐个对应)
验收层有验收标准 + 5 条待澄清做不到的单列在第 16 节,没定的在第 17 节。默认值全部标了出来,可逐条改
问题
你的收藏现在是什么状态
四个痛点你全中了,而排第一的那个决定了整个方案的方向:不是找不到,是根本不会回去找。
基本再也没打开过收藏即归档即遗忘。这一条决定了:做一个更好的收藏夹没用——再整齐的收藏夹也还是个等你去翻的收藏夹
想找时找不到明知道存过,翻不出来
散在好几个平台记得看过,不确定在哪个 app 里
能找到但用不上翻出原文还得重看一遍,才想起当时为什么存
为什么这条排序重要:如果主要痛点是「找不到」,那该做检索;但主要痛点是「不会回去找」,那该做的是主动把东西推回你眼前。这是两个完全不同的产品。
关键判断
收藏是原料,不是目的
你选的周报主体是「新项目对照我的兴趣」。把它和上面那条痛点拼起来,整套系统真正的产物只有一个:每周那份周报。
这套系统是
- 一个替你认人的东西:拿你存过的内容当判据,去认下周值得看的新项目
- 产物是一份你愿意坐下来读完的周报
- 收藏库是它的原料仓,顺带能搜
这套系统不是
- 不是一个更整齐的收藏夹——那个你已经证明自己不会去翻
- 不是一个全文检索工具——语义检索你已经决定一期不做
- 不是多平台聚合器——抖音一期不接
所以一期的验收标准换了:不是「你能搜到三个月前那条」,而是「你收到的第一份周报,让你觉得值得坐下来读完」。
机制
怎么转
一期就是这整张图。关键是右边那条回边——没有它,系统永远停在第一版画像上,推荐不会越用越准。
菱形那一步是整套系统的防废话机制。让 LLM 打分,它会给什么都打七分,最后推给你一堆泛泛相关的东西,你看两周就不看了。唯一的解法是强制它说人话:每条推荐必须引用你具体哪条收藏,引不出的直接丢弃。
需求层
四轮追问定下来的事
每条都有原话出处。没写在这里的,就是还没定的(见第 10 节),不要当成已定的需求往下做。
X 书签走官方付费 API你选「接受,就走官方 API」。按量计费、合规、可全自动,不会因平台改版失效
抖音一期不做你选「抖音先不做」。无开放接口,只能 cookie 抓取
打标签 / 摘要 / 打分用本地订阅你选「就用我们本地的 codex/claude 订阅」,不另开按量 API key
跑在本机你选「用本地的 AI,代码也可以放在本地 run」
语义检索一期不做你选「一期先不做」。订阅额度只能做生成、做不了 embedding,见第 9 节
周报主体 = 新项目对照我的兴趣你从四个候选里选了这一个。它决定了收藏库主要用来当画像原料
周报是坐下来认真看的你选「坐下来认真看」,所以周报可以长、可以分主题、可以带分析,不是手机上扫一眼的五条
整理要到「能提炼出观点」不只是归类,要能说出这批内容合起来意味着什么
观点服务于三件事找产品灵感 · 看行业走向做判断 · 个人成长。不含写公众号——你没选那一项
开局兴趣画像AI Agent / 开发者工具 · 产品设计 / 交互 · 创业 / 商业模式。后续从收藏自动修正
存量几百条以内回填一次跑完,不需要分批策略
输入只加「网页 / 文章随手存」不含微信收藏、不含自己写的笔记——这两项你没选
事实层
调研出的四个事实,都改了设计
动笔前逐条查了官方文档。其中两条如果不提前发现,做到一半会返工。
X 不返回「你什么时候收藏的」接口只给推文自己的 created_at。更麻烦的是:回填时所有历史书签的「首次见到时间」都是回填当天,历史书签没有真实时间线。所以周报里能不能说「你三个月前存过」,成了待澄清第 2 条
回填进度不能显示百分比X 分页只告诉你有没有下一页,不告诉你总共多少条。任何进度条比例都是编的。原型里那一屏明确不放百分比,并把理由写在界面上
GitHub 没有官方 trending 接口trending 只能解析 HTML 页面(约 6 小时更新),会随改版失效。官方 /search/repositories 是稳的替代,但排序逻辑不同——待澄清第 3 条
成本不是均匀的,差 5 倍读你自己的书签 $0.001/条;读你关注的人的推文 $0.005/条。每天 200 条就是 $30/月,而其余部分全年不到 $5——待澄清第 1 条,最该先定
下面是查证过的接口清单,每条都能指到官方文档:
- X 书签
- GET /2/users/{id}/bookmarks · max_results 100 · pagination_token · OAuth 2.0 PKCE
- X 可取字段
- id / text / created_at / author_id / entities / public_metrics / lang / conversation_id
- X 计费
- owned reads $0.001 · Post:Read $0.005 · User:Read $0.010
- GitHub
- /search/repositories 按 created+stars · 认证后 20 次/分钟
产品规格 · 核心
周报长什么样
周报是这套系统唯一的产物。它的规格就是这个项目的规格——下面每一条都要能直接实现出来。
| 项 | 规格 | 为什么这么定 |
| 产出形态 | 每周一份新建飞书文档,不追加默认值 | 每期独立、可单独分享和回看;追加会让文档越来越长,翻旧期要滚很久 |
| 标题格式 | 【周报】8月18日–8月24日 · 7 条默认值 | 标题里带条数,你在飞书列表里不点开就知道这周多不多 |
| 推荐条数上限 | 8 条默认值 | 每条含理由约 100 字,8 条约 1000 字,十分钟能读完。你要的是"坐下来认真看",不是扫一眼 |
| 条数下限 | 没有下限,够几条发几条默认值 | 凑数是这类产品最常见的死法。见下一节的硬闸 |
| 0 条时 | 照发,只写"这周没有"默认值 | 不发的话,你分不清"这周确实没内容"和"系统坏了" |
| 排序 | 按引用强度降序,同分时新项目优先默认值 | 引用强度 = 引用到的收藏条数 × 那些收藏所属主题在画像里的权重 |
| 去重 | 同一项目 90 天内不重复推默认值 | 热门项目会连续几周出现在榜单上,不去重会让周报看起来在复读 |
一份周报由四块组成,顺序固定:
① 扫描总览(一行)扫了 N 个候选 · M 条够格 · 丢弃 K 条。丢弃数要露出来——它是你判断判定标准松紧的唯一依据
② 推荐列表(主体)按下面的字段表逐条展开。这是周报的全部价值所在
③ 这周你收了什么(一行摘要)新增 N 条 + 主题分布一句话。让你知道这周喂进去了什么
④ 画像变化(有才出现)本周反馈改了哪些主题的权重、有没有冒出新方向
每条推荐包含这些字段,缺一不可:
| 字段 | 内容 | 来源 |
| 序号 | 排序位次 | 计算 |
| 项目名 | 原名,不翻译 | 源接口(真实) |
| 来源标记 | 一期只有 GitHub,先留字段 | 源接口(真实) |
| 热度 | star 数与本周增量 | 源接口(真实) |
| 这是什么 | 一句话,不超过 50 字默认值,只说做什么不评价 | LLM 从项目描述改写(待建) |
| 为什么推给你 | 2–4 句默认值。必须包含两个成分:那条收藏当时在讲什么、这个项目对上了哪一点 | LLM(待建) |
| 引用 | 1–2 条收藏默认值,带作者与推文发布日期,可点回原文 | 收藏库 id(待建) |
| 原链接 | 项目地址 | 源接口(真实) |
| 反馈 | 有用 / 不相关 / 早知道了 | 写回画像(待建) |
一条推荐实际读起来的样子(内容为示意,不是需求指标)
1 · mem-layer GitHub · 1,240 ★(本周 +380)· TypeScript
把 agent 的长期记忆拆成三层,检索时按层加载,作者说能把上下文占用压到三分之一。
为什么推给你
你存过一条讲「agent 记忆该不该分层」的推文,当时那条底下在争分层策略,没人给出能跑的实现。这个项目正好把那套做出来了。
↩ 引用你的收藏 · @swyx · 推文发于 3月12日
发送时机没定,进了待澄清第 4 条。因为"坐下来认真看"要对上你真有整块时间的那个点,我猜不出来。
产品规格 · 核心
什么叫「够格」
这一节是整套系统的成败所在。让 LLM 打分,它会给什么都打七分,最后推给你一堆泛泛相关的东西,你看两周就不看了。
三道闸,全过才够格,顺序固定:
闸一 · 能引到具体收藏(硬闸)至少能引到 1 条你的具体收藏条目。引不到就丢弃,不管这个项目多热门。这是二元判定,不是打分
闸二 · 理由必须点出具体关系(硬闸)理由要同时包含「那条收藏当时讲了什么」和「这个项目对上了哪一点」。只说"都属于 Agent 方向"不算——那是主题相同,不是具体关系
闸三 · 不在 90 天去重窗口内推过的项目不再推
判定时喂给模型的是收藏原文,不是画像。
这样做
- 候选项目的名称 + 描述 + README 摘要,对比收藏库里的具体条目
- 先用标签和关键词把候选缩到十几条相关收藏,再让模型逐条判断
- 输出必须带上引用了哪条收藏的 id,能反查
别这样做
- 别拿画像去判定——画像是聚合后的抽象("你关心 Agent 架构"),用它只能得出"主题相同"这种笼统关系,正好是闸二要挡掉的
- 别让模型直接输出一个 0-100 的相关度就完事
过了硬闸之后才打分,而且必须给分数锚点。没有锚点的打分一定会挤在 70-80 之间。
| 分档 | 什么情况给这个分 |
| 85–100 | 你收藏里明确提出过的问题 / 需求,这个项目直接做了出来默认值 |
| 70–84 | 和你收藏讨论的同一个具体问题相关,但角度或成熟度不同默认值 |
| 60 以下 | 只能说出主题相关,说不出具体对上哪一点 —— 这一档直接丢弃,不进周报默认值 |
还要有负面清单,明确写进判定规则:
不因为热度高就加分star 多、涨得快,都不构成"跟你相关"
不因为标题里有关键词就加分项目名或描述里出现 agent、AI、workflow 这些词,不等于对上了你的具体收藏
不因为同属一个大领域就加分"都是开发者工具"是分类,不是关系
宁可漏推不可错推拿不准时判不够格。漏掉一个你自己也会刷到,错推一个消耗的是你对周报的信任
被丢弃的也要存下来存丢弃原因,你可以随时抽查判定是不是太严。但入口要写"不推荐查看"并默认折叠——一旦被当成正式列表看,宁缺毋滥就白做了
这一节的分档与负面清单做法,参考了 GitHub 上 huawolf/news-agent 的打分 prompt 设计(它把 quality 与 interest 拆成两个分、给每档写明锚点、并明确列出"不要因为标题包含 X 就自动高分")。差别是:它的偏好来自用户手写的偏好文本,我们的判据是你收藏库里的具体条目,所以我们能多加"必须引得出出处"这道硬闸。
产品规格
收藏怎么加工
每条收藏进库后要产出三样东西:标签、一句话摘要、推测的收藏理由。标签体系是重点——它直接决定画像准不准。
标签用「先自由生成、再收敛成词表」。
为什么不用固定词表
- 你的关注方向会变。固定词表半年后就盖不住新方向,还会把新东西硬塞进旧类目
为什么不能纯自由生成
- 几百条收藏会产出几百个只用过一次的标签,聚合不出主题,画像就成了一盘沙
| 项 | 规格 |
| 第一轮 | 全库自由打标签,不给词表 |
| 第二轮 | 合并同义标签("agent 记忆" / "长期记忆" / "memory" 归一),产出词表 |
| 之后 | 新条目优先复用词表;确实盖不住时才新增,新增累计到 10 个触发一次词表重整默认值 |
| 每条标签数 | 1–3 个默认值 |
| 词表规模 | 控制在 30–60 个默认值,超了就再合并 |
| 标签禁止 | 禁止"技术""产品""思考"这类空泛分类词。标签要具体到能一眼认出这条讲什么 |
| 产出 | 规格 | 约束 |
| 一句话摘要 | 不超过 40 字默认值 | 只说这条讲了什么,不评价、不引申 |
| 推测的收藏理由 | 1–2 句默认值 | 界面上必须标注「AI 推测 · 平台没有记录」。依据是同期收藏的其他条目 + 这条的独特点 |
| 失败处理 | 单条加工失败不阻塞全库,标记为"未打标"稍后重试默认值 | 库列表里"未打标"要能筛出来,你能看见有多少条没处理成功 |
产品规格
兴趣画像怎么算、怎么改
画像是推荐的唯一判据,但它是 AI 归纳的、必然有偏差,所以必须能看见、能改。
| 项 | 规格 |
| 结构 | 一组主题,每个主题有:名称 · 关联收藏条数 · 权重 · 是否启用 |
| 怎么生成 | 把标签词表聚合成主题(多个近义标签归一个主题) |
| 权重初值 | 该主题的收藏条数 ÷ 总条数默认值 |
| 多久重算 | 新增收藏满 20 条时全库重算一次默认值 |
| 发周报的下限 | 库里少于 100 条时不发周报,只提示画像还立不住默认值 |
反馈怎么改画像(这是那条回边的具体规则):
| 你点了 | 发生什么 | 为什么 |
| 有用 | 该推荐引用的收藏所属主题,权重 ×1.05默认值 | 正反馈要轻,避免几次点击就把画像带偏 |
| 不相关 | 同上主题权重 ×0.9默认值 | 负反馈略重于正反馈:错推的代价比漏推大 |
| 早知道了 | 不改权重默认值,只把该项目加入去重名单 | 这不是兴趣问题是时效问题。你早知道说明推得对,只是晚了 |
| 在画像里关掉某主题 | 权重置 0,不再作为判据;收藏不删 | 一次性查资料存的东西(比如某段时间查加密行情)不该长期污染推荐 |
| 生效时机 | 下一期生效,不重算本期默认值 | 本期已经写进飞书文档,改了会对不上 |
上面这些系数(1.05 / 0.9 / 20 条 / 100 条)都是我拍的起始值,没有依据说它们最优。跑两个月看反馈曲线再调,PRD 里写死是为了让一期能开工,不是说它们对。
产品规格
12 个界面各自的规则
界面长什么样在可点原型里;这里写的是每个界面背后的判断规则,两份对着看。
| 界面 | 什么时候出现 | 关键规则 |
| 周报主体 | 够格 ≥1 条 | 按引用强度排序,最多 8 条;每条必须有引用链 |
| 本周没几条 | 够格 < 3 条默认值 | 显式说明"这不是故障";被丢弃的入口标注"不推荐查看"并折叠 |
| 单条展开 | 点任一推荐 | 摊开完整引用链:被引的每条收藏显示原文、作者、发布日期、标签 |
| 反馈之后 | 点了三个反馈按钮之一 | 当场说清改了什么(哪个主题权重变了);提供撤销;标明下期生效 |
| 库列表 | 库里有内容 | 按标签筛;每条标注"收藏时间未知";"未打标"可单独筛出 |
| 单条详情 | 点任一收藏 | 推测理由必须标"AI 推测";显示这条被周报引用过几次 |
| 搜索结果 | 输入关键词 | 命中数 + 说明匹配的是原文还是标签;提示一期只有关键词匹配 |
| 搜索无结果 | 命中 0 | 不能只写"无结果":要区分"你没存过"和"系统搜不了",并给两条出路 |
| 画像总览 | 库 ≥100 条 | 主题分布 + 明确写"这是 AI 归纳的不是你填的";显示最近在变的方向 |
| 修正画像 | 点修正 | 关闭主题不删收藏;说明关掉后的后果 |
| 首次接入 | 未授权 | 把要花的钱和要授的权当场讲清;标明抖音不在一期 |
| 回填进行中 | 回填任务在跑 | 不显示百分比(拿不到总数);打标签那步可以显示 x/y,因为总数已知 |
产品规格
出错了怎么办
失败必须分两类:要你动手的,和等系统重试的——这决定你现在该不该起身。
| 情况 | 怎么处理 | 给你看什么 |
| X 授权过期 | 停止同步,等你重新授权 | 要你动手。写明最后一次成功同步的时间 |
| credits 用尽 | 停止拉取,已入库的不受影响 | 要你动手。写明本月已花多少、还差多少条没拉 |
| 候选源挂了 | 一期只有 GitHub,抓不到就本周不推 | 周报里注明"本周 GitHub 没抓到",不静默 |
| 打标签失败 | 标记未打标,下次重试默认值 | 库列表可筛"未打标" |
| 原推已删除 | 保留我们回填时存的正文 | 标注"原推已删除",整条推荐不因源站删帖而消失 |
| 本地模型没额度 | 暂停加工,已排队的保留 | 要你动手。提示可换另一个 runner 跑同一批 |
一条通用规则:任何"少了东西"的情况都要在界面上说出来,不许静默跳过。静默跳过会让"系统坏了"和"这周确实没有"长得一模一样。
技术框架
本地怎么跑、数据存在哪
你选了"跑在本机、用本地订阅",那么整套东西的形态就定了:一个定时触发的脚本 + 一个 SQLite 文件,没有常驻服务、没有数据库服务器、没有容器。
为什么不做常驻服务:
定时脚本,跑完退出
- 一天就跑几次,常驻纯属浪费
- 崩了不用管,下次定时照跑
- 要调试就手动执行同一条命令,行为一致
常驻服务的代价
- 要管进程存活、要开端口、要写健康检查
- 挂了你不会知道,等发现时已经断了几天
- Mac 睡眠 / 重启都要额外处理
数据存在一个 SQLite 文件里,九张表:
| 表 | 存什么 | 关键字段 |
| items | 收藏条目本体 | source · source_id · text · author · created_at · first_seen_at · url · raw_json |
| item_tags | 条目的标签 | item_id · tag |
| item_ai | AI 加工结果 | item_id · summary · guessed_reason · model · updated_at |
| themes | 画像主题 | name · weight · muted · updated_at |
| theme_tags | 主题由哪些标签组成 | theme_id · tag |
| candidates | 每天扫来的新项目 | source · source_id · name · desc · url · metrics_json · seen_at |
| verdicts | 够格判定结果(含不够格的) | candidate_id · verdict · score · reason · cited_item_ids · created_at |
| digests | 每期周报 | period_start · period_end · doc_url · created_at |
| digest_items | 周报里的每条推荐与你的反馈 | digest_id · candidate_id · rank · feedback |
raw_json 整条留着接口返回的原始数据不丢。以后想用新字段(比如书签文件夹)不用重新花钱拉一遍
first_seen_at 是我们自己造的X 不给收藏时间,这个字段是"我们第一次在同步里见到它"。回填进来的历史书签这个值全是回填当天——第 17 节待澄清第 2 条就是问这个怎么用
不够格的判定也存存了才能抽查判定是不是太严。不存的话你只能看见推荐,看不见系统丢了什么
为什么是 SQLite 不是 Postgres:单用户、几百到几千条数据、要跟着 Mac 走。一个文件,拷走就是备份,出问题用任何工具都能打开看。上 Postgres 意味着多一个要照顾的服务,换不来任何东西。
每天那一次的完整流程:下面这张是照着能实现的那版——每步的输入输出、失败往哪走、结果写进哪张表都标了。
七个阶段对应的要点:
① 同步 · 只拉增量从 sync_log 取上次同步时间,只拉之后的新书签。按 source_id 判重,避免重复写入。raw_json 整条存下来,以后想用新字段不用重新花钱拉
② 加工 · 只处理没打过标的查 item_tags 为空的条目,分批调本地 CLI。单条失败不阻塞整批,标记未打标明天重试
③ 画像 · 不是每天都重算新增满 20 条才重算一次。没满就跳过,沿用上次画像——画像本来就不该天天抖动
④ 候选 · 拉完先去重GitHub Search 按 created + stars 过滤,写 candidates 前先对照 digest_items 滤掉 90 天内推过的
⑤ 判定 · 逐个候选走一遍三道闸先用关键词和标签把相关收藏缩到十几条,再调 CLI 判定。够格的和不够格的都写进 verdicts,不够格的带上原因,你随时能抽查判定是不是太严
⑥ 周报 · 只有周日多这一步其余六天跑到这里就结束了。周日取本周够格的排序、生成飞书文档,上限 8 条,0 条也照发
⑦ 反馈 · 不是定时跑的你点按钮时才发生,写 digest_items.feedback 并改 themes.weight。不重算本期——本期已经写进飞书文档,改了会对不上
换 runner 怎么办:第 2 步和第 4 步调 CLI 的地方走同一个薄封装,claude 没额度就换 codex 跑同一批,脚本不用改。这也是你在 CLAUDE.md 里定的硬规矩——不锁死单一 runner。
这一节是框架不是技术设计。表结构、目录布局、定时方式都还能改;真正的技术设计(索引怎么建、CLI 封装的接口长什么样、失败重试的退避策略)该由 TechLead 出,我这里只把"本地长什么样"说清楚,让你能判断这个形态对不对。
范围
一期做什么
一条链路走通:X 书签 → 打标签 → 提炼画像 → 每天扫新项目 → 够格的进周报 → 飞书。
接入X 官方 API 一次授权,回填全部历史书签(含你自己发的和转发的——同属 owned reads,一起抓)
加工每条打标签 + 写摘要 + 推测「你当时可能为什么存」。用本地 claude / codex 订阅批量跑,一晚上跑完
画像聚合成主题分布,你能看、能关掉不要的主题
监控只扫 GitHub,对照画像判定够不够格。一期就这一个候选源
周报每条必须引用你具体哪条收藏,引不出就丢弃。写进飞书文档
库能按标签浏览、能全文搜(关键词,非语义)
一期验收(三条全中才算成):① 第一份周报你愿意读完;② 十条推荐里至少三条你真会点开;③ 每条推荐都能引用到你具体的收藏,引不出的已经被丢掉而不是硬凑上去。
范围
二期、三期
一期做完你就知道这东西对你有没有用。没用就停,成本是几天加不到一美元。
二期 · 网页文章随手存接 Karakeep(自托管,28k stars)。它不可替代的地方是浏览器插件、移动端保存、页面快照防链接腐烂——这些自建最贵。一期的 SQLite 数据一次性灌进去。验收:你看到好文章会顺手存,而不是想起来才存
三期 · workbench 页面把周报和库搬到 workbench 上。界面价值没验证前不接前端
为什么一期不上 Karakeep:它解决的是「存得整齐」,而一期要验证的是「周报有没有价值」。几百条书签用 SQLite 完全够,先把最值钱的那条链路跑通。
成本
花多少钱
一期几乎零成本,唯一会让它变贵的是待澄清第 1 条。
- 回填历史书签
- 约 400 条 × $0.001 = 不到 $1,一次性
- 日常增量
- 每天几条,一年不到 $2
- 打标签 / 摘要 / 打分
- $0,走你的 claude / codex 订阅
- GitHub
- $0,公开接口免费
- 部署
- $0,跑在你自己的 Mac 上
- 「关注的人在聊什么」
- 每天 200 条 ≈ $30/月 —— 是上面全部加起来的几十倍,待定
验收层
做不到的,单列出来
把做不了的划掉,比把能做的说满更有用。下面这些不是「以后补」,是这一期里界面上根本不会出现的东西。
你什么时候收藏的(平台不给)
历史书签的真实时间线
匹配度百分比(没有校准来源,只做够格 / 不够格)
回填进度百分比(拿不到总数)
你为什么收藏某条(只有 AI 推测)
已读 / 未读
模糊问法搜索(一期只有关键词)
抖音 / 小红书 / 微信的任何数据
画像置信度
GitHub trending 的官方名次
关于语义检索为什么做不了:claude / codex 订阅只能做生成类任务,做不了 embedding。要么本机跑个小模型(几百 MB,零成本),要么单独开个 embedding 接口。你选了一期先不做,所以「跟 XX 相关的」这类问法一期搜不到。
待澄清
还没定的五件事
这五条我没有替你假设答案。第 1 条最该先定,它决定这个项目是「几乎免费」还是「每月一顿饭钱」。
1 ·「你关注的人在聊什么」这条源做不做?按 Post:Read 计费 $0.005/条,是读自己书签的 5 倍。每天 200 条 ≈ $30/月,而整套系统其余部分一年不到 $5。做或不做、拉多少条,直接决定项目的成本量级
2 · 周报里能不能说「你三个月前存过」?回填的历史书签没有真实收藏时间,只有推文的发布时间是真的。允许近似的话措辞要改成「你存过一条 3 月发的推文」;不允许就只能说「你存过」,周报会损失一部分说服力
3 · GitHub 走官方 Search API 还是抓 trending 页面?官方接口稳定但排序逻辑不同(按 stars 和创建时间,不是 GitHub 自己的热度算法);抓页面更贴近「热门」但会随改版失效。这决定「新项目」的定义和维护成本
4 · 周报什么时候发?低于几条就不发?发送时机要对上你真有整块时间的那个点。另外宁缺毋滥要有下限:够格 0 条时是照发一份空周报,还是攒到下周?这决定「这周没内容」会不会被误当成系统坏了
5 · X 书签文件夹(Premium)能不能通过 API 拿到?尚未核实。能拿到的话,你自己分的文件夹比 AI 打标签准得多,画像质量会明显提升;拿不到就只能全靠 AI 归纳。这会改变打标签那一步的设计
开工前
只有你能做的三件事
这三件我做不了,得在开工前备好,否则长任务会卡在权限上。
1 · 在 X Developer Console 建 app拿 Client ID,只需要 bookmark.read 和 tweet.read 两个权限
2 · 充值 credits按量计费,充 $5 够用一年多
3 · 走一次 OAuth 授权跳到 X 点一次同意,拿到 refresh token 之后自动续期
界面长什么样、每个状态怎么处理,看
可点原型稿——12 个场景可走查,含空态、失败态、宁缺毋滥态。
右下角可以点「批注」,指着任意一段提意见——导出的 Markdown 带精确定位。