MapleCheng

在浩瀚的網路世界中無限潛水欸少年郎!

0%

用 AI 自動產生每日站會報告:跨工具資料整合實戰

如果你是工程師或技術主管,每天早上站會前最痛苦的事情大概就是:想不起來昨天到底做了什麼。明明忙了一整天,但要在站會上講出來的時候,腦袋就是一片空白。更慘的是,資料散落在行事曆、任務管理系統、個人待辦清單等各種地方,要手動彙整簡直是一種折磨。

所以我做了一件事:讓 AI 幫我自動產生每日站會報告。

為什麼需要自動化?

其實站會日報的格式非常固定:「昨天做了什麼 / 遇到什麼問題 / 今天要做什麼」。內容也都有跡可循——你的行事曆記錄了參加了哪些會議,任務管理系統記錄了完成了哪些工作,而今天的行事曆和待辦事項就是今天要做的事。

問題不是資訊不存在,而是資訊太分散。每天早上花 15 分鐘去各個系統裡翻資料再手動整理,累積起來的時間成本和心理負擔其實很可觀。而且人的記憶不可靠,常常會漏掉一些瑣碎但重要的事項。

這不就是 AI 最擅長的事嗎?從多個來源抓取結構化 / 半結構化的資料,彙整成人類可讀的報告。

架構設計

整個系統的架構其實不複雜:

資料來源

  1. 行事曆 API:抓取昨天的會議和事件。會議本身就是工作內容的一部分,而且往往佔了不少時間。
  2. 任務管理系統 API:這是主要的資料來源。抓取昨天狀態有變化的任務(新建、進行中、完成),以及每個任務的工時記錄。
  3. 補充性任務清單:有些日常的小任務不一定會登錄到正式的任務管理系統裡,但會記在個人待辦清單上。這個資料來源作為補充。

LLM 彙整

把上面三個來源的資料全部丟給 LLM,讓它:

  • 去除冗餘和格式差異
  • 分類成「昨天完成」、「昨天進行中」、「遇到的問題」、「今天計畫」
  • 產生自然語言的日報,不是乾巴巴的清單,而是有上下文的摘要

最後自動寫入工作日報系統,或者推送到指定的溝通頻道。

實作中踩過的坑

概念很美好,但實作起來有不少魔鬼藏在細節裡:

「一天」到底是什麼時候開始?

這是我遇到的第一個也是最有趣的問題。

一般人直覺會用午夜 00:00 作為日期分界。但工程師的作息……你懂的。加班到凌晨一兩點是家常便飯,如果用午夜切分,那凌晨 00:30 完成的任務到底算昨天還是今天?

我的做法是:把凌晨 4:00 作為日期分界。理由很簡單——正常人(即使是最夜貓子的工程師)通常不會在凌晨 4 點到早上之間工作。所以「昨天」的定義是「前天凌晨 4 點到昨天凌晨 4 點」,這樣不管你加班到多晚,工作內容都會被正確歸類到當天。

這個看似很小的設計決策,實際上影響了整個系統的資料查詢邏輯。API 的查詢時間區間、任務的完成時間判斷,全部都要以凌晨 4 點為基準去計算。

工時自動估算

任務管理系統裡的工時記錄,理想狀態下每個任務都應該填寫。但現實是,很多人(包括我自己)經常忘記填工時。

我的處理方式是設計一個估算邏輯:如果任務有登錄工時,直接使用;如果沒有,就用任務的點數來估算(例如 1 點 ≈ 0.5 小時),再搭配任務的時間區段來推算。這不是什麼精密的演算法,但對日報來說已經夠用了。重點是讓報告裡的工時分配看起來合理,而不是一堆「未填寫」。

非工作事項的過濾

行事曆裡不全是工作事件。讀書會、午餐聚會、私人約會、看牙醫……這些東西如果跑進站會日報裡就尷尬了。

