跳轉到

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 先做預分詞:

  1. 抽出 \w+ token、轉小寫。
  2. 丟掉單字元 token 和一組小的英文停用詞。
  3. 保留順序去重。
  4. | 串起來,交給 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 拒絕扮演有牌照的顧問。

另見