【Dify】Lesson4-1:PDF資料要約アプリを作ろう|ワークフローツール入門

今回は「PDFを要約するアプリ」を作りながら、ワークフローツールの使い方を学習します。
記事前半では、まずはシンプルなPDF要約アプリを作ります。
後半ではそのアプリをワークフローツールで“部品化”し、「PDFを一つずつ要約する」から「複数PDFをまとめて一斉要約する」形に改善します。
実務では資料が1つだけということは少なくて、たとえば会議資料・提案書・報告書などをまとめて処理したい場面が多いですよね。
ワークフローにすると、こうした “まとめ処理” が一気に現実的になります。
この記事を読み終えるころには、次のことができるようになります。
- テキスト抽出ノードが何をしていて、なぜ必要なのか説明できる
- ワークフローツールでアプリ内にアプリを格納できる
- イテレーションによる繰り返し処理が理解できる
“今の業務にそのまま持ち込みやすいアプリ” を意識して進めますので、作りながら「自分の仕事ならどう使うか」も一緒に考えてみてください。
Lesson1:Dify入門|環境構築と最初の生成AIアプリ開発
Lesson2:まずは体験|基本的なアプリを作ろう
Lesson3:文章業務を自動化するアプリを開発しよう
Lesson4:ファイル処理で広がるDifyアプリ開発
・Lesson4-1:PDF資料要約アプリ|ワークフローツール入門 ◁今回はここ
・Lesson4-2:資料のミスチェックアプリを作ろう|会話変数と変数代入ノード
・Lesson4-3:JSON入門|構造化出力の仕組みを理解しよう
・Lesson4-4:JSON体験|文章作成アシストアプリを作ろう
Lesson5:RAG実践|ナレッジ検索アプリを作ろう
Lesson6:機能拡張と外部システム連携|ツールを使いこなそう
Lesson7:総仕上げ|実践投入への準備
まずは単体版:シンプルなPDF要約アプリを作ろう
まず「PDFを1つ受け取り、その内容を要約して返す」シンプルなアプリを作っていきます。
後半で一斉要約に発展させるためにも、最初に “PDFを扱うときの基本構造” をきちんと押さえておくのが大事です。
PDF要約アプリで一番のポイントは、実は「要約プロンプト」よりも前段にあります。
つまり、PDFの中身をAIが読める形に変換できているかどうかです。ここが不安定だと、どれだけプロンプトを工夫しても出力がブレやすくなります。
なお、今回のアプリを試すためには長文が書かれたPDF資料が複数必要になります。
資料は何でも良いですが、必要であれば↓↓のダウンロードリンクからサンプルを入手して使用してください。
テキスト抽出ノードとは
DifyでPDFを要約するとき、最初に必要になるのが「PDFから文字情報を取り出す処理」です。
PDFは見た目は文章でも、実は内部的には “そのままAIに渡して読ませられるテキスト” になっていません。
そこで登場するのが、テキスト抽出ノード(Text Extractor)です。
テキスト抽出ツールの役割はシンプルで、アップロードされたPDFを解析して、中に含まれる文章をテキストとして取り出すことです。
アプリの流れとしては、まずこの抽出結果(テキスト)を作り、そのテキストをLLMノードに渡して要約させる、という順番になります。
単体PDF要約アプリの作り方(ノード構成と設定)
まず作成するシンプルなアプリの全体構成は次の通りです。

Difyの開発画面から「最初から作成」を選択。アプリタイプは「ワークフロー」、アプリ名は「PDF要約アプリ」としましょう。

開始ノードは「ユーザー入力」を選択します。

開発画面が表示されたら、まずはユーザー入力ノードの設定画面から入力変数を指定しましょう。

- フィールドタイプ:単一ファイル
- 変数名:file
- ラベル名:PDFファイル
- ファイルタイプ:ドキュメント
ユーザー入力ノードの後ろにテキスト抽出ノードを配置します。

テキスト抽出ノードの入力変数は「ユーザー入力ノードの変数file」を指定します。
その後、後ろにLLMと出力ノードを設置し、「シンプルなPDF要約アプリ」は完成です。

- PDF要約LLMのプロンプト
-
# 役割 あなたは文章を要約する専門家です。条件に従って文章を要約してください。 # 要約する資料 ☆☆☆ ここにテキスト抽出ノードの出力変数textを指定 ☆☆☆ # 条件 - 要約文の長さ:400字程度 - 文体:簡潔で分かりやすい日本語 # 注意点 - 背景や経緯から結論までの流れを保持すること - 時系列に沿って整理すること - 段落分けを適切に行うこと

いつも通り、プロンプト内の変数だけはコピペじゃなく自分で指定してね。
実際にアプリを公開し、実行してみましょう。
ワークフローツールの活用|一斉要約アプリに改善しよう
ここからは、前半で作った「PDFを1つ要約するアプリ」を、より実務向きに改善していきます。
ポイントは、要約処理を “使い回せる部品” にして、別のアプリから呼び出せるようにすることです。
一斉要約のように処理が少し複雑になると、全部を1つのワークフローに詰め込むよりも、「よく使う処理は分離して、共通部品として使う」ほうが後々ラクになります。
ここでそのやり方を覚えておくと、PDF要約以外の業務アプリにもそのまま応用できます。
ワークフローツールとは:ワークフローを再利用可能な部品に
ワークフローツールとは、ワークフローで作ったアプリを「ツール」として公開し、別のアプリ(別ワークフロー)から呼び出せるようにする仕組みです。
この仕組みを一言でいうと、「ワークフローを部品化できる機能」です。
たとえば今回なら、PDFを受け取ってテキストを抽出し、要約して返すところまでを1つの部品にします。
すると、別のアプリ側では「PDFが複数あるから、1つずつこの部品に投げて結果を受け取る」という組み立てができるようになります。
この形にしておくと、メリットがいくつも出てきます。
- 要約のルールを変えたいとき、直すのは要約ツール側だけで済む
- 「単体要約」「一斉要約」など別アプリでも同じ要約処理を使い回せる
- 処理の役割が分かれるので、ワークフローが読みやすくなり、改善もしやすい
今回の後半で作る一斉要約アプリは、まさにこの発想を使います。
まず要約処理をワークフローツールとして公開し、次に一斉要約アプリからそれを呼び出して、複数PDFをまとめて処理できる形にしていきましょう。
ワークフローをツールとして公開する手順
さきほど開発した「シンプルなPDF要約アプリ」をツールとして公開しましょう。
開発画面右上の「公開する」から「ワークフローをツールとして公開する」をクリックしてください。

