在這次鐵人賽開始之前,我的目標其實很單純:讓 Notion 筆記不只是儲存資訊,而是能主動回應問題。
30 天過去了,我們從零開始,經歷了資料結構設計、向量化、RAG 檢索、UI 開發,也經歷了無數個 debug、版本重構與靈感乍現。今天,我想用這篇文章,回顧這趟從「自動化」走向「智能化」的旅程。
整個系統的成長,就像一棵從根往上長的樹——從最底層的資料結構,逐步往上建構出語意理解與對話能力。每一層都彼此支撐,缺一不可。
📊 資料層:Notion JSON → SQLite
↓ 結構化儲存
🧠 向量層:SQLite → ChromaDB
↓ 語意化表示
🔍 檢索層:ChromaDB → OpenAI Embedding
↓ 智能搜尋
💬 應用層:RAG Backend → Streamlit UI
↓ 對話互動
階段 | 日期 | 核心目標 | 成果 |
---|---|---|---|
Phase 1:資料基礎 | Day 1–11 | 打通 Notion API,建立資料倉庫 | 完成 Notion → SQLite 完整 Pipeline、設計可擴展的 Schema |
Phase 2:向量化 | Day 12–16 | 讓筆記能被「語意搜尋」 | Chunking 策略確立、ChromaDB 向量化完成 |
Phase 3:自動化 | Day 17–21 | 串接外部資料源 | n8n 自動化電子報摘要、定時同步機制 |
Phase 4:RAG 系統與前端 | Day 22–26 | 建立對話能力 | 檢索 + 生成整合、對話記憶功能 |
Phase 5:完善細節 | Day 27–30 | 從「能動」到「好用」 | 完整 Metadata 流、Notion 連結追蹤、UI/UX 優化 |
問題現象:
使用者:什麼是類別?
AI:類別就像是物件的設計藍圖...
使用者:這個答案從哪來的?
AI:參考來源:⚠️ 未命名筆記 — 未分類
系統能回答問題,但說不出「資訊來自哪裡」。
根本原因:
ChromaDB 有資料,但 Metadata 缺失(page_name
、page_url
)
寫入時用 page_name
,讀取時用 Title,對不上
解決方案:
回頭重構 SQLite Schema,確保所有 metadata 完整儲存
在 Embedding 流程加入 page_name
、page_url
、category
統一命名規則,避免讀寫不一致
問題現象:
<div style="padding:20px">
<img src="data:image/png;base64,iVBOR..." />
<a href="https://tracking.link?utm_source=...">點擊這裡</a>
<!-- 10000 行 CSS -->
</div>
n8n
的 Gmail node 抓到的郵件,滿滿的 HTML
、CSS
、追蹤碼。AI 摘要幾乎失效。
真實世界的資料永遠比想像中髒。清理資料的時間,往往比寫演算法更多。
解決方案:
JavaScript
節點,用 Regex
清理HTML
標籤、Base64
圖片、URL
參數問題現象:
# 使用者點擊「清除對話」
clear_memory()
# 但畫面上對話還在...
Streamlit 每次互動都會重新執行整個腳本,導致狀態混亂。
解決方案:
st.session_state
儲存對話歷史session_state
st.rerun()
強制重新渲染這 30 天,最大的收穫不是「寫了多少程式碼」,而是學會了:
如何設計一個能長大的系統
好的系統設計 ≠ 一次寫對所有東西
好的系統設計 = 能隨著需求演進而擴展
關鍵:
1. 模組化:每個功能獨立,容易替換
2. 可追溯:每個資料都有來源
3. 可驗證:每個結果都能回查
4. 可擴展:新增功能不需要大改
這只是開始。未來,我們還想讓這個系統更強、更聰明:
面向 | 未來計畫 |
---|---|
RAG 效能 | 引入 reranking / hybrid search(embedding + keyword) |
長期記憶 | 將對話記錄保存進 SQLite,支援多輪上下文 |
UI 體驗 | 加入深色模式、主題切換與 Dashboard |
多語支援 | 自動翻譯筆記內容,支援中英混查 |
「最好的學習方式,就是去做一個真正有用的東西。」
這 30 天,我們做到了。 ✨
30 天的鐵人賽,不只是技術文章的挑戰,更是一次 專案管理、團隊協作與自我紀律 的試煉。
我們以團隊「三陳牛肉吉事堡」的名義參賽,這 30 天中,團員們彼此推進、互相支援:
我們曾在半夜修 bug,也曾在凌晨或清晨上傳文章。因為還要兼顧工作與生活,時間總是很緊湊與忙碌;但每當看見畫面終於跑起來、功能成功串接的那一刻,
那份成就感足以抵消所有的疲憊。
最後,如果你對這個系列有任何問題,或想更深入了解我的 Notion × LLM 實作,歡迎一起交流、分享與討論!
也歡迎觀看「三陳牛肉吉事堡」另外兩位團員的文章: