Claw chat (RAG)¶
Claw 是 Claw 页面上的聊天界面。用中文或英文提出自由格式的问题——Claw 会 检索你自己过往的信号,用经 OpenRouter 路由的 Claude 级或 Qwen 级 LLM 合成答案。
当前检索状态(2026-04-22)
下面这条混合流水线目前 只活了一半:BM25 / Postgres 那路能跑,也是 Claw 现在回答问题用的那路。dense / ChromaDB 那路已经设计好、并接入检索代码,但 embedding_worker.py 还是 TODO: Implement 的 stub——所以实际上还没有任何信号被嵌入,dense 检索每次查询都返回空列表。因此 RRF 融合目前退化为只有 BM25。embedder 的完工作为后续工作跟踪。
检索流水线¶
你的问题
│
├────── dense search ──────► ChromaDB (规划中;embedder 为 stub)
│ paraphrase-multilingual 嵌入
│
└────── 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 匹配,几乎从不命中。我们在 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 两路都强制 user isolation——Chroma 通过
where={"user_id": ...}metadata 过滤,Postgres 通过跟仪表盘一样的 RLS 策略。你不会不小心查到别人的历史。 - 融合,不是拼接。 dense 检索抓到语义改写(中文问题找到英文信号,"supply chain" 匹配 "downstream manufacturers")。BM25 抓到 dense 嵌入可能漏掉的精确 ticker 和名称。RRF 合并两份排名列表,不需要校准它们截然不同的分数尺度。
- 双语。 embedder(
paraphrase-multilingual-MiniLM-L12-v2, 384-dim)把中英文摘要放进同一个语义空间,所以任一语言的 query 都能检索到两种语言的内容。
答案长什么样¶
Claw 被提示:
- 用方括号编号
[1]、[2]引用所用事实,编号对应检索到的信号。 - 用与问题相同的语言回答。
- 检索没有命中相关内容时,说"信号不支持这一点"——不幻觉具体细节。
- 除非问题需要列表,否则控制在 250 词以内。
每次调用都写入 rag_query_logs,带:
- query 文本和答案
- 检索到的 signal id 列表
- Top-1 余弦相似度(用作检索质量的代理指标——低于 0.30 通常意味着问题不在范围内)
- 模型名称和延迟
Claw 最好用的时候¶
- "Why did NVDA drop today?" — 拉出你最近带 NVDA 标签的信号,合成一个 why 叙事。
- "Summarise this week's FLASH signals" — 取出窗口内所有 FLASH 档信号,返回一个汇总。
- "What's the Chinese semiconductor policy situation?" — 恰好是单张卡无法传达的多信号、多智能体聚合类问题。
- "最近 AI 芯片需求方面有什么信号?" — 中文全程走得通。
不适合的时候¶
- 当前价 / 报价。 Claw 读信号,不读实时行情。用仪表盘的指数栏或股票卡。
- 跨用户聚合。 RLS 对你的会话隐藏所有其他人的信号——Claw 没有"全局"视图。
- 投资建议。 Claw 拒绝假扮持牌顾问。