2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

DifyでVQAを実現する!OCI Object Storageの画像を活用してチャットボットに「見せる」機能を追加しよう

Posted at

こんにちは!今回は、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にアップロードします。

HTTPリクエストノード


③ コード実行ノード:画像の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ノード


⑤ 回答ノード:画像と回答を表示

最後に、LLMからの回答と、ユーザーがアップロードした画像を一緒に表示します。

回答ノード


まとめ

今回はDifyでVQAを実現する方法を、OCI Object Storageと連携させながら解説しました。


参考リポジトリ

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?