Chuyển đến nội dung chính

レッスン 1: RAG とは何ですか? — アーキテクチャ、ユースケース、RAG が必要な理由

RAG はどのような問題を解決しますか: 幻覚、知識の遮断、ドメイン固有。アーキテクチャの取得→拡張→生成。 RAG と微調整を比較します。 50 行のコードで構成される最も単純な「PDF でチャット」デモ。

🧠 AI と ML — レッスン 0 レッスン 1: RAG とは何ですか? — アーキテクチャ、ユースケース、 なぜ RAG が必要なのでしょうか?

リアルバトルRAG:基礎から上級まで

パート 1: RAG プラットフォーム

xdev.asia

RAG アーキテクチャ: ドキュメント → チャンキング → 埋め込み → ベクトル DB → 取得 → LLM → 回答

はじめに

あなたの会社のルールについて ChatGPT に質問して、でっち上げの答えを受け取ったことがありますか?または、先週の出来事について尋ねても、AI は「2024 年 4 月以降の情報はありません」と言いますか?

これらは LLM の 2 つの最大の問題です。

問題説明例
幻覚AIは知らないうちに情報を「作り上げる」ルールについて聞く → ルールはWHOが作った
知識の限界AI はトレーニング時までのデータしか知りません今週のニュースについて質問する → 「わかりません」
ドメインの知識がないAI はあなたの個人データを知りません自社製品に関する質問 → 一般回答

RAG (検索拡張生成) は、応答する前に LLM にドキュメントを「読み取らせる」ことで、3 つの問題すべてを解決します。


1. RAGとは何ですか?

1.1 主なアイデア

通常の生活の例: 口頭試験を受けると想像してください:

  • RAG なし = 試験 閉じられた本 → 頭の中にある知識のみを使用する → 間違いやすく、忘れやすい
  • はい RAG = オープンブック 試験 → 答える前に書類を調べることができます → はるかに正確です!

RAG = 答える前に AI に「本を開いて」もらいます。

1.2 RAG の 3 つのステップ

User hỏi: "Chính sách nghỉ phép 2026 là gì?"
                                          │
                                          ▼
                    ┌─────────────────────────┐
Step 1: RETRIEVE    │ Tìm tài liệu liên quan  │
(Tìm kiếm)         │ trong knowledge base     │
                    │ → "HR_Policy_2026.pdf"   │
                    │    trang 15-17            │
                    └──────────┬──────────────┘
                               ▼
                    ┌─────────────────────────┐
Step 2: AUGMENT     │ Ghép tài liệu tìm được  │
(Bổ sung)           │ vào prompt cho LLM       │
                    │ → "Dựa trên tài liệu    │
                    │    sau, trả lời câu hỏi" │
                    └──────────┬──────────────┘
                               ▼
                    ┌─────────────────────────┐
Step 3: GENERATE    │ LLM đọc tài liệu        │
(Trả lời)          │ + tạo câu trả lời        │
                    │ → "Theo chính sách 2026, │
                    │    nhân viên được 15 ngày │
                    │    phép/năm..."           │
                    └─────────────────────────┘

1.3 RAG が効果的なのはなぜですか?

ラグなしはいラグ
AIは「記憶」(教師データ)から答えます実際の文書から AI が回答
知らなくても補うことができます特定の情報源からの引用
古い知識(切り捨て)ドキュメント リアルタイム更新
個人データがわからない個人データを読む

2. RAG アーキテクチャの詳細

2.1 2 段階: インデックス作成とクエリ作成

=== GIAI ĐOẠN 1: INDEXING (làm 1 lần, offline) ===

Tài liệu gốc     →    Chunking    →    Embedding    →    Vector DB
[PDF, DOCX, Web]     [Chia nhỏ]      [Text → Vector]    [Lưu trữ]

company_policy.pdf → Chunk 1: 300 từ → [0.23, -0.15, ...] → ChromaDB
                     Chunk 2: 300 từ → [0.45, 0.22, ...]
                     Chunk 3: 300 từ → [-0.11, 0.67, ...]


=== GIAI ĐOẠN 2: QUERYING (mỗi câu hỏi, real-time) ===

Câu hỏi user → Embedding → Similarity Search → Top-K chunks → LLM → Answer
"Nghỉ phép              tìm chunks               ghép vào      trả lời
 bao nhiêu?"            gần nhất                  prompt        từ tài liệu

2.2 段階的な説明

ステップ 1 — チャンク化: 文書を小さな段落 (約 300 ~ 500 ワード) に分割します。なぜ? LLM のコンテキスト ウィンドウは限られているため、小さな断片の方が正確に検索しやすくなります。

ステップ 2 — 埋め込み: テキストを ベクター (数値シーケンス) に変換します。同様の意味を持つテキストセグメントは、高次元空間で 互いに近いベクトルを持ちます。

