コンテンツにスキップ

AI/RAG 用語集

概要

このドキュメントでは、AI開発、特にRAG(Retrieval-Augmented Generation)システム構築に必要な基本概念と用語について解説します。

基本概念

RAG (Retrieval-Augmented Generation)

検索拡張生成とも呼ばれ、外部のドキュメントやデータを検索(Retrieval)してAIの生成(Generation)に取り込む仕組みです。

RAGの仕組み

  1. テキストデータの抽出
  2. Excel、PDF、Markdown、Webサイトなどからテキストデータを抽出

  3. ベクトル化(Embedding)

  4. テキストを数値ベクトルに変換してデータベースに保存
  5. 例: FAISS, ChromaDB, pgvector

  6. 検索(Retrieval)

  7. ユーザーの質問をベクトル化し、類似するデータを検索

  8. 生成(Generation)

  9. AIが検索結果と自身の知識を組み合わせて回答を生成

RAGの利点

  • LLMの知識を最新情報で補完できる
  • 企業固有の情報を活用できる
  • ハルシネーション(誤情報生成)を減らせる
  • ファインチューニング不要で知識を追加できる

Embedding(埋め込み)

テキストや画像などのデータを固定長の数値ベクトルに変換する技術です。

主な特徴

  • 意味的な近さを数値化: 似た意味を持つテキストは似たベクトルになる
  • 次元数: 一般的に1536次元(OpenAI text-embedding-3-small)
  • 距離計算: コサイン類似度やユークリッド距離で類似度を測定

Embeddingの用途

# OpenAI Embeddingの例
import openai

def create_embedding(text: str):
    response = openai.Embedding.create(
        model="text-embedding-3-small",
        input=text
    )
    return response["data"][0]["embedding"]

# 例
embedding = create_embedding("PostgreSQLは強力なRDBMSです")
# → [0.12, 0.54, -0.23, ...] (1536次元のベクトル)

ベクトル化されたデータに対して意味的な近さで検索を行う技術です。

検索方式の比較

検索方式 特徴
全文検索 キーワードマッチング "PostgreSQL"という単語を含む文書
ベクトル検索 意味的な類似性 "データベース管理システム"で検索すると"PostgreSQL"がヒット

距離計算方式

  1. コサイン類似度: ベクトルの方向の類似性を測定
  2. ユークリッド距離(L2): ベクトル間の直線距離
  3. 内積: ベクトルの大きさと方向を考慮
-- pgvectorでの類似検索例
SELECT content, embedding <-> '[0.12, 0.54, ...]' AS distance
FROM documents
ORDER BY distance ASC
LIMIT 5;

開発ツール

spec-kit

ドキュメント管理・標準化フレームワーク。開発チーム内で仕様書や設計書を統一フォーマットで作成・管理するためのツールです。

主な機能

  • フォルダ構成と命名規則の標準化
  • Markdownベースのテンプレート提供
  • 静的ファイルとしての管理

spec-kitとRAGの関係

spec-kit(ドキュメント標準化)
    ↓ 整備
Markdownファイル群
    ↓ Embedding
ベクトルDB
    ↓ 検索
RAGシステムで活用

spec-kitで整備したドキュメントをRAGのソースデータとして活用することで、組織ナレッジをAIに理解させることが可能になります。

MkDocs

Markdownドキュメントを静的サイト化するツールです。

特徴

  • Markdownをきれいなウェブサイトに変換
  • 検索機能付き
  • テーマのカスタマイズが容易
  • 公式ドキュメント風のデザイン

spec-kit → MkDocs連携

# spec-kitでドキュメント生成
npx spec-kit generate --input ./specs --output ./docs/source

# MkDocsでWeb化
mkdocs build

# 結果: ./site/ に静的サイトが生成される

MkDocs Material テーマ

# mkdocs.yml
site_name: Project Documentation
theme:
  name: material
  language: ja
  features:
    - navigation.sections
    - search.suggest
    - content.code.copy

PostgreSQL と pgvector

PostgreSQL

オープンソースのリレーショナルデータベース。高機能で信頼性が高く、拡張性に優れています。

PostgreSQLの特徴
  • トランザクションの厳密な管理
  • JSON/JSONB型のネイティブサポート
  • 豊富な拡張モジュール
  • 強力なクエリ最適化
クラスタとインスタンス
用語 定義 構造
PostgreSQLクラスタ PostgreSQLサーバーの実体 1つのプロセス群で複数のデータベースを管理
MySQLインスタンス MySQLサーバープロセス 通常1つのデータベースセットを管理
[PostgreSQL クラスタ]
 ├─ corporate         ← コーポレートサイト用
 ├─ miniapp_lab       ← 小規模実験サービス
 └─ auth_shared       ← 認証やユーザー情報

