RAG from Scratchとは何か
RAG from Scratchは、リポジトリの説明文に「Demystify RAG by building it from scratch. Local LLMs, no black boxes - real understanding of embeddings, vector search, retrieval, and context-augmented generation.」と記載されている通り、RAG(Retrieval-Augmented Generation)パイプラインをスクラッチから構築することで仕組みを理解するための学習用リポジトリだ。
JavaScriptで実装されており、ローカルLLMで動作する。既存のRAGフレームワークを使わず、各ステップを個別に実装する設計により、内部で何が起きているかを完全に把握できる。
パイプラインの各ステップ
RAG from Scratchでは、RAGパイプラインを以下のステップに分解して実装している:
- 埋め込み(Embeddings)生成: テキストデータをベクトル表現に変換する処理
- ベクトル検索(Vector Search): コサイン類似度等を使った類似ベクトルの検索
- リトリーバル(Retrieval): 検索結果から関連度の高い文書を選択
- コンテキスト拡張生成(Context-Augmented Generation): 取得した文書をプロンプトに組み込みLLMで回答を生成
RAGFlowのようなフレームワークではsearch()一つで検索が完結するが、このリポジトリでは各ステップの実装が分離されているため、パラメータ調整(Top-Kの値、スコア関数の選択、埋め込みの正規化等)の判断根拠を理解できる。
CONCEPT.mdによる理論解説
各セクションにCONCEPT.mdが用意されており、コードだけでなく「なぜこの設計になっているのか」の理論的な背景も解説されている。RAGの経験がない状態からでも、実装と理論を並行して学べる構成だ。
LangChainやDifyとの位置づけの違い
LangChainやDifyはRAGパイプラインを構築するための実用フレームワークであり、プロダクション利用が前提。RAG from Scratchはそれらの内部動作を理解するための教材という位置づけだ。
本番環境では既存フレームワークを使いつつ、パラメータ調整や精度改善のためにRAGの各要素の動作原理を理解しておく ── という使い分けが現実的なアプローチだろう。
セットアップ
git clone https://github.com/pguso/rag-from-scratch
cd rag-from-scratch
JavaScriptで実装されており、最小限の依存関係でローカル環境で動作する。ローカルLLMが前提のため、外部APIキーは不要。