# "Chính sách nghỉ phép" → [0.23, -0.15, 0.87, ...]
# "Quy định ngày phép"   → [0.25, -0.12, 0.85, ...]  ← rất gần!
# "Lương thưởng"         → [-0.45, 0.55, 0.12, ...]  ← rất xa

ステップ 3 — 類似性検索: ユーザーが質問すると、質問を埋め込み、ベクトルが最も近いチャンクを見つけ、関連性の高い上位 K 個のチャンク (通常は K=3 ~ 5) を返します。

ステップ 4 — 生成: チャンクをプロンプトに結合し、LLM に送信します。

System: Trả lời câu hỏi dựa trên context được cung cấp.
        Nếu context không chứa câu trả lời, nói "Tôi không
        tìm thấy thông tin trong tài liệu."

Context:
---
[Chunk 1: "Theo chính sách 2026, nhân viên full-time được
15 ngày phép/năm. Nhân viên trên 5 năm được 18 ngày..."]
[Chunk 2: "Quy trình xin phép: gửi đơn trước 3 ngày..."]
---

User: Nhân viên mới được bao nhiêu ngày nghỉ phép?

💡 演習 2: 「図書館」の例を使用して、技術者以外の同僚に RAG を説明します: 図書館員 (検索者)、関連書籍 (コンテキスト)、学生 (LLM が自分で答えをまとめます)。 3~4文書いてみてください。


3. デモ: 50 行の「PDF でチャット」

これは、最も単純な RAG パイプラインです。Python + OpenAI + ChromaDB だけです。

3.1 インストール

pip install openai chromadb langchain langchain-openai \
            langchain-community pypdf

3.2 完全なコード

"""
RAG đơn giản nhất: Chat with PDF
50 dòng code — hiểu toàn bộ flow!
"""
from langchain_community.document_loaders import PyPDFLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain_openai import OpenAIEmbeddings, ChatOpenAI
from langchain_community.vectorstores import Chroma
from langchain.prompts import ChatPromptTemplate
from langchain.schema.runnable import RunnablePassthrough

# === Bước 1: Load PDF ===
loader = PyPDFLoader("company_policy.pdf")
pages = loader.load()
print(f"Loaded {len(pages)} pages")

# === Bước 2: Chunking ===
splitter = RecursiveCharacterTextSplitter(
    chunk_size=500,     # Mỗi chunk ~500 ký tự
    chunk_overlap=50    # Overlap 50 ký tự (tránh cắt giữa câu)
)
chunks = splitter.split_documents(pages)
print(f"Split into {len(chunks)} chunks")

# === Bước 3: Embedding + Store vào Vector DB ===
embeddings = OpenAIEmbeddings(model="text-embedding-3-small")
vectorstore = Chroma.from_documents(chunks, embeddings)
retriever = vectorstore.as_retriever(search_kwargs={"k": 3})

# === Bước 4: RAG Chain ===
template = """Trả lời câu hỏi dựa trên context sau.
Nếu không tìm thấy, nói "Tôi không tìm thấy trong tài liệu."
Trích dẫn nguồn (trang số) nếu có thể.

Context:
{context}

Câu hỏi: {question}
"""
prompt = ChatPromptTemplate.from_template(template)
llm = ChatOpenAI(model="gpt-4o-mini", temperature=0)

rag_chain = (
    {"context": retriever, "question": RunnablePassthrough()}
    | prompt
    | llm
)

# === Bước 5: Hỏi! ===
while True:
    question = input("\n❓ Hỏi: ")
    if question.lower() in ["quit", "exit"]:
        break
    answer = rag_chain.invoke(question)
    print(f"\n💬 {answer.content}")

3.3 フローの説明

User: "Nhân viên mới được bao nhiêu ngày phép?"
  ↓
1. Embedding câu hỏi → vector [0.3, -0.1, ...]
  ↓
2. Tìm 3 chunks gần nhất trong ChromaDB
  ↓
3. Ghép chunks vào template prompt
  ↓
4. Gửi cho GPT-4o-mini
  ↓
5. AI đọc chunks + trả lời: "Theo tài liệu trang 15,
   nhân viên mới được 15 ngày phép/năm..."

重要: AI は、でっちあげではなく、文書に基づいて答えます。これがRAGの強みです。

💡 演習 3:

  1. 任意の PDF ファイル (履歴書、教材、ドキュメント) で上記のコードを実行します。
  2. 5 つの質問をする: 3 つは PDF で回答あり、2 つは回答なし → AI はどのように処理しますか?
  3. 変更してみる chunk_size=500 に 200 そして 1000 —品質はどのように変化しますか?

4. RAG と微調整 — いつ何を使用するか?

これは最も一般的な質問です。「RAG モデルと微調整モデルを使用するべきですか?」

4.1 詳細な比較表

基準ラグ微調整
目的知識 (知識) を追加する行動 (行動) を変更する
例会社のドキュメントからの返信ブランドの声に従って書く
セットアップ費用低価格 (~$5-50)高 (~$50-500+)
時間数分時間 → 日数
データを更新✅ リアルタイム更新❌ 再トレーニングが必要
精度曹操 (引用元)中等度 (おそらく幻覚)
スケーラブル✅ ドキュメントを簡単に追加❌ スケーリングが難しい

4.2 意思決定の枠組み

Câu hỏi quyết định:
                        ┌─ Cần AI biết data MỚI/RIÊNG? → RAG
                        │
Bạn cần gì? ────────── ├─ Cần AI thay đổi PHONG CÁCH/FORMAT? → Fine-tuning
                        │
                        ├─ Cần CẢ HAI? → RAG + Fine-tuning (Hybrid)
                        │
                        └─ Không chắc? → Thử RAG trước (rẻ, nhanh)

4.3 実践例

数学の問題選択理由
チャットボットが 100 件のブログ投稿からの FAQ に回答ラグ知識のギャップ - 別のデータが必要
AI が CEO の声でメールを作成微調整行動のギャップ - スタイルを変更する必要がある
AI が医師の薬探しをサポートラグ更新されたデータ + 出典の引用が必要
AI がサポート チケットを分類微調整タスク固有の動作
社内チャットボット + ブランドボイスハイブリッド知識と自分のスタイルの両方が必要

経験則: 迷った場合は、RAG から始めてください。 RAG は安価で高速で反復が簡単です。 RAG が不十分な場合にのみ微調整します。


5. 最も一般的な使用例

5.1 ビジネス

使用例説明データソース
社内ナレッジ ボット従業員がプロセスとポリシーについて尋ねる人事ドキュメント、SOP、wiki
カスタマーサポートFAQ + 製品ドキュメントからのボット回答ヘルプセンター、マニュアル
法務アシスタント法律と契約を調べる法的文書、契約書
販売促進ケーススタディ、競合情報を見つけるCRM データ、レポート

5.2 個人/教育

使用例説明データソース
スタディアシスタント「教科書とチャット」 - 教科書について質問するPDF ブック、スライド
研究ヘルパー50 以上の論文からの洞察の要約Arxiv 論文
個人Wikiメモを取る + メモからの Q&A黒曜石、概念
コードドキュメント10万行以上のコードベースについて質問するソースコード、ドキュメント

5.3 AI 製品

使用例実際の例
Perplexity AI検索エンジン + RAG (ウェブ検索→返信)
Notion AINotion ワークスペースからの RAG
GitHub コパイロット現在のコードベースからの RAG
ChatGPT + ブラウズリアルタイム Web からの RAG

💡 演習 5: 会社/プロジェクト/学校の RAG 使用例を 3 つ挙げてください。ユースケースごとに、データ ソース、ユーザー、成功指標を決定します。


6. 制限 — RAG は「特効薬」ではありません

制限事項説明解決策 (次のレッスンで学習します)
ゴミが入って、ゴミが出る不良データ → 不良 RAGデータ クリーニング (レッスン 5)
チャンクが小さすぎる/大きすぎるコンテキストが失われた、またはノイズが多すぎるチャンク戦略 (レッスン 5)
曖昧なクエリレトリバーは正しいを見つけられませんでした。クエリ変換 (レッスン 7)
途中で迷ってしまったLLM は間のコンテキストを無視します。再ランキング (レッスン 8)
マルチモーダルPDF 内の画像/表が削除されましたマルチモーダル RAG (レッスン 10)

概要

コンセプト覚えておいてください
ラグ取得 → 拡張 → 生成 (試験「オープンブック」)
解決済み幻覚、知識の遮断、専門知識
インデックス作成チャンク → 埋め込み → 保存 (オフライン、1 回)
クエリ中クエリを埋め込む → 検索 → 拡張 → 生成 (リアルタイム)
対微調整RAG = より多くの知識、微調整 = 行動を変える
から始まりますRAG ファースト (安価、高速、反復が容易)

一般的な演習

  1. ✅ 小さな演習 (2、3、5) を完了する
  2. ハンズオン: パート 3 の「Chat with PDF」デモを実際のドキュメントを使用して実行します。結果のスクリーンショットを撮ります。
  3. アーキテクチャ図: パート 5 の特定の使用例に合わせて RAG アーキテクチャを再描画します (draw.io または Mermaid を使用)。
  4. 調査: 2026 年に最も使用されている 3 つの RAG ツール/製品を見つけます (ヒント: LangChain、LlamaIndex、Vercel AI SDK)。長所/短所を比較します。

次の記事: 埋め込みモデル — テキストをベクターに変換する方法、OpenAI、Cohere、オープンソースの比較、およびベトナム語での埋め込み。