pgvector

PostgreSQLのベクトル検索拡張モジュール。RAG構成に最適です。

インストール
-- pgvector拡張を有効化
CREATE EXTENSION vector;

-- ベクトル型カラムを持つテーブル作成
CREATE TABLE documents (
    id SERIAL PRIMARY KEY,
    content TEXT,
    embedding vector(1536)  -- 1536次元のベクトル
);
ベクトル検索
-- コサイン距離での類似検索
SELECT id, content, embedding <-> '[0.12, 0.44, ...]' AS distance
FROM documents
ORDER BY distance ASC
LIMIT 5;

-- ユークリッド距離(L2)
SELECT id, content, embedding <-> '[0.12, 0.44, ...]' AS distance
FROM documents
ORDER BY distance ASC
LIMIT 5;

-- 内積
SELECT id, content, embedding <#> '[0.12, 0.44, ...]' AS distance
FROM documents
ORDER BY distance DESC
LIMIT 5;
インデックスの作成
-- IVFFlat インデックス(高速化)
CREATE INDEX ON documents
USING ivfflat (embedding vector_cosine_ops)
WITH (lists = 100);

-- HNSW インデックス(より高速)
CREATE INDEX ON documents
USING hnsw (embedding vector_cosine_ops);

データベース設計

マルチデータベース構成

複数のデータベースを用途別に分離する設計パターンです。

[PostgreSQL クラスタ]
 ├─ corporate         ← 業務データ
 ├─ miniapp_lab       ← 実験用アプリ
 ├─ auth_shared       ← 認証・共通設定
 └─ vector_db         ← Embedding保存(RAG用)

レプリケーション

PostgreSQLのレプリケーションはクラスタ単位で行われます。

[Master クラスタ]              [Replica クラスタ]
 ├─ corporate                   ├─ corporate (同期)
 ├─ miniapp_lab      ====>      ├─ miniapp_lab (同期)
 └─ auth_shared                 └─ auth_shared (同期)
レプリケーションの特徴
  • 一方向: Master → Replica のみ
  • 読み取り専用: Replicaへの書き込みは不可
  • WALベース: Write-Ahead Logで変更を伝搬

バックアップ戦略

pg_dump によるバックアップ

# カスタムフォーマットでバックアップ
pg_dump -U appuser -h localhost -Fc appdb > backup_$(date +%Y%m%d).dump

# 復元
pg_restore -U appuser -d appdb_new backup_20251010.dump

自動バックアップ(Docker環境)

# docker-compose.yaml
services:
  db-backup:
    image: amazon/aws-cli:2.15.0
    environment:
      AWS_ACCESS_KEY_ID: ${AWS_ACCESS_KEY_ID}
      AWS_SECRET_ACCESS_KEY: ${AWS_SECRET_ACCESS_KEY}
      S3_BUCKET_NAME: ${S3_BUCKET_NAME}
    entrypoint: >
      /bin/sh -c "
        while true; do
          TIMESTAMP=$(date +%Y%m%d_%H%M%S);
          pg_dump -h db-master -U appuser -Fc appdb > /backups/appdb_$${TIMESTAMP}.dump &&
          aws s3 cp /backups/appdb_$${TIMESTAMP}.dump s3://${S3_BUCKET_NAME}/ &&
          find /backups -type f -mtime +7 -delete;
          sleep 86400;
        done
      "

まとめ

RAGシステム構築の全体像

graph LR
    A[データソース] --> B[Embedding]
    B --> C[ベクトルDB]
    D[ユーザー質問] --> E[Embedding]
    E --> F[類似検索]
    C --> F
    F --> G[LLM生成]
    G --> H[回答]

技術スタックの選択

用途 技術選択 理由
ベクトルDB(小規模) pgvector 既存PostgreSQLに統合可能
ベクトルDB(大規模) Qdrant, Milvus 高速・スケーラブル
ドキュメント管理 spec-kit + MkDocs 標準化 + Web化
Embedding生成 OpenAI API 高品質・安定
RAGフレームワーク LangChain, LlamaIndex 統合が容易

開発フロー

  1. データ準備: spec-kitでドキュメント標準化
  2. Embedding生成: OpenAI APIでベクトル化
  3. 保存: pgvectorに格納
  4. 検索: ベクトル類似検索
  5. 生成: LLMで回答生成
  6. 可視化: MkDocsでドキュメント公開