1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

RAGLight: RAG実装は複雑すぎるが避けられないCLIウィザードでショートカット実装

Posted at

目次


Part 1: RAGとRAGLightの紹介

概要

このパートでは、RAGLightがどのようなライブラリであるか、そしてその根幹技術であるRAGの基本的な概念について解説します。RAGLightが持つモジュール性や柔軟性といった主要な特徴を理解することで、なぜこのライブラリが注目されているのかが明確になります。

Chapter 1: はじめに - RAGLightとは?

コアメッセージ: RAGLightは、専門家でなくてもRAGシステムを簡単に構築できる、軽量で柔軟なPythonライブラリです。

結論:
RAGLightは、Retrieval-Augmented Generation(RAG)を実装するための、軽量でモジュール式のPythonライブラリです。LLM(大規模言語モデル)の能力を、ドキュメント検索と自然言語生成を組み合わせることで強化します。

主要なポイント:

  1. シンプルさと柔軟性: RAGLightは、シンプルな設計でありながら高い柔軟性を持ちます。これにより、様々なコンポーネントを容易に統合できます。
  2. モジュール式アーキテクチャ: LLM、埋め込みモデル(Embeddings)、ベクトルストア(Vector Store)などを、まるでレゴブロックのように自由に組み合わせることが可能です。
  3. コンテキスト認識AIの構築: 独自のデータに基づいた回答を生成する、いわゆる「文脈を理解するAI」ソリューションを構築するための理想的なツールです。

具体例:
以下の図は、RAGLightが持つ主要な機能とコンポーネントの全体像を示しています。

Chapter 2: RAGの基本概念 - LLMのための「オープンブック試験」

コアメッセージ: RAGは、LLMが外部の知識を参照しながら回答を生成する技術であり、情報の正確性と最新性を向上させます。

結論:
RAG(Retrieval-Augmented Generation)は、LLMが回答を生成する際に、あらかじめ用意された知識源(ドキュメントなど)から関連情報を検索(Retrieval)し、その情報を基に回答を生成(Generation)する仕組みです。

主要なポイント:

  1. メタファーとしての「オープンブック試験」: RAGは、LLMが何も見ずに答える「暗記力テスト」ではなく、参考書(ナレッジベース)を見ながら答える「オープンブック試験」に似ています。これにより、LLMは知らない情報についても正確に答えられるようになります。
  2. ハルシネーションの抑制: LLMが事実に基づかない情報を生成してしまう「ハルシネーション(幻覚)」という問題を、事実に基づいた情報を参照することで大幅に軽減できます。
  3. 知識の更新が容易: LLM自体を再学習させることなく、参照するドキュメントを更新するだけで、AIの知識を最新の状態に保つことが可能です。

具体例:
RAGの基本的な処理フローは以下のようになります。ユーザーからの質問をまずベクトル化し、それを基にデータベースを検索して関連情報を取得。その情報をプロンプトに含めてLLMに渡すことで、より精度の高い回答が生成されます。

Chapter 3: RAGLightの主な特徴

コアメッセージ: RAGLightは、LLMに依存しない設計、多様なドキュメントサポート、そして簡単な拡張性により、誰でも高度なRAGシステムを構築できる環境を提供します。

結論:
RAGLightは、開発者が特定の技術に縛られることなく、自由にコンポーネントを組み合わせて最適なRAGシステムを構築できるように設計されています。

主要なポイント:

  1. LLMに依存しない (LLM Agnostic) 🧠: OllamaLMStudioOpenAIなど、様々なプロバイダーのLLMとシームレスに連携できます。
  2. 柔軟なドキュメントサポート 📄: PDF、TXT、DOCXといった一般的なドキュメントから、PythonやJavascriptなどのソースコードまで、多様な形式のファイルを取り込んで知識源とすることができます。
  3. 拡張可能なアーキテクチャ 🔧: ベクトルストア、埋め込みモデル、LLMを必要に応じて簡単に入れ替えることができ、プロジェクトの要件に合わせたカスタマイズが容易です。
  4. 高度なパイプライン 🚀: 単純なRAGだけでなく、エージェントによる自律的な思考を取り入れたAgentic RAGや、推論と省察のループを追加するRATなど、より高度なパイプラインも提供します。

