Claw chat(RAG)¶
Claw 是 Claw 頁面上的對話介面。您可以用自由格式提問——中文或英文都行——Claw 會檢索您自己過去的訊號,再透過 OpenRouter 路由到 Claude 或 Qwen 等級的 LLM 做合成回答。
目前檢索狀態(2026-04-22)
下面描述的混合流程目前只有一半在線:BM25 / Postgres 那一側能運作,也是 Claw 目前用來回答問題的管道。dense / ChromaDB 那一側已經設計好、也接到檢索程式碼,但 embedding_worker.py 還是 TODO: Implement 的 stub——所以目前實際上沒有任何訊號被 embed,dense 檢索每次查詢都回傳空清單。因此 RRF 融合目前退化成只有 BM25。把 embedder 完成是列為後續工作。
檢索流程¶
您的問題
│
├────── dense search ──────► ChromaDB(規劃中;embedder 仍是 stub)
│ paraphrase-multilingual embeddings
│
└────── BM25 關鍵字搜尋 ──► Postgres tsvector
query 分詞 → "term1 | term2 | …"(OR-match)
跑在 summary_en + summary_zh + tickers 上
│
▼
Reciprocal Rank Fusion(RRF,k=60)
│
▼
融合後取 top-6 訊號,經 RLS 過濾只剩您自己的
│
▼
組 prompt → OpenRouter LLM → 回答
│
▼
寫入一列到 rag_query_logs
BM25 分詞器¶
使用者的查詢是自然語言句子(例如 "Should I buy NVDA right now?")。Postgres 的 websearch_to_tsquery 預設 AND-match 每個詞,幾乎從不命中。我們在 rag/bm25_search._build_or_tsquery 先做預分詞:
- 抽出
\w+token、轉小寫。 - 丟掉單字元 token 和一組小的英文停用詞。
- 保留順序去重。
- 用
|串起來,交給to_tsquery。
"Should I buy NVDA right now?" → "buy | nvda" → 命中任何提到其中一個詞的訊號,按 ts_rank 排名。之後 LLM 再從 top-6 裡挑出相關的子集。
被檢索到的是什麼¶
- 只有您自己的訊號。 dense 和 lexical 兩條路徑都強制使用者隔離——Chroma 透過
where={"user_id": ...}metadata 過濾,Postgres 透過跟儀表板同一條 RLS 策略。您不可能誤查到別人的歷史。 - 融合,不是串接。 Dense 檢索能抓到語意改寫(中文問題找到英文訊號、或者「supply chain」對上「downstream manufacturers」)。BM25 能抓到 dense embedding 可能漏掉的精確 ticker 和名稱。RRF 合併這兩份排名清單,不需要校準它們尺度差異很大的分數。
- 雙語。 Embedder(
paraphrase-multilingual-MiniLM-L12-v2,384 維)把英文和中文摘要放進同一個語意空間,所以任一語言的查詢都能檢索到兩種語言的內容。
回答長什麼樣¶
Claw 的 prompt 要它:
- 用方括號編號
[1]、[2]引用它使用的事實,對應到檢索到的訊號。 - 用跟問題相同的語言回答。
- 當檢索沒抓到相關內容時,要講「the signals don't support that」——不要幻覺出具體細節。
- 除非問題需要列表,否則保持在 ~250 字以內。
每次呼叫都寫入 rag_query_logs,內容包括:
- 查詢文字與回答
- 檢索到的 signal id 清單
- Top-1 cosine similarity(適合當檢索品質代理——低於 0.30 通常表示問題超出範圍)
- 模型名稱與延遲
Claw 最適合什麼情境¶
- "Why did NVDA drop today?" —— 拉出您最近帶 NVDA 標記的訊號,合成一段 why-narrative。
- "Summarise this week's FLASH signals" —— 檢索時間窗內所有 FLASH 層訊號,回傳彙整。
- "What's the Chinese semiconductor policy situation?" —— 正好是單一卡片無法呈現、需要跨訊號、跨智慧代理彙整的那種問題。
- "最近 AI 芯片需求方面有什么信号?" —— 完整的中文來回都能跑。
Claw 不適合什麼¶
- 當前股價 / 報價。 Claw 讀的是訊號,不是即時行情。請用儀表板的指數列或股票卡。
- 跨使用者彙整。 RLS 會把別人的訊號從您的 session 藏起來——Claw 沒有「全域」視角。
- 投資建議。 Claw 拒絕扮演有牌照的顧問。