
本記事は Kong Blog の記事を翻訳し転載しています。
2025 年 7 月 9 日 読了時間 11 分

Antoine Jacquemin
Kong シニア スタッフ フィールド エンジニア
RAG とは何か? 使用すべき理由とは?
RAG (検索拡張生成) は AI における新しい概念ではありませんが、さまざまな企業と話をしていると、その実装方法については誰もが独自の解釈をしているように思えます。
まずは基本をおさらいしましょう。
RAG (Retrieval-Augmented Generation の略) は、外部のナレッジ ソースの関連データをプロンプトに直接注入し、それを大規模言語モデル (LLM) に送信する技術です。
「ちょっと待って、当社のモデルはすでにドメイン固有のデータ上でファインチューニング済みです。それなのになぜ RAG が必要なのですか ?」
素晴らしい質問です ! でも、ちょっと考えてみましょう。
- モデルは本当にすべてのデータでトレーニングされていますか ?
- データが変更されたり増えたりした場合はどうなりますか ?
- GPT-4 のようなオープン モデルを使用したい場合はどうでしょうか ?
RAG を使用すると、最新のデータを動的に取得してドメイン間で適応できるため、ファインチューニングのサイクルの繰り返しを回避できます。
さらに、ファインチューニングでは次のような LLM の根本的な弱点は解決できません。
- ハルシネーション (幻覚): モデルが不正確な情報や捏造された情報を生成します。
- 透明性の欠如: 生成された応答のソースを追跡する術がありません。
さらに詳細にご覧になりたい場合は、RAG (検索拡張生成) に関するこちらのブログをご確認いただくことを強くお奨めします。
「なるほど。RAG は随分と複雑なようですね。ですが、当社にはそれを学ぶリソースがありません。」
ご心配なく ! このガイドですべてのステップを順番に説明していきます。😊
2 段階の RAG のプロセス
RAG は、主に 2 つのステージで構成されます。
- インジェスト パイプライン: ドキュメントをベクトル データベースに読み込みます。
- リトリーブ パイプライン: ユーザーがクエリを実行すると、最も関連性の高いコンテンツを取得して LLM の推論リクエストに注入します。
インジェスト パイプライン: データの追加
このステップでは、ドキュメントをより小さなチャンクに分割し、埋め込み API を使用してベクトルに変換し、ベクトル データベースにプッシュします。

使用すべき埋め込み次元は ?
埋め込みとは、テキストを数値で表現したもので、数百から数千の次元になることがあります。これらの次元は、コンテンツの意味的な情報を捉えます。
まるで魔法のように聞こえるかもしれませんが、この魔法は埋め込み API によって内部で行われます。データはベクトル空間の点として表現され、類似性検索が可能になります。このとき、埋め込みの次元数が重要な役割を果たします。
「では何次元を使えばよいのですか ?」
唯一の正解というものはありません。ユース ケースに基づいてテストと評価を行う必要があります。
また、埋め込みモデルにも依存します。たとえば、OpenAI の text-embedding-3 では、次元をカスタマイズできます。
- 次元数を増やす = 表現は豊かになりますが、メモリ、ストレージ、コストも増加します。また、オーバーフィット (過学習) やノイズを取り込むリスクもあります。
- 次元数を減らす = 速度とパフォーマンスは向上しますが、重要なニュアンスが失われ、一致の精度が低下する可能性があります。
PCA、t-SNE、UMAP などの次元削減手法を適用して、最も意味のあるコンポーネントのみを保持し、ノイズを除去することも検討してください。
以下のデモでは、コスト、品質、レイテンシーのバランスが取れた 1536 次元を使用していることがおわかりいただけます。
使用すべきチャンク サイズとオーバーラップとは ?
これもまた「場合による」シナリオになります。チャンク サイズは、データ、クエリのタイプ、および精度とパフォーマンス間のトレードオフに依存します。
- 小さいチャンク: 精度、きめ細かな一致、高速なリトリーバルが可能となりますが、メモリ使用量が多くなり、コンテキストが失われます。
- 大きいチャンク: より多くのコンテキストを含みますが、ノイズや無関係なデータが含まれる可能性があり、コストが増加します。
一般的なチャンク サイズは 200 ~ 1000 トークンです。
また、次の点も考慮が必要です。
- チャンク化の方法: テキストの分割方法: トークンベース、センテンスベース、またはセマンティック (意味) ベース。
- オーバーラップ: チャンク間でコンテキストを維持します。
以下のデモでは、連続性を高めるため、50トークン(約2文)のオーバーラップで文単位チャンキングを採用します。
専門家からのヒント
専門家からのヒントをご案内します。RAG のプロセスでは、他にも考慮すべきことがたくさんあります。
特に RAG とその一般的な落とし穴について詳細に理解するために、次の記事を読んでおかれることをお奨めします。RAG とは何か ? その課題を解決する方法について。
Kong では、システムを次のレベルにスケールさせるために、階層型インデックスやリレーショナル インデックスなど、より高度な RAG 戦略に対応する方法も模索しています。
リトリーブ パイプライン: 関連コンテンツの検索
ドキュメントがベクトル データベースにインジェスト(取り込み)されたら、次にユーザーからの クエリを処理します。このステップでは、ユーザー プロンプトに応じて最も関連性の高いチャンクを取得し、LLM リクエストに注入します。

