umbertogriffo/rag-chatbot

RAG (Retrieval-augmented generation) ChatBot that provides answers based on contextual information extracted from a collection of Markdown files.

What it solves

このプロジェクトは、特定の Markdown ファイル群に基づいて質問に答えるローカルかつ会話認識型のチャットボットを提供します。プライベートドキュメントから正確でコンテキスト対応の応答を生成する課題を解決し、外部クラウド API を使用せずにすべてローカルで実行します。

How it works

システムは llama.cpp によるローカル LLM 推論と Chroma をベクトルデータベースとする Retrieval‑Augmented Generation(RAG)パイプラインを組み合わせています。

  1. Memory Building:Markdown ファイルをリファクタリングされた RecursiveCharacterTextSplitter でチャンクに分割し、Sentence Transformers で数値埋め込みに変換して Chroma に保存します。
  2. Incremental Indexing:ハッシュと SQLite のマッピングテーブルでドキュメントバージョンを追跡し、変更または新規ドキュメントのみを更新することでインデックス全体の再構築を回避します。
  3. Retrieval:ユーザーが質問すると、LLM が検索精度向上のためにクエリを書き換えます。その後、システムはベクトルストアから最も関連性の高いチャンクを取得します。
  4. Synthesis:コンテキストオーバーフローを防ぐために、"Create and Refine"(順次合成)または "Hierarchical Summarization"(独立した回答を統合)という 2 つの戦略を提供します。
  5. Conversation Memory:チャットボットは会話履歴を保存し、複数回のインタラクションにわたってコンテキストを保持します。

Who it’s for

プライベートな AI アシスタントを自前でホストしたいユーザー向けです。Markdown 形式のドキュメントや個人ノートを「読んで」その特定のナレッジベースに基づいた回答を提供します。

Highlights

  • Local Executionllama.cpp の量子化 GGUF モデルを使用し、CPU または GPU(CUDA/Metal)で実行可能。
  • Incremental Updates:ドキュメントが変更されたときにインデックス全体を再構築せずに効率的に更新。
  • Flexible Synthesis:大量の取得コンテキストを処理するための複数戦略をサポート。
  • Query Rewriting:検索前に LLM にユーザーの質問を最適化させ、検索精度を向上。
  • Full Stack:FastAPI バックエンドとドキュメントアップローダー付きの React/TypeScript フロントエンドを含む。