在 Day 24,我們打造了第一個可以「對話」的 Notion × LLM 助理,讓使用者能直接用自然語言從筆記中搜尋答案。
但實際使用後我發現,它仍然比較像是「查詢引擎」——每次提問都是孤立的,AI 不記得上一輪你問了什麼,也說不出答案從哪裡來。
今天,我們將從設計層面探討如何讓 Chatbot 擁有記憶與可追溯性,為 Day 26 的實作奠定完整的概念基礎。
限制類型 | 具體情境 | 問題根源 | 影響 |
---|---|---|---|
無法延續對話 | 使用者問「那篇文章的主題是什麼?」 | 系統不知道「那篇」指的是哪一篇 | 需要重複描述完整問題 |
缺乏上下文理解 | 使用者問「他的主要觀點是?」 | 系統不清楚「他」是誰 | 無法進行深入討論 |
答案可信度不足 | 使用者得到回答後 | 不知道資訊來自哪裡,無法驗證 | 降低對系統的信任感 |
無法回溯思路 | 想確認某個說法的出處 | 找不到先前對話的參考來源 | 影響知識管理效率 |
就像跟一個「短期記憶很差」的人聊天,每次都要重新解釋話題。
來看一段對比:
【真人對話】
你:請幫我介紹一下 RAG 架構
我:RAG 是一種結合檢索與生成的技術...(詳細說明)
你:那它和傳統搜尋有什麼不同?
我:(理解「它」指的是 RAG)主要差異在於...
【目前系統】
你:請幫我介紹一下 RAG 架構
🤖:RAG 是一種結合檢索與生成的技術...
你:那它和傳統搜尋有什麼不同?
🤖:❌ 不確定「它」指的是什麼,請問你想了解什麼?
為了讓對話更自然,我們需要讓 Chatbot:
這是讓 AI 能連貫理解上下文的關鍵。
記憶資料結構設計
對話記憶 = [
{
"role": "user",
"content": "請介紹 RAG",
"timestamp": "2025-10-09 10:30:00"
},
{
"role": "assistant",
"content": "RAG 是...",
"sources": [...],
"timestamp": "2025-10-09 10:30:05"
},
{
"role": "user",
"content": "它和傳統搜尋有什麼不同?",
"timestamp": "2025-10-09 10:31:00"
},
...
]
使用者每次提問時,系統會先載入過去幾輪對話,讓 LLM 能「知道前文」。
(如下圖所示)
當對話越來越長,記憶也需要「取捨」與「壓縮」。我們需要智慧管理記憶:
策略 | 說明 | 適用場景 | 優缺點 |
---|---|---|---|
完整保留 | 全記錄保存 | 短對話 | ✅完整上下文 ❌消耗 Token |
滑動窗口 | 保留最近 N 輪 | 中長對話 | ✅控制成本 ❌遺失早期內容 |
摘要壓縮 | 將舊對話摘要化 | 長對話 | ✅效率高 ❌易失細節 |
分層記憶 | 重點長期、細節短期 | 複雜對話 | ✅兼顧完整性 ❌需額外邏輯 |
本次設計選擇:滑動窗口(保留最近 10 輪),平衡實用性與效能。
除了「記得你說過什麼」,系統還要能「記得它為什麼這樣說」。
情境:使用者詢問「Python 的裝飾器是什麼?」
【沒有來源追蹤】
🤖:裝飾器是 Python 中用於修改函式行為的語法糖...
👤:嗯,這是你自己說的還是我的筆記裡有?
🤖:❌(無法回答)
【有來源追蹤】
🤖:裝飾器是 Python 中用於修改函式行為的語法糖...
📚 參考來源:
• 【Python 進階筆記】裝飾器與閉包 — 程式語言筆記
"裝飾器 (Decorator) 提供了一種修改函式或類別的方法..."
• 【學習筆記】Python 核心概念 — 技術學習
"@decorator 語法是 Python 的語法糖..."
👤:原來在這裡!我去看完整筆記
使用者能在回答下方展開:
讓 AI 回答不再是「空口說白話」,而是能回到知識根源。
{
"sources": [
{
"title": "Python 進階筆記:裝飾器與閉包",
"category": "程式語言筆記",
"block_id": "abc123",
"snippet": "裝飾器 (Decorator) 提供了一種修改函式或類別的方法...",
"similarity_score": 0.92,
"retrieved_at": "2025-10-09T10:30:05"
},
{
"title": "Python 核心概念",
"category": "技術學習",
"block_id": "def456",
"snippet": "@decorator 語法是 Python 的語法糖...",
"similarity_score": 0.87,
"retrieved_at": "2025-10-09T10:30:05"
}
]
}
原則 | 說明 | 設計考量 |
---|---|---|
清晰性 | 明確標示筆記標題、分類 | 使用階層式資訊展示 |
可選性 | 使用者可選擇是否顯示來源 | 提供開關選項 |
可互動 | 可點擊來源連結回到原筆記 | 考慮後續實作 Notion 連結 |
相關性排序 | 優先顯示最相關的來源 | 依相似度分數排序 |
摘要預覽 | 顯示文字片段而非完整內容 | 限制 150 字元 + "..." |
我們的最終目標是讓對話過程看起來更自然、可控、可信。
┌──────────────────────────────────────────────┐
│ [⚙️] │ ← 設定按鈕
│ 💬 Notion × LLM 智慧助理 │
├──────────────────────────────────────────────┤
│ │
│ 👤 使用者 10:30 │
│ ┌──────────────────────────────────────┐ │
│ │ 請介紹一下 RAG 架構 │ │
│ └──────────────────────────────────────┘ │
│ │
│ 🤖 助理 10:30 │
│ ┌────────────────────────────────┐ │
│ │ RAG(Retrieval-Augmented │ │
│ │ Generation)是一種... │ │
│ │ │ │
│ │ [📚 參考來源 ▼] │ │
│ └────────────────────────────────┘ │
│ │
│ 👤 使用者 10:31 │
│ ┌──────────────────────────────────────┐ │
│ │ 它和傳統搜尋有什麼不同? │ │
│ └──────────────────────────────────────┘ │
│ │
│ 🤖 助理 10:31 │
│ ┌────────────────────────────────┐ │
│ │ 相較於傳統搜尋引擎... │ │
│ │ [📚 參考來源 ▼] │ │
│ └────────────────────────────────┘ │
│ │
├──────────────────────────────────────────────┤
│ 💬 請輸入你的問題... [送出] │
└──────────────────────────────────────────────┘
┌──────────────────┐
│ ⚙️ 設定 │
├──────────────────┤
│ │
│ 檢索設定 │
│ ├─ 檢索數量 │
│ │ ◄ 3 ► │
│ │ (1-10) │
│ │ │
│ └─ 相似度門檻 │
│ ◄ 0.7 ► │
│ (0.5-0.95) │
│ │
│ 顯示設定 │
│ ☑ 顯示來源 │
│ ☐ 顯示相似度 │
│ ☑ 顯示時間戳記 │
│ │
│ 記憶設定 │
│ ☑ 啟用對話記憶 │
│ 保留輪數: 10 │
│ │
│ ───────────── │
│ │
│ 🗑️ 清除對話記錄 │
│ 📥 匯出對話 │
│ ⚡ 快速提問 │
│ │
└─────────────────┘
功能 | 觸發方式 | 效果 |
---|---|---|
清除對話 | 點擊側邊欄按鈕 | 清空當前對話,開始新對話 |
匯出對話 | 點擊匯出按鈕 | 下載 Markdown 格式的對話記錄 |
回溯對話 | 點擊特定訊息的「從這裡重新開始」 | 回到該訊息後重新提問 |
快速提問 | 點擊預設問題模板 | 自動填入常見問題 |
複製回答 | 點擊訊息旁的複製圖示 | 複製助理回答內容 |
載入狀態:
┌─────────────────────┐
│ 🔄 思考中... │
│ ┌───────────────┐ │
│ │ ▓▓▓▓▓░░░░░░░ │ │
│ └───────────────┘ │
│ 正在檢索相關筆記... │
└─────────────────────┘
成功狀態:
┌─────────────────────┐
│ ✅ 已找到 3 則相關筆記 │
└─────────────────────┘
錯誤狀態:
┌─────────────────────┐
│ ⚠️ 無法檢索資料 │
│ 請檢查網路連線 │
└─────────────────────┘
當使用者輸入模糊問題時:
👤:介紹一下那個東西
🤖:抱歉,我不確定「那個東西」指的是什麼。
💡 建議:
• 你是否想問:剛才提到的 RAG 架構?
• 或者你可以重新描述一下你想了解的內容
Day 25 是整個系列的一個轉折點——我們從「能對話」邁向「能理解」。
在這一章裡,我們不再只關心讓 AI 給出正確答案,而是讓它記得你說過的話,知道它為什麼這樣回答。
這意味著,我們的 Chatbot 正在從「工具」成長為真正的「知識夥伴」。
明天,我們將正式進入實作階段,完成兩個核心模組:
當這兩個模組完成後,Notion Chatbot 將不再只是回答問題的助手,
而是一個能「理解上下文、引用正確知識、並記得你的對話」的智慧夥伴。