?bào)自動(dòng)化實(shí)戰(zhàn):從信息抓取到智能推送的完整鏈路)
1. 當(dāng)日?qǐng)?bào)變成一種產(chǎn)品我為什么要做AI日?qǐng)?bào)自動(dòng)化每天早上八點(diǎn)半我手機(jī)里會(huì)準(zhǔn)時(shí)彈出一條消息不是新聞推送也不是社交軟件提醒而是一份我自己搭建的AI日?qǐng)?bào)。它包含過(guò)去24小時(shí)內(nèi)我關(guān)注的幾個(gè)信息源里最重要的動(dòng)態(tài)按主題分好類(lèi)每條附一句話(huà)摘要和原文鏈接。整個(gè)過(guò)程沒(méi)有人工干預(yù)從抓取、篩選、摘要到排版推送全自動(dòng)跑完。這件事的起點(diǎn)其實(shí)很樸素。2025年下半年開(kāi)始AI領(lǐng)域的信息密度到了一個(gè)讓人窒息的程度——每天醒來(lái)打開(kāi)信息流幾十條新模型發(fā)布、新論文、新工具、新融資刷完一圈半小時(shí)沒(méi)了真正有價(jià)值的信息可能就三五條。我試過(guò)用收藏夾、用稍后讀、用各種聚合工具最后發(fā)現(xiàn)都解決不了一個(gè)核心矛盾信息是無(wú)限的但我的注意力是有限的。所以AI日?qǐng)?bào)這個(gè)項(xiàng)目本質(zhì)上不是做一個(gè)新聞產(chǎn)品而是做一套信息降噪系統(tǒng)。它的目標(biāo)很明確把每天幾百條原始信息壓縮成一份十分鐘能讀完、且不會(huì)漏掉關(guān)鍵動(dòng)態(tài)的簡(jiǎn)報(bào)。適合誰(shuí)來(lái)參考如果你也在被信息過(guò)載困擾或者你想學(xué)一套完整的抓取-處理-分發(fā)自動(dòng)化鏈路那這套東西可以直接抄作業(yè)。它涉及的技術(shù)棧不復(fù)雜但每一個(gè)環(huán)節(jié)都有坑我會(huì)把踩過(guò)的都講清楚。需要先說(shuō)明一點(diǎn)這篇內(nèi)容里的日期、數(shù)據(jù)、案例都是基于我自己的運(yùn)行環(huán)境做的演示你實(shí)際跑的時(shí)候數(shù)字會(huì)不一樣但方法論是通用的。2. 信息源的選擇不是越多越好而是要可維護(hù)2.1 我為什么砍掉了三分之二的信息源一開(kāi)始我貪心接了十幾個(gè)源各種技術(shù)博客、論文預(yù)印本平臺(tái)、行業(yè)媒體、社交平臺(tái)上的技術(shù)賬號(hào)、甚至幾個(gè)郵件列表。結(jié)果第一周就崩了——不是技術(shù)崩是內(nèi)容崩。同一個(gè)事件被五個(gè)源重復(fù)報(bào)道摘要出來(lái)五條幾乎一樣的內(nèi)容有些源更新頻率極低一周才一條但每次抓取都要花時(shí)間還有些源格式極其混亂解析出來(lái)的正文全是亂碼。后來(lái)我做了一次大清理標(biāo)準(zhǔn)就三條更新頻率穩(wěn)定至少每天有更新否則不值得占用抓取配額。內(nèi)容有獨(dú)特性如果它的內(nèi)容在別處也能看到且別處質(zhì)量更高就砍掉。結(jié)構(gòu)可解析RSS、公開(kāi)API、或者結(jié)構(gòu)規(guī)整的頁(yè)面優(yōu)先純靠正則硬啃的源慎重。最后留下的源控制在8個(gè)以?xún)?nèi)。這個(gè)數(shù)字不是拍腦袋定的而是根據(jù)我每天能消化的信息量倒推的——一份日?qǐng)?bào)如果超過(guò)15條我就讀不完了而8個(gè)源平均每天產(chǎn)出20-30條原始信息經(jīng)過(guò)篩選后剛好落在10-15條這個(gè)區(qū)間。2.2 抓取方式的選擇邏輯不同源要用不同的抓取策略這里沒(méi)有萬(wàn)能方案。我實(shí)際用的是三種方式的組合抓取方式適用場(chǎng)景優(yōu)點(diǎn)坑點(diǎn)RSS/Atom有標(biāo)準(zhǔn)訂閱源的博客、媒體結(jié)構(gòu)穩(wěn)定解析簡(jiǎn)單部分源只給摘要不給全文公開(kāi)API提供接口的平臺(tái)數(shù)據(jù)規(guī)整有速率控制需要處理鑒權(quán)和分頁(yè)頁(yè)面解析沒(méi)有訂閱源的站點(diǎn)能拿到最全內(nèi)容頁(yè)面改版就失效維護(hù)成本高我個(gè)人的優(yōu)先級(jí)是API RSS 頁(yè)面解析。頁(yè)面解析是最后手段因?yàn)樗木S護(hù)成本太高了。我有個(gè)源用了三個(gè)月對(duì)方網(wǎng)站改了一次DOM結(jié)構(gòu)我的解析規(guī)則全廢那天日?qǐng)?bào)直接空了。從那以后凡是能用RSS的我絕不寫(xiě)頁(yè)面解析。提示抓取頻率不要設(shè)太高。我一開(kāi)始設(shè)成每10分鐘一次結(jié)果被某個(gè)源限流了。后來(lái)改成每天固定兩個(gè)時(shí)間點(diǎn)抓取早上7點(diǎn)和晚上7點(diǎn)既夠用又不會(huì)給對(duì)方服務(wù)器造成壓力。2.3 去重的核心邏輯去重是日?qǐng)?bào)質(zhì)量的生命線(xiàn)。我的去重分兩層第一層是URL去重這個(gè)簡(jiǎn)單把URL規(guī)范化去掉追蹤參數(shù)、統(tǒng)一大小寫(xiě)后做哈希比對(duì)就行。第二層是內(nèi)容去重這個(gè)復(fù)雜一些。同一個(gè)事件不同源的報(bào)道URL完全不同但內(nèi)容高度相似。我用的是文本相似度計(jì)算——把標(biāo)題和正文前200字拼起來(lái)做分詞后計(jì)算余弦相似度超過(guò)閾值我設(shè)的是0.75就判定為重復(fù)只保留信息量最大的那條。這個(gè)閾值是調(diào)出來(lái)的。設(shè)0.9太松重復(fù)內(nèi)容還是會(huì)漏進(jìn)來(lái)設(shè)0.6太嚴(yán)會(huì)把不同角度的報(bào)道誤殺。0.75是我實(shí)測(cè)下來(lái)比較平衡的值但你可以根據(jù)自己的源的特點(diǎn)微調(diào)。3. 從原始信息到一句話(huà)摘要處理鏈路拆解3.1 清洗把臟數(shù)據(jù)變成可處理數(shù)據(jù)抓下來(lái)的原始內(nèi)容十有八九是臟的。常見(jiàn)的問(wèn)題包括HTML標(biāo)簽殘留、多余的空格和換行、廣告段落混在正文里、編碼亂碼。這一步不做干凈后面的摘要質(zhì)量一定崩。我的清洗流程是這樣的去HTML標(biāo)簽用解析庫(kù)把HTML轉(zhuǎn)成純文本保留段落結(jié)構(gòu)。去除噪聲段落比如點(diǎn)擊上方關(guān)注我們版權(quán)聲明相關(guān)閱讀這類(lèi)固定模式用規(guī)則過(guò)濾掉。統(tǒng)一空白字符把連續(xù)的空格、換行、制表符統(tǒng)一成單個(gè)空格或標(biāo)準(zhǔn)換行。編碼歸一化統(tǒng)一轉(zhuǎn)成UTF-8處理掉特殊符號(hào)。這里有個(gè)經(jīng)驗(yàn)不要試圖用一條正則解決所有清洗問(wèn)題。我見(jiàn)過(guò)有人寫(xiě)一個(gè)巨長(zhǎng)的正則想一次性搞定結(jié)果維護(hù)起來(lái)是噩夢(mèng)。正確做法是拆成多個(gè)小步驟每個(gè)步驟只干一件事出問(wèn)題了好定位。3.2 摘要生成為什么我不直接用大模型一把梭很多人做摘要的第一反應(yīng)是把全文丟給大模型讓它輸出一句話(huà)總結(jié)。我一開(kāi)始也這么干但很快發(fā)現(xiàn)三個(gè)問(wèn)題成本每天幾十條內(nèi)容每條都調(diào)一次大模型一個(gè)月下來(lái)費(fèi)用不低。不穩(wěn)定同樣的輸入模型每次輸出的風(fēng)格和長(zhǎng)度都不一樣日?qǐng)?bào)看起來(lái)忽長(zhǎng)忽短?;糜X(jué)偶爾會(huì)編造原文里沒(méi)有的信息這在日?qǐng)?bào)場(chǎng)景里是致命的。所以我改成了兩段式摘要第一段是抽取式摘要用傳統(tǒng)方法比如TextRank或者基于詞頻的句子打分從原文里挑出最重要的1-2個(gè)句子。這一步不生成新內(nèi)容只做選擇所以不會(huì)有幻覺(jué)成本也幾乎為零。第二段是改寫(xiě)式壓縮把抽出來(lái)的句子交給大模型讓它壓縮成一句話(huà)并且限定字?jǐn)?shù)我設(shè)的是60字以?xún)?nèi)。因?yàn)檩斎胍呀?jīng)是精選過(guò)的句子模型的發(fā)揮空間被約束住了幻覺(jué)概率大幅降低成本也降下來(lái)了。這個(gè)組合實(shí)測(cè)下來(lái)摘要質(zhì)量比純大模型生成穩(wěn)定得多而且每條的成本降到了原來(lái)的五分之一左右。3.3 分類(lèi)讓日?qǐng)?bào)有目錄感一份好的日?qǐng)?bào)讀者應(yīng)該能一眼看到今天有哪些類(lèi)別的內(nèi)容。我的分類(lèi)體系是固定的五類(lèi)模型與算法新模型發(fā)布、算法改進(jìn)、訓(xùn)練技巧工具與產(chǎn)品新工具、新功能、實(shí)用產(chǎn)品行業(yè)動(dòng)態(tài)融資、合作、政策相關(guān)注意這里只做客觀陳述不做評(píng)論論文速覽值得關(guān)注的新論文觀點(diǎn)與教程有深度的分析文章、實(shí)操教程分類(lèi)用的是關(guān)鍵詞匹配加規(guī)則判斷沒(méi)有用模型。原因是分類(lèi)類(lèi)別固定且邊界清晰規(guī)則方法足夠用而且速度快、可解釋。比如標(biāo)題里出現(xiàn)發(fā)布開(kāi)源模型就歸到模型類(lèi)出現(xiàn)教程指南如何就歸到觀點(diǎn)類(lèi)。當(dāng)然規(guī)則會(huì)有誤判我的處理方式是允許少量誤判但保證大類(lèi)不錯(cuò)。讀者對(duì)分類(lèi)的容忍度其實(shí)很高只要不是把論文歸到融資里基本不會(huì)有人在意。4. 排版與推送日?qǐng)?bào)的最后一公里4.1 排版不是美化是信息架構(gòu)我見(jiàn)過(guò)很多自動(dòng)化日?qǐng)?bào)內(nèi)容不錯(cuò)但排版一塌糊涂——所有內(nèi)容堆在一起沒(méi)有層級(jí)沒(méi)有留白。讀者打開(kāi)一看就關(guān)了。排版的核心不是好看而是降低閱讀成本。我的排版規(guī)則很簡(jiǎn)單每個(gè)類(lèi)別一個(gè)二級(jí)標(biāo)題類(lèi)別之間用分割線(xiàn)隔開(kāi)。每條內(nèi)容一行標(biāo)題加粗 一行摘要 一行來(lái)源鏈接。摘要控制在60字以?xún)?nèi)超過(guò)就截?cái)唷H目刂圃谑謾C(jī)屏幕滑動(dòng)3-4屏以?xún)?nèi)。這里有個(gè)細(xì)節(jié)鏈接不要用裸URL。裸URL又長(zhǎng)又丑還占地方。我用的是Markdown的鏈接語(yǔ)法顯示成原文兩個(gè)字點(diǎn)進(jìn)去才是真實(shí)鏈接。4.2 推送渠道的選擇推送渠道我試過(guò)三種郵件、即時(shí)通訊機(jī)器人、靜態(tài)網(wǎng)頁(yè)。郵件優(yōu)點(diǎn)是歸檔方便缺點(diǎn)是打開(kāi)率低而且手機(jī)上看郵件體驗(yàn)一般。即時(shí)通訊機(jī)器人優(yōu)點(diǎn)是觸達(dá)快打開(kāi)率高缺點(diǎn)是消息太長(zhǎng)會(huì)被折疊而且歷史消息不好檢索。靜態(tài)網(wǎng)頁(yè)優(yōu)點(diǎn)是可以做得很好看歷史歸檔也方便缺點(diǎn)是需要主動(dòng)去打開(kāi)。最后我的方案是組合拳即時(shí)通訊機(jī)器人推送一個(gè)精簡(jiǎn)版只列標(biāo)題和鏈接完整版生成靜態(tài)網(wǎng)頁(yè)鏈接放在精簡(jiǎn)版末尾。這樣既保證了觸達(dá)又保證了完整體驗(yàn)。4.3 定時(shí)任務(wù)的穩(wěn)定性整個(gè)鏈路是定時(shí)觸發(fā)的我用的是服務(wù)器上的定時(shí)任務(wù)。這里踩過(guò)一個(gè)坑任務(wù)執(zhí)行時(shí)間要留足余量。我一開(kāi)始設(shè)的是早上7點(diǎn)執(zhí)行8點(diǎn)推送結(jié)果有幾次因?yàn)槟硞€(gè)源響應(yīng)慢整個(gè)流程拖到了8點(diǎn)半才跑完推送就延遲了。后來(lái)我改成了兩個(gè)措施一是把執(zhí)行時(shí)間提前到早上6點(diǎn)留出兩小時(shí)緩沖二是給每個(gè)抓取步驟設(shè)了超時(shí)時(shí)間單個(gè)源最多等30秒超時(shí)就跳過(guò)不阻塞整體流程。這樣即使某個(gè)源掛了日?qǐng)?bào)還是能按時(shí)出來(lái)只是少一條內(nèi)容而已。注意定時(shí)任務(wù)一定要加失敗告警。我有一次服務(wù)器磁盤(pán)滿(mǎn)了任務(wù)靜默失敗我三天后才發(fā)現(xiàn)日?qǐng)?bào)沒(méi)推送?,F(xiàn)在只要任務(wù)失敗我就會(huì)收到一條提醒。5. 運(yùn)行三個(gè)月后我總結(jié)出的幾條硬經(jīng)驗(yàn)5.1 關(guān)于內(nèi)容質(zhì)量寧缺毋濫日?qǐng)?bào)最怕的不是內(nèi)容少而是內(nèi)容水。我寧可某天只有5條也不要為了湊數(shù)塞進(jìn)去10條垃圾。判斷標(biāo)準(zhǔn)很簡(jiǎn)單這條信息如果我不推讀者會(huì)錯(cuò)過(guò)什么重要的事嗎如果答案是不會(huì)那就砍掉。我設(shè)了一個(gè)硬性規(guī)則每條內(nèi)容必須能回答它新在哪里。新模型、新功能、新數(shù)據(jù)、新觀點(diǎn)總得占一個(gè)。純轉(zhuǎn)述、純?cè)u(píng)論、純舊聞重發(fā)的一律不要。5.2 關(guān)于自動(dòng)化留一個(gè)人工兜底的口子全自動(dòng)化聽(tīng)起來(lái)很酷但實(shí)際運(yùn)行中總會(huì)有意外。我的做法是自動(dòng)化跑完后生成的內(nèi)容先存到一個(gè)待發(fā)布區(qū)我有10分鐘時(shí)間可以快速掃一眼如果發(fā)現(xiàn)明顯問(wèn)題比如某條摘要完全跑偏可以手動(dòng)刪掉或修改然后再觸發(fā)推送。這個(gè)人工兜底的口子救過(guò)我好幾次。有一次某個(gè)源的文章標(biāo)題和正文完全不匹配對(duì)方網(wǎng)站自己出的bug自動(dòng)摘要出來(lái)的內(nèi)容驢唇不對(duì)馬嘴我掃一眼就刪了。如果沒(méi)有這個(gè)環(huán)節(jié)這條內(nèi)容就推給讀者了。5.3 關(guān)于維護(hù)成本把配置和代碼分離這是工程上的經(jīng)驗(yàn)但很重要。我一開(kāi)始把信息源列表、分類(lèi)關(guān)鍵詞、推送渠道這些都硬編碼在代碼里結(jié)果每次調(diào)整都要改代碼、重新部署。后來(lái)我把這些全部抽成配置文件YAML格式代碼只負(fù)責(zé)讀配置執(zhí)行。現(xiàn)在我想加一個(gè)源、改一個(gè)關(guān)鍵詞改配置文件就行不用碰代碼。這個(gè)改動(dòng)看起來(lái)小但讓整個(gè)系統(tǒng)的可維護(hù)性上了一個(gè)臺(tái)階。自動(dòng)化系統(tǒng)的壽命取決于你調(diào)整它有多容易。5.4 一個(gè)容易被忽略的細(xì)節(jié)時(shí)區(qū)如果你的信息源來(lái)自不同地區(qū)時(shí)區(qū)問(wèn)題一定會(huì)找上你。我遇到過(guò)兩次一次是某條內(nèi)容明明是昨天的但因?yàn)闀r(shí)區(qū)換算錯(cuò)誤被當(dāng)成了今天的另一次是定時(shí)任務(wù)在夏令時(shí)切換那天執(zhí)行時(shí)間錯(cuò)了一小時(shí)。解決方案很簡(jiǎn)單但必須做所有時(shí)間統(tǒng)一存UTC只在展示的時(shí)候轉(zhuǎn)成本地時(shí)區(qū)。定時(shí)任務(wù)的時(shí)間也要明確指定時(shí)區(qū)不要依賴(lài)服務(wù)器默認(rèn)設(shè)置。6. 如果你想自己搭一套從哪開(kāi)始6.1 最小可行版本先跑通一條鏈路不要一上來(lái)就追求完整。我的建議是先做一個(gè)最小版本選一個(gè)源抓取清洗生成一條摘要推送到一個(gè)渠道。這條鏈路跑通了你再往上加源、加分類(lèi)、加排版。最小版本大概需要這些東西一個(gè)能跑腳本的環(huán)境本地電腦就行、一個(gè)抓取庫(kù)、一個(gè)摘要方案哪怕先用最簡(jiǎn)單的截取前100字、一個(gè)推送渠道即時(shí)通訊機(jī)器人的webhook最簡(jiǎn)單。6.2 逐步迭代的路線(xiàn)圖跑通最小版本后我建議按這個(gè)順序迭代加去重這是提升質(zhì)量最快的一步。加分類(lèi)讓日?qǐng)?bào)有結(jié)構(gòu)。優(yōu)化摘要從截取改成抽取改寫(xiě)。加排版讓閱讀體驗(yàn)上一個(gè)臺(tái)階。加人工兜底保證內(nèi)容不出大錯(cuò)。加監(jiān)控告警保證系統(tǒng)穩(wěn)定運(yùn)行。每一步都獨(dú)立可驗(yàn)證不要跳步。我見(jiàn)過(guò)有人一上來(lái)就想做全套結(jié)果每個(gè)環(huán)節(jié)都是半成品最后整個(gè)系統(tǒng)跑不起來(lái)。6.3 關(guān)于成本的一個(gè)參考如果你用大模型做摘要成本主要取決于調(diào)用量。以我的規(guī)模每天20-30條每條一次調(diào)用來(lái)算一個(gè)月的費(fèi)用大概是一杯咖啡的錢(qián)。這個(gè)成本對(duì)于個(gè)人項(xiàng)目來(lái)說(shuō)完全可以接受。如果你連這個(gè)都想省那抽取式摘要其實(shí)也夠用只是讀起來(lái)沒(méi)那么順。最后分享一個(gè)我自己的體會(huì)做日?qǐng)?bào)這件事技術(shù)只占三成剩下七成是內(nèi)容判斷。你得知道什么信息值得推、什么不值得這個(gè)判斷力沒(méi)法自動(dòng)化只能靠你自己每天讀、每天篩慢慢養(yǎng)出來(lái)。工具能幫你省時(shí)間但省不掉你的判斷。