- DIFY
- 自動化
【AI】Dify で「道具」を使えるエージェントを構築してみた
ご無沙汰しております。IT 基盤本部兼生成 AI 推進センタの林です。
突然ですが皆さんは普段、生成 AI はどのように使われていますか?
画像生成、調べもの、エトセトラと用途は様々です。何らかのインプットを得るために使う方は多いかと思います。
今日はそんな生成 AI に「仕事」をおこなってもらう話です。
Dify
Dify (ディフィ) というプロジェクトが GitHub で公開 されています。今回はこの Dify を用いて「仕事」をおこなえる AI を構築します。
Dify は、生成 AI を使ったチャットボットやエージェントを簡単に構築できるプラットフォームです。世の中には様々なノーコード、ローコード ツールがありますが、そこに生成 AI を組み込めるようにしたプラットフォームと捉えるとイメージしやすいと思います。

Dify は、Docker コンテナを動かせる環境があれば簡単に構築できます。

Dify 自体は LLM (Large Language Model, 対話型 AI のコア) の機能は持っておりません。 あくまで LLM などの AI モデルを利用したエージェントの構築プラットフォームです。LLM は別途なんらかの契約で用意してあげる必要があります。用意した LLM を Dify に登録すれば環境作成は完了です。
この記事では、我々が生成 AI 関連の検証などで契約している Azure 上にデプロイした GPT モデルを利用します。Azure 上のモデル以外にも OpenAI の提供する LLM など様々なモデルを活用することができます。
受け答えするだけじゃない AI

LLM をはじめとする生成 AI については、冒頭でも述べました通りコンテンツの生成や情報の取りまとめなど、我々が何らかのインプットを得るための使い方をされている方が多いのではないかと思います。実際に我々 生成 AI 推進センタが社内に提供している Excellia は現状そのような使い方に特化したアプリケーションになっています。
しかし世はまさに AI エージェント時代。
実は AI が人間に代わってお仕事をしてくれる時代を迎えようとしています。
仕事をする AI?
AI が人間の代わりにお仕事をしてくれる、とはいったいどういうことなのか? なかなかイメージが湧かない方も多いかと思います。

