初版執筆(2024年)から2年が経過したため、全面リニューアルしました。
完全無料ツール・無料枠APIのみを使用しています。PCへの面倒な環境構築(DockerやローカルLLMなど)は一切不要です!
Webブラウザ上で動作する Difyクラウド版(cloud.dify.ai) を使い、シーリングライトの取扱説明書PDFをナレッジ(知識ベース)として読み込ませ、その内容に基づいて的確に回答するAIチャットボットを構築してみます。
RAG(検索拡張生成)の仕組みを本質的に理解するには、「検索によってナレッジから抽出されたデータが、どのようにプロンプトとして言語モデル(LLM)に入力されているか」を確認するのが一番の近道です。
Difyの「Chatflow(チャットフロー)」機能を使うと、処理フローの各段階におけるログ(トレース)が視覚的に確認できます。ナレッジから取得したコンテキストデータとLLMに渡すプロンプトを具体的に見ることで、RAGの動きがすっきり理解できるはずです。
また、Difyのナレッジインデックス方式には「経済的(キーワード検索)」「高品質(ベクトル検索)」「ハイブリッド検索(ベクトル+キーワード+Rerank)」といった種類があります。本記事ではその抽出能力の比較も行います。
※初版執筆時(2024年)から環境をアップデートし、旧世代モデル(Gemini 1.5 Pro)は現在非推奨・旧型となったため、2026年現在の最新無料枠モデルである Gemini 3 Flashを使用します。Google AI Studioで無料のAPIキーを取得するだけで、Difyクラウド版からすぐに利用可能です。
Difyクラウド版の初期設定からチャットフローの作成・デバッグ手順、そしてログ分析によるRAGの動作検証まで順番に解説していきます。
私はGoogleアカウントは持っていますが今までGoogleの有料製品は使ったことがありません。
ですのでクレカ登録してません。今回もしてません。
有料で登録されている方が同じことをやって料金が発生するかもしれないので、ご注意ください。
自己責任で実行してください。
ローカルでやりたい場合はこちら↓


