Day 304 · 2026-10-30

把 Event Sidekick 的模型從 Claude 換成 Jev

Day 304 把 Event Sidekick 的模型從 Claude 換成 Jev — 投影片 1
1 / 1

Day 194 分享過我自己寫的 Raycast 小工具:Event Sidekick。看到活動公告,一個快捷鍵抓下來,AI 幫我把活動名稱、時間、地點整理成欄位,等我確認後才加進 Google 日曆。

原本負責讀公告的是 Claude。今天我把它換成 TypeSafe 的 Jev,也就是 Day 264 介紹過的那個分類器:你先列好選項,它幫你挑一個。

換完之後,我拿同一個 Luma 活動頁,把新舊兩個版本各跑一次、錄下來比較。左邊是 Claude,右邊是 Jev,都是正常速度:

左邊 Claude 那一側,日期、地點都是空的,信心分數卻顯示 99%。

為什麼這個工具適合 Jev

把一場活動加進行事曆,要的資訊通常都已經寫在公告上:活動名稱、日期、時間、地點,原文裡都找得到。模型在這裡要做的,是判斷公告裡哪一段是名稱、哪一段是地點。

這正好對上 Jev 的做法。程式把公告整理成一題一題的選擇題。問欄位和時間的題目,選項直接取自公告原文,再加上一個「都不是」;問活動型態和日期種類的題目,則是固定的幾個類別。Jev 每題挑一個答案,同時給出每個選項的機率。

每抓一次活動,Jev 要回答這幾類問題:

  1. 欄位:哪一行是活動名稱?哪一行是地點和地址(地點跟地址分在兩行時,可以選兩行合起來的那個選項)?哪一行是主辦單位?哪個網址是活動頁或報名頁?公告有沒有寫時區?
  2. 活動型態:單場、連續好幾天的活動、每場各自獨立的系列活動,還是看不出來。
  3. 公告裡的每一個日期:這是活動日期,還是報名截止日、發文時間這類無關的日期,或是無法判斷。
  4. 每個活動日期對應哪一段時間,例如 19:00 到 21:00;公告沒寫就選「都不是」。

所有題目一次送出,Jev 一次回答。

這樣做有兩個好處。第一,欄位的答案只能從原文裡挑,每個欄位都對得上公告裡的某一行,Jev 沒辦法寫出公告上沒有的地點。第二,每個答案都附機率,程式知道 Jev 什麼時候沒把握:問欄位或時間的題目,把握不到 70%,那一格就留空;日期或活動型態沒把握時,會標成待確認。確認畫面會提醒我自己檢查。

換模型,連做法一起換

Jev 不會生成文字,只會在給定的選項裡挑。所以這次不只是換一個模型,整個整理活動資訊的流程也跟著改了:

  1. 程式先從公告裡找出可能的活動名稱、日期、時間、地點、主辦單位和網址,當成候選答案,Jev 再從裡面挑出有原文依據的那一個。以前是 Claude 讀完整篇公告,直接寫出整份活動資料。
  2. 公告如果是截圖,現在改在 Mac 上用 macOS 內建的文字辨識(Vision OCR)先讀出文字,只把辨識出來的文字送給 Jev,截圖本身不會離開電腦。不過送給 Jev 這一步還是要連網。
  3. 設定變簡單了:原本 Claude 的五個相關設定,換成一個選擇整理方式的選單、一組 TypeSafe 的 API key(就像通行密碼)和一個模型名稱。Jev 連不上、超過 8 秒沒回應或回覆出錯時,會改用在自己電腦上跑的簡易整理程式,畫面上也會跳出提醒。

錄下來比一次

從開始載入到出現確認畫面:

版本 等待時間 抓到的資訊
Claude 約 6.4 秒 只有活動名稱,日期、地點都沒抓到
Jev 約 1.6 秒 活動名稱、日期、地點,漏了晚上 7 點到 9 點的時間

Jev 快很多,抓到的也比較多,可是兩邊都沒有把活動資訊抓完整。

Claude 那一側顯示 99% 的信心分數;Jev 的信心分數反而只有 46%,確認畫面還列出 4 個 Jev 沒把握的地方。

兩邊信心分數的計算方式不同。Claude 版的分數,是 Claude 寫在回覆裡的一個數字,程式直接拿來顯示。Jev 版的分數由程式計算:在活動名稱、活動型態、日期、時間這幾題裡,取 Jev 把握最低的那一題。只要有一題 Jev 不確定,整體分數就會往下掉。

這只是單次測試,時間也包含抓網頁的時間,沒辦法說 Jev 一定比較快、比較準。

這次換模型,最大的改變是把更多準備工作交給程式,模型只剩下「挑一個」這件事要做,單次測試的回應也比較快。接下來要處理的,是把漏掉的時間抓回來。

信心分數高,不代表抓出來的資料是對的。