AI/RAG 用語集¶
概要¶
このドキュメントでは、AI開発、特にRAG(Retrieval-Augmented Generation)システム構築に必要な基本概念と用語について解説します。
基本概念¶
RAG (Retrieval-Augmented Generation)¶
検索拡張生成とも呼ばれ、外部のドキュメントやデータを検索(Retrieval)してAIの生成(Generation)に取り込む仕組みです。
RAGの仕組み¶
- テキストデータの抽出
-
Excel、PDF、Markdown、Webサイトなどからテキストデータを抽出
-
ベクトル化(Embedding)
- テキストを数値ベクトルに変換してデータベースに保存
-
例: FAISS, ChromaDB, pgvector
-
検索(Retrieval)
-
ユーザーの質問をベクトル化し、類似するデータを検索
-
生成(Generation)
- 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次元のベクトル)
Vector Search(ベクトル検索)¶
ベクトル化されたデータに対して意味的な近さで検索を行う技術です。
検索方式の比較¶
| 検索方式 | 特徴 | 例 |
|---|---|---|
| 全文検索 | キーワードマッチング | "PostgreSQL"という単語を含む文書 |
| ベクトル検索 | 意味的な類似性 | "データベース管理システム"で検索すると"PostgreSQL"がヒット |
距離計算方式¶
- コサイン類似度: ベクトルの方向の類似性を測定
- ユークリッド距離(L2): ベクトル間の直線距離
- 内積: ベクトルの大きさと方向を考慮
-- 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で整備したドキュメントを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つのデータベースセットを管理 |
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 | 統合が容易 |
開発フロー¶
- データ準備: spec-kitでドキュメント標準化
- Embedding生成: OpenAI APIでベクトル化
- 保存: pgvectorに格納
- 検索: ベクトル類似検索
- 生成: LLMで回答生成
- 可視化: MkDocsでドキュメント公開