ノーコード/ローコードでAIアプリを構築できるオープンソースプラットフォーム「Dify」を活用して、AIワークフローを構築する本連載。第2回は、前回作成したワークフローをツールとして公開し、新しいチャットフローでそのツールを利用する方法を解説します。
この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。
連載:生成AI×ノーコードでつくる!Difyワークフロー構築入門
本連載のサンプルコード(DSLのYAMLファイル)はGitHubで公開しています。必要な場合はこちらからダウンロードしてみてください。
前回はWebページやPDFをスクレイピングし、その内容を前処理してから要約するワークフローを作成しました。今回は、そのワークフローをツールとして公開し、新しいチャットフローで活用する方法を解説します。これを応用することで、さまざまな対話型のAIアプリケーションを構築できるようになります。
なお、本連載で作成したフローのDify構成ファイル(DSLのYAMLファイル)は、GitHubリポジトリで公開していますので、参考にしてください。
Difyのワークフローは、他のワークフローやチャットフローから「ツール」として利用できます。これにより同じ処理を何度も作成する手間が省け、効率的にAIアプリを構築できます。では早速、前回作成したワークフローをツールとして公開していきましょう。
前回作成したワークフロー「Webページ要約」では、複数のLLMノードを使う例を示しましたが、Difyのワークフローをツールとして利用する場合、LLMノードを使うほどコスト(金額も時間も)が増加します。そこで、前処理を除き、要約処理を1つのLLMノードで行うようにワークフローを微調整します。また、LLMのモデルもより低廉なものに変更します。
前回作成したワークフロー「Webページ要約」を開きます。
1つ目のLLMノード「LLM 前処理」を選択して削除し、Webスクレイピングノードの出力を直接2つ目のLLMノード「LLM 要約」に接続します(図1)。
次に「LLM 要約」ノードを選択し、「AI モデル」を「gpt-4o-mini」に変更します。プロンプト本文は前回と同じ内容のままにしておきます(図2)。
「gpt-4o-mini」モデルは、初期設定で使用していた「gpt-4o」モデルに比べ複雑なタスクには向かないものの、高速な動作と低コストが特長です。OpenAI APIの料金ページによると、「gpt-4o」が出力100万トークン当たり10ドルに対し、「gpt-4o-mini」は0.6ドルと、16分の1の価格になっています(2026年1月時点)。今回のような比較的シンプルな要約タスクであれば、「gpt-4o-mini」でも十分な結果が得られるでしょう。
変更できたら、画面右上の「公開する」ボタンから「更新を公開」ボタンをクリックしてワークフローを更新しておきます。画面右上に「アクションが成功しました」というメッセージが表示されたら更新完了です。
オンライン版のDifyでは既定でOpenAIが「モデルプロバイダー」として登録されていますが、モデルのバリエーションが多いため、LLMノードでモデルの選択を間違えないよう注意してください。o1系など推論型のモデルや「gpt-4」などの(「.1」や「o」が付かない)旧モデルは高コストな傾向がありますので、特に注意が必要です。
誤設定を防ぐため、設定画面の「モデルプロバイダー」から、不要なモデルをオフにしておくことをおすすめします(図3)。
なお、執筆時点では「gpt-5」系モデルもDifyで利用可能になっています。例えば「gpt-5-nano」は「gpt-4o-mini」よりさらに低廉なため、コスト重視の場合はこちらを選択してもよいかもしれません。試しにあるWebページを要約させたところ、「gpt-5-nano」が0.0014ドル、「gpt-4o-mini」が0.0023ドルでした。
モデルプロバイダーの設定画面に「gpt-5」などの新しいモデルが表示されていない場合、モデルプロバイダーのプラグイン自体が古い可能性があります。画面右上の「プラグイン」からモデルプロバイダーのバージョンを確認し、必要に応じて更新してください(図4の「0.0.22」の部分がバージョン番号で、赤い点が表示されている場合は新バージョンが利用できます)。
ワークフローを「ツールとして公開」するためには、まずワークフロー自体を「公開」する必要があります。まだ一度も公開していない場合は、画面右上の「公開する」−「更新を公開」ボタンをクリックします。画面右上に「アクションが成功しました」というメッセージが表示されたら公開完了です(図5)。
なお、ワークフロー内に未接続のノードがあったり、変数の参照が不完全だったりすると、公開できません。「テスト実行」の右側にある「チェックリスト」ボタンをクリックして不足している設定を確認しましょう(図6)。
次に同じく「公開する」ボタンから、一番下の「ワークフローをツールとして公開する」をクリックします(図7)。
ツールとして公開するための設定画面が表示されます。必須項目は「名前」と「ツールコールの名前」の2つです。「名前」は既定でワークフロー名が入力されていますので、そのままでOKです。「ツールコールの名前」は、他のワークフローやAIエージェントからこのツールを呼び出す際の名前になります。任意の名称で構いませんが、ここではsummarize_contentとしました(図8)。
また「ツール出力」部分には、ワークフローの最終出力ノードで設定したresult変数が表示されています。「text」「files」「json」はDifyにおける「ツール」の標準的な出力変数ですが、今のところワークフロー開発者側でこれらの変数を自由に設定することはできないようです。
設定画面で「保存」ボタンをクリックすると、ワークフローがツールとして公開されます。これで他のワークフローやチャットフローから、このワークフローをツールとして利用できるようになりました。
では実際に、先ほどツールとして公開したワークフローを新しいチャットフローで利用してみましょう。
Difyの「スタジオ」画面に戻り「最初から作成」ボタンをクリック、「チャットフロー」を選択します。「アプリのアイコンと名前」欄にチャットフローの名前として「Webページ要約ボット」と入力し、「作成する」ボタンをクリックします(図9)。
新しいチャットフローには、既定で「ユーザー入力」「LLM」「回答」ノードが配置されています。今回は、このLLMノードは不要なので、先ほど公開したツールで置き換えましょう。ノード右上の「・・・」ボタンをクリックし、「ノード変更」から「ツール」タブを選択します。ツール化した「Webページ要約」ツールが表示されているはずなので、これを選択します(図10)。
これで、チャットフロー内に「Webページ要約」ワークフローがツールとして配置されました。後は、ユーザー入力ノード→ツールノード→回答ノードの順番になるように接続します。ここでさらにツールノードと回答ノード間の「+」ボタンをクリックし、「テンプレート」ブロックを追加します。最終的なノードの接続は図11のようになります。
各ノードを以下のように設定します(図12)。
以上でチャットフローのノード設定は完了です。
チャットフローのオープナー(最初に表示されるメッセージ)を設定しておきます。画面右上の「機能」タブをクリックし、「会話の開始」のトグルをONにした後、「オープナーを書く」ボタンからオープナーメッセージを入力します。ここでは「URLを教えていただければ、そのWebページを要約してお伝えします」としました(図13)。
最後に画面右上の「プレビュー」ボタンをクリックし、チャットフローの動作を確認します。オープナーメッセージが表示されたら、要約したいWebページのURLを入力して送信します。しばらく待つと、チャットフローがワークフローを呼び出してWebページを要約し、その結果が表示されます(図14)。
図14中央のように、ツール実行中に内部のワークフローがどのように動作しているかを確認することもできます。今回の例では、要約に10秒程度かかっていました。
次に、チャットフローの回答をPDF形式でユーザーに返すように変更してみましょう。サードパーティー製のツールである「Markdown エクスポーター」を利用して、要約結果をPDFに変換し、ユーザーに返すようにチャットフローを修正します。
新しいツールをインストールするため、Difyマーケットプレイスを開きます。開く方法は幾つかありますが、ノードの[+]ボタンをクリックし、「ツール」タブの一番下にある「マーケットプレイスでさらに見つけてください」リンクをクリックするのが簡単です(図15)。
Difyマーケットプレイス画面が表示されたら、「Markdown エクスポーター」プラグインをクリックします(図16)。もし表示されていない場合は、画面上部の検索欄で探してみてください。
プラグインの詳細画面が表示されたら、bowenliang123氏(作者)のmd_exporterであることを確認してください。このプラグインはGitHub - bowenliang123/md_exporterでソースコードが公開されており、ビルドされたパッケージがDifyマーケットプレイスで公開されています(補足参照)。その他の記載内容も確認し、問題なければ「インストール」ボタンをクリックしてインストールします(図17)。
以上で「Markdown エクスポーター」プラグインのインストールは完了です。
次にチャットフローに戻り、テンプレートノードと回答ノードの間の「+」ボタンをクリックして、「ツール」タブに追加された「Markdown エクスポーター」を展開し、「Markdown to PDF file」を選択します(図18)。
テンプレートノード以降を以下のように修正します(図19)。
再度、画面右上の「プレビュー」ボタンをクリックし、チャットフローの動作を確認します。要約したいWebページのURLを入力して送信すると、今度はPDFファイルが生成され、チャット画面に表示されます(図20)。
PDFファイルをクリックするとダウンロードできます(図21)。
簡素なPDFですが、要約テキストがPDFファイルとして取得できることが分かります。
今回使用しているMarkdown to PDF fileツールでは、フォントサイズやレイアウトを直接調整することはできませんが、見出しの「#」や箇条書きの「-」、区切り線の「---」など、Markdownの基本的な書式はサポートされているので、必要に応じてMarkdown形式のテキストを整形してからPDFに変換するとよいでしょう。
ちなみに、Wordファイルを生成するMarkdown to DOCX fileツールはテンプレートファイルを使用することでスタイル調整が可能です。レイアウトやスタイルを細かく調整したい場合は、そちらを利用するのもよいでしょう。
Difyマーケットプレイスには、今回利用した「Markdown エクスポーター」のように、サードパーティー製のプラグインが多数公開されています。これらのプラグインを利用することで、Difyの標準機能にはない便利な機能を簡単にチャットフローやワークフローに組み込むことができます。
ただし、サードパーティー製プラグインはDify(LangGenius社)が公式に提供しているわけではないため、利用に当たっては、バグや不具合の有無だけでなく、急な開発終了や仕様変更、ライセンス条件などに注意する必要があります。
また、マルウェアの混入や外部への情報送信など、セキュリティ面の懸念もあるため、特に業務で利用する場合は、プラグインのGitHubリポジトリやソースコードを確認し、信頼できる開発者が提供しているかどうか、開発が継続されているかなどを確認することをおすすめします。
今回利用した「Markdown エクスポーター」のGitHubリポジトリでは「License」や「Privacy」の項目があり、Apache License 2.0であること、ユーザーデータの収集や外部への情報送信は行っていないことが明記されています(図22)。
なお、Difyマーケットプレイスでインストールできるものは、以下のDify開発元(LangGenius社)のGitHubリポジトリdify-pluginsで管理されているビルド済みのパッケージです。
リポジトリ直下に作者の識別子があり、その下にプラグインごとのパッケージが格納されています。図23は「Markdown エクスポーター」プラグインの例です。
このためプラグイン公式リポジトリで新しいバージョンがリリースされていても、Difyマーケットプレイスにはまだ公開されていない場合もあります。最新バージョンを利用する必要がある場合は、GitHubリポジトリからソースコードを読み込んでDifyにインストールする方法もあります。特定のプラグインをGitHubリポジトリからインストールする方法については、次回以降で解説する予定です。
最後に、チャットフローを公開して実際に動作するか確認してみましょう。画面右上の「公開する」ボタンをクリックし、「更新を公開」ボタンをクリックします。画面右上に「アクションが成功しました」というメッセージが表示されたら公開完了です(図24)。
同じく「公開する」ボタンから「アプリを実行」をクリックします。プレビューと同様にチャット画面が表示されるので、要約したいWebページのURLを入力して送信します。しばらく待つと、PDFファイルが生成され、チャット画面に表示されます(図25)。
SaaS版(オンライン版)のDifyでは、ワークフローやチャットフローを「公開」すると、自分以外の世界中のユーザーもそのワークフローやチャットフローを利用できるようになります。ユーザー認証を付けたり、ワークスペースのユーザーに制限したりすることはできません。URLだけで共有できるというのは便利な半面、第三者に勝手に利用され、生成AI(LLM)やサードパーティーサービスの高額請求が発生するリスクがあります。
Dify側でもワークフローやチャットフローの一般公開が不要な場合は、フローの設定画面から図26のように「Web App」を無効にしておきます。
また、Web Appの下のバックエンドサービスAPIも、不要であれば無効にしておきます。ただ、APIの呼び出しには、同画面で発行したAPIキーが必要になるため、Web Appのような第三者による不正利用のリスクは低いでしょう。
Web Appを無効にすると当然ながら公開URLからのアクセスはできなくなりますが、自分自身で作ったフローはDifyの「探索」画面から直接開いて利用できます(図27)。
また、LLMプロバイダーやサービス側でも予算上限などを設定しておくことをおすすめします。例えばOpenAIの場合、月間の利用上限予算を設定できます。クレジットのオートチャージを有効にしている場合でも、予算上限に達するとそれ以上の利用が停止されるため、思わぬ高額請求を防止できます。
今回は、前回作成したワークフローをツールとして公開し、新しいチャットフローでそのツールを利用してWebページの要約を行い、さらに要約結果をPDF形式でユーザーに返す方法を説明しました。「要約」という機能を別のワークフローとして切り出していることでチャットフロー自体をシンプルに保て、デバッグもしやすい構成になっていることが重要です。
次回はチャットフローにもう少し多様なノードを組み込み、質問分類や出力の自動化など、より高度なチャットフロー設計を解説します。ご期待ください。
WINGSプロジェクト 山田研二(ヤマダ ケンジ)
株式会社MSEN CTO(https://msen.jp/)。高校卒業後、大阪大学の研究所で働きながらプログラミングやWebデザインをはじめ、以後20年以上、Webサイト制作や業務システムの構築を手掛けている。フリーソフトも幾つか公開している。好きな言語はC#とTypeScript、趣味は旅行。
・GitHubアカウント(https://github.com/kenzauros)
WINGSプロジェクト
有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティー(代表山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手掛ける。2021年10月時点での登録メンバーは55人で、現在も執筆メンバーを募集中。興味のある方は、どしどし応募頂きたい。著書、記事多数。
・サーバーサイド技術の学び舎 - WINGS(https://wings.msn.to/)
・RSS(https://wings.msn.to/contents/rss.php)
・X: @WingsPro_info(https://x.com/WingsPro_info)
・Facebook(https://www.facebook.com/WINGSProject)
Copyright © ITmedia, Inc. All Rights Reserved.