具体例:
RAGLightのシステムアーキテクチャは、各機能がモジュールとして整理されており、非常に見通しが良く、拡張しやすい構造になっています。


Part 2: RAGLightを使ってみる - クイックスタートガイド

概要

このパートでは、RAGLightを実際に動かすための手順を解説します。簡単なインストール方法から、コマンドラインツールを使った対話形式でのセットアップまで、コードを一行も書かずにRAGを体験する方法を紹介します。

Chapter 1: 最小要件とインストール

コアメッセージ: RAGLightを利用するには、OllamaなどのローカルLLM環境と、簡単なpipコマンドによるインストールが必要です。

結論:
RAGLightを始めるための準備は非常にシンプルです。ローカルで動作するLLMサービスを用意し、Pythonのパッケージマネージャーであるpipを使ってライブラリをインストールします。

主要なポイント:

  1. 前提条件 ⚠️: RAGLightは、OllamaLMStudiovLLMOpenAI APIなど、様々なLLMサービスと連携します。特にローカル環境で手軽に試すためには、Ollamaをインストールし、利用したいモデル(例: llama3)をダウンロードしておくことが推奨されます。
  2. インストール方法 🛠️: ターミナル(コマンドプロンプト)で以下のコマンドを実行するだけで、RAGLightがインストールされます。
    pip install raglight
    
  3. 環境変数: MistralOpenAIのAPIを利用する場合は、APIキーを環境変数に設定する必要があります。これにより、コード内に直接キーを書き込むことなく、安全にサービスを利用できます。
    • MISTRAL_API_KEY
    • OPENAI_API_KEY
    • GEMINI_API_KEY

Chapter 2: 最速で体験!CLIウィザードの使い方

コアメッセージ: raglight chatコマンドを使えば、対話形式で設定を進めるだけで、すぐに手元のドキュメントとチャットできるRAG環境が完成します。

結論:
RAGLightには、コマンドライン上で対話的にRAGパイプラインをセットアップできる便利なウィザード機能が用意されています。これにより、プログラミングの知識がなくても、誰でも簡単にRAGを試すことができます。

主要なポイント:

  1. コマンドの実行 💬: ターミナルで以下のコマンドを実行するだけで、ウィザードが起動します。
    raglight chat
    
    エージェント機能を使いたい場合は、以下のコマンドを使用します。
    raglight agentic-chat
    
  2. 対話形式のセットアップ: ウィザードは、以下の項目を順番に質問してきます。
    • 📂 データソース: 知識源としたいドキュメントが入っているフォルダのパス。
    • 🚫 無視するフォルダ: インデックス作成から除外したいフォルダ(例: .venv, node_modules)。
    • 💾 ベクトルデータベース: インデックス化したデータを保存する場所と名前。
    • 🧠 埋め込みモデル: ドキュメントの意味を理解するために使用するモデル。
    • 🤖 言語モデル (LLM): 回答を生成するために使用するLLM。
  3. 自動実行: 全ての設定が完了すると、RAGLightは自動的にドキュメントのインデックスを作成し、チャットセッションを開始します。

インデックス作成から除外するフォルダ機能 🚫
RAGLightは、.venv(仮想環境)やnode_modules(ライブラリ)、__pycache__(Pythonキャッシュ)など、通常は検索対象に含める必要のないフォルダを自動的に除外する機能を持っています。これにより、検索のノイズを減らし、パフォーマンスを向上させることができます。このリストは、CLIウィザードや設定クラスでカスタマイズすることも可能です。

Chapter 3: サポートされているプロバイダーとデータベース

コアメッセージ: RAGLightは主要なLLM、埋め込みモデル、ベクトルストアを幅広くサポートしており、ユーザーは最適な組み合わせを選択できます。

結論:
RAGLightのモジュール性は、様々なサービスプロバイダーやデータベース技術をサポートすることで実現されています。これにより、ユーザーは特定のベンダーにロックインされることなく、プロジェクトの要件に応じて最適なツールを選択できます。

