references/conversation-recall.md
Rama main · réplica de lectura del repositorio original.
# Conversation Recall v1
讓 `x-knowledge-base` 不只是收藏整理器,而是對話中的第二層記憶。
## 目的
這套設計要解決的不是「怎麼存更多書籤」,而是:
- 把值得留下的內容留下來
- 把留下來的內容整理成可回用知識
- 在對的對話時機主動提起,而不是等使用者自己想起來
一句話:
> x-knowledge 不是收藏夾,而是對話中的知識回用層。
---
## 設計原則
### 1. 有幫助才主動提
不是查到就提。
只有當召回結果真的能推進當前對話、決策或行動時才提。
### 2. 不打擾比多提醒更重要
如果關聯勉強、內容普通、或當前只是閒聊,就不要插話。
### 3. 先短提,再展開
第一次主動召回只給短格式:
- 一句話摘要
- 為什麼相關
- 原文連結
使用者追問時再展開。
### 4. 優先可行動內容
優先召回:
- 具體案例
- workflow / SOP
- 具可執行性的觀點
- 能幫當前專案前進的資料
低優先:
- 太空泛的趨勢文
- 只有情緒或態度、沒有方法的貼文
- 沒來源的二手整理
---
## 觸發規則 v1
只有同時滿足以下兩件事,才主動召回:
1. 當前對話值得查書籤
2. 查到的內容真的值得提
### 第一層:當前對話值得查
命中以下任一情況即可進入召回:
- 使用者在問做法、workflow、案例、靈感、決策方向
- 使用者在整理脈絡、比較路線、釐清下一步
- 當前主題明顯落在高頻收藏領域
- 代理判斷:書籤庫比通用知識更可能提供有價值的答案
#### 強觸發類型(v1)
以下題型應優先視為值得查書籤:
- 做法 / workflow / SOP / framework 類問題
- 案例 / 靈感 / 參考 / 對照類問題
- 策略 / 決策 / 優先順序類問題
- 高頻收藏主題(OpenClaw / agent / workflow / AI SEO / automation / GitHub tools / content systems / startup / GTM)
### 高頻收藏領域(v1)
- OpenClaw / agent / workflow
- SEO / GEO / AEO / AI search
- AI 影片 / prompts / content
- automation / tools / GitHub
- startup / SaaS / GTM
### 第二層:結果值得提
召回結果至少符合以下其中兩項才值得主動提:
- 有清楚標題
- 有像樣摘要
- 有原文連結
- relevance 高
- 對當前任務 / 決策 / 思考真的有幫助
---
## 不觸發情境
以下情況預設不要主動召回:
- 純閒聊
- 簡單事務題
- 僅字面沾邊、沒有實質關聯
- 同一輪已主動提醒過且使用者沒追問
- 結果缺摘要、缺來源、內容太空或明顯低價值
---
## Query 生成規則(v1)
不要把整段對話原封不動拿去查。
先抽成一個短 query,原則是:
1. 主題詞
2. 問題意圖詞(做法 / 比較 / 案例 / 規劃)
3. 1–2 個有幫助的上下文字
### query 範例
- `OpenClaw memory recall workflow`
- `AI SEO case study content system`
- `agent workflow planning`
### 反例
不要這樣做:
- 直接把使用者整段對話貼進 recall
- 把無關贅字、情緒語氣、寒暄一起丟進去
- query 長到失去主題焦點
## 回覆格式 v1
預設只用短格式:
```text
你之前 X 書籤裡有篇相關的:
- 標題:一句話摘要
為什麼相關:...
原文:...
```
### 回覆限制
- 每輪對話最多主動提 1 次
- 預設最多帶 1–2 篇
- 除非使用者追問,否則不主動貼長摘要
---
## 實際對話範例(v1)
### 範例 1:OpenClaw / workflow
**當前對話:**
- Pan:我想優化 OpenClaw workflow,有沒有值得抄的做法?
**主動召回:**
```text
你之前 X 書籤裡有篇相關的:
- OpenClaw + Codex Agent Swarm: 一人開發團隊完整設定:這篇整理了一人開發團隊怎麼拆 agent workflow。
為什麼相關:你現在就在問 workflow 做法,這篇是可直接參考的案例。
原文:https://x.com/elvissun/status/2025920521871716562
```
### 範例 2:AI SEO / AEO
**當前對話:**
- Pan:最近 AI SEO 這條路到底值不值得繼續深挖?
**主動召回:**
```text
你之前 X 書籤裡有篇相關的:
- AEO 流量藍圖 - AI 時代的 SEO 攻略:這篇核心在講從傳統 SEO 轉向 AEO,讓 AI 搜尋更容易推薦你的品牌。
為什麼相關:你現在在評估方向,這篇剛好是 AI SEO / AEO 的具體案例。
原文:<原始來源若有>
```
### 範例 3:Agent memory / 知識回用
**當前對話:**
- Pan:我不想存一堆書籤最後還是忘掉,這東西要怎麼真的回用?
**主動召回:**
```text
你之前 X 書籤裡有篇相關的:
- OpenClaw Memory 終極指南:現狀、方案與未來:這篇在講 agent memory 的現狀與實作方向。
為什麼相關:你現在問的是「怎麼回用知識」,這篇正好提供 memory / recall 的脈絡。
原文:https://x.com/lijiuer92/status/2025678747509391664
```
這三個範例的重點不是把搜尋結果全部倒出來,而是:
- 只提最 relevant 的 1 篇
- 用一句話說清楚它為什麼值得看
- 讓使用者立刻決定要不要深挖
---
## 工具對應
目前 v1 的可執行入口:
```bash
python3 scripts/recall_for_conversation.py "AI SEO 案例" --format chat
python3 scripts/recall_for_conversation.py "OpenClaw workflow agent memory" --format chat
python3 scripts/recall_gate.py "最近 AI SEO 值不值得做" --json
```
### 目前版本特性(v1)
- 依賴既有 `search_index.json`
- **召回方式:關鍵字 token 比對**(非語意向量搜尋)
- query 分詞後對 title (+8) / tags (+6) / category (+4) / summary (+3) 做字串命中計分
- 同義詞、縮寫、中英混用時命中率會下降,屬已知限制
- 可輸出 markdown / json / prompt / chat 格式
- 向量搜尋(真正的語意召回)規劃於 v3 實作
---
## 路線圖(Roadmap)
### v1:先讓主動召回真的能用
目標:
- 讓書籤知識可以在對話中被主動提起
- 先驗證使用者體感,不追求技術最強
內容:
- `search_index.json` 索引
- `recall_for_conversation.py` 基礎召回
- `markdown / json / prompt / chat` 輸出
- 觸發規則 v1
- 公開教學文件與對話範例
### v2:提升召回品質
目標:
- 讓主動召回更穩、更準、更像助手而不是搜尋器
優先升級:
- 更穩定的一句話摘要
- 補齊 `source_url`
- 更好的 relevance ranking
- 更明確的高價值 / 低價值內容過濾
- 讓召回結果更偏向「可落地案例」而不是泛主題匹配
### v3:接入向量搜尋
目標:
- 讓召回從關鍵字匹配升級到語意召回
- 當對話和書籤用字不同但意思接近時,仍能找回相關內容
#### 實作方案(建議)
**選項 A:sqlite-vec(推薦,零外部服務)**
```bash
pip install sqlite-vec
```
- 把每張知識卡的 title + summary 送 embedding API(OpenAI / Jina / 本地 model)
- 向量存進 SQLite,查詢時直接 cosine similarity
- 無需額外服務,整個 DB 就是一個 `.db` 檔
- 適合單人 / 低頻使用場景
**選項 B:chromadb(本地向量 DB)**
```bash
pip install chromadb
```
- 比 sqlite-vec 功能更完整,支援 metadata filtering
- 可搭配 OpenAI / HuggingFace embedding
- 適合未來要擴充多用戶或更複雜查詢的場景
#### 遷移路徑
1. 新增 `scripts/build_vector_index.sh` — 批次 embed 所有知識卡
2. 新增 `scripts/recall_semantic.py` — 語意召回入口(與 recall_for_conversation.py 並存)
3. `recall_for_conversation.py` 加 `--semantic` flag,觸發向量查詢路徑
4. 原有 keyword 召回作為 fallback(當向量 index 不存在時自動降級)
內容:
- embeddings / semantic index(sqlite-vec 或 chromadb)
- query 語意化(直接 embed query text)
- 更自然的 recall ranking(cosine similarity score)
- 減少只靠 title / tags 命中的侷限
### v4:接入 NotebookLM / 雲端圖書館
目標:
- 讓本地知識卡不只存在工作區,也能在 NotebookLM 內作為研究圖書館使用
內容:
- Google Drive 同步策略
- NotebookLM 匯出格式標準化
- 圖書館來源管理
- 本地知識卡與雲端研究庫的雙向使用策略
---
## v1 的定位
這不是最終版智能 recall。
這是最小可用版,目的只有兩個:
1. 讓主動召回能力先真的跑起來
2. 驗證「在對話中主動提書籤」是否符合使用者體感
如果這層體感成立,再往下升級:
- 更穩的摘要品質
- 更完整的 source_url
- 更準的 ranking
- 向量搜尋 / embedding recall
---
## 給公開使用者的理解方式
如果你要把這個 skill 用在自己的知識庫,請先記住:
- 主動召回的重點不是「查很多」
- 而是「在剛好的時候,提最有價值的少數內容」
做對了,它會像第二層記憶。
做錯了,它只會變成愛插話的搜尋器。