> ## Documentation Index
> Fetch the complete documentation index at: https://dify-6c0370d8-add-new-agent.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# レッスン 4：カンニングペーパー（ナレッジ検索）

<Note> ⚠️ このドキュメントはAIによって自動翻訳されています。不正確な部分がある場合は、[英語版](/en/use-dify/tutorials/workflow-101/lesson-04)を参照してください。</Note>

前回までのレッスンで、AI メールアシスタントは基本的なメールを作成できるようになりました。しかし、もし顧客が具体的な料金プランや返金ポリシーについて質問した場合、AI はハルシネーション（Hallucination）を起こす可能性があります。つまり、自信満々にでたらめを言ってしまうということです。

AI のハルシネーションを防ぐにはどうすればよいでしょうか？答えは、カンニングペーパーを渡すことです。

## 検索拡張生成（RAG）とは

この技術の正式名称は RAG（Retrieval-Augmented Generation）です。これは、AI を一般的なレシピを暗記しているシェフから、カウンターに*専用のレシピブック*を置いているシェフに変えるようなものです。

これは 3 つのシンプルなステップで行われます。

**1. 検索（Retrieval）- レシピを探す**

ユーザーが質問すると、AI はあなたのレシピブック（アップロードしたファイル）をめくって、最も関連性の高いページを探します。

例：誰かがおばあちゃん特製のアップルパイを注文します。あなたはその特定のレシピページを探しに行きます。

**2. 拡張（Augmentation）- 材料を準備する**

AI はその特定のレシピを目の前に置き、記憶に頼る必要がないようにします。

例：レシピをカウンターに広げ、必要なリンゴとシナモンを正確に準備します。

**3. 生成（Generation）- 焼き上げる**

AI は見つけた事実のみに基づいて回答を作成します。

例：レシピ通りに正確にパイを焼き、市販の一般的なものではなく、おばあちゃんの味を再現します。

## ナレッジ検索ノード

これは、AI アシスタントの隣に参考資料の束を置くようなものです。ユーザーが質問すると、AI はまずこのカンニングペーパーをめくって最も関連性の高いページを探します。そして、見つけた内容とユーザーの元の質問を組み合わせて、最適な回答を考えます。

この実践では、ナレッジ検索ノードを使用して AI アシスタントに公式のカンニングペーパーを提供し、回答が常に事実に基づいたものになるようにします。

### ハンズオン 1：ナレッジベースを作成する