主要なポイント:
以下の表は、RAGLightがサポートする主要なプロバイダーとデータベースをまとめたものです。

カテゴリ プロバイダー / データベース 設定値の例
LLM Ollama, Google, LMStudio, vLLM, OpenAI, Mistral Settings.OLLAMA, Settings.GOOGLE_GEMINI
Embeddings HuggingFace, Ollama, vLLM, OpenAI, Google Settings.HUGGINGFACE, Settings.OPENAI
Vector Store Chroma Settings.CHROMA

具体例:
これらのプロバイダーを切り替える際は、設定クラスのproviderパラメータを変更するだけで済みます。例えば、LLMをOllamaからOpenAIに変更する場合、provider=Settings.OLLAMAprovider=Settings.OPENAIに書き換えるだけで対応できます。この手軽さがRAGLightの大きな魅力の一つです。


Part 3: RAGLightのコア機能 - 3つの主要パイプライン

概要

このパートでは、RAGLightが提供する3つの強力なパイプライン(RAG, Agentic RAG, RAT)について、それぞれの特徴と使い方をコード例と共に詳しく解説します。これらのパイプラインを理解することで、単純な質疑応答から、より複雑なタスクを実行するAIまで、幅広いアプリケーションを構築できるようになります。

Chapter 1: 基本的なRAGパイプライン

コアメッセージ: RAGPipelineは、数行のコードで設定可能な、RAGLightの最も基本的で汎用的なパイプラインです。

結論:
RAGPipelineは、ナレッジベースの構築から回答生成まで、標準的なRAGの全プロセスをカプセル化したクラスです。設定オブジェクトを渡すだけで、すぐにRAGシステムを構築できます。

主要なポイント:

  1. 設定の分離: RAGConfigVectorStoreConfigという2つの設定クラスを使用して、LLM関連の設定とベクトルストア関連の設定を分離して管理します。これにより、コードの見通しが良くなります。
  2. 簡単な初期化: 設定オブジェクトをRAGPipelineに渡してインスタンス化し、.build()メソッドを呼び出すだけで、ナレッジベースのデータがベクトルストアに取り込まれます。
  3. 直感的な実行: .generate()メソッドに質問を渡すだけで、RAGプロセス全体が実行され、回答が返されます。

具体例:
RAGPipelineを使用して、指定したフォルダのドキュメントに基づいて回答を生成する基本的なコードです。

Chapter 2: エージェントが思考するAgentic RAGパイプライン

コアメッセージ: AgenticRAGPipelineは、エージェント(Agent)を導入することで、自律的に思考し、複数ステップのタスクを実行できる高度なRAGパイプラインです。

結論:
このパイプラインは、単に情報を検索して回答するだけでなく、エージェントが「思考→行動→観察」のループを繰り返すことで、より複雑な問題解決を可能にします。これは、AIがまるで人間のように、試行錯誤しながら最適な答えを見つけ出すプロセスを模倣するものです。

主要なポイント:

  1. エージェントの導入: 内部に「エージェント」と呼ばれるコンポーネントを持ち、このエージェントがベクトルストアを「ツール」として利用します。
  2. 思考ループ: max_stepsパラメータで指定された回数まで、エージェントは自問自答を繰り返し、必要な情報を収集・整理します。
  3. 高度なタスク実行: 例えば、「AとBを比較し、その結果を基にCを提案してください」といった複数ステップを要する質問に対して、各ステップを分解して処理することができます。

具体例:
Agentic RAGの思考プロセスは、以下のようなシーケンスで進行します。エージェントは、最終的な答えを出す前に、複数回ツール(ベクトルストア)にアクセスして情報を集めます。

Chapter 3: 推論ステップを追加するRATパイプライン

コアメッセージ: RATPipelineは、生成された回答に対して「本当にこれで良いか?」と自己評価(省察)するステップを追加することで、回答の質をさらに高めるパイプラインです。