例えば、生成 AI サービスで時事ネタについて聞いたとします。AI は学習の中で習得している知識であれば、その知識に基づいて回答が可能ですが、時事情報などの最新情報は学習した知識には当然ながら含まれておりません。このとき、AI はインターネットを検索します。皆さんもニュースについてなにかコメントを求められたとき、ブラウザで Google を開いて、同様のことをするでしょう。
つまり、このとき AI は「Web 検索」という道具を使っているのです。AI は裏側で 事前に「君はこういう道具が使えるよ!呼び出し方はこうだよ!」という情報がインプット されており、ユーザーからの指示内容で必要と判断される道具を呼び出して行使することができます。
ちなみに 𝕏 (旧 Twitter) に組み込まれている AI "Grok" に使える道具を聞いてみた結果はこんな感じです。Grok はこの辺思いのほか正直に教えてくれるので拍子抜けですがおそらくほかのサービスでは教えてくれませんね (^^;

上記の画像によりますと、Grok は Web 検索のほかに Python コードの実行や連携先サービスである 𝕏 上での高度な検索機能が呼び出せるようです。
このような仕組みを使えば、理論上さまざまな道具が使えるようになると思いませんか?
道具を使う AI
Dify では、道具を使える AI エージェントを作成することができます。

テンプレートのような形でストアで公開されているものから、AI エージェント構築者が自ら作成した道具まで、さまざまな道具を AI に与えることができるのです。
例えば、WordPress の REST API を叩くような道具を用意してあげれば、このブログに記事を自動投稿させることすら可能でしょう。AI に関するニュースを毎日 Web 上から収集し、ヘッドライン的な記事にまとめてくれる AI エージェントを日次バッチ的に動かしてみるのも面白いかもしれません。
AI にクラウド製品「Prisma Access」を操作させる
今回は、AI に Palo Alto Networks 社の「Prisma Access」というサービスを操作させます。
Prisma Access (プリズマ・アクセス) は、Palo Alto Networks が提供するクラウド型のセキュリティサービスです。社外や自宅からでも、安全に社内システムやインターネットを利用できるようにします。
いわゆるファイアウォールのような機能を提供してくれるサービスです。
設定を取得・変更させよう
Prisma Access は Web サイト (URL) をカテゴライズして、カテゴリごとにブロックあるいは許可を設定することができます。

UI 上でももちろん操作が可能ですが、API 経由でこのカテゴリ設定に対して変更操作を行うことが可能です。この API を利用して AI のための道具を Dify 上に構築します。
Prisma Access の API による config の変更はざっくり次のようなステップを踏む必要があります。
- 認証: 必要なクライアント情報を認証用エンドポイントに送信し、一定時間使えるアクセス トークン (API 利用のためのカギのような存在) を取得する
- 現状確認: API 経由で現在の設定を確認する
- 変更: 新しい設定内容を API 経由で送信する
- 適用: 新しい設定内容を送信した後、適用操作を行うことで反映させる
これらを行うための道具を用意してあげる必要があります。

完成イメージは上記の図のとおりです。Prisma Access の各種 API エンドポイントに対して AI 用の道具を用意し、人間からの指示をもとにタスクを完遂できるようにします。
道具作成
道具、つまり API を叩くための仕組みは Dify 上に構築します。細かい説明は省略しますが、Dify 上に「ワークフロー」というものを作成し、この中で API を HTTP で叩けるようにしてあげます。

ワークフローは、インプット (パラメーター) とアウトプットを設定することができます。例えば一番最初の認証操作では、クライアント情報をインプットとして受け取り、取得したアクセス トークンをアウトプットとして出力させます。
作成したワークフローは、「ツール」として同じ Dify プラットフォーム内で公開することができます (Web 上に公開という意味ではないのでご安心ください) 。その際、そのツールで何ができるのか、インプット (パラメーター) としてどのような値が設定でき、それぞれがどういう意味合いなのかを指定してあげることができます。

実はこの登録内容が重要で、これはのちに構築する AI エージェントの LLM にも読まれます。AI が道具を駆使する際の説明書になるわけです。ここの入力した内容を呼び出し側の AI エージェントが確認し、呼び出すタイミングやパラメーターなどを決定します。
この調子で必要な API をコールするためのツール (つまり道具) を 1 つずつ、作ってあげます。この作業が手間なので、できればここも AI にやってほしい。(まだそうはなっておらず)
補足。AI 関連ある程度触れている方だと「これって MCP なの?」という疑問が湧いてくるかと思いますが、今回は MCP は使っておりません。しかし Dify は MCP にも対応しており、今回作成したワークフローと同様に MCP で公開されている道具も AI エージェントに使わせることができます。お察しの通り、仕組み的には MCP にかなり近いです。
エージェント作成
道具を作成しきったら、今度はユーザーからの指示に基づいてその道具たちを利用する AI エージェントを構築してあげます。道具側は API をコールする都合上、少しばかりテクニカルな作業になっておりましたが、こちらのエージェント側は基本的に AI に対する指示と使える道具の登録が主な作業になるので、さっきよりは楽しい作業。

このように AI に対する指示と使える道具の設定をしてあげます。認証時 (アクセス トークンの取得操作) で必要となるクライアント情報などは、道具のパラメーターとして固定値を設定してあげますが、ほかの後続の各操作の際に必要となるアクセス トークンなどは、AI が先ほど道具側に書いたような説明を見て、自動的に逐次設定してくれます。
認証操作で得たアクセス トークンをそのまま後続操作のツール呼び出し時にはパラメーターとして連携してくれるということです。
完成
さて、道具とそれを利用する AI エージェントの構築が完了しましたのでこれを動かしてみましょう。


AI がユーザーからの指示を解釈し、どの道具を使えばよいかを自動的に判断してタスクを実行してくれています。特に最初の操作の際には、操作を実際に行う前に特段指示していない認証操作を自発的におこなってくれているのが見えています。
自然言語で Prisma Access の URL カテゴリの設定を変更する AI エージェントが完成しました。
まとめ
今回、Prisma Access というクラウド製品を自然言語で操作する AI エージェントを作成できました。API で操作が行える製品であれば、基本的に同じようなステップでエージェントを構築することが理論上可能です。
一つ懸念があるとすると、認証操作時に取得できるトークンやキーがサービスによっては膨大な量になってしまうこと。この場合はコンテキストで保持させるのが難しくなってくるため別の仕組みを考える必要がありそうです。
今回 AI エージェントを構築する中で苦労したのは API の仕様の理解です。逆に言うと API の仕様さえわかってしまえば、そこから先は今回は比較的スムーズでした。ServiceNow なんかと連携して、ユーザーの問い合わせから自動的に何らかの操作を行えるようにできれば面白いかもしれませんね。
最後になりますが、本検証にご協力いただいております SASE 検証チームの皆様、ありがとうございます。
今後もいろいろな道具を使えるようにエージェントを育てていきます。ありがとうございました。