所以需要設定一個排除清單。我的做法是用關鍵字過濾 + 行事曆分類。把非工作的行事曆事件放在不同的日曆(calendar)裡,抓取時只讀取工作相關的日曆。對於混在工作日曆裡的非工作事項,就靠關鍵字排除(像是「午餐」、「聚餐」、「讀書會」等)。

不完美,但實務上 90% 以上的情況都能正確過濾。偶爾漏網的,LLM 通常也能從語境判斷出來。

批量回補的踩坑

系統上線後,我想回補過去 28 天的歷史日報。想說一次跑 28 天,很快就搞定了吧?

結果踩了一個大坑:重複建立

因為初版的邏輯是「查詢日期 → 產生日報 → 建立到系統」,沒有做冪等性檢查。如果同一天跑了兩次(比如 debug 的時候手動再跑一次),就會在系統裡建立兩筆同一天的日報。28 天回補加上 debug 過程,最後一看,有些天有兩三筆重複的資料。

解法是寫一個去重腳本:

  1. 用 API 查詢所有日報
  2. 按日期分組
  3. 對於重複的,保留最早建立的那筆,刪除其餘
  4. 刪除前先做 dry run 確認

為什麼保留最早的而不是最新的?因為最早的通常是「正式產生」的那筆,後面的都是 debug 過程中重複跑出來的。這個策略不是所有情況都適用,但在我的場景裡是正確的。

另一個學到的教訓是:永遠先 query 再操作,不要假設資料不存在就直接建立。這是資料工程的基本功,但在快速迭代的過程中很容易忘記。

排程設計

最終的排程是用 Cron job 每天早上 5:00 自動執行。選 5 點是因為:

  1. 確保在站會之前(通常是 9 點或 10 點)有足夠的時間完成
  2. 所有昨天的資料都已經確定(配合凌晨 4 點的日期分界)
  3. 就算有 API 暫時不可用需要 retry,也有充足的緩衝時間

流程是:Cron 觸發 → 抓取多個 API 的資料 → 組合成 prompt → LLM 產生日報 → 寫入任務管理系統的日報區塊。

整個過程通常在 1-2 分鐘內完成。

LLM 在這裡的價值

你可能會問:這種事用一般的腳本不就好了?幹嘛要用 LLM?

確實,如果所有資料來源的格式都是統一的、輸出格式也是固定的,那寫 template-based 的腳本就夠了。但現實是:

  • 行事曆的事件標題格式不統一(有的是「[專案] 需求討論」,有的是「跟某某開會」)
  • 任務管理系統的任務描述有長有短,有的很正式,有的就一句話
  • 補充任務清單的格式更是隨意

LLM 的強項就在於它不挑食,不管輸入的格式多混亂,它都能理解語意,產出格式一致的報告。而且它能做到一般腳本做不到的事:推斷上下文。比如一個任務叫「修 bug #1234」,LLM 可以結合這個任務所屬的專案名稱,在日報裡產生更有意義的描述。

使用心得

這套系統上線一陣子了,最大的好處不是「節省了 15 分鐘」這種量化指標,而是一種心理上的解放。早上起來看到日報已經自動產生好了,站會前快速掃一眼確認沒問題就好,不用再絞盡腦汁回想昨天做了什麼。

偶爾 AI 產生的日報會有一些小問題,比如把某個會議的主題理解錯了、或是工時分配不太對,但這些快速修改一下就好。整體來說,準確率大概在 85-90% 左右,考慮到完全自動化的便利性,這個準確率我可以接受。

結語

這種跨工具的資料整合,是我認為目前 LLM 最有實用價值的應用場景之一。不需要什麼花俏的技術,就是「抓資料 → 丟給 LLM → 格式化輸出」的樸實流程。但它解決的是一個真實存在的痛點,而且用傳統方式很難做好(因為資料格式太不統一)。

如果你也受夠了每天早上手動整理站會報告,不妨試試看。技術門檻不高,最花時間的反而是搞清楚各個 API 的認證和資料結構。一旦串接好,後續的維護成本很低,偶爾調一下 prompt 讓輸出更符合需求就好。

值得投入的自動化,就是那種「做一次,每天受益」的事情。