Railsコードベースに対する質問応答システム(Retrieval-Augmented Generation)の実装です。
このシステムは、Railsコードベースを解析し、エンベディングを生成して、ユーザーの質問に回答します。 LLM(大規模言語モデル)とベクトル検索を組み合わせることで、コードベースに関する質問に正確に回答することができます。
- Railsコードベースの解析とインデックス化
- コードブロック単位でのチャンク分割
- OpenAIのエンベディングモデルを使用したベクトル表現の生成
- インメモリベクトルストアによる高速な検索
- ユーザークエリに対する回答生成
- Ruby 3.0以上
- OpenAI API キー
- リポジトリをクローン
git clone https://github.com/yourusername/rails-codebase-rag.git
cd rails-codebase-rag
- 依存関係をインストール
bundle install
- 環境変数を設定
.env
ファイルを作成し、OpenAI APIキーを設定します:
OPENAI_API_KEY=your_api_key_here
rake rag:index /path/to/rails
このコマンドは、指定されたRailsコードベースを解析し、エンベディングを生成して、rails_embeddings.json
ファイルに保存します。
rake rag:query "ActiveRecordのバリデーションの仕組みを説明して"
このコマンドは、指定された質問に対して、関連するコードチャンクを検索し、LLMを使用して回答を生成します。
rake rag:help
または
rake rag
このシステムは、ドメイン駆動設計(DDD)の原則に基づいて実装されています。
- ドメイン層: 値オブジェクトとリポジトリインターフェース
- インフラストラクチャ層: リポジトリの実装とファクトリ
- アプリケーション層: サービスとユースケース
- インターフェース層: CLIインターフェースとRakeタスク
- CodeLoaderService: コードベースからファイルをロードするサービス
- ChunkerService: コードをチャンクに分割するサービス
- EmbeddingService: チャンクからエンベディングを生成するサービス
- VectorStoreRepository: エンベディングを格納・検索するリポジトリ
- QueryEngine: ユーザークエリを処理し、回答を生成するサービス
現在、インメモリベクトルストアを使用していますが、将来的にはChroma DBとの連携も可能です。
ChromaAdapter
クラスを実装することで、より大規模なコードベースにも対応できます。
現在はRakeタスクによるCLIインターフェースのみですが、RESTful APIを実装することで、Webアプリケーションからも利用できるようになります。
MIT