RAGとは
RAG(Retrieval-Augmented Generation:検索拡張生成)のしくみをまとめました。
1. RAGの目的と解決する課題
- 外部知識の活用とハルシネーションの防止: LLMの事前学習データに含まれない特定製品のマニュアル、社内規定、最新情報などの外部知識を、モデル自体の追加学習(ファインチューニング)を行うことなく動的に組み込みます。これにより、LLMが事実と異なる回答をでっち上げる「ハルシネーション(嘘の回答)」を防止できます。
- コンテキストウィンドウ(入力制限)とコストへの対応: 膨大なマニュアルや文書全体を毎回そのままプロンプトに入力すると、モデルの入力上限(トークン制限)の超過や、APIコストの増大、処理速度の低下を招きます。RAGを活用することで、質問に関連する最小限の情報だけをピンポイントで検索・提示できます。
2. RAGの処理フロー
- 事前準備(文書のベクトル化とインデックス作成): 外部ドキュメントを一定のブロック(テキストチャンク)に分割し、埋め込みモデル(Embedding Model)で数値ベクトルに変換してデータベースに保存しておきます。
- 質問のベクトル化: ユーザーからの質問テキストを、同じ埋め込みモデルに通してベクトル(意味空間上の位置)に変換します。
- 関連情報の検索・抽出: 質問ベクトルと、データベースに保存された文書ベクトル同士の類似度(コサイン類似度など)を計算し、意味的に最も近いテキストチャンクを上位数件抽出します。
- プロンプトへの統合: 抽出した「関連テキスト(参照資料)」と「ユーザーの質問」を組み合わせたシステムプロンプトを自動作成します。
- LLMによる回答生成: 作成したプロンプトをLLM(Gemini 3 Flash等)に渡し、LLMが「提示された参照資料のみに基づいて」回答を生成・返答します。
3. ベクトル化と検索の技術的特徴
- 文全体のベクトル化(Sentence Embedding): 検索処理では単純な単語一致ではなく、テキスト全体の意味合いを固定次元の数値ベクトルに圧縮して比較します。これにより、「電源を入れる」と「スイッチを入れる」のような表記ゆれにも対応できます。
- 汎用埋め込みモデルの利用: Difyクラウド版では、システム標準で用意された高品質な埋め込みモデルや各種APIサービス(OpenAI, Cohere, Jina等)をそのまま利用できます。
- ハイブリッド検索と再ランク(Reranking): 最新のRAG構成では、意味検索(ベクトル)と精密なキーワード検索(BM25等)を組み合わせた「ハイブリッド検索」を行い、さらに「Rerankモデル」で関連度順に高精度に並び替える手法が標準となっています。
4. RAGの誤解しやすいポイント
- LLM本体の改変ではない: RAGはLLMの中身(パラメータ)を書き換える技術ではなく、LLMを「与えられた資料を素早く読んで答える優秀な推論エンジン」として外部から活用するシステム枠組みです。
- LLMに渡すデータは「テキスト(文字列)」: LLMにベクトルを直接入力するわけではありません。あくまで「検索で取得したテキスト」と「質問文」を合成した普通の文字列プロンプトを入力として渡します。
事前準備:Difyクラウド版のアカウント作成とGemini 3 Flashの設定
まずはDifyクラウド版のアカウント作成と、Googleの無料APIキーの設定を行います。
Difyクラウド版にサインイン
- ブラウザで Dify Cloud (cloud.dify.ai) にアクセスします。
- GoogleアカウントまたはGitHubアカウントでサインイン(無料登録)します。
- プランを確認:左のDify’s Workspace→ワークスペース設定でSandbox(主要機能の無料体験)になっている。料金プラン
Google AI StudioでGemini 3 FlashのAPIキーを取得
- Google AI Studio にアクセスし、Googleアカウントでログインします。
- APIキーを作成→インポートしたプロジェクトを選択のプロジェクトを作成→プロジェクトの名前を入力→プロジェクトを作成→キーを作成をクリックして無料のAPIキーを発行・コピーします。後述の「Difyクラウド版にAPIキーを登録」で使います。
ナレッジの作成
ナレッジ(Knowledge)の目的は、取扱説明書などのPDFやテキストファイルをアップロードし、AIが参照できる知識ベースを作成することです。
作成手順
- Dify左部メニューから ナレッジ > 「すぐに使えるナレッジベースを作成」 をクリック。
- テキストファイルをアップロード に家電(シーリングライト)の取扱説明書PDFをドラッグ&ドロップ > 次へ。
- インデックスモードをまずテストとして 経済的(キーワード検索)を選択 > 保存して処理 をクリック。
PDF読み込みに関するTips(2026年最新情報)
PDFは図解や2段組みなどの自由なデザインレイアウトで作られているため、そのままテキストとして抽出すると「見た目の位置」と「抽出された文字列の順番」がズレてしまい、文章として意味が繋がらなくなる場合があります。
※Difyクラウド版では、高度なPDFパーサー機能(Doc2X、Unstructured、Marker等)やOCRプラグインを簡単に選択・連携できるようになっており、複雑なPDFのレイアウト認識精度が飛躍的に向上しています。もしレイアウト崩れでうまく検索できない場合は、事前テキスト化ツール等で整形したテキストファイル(.txt や .md)を使用するのも非常に有効です。
チャットフロー(Chatflow)の作成
Difyでチャットボットを作成する際、単純な「エージェント/チャットボット」形式よりも 「Chatflow(チャットフロー)」 を使う方が、内部のノード構成やデータフローが視覚化されるため構造の理解に最適です。
作成手順
- 上部メニューの スタジオ > 最初から作成 を選択。
- アプリタイプで Chatflow(チャットフロー) を選択し、アプリの名前を付けます(例:
シーリングライト案内bot)。 - 作成 をクリックすると、キャンバス上に初期ノードが配置されます。
デフォルトでは「開始」ノードと「LLM」ノード、および回答出力が接続されたシンプルなフローになっています。
- チャット画面でユーザーが入力した質問が、スタートの変数
{{userinput.query}}に格納されます。 - その変数がLLMノードに渡され、LLMの返答が
{{text}}に入ります。 - 最後にその返答がユーザーのチャット画面に表示されます。

