Difyは、画面上で簡単にチャットフローが作れて、コードを書く必要もありません。「プログラムなんて分からない……」という非エンジニアの方が社内ツールをつくるのにも本当に便利です。
しかし、いざ実務で使おうとすると、必ずと言っていいほど日本の伝統芸能「方眼紙エクセル」問題が立ちはだかります。セルの結合、複雑なレイアウト、そして中に埋め込まれた現場写真・・・。これらをそのままDifyに放り込んで、分割されたチャンクデータを見てみると、もうカオスです。
対策として「ExcelをPDF化して投入する」のも手っ取り早い方法ではあります。しかし、適切な印刷設定(1ページに収める等)が必要ですし、Linuxサーバー等でLibreOfficeを使って自動変換しようとすると、Excelとまったく同一のレイアウトが再現できないケースも多いのが悩ましいところです。そこで、昔検討していた「方眼紙エクセルの構造化」のノウハウを再利用し、Difyへのデータ投入に利用する流れを検討しました。これから、徐々に作りこんでいきます。
方眼紙エクセルは、やり難い
通常、DifyなどのRAGツールでExcel(.xlsx)をそのまま読み込むと、単なる「テキストの羅列」として処理されがちです。もしくは、全体が無理やり1つの巨大な表として扱われてしまいます。今後、DifyのExcelパース機能やLLM自体が賢くなれば解決するのかもしれませんが、現時点では目の前にいくつかの大きな課題があります。
- コンテキストの崩壊: 見た目重視の複雑なセル結合のせいで、どの項目(ヘッダー)にどの値が紐づいているのか分からなくなる。
- 画像の無視: せっかくシート内に貼り付けられている現場写真や図解がインデックスされない(検索対象にならない)。
- メタデータの欠落: シート名や作成日、現場名といった、検索時に重要な絞り込み情報が消えてしまう。
これらを解決するために以前作った方眼紙エクセルの構造化を行う kami_excel_extractor を利用してみます。これをDifyのデータ投入用に最適化し、2つのアプローチを試してみます。
手法1:JSONLによる一括アップロード(メタデータ重視)
「特定の現場のデータだけを検索対象にしたい」「日付で絞り込みたい」といった、精緻なフィルタリング(ハイブリッド検索)を行いたい場合に強いのがこの手法です。
やり方
ツールを使ってExcelを解析すると、{ファイル名}_rag.jsonl というファイルが生成されます。中身は以下のような構造です。
{"content": "現場写真の説明: 2階廊下のひび割れ状況...", "metadata": {"sheet_name": "点検記録", "location": "A棟"}}
Difyへの取り込み手順
- Difyの「ナレッジ」→「テキストファイルからインポート」を選択。
- 生成されたJSONLファイルをアップロード。
- メタデータキーを設定することで、Dify内でカスタムプロパティとして認識させます。
これにより、「A棟の点検記録だけを参考にして回答して」といったプロンプトに対し、LLMがフィルターを効かせて迷わず正確なデータを見つけ出せるようになります。
【注意点】 ただし、この方式だと「画像データ」はJSONLに直接埋め込めないため、別途自前のサーバー等に画像をアップロードし、そのURLをcontent内に記載するなどの工夫が必要です。正直、管理の手間が増えてしまうのがデメリットです。
手法2:ハイブリッド構造DOCXによるインポート(画像・視覚重視)
「JSONLのメタデータ設定はちょっと面倒……」「もっと直感的に画像を検索対象に入れたい」「なにより、Difyに投入する前にデータを手動で修正・編集したい!」
そんな現場のワガママを解決するのが、Wordファイル(.docx)による「ハイブリッド構造DOCX」を利用する方法です。
なぜ「ハイブリッド」なのか?
Difyの標準Wordパーサーは非常に便利ですが、実は「Wordの表の中に貼り付けられた画像」は認識してくれないようです。
そこで本ツールでは、Excel内の表をLLM(VLM: Vision-Language Model)にあらかじめ解釈させ、「画像の内容を説明したテキスト」に変換した上で、文中に埋め込んだWordファイルを出力します。
- 表の再構築: LLMが読みやすいMarkdown風のテーブル構造に変換。
- ビジュアル・インサイト: 画像をLLMで解析し、説明文(テキスト)としてWord内に直接埋め込み。
メリット
これをDifyにインポートすれば、Wordファイル1つアップロードするだけで、標準パーサー経由でも、本来なら表中の図であったために無視されていたはずの『図や写真の情報』までしっかりインデックスされます。 (※ただし、Difyに添付できるファイル数やサイズには制限があるため、公式ドキュメントの制限事項には注意してください)
例えば、「ひび割れが写っている報告書を出して」というユーザーの検索に対し、画像解析結果のテキストをフックにして正解のドキュメントに辿り着けます。将来的にはここからさらにマルチモーダルなLLM(VLM)へ繋ぐことで、より社内情報をうまく活用できるのではないか・・・と考えての実装です。
残課題
VLMによる図の解釈は、冗長気味です。もっとキーワードや数字中心にするといった工夫が必要でしょう。まだまだ、詰める余地があります。
詳細について
こちらのドキュメントにて MarkdownやYAML形式についても出力するようにしています。どこまでうまく行くかはこれからボチボチと検証していきたいと思っています。
まとめ
Difyはワークフローをサクッと作れるのが最大の魅力ですが、その真価を発揮させるのは「データの質」であるのは言うまでもありません。
方眼紙エクセルという日本の伝統芸能(?)を、LLMで理解しやすい構造化データに変換してあげるだけで、チャットボットの回答精度は劇的に向上します。
実務においては「AIがパースした出来栄えを人間の目で一度確認・修正してからナレッジに投入する」というプロセスがとても大事だったりします。その意味でも、途中で手動編集できる「ハイブリッド構造DOCX」の手法は、実用的なアプローチになるのではないでしょうか。また、Difyのプラグイン(拡張機能)に落とし込めればもっと手軽になるのかもしれません。