RAGの作り方|LlamaIndexで簡単2ステップ

RAGの作り方

こんな方へ特におすすめ

  • 「自分専用のChatGPT」を作ってみたいと思っている方
  • RAGやLLM(大規模言語モデル)の具体的な使い方に興味がある方
  • Pythonとオープンソース技術で、何か面白いものを作りたい開発者

概要

こんにちは。サイオステクノロジーのはらちゃんです!AI相棒の開発ブログ、第一弾へようこそ!

このページでは「AI相棒」を、話題の技術RAGとオープンソースのツールを駆使して開発した軌跡をご紹介します。

APIを使った簡単な方法から、最終的にはPCの中だけで完結する完全ローカル環境の構築まで、試行錯誤の過程をステップバイステップで解説します。この記事を読めば、きっとあなたも自分だけのAI相棒が欲しくなるはずです!

RAGの育て方を試行したブログも執筆予定ですので合わせて覗いてもらえると嬉しいです。

完成イメージ
今回の完成イメージです。

コードで最も簡単に開発する方法 |LlamaIndex

はじめに、今から使う基盤となるものを簡単に紹介します。

LlamaIndexは、RAGシステムを構築することに特化したフレームワークで、非常に直感的かつ少ないコード量で実装できるのが特徴です。

なぜ簡単?

  • 抽象化
    データ読み込み、ベクトル化、保存、検索、LLMとの連携といった複雑な処理を、フレームワークが裏側で自動的にやってくれます。
  • 設定が少ない
    OpenAIのAPIキーさえあれば、Embeddingモデルやベクトルストアの難しい設定を気にせず始められます。
  • 環境構築が容易
    Pythonと数個のライブラリをインストールするだけですぐに試せます。

今回は以下の構成で手軽に実装を試したいと思います。

your_project/
│
├── data/
│   └── knowledge.txt
│
└── app.py

Step1:APIでAI相棒を爆速起動

それでは早速作っていきましょう。

何事も、まずは小さく始めるのが成功の秘訣です。最初は、自分のPCに負荷をかけず、無料で使えるAPIサービスGroqを利用して、AI相棒のプロトタイプを作成しました。

準備

LlamaIndexGroqを連携させるためのライブラリをインストールし、knowledge.txtというファイルにAI相棒に覚えてほしい情報(今回は架空のプロジェクト情報)を書き込みます。

Bash
pip install llama-index openai

#ライブラリの追加
pip install llama-index-llms-groq llama-index-embeddings-huggingface

APIキーの取得

  1. Groqの公式サイトにサインアップします。
  2. 画面左のメニューから「API Keys」を選択します。
  3. 「+ Create API Key」ボタンをクリックします。
  4. 自分で分かりやすいキーの名前を入力し、作成します。
  5. 表示されたAPIキーをコピーします。
    このキーは一度しか表示されないため、必ず安全な場所に控えておいてください。

コーディング

驚くことに、コードはたったこれだけです。LlamaIndexが、データの読み込みからインデックス作成、質問応答までの複雑な処理をすべて裏側でよしなにやってくれます。ポイントは、LLMにGroqを、文章をベクトル化するEmbeddingモデルにオープンソースのものを指定している点です。

「gsk_あなたのGroqのAPIキー」と書かれている部分に先ほど取得したAPIキーを書き込んでください。

app.py
import os
from llama_index.core import (
    VectorStoreIndex,
    SimpleDirectoryReader,
    Settings,
)
from llama_index.llms.groq import Groq
from llama_index.embeddings.huggingface import HuggingFaceEmbedding

# 1. GroqのAPIキーを設定
os.environ["GROQ_API_KEY"] = "gsk_あなたのGroqのAPIキー"

# 2. LLMをGroqが提供する最新のモデルに変更
Settings.llm = Groq(model="llama-3.1-8b-instant")

# 3. EmbeddingモデルをHuggingFaceの無料モデルに設定
Settings.embed_model = HuggingFaceEmbedding(
    model_name="BAAI/bge-small-en-v1.5"
)

# 4. データの読み込み、インデックスの作成、クエリエンジンの構築
print("データを読み込んでいます...")
documents = SimpleDirectoryReader("data").load_data()

print("インデックスを作成しています...")
index = VectorStoreIndex.from_documents(
    documents,
)

print("クエリエンジンを作成しました。質問を入力してください。")
query_engine = index.as_query_engine()

while True:
    query = input("質問: ")
    if query == "exit":
        break
    # フレンドリーな口調で答えるよう指示文を付加
    friendly_prompt = f"次の質問にフレンドリーな口調で答えて:{query}"
    response = query_engine.query(friendly_prompt)
    print("回答:", response)

