弊社は生成AIを強みとするベトナムオフショア開発・ラボ型開発や、生成AIコンサルティングなどのサービスを提供しており、最近はありがたいことに生成AIと連携したシステム開発のご依頼を数多く頂いています。
今回は、DifyのワークフローをDifyのエージェントから呼んでみる、ということをやってみました。「え、なんのために・・・?」と思われるかもしれませんが、やってみたら結構便利そうだったので紹介します!
Difyとは
Difyとは、プログラムを書かずに簡単にAIアプリを作成できる超便利ツールです。
Difyについては以下の記事をご覧ください!
- Difyってなに?という方:DifyでSEO記事作成を試してみる
- Difyでワークフローの作り方:Difyのワークフローを使って今度こそSEO記事を作成する【2024年6月更新】
ワークフローを別のワークフローやエージェントで使用する機能自体は結構前のバージョンからあったので、ローカルや自社サーバで運用している方も、特にバージョンアップは必要ないと思います。
今回やりたかったこと
- 与えたURLをFirecrawlでクローリングして、そのサイトの20ページ分の情報をごそっと取得する。
- その内容を元にX(Twitter)への投稿案を複数パターンLLMで出力する
- 投稿案から1つ選んで、その投稿内容に即した画像をDall-e3で生成する
とりあえずテスト的に上記のようなSNSへの投稿自動生成的なものを作ってみようと思ったのですが、ステップ3で「選ぶ」という操作が必要なため、ワークフローで一気に画像生成までやり切ることができません。
したがって、ステップ1−2で一度処理を切り、その部分をワークフロー化し、3をエージェントで作成するという方法を選びました。
このような事情から、DifyのワークフローをDifyのエージェントから呼ぶということが必要になりました。
ワークフローを作成する
ワークフローの全体像はこのような感じです。
URLを入力して、そのサイトの2階層分のテキスト情報を収集して、Xの投稿案を複数作成するという処理です。
Step.1 ユーザー入力
投稿でプロモーションをしたい企業のサイトや、サービスサイトのURLなどをここで入力します。
Step.2 与えられたサイトをクローリングして情報を取得
本当はここでFirecrawlを使用したかったのですが、「Failed to invoke tool: ‘base_url’」というエラーが出て原因がわからなかったため、同様の機能を使用できる「Web Scraper & Crawler」というツール(Spider API)を使用しました。
Step.3 Gemini 1.5 Proでクローリングした内容から投稿案を作成
Step.2で取得したサイト内の2階層までのテキストをすべてLLMに突っ込んで投稿内容をLLMに作成させるという乱暴なことをやっているため、コンテキストウィンドウの大きなGemini 1.5 Proを使用しました。
とりあえずテスト的に作ったシンプルなワークフローなので、工夫した点といえばこれくらいです。
Difyはプログラムを書かなくてもワークフローやチャットBotを作成できる便利なツールですが、それでも業務に使用できるものを作ろうとするとDifyの仕様の理解や、生成AI関連の知識などが求められます。
そういうの面倒だからまるっと任せてしまいたい、というご要望ございましたら、豊富な実績のある弊社にぜひお問い合わせください!
ワークフローをツール化する
さて、ここからが本番です。
Difyでは、作成したワークフローをツール化して、別のワークフローやエージェントで使用できる仕組みが提供されています。今回はこれを使ってみました。
ワークフローを公開ステータスにする
ワークフロー作成画面の右上から、公開ステータスにしておきます。
ワークフローのツール化設定をする
同じメニューの一番下、「Workflow as Tool」のConfigureボタンをクリックします。
するとポップアップが開くので、赤枠内でこのワークフローに名前をつけます。どういう機能を持つワークフローなのかを端的に表すものがいいです。
名前をつけたら右下のSaveボタンを押して、設定は完了です。簡単!
ワークフローを呼ぶエージェントを作成する
次に、上記で作成した、ツール化したワークフローを呼ぶエージェントを作成します。
冒頭述べたように、このエージェントでは、X投稿案のテキストから画像を生成するという処理を行います。
先ほど作成したワークフローをツールとして追加する
エージェント設定画面で「Tool」欄の「Add」ボタンを押します。
するとツールを選択するポップアップが表示されるので、「Workflow」を選択します。すると、先程作成したワークフローが表示されているはずなので、それを選択します。
このエージェントでは画像生成が最終出力なので、画像生成AIとしてDall-e3もついでに追加しておきます。
ツールを使って処理してほしい旨を指示に記載する
このエージェントでは、まず先程のワークフローに処理をさせて、ユーザーに入力させるURLをクローリングし、投稿案を作成してもらう必要があります。
その処理はツールで追加したワークフローでやってね、という旨と、このチャットに入力される変数とツールであるワークフローへの入力の対応を明記しました。これだけでエージェントが正しく処理してくれました。賢い!
エージェントを実行してみる
あとはちゃんとプロンプトを書いて、エージェントとチャットしてみるだけです。まずは対象サイトのURLを入力して会話を開始します。
すると、エージェントがワークフローを正しく使用してなにかの処理をやっているのがわかります。
ワークフローの処理が終わると、このエージェントは投稿案のうちどれがいいか聞いてきます。1つ選ぶと、今度は適切にDall-e3を使用して画像生成しました!
これ便利なの?
このように簡単にDify上で作成したワークフローを、別のワークフローやエージェントで呼べることがわかりました。動きとしてはとてもおもしろいです。
ただ、一つの疑問が湧いて来ると思います。「これは一体どのような用途で使えるのか・・・?」
私の意見としては以下のように結構使いようはあるんじゃないかと思います。
- 処理の部品化:小さい処理の塊をワークフローで作っておいてツール化しておき、再利用できるようにしておく。あとは、なにか作りたいものができたときに、ツールを組み合わせて作るという方法。恐らくこれが一番便利だと思います。
- ワークフローの処理を一度止めたい場合:今回のように一度ユーザーの入力を求めたい場合は、やりたいことの最後までを一気に処理することができません。その場合は数珠つなぎにせざるを得ないので、今回のようにツール化するのが簡単な方法です。