【Dify】ナレッジパイプライン調査レポート1/3 - ドキュメント内画像データの挙動検証
はじめに
LLMアプリケーション開発プラットフォーム「Dify」に、ナレッジ作成におけるデータ処理ワークフローを自動化する新機能「ナレッジパイプライン」が実装されました。
実際に検証したところ、いくつか注目すべき技術的テーマが見えてきました。今回はその中でも以下三つのテーマに注目して、それぞれを深掘りしていく予定です。
- 【第1回】 ドキュメント内画像データの挙動検証 (← 今回の記事)
- 【第2回】 文脈を理解した「チャンク分割の自動化」
- 【第3回】 Excelデータの自動選別とQAナレッジ化
本記事では、その第一弾として「画像データのナレッジ化」を取り上げます。
ver.1.9.0よりDify Extractorという高度な抽出機能を持つツールが登場しました。これにより複数の形式のドキュメントから画像を抽出し、ナレッジベースにURLとして保存することができるようになりました。

そこで、代表的なドキュメント形式(Word, PowerPoint, Excel, PDF)における画像はナレッジパイプライン上ではどのように扱われるのかが、新たな疑問として浮上しています。
この記事では、Difyのナレッジパイプラインが画像情報をどのように処理するのか検証・解説していきます。
注目の新機能「ナレッジパイプライン」
ナレッジパイプラインは、ver.1.9.0から導入された新機能です。従来の単一的なファイルアップロード方式とは異なり、「ファイルの取り込み → データ抽出 → チャンク分割 → ナレッジベースへの格納」という一連のデータ処理プロセスを、ノードベースのUIで可視化・自動化します。

▲一連のプロセス
これにより、開発者はRAGの精度を担保するために必要なナレッジデータの前処理(例:非構造化データからの情報抽出・整形)を、Dify内で一気通貫で対応できるようになりました。
検証の概要
検証内容
「ナレッジパイプライン」を使い、画像を含むドキュメントをアップロードし、どのように処理されるかを確認します。
検証環境
本検証の環境は以下の通りです。
| 環境 | Difyバージョン |
|---|---|
| Community版 | 1.9.1 |
| SaaS版 | 1.9.1 |
検証手順
本検証は、大きく分けて「①データ準備」「②ナレッジ格納」「③チャットボットでの利用」の3ステップで行いました。
今回は手順の例としてPowerPointファイルを使用します。
手順1:データの準備
まず、ナレッジの元となるファイルを用意します。今回は PowerPointファイルを準備しました。
本検証では、総務省が公開しているPDF資料「マイナポータルを使ってみましょう」総務省PDF[1]
を使用してPowerPointファイルを用意し、ナレッジとして格納します。
このスライド資料には、マイナポータルの概要や操作手順を説明するテキストとスクリーンショット画像が含まれています。
手順2:ナレッジパイプラインでナレッジを格納
次に、Difyの「ナレッジ」メニューから、「ナレッジパイプラインから作成」->「空白のナレッジパイプライン」を選択して以下のような簡単な構成のナレッジパイプラインを作成します。
- File:検証したいファイルをアップロードするソースノード。
- Dify Extractor:アップロードされたファイルからテキストや画像情報を抽出するノード。
- General Chunker:抽出されたコンテンツをチャンク(塊)に分割するノード。
-
知識ベース:チャンク化されたデータを格納するノード。
パイプラインを実行すると、PowerPointファイルが処理され、スライド内の画像やテキストを含むナレッジが完成します。


