最近我給 FastGPT 使用者交流群裡接入了 AI 日報,每天早上 10 點會自動向群裡推送 AI 日報,讓群裡的小夥伴們第一時間瞭解到昨天 AI 領域都發生了哪些大事。
效果大概是這個樣子的:
如果你對 FastGPT 感興趣,可以直接掃碼入群:
除此之外,我還同步一份到公司的飛書群裡,這樣公司的小夥伴們也能及時瞭解到 AI 領域的最新動態。
每一條資訊除了提供標題和概要之外,還附上了相關連結,方便大家進一步瞭解。
你以為這就完了?
我還給公司飛書群裡每天傳送一份 AI 領域的最新論文摘要,幫助研發同學汲取最新的科研成果。
為什麼我要做這麼一個日報呢?
因為現在 AI 領域的發展速度實在是太快了,每天都有新的論文、新的技術、新的產品釋出,如果不持續關注,真的很容易被時代拋棄。
但是網上的資訊量實在是太多太雜了,往往讀上幾十分鐘都感覺沒啥收穫,但是又怕自己錯過什麼資訊。
所以我就想,如果能開發個機器人,自動爬取並總結一些最新的資訊,將簡化後的資訊每天定時發給我,如果感興趣可以再進一步搜尋,這樣我就能每天都能高效獲取到有價值的資訊了。
有了需求之後,再進一步分析,可以發現這個需求主要的難點有兩個:
- 寫一個爬蟲,爬取對應網站的資訊
- 將獲取到的資訊,透過工作流編排總結歸納
恰好這兩個需求分別可以被兩個工具快速解決。
建立爬蟲
首先,我需要建立一個爬蟲,爬取對應網站的資訊。
這就需要用到一個牛叉的開源專案 Crawl4ai。
這個專案效能超快,還能輸出適合大語言模型的格式,比如 JSON、清理過的 HTML 和 markdown。它還支援同時爬取多個網址,能提取所有媒體標籤 (圖片、音訊、影片),以及所有內外部連結。目前 star 數已經超過 1.5k。
問題來了,這個專案是基於 Python 開發的,而我既不懂 Python,也不會寫爬蟲。
這個倒是難不倒我,我可以用 Cursor 嘛,讓它幫我寫就好了。
但是我一想到寫完之後還要打包部署,以及配置域名解析、申請 SSL 證書等各種繁瑣的事情,瞬間就頭大。
嘿嘿,這個問題也可以解決,直接用 Sealos Devbox 就好了,Devbox 直接摒棄了各種繁瑣的配置,開箱即用,讓你寫完爬蟲就能直接上線,啥都不需要配置。
我用 Devbox 和 Cursor 半個小時就寫完了爬蟲並且上線了,你就說快不快吧?
直接來看步驟。
建立開發環境
首先進入 Sealos 桌面,然後開啟 Debox 應用,建立一個新專案。Devbox 支援多種主流語言與框架,這裡我們需要開發爬蟲服務,所以直接選擇 Python 作為執行環境。
點選建立,幾秒鐘即可啟動開發環境。
接下來在操作選項中點選 Cursor,將會自動開啟本地的 Cursor 程式設計 IDE。
接著會提示安裝 Devbox 外掛,安裝後即可自動連線開發環境。
Cursor 開啟開發環境之後,執行 ./entrypoint.sh
就能看到專案成功跑起來了。
是不是非常簡單?直接省略了配置域名解析、申請 SSL 證書,配置閘道器等與開發無關的繁瑣操作,爽!
開發爬蟲
接下來,我們就可以開始寫爬蟲了。
整個開發過程 Cursor 都可以全權代理,你只需要告訴他你要做什麼,Cursor 就能幫你完成。
可以看到 Cursor 已經幫我們寫好了 crawler
這個基礎函式,只要填上需要爬取的地址,就能自動爬取。
它甚至還幫我們想好了下一步應該做什麼,即新增一個新的路由來處理請求。
於是我順著他的話繼續往下問。
它也是非常快速地幫我們修改出了路由,這樣我們就可以透過請求某個介面實現對應網站的爬取了。
接下來我想最佳化一下效能,便直接讓它在程式碼上改,也是很快地幫我們最佳化好了。
最終爬取的效果如下:
有標題,有內容,有時間,有連結,這不就齊活了嘛。
整個開發過程我一行程式碼都沒有寫,都是 Cursor 幫我寫的,包括爬蟲庫的使用、路由介面的編排、效能的最佳化等等,你說爽不爽?
上線爬蟲
這個爬蟲服務不需要一直執行,只需要每天定時執行一會兒,等我發完了日報就可以關閉了。最重要的是這樣省錢啊,每天執行一小會兒,一個月下來也沒多少錢,比自己買伺服器划算多了。
而 Sealos 正好是按量付費的,執行多長時間就花多長時間的錢,用多少資源就花多少資源的錢,非常划算。
我們需要往 entrypoint.sh
這個檔案中寫入專案的啟動命令 (因為 Devbox 專案釋出之後的啟動命令就是執行 entrypoint.sh
指令碼)。
指令碼修改完並儲存之後,點選【釋出版本】:
填寫完資訊後點選【發版】。
注意:發版會暫時停止 Devbox,發版後會自動啟動,請先儲存好專案避免丟失資料。
稍等片刻,即可在版本列表中找到發版資訊,點選上線後會跳轉到部署頁面,點選部署應用即可部署到生產環境。
CPU 和記憶體可以根據自己的專案情況進行調整。
生產環境分配的 HTTPS 域名與開發環境獨立,部署後即可透過生產環境域名訪問這個爬蟲的介面。
接入 FastGPT 工作流
現在有了爬蟲介面,獲取了資訊資訊,就可以藉助 AI 來總結提煉其中的核心資訊了。
使用 AI 最簡單的方式就是 FastGPT 工作流。
FastGPT 國內版
FastGPT 國際版
以我們要抓取的一個網站為例,直接使用 HTTP 節點接入即可。
在 HTTP 節點中,我們使用 GET 方法請求爬蟲介面,並且設定超時時長為三分鐘 (防止資訊過多)。
因為爬蟲介面的原始響應就是一個文章陣列,所以我們可以不用自定義輸出欄位,直接將原始響應傳送給 AI 對話節點即可。
這裡用到的是李繼剛老師研究的結構化提示詞,以 lisp 語言的形式極簡高效地實現了對 AI 的提示,我實測下來效果相當不錯。
然後進行二次排版,將前面獲取到的多個來源的文章總結進行進一步的整合和排版,便於輸出。
最後呼叫 FastGPT 的飛書機器人外掛,將整合好後的資訊輸出到公司的飛書群。
接下來配置一下工作流的定時執行,那麼每天十點,早報機器人就會自動執行,總結過去 24h 發生的科技大事,然後以簡潔準確的報告形式傳送到工具群。
整體的工作流大致如下:
省錢
既然 Sealos 是按量付費,那我幹嘛要一直執行著爬蟲服務?
我只需要每天早上十點執行一次,然後爬取資訊,總結資訊,傳送資訊,然後就可以關閉服務了。
這樣每天執行爬蟲服務的時間也就幾分鐘,太省錢了哈哈 😄
那麼該如何定時開機關機爬蟲服務呢?
哈哈,我直接寫到 FastGPT 的工作流裡,在工作流的最前面和最後面分別接入一個 HTTP 節點,這樣就可以在每天執行工作流之前和之後分別執行爬蟲服務,然後關閉爬蟲服務,我真是太有才了!
具體的步驟如下。
首先從 Sealos 桌面下載 kubeconfig 檔案。
然後執行以下命令,將輸出的內容作為請求介面時的 Authorization Header 值:
cat kubeconfig.yaml | jq -sRr @uri
在 FastGPT 工作流的最前面接入一個 HTTP 節點,URL 填入 Sealos【應用管理】的 API 介面地址:
https://applaunchpad.hzh.sealos.run/api/v1alpha/updateReplica
請求方法選擇 POST。
在 Header 中新增 Authorization
欄位,值為上一步獲取到的內容。
然後在 Body 中輸入以下內容 (在 x-www-form-urlencoded
中填入引數):
其中 appName 是你的爬蟲服務名稱,可以在【應用管理】中檢視:
而 replica 就是你的服務需要啟動的例項數量,一般設定為 1 即可。
下面點選【除錯】來測試一下:
搞定!
下面再接入一個 HTTP 節點,URL 填入以下地址:
https://applaunchpad.hzh.sealos.run/api/getAppPodsByAppName
這個介面可以獲取到當前爬蟲服務執行的 Pod 資訊,然後我們就可以根據 Pod 資訊來判斷爬蟲到底有沒有啟動成功。
請求方法選擇 GET。
在 Header 中新增 Authorization
欄位,值和前面一樣。
然後在 Params 中輸入以下內容:
其中 name 是你的爬蟲服務名稱。
輸出欄位新增一個變數 data[0].status.containerStatuses[0].state.running
,型別為 String。
再新增一個沒用的【變數更新】節點,然後再接到【判斷器】節點。
- 如果變數
data[0].status.containerStatuses[0].state.running
存在,則表示爬蟲服務還沒執行成功,則接回到前面的【獲取爬蟲服務狀態】節點,繼續獲取服務狀態。 - 如果變數
data[0].status.containerStatuses[0].state.running
不存在,則表示爬蟲服務已經執行成功,則接入後面的 HTTP 節點開始呼叫爬蟲服務。
最後傳送完日報後,再接入一個 HTTP 節點來關閉爬蟲服務。引數和前面的【自動開啟爬蟲服務】節點一樣,只需要把 replica 設定為 0 即可。
這樣就搞定了,每天早上十點,爬蟲服務會自動執行,傳送完日報後會自動關閉,爽!
總結
好啦!到這裡我們就完成了一個自動化的爬蟲服務,它會在每天早上十點準時上班 (啟動),完成工作 (傳送日報) 後就自動下班 (關閉),比我們還自覺呢!😂
如果你也想搭建一個這樣的 “自動打工人”,可以參考以下資源:
- 爬蟲原始碼:https://github.com/newfish-cmyk/crawl
- 完整工作流:https://pan.quark.cn/s/019132869eca
快去試試吧,讓 AI 幫你完成這些重複性的工作,解放雙手享受生活!🎉