実行

これだけでもチャットを実行させることができるので、knowledge.txtを自由に記述して試してみてください。

Bash
python app.py

Groqの実行様子
このような入力画面が立ち上がれば実行成功です。

knowledge.txtの書き方

AIが情報を効率よく見つけ出せるように、少しだけ書き方を工夫すると性能が上がります。

  • 一つの段落には一つのトピック
    関連する情報は近くにまとめて書くと、AIが文脈を理解しやすくなります。
  • 見出しや箇条書きを活用する
    人間が読みやすいように情報を整理すると、AIにとっても処理しやすくなります。
  • 「未来の自分は他人」だと思って書く
    自分だけが分かるような省略語や暗黙の前提を避け、誰が読んでも分かるように具体的に書くことが重要です。

data/knowledge.txt
## RAG学習用情報テンプレート(仕事用)

### ユーザーのプロフィール
- 名前/ニックネーム:
- 職業/役割:
- 所属部署/チーム:
- 得意分野/苦手分野:

### コミュニケーション方針
- 呼び方:
- 好ましい対応例:
- 避けてほしい対応例:

### よく使う言葉・口癖
- 例:

### 目標・課題
- 現在の目標:
- 直面している課題:

### サポートしてほしいこと
- 具体的なサポート内容:

### その他メモ
- 自由記述:

---
## RAG学習用情報テンプレート(趣味・プライベート用)

### ユーザーのプロフィール
- 名前/ニックネーム:
- 趣味・関心:
- よく行く場所:

### コミュニケーション方針
- 呼び方:
- 好ましい対応例:
- 避けてほしい対応例:

### よく使う言葉・口癖
- 例:

### 目標・課題
- 現在の目標:
- 直面している課題:

### サポートしてほしいこと
- 具体的なサポート内容:

### その他メモ
- 自由記述:

トラブルシューティング

実は、開発中に「指定したモデルは提供終了しました」というエラーに2度も遭遇しました。AIの世界の進化の速さを肌で感じた瞬間です。これは、Groqの公式サイトで利用可能な最新モデル名を確認し、コードを修正することで簡単に解決できました。

  1. Groqのモデル一覧ページにアクセスします。
  2. ページに表示されているモデルのリストから、利用したいモデルの「Model ID」をコピーします。
  3. コピーした「Model ID」を、app.pyGroq(model="...")の部分に貼り付けます。

Step2:Ollamaで完全ローカルなAI相棒へ進化

続いて、APIで手応えを掴んだところで、本命の「完全ローカル環境」の構築に挑戦します。これぞオープンソースの醍醐味!インターネットに繋がっていなくても、自分のPCの中だけでAIが動く世界を目指します。

Ollamaのセットアップ

Ollamaは、様々なオープンソースLLMをコマンド一つで簡単にPCにインストール・実行できる魔法のようなツールです。

公式サイトからインストーラーをダウンロードし、ターミナルで以下のコマンドを実行するだけで、Googleの高性能モデルgemma:7bがPCにインストールされます。

注意点として、WSL環境では ollama serve で手動起動が必要です。現在のターミナルで、以下のコマンドを実行してOllamaサーバーを起動します。

Bash
ollama serve

新しいターミナルで、モデル実行コマンドを入力します。

Bash
ollama run gemma:7b

LlamaIndexとの連携

次に、app.pyのLLM指定部分を、先ほどPCにインストールしたOllamaのモデルに向けるだけです。APIキーの記述はもう必要ありません。

app.py
from llama_index.llms.ollama import Ollama

# LLMをOllamaで動いているローカルモデルに変更
Settings.llm = Ollama(model="gemma:7b", request_timeout=120.0)

実行

このスクリプトを実行すると、見事に回答が返ってきました。

Bash
ollama run gemma:7b

ollamaの実行様子
このような入力画面が立ち上がれば実行成功です。

まとめ

今回は自分だけのAI相棒作りをしていきました。LlamaIndexOllamaといったオープンソースツールのおかげで、専門家でなくても驚くほど簡単にRAGシステムを構築できることがお分かりいただけたかと思います。

  • APIを使えば、数行のコードで爆速プロトタイピングが可能。
  • Ollamaを使えば、オフラインで動作するプライベートな環境も実現できる。

このブログが、皆さんの「何か作ってみたい」という気持ちを刺激できたら嬉しいです。まずはこの記事のコードを真似して、あなた自身のメモやブログ記事を読み込ませてみてください。きっと、最高の「AI相棒」が生まれるはずです。

ご覧いただきありがとうございます! この投稿はお役に立ちましたか?

役に立った 役に立たなかった

0人がこの投稿は役に立ったと言っています。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です