LLM・RAG・ベクトルデータベースを徹底解説!Claude Codeをもっと理解するための基礎知識
Claude Codeを使っていて「なぜこんなに賢いの?」「でも時々間違えるのはなぜ?」と疑問に思ったことはありませんか?その答えは、LLM(大規模言語モデル)、RAG(検索増強生成)、そしてベクトルデータベースという技術にあります。この記事では、これらの技術を「直感的に、かつ網羅的に」解説し、Claude Codeをより深く理解するための基礎知識を提供します。
この記事のポイント
- LLMは「次のトークンを予測する機械」であり、真の理解や推論はしていない
- RAGは「閉じた本での試験」を「開いた本での試験」に変える技術
- ベクトルデータベースは「意味」で検索できる記憶装置
- ほとんどのAI失敗は「生成の前」に起きている
LLMの本質:「次のトークン予測機械」
LLM(Large Language Model)とは何でしょうか?元記事では「An LLM is a next-token prediction machine」と明快に定義しています。つまり、与えられたテキストから「次に来そうな単語(トークン)」を予測するだけの機械なのです。
ここで重要なのは、LLMには以下の能力が「ない」ということです。
– メモリ機能がない: 過去の会話を「覚えている」わけではなく、毎回コンテキストとして与えられた情報だけを使います
– ファクトチェック機能がない: 生成した内容が事実かどうかを確認する機構がありません
– 真の推論能力がない: 論理的に考えているように見えますが、実際は「推論っぽいテキスト」を生成しているだけです
記事では「信頼度は訓練データの副作用であり、正確性ではない」と指摘しています。Claudeが自信を持って回答しているからといって、その内容が正しいとは限らないのです。これを理解することは、Claude Codeを使う上で非常に重要です。
コンテキストウィンドウの限界を知る
各LLMには「コンテキストウィンドウ」という制限があります。これは一度に処理できるテキスト量の上限であり、いわば「短期記憶」のようなものです。Claude 3ではこのウィンドウが大幅に拡大されましたが、それでも無限ではありません。
記事では「more context is like opening 40 browser tabs(コンテキストを増やすのは40個のブラウザタブを開くようなもの)」と表現しています。単にコンテキストを増やせばいいというものではなく、適切な情報を適切な量だけ与えることが重要なのです。
Claude Codeを使う際も、プロジェクト全体を読み込ませるのではなく、関連するファイルやコードスニペットに絞って提供することで、より精度の高い回答を得られます。
RAGとは何か?「閉じた本」から「開いた本」へ
RAG(Retrieval-Augmented Generation:検索増強生成)は、LLMの限界を補う重要な技術です。記事では「RAG turns an LLM from a closed-book exam into an open-book one(RAGはLLMを閉じた本での試験から、開いた本での試験に変える)」と説明しています。
通常のLLMは、訓練時に学んだ知識だけで回答します(閉じた本の試験)。しかしRAGを使えば、質問に回答する前に関連する情報を検索し、それを参照しながら回答できます(開いた本の試験)。
RAGの主なメリットは以下の通りです。
– ハルシネーション(幻覚)の減少: 実際のドキュメントを参照するため、でっち上げが減ります
– コスト削減: 必要な情報だけを取得するため、コンテキストの無駄遣いを防げます
– レイテンシ改善: 効率的な情報取得により、応答時間を短縮できます
これは単なるプロンプトの調整ではなく、システムレベルの改善を実現する技術なのです。
エンベディング:「意味」を数値に変換する
RAGを実現するための鍵となるのが「エンベディング(Embedding)」です。エンベディングとは、テキストの「意味」を数値のベクトル(数字の配列)に変換する技術です。
キーワード検索では「refund didn’t work(返金がうまくいかなかった)」と「billing is broken(請求がおかしい)」は全く別の検索結果を返します。しかし、エンベディングを使えば、これらが「意味的に近い」ことを認識し、関連するドキュメントを見つけられます。
ただし、記事では「embeddings don’t fix bad structure(エンベディングは悪い構造を直せない)」という警告も示しています。テキストの分割(チャンキング)が不適切だと、いくらエンベディングが優秀でも問題は解決しません。
ベクトルデータベースの役割
ベクトルデータベースは、エンベディングを保存し検索するための専用データベースです。重要なのは「記憶装置であって、知能ではない」という点です。
従来のSQLデータベースが「完全一致」や「部分一致」で検索するのに対し、ベクトルデータベースは「意味的な類似性」に基づいて検索します。「このコードと似た処理をしているコードを探して」といった検索が可能になります。
記事によれば、小規模なデータセットではPostgres + pgvectorで十分対応できるとのこと。スケーリングが必要になって初めて、Pinecone、Weaviate、Chromaなどの専用ツールを検討すればよいでしょう。
RAGパイプラインが失敗する5つのパターン
記事では、RAGシステムがうまくいかない5つの主要な失敗パターンが紹介されています。
1. 不適切なチャンキング: テキストの分割が大きすぎると不要な情報が混入し、小さすぎると文脈が失われます。適切なサイズ設定が重要です。
2. 過度なコンテキスト追加: top_k(取得するドキュメント数)を増やしても、LLMはそれらを適切にランク付けできません。「とりあえず多く取得」は逆効果です。
3. 矛盾したドキュメント: 新旧のポリシーが混在していると、AIは混乱して不正確な回答を生成します。情報の一貫性管理が必要です。
4. レイテンシの蓄積: 検索、取得、生成の各ステップで遅延が累積し、ユーザー体験を損なうことがあります。
5. プロンプトインジェクション: 取得したテキスト内に悪意のある指示が含まれていると、システムが乗っ取られるリスクがあります。
最も重要な指摘は「most failures happen before generation(ほとんどの失敗は生成の前に起きている)」ということです。AIの出力がおかしいとき、多くの場合、モデル自体ではなく、情報の取得段階に問題があるのです。
ファインチューニングとエージェント:いつ使うべきか
ファインチューニング(追加学習)は「モデルの話し方を変える」技術であり、実行時の知識は増えません。特定の口調やフォーマットでの回答が必要な場合に有効ですが、新しい知識を教えたいならRAGの方が適しています。
エージェント(AIにツールを使わせる仕組み)は、ワークフローが複雑な場合に有効ですが、基本的な検索品質が悪いと導入は逆効果です。
実装の推奨順序は以下の通りです。
1. まず検索品質を改善する
2. RAGを導入する
3. 必要に応じてファインチューニング
4. ワークフローが複雑な場合のみエージェント追加
知っておくと便利なTips
-
Claude Codeへの指示は具体的に: LLMは「予測機械」なので、曖昧な指示より具体的な指示の方が精度の高い回答を得られます。
-
関連コードだけを共有する: コンテキストウィンドウには限りがあるため、プロジェクト全体ではなく、関連するファイルやスニペットに絞りましょう。
-
回答は必ず検証する: Claudeの回答がどんなに自信に満ちていても、それは「もっともらしいテキスト」であり、必ず正しいとは限りません。
-
失敗時は入力を見直す: AIの回答がおかしい場合、多くは入力情報(コンテキスト)に問題があります。プロンプトや提供した情報を見直してみましょう。
まとめ
LLM、RAG、ベクトルデータベースを理解することで、Claude Codeの動作原理がより明確になります。Claudeは「次のトークンを予測する機械」であり、真の理解や推論をしているわけではありません。しかし、適切な情報を適切に与えれば、非常に有用なアシスタントとして機能します。
重要なのは「AIの失敗の原因は、モデルの能力ではなく、システム設計にある」という視点です。Claude Codeを使いこなすためには、どんな情報をどう与えるかを意識し、出力を必ず検証する姿勢が大切です。
これらの基礎知識を持つことで、Claude Codeをより効果的に活用し、その限界も適切に理解できるようになるでしょう。
📎 元記事: https://dev.to/dev_tips/llms-rag-and-vector-databases-intuitively-and-exhaustively-explained-441j


コメント