2
0

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プラグイン開発)

Last updated at Posted at 2025-08-24

はじめに

DifyからAzure OpenAIのEndpointを直接使えなくなり、Difyがある環境ではProxyが、Azure OpenAIはAPI Management経由で使用する構成に変更されました。

構成が変わり、認証情報やシステム情報をリクエストヘッダに追加する必要があります。

スクリーンショット 2025-08-24 18.39.18.png

プラグイン(モデルプロバイダー)の開発

forward proxyでのヘッダ書き換え(断念)

途中にforward proxyを構築してリクエストヘッダを書き換える構成を検討しましたが、以下の理由で断念しました。

forward proxyのCONNECT操作に対応していない(400応答)

  • Nginx
  • tinyproxy

受信したPOSTリクエストのヘッダ書き換えができない(forward proxyのCONNECT操作のヘッダ書き換えになってしまう)

  • squid

Difyプラグインの開発

基本的にはDifyプラグイン開発のドキュメントに沿って進めます。

環境

  • Ubuntu 22.04
  • Python 3.12
  • Homebrew 4.6.3
  • Dify 1.6.0
  • Dify CLI v0.2.0
  • Azure OpenAI 0.0.26 (モデルプロバイダーのベース)

以下を参考にしてPython 3.12をインストールします。

以下を参考にしてHomebrewをインストールします。

開発ツール(Dify plugin CLI)をインストールします。

brew tap langgenius/dify
brew install dify

ドキュメントでは新規プラグインを作成する手順ですが、公式のプラグイン(azure_openai)をベースに改修します。

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

ChatGPTに改修箇所を聞いたところ、以下のとおり教えてくれました。

(質問)
Difyのモデルプロバイダーを改修して、POSTデータにヘッダーを追加したいです。 ソースコードは以下です。
https://github.com/langgenius/dify-official-plugins/tree/main/models/azure_openai
改修箇所を教えてください。

(回答)
(1) provider の YAML にフォーム項目を追加し、(2) 送信リクエストのヘッダーを組み立てる共通処理(common.py)へその項目を反映させれば OK です。

YAMLファイルを修正します。(フォーム項目を追加します)

provider/azure_openai.yaml
+  - name: header
+    type: text-input
+    label:
+      en_US: header
+      ja_JP: ヘッダ
+    required: false
+    placeholder:
+      en_US: header value (optional)
+      ja_JP: ヘッダ値(未設定なら送信しない)

共通処理(common.py)を修正します。(リクエストヘッダーを追加します)

models/common.py
+from typing import Dict

-        credentials_kwargs = {
+        credentials_kwargs: Dict[str, object] = {

+        header = credentials.get("header")
+        if header:
+            credentials_kwargs["default_headers"] = {
+                "header": str(header),
+            }

修正済のファイルはこちらです。

デバッグ

必要なPythonモジュールをインストールします。

python3.12 -m pip install dify_plugin Pillow openai numpy

デバッグKeyを.envファイルに設定します。

スクリーンショット 2025-08-24 17.20.53.png

.env
INSTALL_METHOD=remote
REMOTE_INSTALL_HOST=localhost
REMOTE_INSTALL_PORT=5003
REMOTE_INSTALL_KEY=(デバッグKey)

プラグインを開発モードで起動します。

python3.12 -m main

Difyにデバッグモードでプラグインが追加されます。

スクリーンショット 2025-08-24 18.22.24.png

動作の正常性を確認できたらパッケージを作成します。

cd ..
dify plugin package azure_openai

azure_openai.difypkgが作成されます。

作成されたパッケージをDifyからインストール(ローカルパッケージファイルを指定)するとエラーが表示されます。

スクリーンショット 2025-08-24 18.27.47.png

PluginDaemonBadRequestError: plugin verification has been enabled, and the plugin you want to install has a bad signature

署名検証の失敗が原因で、Difyの設定を変更して署名検証を無効化します。

.env
FORCE_VERIFYING_SIGNATURE=trueFORCE_VERIFYING_SIGNATURE=false

Difyを再起動すれば設定変更が反映されて正常にプラグインをインストールできます。

スクリーンショット 2025-08-24 18.23.58.png

image.png

(参考)mitmproxyでデバッグ

プラグインの改修でPOSTデータのヘッダーが追加されていることを確認したい場合、mitmproxyで確認することができます。

mitmproxyをdockerで構築します。

docker-compose.yaml
services:
 mitmweb:
  image: "mitmproxy/mitmproxy"
  ports:
    - "8080:8080/tcp"
    - "8081:8081/tcp"
  volumes:
    - "./certs:/home/mitmproxy/.mitmproxy"
  command: "mitmweb --web-host 0.0.0.0 --set block_global=false --set web_password='mitm' --mode upstream:(Proxyのアドレス)"
docker compose up -d

mitmproxyのSSL証明書を指定して、プラグインを開発モードで起動します。

SSL_CERT_FILE=mitmproxy/certs/mitmproxy-ca-cert.pem python3.12 -m main
2
0
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
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?