リトリーブの仕組み
ユーザーがリクエストを行うと、次のようになります。
- インジェスト時に使用したのと同じ埋め込み API を使用して、ユーザー プロンプトの埋め込みが作成されます。
- このプロンプト ベクトルが、ベクトル データベースに保存されているベクトルと比較されます。
- ベクトル データベースは、最も関連性の高いチャンクを返します。
「類似性の計算方法と測定方法を教えもらえますか ?」
当社では、最近傍アルゴリズムと以下の手法を使用しています。
- コサイン類似度: ベクトル間の角度を測定します。これは意味的類似性用に最適で、ほとんどの RAG アプリケーションでテスト比較に推奨される方法です。
- ユークリッド距離: 点と点の間の実際の距離を測定します。座標やピクセルベースのデータを含むユース ケースに適しています。
要するに、RAG でテキストベースの埋め込みを扱う場合は、一般的にコサイン類似度が最良の選択と言えます。
チャンクをプロンプトに注入する
関連するチャンクがリトリーブ (取得) されたら、それらを LLM リクエストに含めてコンテキストを提供できます。
「RAG コンテキストは、システム メッセージとユーザー メッセージのどちらに含めるべきですか ?」
鋭い質問ですね。それはユース ケースによって異なります。
- システム メッセージは LLM の強力なガイダンスとなるため、コンテキストを注入するのに理想的です。しかし、悪意のあるチャンクがプロンプト インジェクションにつながる可能性があるため注意が必要です。もしそれらがシステム メッセージに含まれていると、その影響はより深刻になります。
- ユーザー メッセージでは、コンテキストを質問の近くに配置できます。これはシステム メッセージよりも影響力には及びませんが、プロンプト インジェクションのリスクという点では比較的安全です。
Kong AI Gateway を使用すると、プラグインの Inject As Role フィールドを構成することで、注入方法を簡単に選択でき、システム、ユーザー、アシスタントの各ロール間で柔軟に対応できます。
専門家からのヒント
考慮すべきことがまだあります。インジェストとリトリーブのステップは不可欠ですが、パフォーマンスと安全性の両方を向上させるために、セキュリティと最適化のレイヤーを追加することを強くお奨めします。
次のような多くのポリシーが重要です。
- 受信プロンプトの検証
- 取得したコンテンツのサニタイズ
- 不正使用やインジェクション パターンの監視
- コスト削減のためのプロンプトの圧縮
耳寄りの話ですが
これらすべてが Kong AI Gateway で利用できます。
では、LLM に送信する前に取得したチャンクを圧縮する Kong AI Prompt Compressor プラグインを見てみましょう。これにより、プロンプト サイズを削減し、レイテンシーを改善して、トークン制限内に収めることができます。
AI によるプロンプト圧縮
AI Prompt Compressor は、プロンプトが LLM に送信される前に圧縮するように設計された Kong プラグインです。LLMLingua ライブラリを活用して、テキストの意味を保持しながらインテリジェントな圧縮を実行します。
このプラグインを使用するには、Kong データプレーンの近くに Compress Service (Docker イメージとして利用可能) をデプロイする必要があります。構成は Konnect UI で簡単に行うことができます。
仕組み
AI Prompt Compressor プラグインは、LLM に送信される前に最終的なプロンプトを圧縮します。
- LLMLingua 2 を使用して、高速で高品質な圧縮を行います。
- 比率 (例: 元の長さの 80% に縮小) またはターゲット トークン数 (例: 150 トークンに圧縮) での圧縮できます。
- 圧縮範囲を定義できます。たとえば、100 トークン未満のプロンプトを 0.8 の比率で圧縮、または100 トークンに圧縮します。
- <llmlingua>…</llmlingua> タグでプロンプトの特定部分をターゲットにした選択的な圧縮をサポートします。
これが重要な理由とは ?
AI RAG Injector とあわせて使用することで、このプラグインは関連するチャンクを取得し、最終的なプロンプトが妥当な制限内に収まるようにできます。これにより、次のような過大なリクエストを回避できます。
- レイテンシーの増加
- トークン制限エラー
- LLM プロバイダーからの予想外の請求
今回のセットアップでは、LongLLMLingua ではなく LLMLingua 2 を選択しました。なぜでしょうか ?
- RAG のコンテキストでは、チャンクはすでに関連性に基づいてフィルタリングされています。
- LLMLingua 2 は、レイテンシーと圧縮品質の間のトレードオフがさらに優れています。
- タスクに依存せず、高速で、高度な NLP 技術を使用してトークン数を削減しながら意味を保持します。
主なメリット
- より高速な応答
- より低いレイテンシー
- コンテキスト長に制限のあるモデルの LLM 出力を改善する可能性
- トークン使用量の削減、つまりコストの削減
要するに、「パフォーマンスや品質を犠牲にすることなくプロンプトを圧縮」できるのです。
そしてもちろん…最大のメリットは、プロンプトが小さければ請求額も小さくなるということです。😄
それでは、実際に動作を見てみましょう。
Kong 環境の準備
構成に入る前に、Konnect と Docker Compose を使用して Kong のインフラストラクチャをセットアップしましょう。
Compress サービス イメージをプルするには、当社の Cloudsmith リポジトリへのアクセスが必要です。必要な認証情報を取得するには、Kong の営業担当者にお問い合わせください。
ステップ 1: Konnect でコントロール プレーンを作成する
- Konnect アカウントにアクセスします: https://cloud.konghq.com/
- 新しいコントロール プレーンを作成します。
- データ プレーンを構成するよう求められたら、Docker オプションを選択します。
- 以下をダウンロードします。
- クラスター証明書 (cluster.crt)
- クラスター キー (cluster.key)
- コントロール プレーンのエンドポイント ID (環境変数で使用)
ステップ 2: プロジェクト リポジトリをクローンする
$ git clone https://github.com/AntoineJac/ai-compress-demo
$ cd ai-compress-demoステップ 3: 認証情報を追加し、Docker Compose ファイルを更新する
- ダウンロードした cluster.crt と cluster.key を、クローンしたプロジェクトの /certs ディレクトリに保存します。
- docker-compose.yaml ファイルを開きます。
- {$CP_ID} のすべてのインスタンスを、実際のコントロール プレーンのエンドポイント ID に置き換えます。
ステップ 4: アーキテクチャをデプロイする
すべてのコンテナを起動します。
$ docker compose up -dこのセットアップに含まれるもの
- サービス間のシームレスな通信を可能にするカスタム Docker ネットワーク
- Konnect コントロール プレーンに接続された Kong データ プレーン
- ベクトル データベースとして機能する Redis スタックサーバー
- AI Prompt Compressor プラグインが使用する Compressorサービス
パフォーマンスのヒント
圧縮サービスで最適なパフォーマンスを得るには、NVIDIA GPU に対応したホストで実行することを強くお奨めします。
このデモでは、GPU 対応の AWS EC2 インスタンスで実行します。
- イメージ: Deep Learning Base OSS NVIDIA Driver GPU AMI (Ubuntu 24.04)
このイメージでは CUDA ドライバーがデフォルトでプリインストールされているため、簡単です。 - インスタンス タイプ: g4dn.xlargeインスタンスが CUDA ドライバーに対応していることを確認してください。
Kong のセットアップを構成する
この作業には、新しい AI Manager ツールを使用します。

