ハイブリッド検索とRRFにより、純粋なベクトル検索を超えるAIメモリシステムが向上します。

ローカルファーストでセルフホスト型のセットアップとして、PostgreSQLとpgvectorを使用したAIアシスタント向けのオープンソースメモリシステムが開発されました。このシステムは、AIアシスタントがセッションを超えて記憶する情報を保存し、検索可能にします。
なぜ純粋なベクトル検索では不十分だったのか
開発者は当初、純粋なベクトル検索から始めました:クエリを埋め込み、コサイン類似度を使用し、上位k件の結果を返します。これは曖昧な質問には機能しましたが、完全一致の検索では一貫して失敗しました。例えば、「RRF merging」を検索すると、文字通り「RRF merging」と記載されている文書ではなく、数か月前の「ランクリストの結合」に関するチャンクが返されてしまいました。
ハイブリッド検索ソリューション
解決策には、2つ目の検索手段の追加が含まれました:PostgreSQLのtsvectorとGINインデックスを使用した全文検索です。このキーワードマッチングは、ベクトル検索が見逃すものを捕捉します。しかし、これにより統合が必要な2つのランクリストが作成されました。
相互順位融合(RRF)
2つのランクリストを統合するには、相互順位融合が答えであることが証明されました。式は単純です:スコア = 1 / (k + 順位)、ここでk=60(標準値)。両方のリストに出現する結果は、両方のスコアが加算されます。このアプローチでは、コサイン類似度とts_rankの間の重み調整やスコア正規化は必要ありません—順位のみを使用します。
クエリ拡張技術
検索前に、システムはクエリを埋め込みモデルのWordPieceトークナイザーで実行し、主要な用語(技術的またはドメイン用語である可能性が高いマルチサブワードトークン)を抽出します。これにより最大3つのクエリバリエーションが生成され、すべてを埋め込み、並行して検索します。これにより、1つの表現では見逃される可能性のある結果を捕捉します。
技術スタック
- PostgreSQL 16 + pgvector(ベクトル用HNSWインデックス、全文検索用GINインデックス)
- 埋め込み用all-MiniLM-L6-v2(384次元、CPUで実行)
- 非同期psycopg 3を使用したPython
- 3つの取り込みアダプター:マークダウン、プレーンテキスト、Claude会話JSON
システム全体はローカルで実行され、埋め込み用のAPI呼び出しやクラウド依存性はありません。コードは最近出荷され、開発者は完全なアプローチについて詳細なブログ記事を書いています。
📖 Read the full source: r/LocalLLaMA
👀 See Also

OnPrem.LLM エージェントエグゼキューター:組み込みツールを備えたサンドボックス化AIエージェントを起動
OnPrem.LLMのAgentExecutorは、クラウドまたはローカルモデルを使用して複雑なタスクを実行する自律型AIエージェントを作成できます。ファイル操作、シェルコマンド、ウェブ検索を含む9つの組み込みツールを備えており、セキュリティのためにサンドボックス化されたコンテナでエージェントを実行することも可能です。

Claude Code用のポータブルエンジニアリングシステム:フック、専門エージェント、自己改善機能を搭載
ある開発者が、Claude Codeに繰り返し指示を出すことにうんざりし、~/.claude/に常駐し、すべてのプロジェクトに自動的に適用されるポータブルなエンジニアリングシステムを構築しました。このシステムは、650行の憲法、危険なコマンドをブロックする決定論的フック、3つの専門エージェント、そして自己改善型の複合エンジニアリングアプローチを特徴としています。

カスタムReddit MCP for Claude Desktop/コードがGitHubで共有されています
開発者が、Claude DesktopとClaude Code向けにカスタム構築したReddit MCPを公開しました。このツールは、Redditでのリサーチを直接ワークフローに統合するためのもので、GitHubでドキュメントが公開されており、無料で利用できます。

エージェントファクトリー:永続的なAIサブエージェントチームのためのClaudeコードプラグイン
Agent-factoryは、Claude Codeのプラグインで、個性とファイルベースのメモリを持つ永続的なサブエージェントチームを作成します。対話型インタビュープロセスを通じてプロジェクトごとに2〜5人のエージェントを構築し、各エージェントにはコードレビュー、技術的負債の追跡、戦略立案などの特定の役割があります。