結論:
RAT(Retrieval-Augmented Thought)パイプラインは、標準的なRAGに加えて、推論(Reasoning)と省察(Reflection)のループを組み込んでいます。これにより、一度生成した回答を専門の推論モデルが評価し、必要に応じて修正を加えることで、より洗練された出力を目指します。

主要なポイント:

  1. 推論LLMの追加: 回答生成用のLLMとは別に、reasoning_llmとして推論・評価に特化したLLMを指定します。
  2. 省察ループ: reflectionパラメータで指定された回数だけ、生成された回答を推論LLMがチェックし、改善のためのフィードバックを行います。
  3. 品質の向上: この自己評価プロセスにより、初期の回答に含まれるかもしれない論理的な誤りや不十分な点を修正し、回答の品質を向上させることが期待できます。

具体例:
RATConfigでは、通常のllmに加えて、reasoning_llmreflection(省察の回数)を設定します。

# RATConfigの設定例
config = RATConfig(
        llm = "llama3.1:8b", # 回答生成用LLM
        provider = Settings.OLLAMA,
        reasoning_llm = "phi3", # 推論・省察用LLM
        reflection = 3, # 省察を3回繰り返す
        # ...その他の設定
    )```
この設定によりパイプラインは回答を生成した後`phi3`モデルを使って3回自己評価と修正を行い最終的な回答を出力します

---

## Part 4: 高度な活用とカスタマイズ

### 概要
このパートでは`RAGLight`をさらに深く活用するための機能を紹介しますローカルファイルだけでなくGitHubリポジトリを知識源として利用する方法独自のパイプラインを構築する方法外部ツールとの連携そしてDockerを使ったポータブルな開発環境の構築について解説します

### Chapter 1: ナレッジベースの構築

**コアメッセージ:** `RAGLight`ではローカルフォルダや公開されているGitHubリポジトリを簡単な設定でナレッジベースとして取り込むことができます

**結論:**
`knowledge_base`パラメータを使用することでRAGシステムが参照する情報のソースを柔軟に定義できますこれにより多様な形式のドキュメントやコードを知識源として活用することが可能になります

**主要なポイント:**
1.  **フォルダソース (`FolderSource`):** ローカルマシン上の特定のフォルダを指定しその中に含まれる全てのファイルサブフォルダも含むをナレッジベースとして取り込みます
    ```python
    from raglight import FolderSource
    FolderSource(path="./path/to/your/documents")
    ```
2.  **GitHubソース (`GitHubSource`):** 公開されているGitHubリポジトリのURLを指定するだけでそのリポジトリ内の全てのファイルを自動的にクローンしナレッジベースに取り込みます
    ```python
    from raglight import GitHubSource
    GitHubSource(url="https://github.com/Bessouat40/RAGLight")
    ```
3.  **複数のソースを組み合わせる:** これらをリストとして渡すことで複数のフォルダやリポジトリを同時にナレッジベースとして利用できます

### Chapter 2: カスタムパイプラインの作成

**コアメッセージ:** `Builder`クラスを使用することで各コンポーネントを個別に設定し独自のRAGパイプラインを柔軟に構築できます

**結論:**
`RAGLight`定義済みのパイプラインだけでなく`Builder`パターンを用いてステップバイステップでパイプラインを構築する方法も提供していますこれにより各コンポーネントの細かい設定や組み合わせを完全にコントロールできます

**主要なポイント:**
1.  **メソッドチェーンによる構築:** `.with_embeddings()`, `.with_vector_store()`, `.with_llm()`といったメソッドを鎖のようにつなげていくメソッドチェーンことで直感的にパイプラインを定義できます
2.  **コンポーネントごとの詳細設定:** `with_`メソッドではモデル名や永続化ディレクトリなどコンポーネントごとの詳細なパラメータを指定できます
3.  **柔軟なデータ取り込み:** パイプライン構築後`.ingest()`メソッドを使ってコード以外のデータ`data_path`やコード`repos_path`を個別にベクトルストアに取り込むことができます

**具体例:**
`Builder`を使ってカスタムRAGパイプラインを構築するコード例です

```python
from raglight.rag.builder import Builder
from raglight.config.settings import Settings

