今回のゴール
第2回〜第8回で作ったアプリは、基本的に「1枚の設定画面」で動いていました。便利ですが、「まず社内資料を調べて、足りなければWebでもAIに検索させて…」のように処理を順番につなげたいときは、もう一段の仕組みが必要です。それがChatflow / Workflow。処理をノード(部品)として置き、線でつないで“流れ図”を作るタイプのアプリです。
💡 今回のゴール
- Chatflow と Workflow の違いと、ノードキャンバスの基本を理解する
- 第5回のFAQボットを 「ユーザー入力 → 知識検索 → LLM → 回答」 のノードで作り直す
- 出典付きで答える様子を、フローで動かして確認する
- 「ツール」ノードで、前回やり残したWeb検索を実際に動かして結果を受け取る
① Chatflow と Workflow って何?
どちらも「ノードをつないで多段処理を作る」点は同じです。違いは“動き方”。ざっくり、次のように使い分けます。
| Chatflow(チャットフロー) | Workflow(ワークフロー) | |
|---|---|---|
| 得意なこと | 会話(チャットの相棒) | 自動処理(まとめて1回実行) |
| 動くきっかけ | ユーザーが話しかけるたびに流れが走る | 1回の入力で最初から最後まで走る |
| 出口 | 「回答」ノードでチャットに返す(必須) | 結果を出力(任意) |
| 例 | FAQボット、相談窓口、調べもの係 | 記事の一括生成、定型レポート作成 |
今回は会話で使うFAQボットを作るので、Chatflowを選びます。「チャットボットの賢い版」と考えると分かりやすいです。
📖 公式情報の確認
公式ドキュメントでも、Chatflowは「各メッセージが、あなたの設計したフローを動かしてから応答を生成する」対話型、Workflowは「入力を受け取り、フローで処理し、結果を返す」自動処理型と説明されています(参照:Dify Docs — Workflow / Chatflow)。
② Chatflowアプリを作る
いつもの スタジオ▸最初から作成 から、今回は チャットフロー を選びます(「初心者向けの基本的なアプリタイプ」を開かなくても、最初の画面に出ています)。名前は 社内FAQフロー にしました。
③ ノードキャンバスの基本(開始 → LLM → 回答)
作成すると、これまでと違う「キャンバス(流れ図の編集画面)」が開きます。最初から3つのノードが線でつながっています。これがChatflowの“最小構成”です。
| ノード | 役割 |
|---|---|
| スタート(ユーザー入力) | 流れの入口。ユーザーが送った質問が、変数 sys.query に自動で入ります |
| LLM | AI(モデル)に考えさせる中心の部品。今回も gpt-5-mini |
| 回答 | 流れの出口。LLMの結果をチャットに返します(Chatflowでは必須) |
💡 変数 sys.query =「ユーザーが今送った質問」
ノードどうしは「変数」でデータを受け渡します。{x} マークの付いた青い文字がそれです。ユーザーの質問は sys.query という名前で、どのノードからでも呼び出せます。難しく感じても大丈夫。線でつなぐ=データが次の部品へ流れる、とだけ押さえればOKです。
④ 「知識検索」ノードを足してFAQボットにする
このままだとAIは“自分の知識”だけで答えてしまいます。第5回と同じく社内資料(ナレッジ)を参照させましょう。スタートとLLMの間(あいだ)に、「知識検索」ノードを差し込みます。
スタートとLLMをつなぐ線の上にカーソルを合わせると出る「+」をクリックし、ブロック一覧から 知識検索 を選びます。
差し込まれた 知識検索 ノードを開き、ナレッジベース の + から、第4回で作った 「社内FAQサンプル.txt」 を選びます(クエリには
sys.queryが自動でセット済み)。
sys.query)、ナレッジ=社内FAQサンプル。これで「質問に近い箇所を社内資料から探す」部品ができました。次に LLM ノードを開き、コンテキスト に「知識検索」ノードの検索結果(result)を指定します。そして、システムプロンプトには「渡された社内FAQの内容だけにもとづいて答えてください」と指示し、コンテキスト(検索結果)をプロンプトに差し込みます。
⚠️ コンテキストは「プロンプトにも差し込む」
コンテキストを指定すると、LLMノードに「コンテキスト利用時はプロンプトに変数を明記してください」という赤い注意が出ることがあります。これは「検索結果を、実際にプロンプトの中へ入れてね」という意味。プロンプト欄で /(スラッシュ)を入力して コンテキスト を挿入すれば消えます。これを忘れると、せっかく検索しても結果がAIに渡りません。
⑤ 動かして、出典付きで答えさせる
右上の プレビュー を開き、社内FAQにある質問を投げてみます。今回は「経費精算はいつ締めで、いつ振り込まれますか?」と聞いてみました。
第5回のFAQボットと同じ結果を、今度は「入力 → 検索 → AI → 回答」という流れ図で実現できました。一見遠回りに見えますが、途中に部品を足せるのがこの作り方の強みです。次はその実例として、Web検索の“道具”を足してみます。
⑥ 「ツール」ノードでWeb検索を実際に動かす
第8回では、エージェントにTavily(Web検索)という道具を持たせました。ただしエージェントは「AIが使うかどうかを“判断”する」仕組みのため、思ったとおりに検索してくれないこともありました。フローなら、「ツール」ノードを置く=必ずこの手順で道具を動かすと決められます。AIの気まぐれに左右されません。
試しに、キャンバスに ツール → Tavily Search のノードを1つ置き、検索キーワード(Query)に 東京 今日の天気 を入れて、ノード単体の このステップ実行 を押してみます。
結果がこちらです。ステータスは SUCCESS。出力には、いま検索したばかりの本物の天気情報(「Today in Tokyo, expect partly cloudy skies … a high of around 27℃ …」)が返ってきました。AIの記憶では知り得ない“今日の天気”が取れている=実際にWebをリアルタイムでアクセスできているWeb検索です。
💡 エージェント(第8回)との違い = 「お任せ」か「手順どおり」か
第8回のエージェントは、AIが「今は検索すべきか」を自分で判断する“お任せ”型。賢い反面、確実性に欠けることがあります。今回のツールノードは、フローの決まった手順として必ず道具を動かす“確実”型。業務で安定して動かしたいなら、フロー+ツールノードが堅実です。実際の業務では、この検索結果を後ろのLLMノードに渡して「日本語で要約して」とつなげれば、“調べて答える”ボットになります。
💰 今回のクレジット
FAQフローのLLMノードは、動かすたびにAIクレジットを少し使います(軽い gpt-5-mini で節約)。一方、ツールノード(Tavily)の実行は 0 トークン=AIのクレジットを使いません(料金は道具側のTavilyに従います)。残量は 設定▸モデルプロバイダー▸クォータ で確認しましょう。なお、今回フローを1つ作ったので、アプリは 4/5 になりました。
まとめと次回予告
今回は、処理を部品(ノード)でつなぐChatflowに入門しました。第5回のFAQボットを「ユーザー入力 → 知識検索 → LLM → 回答」のフローで作り直し、出典付きで回答。さらにツールノードで、前回やり残したWeb検索を実際に動かして結果を受け取るところまで体験しました。「線でつなぐ=処理が流れる」「部品を足せる=拡張できる」という感覚がつかめれば十分です。
いよいよ卒業回。作ったアプリを本番で使う・運用する・コストを管理する方法をまとめます。Webサイトへの埋め込み、API連携、自前APIキーでの運用、そして有料プランの判断まで。連載10回の総まとめです。
この記事で参照した公式情報
- Dify Docs — Workflow / Chatflow(違いとノードの基本)
- Dify Docs — User Input / 変数(sys.query)
- Dify Docs — Knowledge Retrieval ノード
- Dify Docs — LLM ノード(コンテキスト)
- Dify Docs — Tool ノード
※ 画面のノード名・メニュー名は、Difyのアップデートで変わることがあります。本記事は公開時点の情報・実画面にもとづいています。生成結果や検索結果はそのつど変わります。Tavilyの検索を動かすには、第8回で解説したTavilyのAPIキー登録が必要です。スクリーンショット内のワークスペース名(メールアドレス)は記事用に伏せています。
