【Difyアプリ】画像ファイルをRAG用データに変換
社内検索やナレッジマネジメントで生成AIを活用するシーンが多くなってますね。RAG(Retrieval-Augmented Generation)と言われていて、外部情報を取り込んで生成AIに学習させ、ユーザの検索クエリに対して回答を返すというようなものです。
その際重要なのが何といってもデータの前処理です。前処理が不十分だと、検索クエリに対して関連度の高い情報を引き出せなかったり、検索に引っかからなかったりします。
特に画像を扱う場合は、その画像を自然言語で説明し、そのテキストを提供する必要があります。
そのやり方は大きく2つあり、今回は①についてDifyを使ってRAG用データを作成するアプリを作成しました
①contextとして画像を自然言語で表現
②embeddigngで画像の意味をベクトル空間にマッピング
embeddingもやりたかったのですが、Difyだと複数画像をアップロードできないためベクトル化しにくく断念…。現状これをやるならDifyではなく自前で作る必要がありそうです
画像データをRAG化する際のポイント
まず、画像データをRAG用に変換する際の重要なポイントについて説明します。
画像の種類ごとにプロンプトを作成する必要がある
画像データを単に「構造化されたデータにして」といった汎用的な指示だけでは、十分な結果が得られないことが多いです。そのため、画像の種類ごとに具体的なプロンプトを作成する必要があります。以下の手順で進めると効果的です。
画像を分類する: まず、扱う画像を種類別に分類します。たとえば、レシート、商品画像、図表など。
それぞれに対して具体的なプロンプトを作成する: 各種類の画像に対して、何を抽出したいのか具体的に指示するプロンプトを作成します。
例:
レシート: 「レシートに記載されている店舗名、購入日、購入した商品名とその価格を抽出して」
商品画像: 「商品画像からブランド名、商品名、価格を抽出して」
こうすることで、画像の種類に応じた適切な情報を引き出すことができます。
試しにChat-GPTでグラフの画像をデータ化するプロンプトを作成したところ、以下だとグラフラベルを読み取ってくれずうまくいきませんでした
これだと社内検索で「販売数量の推移を教えて」とクエリを投げたときに帰ってきません
なので以下のような形で、グラフ用に詳細にプロンプトを書く必要があります
Difyでの画像ファイルからRAG用データ生成アプリ作成手順
全体としてはこんな感じです
では作成手順を説明していきます
開始
右上の「機能」を選択し、「画像アップロード」をオンにしてください。
LLMで画像を分類
まずはアップロードされた画像を分類します。ここではイラスト/写真、グラフ、テキストの3種類の分類させました
画像の分類ごとに条件分岐
下記のようにIFフローを使い、画像の分類ごとに条件分岐をさせます
画像の分類ごとにLLMでRAG用データ化
下記のように、IFフローで分岐された条件ごとにLLMを設定し、それぞれの分類に即したプロンプトを記載します
実行結果
試しに以下の画像をアップロードしてみます
正しく出力されました
作成したアプリはこちらに公開しているので、どなたでもお使いいただけます!
https://udify.app/workflow/67KqLjkYM5aYsZ53