利用 Large Language Model (LLM) 審閱 iThome 鐵人賽投稿 – (3) 我要變更部分規格 & 使用 Notion AI 摘要
我很榮幸可以擔任 2023 iThome 鐵人賽的評審,這是我嘗試使用 LLM 審閱投稿的過程紀錄。這一篇說明如何利用 Python 程式和 Notion API 將文章資料匯入 Notion,並利用 Notion AI 生成文章的摘要和評語,以及 30 天份的系列文章彙整結果。
在上一篇文章中,我們使用 ChatGPT Coding Intern 撰寫的爬蟲程式,成功地抓取了系列文章以供審閱。原先主辦單位提供的 5,732 篇統計數字,包含了一些未完賽的系列。因此,在抓取完畢後,實際需要審閱的文章數量降至 5,439 篇。我也發現有寫 100 篇系列文章的參賽者。
經費問題
我原本打算使用 OpenAI GPT API 來做摘要跟評分。粗略估計了一下成本,以每篇文章大約 3,000 個 tokens 來計算,處理 5,439 篇文章將耗費約 16,317,000 個 tokens。根據 OpenAI GPT 的價目表,如果使用 GPT-4,單是輸入成本就高達數百美金 💸。
同一時間我也剛開始訂閱 Notion AI,月費 $10 美金,可以無限使用。實際上,我之所以選擇付費,就是因為 Notion AI 內容摘要的表現出色。那麼,如果我將文章透過 Notion API 傳送至其資料庫,並將產生的摘要進行合併,豈不是一個完美的解決方案?
重新確定執行步驟
原本的執行步驟:
讓 LLM 閱讀每篇文章,提供摘要、評論,並檢查其中的錯誤。這一步可以用不同類型的文章來測試,以確保準確性。
將這些資訊彙整成一份綜合報告。
基於彙整的資訊和既定的評分標準,讓 LLM 進行評分並撰寫評語。
重複上述步驟,直到完成對所有系列文章的處理。
現在只是 LLM 改用 Notion AI,需要把文章上傳到 Notion 資料庫,其餘不變。
我們計劃在 Notion 中建立兩個資料庫:「系列文章」和「文章」,並在它們之間建立關聯。我沒有打算教大家用 Notion,請自行瞭解。
詳細的流程會是:
(✅ 已完成)使用 Python 爬蟲程式取得每一篇文章的頁面資訊,儲存到儲存空間。
撰寫一個 Python 文章匯入程式,把頁面資訊匯入到 Notion 裡的文章資料庫。
如果 Notion 裡的系列資料庫裡面還沒有該系列文章的頁面,也建立一個系列文章的頁面。
透過 Notion AI 自動產生文章資料庫裡每一篇文章的摘要,存入文章的摘要欄位。
撰寫一個 Python 彙整程式,下載每一篇文章的摘要,合併後再寫入到系列文章的頁面。
透過 Notion AI 自動產生系列文章的分數跟評語,存入系列文章頁面的評分與評語欄位。
我使用 ChatGPT 繪製了一張流程圖,協助自己確認工作,具體操作步驟可以看我的 ChatGPT 對話範例。附帶一提,我使用的是 “Diagrams: Show Me” 這個 ChatGPT plugin。
這張圖表看起來很適合拿來嚇唬人:
其實我們已經完成左側的 Python 爬蟲程式,而 Notion AI 會自動處理相關部分。我們整理一下簡化版的流程圖:
建立 Notion Integration
要使用 Notion API 操作 Notion 文件,需要先建立 Notion Integration。跟之前說的一樣,我沒有打算教大家用 Notion,請自行瞭解。
撰寫文章匯入程式的探索之旅
我選擇了今年 iThome 鐵人賽優選作品「被 dbt 帶入門的數據工作體驗 30 想」的 JSON 檔案作為我的實驗對象。我將這個檔案交給 ChatGPT,指示它使用 Python 開發一個將 JSON 資料匯入 Notion 資料庫的程式。這個資料庫擁有多個欄位,例如文章標題、系列名稱、作者名稱,而文章內容則直接寫入頁面中。
在撰寫過程中,我遇到了一個小挑戰:程式雖然迅速完成,但在執行時出現了錯誤。這個時候不需要慌張,只要把錯誤訊息傳給 ChatGPT 即可。這個過程中,我就像是副駕駛,幫忙看路標並提供導航,讓 ChatGPT 負責處理。具體操作步驟可以看我的 ChatGPT 對話範例。
由於我不希望將 Notion API 的 secret token 和資料庫 ID 寫死在程式中,因此我再次將程式貼給 ChatGPT 進行修改,以保證安全性和靈活性。這部分的操作步驟也可以在我的另一個 ChatGPT 對話範例中找到。
實際匯入文章到 Notion
匯入文章的過程中,我使用了以下的指令來簡化操作:
find path/to/目錄 -name "*.json" -print0 | xargs -0 -I {} python import_notion.py {}
這條指令的作用是:
尋找檔案:透過
find path/to/目錄 -name "*.json" -print0
,我能夠獲得指定目錄中所有帶有 .json 副檔名的文件列表。對文件列表進行操作:接著,我對每個 .json 文件執行
import_notion.py
程式,把資料一一匯入到 Notion 資料庫中。
執行完畢後,Notion 中的文章就被成功匯入了。我附上了 Notion 文章頁面和文章列表的截圖,其中 AI 欄位的資料是自動生成的:
除了 AI Summary,我還設置了幾個欄位來輔助閱讀和,例如:
AI Key Info: 列出五個最重要的要點,使用簡短的句子。
AI Insights: 從文章中挑選一個最有趣的洞見。
從匯入到彙整
我用 ChatGPT 對文章匯入程式進行了微調,並且把 Notion API 技術文件貼到 ChatGPT 對話裡,很快就寫好了文章彙整程式。
為了完成以上工作,我們開發了另外兩個 Python 程式:
import_notion.py 是文章匯入程式。
update_series_summary.py 是文章彙整程式。
你可以看看這兩支程式的完整程式碼。
Notion AI 的小挑戰
在使用 Notion AI 的過程中,我進行了 5,439 x N 的呼叫,並在過程中調整了幾次 prompt。有時候它會無法生成結果,導致某些欄位空白。這時候只要找到這些空欄位,多次嘗試就可以獲得結果。為了更高效地解決這一問題,我後來撰寫了一個小程式進行自動檢查,但具體細節在此不贅述。
擁有了每篇文章的摘要和評語,以及 30 天的彙整結果,我現在可以開始生成分數和評語了 💯