我以为自己在搭一个AI应用。实际上,我在造一台带嵌入向量的垃圾分拣机。
Pulse的初衷很简单:做一个个人AI信息流,用来追踪AI工程领域的最新动态。素材从RSS、GitHub、arXiv和Gmail邮件列表里拉取,清洗文字,丢给大模型做摘要和分类,存为嵌入向量,最后在手机应用里提供搜索、书签、摘要、趋势、小测验和问答模式。梦想中的架构图画出来特别优雅,透着一种“先画图再让现实进场”的自洽感。真实版本则完全是另一副模样。
![]()
接踵而来的教训很清晰:模型本身并不难,难的是把干净的输入送进模型。“信息源乱得一批”这个描述,已经算相当客气。
Pulse从四类来源采集内容。第一种是RSS/Atom订阅源。没碰过畸形XML之前,你根本不知道这东西能有多“讲究”。有的源一切正常,有的只返回摘要,有的崩了一天又若无其事地恢复,行事风格相当成熟。
GitHub相对干净,官方Search API给的是结构化JSON。我把仓库搜索作为AI相关项目的兜底渠道,按星标排序、限制返回数量。即便如此,干净的API也得有防御性处理——某个仓库可能没有描述,某条URL可能无效,API本身也可能挂掉。一条好的采集管线,不能因为某个仓库玩神秘就整个垮掉。
arXiv更友好,它提供了`search_query`、`start`、`max_results`、`sortBy`和`sortOrder`等完整参数。我用类别查询并按提交日期排序。但arXiv的摘要仍需清洗——LaTeX代码必须剥离。API给的是半成品原料,不是可直接上桌的菜。
真正让人五味杂陈的是Gmail。
Gmail邮件列表属于典型的“初见惊艳,处理要命”。信息源本身极好,每天精选的人工策展内容能迅速拉高知识水位。但一条人类眼中“这里有五个有趣的AI链接”的邮件,在解析器眼里是一堆乱码:隐藏预置头、赞助商区块、退订链接、浏览器查看链接、社交分享按钮、CSS、HTML表格、正文、页脚、又一段页脚、法律声明,以及再来一条退订,仿佛生怕你嫌不够多。
Pulse用的是Gmail API而非IMAP,`users.messages.get`端点拉取消息数据时,我刻意只申请只读权限——这个应用没有任何理由去动我的收件箱。采集查询只盯住已选定的邮件列表发件人、未读消息和近期时间窗口。每封邮件先完整拉取、完整解析,再转化为一篇或多篇候选文章。管道里不得不处理嵌套MIME结构、纯文本与超文本分支、重定向链接、赞助商区块、纯推广邮件、以及原文到此忽然截断的那一堆意外——你永远不知道下一封邮件会在什么地方给你埋一个崭新的坑。
跑通整条管线之后最大的感触是:做AI信息流这件事,真正花在模型上的时间微乎其微,绝大部分精力都砸在了“让输入别太离谱”这件事上。干净的数据从来不是天生就在那的,它是从噪声里一点一点扒下来的。
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.