<Steps>
  <Step title="ライブラリに入る">
    上部ナビゲーションバーの**ナレッジ**をクリックし、**ナレッジを作成**をクリックします。

    <Frame>
      <img src="https://mintcdn.com/dify-6c0370d8-add-new-agent/xPDuMszrhAL7QmJ9/images/difyworkflow101-lesson04-createknowledge.png?fit=max&auto=format&n=xPDuMszrhAL7QmJ9&q=85&s=245a9024aad92e7001f59369541b16f9" alt="ナレッジを作成" width="1789" height="334" data-path="images/difyworkflow101-lesson04-createknowledge.png" />
    </Frame>

    Dify では Notion やウェブサイトから同期することもできますが、今日はデバイスからファイルをアップロードしましょう。[こちら](https://drive.google.com/file/d/1imExB0-rtwASbmKjg3zdu-FAqSSI7-7K/view)をクリックして、後でアップロードする Dify Intro をダウンロードしてください。
  </Step>

  <Step title="ファイルをアップロードする">
    **ファイルからインポート**をクリックします。次に、先ほどダウンロードしたファイルを選択してアップロードします。

    <Frame>
      <img src="https://mintcdn.com/dify-6c0370d8-add-new-agent/xPDuMszrhAL7QmJ9/images/difyworkflow101-lesson04-importfromfile.png?fit=max&auto=format&n=xPDuMszrhAL7QmJ9&q=85&s=c2003da56c75d233ab89e1d6f6cbdb5f" alt="ファイルからインポート" width="1686" height="894" data-path="images/difyworkflow101-lesson04-importfromfile.png" />
    </Frame>
  </Step>

  <Step title="テキスト分割のステップ">
    関連性の高いチャンクは、AI アプリケーションが正確で包括的な回答を提供するために不可欠です。長い本を想像してみてください。500 ページの中から 1 つの文を見つけるのは大変です。Dify は本をさまざまなナレッジカードに分割し、正しい答えをより速く見つけられるようにします。

    **チャンク構造**

    ここでは、Dify が長いテキストを自動的に小さく検索しやすいチャンクに分割します。ここでは通用モードのままにしておきましょう。

    <Frame>
      <img src="https://mintcdn.com/dify-6c0370d8-add-new-agent/xPDuMszrhAL7QmJ9/images/difyworkflow101-lesson04-chunkstructure.png?fit=max&auto=format&n=xPDuMszrhAL7QmJ9&q=85&s=63c362918ce9d3160538df8ee779d6df" alt="チャンク構造" width="846" height="429" data-path="images/difyworkflow101-lesson04-chunkstructure.png" />
    </Frame>

    **インデックス方法**

    * **高品質**：LLM モデルを使用してドキュメントを処理し、より正確な検索を実現して、LLM が高品質な回答を生成できるようにします。
    * **エコノミー**：チャンクごとに 10 個のキーワードを使用して検索を行います。トークンは消費されませんが、検索精度は低下します。

    <Frame>
      <img src="https://mintcdn.com/dify-6c0370d8-add-new-agent/xPDuMszrhAL7QmJ9/images/difyworkflow101-lesson04-indexmethod.png?fit=max&auto=format&n=xPDuMszrhAL7QmJ9&q=85&s=0cda9e8c6432696438a5d068e1ccd5b9" alt="インデックス方法" width="846" height="156" data-path="images/difyworkflow101-lesson04-indexmethod.png" />
    </Frame>
  </Step>

  <Step title="検索設定">
    ドキュメントの処理が完了したら、検索設定の最終確認を行います。ここでは、Dify が情報を検索する方法を設定できます。

    エコノミーモードでは、転置インデックスのみが利用可能です。

    <Frame>
      <img src="https://mintcdn.com/dify-6c0370d8-add-new-agent/F5C0OTz7-PsXkv0x/images/difyworkflow101-lesson04-retrievalsetting.png?fit=max&auto=format&n=F5C0OTz7-PsXkv0x&q=85&s=6b850a3c10e65aff1169304faab4ab15" alt="検索設定" width="846" height="249" data-path="images/difyworkflow101-lesson04-retrievalsetting.png" />
    </Frame>

    * **転置インデックス**

      これは Dify が使用するデフォルトの構造です。本の巻末にある索引のようなもので、重要な用語が一覧表示され、それらがどのページに出現するかを Dify に正確に伝えます。

      これにより、Dify は最初から本全体を読むのではなく、キーワードに基づいて適切なナレッジカードに即座にジャンプできます。
    * **Top K**

      3 に設定されたスライダーが表示されます。これは Dify に次のように指示しています：ユーザーが質問したとき、レシピブックから最も関連性の高い上位 3 枚のナレッジカードを見つけて AI に表示せよ。

      値を高く設定すると、AI はより多くのコンテキストを読むことができますが、高すぎると情報過多になる可能性があります。

    今のところ、デフォルト設定のままにしておきましょう。現在のニーズに十分対応できる設定になっています。

    <Frame>
      <img src="https://mintcdn.com/dify-6c0370d8-add-new-agent/xPDuMszrhAL7QmJ9/images/difyworkflow101-lesson04-documentprocessing.png?fit=max&auto=format&n=xPDuMszrhAL7QmJ9&q=85&s=a0549b0e09e484c5f86a4083b7447b55" alt="ドキュメント処理" width="846" height="913" data-path="images/difyworkflow101-lesson04-documentprocessing.png" />
    </Frame>
  </Step>

  <Step title="保存して処理する">
    **保存して処理**をクリックします。ナレッジベースの準備が完了しました。
  </Step>
</Steps>

<Check>
  **素晴らしい！**

  最初のナレッジベースの作成に成功しました。次に、このナレッジベースを使って AI メールアシスタントをアップグレードしましょう。
</Check>

### ハンズオン 2：ナレッジ検索ノードを追加する

<Steps>
  <Step title="ノードを追加する">
    1. メールアシスタントのワークフローに戻ります。
    2. 開始ノードと LLM ノードの間の線にカーソルを合わせます。
    3. \*\*プラス（+）\*\*アイコンをクリックし、**ナレッジ検索**ノードを選択します。

    <Frame>
      <img src="https://mintcdn.com/dify-6c0370d8-add-new-agent/xPDuMszrhAL7QmJ9/images/difyworkflow101-lesson04-addknowledgetrievalnode.png?fit=max&auto=format&n=xPDuMszrhAL7QmJ9&q=85&s=d118a85b3a4f7875b686062d60e9e147" alt="ナレッジ検索ノードを追加" width="1090" height="600" data-path="images/difyworkflow101-lesson04-addknowledgetrievalnode.png" />
    </Frame>
  </Step>

  <Step title="ナレッジベースを接続する">
    1. ノードをクリックし、右側のパネルに移動します。
    2. **ナレッジ**の横にある\*\*プラス（+）\*\*ボタンをクリックしてナレッジを追加します。

           <Frame>
             <img src="https://mintcdn.com/dify-6c0370d8-add-new-agent/xPDuMszrhAL7QmJ9/images/difyworkflow101-lesson04-addknowledge.png?fit=max&auto=format&n=xPDuMszrhAL7QmJ9&q=85&s=e3604d95587be580dbed3ebca9a6d47d" alt="ナレッジを追加" width="407" height="289" data-path="images/difyworkflow101-lesson04-addknowledge.png" />
           </Frame>
    3. **What's Dify** を選択し、**追加**をクリックします。

           <Frame>
             <img src="https://mintcdn.com/dify-6c0370d8-add-new-agent/F5C0OTz7-PsXkv0x/images/difyworkflow101-lesson04-selectknowledge.png?fit=max&auto=format&n=F5C0OTz7-PsXkv0x&q=85&s=29b06e201d8574bf412d46c4fb2d0bfc" alt="ナレッジを選択" width="504" height="289" data-path="images/difyworkflow101-lesson04-selectknowledge.png" />
           </Frame>
  </Step>

  <Step title="クエリテキストを設定する">
    ナレッジベースの準備ができました。では、AI がナレッジベースを参照してメールの回答を検索するようにするにはどうすればよいでしょうか？

    パネルにとどまり、上部の**クエリテキスト**に移動して、`email_content` を選択します。

    これにより、AI に次のように指示しています：\*顧客のメッセージを検索キーワードとして使用し、レシピブックをめくって一致する情報を見つけよ。\*クエリがなければ、AI は閉じた本を見つめているだけです。

    <Frame>
      <img src="https://mintcdn.com/dify-6c0370d8-add-new-agent/F5C0OTz7-PsXkv0x/images/difyworkflow101-lesson04-querytext.png?fit=max&auto=format&n=F5C0OTz7-PsXkv0x&q=85&s=ae5cc5647aeb95b5bec4c1ae82cd86d0" alt="クエリテキスト" width="408" height="355" data-path="images/difyworkflow101-lesson04-querytext.png" />
    </Frame>
  </Step>
</Steps>

このようにして、メールアシスタントは顧客の元のメールを検索キーワードとして使用し、ナレッジベースから最も関連性の高い回答を見つけます。

### ハンズオン 3：メールアシスタントをアップグレードする

ナレッジベースの準備ができました。次に、LLM ノードに返信を生成する前にナレッジをコンテキストとして実際に読むよう指示する必要があります。

<Steps>
  <Step title="コンテキストを追加する">
    1. **LLM ノード**をクリックします。**コンテキスト**という新しいセクションが表示されます。
    2. それをクリックし、ナレッジ検索ノードの **result** を選択します。

           <Frame>
             <img src="https://mintcdn.com/dify-6c0370d8-add-new-agent/xPDuMszrhAL7QmJ9/images/difyworkflow101-lesson04-addcontext.png?fit=max&auto=format&n=xPDuMszrhAL7QmJ9&q=85&s=12c89846ff5cbd704f10a4be37af83d2" alt="コンテキストを追加" width="401" height="408" data-path="images/difyworkflow101-lesson04-addcontext.png" />
           </Frame>
  </Step>

  <Step title="プロンプトを更新する">
    AI にコンテキストに基づいて返信を生成するよう指示する必要があります。

    **System** に、追加の要件として **Generate response based on** `/` と入力し、**Context** を選択します。

    <Frame>
      <img src="https://mintcdn.com/dify-6c0370d8-add-new-agent/F5C0OTz7-PsXkv0x/images/difyworkflow101-lesson04-updateprompt.png?fit=max&auto=format&n=F5C0OTz7-PsXkv0x&q=85&s=14220dd1ce20d8f273b1ff84a228072c" alt="プロンプトを更新" width="1214" height="474" data-path="images/difyworkflow101-lesson04-updateprompt.png" />
    </Frame>
  </Step>
</Steps>

**お疲れ様でした！** 最も難しい部分を完了しました。これで、メールアシスタントは返信を生成する際に参照できるナレッジベースを持っています。どのように動作するか見てみましょう。

以下のサンプルテキストを使って自由にテストしてみてください。

<CodeGroup>
  ```text テスト用サンプルメール theme={null}
  顧客名：Amanda

  メール原文：
  Hi,

  What does the name 'Dify' actually stand for, and what can it do for my business?

  Best regards,
  Amanda
  ```
</CodeGroup>

結果を確認すると、一般的な推測ではなく、AI がナレッジベースを参照して Dify の意味を説明していることがわかります。

<Frame>
  <img src="https://mintcdn.com/dify-6c0370d8-add-new-agent/F5C0OTz7-PsXkv0x/images/difyworkflow101-lesson04-testresult.png?fit=max&auto=format&n=F5C0OTz7-PsXkv0x&q=85&s=6c5db19545b8e144784152210aba1f0b" alt="テスト結果" width="401" height="657" data-path="images/difyworkflow101-lesson04-testresult.png" />
</Frame>

## ミニチャレンジ

1. 顧客がナレッジベースにない質問をした場合、どうなりますか？
2. ナレッジベースとしてどのような情報をアップロードできますか？
3. チャンク構造、インデックス方法、検索設定を探索してみましょう。
