RAG アルゴリズムを理解する
RAG とは?
RAG(Retrieval-Augmented Generation) は、AI が回答を生成する際に、まず関連文書を**検索(Retrieval)し、その内容を参照して回答を生成(Generation)**する技術です。
分かりやすく言えば、AI が「オープンブック試験」を受けるようなものです。暗記した知識だけで答えるのではなく、関連資料を調べたうえで回答します。
사용자 질문
│
▼
① 검색 (Retrieval)
"질문과 관련된 문서 조각을 찾아라"
│
▼
② 컨텍스트 구성
검색된 문서 조각들을 LLM에게 전달
│
▼
③ 생성 (Generation)
LLM이 문서를 참고하여 답변 생성
│
▼
답변 (출처 포함)
PlantPulse RAG パイプライン
ステップ1: 文書のインデックス化(事前準備)
文書を AI が検索できる形式に変換する工程です。
원본 문서 (PDF, DOCX, 이미지)
│
▼
┌─────────────────────────┐
│ Docling 파서 │
│ 문서 → 텍스트 + 이미지 │
│ + 테이블 구조 추출 │
└────────────┬────────────┘
│
▼
┌─────────────────────────┐
│ 청킹 (Chunking) │
│ 긴 문서를 512토큰 단위로 │
│ 적절한 크기로 분할 │
│ (50토큰 오버랩) │
└────────────┬────────────┘
│
▼
┌─────────────────────────┐
│ 임베딩 (Embedding) │
│ 텍스트 → 2560차원 벡터 │
│ 의미를 숫자 배열로 변환 │
└────────┬────────┬───────┘
│ │
▼ ▼
┌────────┐ ┌────────┐
│ Qdrant │ │ Neo4j │
│ 벡터DB │ │ 그래프 │
└────────┘ └────────┘
チャンキングとは?
10ページのマニュアルを丸ごと検索するのは非効率です。適切なサイズに分割することで、必要な箇所だけを正確に見つけられます。
[원본 문서: 10페이지 매뉴얼]
↓ 청킹
[청크 1] 1장 개요 부분 (512토큰)
[청크 2] 1장 뒷부분 ~ 2장 앞부분 (512토큰, 50토큰 오버랩)
[청크 3] 2장 중반부 (512토큰, 50토큰 오버랩)
...
オーバーラップ(Overlap): チャンク境界で文脈が途切れないよう、前のチャンクの最後の50トークンを次のチャンクに含めます。
埋め込み(Embedding)とは?
テキストの意味を数値配列(ベクトル)に変換します。意味が近い文はベクトル空間上で近くに配置されます。
"펌프 베어링 교체 방법" → [0.12, -0.34, 0.56, ..., 0.78] (2560차원)
"펌프 축수 정비 절차" → [0.11, -0.33, 0.55, ..., 0.77] ← 비슷한 벡터!
"오늘 날씨가 좋다" → [0.89, 0.23, -0.67, ..., 0.12] ← 다른 벡터
ステップ2: 検索(Retrieval)
ユーザーの質問が入力されると、関連する文書チャンクを探します。
Dense 検索(意味ベース)
質問を同じ埋め込みモデルでベクトル化し、ベクトル空間で最も近い文書チャンクを探します。
질문: "주입기 베어링 교체 주기는?"
│
▼ 임베딩
질문 벡터: [0.13, -0.35, 0.54, ...]
│
▼ 코사인 유사도 계산
문서 청크 A (점수 0.92): "주입기 베어링은 6개월마다 교체..." ← 선택!
문서 청크 B (점수 0.85): "펌프 축수 정비 시 베어링 점검..." ← 선택!
문서 청크 C (점수 0.31): "작업장 안전 수칙..." ← 제외
利点:「交換周期」=「整備間隔」のような意味的な類似性を理解します。
Sparse 検索(キーワードベース)
正確な単語マッチングで検索します。BM25 アルゴリズムがベースです。
질문: "TAG_DJ_M_01_1_1093 허용 온도"
│
▼ 키워드 추출
["TAG_DJ_M_01_1_1093", "허용", "온도"]
│
▼ 키워드 매칭
문서 청크 A: "TAG_DJ_M_01_1_1093의 허용 온도 범위는..." ← 정확히 매칭!
利点: 設備 ID やモデル名などの固有識別子を正確に検索します。
ハイブリッド検索(PlantPulse の既定モード)
Dense + Sparse を組み合わせ、意味検索の理解力とキーワード検索の正確性を同時に確保します。
최종 점수 = Dense 점수 × α + Sparse 점수 × (1-α)
PlantPulse RAG はハイブリッドモードを既定で使用します。技術文書には専門用語や設備 ID が多く、キーワードマッチングが重要になるためです。
ステップ3: リランキング(Reranking)
初期検索結果(Top 10)をリランカーモデルが精密に再評価し、最終的な Top 5 を選定します。
초기 검색 결과 (Top 10)
│
▼
┌─────────────────────────────┐
│ Reranker (rerank-multilingual-v3.0) │
│ │
│ 질문과 각 문서 청크를 │
│ 쌍으로 비교하여 │
│ 관련도를 정밀 평가 │
└──────────────┬──────────────┘
│
▼
최종 결과 (Top 5) — 가장 관련도 높은 문서만 전달
リランカーは検索よりも高精度なモデルを用いて、質問と文書の関連度を評価します。検索段階で取りこぼした微妙な関連性を捉えます。
ステップ4: 回答生成(Generation)
検索された文書チャンクを LLM にコンテキストとして渡し、回答を生成します。
[시스템 프롬프트]
아래 문서를 참고하여 질문에 답하세요.
[검색된 문서]
문서 1: "주입기 베어링은 6개월마다 교체하며..."
문서 2: "교체 시 SKF 6205-2RS 규격을 사용..."
[사용자 질문]
주입기 베어링 교체 주기와 규격을 알려줘.
↓ LLM 생성
[답변]
주입기 베어링 교체 주기는 6개월이며, SKF 6205-2RS 규격을 사용합니다.
(출처: 정비 매뉴얼 3장)
4つの検索モードの比較
| モード | 動作方式 | 適した状況 |
|---|---|---|
| hybrid | Dense + Sparse の組み合わせ | 一般的な文書検索(既定値、推奨) |
| naive | Dense 専用(セマンティック) | 概念的な質問(「OEE とは何か?」) |
| local | 文書内部の詳細検索 | 特定文書の詳細内容の確認 |
| global | 文書間の関係探索(KG) | 複数文書にまたがる総合的な情報 |
知識グラフ RAG(Graph RAG)
PlantPulse RAG は、ベクトル検索のほかに Neo4j 知識グラフを活用した検索にも対応します。
문서 인덱싱 시:
텍스트 → 엔티티 추출 → 관계 추출 → Neo4j 그래프 저장
검색 시 (global 모드):
질문 → 관련 엔티티 → 그래프 탐색 → 연결된 문서 청크
利点:「注入機に関連するすべての整備マニュアル」のような関係ベースの検索が可能です。