見出し画像

マルチLLMアプリをDify v0.10以降対応にアップデート+機能追加

Dify v0.10以降から、従来の「画像アップロード」に代わって「ファイルアプロード」機能がサポートされ、画像以外の文書、音声、映像などのファイルをアップロードし、ワークフローの中で参照したり、解析したりすることができるようになりました。

そこで、以前作成したマルチLLMアプリ「しげちゃっと」でも、GPT-4oなどのマルチモーダルLLMと組み合わせ、アップロードした文書や画像、音声データを参照・解析して回答するようにプチ改造することにしました。


ファイルアップロード

Dify v0.10以降では、画面右上の「機能」にある「画像アップロード」が「ファイルアプロード」に代わり、アップロードできるファイルの形式を選択できるようになりました。

同様に、「開始ノード」にある「入力フィールド」のフィールドタイプ「単一ファイル」「ファイルリスト」でも、アップロードできるファイルの形式を選択できるようになっています。

アップロード可能なファイルタイプ

文書ファイルの参照

文書ファイルをアップロードした場合は、「テキスト抽出」ブロックでファイルに含まれるテキストを抽出し、GPT-4oなどのマルチモーダルLLMにコンテキスト情報として指定すれば、ナレッジと同様、LLMに外部の情報を参照して回答させることができるようになります。

文書ファイルから「テキスト抽出」→「LLM」にコンテキスト情報として指定

音声ファイルの要約

音声ファイルをアップロードした場合は、LLMを音声音声入力・生成に対応した「gpt-4o-audio-preview」に設定し、ビジョン変数として「sys.files」を指定すれば、音声データからの文字起こしや要約、感情分析などが行えるようになります。

なお、単に音声認識によって文字起こししたいだけなら、「gpt-4o-audio-preview」ではなく、以前から提供されている Whisper API を使うほうがコストを低く抑えることできるようです。

音声ファイルを「gpt-4o-audio-preview」のビジョン変数として指定
音声ファイルの内容を要約したり、感情の分析ができる

Difyでアップロード可能な音声ファイル形式は「MP3」「M4A」「WAV」「WEBM」「AMR」なのに対し、「gpt-4o-audio-preview」がサポートする音声ファイルの形式は「WAV」「MP3」「FLAC」「OPUS」「PCM16」なので、実際に使用できるのは「WAV」「MP3」となります。

ところが、「MP3」ファイルをアップロードしようとすると、Dify側で「ファイル拡張子はサポートされていません」というエラーが表示され、アップロード自体ができません。

Difyの不具合(?)のようですが、現時点での最新バージョンである v0.11.0 でもエラーが発生しているので、修正されるまで待つしかないようです…

DeepL翻訳機能の修正

DeepL APIによる翻訳機能は前回実装しましたが、Dify 0.10にアップデートしてからエラーが発生して動作しなくなったので、DeepL APIのリクエストボディをFORM形式からJSON形式に変更してPOSTするよう設定し直しました。

DeepL APIのリクエストボディをJSON形式に変更

前回はどうしてDeepL APIをFORM形式でPOSTしていたのか覚えていないw のですが、DeepL APIに限らず、リクエストボディをFORM形式でPOSTするタイプのAPI(Stable Diffusion 3 API、Whisper APIなど)は、Dify 0.10にアップデートしてからエラーが発生して動作しなくなってしまいました。

Difyの不具合(?)のようですが、現時点での最新バージョンである v0.11.0 でもエラーが発生しているので、こちらも修正されるまで待つしかないようです…

システムプロンプト

「しげちゃっと」は汎用的なチャットボットとしているので、デフォルトでは特定の役割や前提条件などを指定していません。そのため、「開始」ブロックに入力フィールドを追加し、オプションでLLMのシステムプロンプトを指定できるようにしました。

以下のように、システムプロンプトで「あなたは頭の良い10歳の女の子です。聡明な少女らしい口調で、わかりやすく話してください」などと指定すると…

システムプロンプトで役割や前提条件などを設定

少々難しいことを質問しても、NHKの子供番組のニュースコーナーのように、わかりやすく、聡明な少女のような口調で回答してくれますw

システムプロンプトで役割や前提条件に従って回答

ワークフローの全体像

欲張って一つのWebアプリにいろいろな機能を詰め込んでいるので、「IF/ELSE」ブロックによる条件分岐だらけになってしまいましたが、今回、プチ改造した「しげちゃっと」のワークフロー全体像です。

「しげちゃっと」ワークフローの全体像

スマホでの動作画面

複数のLLMを切り替えたり、マルチモーダルLLMや日本語・英語の翻訳など、さまざまな機能が一つのWebアプリに集約できたので、スマートフォンから使用する場合でも、とても便利です♪

スマートフォンでの「しげちゃっと」動作画面

この記事が気に入ったらサポートをしてみませんか?