RAGシステムとベクトルデータベース実装ガイド(前編)

## 1. この記事のゴール
- AI 開発未経験でも、RAG（Retrieval‑Augmented Generation）の全体像が 10 分でつかめる
- "ベクトル検索って結局なに？" がイメージで理解できる

## 2. AI基礎知識から始めよう


### そもそもAIは何を「知っている」のか？

最新の大規模言語モデル（LLM）は、書籍、ウェブページ、学術論文などの膨大な公開されているテキストデータから言語のパターンを学んでおり、**特定の知識や事実を「記憶している」わけではありません。また、あなたの社内資料や個人情報にはアクセスできません。**

* **一般知識はある程度把握していますが、時事的な情報は限定的**です（モデルによっては2024年までの情報をカバー）。
* **あなたの会社の内部文書や個人的なデータは、学習に含まれていない**ため、アクセスも知識もありません。
* **リアルタイムな情報収集やデータ検索はできないモデルもあり、補助的にRAG（検索補助型生成）やAPI連携が必要**です。

---


## 3. RAGとは 
### なぜRAGが必要なのか？
- **課題**: LLMは最新情報や特定領域の詳細な知識を持っていない
- **解決策**: 外部データソースから関連情報を取得して回答の質を向上させる
- **メリット**: 最新データの活用、幻覚（誤った情報生成）の軽減、ドメイン特化型回答の実現

### RAG（Retrieval-Augmented Generation）とは？

RAGは「検索拡張生成」と訳され、生成AIが回答を行う際に、**外部知識をリアルタイムで取り込むことで、精度と根拠のある回答を実現する仕組み**です。

多くのユーザーがイメージしているAIの仕組みは、

> **「質問を入力 → AIが考えて回答 → 結果を返す」**

という流れかもしれません。
しかし、**実際のRAGシステムでは、この背後でより複雑かつ高度なプロセスが行われています。**

---

具体的には以下のような処理が走っています：

1. ユーザーの質問を受け取る
2. 質問を意味ベクトルに変換（※単なる文字列ではなく「意味」を数値に）
3. そのベクトルを使って、ベクトルDBから関連する知識や文書を検索
4. 検索された情報とユーザーの質問を一つのプロンプトに統合
5. この統合プロンプトをもとに、生成AI（GPT, Claudeなど）が回答を生成

```mermaid
flowchart TD
    subgraph ユーザー
        A[ユーザーの質問入力]
    end

    subgraph RAGシステム
        A --> B[質問をベクトル化<br>Embedding Model]
        B --> C[ベクトルDB検索<br>FAISS, Weaviate, etc]
        C --> D[関連文書取得 Top-k]
        D --> E[取得文書と質問を統合<br>プロンプト構築]
        E --> F[生成モデルによる回答生成<br>LLM: GPT, Claudeなど]
    end

    F --> G[ユーザーに回答を返す]

    style A fill:#f9f,stroke:#333,stroke-width:1px
    style F fill:#bbf,stroke:#333,stroke-width:1px
    style C fill:#cfc,stroke:#333,stroke-width:1px
    style B fill:#ffd,stroke:#333,stroke-width:1px
```

---

このようにRAGは、「AIがすべての知識を覚えているわけではない」という現実に対応し、**最新かつ外部の情報源を使ってその場で“調べて答える”と**いう、より人間に近い思考プロセスを再現しているのです。
## 4. ベクター（ベクトル）とは
### ベクター（ベクトル）って何？なぜ重要？
ベクトルとは、一言でいうと「数値の並び」です。例えば `[0.2, 0.5, -0.1, 0.8, ...]` のように、数字を順番に並べた形です。これがAIにとっての“言葉の意味”の表現方法になります。

この数値列は、数百〜数千の次元で構成されています。たとえば OpenAI の text-embedding-ada-002 というモデルでは、1536次元のベクトルが出力されます。つまり、一つの単語や文が 1536個の数値 に変換されます。

### どうやってベクトルに分解しているのか？
この変換は、「埋め込み（embedding）」と呼ばれる処理によって行われます。埋め込みモデルは、大量の文章からパターンを事前に学習していて、言葉の持つ意味・文脈・使われ方などを圧縮して、数値に変換しています。

1次元1次元には「これは動物っぽさ」「これは感情っぽさ」「これは否定的ニュアンス」といった明確な意味が割り当てられているわけではありませんが、全体としてその言葉の意味を持つように学習されています。


---

### なぜ「ベクトル」で意味を扱うのか？

従来の検索はキーワード一致に頼っており、「犬」と「わんちゃん」をまったく別のものとして扱います。しかし、私たち人間はそれらがほぼ同じ意味であると自然に理解できます。

AIにその“意味の近さ”を理解させるために使われるのが、**ベクトル検索**です。

ベクトル検索では、言葉をベクトル（数値の配列）に変換し、**意味的な近さ**を数値として計算できます。

---

### ベクトル検索はどんなふうに便利なのか？

たとえば、以下のように単語がベクトルで表現されるとします：

```
「犬」         → [0.2, 0.8, 0.1, 0.9, ...]  
「わんちゃん」 → [0.3, 0.7, 0.2, 0.8, ...]  
「猫」         → [0.6, 0.1, 0.8, 0.2, ...]  
```

このとき、「犬」と「わんちゃん」のベクトルは非常に似ており、「猫」とはやや離れている、というふうに判断できます。

もう1例見てみましょう。

* 「鳥」と「飛行機」は、「空を飛ぶ」という特徴で似ている
* 「飛行機」と「車」は、「乗り物」という特徴で似ている
* しかし「鳥」と「車」は、共通点が少なく、ベクトル上も離れた位置になります

このように、**単語や文章の「意味」同士の近さを、数学的に捉えられる**のがベクトル検索の強みです。

---

### ベクトル検索の本質的なポイント

* テキストや画像を\*\*意味のある数値（ベクトル）\*\*に変換できる
* 似た内容・意味を持つものは、ベクトル空間上で近くに配置される
* 距離を測ることで、「意味的に似た情報」を検索できる

これによって、単なるキーワード一致では実現できなかった、より自然な情報検索が可能になります。

---

### 従来のデータベースとの違い
従来のキーワード検索では「AIアシスタント」と「人工知能助手」は別物として扱われますが、ベクトル検索では意味的に近いと判断されます。

| 従来のデータベース検索 | ベクトルデータベース検索 |
|-----------------|-----------------|
| キーワードの一致を検索 | 意味的な類似性で検索 |
| 「猫」で検索すると「猫」を含む文書のみ | 「猫」で検索すると「ねこ」「キャット」「ペット」なども見つかる |
| 正確だが柔軟性に欠ける | 柔軟だが設定が複雑 |

## 5. まとめ
- **RAGとは？**
RAG（検索拡張生成）は、AIが外部データを検索して、その結果を使って答えを生成する仕組みです。
いわば「AIがあなたの代わりに調べてから答えてくれる」仕組み。

- **ベクトル検索とは？**
AIが「意味」で検索できるようにするための技術です。
キーワードの一致ではなく、“意味の近さ”を数値的に判断してくれる仕組み。

後半の記事です！
https://zenn.dev/acntechjp/articles/aa5f8e17e5af11