ツールの設定画面が開くので、名前だけ指定して他はデフォルト設定のまま保存しましょう。

これでワークフローツールの公開は完了です。
イテレーションで複数PDFを一括処理しよう
ワークフローツールを活用したPDF一斉要約アプリの開発に入ります。
アプリの全体構成は次の通りです。

アプリタイプはワークフロー、アプリ名は「PDF一斉要約アプリ」としてください。

開発画面が開いたら、まずはユーザー入力ノードの入力変数を指定しましょう。

複数のファイルがアップロードされることを想定します。
- フィールドタイプ:ファイルリスト
- 変数名:files
- ラベル名:複数のPDFファイル
- ファイルタイプ:ドキュメント
ユーザー入力ノードの後ろにイテレーションノードを追加しましょう。


イテレーションノードは、配列(リスト)を1件ずつ順番に処理するためのノード。
たとえば「検索結果の一覧」「抽出したURLリスト」「FAQ候補の配列」みたいな “複数件データ” を、同じ手順で繰り返し扱いたいときに使うよ。
「同じ処理をN回やりたい」場面では、まずイテレーションノードを思い出すのが近道だよ。
イテレーションノードの設定画面で、入力変数を「ユーザー入力の変数files」に指定しましょう。

出力変数は後で指定するので、いったん空欄のまま次へ進んでください。
イテレーション変数内の「+ブロックを追加」をクリックすると「繰り返す作業」を選択できます。
「ツール」の「ワークフロー」をクリックすると、さきほど公開した「PDF要約アプリ」が出てくるので選択してください。


PDF要約アプリの設定画面から入力変数を指定します。

- 入力変数:現在のイテレーションの変数item
ここで、一度現時点のアプリの動作を整理します。
- ユーザーが複数のPDFをアップロードしてアプリ起動
- ユーザー入力ノードがそれを受け取り、リスト(変数files)に入れてまとめてイテレーションへ渡す
- イテレーションがリストの最初のPDFを変数itemに入れ、PDF要約アプリに渡す ⇒ PDF要約アプリ起動
- イテレーションがリストの2番目のPDFを変数itemに入れ、PDF要約アプリに渡す ⇒ PDF要約アプリ起動
- リストが空になるまで繰り返す

イテレーションノードを使うことで、複数の資料を1つずつ処理できるんだね。
出力される文章を整形するために、イテレーション内にテンプレートノードを追加しましょう。

出力結果は、まず「要約した資料の名前」を、その後に「要約結果」を表示させます。
テンプレートノードに2つの入力変数を設定し、コードを書いてください。

- 変数file_name:イテレーションの変数itemのname変数(※)
- 変数text:PDF要約アプリの出力変数text
(※)イテレーションの変数itemのname変数は、「現在のイテレーション」の{x}itemの部分にカーソルを置くと表示され、選択できます。
その変数に格納されたファイルの名称が保存されています。

先ほど空欄のまま置いておいたイテレーションの出力変数を指定しましょう。

- 出力変数:テンプレートノードの出力変数output
最後に、イテレーションの後ろに出力ノードを繋ぎましょう。

出力変数に「イテレーションの出力変数output」を指定すれば、「要約結果のリスト」が出力されます。
これで、PDF一斉要約アプリは完成です。
実際にアプリを公開し、実行してみてください。
まとめ
今回は、PDF要約アプリを題材にして「ファイルを扱うときの基本」と「ワークフローツールとして部品化する考え方」を押さえました。
前半では、PDFからテキストを取り出して要約する流れを作り、後半ではその要約処理をワークフローツールとして公開し、別アプリから呼び出せる形に改善しました。
この「処理をツール化して再利用する」設計は、PDF以外でもそのまま使えます。
たとえば、文章整形・翻訳・分類・チェックなど、同じ処理を複数アプリで使いたくなったときに強力です。
次は、さらに実務で使いやすくするための改善を加えていきましょう。
なお、この記事の最後にはちょっとした練習問題があります。ぜひ挑戦してください。
- 記事改善アンケート|ご意見をお聞かせください(1分で終わります)
-
本サイトでは、みなさまの学習をよりサポートできるサービスを目指しております。
そのため、みなさまの意見をアンケート形式でお伺いしています。1分だけ、ご協力いただけますと幸いです。
(※)APIキーや個人情報等は入力しないようお願いします。
【Dify】記事改善アンケート
練習問題:1つのアプリに統合しよう
今回の記事では、ワークフローツールの学習という意味を込めてアプリを2つに分割して開発しました。
しかし実際はこの程度の規模のアプリであればわざわざ分割する必要はないかもしれません。
クラウド版DifyのSandboxプランを使用している場合は保存できるアプリの数も限られるため、是非1つのアプリに統合してしまいましょう。



