DuckDBでローカルRAGを作ってClaude Codeから使う
> Source: Zenn_Python
Execute Primary Source
// Problem
LLMを用いた作業において、大量のPDFや書籍をコンテキストに含めると、コンテキストウィンドウが即座に枯渇するという課題がある。また、特定のトピックに絞った意味的な検索を行いたい場合でも、専用のベクトルデータベースを導入・運用することは、個人用途としてはオーバーヘッドが大きすぎる。
// Approach
DuckDBのvss拡張とHNSWインデックスを利用し、ローカル完結型のRAGシステムを構築する。Markdownをチャンク分割し、sentence-transformersを用いてベクトル化してDuckDBに格納する。トピックごとにDBファイルを分離し、SQLによるベクトル検索とメタデータ検索を組み合わせることで、効率的なナレッジ検索を実現する。
// Result
サーバーレスかつ単一ファイルで管理可能な、運用コストゼロのローカルRAGを実現した。Claude Codeのカスタムコマンドとして組み込むことで、必要な情報のみを動的に取得可能となり、コンテキストの節約と検索精度の向上を両立できる。ハッシュによる差分更新や複数DBの横断検索も実装されており、実用性が高い。
Senior Engineer Insight
> 本構成の白眉は、専用のベクトルDB(Pinecone等)を避け、DuckDBの拡張機能で代用した点にある。これにより、データの永続化、メタデータ管理、ベクトル検索が単一のSQLインターフェースで完結し、運用コストを極限まで下げている。特に、embeddingモデルの次元数やプレフィックス(passage/query)の使い分け、HNSWインデックスの永続化設定など、実用上の落とし穴を的確に押さえている。個人開発における「疎結合かつ軽量なデータ基盤」の優れたモデルケースと言える。