メインコンテンツへスキップ
⚠️ このドキュメントはAIによって自動翻訳されています。不正確な部分がある場合は、英語版を参照してください。
ここまでのレッスンで、メールアシスタントに施してきたアップグレードを振り返ってみましょう。
  • 調べる力を習得 —— ナレッジベースを検索できるようになりました
  • 判断する力を習得 —— 条件分岐で意思決定ができるようになりました
  • 複数タスクの処理力を習得 —— イテレーションで複数の質問を処理できるようになりました
  • ツールの活用力を習得 —— Google 検索でインターネットにアクセスできるようになりました
お気づきかもしれませんが、ワークフローはもはや単純な一直線(ステップ 1 → ステップ 2 → ステップ 3)ではなくなっています。 分析し、判断し、さまざまな能力を呼び出して問題を解決するシステムへと進化しています。この高度なパターンこそが、エージェンティックワークフローと呼ばれるものです。

エージェンティックワークフロー

エージェンティックワークフローは、単なる「入力 > 処理 > 出力」ではありません。 思考、計画、ツールの使用、結果に基づく調整といった一連のステップを含みます。AI を単純な実行者(指示に従うだけ)から、自律的に問題を解決するインテリジェントなエージェントへと変貌させます。

エージェントストラテジー

エージェントをよりスマートに動作させるために、研究者たちはさまざまなストラテジーを設計しました。これらはエージェントを導く異なる思考モードのようなものです。
  • ReAct (Reason + Act) 考えてから行動するアプローチです。エージェントは思考し(何をすべきか?)、行動し(ツールを呼び出す)、結果を観察し、再び思考します。タスクが完了するまでこのループを繰り返します。
  • Plan-and-Execute まず全体の計画を立て、それをステップごとに実行します。
  • Chain of Thought (CoT) 回答を出す前に推論のステップを書き出すことで、精度を向上させます。
  • Self-Correction 自身の出力をチェックし、間違いを修正します。
  • Memory エージェントに短期記憶や長期記憶を持たせることで、過去の会話や重要な情報を思い出せるようになり、より一貫性のある、パーソナライズされた応答が可能になります。
レッスン 7 では、ナレッジ検索 → LLM で判断 → If/Else → 検索という流れを手動で構築しました。動作はしましたが、構築が複雑でした。 もっと簡単な方法はないでしょうか?あります。それがこちらです。

エージェントノード

エージェントノードは、高度にパッケージ化されたインテリジェントなユニットです。 指示を通じて目標(Goal)を設定し、必要となりそうなツール(Tools)を提供するだけで、内部で自律的に思考、計画、選択、ツール呼び出しを行います(選択したエージェントストラテジー(例:ReAct)やモデルの Function Calling 機能を活用)。設定した目標が達成されるまで、このプロセスを続けます。 Dify では、これにより複雑なエージェンティックワークフローの構築プロセスが大幅に簡素化されます。

ハンズオン 1:エージェントノードで構築する

目標は、イテレーションループ内の複雑な手動ロジックを、1 つのスマートなエージェントノードに置き換えることです。
1

イテレーションを整理する

イテレーションのサブプロセスに移動します。ナレッジ検索ノードを残し、それ以外のノードを削除します。
イテレーション
2

エージェントノードを追加する

ナレッジ検索ノードの直後にエージェントノードを追加します。
エージェントノードを追加
3

エージェントストラテジーをインストールする

まだ使用したことがないため、マーケットプレイスからストラテジーをインストールする必要があります。エージェントノードをクリックします。右側のパネルで「Agent Strategy」を探し、「Find more in Marketplace」をクリックします。
エージェントストラテジーを検索
4

エージェントストラテジーを選択する

マーケットプレイスで Dify Agent Strategy を見つけてインストールします。
エージェントストラテジーを選択
5

ReAct を選択する

ワークフローに戻り(必要に応じてページを更新)、Agent Strategy の下で ReAct を選択します。
ReAct を選択
なぜ ReAct を選ぶのか?ReAct(Reason + Act)は、人間の問題解決を模倣した「思考 → 行動 → 確認」のループを使うストラテジーです。
  1. Reason:エージェントが*次に何をすべきか?*を考えます(例:ナレッジベースを確認する)。
  2. Act:そのアクションを実行します。
  3. Observe:結果を確認します。回答が見つからなければ、サイクルを繰り返します(例:Google で検索する必要がある)。
