こんにちは!今回は、DifyでVQA(Visual Question Answering:画像を見て答えるAI)を実現する方法をご紹介します。
特に、Oracle Cloud Infrastructure(OCI)Object Storageに保存している画像を、Difyのチャットボットで表示・活用する流れを詳しく解説していきます。
最終的な動作イメージ
Difyのチャット画面で、ユーザーがアップロードした画像をAIが「見て」、その内容に基づいて回答するという流れです。
必要なもの
- Dify(ローカルでもクラウドでも可)
- OCI Object Storageのバケット(画像を保存する場所)
- 今回使う画像アップロード・表示用のAPIサービス
→ GitHub - engchina/No.1-ChatOCI-Images から利用可能です。
ステップ1:画像アップロード・表示用APIを起動
まず、OCI Object Storageに画像をアップロードし、かつその画像を認証付きで表示するためのAPIサービスを起動します。
git clone https://github.com/engchina/No.1-ChatOCI-Images.git
cd No.1-ChatOCI-Images
pip install -r requirements.txt
python app.py
このAPIは以下のようなエンドポイントを提供しています:
-
POST /upload:画像をアップロード -
GET /img/<bucket>/<object_name>:画像を表示
ステップ2:Difyでアプリケーションを作成
Difyのコンソールで新しいアプリを作成し、以下のようなフローを構築します。
① 開始ノード:APIのURLを定義
image_serverというパラメータを定義し、先ほど起動したAPIサービスのURLを入力させます。
② HTTPリクエストノード:画像をアップロード
ユーザーがアップロードした画像を、OCI Object Storageにアップロードします。
③ コード実行ノード:画像のURLを取得
アップロードされた画像のproxy_urlを取得します。
import json
def main(body: str, image_server: str) -> dict:
json_body = json.loads(body)
return {
"proxy_url": image_server + json_body['data']['proxy_url'],
}
④ LLMノード:画像と質問を送信
LLMノードで、ユーザーが入力した質問と画像を、ユーザーメッセージとして設定します。
⑤ 回答ノード:画像と回答を表示
最後に、LLMからの回答と、ユーザーがアップロードした画像を一緒に表示します。
まとめ
今回はDifyでVQAを実現する方法を、OCI Object Storageと連携させながら解説しました。





