RAGでは、ユーザーからの質問に答える際に、まず知識ベースから関連情報を「検索(Retrieval)」し、その情報を基にLLMが「生成(Generation)」を行います。
まず知識ベースをChroma DBで準備しましょう。
Chroma DBとは? Pythonで使えるRAGの定番ライブラリ
Chroma DB は、ベクトルデータベース(埋め込み特化DB)です。
主に RAG(Retrieval Augmented Generation) や 類似検索 用途で使われます。
- テキスト・画像などを変換したベクトル(embedding)を保存
- クエリもベクトル化して 意味的に近いデータを高速検索
- ローカル完結で使える(サーバー必須ではない)
pipのみでPythonから簡単に扱えることがメリットで、個人用ではRAGの定番ライブラリとなっています。
公式サイトトップページ Chroma
環境の準備
まずPython環境の準備を済ませておきます。バージョンは3.11系がバランスが良いでしょう。 https://pareido.jp/basic/pyenv-basic/
Python環境が整ったら、Chroma DBのライブラリをインストールします。
pip install chromadb
インストールが終われば早速コーディングに移ります。
サンプルデータの準備
まず、サンプルデータを用意します。
ここでは「おみくじ」を題材にテストデータをChatGPTに作ってもらいました。
大吉:今日は新しい挑戦が実を結びやすい日です。思い切った行動が良い流れを呼び込みます。
大吉:迷っていた決断に追い風が吹きます。直感を信じて動くと成果につながります。
大吉:周囲の協力を得やすい運気です。積極的に声をかけると道が開けます。
中吉:これまでの努力が少しずつ評価され始めます。焦らず継続することが大切です。
中吉:目立った成果は出なくても、基礎固めに向いた一日です。
中吉:周囲との調整役に回ることで、後のチャンスにつながります。
小吉:大きな進展はありませんが、小さな気づきが得られる日です。
小吉:身近な人との会話の中にヒントがあります。聞き役に回ると良いでしょう。
小吉:無理をせず、できることを一つずつ片付けると安心感が生まれます。
吉:安定した運気で、日常作業を丁寧に進めると評価が高まります。
吉:計画通りに物事が進みやすい日です。基本を大切にしましょう。
吉:派手さはありませんが、堅実な選択が後で効いてきます。
末吉:思い通りに進まない場面がありますが、経験として蓄積されます。
末吉:一度立ち止まって状況を整理すると、次の一手が見えてきます。
末吉:遠回りに見える選択が、結果的に安全な道になるでしょう。
凶:無理に進めるとトラブルが起きやすい日です。慎重さを優先しましょう。
凶:判断を急がず、準備や見直しに時間を使うのが無難です。
凶:今日は守りを重視すると、余計な失敗を避けられます。
実際はテキストファイルやMDファイルを読み込むことが多く、パフォーマンスLLMのコンテキスト長などの制約も考えながら、チャンク分割等のチューニングが必要になります。 ここではシンプルに、行単位の短いデータを利用しています。
PythonからのChroma DB実行
下記のようなPythonコードを準備します。
from chromadb import Client
from chromadb.config import Settings
# Chroma DB をインメモリで初期化
client = Client(Settings(persist_directory=None))
collection = client.create_collection(name="sample_texts")
# サンプルデータ
texts = [
"大吉:今日は新しい挑戦が実を結びやすい日です。思い切った行動が良い流れを呼び込みます。",
"大吉:迷っていた決断に追い風が吹きます。直感を信じて動くと成果につながります。",
"大吉:周囲の協力を得やすい運気です。積極的に声をかけると道が開けます。",
(テストデータを列挙...)
]
# 各行をそのままドキュメントとして登録
for i, text in enumerate(texts):
collection.add(
documents=[text],
ids=[str(i)]
)
# 確認用:クエリに近い文章を検索
result = collection.query(
query_texts=["吉"],
n_results=2
)
print(result["documents"])
このコードを実行すると、Chroma DBにテキストが登録され、指定したクエリ(ここでは”吉”)に近い文章が検索されます。
[['吉:計画通りに物事が進みやすい日です。基本を大切にしましょう。', '吉:派手さはありませんが、堅実な選択が後で効いてきます。']]
初回はembeddingモデル(“all-MiniLM-L6-v2”)のダウンロードが自動で始まり、少し待たされます。
all-MiniLM-L6-v2 は Sentence-Transformers 系の軽量な埋め込み(embedding)モデルです。Microsoft の MiniLM を蒸留して得られた小型モデルをベースに、文埋め込み生成向けに最適化されています。高速・軽量(CPUでも実用的)、出力次元は 384 次元、意味検索・クラスタリング・類似度計算に向く。コスト重視のユースケースで広く使われます。大規模モデルや専用の高精度埋め込み(例:MPNet系や大規模APIモデル)より精度は劣るが、速度とコストのバランスが良のが特徴です。
これでRAGの「検索(Retrieval)」部分が動作することを確認できました。
まとめ
RAGは、LLMの弱点を補うために外部知識ベースを活用する強力な手法です。
Chroma DBを使った簡単な実装例を通じて、RAGの基本的な流れを理解できました。
今後は、より高度な検索アルゴリズムや大規模な知識ベースを組み合わせて、実用的なRAGシステムを構築していきます。


