🤖

【Dify】エージェントノード機能を触ったときのメモ

に公開

エージェントノードとは

エージェントノードは、Difyチャットフローやワークフローにおいて自律的なツール呼び出しを実現するコンポーネントです。異なるエージェント推論戦略を統合することで、大規模言語モデル(LLM)が実行時に動的にツールを選択・実行し、多段階推論を可能にします。
https://docs.dify.ai/ja-jp/guides/workflow/node/agent

→ LLM自体が目的に対して自律的にツール選択して進行するノード

参考ドキュメント

https://docs.dify.ai/ja-jp/guides/workflow/node/agent

エージェントノードの作り方


ノードブロックからエージェント選択するだけ

設定項目

  • エージェンティック戦略
  • MODEL
  • TOOL LIST
  • INSTRUCITON
  • QUERY

エージェンティック戦略

マルチステップのツール呼び出しを実行するエージェントの戦略オプション。以下二つの戦略を選択できる。

  1. Function Calling
  2. ReAct

Function Calling

ユーザー指示を事前定義された関数/ツールにマッピングし、LLMが意図を識別→適切な関数を選択→パラメータ抽出という明確なツール呼び出しメカニズム
• 高精度: 明確なタスクに直結するツールを直接呼び出し
• 外部連携容易: API/ツールを関数化して統合可能
• 構造化出力: 下流ノード処理向けの定型化された情報出力

ReAct

思考(Reason)と行動(Act)を交互に繰り返す戦略です。LLMが現状分析→ツール選択→実行→結果評価のサイクルを問題解決まで継続します。
• 外部リソース活用: モデル単体では困難なタスクを実行可能
• 処理追跡性: 思考プロセスが可視化され説明性が向上
• 広範な適用: Q&A/情報検索/タスク実行など多様なシナリオに対応

Function CallingとReACTの違い

Function callingは、関数の処理内容とメタデータを事前に定義し、ユーザーのリクエストを受けて、必要に応じて利用すべき関数を教えてくれます。いわば必要な関数を「思考」して「行動」を推奨しています。
一方ReActは、「思考」「行動」「観察」の3ステップを繰り返して、最終的にタスクを達成しています。行動の結果から得た学びを思考に反映していくことで、新しい状況に対応することが理論的には可能です。ただ、ReActは最初のステップで誤った思考をしてしまうと、正しい道に戻るのはかなり厳しいという課題があります。
行動に外部ツールを設定することが多いので、Function callingと似た機能に見えますが、ReActは言語モデルの思考プロセスを明示的に表現することにあります。推論のステップが可視化されるので、言語モデルの判断根拠がわかりやすくなります。

http://aiweeklynews.com/archives/58143202.html#:~:text=Function callingは、関数の,を達成しています。

ツールリスト

呼び出すツールの設定項目。

Instruction:指示文

タスク目標とコンテキストを定義(Jinja構文で上位ノード変数参照可)

クエリ

ユーザー入力を受け取る変数

最大実効ステップ

処理サイクルの上限値

ハマったポイント

  • Function Callingだと動作するけどReAct選択すると以下の表示で動作しない
    • I am thinking about how to help you

    • →既知のバグっぽい

https://github.com/langgenius/dify/issues/18038

その他

  • Function CallingとReActが並列表記なの気になる
    • 呼び出し制御と振る舞いモデルは別ものな気が…
      • ツール選択とエージェントモデルがワンクリックで選択できるようになるとモック作成かなり楽になりそう

Discussion