手順3:チャットボットでナレッジを利用
最後に、作成したナレッジをチャットボットに接続して検証します。
- Difyでチャットボット(Chatflow)を新規作成します。
- 「知識取得」ノードを追加し、手順2で作成したナレッジを選択します。
- 開始ノード、知識取得ノード、LLMノード、回答ノードを接続すれば完成です。
LLMについて
本チャットフローの目的は、作成したナレッジを用いて正確な回答を生成できるか検証することです。そのため、プロンプトは検証に特化した、以下の通りシンプルな構成にしています。
SYSTEM
{{#sys.query#}}に対して、ナレッジの該当箇所を利用して回答を作成してください。
USER
{{#sys.query#}}:ユーザーの質問
{{#context#}}:ユーザーの質問に関連するナレッジの該当箇所

これで、画像を含むPowerPointファイルの内容に基づいて回答する簡易的なRAGチャットボットが完成しました。
作成したチャットボットを使用し、質問に対する画像付きの回答を得ることができました。

▲質問に対する回答を画像付きで生成
補足:ナレッジパイプラインを利用しなかった場合における画像データの扱いについて
①「Difyナレッジメニュー」->「+ナレッジベースを追加」でファイルをアップロードするだけで、
Wordファイル内の画像データは下図のようにURL形式で保存されていることがわかります。

②アップロードできるファイルの形式が限られています。PPTXは非対応。

各ファイル形式における画像処理対応の違い
結論:Word/PowerPointは画像に対応、Excel/PDFは非対応
結論として、ナレッジパイプラインにおける画像の取り扱いは、ファイル形式に依存する結果となりました。
| ファイル形式 | 画像の扱い |
|---|---|
| Word (.docx) | ⭕️ 保持される |
| PowerPoint (.pptx) | ⭕️ 保持される |
| Excel (.xlsx)※ | ❌ 抽出されない |
| PDF (.pdf)※ | ❌ 抽出されない |
※今回の検証ではDify Extractorを使用しました。Dify上で使用可能な他の専用パースツールを利用することでPDFやExcel内の画像にも対応できる可能性があります。
WordとPowerPointでは、ファイル内の画像が抽出・保存され、チャットでナレッジを利用する際に画像が表示されました。一方、PDFとExcelでは画像は抽出されず、テキスト情報のみがナレッジとして取り込まれました。
以下で、各形式の具体的な挙動を見ていきましょう。
1. Word (.docx) の場合
Wordファイルでは、テキストだけでなく画像も正しく抽出されました。
Dify Extractorノードの出力を見ると、抽出されたテキスト情報に加え、imagesというフィールドに画像データが格納されていることがわかります。
// Dify Extractorの出力(Word)
{
"text": "心地よい時間と空間を求めて。休日のカフェ巡りのすすめ...",
"images": [
{
"extension": ".jpg",
"id": "123456abcdef",
"mime_type": "image/jpeg",
"name": "xxxx.jpeg",
"preview_url": "<https://.../files/tools/xxxx.jpg?timestamp=...>",
"size": 383402,
"type": "image"
},
// ... 他の画像
],
// ...
}
チャンク分割された後も画像情報は保持され、ナレッジを利用したチャットでは、もとのナレッジ内文章と同様の場所に画像が正しく表示されました。

2. PowerPoint (.pptx) の場合
PowerPointもWordと同様に、各スライドのテキストと画像が抽出されました。
Dify Extractorの出力でも、imagesフィールドに各スライドの画像が格納されていることが確認できます。
// Dify Extractorの出力(PowerPoint)
{
"text": "# Slide 1\\n~...",
"images": [
{
"extension": ".png",
"id": "123456abcdef",
"mime_type": "image/png",
"name": "xxxx.png",
"preview_url": "<https://.../files/tools/xxx.jpg?timestamp=...>",
"size": 57272,
"type": "image"
},
// ... 他の画像
],
// ...
}
結果として、PowerPointファイル内の情報を画像を含めてナレッジとして使用できました。

3. Excel (.xlsx)の場合
一方、Excelファイルではテキスト情報のみが抽出されました。
Dify Extractorの出力にはimagesフィールドが存在せず、テキストデータしか含まれていません。
// Dify Extractorの出力(Excel)
{
"text": " "## Sheet1\n\n| ID | カテゴリ大分類 | カテゴリ中分類 | タイトル |...
"files": [],
"json": [
{
"data": []
}
],
"documents": [
{
...
}
]
}
4. PDF (.pdf) の場合
Excel同様、PDFファイルでもテキスト情報のみが抽出される結果となりました。
Dify Extractorの出力にimagesフィールドが存在せず、テキストデータしか含まれていません。
// Dify Extractorの出力(PDF)
{
"text": "",
"files": [],
"json": [
{
"data": []
}
],
"result": [
"心地よい時間と空間を求めて。休日のカフェ巡りのすすめ\\n慌ただしい日常から少しだけ離れて...",
...
]
}
この結果、ナレッジにはテキスト情報しか格納されず、当然ながらチャットで利用しても画像が表示されることはありませんでした。

なぜPDFの画像は処理されないのか?
この挙動はDifyの不具合ではなく、ファイル形式の内部構造に起因する仕様と解釈できます。
-
Word (.docx) / PowerPoint (.pptx)
これらのファイルは、実はZIP形式で圧縮されたアーカイブです。拡張子を.zipに変更して解凍すると、XMLファイルやメディアフォルダ(画像ファイルがそのまま格納されている)などを確認できます。Difyはこの構造を解析し、画像ファイルを直接取り出すことが容易です。 -
PDF (.pdf)
PDFは「電子の紙」というコンセプトの通り、テキスト、画像、レイアウト情報などが統合されてページ上に描画される形式です。画像は独立したファイルとして内包されているわけではなく、ページコンテンツの一部として埋め込まれています。そのため、テキスト情報を抽出することはできても、画像データをファイルとして分離・抽出するのは技術的に複雑になります。Dify Extractorは、現時点ではPDFに対してテキストの抽出のみを行う仕様です。
【対策】PDF内の画像をDifyで利用する方法
PDFドキュメント内の画像をナレッジとして活用する場合、現時点での最も確実な解決策は、対象のPDFをWord (.docx) やPowerPoint(.pptx)形式へ変換した上で、Difyにアップロードすることです。この一手間により、画像情報を欠落させることなく、ナレッジベースを構築できます。
技術的なQ&A
Q1. 精度はどう?入力クエリに対して欲しい部分の画像を取れる?
A1. テキスト検索の精度に依存しますが、高い精度で取得できます。
RAGにおける画像の検索は、画像自体を認識するのではなく、画像に隣接するテキスト情報に基づいて行います。
-
得意なケース:
- 画像と同じチャンク内に、関連性の高いキーワードが含まれている場合。
- 「季節のフルーツを使用した小鉢を提供する古民家カフェの画像を見せて」のように、文脈が明確な場合。
-
苦手なケース:
- 画像とテキストの関連性が薄い場合。
- テキストに書かれていない「色」「形」「表情」といった視覚的特徴を検索された場合。
- 画像から離れた場所(例: 前の段落や別のチャンク)で説明されている場合。
基本的には「入力クエリに対して、欲しい文章がヒットするかどうか」と同じ精度だと考えてよいでしょう。テキストのチャンク分割設定(チャンク長やオーバーラップ)を適切に行うことが、結果的に画像の検索精度向上に繋がります。
Q2. 制約はある?データ容量やファイル数は?
A2. いくつかの制約があります。
| 制限項目 | 説明 |
|---|---|
| ファイル数 | 1回あたり最大50ファイルまで |
| ファイルサイズ | 1ファイルあたり最大15MB |
| ストレージ | サブスクリプションプランによりアップロード上限が異なる |
Q3. セキュリティは大丈夫?画像のリンクは誰でも見れる?
A3. Difyが生成するURLは、セキュリティが考慮されており安全です。
ナレッジに取り込まれた画像には、一時的で署名付きのURLが発行されます。
https://[Difyサーバーアドレス]/files/tools/UUID.jpg?timestamp=...&nonce=...&sign=...
このURLにはタイムスタンプ(有効期限)や署名が含まれており、URLを知っているだけでは第三者が不正にアクセスできない仕組みです。そのため、ナレッジ内の画像が意図せず外部に公開される心配はありません。(詳しくは後述の【発展】をご確認ください。)
【発展】画像URLの仕様と保存場所の関係
Difyのナレッジパイプラインで抽出された画像は、内部ストレージに保存されると同時に、アプリケーション内で表示するためのセキュアなURLが動的に生成されます。
このURLの構造は、Difyのデプロイ環境およびストレージ設定に依存します。以下にその関係性を解説します。
URLの基本構造:誰がファイルを提供しているか
クラウド版の場合
クラウド版を利用している場合、URLはDifyの公式ドメインから始まります。
https://upload.dify.ai/files/tools/UUID.jpg?....
これは、画像ファイルがDifyの管理するクラウドストレージに保存されており、そこから直接提供されていることを意味します。
セルフホストの場合
一方、セルフホスト版では、URLは自身が設定したDifyサーバーのアドレスから始まります。
https://[Difyサーバーアドレス]/files/tools/UUID.jpg?....
この場合、ファイルへのアクセスは一度自身のDifyサーバーを経由します。
-
ローカルストレージ設定の場合: Difyサーバーが自身のディスク(Dockerボリューム)からファイルを読み込み、ユーザーに提供します。
- 参考:Dify公式GitHub
- 外部ストレージ(S3など)設定の場合: Difyサーバーが外部ストレージへのアクセスを仲介し、安全な形でユーザーにファイルを提供します(一時的なアクセス許可を発行するなど)。
共通のセキュリティ機能:URLパラメータ
どちらの環境でも、発行されるURLには不正なアクセスや改ざんを防ぐための共通の仕組みが組み込まれています。URLの末尾に付与されるパラメータ(?以降の文字列)がその役割を担っています。
| パラメータ | 意味・機能 |
|---|---|
?timestamp= |
タイムスタンプ。URLに有効期限を持たせたり、キャッシュを制御したりするために使用します。一定時間経つと無効になる一時的なリンクを実現します。 |
&nonce= |
ノンス(使い捨てトークン)。一度きりのリクエストであることを保証し、同じURLの再利用(リプレイ攻撃)を防ぎます。 |
&sign= |
署名(シグネチャ)。URLの他の部分や秘密鍵から生成されるハッシュ値。URLが途中で改ざんされていないかをサーバー側で検証するために使います。 |
このように、Difyは単にファイルを保存するだけでなく、誰が、どこから、どのようにアクセスするかを厳密に管理することで、ナレッジベースに含まれる情報の安全性を確保しているのです。
どんな場面で活躍する?具体的な活用シーン
-
社内マニュアル・FAQ対応 💬
- 例: 「経費精算システムのスクリーンショット」と「操作手順」をナレッジ化:
「経費の申請方法を教えて」という質問に対し、テキストでの手順説明と該当する操作画面の画像を提示できます。
- 例: 「経費精算システムのスクリーンショット」と「操作手順」をナレッジ化:
-
製品カタログ・仕様書検索 🛠️
- 例: 「製品Aと製品Bの比較表」や「部品XXXの設計図」をナレッジ化:
営業担当者が外出先から「製品Aの耐久性に関するデータと図を教えて」と質問し、仕様テキストと関連グラフ・図面を入手できます。
- 例: 「製品Aと製品Bの比較表」や「部品XXXの設計図」をナレッジ化:
-
デザイン案や施工事例の検索 🎨
- 例: 過去のデザイン案や建築物の施工事例を、特徴を説明したテキストと共にナレッジ化:
「モダンなキッチンの事例写真を3つ見せて」といった曖昧な指示でも、説明文から事例画像を検索・提示できます。
- 例: 過去のデザイン案や建築物の施工事例を、特徴を説明したテキストと共にナレッジ化:
まとめ
今回の検証から、Difyのナレッジパイプラインで画像を扱う際のポイントが明らかになりました。
- Word (.docx)とPowerPoint (.pptx) は、画像を含めてナレッジ化するのに適している。
- Excel (.xlsx)とPDF (.pdf) の場合、Dify Extractorでは画像を抽出できない。
- PDFの画像を扱いたい場合は、事前にWord形式,Power Point形式に変換するのが有効な対策。
- 社内マニュアルや製品カタログなど、ビジュアル情報が重要なドキュメントの活用に有効。
「ナレッジパイプライン」を使いこなし、高精度なRAGを構築するためには、ナレッジソースの特性を理解することが重要です。
-
出典:総務省「マイナポータルを使ってみましょう」
(https://www.soumu.go.jp/main_content/000749815.pdf , 2025年10月4日アクセス) ↩︎
Discussion