🤖

Difyのチャットで画像をアップロードすると応答がなくなるエラーへの対処

に公開

かなり限られた状況での事象ですが、同じところで悩んでいる人がいるかもしれないので記事にしておきます。

対応する事象

環境:セルフホストのDify
バージョン:1.1.0 ~ 1.2.0にかけて(2025/3月下旬〜)
モデル:Amazon Bedrockを利用

チャットにて、文字による会話は問題なく実行できますが、画像を添付すると応答が空白になります。
この時Dify側では

api_1                    | core.plugin.manager.exc.PluginInvokeError: PluginInvokeError: {"args":{},"error_type":"ValidationError","message":"1 validation error for ModelGetLLMNumTokens\nprompt_messages.content.type\n  Input should be \u003cPromptMessageContentType.TEXT: 'text'\u003e [type=literal_error, input_value='text', input_type=str]\n    For further information visit https://errors.pydantic.dev/2.8/v/literal_error"}
api_1                    | 2025-04-11 08:54:06.824 ERROR [Dummy-8] [base_app_generate_response_converter.py:123] - {"args":{},"error_type":"ValidationError","message":"1 validation error for ModelGetLLMNumTokens\nprompt_messages.content.type\n  Input should be \u003cPromptMessageContentType.TEXT: 'text'\u003e [type=literal_error, input_value='text', input_type=str]\n    For further information visit https://errors.pydantic.dev/2.8/v/literal_error"}

このようなエラーが出る場合の対処法です。

該当のIssue

この事象自体のIssueはいくつか出ており、解決済みになっているものもあります。
しかしキャプチャのように一部環境では治っていないため、原因を追っかけます。
https://github.com/langgenius/dify/issues/16353

まず、Issueから原因と対応をざっくりまとめると

  • プラグインの部分で発生
  • 依存するライブラリ(pydanticかな?)のバージョンアップによるもの
    • プラグインのベースであるdify_pluginが影響受けて、
    • そのdify_pluginを使っているオフィシャルのプラグインが影響
  • 完全に解決するのは時間がかかるから、dify_pluginのバージョンを下げて対応する
  • OpenAI, Azure OpenAI, OpenRouterのプラグインは対応済み

という状況のようです。(英語読解間違ってたらすいません)

自分の場合はBedrockのプラグインを使っていたので、Bedrockのプラグインが対応するまでは治らないということになります。

対応手順

方針

ということで、Bedrockのプラグインをなんとかしないといけません。

オフィシャルのプラグイン自体はこちらにあります。
https://github.com/langgenius/dify-official-plugins/tree/main/models

確かに、azure_openaiのプラグインを見ると

dify_plugin~=0.0.1b73,<0.0.1b74
openai~=1.67.0
tiktoken~=0.8.0
numpy~=2.2.4

となっているのに対して、Bedrockは

dify_plugin~=0.0.1b72
boto3~=1.37.4
tiktoken~=0.8.0

のようになっていてdify_pluginのバージョンに差がありそうです。
こちらを治し、
プラグインをパッケージ化 → Difyにローカルからインストール
すると修正を反映できそうです。

プラグイン作成

ソースコード

dify-official-pluginsのソースコードを取得します

git clone https://github.com/langgenius/dify-official-plugins.git

全体ではなく必要な部分だけ取得でも大丈夫と思います。

開発ツール

次にプラグインのパッケージ化のために、こちらの開発ツールを導入します。
https://github.com/langgenius/dify-plugin-daemon/releases

動作確認(mac)

$ chmod +x dify-plugin-darwin-arm64
$ ./dify-plugin-darwin-amd64 version
v0.0.7

パッケージ化

Bedrockの例
models/bedrock/requirements.txtのdify_pluginを変更

- dify_plugin~=0.0.1b72
+ dify_plugin~=0.0.1b66,<0.0.1b74

その後、開発者ツールを以下のように実行するとパッケージが出来上がりました

$ ./dify-plugin-darwin-amd64 plugin package ./bedrock
[INFO]plugin packaged successfully, output path: bedrock.difypkg

参考:ローカルでの公開と共有

Difyの署名設定を変更

このdifypkgをDifyの画面上からインストールすれば良いのですが、そのままだとこのようなエラーが出てきます。

こちらの署名の追加を行えばよさそうです。
面倒な場合はDify自体の設定で検証をパスすることもできるようです。

ホストしているDifyのdify/docker/.envの中のこちらを変更して再起動します。

- FORCE_VERIFYING_SIGNATURE=true
+ FORCE_VERIFYING_SIGNATURE=false

これでインストール可能になりました。

既存のBedrockプラグインを削除 → 手元のBedrockプラグインをインストール します。
同じプラグインなので今までチャットやワークフローに設定していたものもそのまま引き継がれているようです。

これで、画像でエラーが出なくなります!

バージョンを固定した暫定対応ではあるので、恒久対応は公式を待ちます・・・
Difyはすごいスピードで進化していっているのでこういうバグは仕方ないですね。

NaviPlusテックブログ

Discussion