# Builderを使ってステップごとにパイプラインを構築
rag = Builder() \
    .with_embeddings(Settings.HUGGINGFACE, model_name="all-MiniLM-L6-v2") \
    .with_vector_store(Settings.CHROMA, persist_directory="./custom_db") \
    .with_llm(Settings.OLLAMA, model_name="llama3") \
    .build_rag(k=5)

# データをベクトルストアに取り込む
rag.vector_store.ingest(data_path='./my_data')

# 質問を生成
response = rag.generate("私のデータについて教えてください。")
print(response)

Chapter 3: 外部ツール連携 - MCP Integration

コアメッセージ: AgenticRAGPipelineはMCP(Modular Cognitive Processes)サーバーと連携することで、コード実行やデータベースアクセスといった外部ツールの機能を利用できます。

結論:
MCP Integrationは、エージェントの能力を大幅に拡張する機能です。AgenticRAGConfigにMCPサーバーのURLを設定するだけで、エージェントはベクトルストア検索だけでなく、MCPサーバー経由で提供される様々な外部ツールを使えるようになります。

主要なポイント:

  1. エージェントの能力拡張 🔌: これにより、エージェントは単なる情報検索だけでなく、「Pythonコードを実行してその結果を報告する」「データベースにクエリを投げて最新の売上データを取得する」といった、より能動的なタスクを実行できるようになります。
  2. 簡単な設定: AgenticRAGConfigmcp_configパラメータに、接続したいMCPサーバーのURLを含む辞書のリストを渡すだけで連携が完了します。
    config = AgenticRAGConfig(
        # ... 他の設定
        mcp_config = [
            {"url": "http://127.0.0.1:8001/sse"}  # MCPサーバーのURL
        ],
    )
    

Chapter 4: Dockerを使った環境構築

コアメッセージ: Dockerを利用することで、RAGLightの実行環境をコンテナとしてパッケージ化し、どこでも同じ環境を再現できます。

結論:
RAGLightはDockerコンテナ内での実行をサポートしています。提供されているDockerfile.exampleを基にDockerイメージをビルドすることで、依存関係の問題を気にすることなく、クリーンでポータブルな開発・実行環境を構築できます。

主要なポイント:

  1. イメージのビルド: examplesディレクトリに移動し、以下のコマンドでDockerイメージをビルドします。
    docker build -t docker-raglight -f Dockerfile.example .
    
  2. コンテナの実行: ローカルで実行されているOllamaなどのサービスとコンテナが通信できるように、--add-hostフラグを追加してコンテナを実行します。
    docker run --add-host=host.docker.internal:host-gateway docker-raglight
    
  3. 環境の再現性: これにより、開発環境と本番環境の違いによる問題を最小限に抑え、チームでの共同開発をスムーズに進めることができます。

Part 5: まとめ

コアメッセージ: RAGLightは、シンプルさ、柔軟性、そして強力な機能を兼ね備えた、RAG開発のための優れたツールキットです。

結論:
この記事では、軽量RAGライブラリRAGLightについて、その基本概念から具体的な使い方、さらには高度なカスタマイズ方法までを解説しました。RAGLightは、非エンジニアから経験豊富な開発者まで、幅広いユーザーが直面するであろう課題を解決するための多くの機能を提供します。

主要なポイントの再確認:

  • 簡単なスタート: pip install raglightraglight chatコマンドだけで、誰でもすぐにRAGを体験できます。
  • 柔軟なアーキテクチャ: LLM、埋め込みモデル、ベクトルストアを自由に組み合わせ、プロジェクトに最適な構成を選択できます。
  • 強力なパイプライン: 基本的なRAGから、自律的なAgentic RAG、高品質なRATまで、用途に応じたパイプラインが用意されています。
  • 高い拡張性: Builderクラスによるカスタム構築や、MCP連携による外部ツール利用など、高度な要求にも応えることができます。

RAGLightを活用することで、あなたも独自のデータに基づいた賢いAIアプリケーションの開発を、今日から始めることができます。ぜひ、この強力なライブラリを試してみてください。

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?