この「考えながら行動する」アプローチは、次のステップが前のステップの結果に依存する複雑なタスクに最適です。
6

モデルを選択する

ReAct は思考ストラテジーですが、実際にアクション部分を実行するには、AI に適切な「物理的」スキルが必要です。これが Function Calling と呼ばれるものです。Function Calling をサポートするモデルを選択します。ここでは gpt-5 を選択します。
モデルを選択
なぜ Function Calling が必要なのか?エージェントノードのコア機能の 1 つは、自律的にツールを呼び出すことです。Function Calling は、モデルが提供されたツール(Google 検索など)をいつ、どのように使用するかを理解するための重要な技術です。モデルがこの機能をサポートしていない場合、エージェントはツールと効果的にやり取りできず、自律的な意思決定能力のほとんどを失ってしまいます。
7

ツールを追加する

エージェントノードをクリックします。ツールリストのプラス(+)アイコンをクリックし、Google Search を選択します。
ツールを追加
8

指示を追加する

提供するツールとコンテキストを使って何をすべきかを、エージェントに具体的に伝える必要があります。以下の指示を Instruction フィールドに貼り付けてください。
Goal: Answer user questions about Dify products.

Steps:
1. I have provided a relevant internal knowledge base retrieval result. First, judge if this result can fully answer the user's questions.
2. If the context clearly answers it, generate the final answer based on the context.
3. If the answer is insufficient or irrelevant, use the Google Search tool to find the latest information and generate the answer based on search results.

Requirement: Keep the final answer concise and accurate.
指示を追加
9

コンテキストとクエリ

ここでの設定は、エージェントがデータを参照するために非常に重要です。
  • コンテキスト:ナレッジ検索ノードから Knowledge Retrieval / (x) result Array[Object] を選択します(これによりナレッジベースの内容がエージェントに渡されます)。
  • クエリ:イテレーションノードから Iteration/{x} item を選択します。
なぜ元の email_content ではなく item を使うのか?パラメータ抽出器を使って email_content から質問リスト(question_list)を抽出したことを思い出してください。イテレーションノードはこのリストを 1 つずつ処理しており、item は現在処理中の個別の質問を表しています。item をクエリ入力として使用することで、エージェントが現在のタスクに集中でき、意思決定とアクションの精度が向上します。
コンテキストとクエリ
10

イテレーションの出力を設定する

出力変数として Agent/{x}text String をクリックします。
イテレーション出力を設定
🎉 イテレーションノードのアップグレードが完了しました。
イテレーションノードは回答のリストを生成するため、それらを 1 つのメールにまとめ直す必要があります。

ハンズオン 2:最終組み立て

1

最終編集者(LLM)

  1. イテレーションノードの後に LLM ノードを追加します。
  2. ノードをクリックし、システムにプロンプトを入力します。以下のプロンプトを参考にするか、自由に編集してください。
    Combine all answers for the original email.
    Write a complete, clear, and friendly reply to the customer.
    Signature: Anne
    
  3. User Message に answers、email content、customer name をそれぞれ対応する変数に置き換えて追加します。現在の LLM ノードは以下のようになります。
    最終 LLM
2

出力ノードを追加する

出力変数を LLM の text に設定し、email_reply と名付けます。
出力ノードを追加
最終的なワークフローがこちらです。
最終ワークフロー
テスト実行をクリックします。さまざまな質問を混ぜて入力してみてください。エージェントノードがコンテキストを使うタイミングと Google 検索を使うタイミングをどのように自律的に判断するか観察しましょう。

ミニチャレンジ

  1. エージェントノードを使ってイテレーションループ全体を置き換えることはできるでしょうか?質問リストを一度にまとめて処理するプロンプトをどのように設計しますか?
  2. エージェントのコンテキストフィールドに他にどのような情報を与えれば、より良い判断ができるようになるでしょうか?