Python便利テク

RAGシステムをゼロから作る総まとめ!シリーズ完結と次のステップを解説

「RAGって名前は聞いたことあるけど、実際に作るとなると何から始めればいいの…?」そんな疑問を持っている方、多いんじゃないでしょうか。

今回は、Pythonを使ってRAG(Retrieval-Augmented Generation)システムをゼロから構築するシリーズの総まとめをお届けします。何をどの順番で作ったのか、ざっくりとした流れがつかめるはずです! 🎉

🔍 RAGシステムって何だっけ?

AI search database
AI search database / Photo by Tima Miroshnichenko via Pexels

まず一言でいうと、RAGとは「AIが回答する前に、関連ドキュメントを検索して参照する仕組み」のことです。

イメージとしては、試験前にまず教科書を開いてから答えを書く感じですね。単に大規模言語モデルに問いかけるだけじゃなく、自社データや最新情報を検索して組み合わせることで、より精度の高い回答が得られます。

🛠️ シリーズで作ったもの・ざっくりまとめ

このシリーズでは、ブランクのPythonプロジェクトから始めて、以下のファイルを順番に作り上げました。

01_setup_db.py       # pgvector テーブル+拡張機能のセットアップ
02_create_index.py   # HNSWインデックスの作成(m=16, ef_construction=64)
03_ingest.py         # ドキュメントをエンベディングしてDBに格納
04_search.py         # ベクトル類似度検索の実装
05_rag.py            # 検索結果をLLMに渡してRAG応答を生成

ポイントをまとめるとこんな感じです👇

  • pgvector:PostgreSQLでベクトルデータを扱うための拡張機能
  • HNSWインデックス:高速なベクトル近傍探索のアルゴリズム
  • エンベディング:テキストを数値ベクトルに変換して意味的な検索を可能にする処理

💡 実際のRAG検索コード(シンプル版)

検索のキモとなる部分を、シンプルなコードで確認しておきましょう。

import psycopg2
from openai import OpenAI

client = OpenAI()

def embed(text: str) -> list[float]:
    """テキストをベクトルに変換する"""
    response = client.embeddings.create(
        model="text-embedding-3-small",
        input=text
    )
    return response.data[0].embedding

def search(query: str, top_k: int = 3):
    """クエリに近いドキュメントをベクトルDBから検索する"""
    query_vec = embed(query)

    conn = psycopg2.connect("postgresql://localhost/ragdb")
    cur = conn.cursor()

    # pgvectorの<->演算子でコサイン距離を計算
    cur.execute("""
        SELECT content, 1 - (embedding <-> %s::vector) AS score
        FROM documents
        ORDER BY embedding <-> %s::vector
        LIMIT %s
    """, (query_vec, query_vec, top_k))

    results = cur.fetchall()
    conn.close()
    return results

# 使い方
results = search("Pythonで非同期処理をするには?")
for content, score in results:
    print(f"スコア: {score:.3f} | {content[:80]}...")

ここが重要です👇

  • <-> 演算子がpgvectorのコサイン距離計算。SQLだけで類似検索ができます
  • スコアを1から引くことで「距離」を「類似度」に変換しています
  • HNSWインデックスがあることで、大量データでも高速に検索できますよ

🚀 次のステップは?


基礎システムが完成したら、次はこんな発展もできます。

  • 📄 PDFやWebページのチャンキング(長文を分割して精度を上げる)
  • 🔄 ハイブリッド検索(ベクトル検索+全文検索の組み合わせ)
  • 🎨 StreamlitやFastAPIでUI・APIを追加してアプリ化する
  • 🧠 再ランキング(Reranker)で検索精度をさらに向上させる

まとめ

RAGシステムは「検索 × 生成」のシンプルな組み合わせで成り立っています。pgvector+HNSWインデックス+OpenAIエンベディングという構成を押さえておくと、応用の幅がぐっと広がりますよ。

「むずかしそう」と感じていた方も、ステップを追えば必ず作れます。ぜひ自分のデータで試してみてください 🙌一緒に学んでいきましょう!

📚 関連商品・おすすめ書籍

スッキリわかるPython入門 第2版 (スッキリわかる入門シリーズ)

もしも

スッキリわかるPython入門 第2版 (スッキリわかる入門シリーズ)

初心者に定番のPython入門書

Amazonで見る

徹底攻略! 電子工作&プログラミング Arduinoで学ぶ電子工作完全ガイド

もしも

徹底攻略! 電子工作&プログラミング Arduinoで学ぶ電子工作完全ガイド

電子工作とプログラミングを同時に学べる

Amazonで見る

実践Claude Code入門―現場で活用するためのAIコーディングの思考法

もしも

実践Claude Code入門―現場で活用するためのAIコーディングの思考法

AIコーディングの現場活用法を学ぶ一冊

Amazonで見る

※本記事にはアフィリエイトリンクが含まれます。

ABOUT ME
やまちゃん
これまで学生と社会人を合わせて5000人以上にプログラミング学習を指導。 ゼロからイチをわかりやすく解説する専門家として活動しており、本業ではArduinoを用いたIoT開発とロボットプログラミングが専門。 Pythonを用いたアプリ開発、ウェブアプリケーションの開発で業務の効率化をサポートしています。

COMMENT

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