🔥 前言:三十天的奇幻旅程終於抵達終點!
各位關注我奮鬥史讀者們,大家好!今天是我這趟「打造 M2A Agent」鐵人賽冒險的最後一天。回想起 Day 1 立下宏願的那個我,到現在能夠端出一個完整專案,心情真的既激動又充滿感謝。
這三十天是一段關於學習、犯錯、修正再前進的完整紀錄,我將在這篇最終章呈現我的專案總結、技術報告、開發心得!
🚀 專案總回顧:從一個點子到一個實踐
回顧這三十天,就像一場緊湊而精彩的電影,每一天都有新的挑戰與突破。
最初的起心動念:為何打造 M2A Agent?
身為一位學生,開會、討論、腦力激盪是家常便飯。但最心累的是,開完會後的紀錄整理與任務指派總是耗費大量心力,錄音檔聽了又聽,重點散落各處,待辦事項常常石沉大海。
於是,一個念頭油然而生:「我能不能打造一個專屬的 AI 助理,能自動將會議錄音(Meeting)轉換成可執行的行動(Action)?」
這,就是 M2A Agent 的誕生初衷。我希望它能成為一個聰明、可靠、自動化的好夥伴,將我們從繁瑣的會後整理工作中釋放出來!
三十天的開發之旅回顧
-
Week 1(Day 1-10):從零到一的奠基期
從最初的靈感發想,到定義專案目標——「打造一個能自動化會議記錄的 AI 助理」,到技術選型,我選擇了強大的自動化流程工具 n8n 作為核心,並搭配 Whisper 進行語音轉錄。這十天,我搭建了專案的骨架,完成了「語音轉文字」、「內容摘要」、「寫入 Notion」、「Line Bot 通知」等基礎節點,為後續的開發打下穩固的基礎。
-
Week 2(Day 11-20):核心功能的靈魂注入
進入第二週,我開始為 M2A Agent 注入靈魂,專注在設計 Prompt Engineering,引導大型語言模型(LLM)從逐字稿中提取「會議重點」、「待辦事項」與「關鍵決策」。這個階段的挑戰在於如何讓 AI 的產出既精準又符合我的格式要求,透過不斷的測試與最佳化,Agent 的核心功能逐漸成形。
-
Week 3(Day 21-29):從後端到前端的完整體
有了強大的後端邏輯後,我利用 Gradio 為 M2A Agent 穿上了友善的使用者介面,讓使用者可以輕鬆上傳音檔,並一目了然地看到處理結果。同時我也持續進行系統的最佳化與錯誤處理,讓整個流程更加穩定
M2A Agent 核心架構與工作流程
經過三十天的迭代,我的 M2A Agent 建立了一套完整的自動化處理流程,整個系統的核心可以用下面的流程來概括
使用者上傳音檔
→ 「Gradio 前端介面」接收
→ 「Whisper 語音轉錄模組」轉換為逐字稿
→ 「大型語言模型(LLM)核心」分析(生成摘要、待辦事項、參與夥伴、期限時間)
→ 「自動化任務分派模組」透過 Line、Gmail發送通知
→ 「Notion 資料庫整合模組」歸檔所有成果
這個流程串連了前端互動、後端處理、AI 分析、外部通知到資料庫儲存,形成一個閉環(Closed-loop)系統。
🛠️ 技術報告與開發感想
我的技術棧(Technology Stack)
在這趟旅程中,我使用了多種工具與技術來打造 M2A Agent,它們各自扮演了不可或缺的角色:
-
開發語言: Python — 作為 AI 與後端開發的首選,語法簡潔且生態系強大。
-
使用者介面: Gradio — 能夠快速將 Python 程式打包成互動式網頁應用,非常適合原型開發與內部工具。
-
語音轉錄: OpenAI Whisper — 擁有驚人的轉錄準確度,是我們將語音資訊化的第一功臣。
-
AI 大腦核心: Qwen2.5-Taiwan-7B-Instruct-i1 — 透過
LM Studio 將大型語言模型(LLM) Qwen2.5 模型部署在本機,確保了資料的隱私性與客製化彈性。
-
容器化技術: Docker — 將複雜的開發環境打包成一個標準化的容器,實現了「一鍵啟動」的想法,大幅簡化了部署流程。
-
資料庫與整合: Notion API 、 Gmail API 與 Line Messaging API — 讓 M2A Agent 的產出能無縫接軌我現有的工作流,將資訊自動歸檔與通知。
-
日誌監控系統: Grafana、Loki、Promtail — 建立了集中式的日誌監控系統。透過 Promtail 自動收集容器日誌、Loki 儲存索引,並在 Grafana 上實現統一的視覺化監控與查詢,大幅提升了系統的可觀測性與除錯效率。
我爬過的那些山:挑戰與學習
開發過程當然不是一帆風順,我也遇到了不少「坑」
-
漫長的等待與逾時(Timeout):音檔轉錄與 LLM 推理都需要時間。一開始,Gradio 介面常常因為後端處理太久而逾時。因此我研究了非同步(Asynchronous)處理與任務佇列(Task Queue) 的概念,將長時間執行的任務丟到背景處理,再回報結果給前端。
-
Prompt Engineering 的藝術:要讓 LLM 穩定輸出我想要的 JSON 格式(摘要、待辦事項)等,著實花了不少功夫。從一開始的簡單指令,到後來採用少樣本學習(Few-shot Learning) 給予範例、明確定義輸出格式,才終於讓它變得比較「聽話」。
-
Docker 環境的愛恨情仇:雖然 Docker 很美好,但要將包含多種 Python 依賴的複雜環境打包,還是踩了不少雷。從基礎映像檔(Base Image)的選擇、多階段建構(Multi-stage Build)的最佳化,到磁碟區掛載(Volume Mounting)的路徑問題,每一步都是學習。
-
資安與權限管理:串接 Notion API 、 Line Messaging api 與 Gmail API 時,如何安全地儲存與管理
API Keys 與 Secrets 是一個問題,因此我採用了環境變數 .env 檔案的方式來管理這些敏感資訊,避免將它們寫死在程式碼中。
🎬 成果展示
紙上談兵終覺淺,絕知此事要躬行!以下我將用文字來展示我這 30 天打造的「M2A Agent 會議處理平台」功能
M2A Agent 會議處理平台介面主要分為兩大功能頁籤:「新會議處理」與「歷史會議記錄」。
新會議處理
在「新會議處理」頁面中,使用者只需要透過拖曳或點擊,即可上傳 MP3、WAV 或 M4A 格式的會議音檔。上傳後系統會自動啟動背後的處理流程,將錄音檔在幾分鐘內變成一份條理分明、任務明確的 Notion 報告,同時發送 Line 與 Gmail 的通知。

