検索パイプライン
search_memories が呼び出されると、クエリは多段階パイプラインを通過します:
セマンティック検索
sqlite-vec を使用してvec_memories テーブルに対するコサイン距離検索を実行します。ベクトル類似度順にメモリを返します。
距離は 0-1 の類似度スコアに変換されます:
全文検索(BM25)
Porter ステミングトークナイザーを使用した FTS5 を利用します。FTS インデックスはcontent と tags フィールドをカバーします。
BM25 ランクは 0-1 に正規化されます:
abs() が適用されます。
ハイブリッドスコアリング
各候補メモリは4つの要素から重み付きスコアを受け取ります:デフォルトの重み
| 要素 | 重み | 説明 |
|---|---|---|
| Semantic | 0.4 | ベクトル類似度 |
| BM25 | 0.3 | 全文検索の関連性 |
| Recency | 0.2 | 最近アクセスされたかどうか |
| Salience | 0.1 | 時間経過で減衰する重要度 |
Recency スコア
設定可能な半減期(デフォルト:24時間)による指数減衰:Salience スコア
メモリのimportance 値と時間減衰を組み合わせます:
フィルタリング
スコアリングの前に、候補は以下でフィルタリングされます:- レイヤーフィルター — 指定されたレイヤーのメモリのみを含む
- スコープフィルター — プロジェクトまたはグローバルスコープでフィルタ
- TTL フィルター —
expiresAtを過ぎたメモリを除外 - ソフトデリートフィルター — 削除済みメモリを常に除外