1/ LLM サービスを公開する
- Konnect アカウントで、AI Manager セクションに移動します。
- [Expose LLM] をクリックします。
- 以下を構成します。
- LLM プロバイダーとモデル
- ルート (例: /test-compress)
- 先ほど作成したコントロール プレーン
2/ AI RAG Injector プラグインを構成する
LLM サービスが作成されたら、以下の操作を行います。
- このサービスに AI RAG Injector プラグインをアタッチします。
- Redis ベクトル データベースを使用するように設定します。
このドキュメントに従って設定します。
🔗AI RAG Injector プラグインのドキュメント - プラグインの構成:
- redis_host として redis を直接使用します。
- 注入するテンプレート: <LLMLINGUA><CONTEXT></LLMLINGUA> | <PROMPT>
- Inject as roleに [user]を割り当てる
- 前述のとおり、コサイン距離メトリクスと 1536 次元を使用します。
この構成により、RAG コンテキストがユーザー メッセージにのみ注入され、<LLMLINGUA>タグによって圧縮可能になります。
3/ AI Prompt Compressor プラグインを追加する
同じサービスに AI Prompt Compressor プラグインを追加します。
- compressor_url として http://compress-service:8080 を使用します。
- 広い圧縮範囲を定義します (例: 0-100000、比率 0.5)
ベクトル DB にデータをインジェストする
1/ ドキュメントをベクトル データベースにインジェストする
Redis ベクトル DB にデータを追加するためのインジェスト ルートを作成しましょう。
- サービスに新しいルート /ingest-chunks を作成します。
- Pre-function プラグインをアタッチします。
- access フェーズで、以下の GitHub ファイルのコードを貼り付け、RAG_PLUGIN_ID を実際のプラグイン ID に置き換えます:
🔗pre-function-script.lua
このスクリプトは、受信リクエストからコンテンツを取得し、それをベクトル DB に保存するものです。
2/ Python スクリプトでインジェストをテストする
リポジトリで提供されている ingest_chunk.py スクリプトを使用して、インジェストをテストできます。
- Wikipedia の「象 (Elephants)」のページでコンテンツを取得します。
- 「サメ (Sharks)」に関する PDF ファイルを変換して読み取ります。
- センテンスベースのロジックを使用してテキストをチャンク化します。
- コンテキストのためにオーバーラップを追加します。
- すべてのデータをベクトル DB に送信します。
セットアップ手順
1.ターミナルを開いて、次を実行します。
$ python -m venv venv
$ source venv/bin/activate
$ pip install requests nltk tiktoken pymupdf4llm2.ingest_chunk.py で、API_ENDPOINT 変数をインジェスト エンドポイント (例: http://localhost:8000/ingest-chunks) に置き換えます。
3.次を実行します。
$ python ingest_chunk.pyこれで、すべてがセットアップされました。AI 搭載の LLM ゲートウェイで、ドキュメントのインジェストをテストし、圧縮とリトリーブを検証する準備ができました。
LLM に RAG データのみを強制的に使用させる
「ちょっと待ってください。LLM が外部データではなく、RAG データのみを使用するようにしたい場合はどうすればよいのですか ?」
LLM が RAG を介して取得したコンテキストのみを使用するように制限し、外部または事前トレーニング済みのナレッジに依存するのをブロックしたい場合でも、問題ありません。AI Prompt Decorator プラグインを使用すれば、この動作を強制できます。
セットアップ手順
同じサービスに AI Prompt Decorator プラグインを追加します。
- prompts.append.role として System を使用します。
- prompts.append.contentused には、次のように入力します。
「ユーザー メッセージ内の質問の前に渡された情報のみを使用してください。質問にデータが入っていない場合は、「利用できる社内データがありません」と応答してください。
このシステム プロンプトは、注入された RAG コンテキストにのみ依存するように LLM に明示的に指示します。コンテキストが見つからないか空の場合、モデルはハルシネーションを起こしたり推測したりする代わりに、安全なフォールバック応答を返します。
セットアップをテストしてみましょう!
リクエストを送信してテストします
$ curl --location 'http://localhost:9000/test-compress' \
--header 'Content-Type: application/json' \
--data '{ "messages": [ { "role": "user", "content": "How many shark species is there in the world and how many dangerous" } ], "temperature": 1, "max_tokens": 256, "stream": false }'応答は次のようになります。
{ … "content": "Scientists have described 370 species of sharks, and only four have been known to attack humans." …}ログを検査する
http logs プラグインを使用している場合、ログに新しいプロパティが表示されます。
"ai": {
"compressor": {
"compress_items": [
{
"save_token_count": 360,
"compress_token_count": 485,
"original_token_count": 845,
"compress_type": "rate",
"information": "Compression was performed and saved 360 tokens",
"compressor_model": "microsoft/llmlingua-2-bert-base-multilingual-cased-meetingbank",
"compress_value": 0.5,
"msg_id": 1
}
},
…
}このプロパティには、プロンプト圧縮に関する詳細が含まれています。
このケースでは、プラグインは 360 トークンを節約しました — 大幅な削減です。
次に、「How many dog species are there?(犬の種類は何種類ですか ?)」と尋ねてみてください。
LLM は、社内コンテンツに基づくデータしか使用できないため、「No internal data available (利用できる社内データがありません)」と応答します。
これで、完全に機能する社内 LLM エージェントが完成しました
サンプル記事を独自の社内リソースに置き換えることで、以下のような LLM エージェントを効果的にデプロイしたことになります。
- 社内ソースを検索する
- 精査された社内ソースに厳密に基づいて応答する
しかも、これらの機能は Kong AI Gateway で達成できるほんの一握りにすぎません。

まとめ
RAG (検索拡張生成) のメリットは明らかです。そして Kong では、あらゆるチームがソリューション パイプライン全体を簡単にセットアップおよび管理できます。
将来を見据え、Kong は RAG ベースの応答の制御と関連情報を追加する機能を強化するために、次のような追加機能の開発に積極的に取り組んでいます。
- 低品質または無関係な情報を除外するためのチャンク関連性スコアリング
- メタデータのタグ付けとフィルタリング (例: 2021 年 4 月以降の日付のドキュメントのみ、または社内ソースからのみ取得)
- データ コンプライアンスを確保するためのポリシー適用メカニズム
しかも、これらの機能は Kong AI Gateway で実現できるほんの一握りにすぎません。
Kong の次のステップ
Kong の堅牢なエコシステムを活用して、RAG 実装を最大限に高めましょう。
- Kong Gateway ドキュメント
- クラウドネイティブな API 管理を実現する Kong Konnect
- Kong AI プラグイン (RAG, Prompt Compressor, Decorator)
Kong は、開発者やデータ サイエンティストから企業のリーダーまで、あらゆるチームが AI の真の可能性を解き放つことができるよう努めています。
皆様の RAG の活用プロセスを加速させるお手伝いをいたします。