歷史會議記錄
而在「歷史會議記錄」頁面,則顯示了所有過往的處理紀錄,使用者可以一覽所有會議的處理時間、專案名稱、會議類型等資訊,還能透過上方的欄位進行篩選查詢,快速找到特定會議處理紀錄。而且每一筆紀錄都可以匯出成 Markdown 或 CSV 檔案進行備份、歸檔或匯入其他專案管理工具,此頁面也整合了「會議助理」,讓使用者能隨時與 AI 針對某一筆歷史會議的內容進行提問,讓 AI 協助快速回憶會議細節!

🧐 M2A 的挑戰與未竟之業
儘管 M2A Agent 目前已具備一個可運作的雛形,但在這次的開發過程中,依然存在幾項關鍵的挑戰需要克服,這些不僅是當前的技術瓶頸,更是指引未來強化方向的重要指標:
-
中文時間表達的辨識挑戰
最大的問題之一,就是中文時間表達的辨識度仍有待加強。中文裡描述時間的方式千變萬化,例如「下下個月的最後一個星期五」、「兩週後的星期一上午十點」、「三個工作天內」,甚至是模糊的「等等」、「馬上」。目前的模型雖然能處理大部分比較清楚的說法,但是面對這些複雜且口語化的表達時,準確率仍不夠理想,這需要更大量的標註資料或更先進的語意理解模型來持續強化。
-
會議參與者辨識的困境
另一個核心困難點是參與夥伴的辨識度。由於 Whisper 轉錄後的文字,在處理人名時常常出現同音異字的錯誤(例如「GIGI」可能被轉錄成「Gege」、「吉吉」或「奇奇」),這導致後續的 LLM 難以準確地將待辦事項指派給正確的成員。若要解決此問題,未來可能需導入語者分離(Speaker Diarization) 技術,先區分不同發言者,再進行語音轉錄,才能有效提升辨識率。
🔮 總結與未來展望
三十天的蛻變與成長
這三十天,我不只完成了一個專案,我還系統性地走過了一個軟體產品從 0 到 1 的完整生命週期。從需求發想、技術選型、架構設計、程式開發、功能測試等,一直到最後的最佳化與部署。
這段經歷讓我認識到 n8n、OpenAI Whisper、LM Studio、Qwen2.5-Taiwan-7B-Instruct-i1、RAG、Prompt Engineering、Notion API、Gmail API、Line Messaging API、Gradio、Docker 等好用的工具、模型及相關的技術,也讓我對打造一個能解決實際問題的工具有了更深入的了解。每天的紀錄與分享,也使我不斷學習 AI Agent 的相關知識,這些都是寶貴的收穫。
M2A Agent 的未來想法?
這次的鐵人賽是個起點,而不是終點,我對於 M2A Agent 還有很多想像,像是
-
支援更多輸入來源:除了上傳音檔,未來希望能直接貼上 YouTube 連結或串流直播。
-
更智慧的任務分派:結合過去的會議紀錄,自動建議最適合的任務負責人。
-
支援英文語言:不僅僅能聽懂中文,還要能聽懂英文語言的會議。
❤️ 三十天的開發心得
終於完成了三十天的挑戰,在這過程中我學習到非常多的設計技巧與知識,這令我感到非常充實。
我遇到最大的困難就是在 Day 16 ,那時輸出的結果不合我的意,我持續地修改花了我非常多的時間,因此我學到最重要的事就是勇敢地進行「重構」,果斷地將它拆分成更小、更專業的模組,雖然進行重構前非常的痛苦,但以長遠來看,這樣做的好處可為專案帶來極佳的穩定性與可維護性。
這次的開發也讓我再次體會到開源(Open Source) 社群的強大力量,從 Whisper、n8n、Docker 到 Grafana,這些工具不僅免費,更是讓我有機會站在巨人的肩膀上,實現自己的想法。
這三十天 M2A Agent 已經從一個想法,變成一個基礎,未來若有機會我會持續強化它,讓它變得更聰明、更貼心。
感謝一路上關注我文章的讀者們,謝謝大家!🎉