モデル設定
Difyクラウド版にGemini APIキーを登録
- LLMのブロックをクリック→AIモデル「モデルを設定してください」をクリック。
- 「モデルを設定する」の横の 「設定」 をクリック。
- 「モデルプロバイダー」(Model Provider)が表示されます。
- プロバイダー一覧から Gemini を探し、「インストール」をクリックします。
- APIキーを追加→使用優先順位をAPIキーに変更
- APIキーを追加
- コピーした API Key を貼り付けて保存します。
- 利用可能モデル一覧に Geminiなどのモデルが表示され、準備完了です。
Open AIなどをメッセージクレジットで使えるようにしておく
上記と同様にOpen AIなどをインストールしておきます。
あとから追加する場合は、
- LLMのブロックをクリック→AIモデル欄のvをクリック、もう一度vをクリック。→マーケットプレイスからOpenAIをインストール。
- 使うときは「APIキー」をクリックして「AIクレジット」を選択します。
APIキーはなくても、メッセージクレジット(AIクレジット)で、利用できます。
Difyのメッセージクレジット(AIクレジット)とは、Difyに最初から用意されているAIモデル(OpenAIやAnthropicなど)を使って、AIが返事をする回数(応答回数)を数えるための単位です。
Sandbox(無料)プラン: 全部で 200件
クレジット消費を抑えるためにはminiとかnanoと書いてあるモデルを選択します。高機能モデルを選択するとすぐクレジットがなくなります。
知識取得ノードの追加
ユーザーの質問を受けて、ナレッジから関連するテキストチャンク(段落)を自動抽出する「知識取得(Knowledge Retrieval)」ノードを追加します。
設定手順
- 「スタート」ノードと「LLM」ノードを結ぶ線の上にマウスをホバーし、表示される + ボタンをクリック。
- 知識検索 ノードを選択・追加します。
- 知識検索ノード内の「ナレッジベース」の + をクリックし、先ほど作成したシーリングライトのナレッジをクリック→追加をクリック。
- 抽出された関連テキストは、変数
{{result}}(テキストチャンク群)として出力されます。
LLMノードの設定(Gemini 3 Flashへの変更)
LLMノードでは、ユーザーの質問 {{query}} に加えて、直前の知識取得ノードで抽出した {{result}}(参照テキスト)をLLMに一緒に渡すように設定します。
設定手順
- LLMノード をクリックして設定パネルを開きます。
- モデル選択: モデルのドロップダウンを開き、ProviderをGoogleに設定して Gemini 3.5 Flashを選択します。
- コンテキストの設定: 設定項目にある「コンテキスト」をクリックし、直前の知識取得ノードの出力である
{{result}}を選択・追加します。「コンテキスト利用時はプロンプトに変数を明記してください」というメッセージがでますが、次のプロンプト設定をすれば消えます。 - SYSTEMプロンプトの記述:
SYSTEM欄に以下のように入力します。あなたはシーリングライトのお問い合わせ担当カスタマーサポートです。 以下の【参照資料】のみに基づいて、ユーザーの質問に丁寧かつ正確に回答してください。 参照資料に記載がない内容については、「マニュアルに記載がないためお答えできません」と回答してください。 【参照資料】(ここで{x}をクリックして1番下にある「コンテキスト」をクリックすると「コンテキスト」という文字が、ここに貼ります。) - USERプロンプト: デフォルトで
「ユーザー入.../{x}query」 が設定されていることを確認します。
これによって、ユーザーの質問とナレッジから検索された文脈が自動的に合成されてLLMノードに投入されるようになります。
デバッグとトレース(ログ分析)
画面右上の 「プレビュー」 をクリックすると、右側にテスト用チャット画面が開きます。
テスト実行と原因調査
チャット欄に質問を入力してみます。
例: 電源の入れ方を教えて
実行するとエラーが出ました。Geminiモデルが混んでて使えないようです。(無料枠はなおさらよく起きます。)
req_id: af7681a077 PluginInvokeError: {"args":{},"error_type":"ServerError","message":"503 UNAVAILABLE. {'error': {'code': 503, 'message': 'This model is currently experiencing high demand. Spikes in demand are usually temporary. Please try again later.', 'status': 'UNAVAILABLE'}}"}
モデルをOpenAIのgpt-5-miniに変えて再挑戦。モデルの変更方法は、上述の「Open AIなどをメッセージクレジットで使えるようにしておく」を参照してください。
実行した結果、取扱説明書に基づく正確な回答ではなく、AIの一般的な曖昧な回答(あるいはナレッジを無視した回答)になってしまうことがあります。
その原因を調査します。
知識取得ノードのトレースログを確認:
トレース一覧から「知識検索」ノードを開き、設定タグではなく「最後の実行」タグをクリックして出力の content または result を確認します。
ログを見ると、質問の「電源の入れ方を教えて」に対して、該当する説明書の段落が正しく抽出されておらず、無関係な段落が取得されているか、"result": [] (空っぽ)になっていることが分かります。
参照資料が正しく検索できていないため、LLMもマニュアル通りの回答ができなかったわけです。
実際の結果
{
"result": [
{
"metadata": {
"_source": "knowledge",
省略
"title": "245400.pdf",
"files": null,
"content": "①\r\n②\r\nシェード\r\nシェード取付部\r\n本体\r\nシェードは確実に本体に取り付けて\r\nください。 警告 落下によるけがのおそれがあります。\r\n取付部\r\nシェード裏面\r\n注意\r\n●取り外しは必ず電源を遮断してから行ってください。\r\n●消灯直後は本体や器具が高温になっています。確実に冷え 警告 たことを確認してから取り外してください。\r\n1 シェードを取り外す\r\nシェードを反時計回りに回して本体から取り外してください。 \n2 本体を取り外す\r\n①つまみの2か所のロック解除ボタンを2つ共押しながら、\r\n②反時計回りに回して本体を外してください。\r\n3 スペーサーを取り外す\r\n本体を片方の手で支えながら外してください。\r\n器具の落下によるけがや破損の原因となります。\r\n注意\r\n本体を外したはずみで\r\nスペーサーが落下する\r\nことがあります。\r\n本体\r\n② ①\r\nロック解除\r\nボタン\r\nつまみ\r\nシェード\r\nつまみ\r\n3 シェードを取り外す\r\nシェードを反時計回りに回して本体から取り外してください。 \nシェード\r\n4 本体を取り付ける\r\nカチッ\r\n●必ず壁スイッチをOFF(切)にするか、電源を遮断\r\n してください。感電事故の原因となります。\r\n●消灯直後は本体や器具が高温になっています。確実\r\n に冷えたことを確認してから清掃をしてください。\r\n注意\r\n水に浸して固く絞った布で完全に拭き\r\n取ってください。\r\n絶対に、水をかけたり、水につけて洗ったりしないで\r\nください。\r\n火災、感電、故障の原因になります。 注意\r\n●リモコンの送信部は、乾いた柔らかい布\r\nで定期的に汚れを拭き取ってください。\r\n汚れるとリモコンでの操作がしにくく\r\nなります。\r\n送信部\r\n次のものは使用しない\r\nベンジン シンナー みがき粉 タワシ スポンジの硬い面\r\n1 水で薄めた中性洗剤に、柔ら\r\n かい布を浸し、よく絞ってか\r\n ら汚れを拭き取る\r\n2 汚れ落ちを確認後、洗剤分を\r\n 拭き取る\r\n3 仕上げに乾いた柔らかい布で、\r\n 水分を完全に拭き取る\r\nお手入れについて\r\n照明器具が汚れていると暗くなります。明るく安全に使用していただく\r\nため、定期的に清掃することをおすすめします。",
"summary": null
}
]
}
“content”: の中身が関係ない注意事項なので「電源の入れ方を教えて」にこたえることは無理なのが分かる。
LLMノードに実際に渡されたプロンプトデータ
イチゲをOFUSEで応援する(御質問でもOKです)Vプリカでのお支払いがおすすめです。
続いて、「LLM」ノードを開き、「最後の実行」 タグを確認します。ここには実際にLLM APIに送信された生の電文データが記録されています。
実際の「データ処理」の欄
{
"model_mode": "chat",
"prompts": [
{
"role": "system",
"text": "あなたはシーリングライトのお問い合わせ担当カスタマーサポートです。 以下の【参照資料】のみに基づいて、ユーザーの質問に丁寧かつ正確に回答してください。 参照資料に記
省略
ります。明るく安全に使用していただく\r\nため、定期的に清掃することをおすすめします。",
"files": []
},
{
"role": "user",
"text": "電源の入れ方を教えて\n\n",
"files": []
}
],
"usage": {
省略
},
"finish_reason": "stop",
"model_provider": "langgenius/openai/openai",
"model_name": "gpt-5-mini"
}
このログを見ると、RAGの正体がハッキリ分かります。
RAGとは特殊な魔法ではなく、「システムプロンプトの中に検索結果テキストを埋め込み、ユーザーの質問と一緒にLLMに渡しているだけ」 なのです。このJSON文をそのままコピーしてChatGPTやGeminiのブラウザ版に貼り付けても、同じような回答が返ってくるはずです。
経済的(単語検索)インデックスの場合、質問文の表現(「電源の入れ方」)とマニュアル内の表現(「壁スイッチで点灯」)が一致しないと、適切なテキストチャンクが取得できません。
例えば、質問文をマニュアルの単語に近づけて 「点灯方法は」 と変更すると、経済的モードでも正しく抽出できるようになります。
また、ナレッジには検索テストというのがあるので、そこで、ちゃんと引っ張ってこれるか事前にテストできます。
ナレッジのインデックスモードを「高品質・ハイブリッド」に変更する
質問の言い回し(表記ゆれ)に左右されず、文意(意味合い)で正しく資料を検索できるようにするため、Difyクラウド版の高性能インデックス機能にアップデートします。
インデックス方式の違い
- 経済的 (Economy): キーワード一致(単語検索)のみ。計算コストは非常に軽いが、表記ゆれや類義語に弱い。
- 高品質 (High Quality – Vector Search): Difyクラウドが提供する埋め込みモデル(Embedding Model)を使ってテキストを固定次元ベクトル化し、コサイン類似度等で「意味の近い文章」を検索。言葉が少し違っていても文意で検索可能。
- ハイブリッド検索 (Hybrid Search): 2026年現在の推奨構成。ベクトル検索(意味)とBM25等の全文検索(キーワード)を同時に実行し、さらに Rerank(再ランク)モデル でスコアを統合・再調整して上位チャンクを抽出する最高精度モード。
高品質・ハイブリッドインデックスでの再テスト
- ナレッジ画面で、新しく「作成」からします。既存のドキュメントは変更するとエラーになりました。
- 左メニューの「設定」から 高品質(検索設定: ベクトル検索 または ハイブリッド検索)に変更して保存。再インデックス処理を行います。(※Difyクラウド版では埋め込みモデルが初期提供されているため、面倒なモデル構築は不要です)
- LLMをOpenAIに変えた場合(埋め込みモデル欄に非互換と出てる場合)は「埋め込みモデル」をOpenAIのもの例えばtext-embedding-3-smallに変えて保存します。
- 再度、先ほど失敗した質問 「
電源の入れ方を教えて」 をテストしてみます。
しかし、まだうまくいかない。ナレッジのドキュメントを見ると「ドキュメントのインデックス作成に失敗しました」とあったので、「再試行」したら、今度はステータスにエラーと出てる。
しかたないので、削除して最初からやり直した。
すると今度は、「電源の入れ方」という表現から「壁スイッチによる点灯・切替手順」が書かれた適切な段落がベクトル空間上の類似度によって的確に選ばれ、マニュアルに基づいた完璧な回答が返ってくるようになりました。
その後GeminiにLLMと埋め込みモデルも戻し実験したら、うまくいきました。
個人メモ:LLMプロンプト構造とコンテキスト管理について
System / User / Assistant ロールの役割
- system: LLMに対する「人格」「前提知識」「回答ルール」「参照資料」を指定する最重要領域。
- user: エンドユーザーが入力した質問文。
- assistant: AIモデル自身が過去に生成した応答履歴。会話の文脈(コンテキスト)を維持するために過去ログを配列として渡す際に利用します。
トークン数とコスト、コンテキストサイズ
APIの利用料金や処理速度は、入力プロンプトと出力回答の合計トークン数によって決まります。
会話が長くなったり、巨大なドキュメントを丸ごとプロンプトに詰め込むと、あっという間にコンテキストサイズの上限に達したり、コストが膨れ上がってしまいます。
「ドキュメント全体を読ませるのではなく、検索によって必要な数KBの段落だけを削り出してプロンプトに注入する」
これこそが、RAGがトークン節約とハルシネーション防止において決定的に重要な理由です。
まとめ
Difyクラウド版の Chatflow とトレース機能を活用することで、ローカル環境構築の手間なく、RAG内部でどのようなデータが検索されLLMに受け渡されているかをブラウザ上で直感的に確認できます。
- 環境構築不要: Difyクラウド版(
cloud.dify.ai)と Google AI Studio の無料APIキーだけで、すぐに本格的なRAGボットが作成可能。 - RAGの基本概念: 「ドキュメント検索 + プロンプト自動合成 + LLM推論」の組み合わせ。
- インデックスの選択: 単純なキーワード検索(経済的)ではなく、Difyクラウドの「ベクトル検索」や「ハイブリッド検索」を利用することが実用化の鍵。
- 最新LLMの活用: 無料枠で非常に高速かつ高性能な Gemini 3 Flash を活用することで、高精度でレスポンスの早い説明書チャットボットが完成します。
ぜひDifyクラウド版 + Gemini 3 Flashの無料構成で、手元のマニュアルや資料を使ったオリジナルRAGシステムを試してみてください!
イチゲをOFUSEで応援する(御質問でもOKです)Vプリカでのお支払いがおすすめです。
MENTAやってます(ichige)