高速埋め込みとランスDBによるAI会話のためのローカル意味検索

ある開発者が、クラウド依存やAPIキーなしで36万8千件のメッセージを処理する、AI会話履歴のためのローカルセマンティック検索システムを実装しました。このプロジェクトでは、CPUベースの埋め込みにfastembedとBAAI/bge-small-en-v1.5モデルを使用し、ベクトルストアにはサーバープロセスなしで単一ディレクトリとして動作するLanceDBを採用しています。
技術スタック
- 埋め込み: fastembed with BAAI/bge-small-en-v1.5 model (384次元)
- ベクトルストア: LanceDB - 単一ディレクトリ、サーバープロセスなし、追記に適した設計
- 取り込み: JSONLセッショントランスクリプトから取得 (Claude Code、あらゆるチャットエクスポート)
- 埋め込み性能: M4 CPUで約500ドキュメント/秒
主要な実装詳細
開発者は4ヶ月間の反復開発でいくつかの実用的な教訓を得ました:
- 選択的埋め込み: 初期バージョンではすべてのメッセージを埋め込んでいましたが、これは信号対雑音比を低下させました。現在の実装では、ユーザーメッセージと実質的な内容を持つアシスタントメッセージのみを埋め込み(「はい、こちらがそのコードです」のような応答はスキップ)、ベクトル数を60%削減しながら検索品質を向上させています。
- チャンキング戦略: 固定サイズのチャンクから会話ターンチャンクへの切り替えが、検索関連性に大きな違いをもたらしました。モデル選択(nomic-embed-text、bge-large、all-MiniLMを試行)は、チャンキングアプローチと比較してわずかな差しか示しませんでした。
- LanceDBの利点: 開発者はLanceDBを「個人規模では馬鹿げるほど過小評価されている」と発見しました - サーバー不要、Docker不要、新しいベクトルを即座に追加できる単なるディレクトリであり、過剰設計されたpgvectorセットアップを置き換えました。
- 再埋め込みワークフロー: 384次元のbge-small-en-v1.5モデルは十分に高速で、cronジョブとして1時間ごとに再埋め込みが可能です。11万7千ベクトルの完全な再インデックスは、M2ハードウェアで約4分かかります。
性能指標
- 取り込み済み総メッセージ数: 40万7千件
- インデックス化済みベクトル数: 8万7千件
- 検索レイテンシ (p50): 11万7千ベクトル全体で12ms
- 完全再インデックス時間: 約4分 (M2)
- ストレージ: ディスク上で約180MB
- 必要なAPIキー数: 0
このプロジェクトはMITライセンスの下でオープンソース化されており、github.com/mordechaipotash/brain-mcpで利用可能です。インストールはpipx install brain-mcp && brain-mcp setupで行えます。
📖 Read the full source: r/LocalLLaMA
👀 See Also

AutoSkillUpdate:古いスキルを検出するClaudeコードプラグイン
AutoSkillUpdateは、コードベースをスキャンし、既存のスキルと比較してドリフトを特定するオープンソースのClaude Codeプラグインです。ファイルパスと行参照を含むドリフトレポートを提供し、ユーザーの確認を得て古くなったスキルを書き換えるオプションを提供します。

Relvyは、OpenRCAベンチマークにおいてClaudeの根本原因分析精度を12パーセントポイント向上させます。
Relvyは、ランブックを自動化するツールで、OpenRCAベンチマークにおける根本原因分析のClaudeの精度を12パーセントポイント向上させたことを実証しました。この結果は、11ポイントを獲得したHacker Newsの投稿で共有されました。

OpenClaw開発者、900回のユーザートライアル後にキラー用途を模索中
OpenClawの開発者は、ユーザーがTelegramインターフェース、カレンダー連携、自動化ワークフローなどの機能を試すものの、大半は長期的にツールを使い続けないと報告しています。課題は、実験的なものではなく、必須となる日常使用のワークフローを見つけることです。

Claude AI セッションの圧縮問題と回避策
Claude AIセッションでのデフォルトの圧縮処理は、検索精度を約9.75/10から約5/10に低下させ、幻覚を引き起こす可能性があります。ユーザーは418Kトークンでテストを行い、Opusを使用した手動圧縮では精度が維持される一方、デフォルトの圧縮処理では失敗することを確認しました。