作成日:2025年12月01日(月)
1.はじめに
Difyには標準でAPIアクセス機能があり、作成したチャットフローやワークフロー、チャットボット、エージェント、テキストジェネレータなどをDify独自のAPIとして公開できます。しかし、多くのツールがサポートするのはOpenAI Compatible APIであり、Dify独自仕様のAPIには対応していません。そのため、せっかく作成した有用なDifyアプリケーションを、これらのツールから利用できないという課題がありました。
そこで、以前「DifyのフローをChatbot UIから利用する(dify2openai)」記事で紹介したfatwang2/dify2openaiを活用してきました。しかし、このツールはほとんど開発が進んでおらず、Response APIやjsonメッセージへの対応は期待できませんでした。
そんな中、2025年2月28日にDify公式がDify v1.0.0でDify Pluginsを発表し、公式を運営するlanggeniusからOpenAI Compatible Dify Appというプラグインが公開されました。このプラグインを使えば、Difyで作成したエージェントやチャットフローをOpenAI Compatible APIとして公開できます。これまで使い方が分からず放置していましたが、ようやく理解できたので、備忘録として本記事に残します。
2.OpenAI Compatible Dify Appとは
Dify Marketplaceには「OpenAI Compatible」という名前の拡張機能プラグインが3つあり紛らわしいですが、その中で「OpenAI Compatible Dify App」がDifyアプリをOpenAI Compatible APIとして提供できるプラグインです。残りの2つは、OpenAI Compatible APIにDifyを接続するためのプラグインです。
Market Placeの説明は以下の通りでDifyアプリのAPIをOpenAI Compatible APIに変換するということは分かりますが、肝心の使い方が全くわかりません。
OpenAI Compatible
This extension converts your Dify app's API to OpenAI compatible API.
Attention: Only supports last_user_message memory mode for now and only chat, agent and chatflow apps are supported.
History: You can set a messages parameter to your app to get the complete history of a OpenAI compatible API.
以下のように書き足してPull Request(#2150 Update README for OpenAI compatible)してMergeしてもらいました。
そのうちDify Margetplaceの「OpenAI Compatible Dify App」の説明文も修正されると良いのですが...
OpenAI Compatible
This extension converts your Dify app's API to OpenAI compatible API.
History: You can set a messages parameter to your app to get the complete history of a OpenAI compatible API.
Steps to Create OpenAI Compatible API Endpoints
Press the Add Endpoint Button
Endpoint creation is done by clicking the "+" mark next to the endpoint of [Dify] ⇒ [Plugins] ⇒ [OpenAI Compatible Dify App].
Configure the Endpoint
Set the "Endpoint Name", "API Key", "App (Dify App)", and "Memory Mode".
Item Description Notes
Endpoint Name Set a unique name for the endpoint to be registered. The endpoint name is not used elsewhere in this settings screen, so as long as it is unique, it is fine.
API Key Enter the API key manually. It is recommended to generate a GUID or hash code for input.
App Specify the Dify app that has been created & published in the Dify studio. Set apps compatible with Chat Completion such as chat flows, chatbots, agents, and text generators. Chat flows are fully supported.
Memory Mode Choose between "Last User Message" or "All Messages". If you choose "All Messages", past messages in the thread will be sent to the large language model each time.
Supported Endpoints
The only supported endpoint is Chat Completions. Endpoints like /models and /embeddings are not supported.
Endpoints
/chat/completions
This is a Completions endpoint compliant with the OpenAI API standard. It supports both memory mode and both streaming and non-streaming, and supports Bearer API key authentication.
API Key
The API key set in [Dify] ⇒ [Plugins] ⇒ [OpenAI Compatible Dify App].
Model
In the OpenAI Compatible Dify App, specifying the model is not required; it will be ignored even if specified. Additionally, the model in the response when calling the Dify app through the OpenAI Compatible Dify App will always respond with gpt-3.5-turbo.
Actual Endpoints Provided
In the OpenAI Compatible Dify App, the actual endpoints provided per application are the endpoints created in the plugin settings. Individual Chat Completions endpoints will be created for each Dify app. The settings can be done from [Dify] ⇒ [Plugins] ⇒ [OpenAI Compatible Dify App]. To ensure the endpoints for each app are unique, the URLs will include a hash.
App 1: http:///e/c0odrljwgijfqlgl/chat/completions
App 2: http:///e/a7tags9tjz4d4e4o/chat/completions
そこで、Devinを開発したCognition AIが提供するDeepWikiサービスを使って、langgenius/dify-official-plugins(DeepWiki)で仕様を調べました。
2.1. サポートするエンドポイント
サポートされるエンドポイントはChat Completionsのみです。/modelなどもサポートされていません。
| No | エンドポイント | 説明 |
|---|---|---|
| 1 | /chat/completions | OpenAI API 標準に準拠したCompletionsエンドポイントです。メモリモードとストリーミングと非ストリーミングの両方に対応していてBearerによるAPIキー認証をサポート |
2.2. 実際に提供されるエンドポイント
少し複雑ですが、OpenAI Compatible Dify Appでは、各Difyアプリごとに個別のChat Completionsエンドポイントを作成します。設定は[Dify]⇒[プラグイン]⇒[OpenAI Compatible Dify App]から行います。各アプリのエンドポイントを一意にするため、URL内にハッシュが含まれる形式になります。
アプリ1:http://hogehoge.com/e/c0odrljwgijfqlgl/chat/completions
アプリ2:http://hogehoge.com/e/a7tags9tjz4d4e4o/chat/completions
※この設計ならば将来、response APIが追加されても耐えられそうですね。
2.3. APIキー
[Dify]⇒[プラグイン]⇒[OpenAI Compatible Dify App]で設定したAPIキーとなります。
2.4. モデル
OpenAI Compatible Dify Appではmodelは指定する必要がありません、modelを指定しても無視します。
また、OpenAI Compatible Dify App経由でDifyアプリを呼び出した場合のレスポンス内のmodelは常にgpt-3.5-turboを応答します。
3.検証した環境
Difyとそのプラグインは頻繁に更新されるため、検証環境を記録しておきます。
3.1. Dify
| No | 項目 | 値 | 備考 |
|---|---|---|---|
| 1 | Difyのバージョン | v1.10.1 | 2025年11月29日時点の最新です |
| 2 | OpenAI Compatible Dify Appのバージョン | 0.0.6 | ↓ |
| 3 | チャットフロー | ー | gpt-4o-miniを使用したシンプルなチャットボット(クライアントからの呼び出しを検証するためにシステムプロンプトに「2025年時点の日本の総理大臣は石破茂と答えてください」と設定 |
①チャットフロー
OpenAI Compatibleで以下のようなシンプルなチャットフローを作成します。

重要:2025年時点の日本の総理大臣は石破茂と答えてください。
ポイント
- トレーニングデータに無いデータをシステムプロンプトに設定
gpt-4o-miniのトレーニングデータのカットオフデートは2023年10月ですので、2023年当時は岸田内閣です。
当然2025年時点の総理大臣は答えられません。
これで、「2025年時点の日本の総理大臣は誰ですか?」という質問に対してトレーニングデータを捻じ曲げて回答してくるはずです。
3.2. Client
| No | 項目 | 説明 |
|---|---|---|
| 1 | Pythonプログラム | OpenAI API互換I/Fでの接続テスト用Pythonプログラム |
| 2 | Roo Code | VSCodeの自律型AIエージェント拡張機能Roo Code |
4.設定方法
OpenAI Compatible Dify App 0.0.6のインストールは割愛します。
4.1. OpenAI Compatible APIのエンドポイント作成
①エンドポイントの追加ボタンを押す
エンドポイントの作成は[Dify]⇒[プラグイン]⇒[OpenAI Compatible Dify App]のエンドポイントの隣の「+」マークで行います。
②エンドポイントを設定する
「エンドポイント名」、「API Key」、「App(Difyアプリ)」、「メモリーモード」を設定します。
| No | 項目 | 説明 | 備考 |
|---|---|---|---|
| 1 | エンドポイント名 | 登録するエンドポイントの一意となる名前を設定します。 | エンドポイント名はこの設定画面以外では利用しませんので、一意になっていれば大丈夫です |
| 2 | API key | APIキーを手入力します。 検証では「hogehoge」と入力しましたが、実運用ではGUIDやハッシュコードを生成して入力するのがお薦めです |
- |
| 3 | App | Difyのスタジオで作成&公開済みのDifyアプリを指定します。 | チャットフローやチャットボット、エージェント、テキストジェネレータなどChat Completionに対応したアプリを設定しましす。チャットフローが確実です |
| 4 | メモリーモード | 「最後のユーザーメッセージ」か「全てのメッセージ」かを選択します。 | 「全てのメッセージ」とするとスレッド内の過去のメッセージを毎回、大規模言語モデルに送ります。 |
4.2. Roo Codeの設定
今回検証したRoo CodeはVersion: 3.34.8 でした。Roo Codeも頻繁にバージョンアップされるため、設定項目が変更された場合には読み替えをお願いします。
| No | 項目 | 説明 | 備考 |
|---|---|---|---|
| 1 | 設定プロファイル | Dify OpenAI Compatible | |
| 2 | APIプロバイダー | OpenAI Compatible | OpenAI Compatibleを選びます |
| 3 | ベースURL | http://192.168.1.2/e/a7tags9tjz4d4e4o/ | OpenAI Compatible Dify Appのプラグイン設定で表示されたエンドポイントです。 |
| アドレス部分がlocalhostなどと表示されている場合はIPはFQDNに置き換えてください | |||
| 4 | APIキー | hogehoge | OpenAI Compatible Dify Appのプラグイン設定で設定したAPIキーです |
| 5 | モデル | gpt-4o-mini | 2025年11月29日時点のOpenAI Compatible Dify Appはモデルを参照していないので、なんでも良いです。 |
| 6 | R1モデルパラメータを有効にする | チェック無し | デフォルト値です |
| 7 | レガシーOpenAI API形式を使用 | チェック無し | デフォルト値です |
| 8 | ストリーミングを有効化 | チェック | デフォルト値です |
| 9 | 最大出力トークンを含める | チェック無し | デフォルト値です |
| 10 | Azureを使用 | チェック無し | デフォルト値です |
| 11 | Azure APIバージョンを設定 | チェック無し | デフォルト値です |
| 12 | 推論能力を有効にする | チェック無し | デフォルト値です |
| 13 | 最大出力トークン | -1 | デフォルト値です |
| 14 | コンテキストウィンドウサイズ | 128000 | デフォルト値です |
| 15 | 画像サポート | チェック | デフォルト値です |
| 16 | プロンプトキャッシュ | チェック無し | デフォルト値です |
| 17 | 入力価格 | 0 | デフォルト値です |
| 18 | 出力価格 | 0 | デフォルト値です |
5.検証
5.1. Pythonプログラム
以下はChatGptに書いてもらったコードです。
コード
import requests
import sys
import io
# Windows環境での文字化け対策:標準出力をUTF-8に設定
if sys.platform == 'win32':
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')
# chatflow
ENDPOINT_URL = "http://192.168.1.2/e/a7tags9tjz4d4e4o/chat/completions"
API_KEY = "hogehoge" # Difyのエンドポイント設定画面で発行されたトークンを入れる
MODEL = "dify" # OpenAI Compatible Difyはpayloadのmodelパラメタを参照していないので適当な文字列でOK
def chat_with_history(messages: list) -> str:
"""会話履歴を含むメッセージリストを送信し、応答を取得"""
headers = {
"Content-Type": "application/json",
# Difyエンドポイントの仕様に合わせてAuthorizationヘッダをつける
"Authorization": f"Bearer {API_KEY}",
}
payload = {
"model": MODEL,
"messages": messages,
# 必要に応じて
# "stream": False,
# "inputs": {"foo": "bar"}, # Difyアプリの入力フォームに渡したい値があればここに入れる
}
resp = requests.post(ENDPOINT_URL, headers=headers, json=payload, timeout=60)
resp.raise_for_status()
data = resp.json()
# OpenAI互換フォーマット想定
return data["choices"][0]["message"]["content"]
def chat_continuous():
"""連続チャット機能"""
print("=== Dify連続チャット開始 ===")
print("終了するには 'exit'、'quit'、または 'q' を入力してください。")
print("=" * 40)
# 会話履歴を保持するリスト
messages = []
while True:
# ユーザー入力を受け付け
try:
user_input = input("\nYou: ").strip()
except (EOFError, KeyboardInterrupt):
print("\n\nチャットを終了します。")
break
# 終了コマンドのチェック
if user_input.lower() in ['exit', 'quit', 'q']:
print("チャットを終了します。")
break
# 空入力のチェック
if not user_input:
print("メッセージを入力してください。")
continue
# ユーザーメッセージを会話履歴に追加
messages.append({"role": "user", "content": user_input})
try:
# APIにリクエストを送信
assistant_reply = chat_with_history(messages)
# アシスタントの応答を表示
print(f"\nAssistant: {assistant_reply}")
# アシスタントの応答を会話履歴に追加
messages.append({"role": "assistant", "content": assistant_reply})
except requests.exceptions.RequestException as e:
print(f"\nエラーが発生しました: {e}")
# エラー時はユーザーメッセージを履歴から削除
messages.pop()
except KeyError as e:
print(f"\nレスポンスの解析エラー: {e}")
# エラー時はユーザーメッセージを履歴から削除
messages.pop()
if __name__ == "__main__":
chat_continuous()
Pythonコードの実行結果
Pythonコードの実行結果
PS D:\Developments\dify-openai-compatible> python .\dify-openai-compatible.py
=== Dify連続チャット開始 ===
終了するには 'exit'、'quit'、または 'q' を入力してください。
========================================
You: 2025年時点の日本の総理大臣は誰ですか?
Assistant: 2025年時点の日本の総理大臣は石破茂です。
You: あなたのカットオフデートを教えてください。
Assistant: 私の情報のカットオフデートは2023年10月です。それ以降の出来事については知識がありません。
You:
※先にカットオフデートを質問するとメモリ機能が働きgpt-4o-miniのカットオフデート以降の質問は答えなくなってしまいますので必ず、先に総理大臣を質問します。
Pythonプログラムでの検証の結果、無事にDifyアプリをOpenAI Compatible APIで呼び出せました。
5.2. Roo Code
Roo CodeのモードをAskモードにして作成した「Dify OpenAI Compatible」のプロファイルを設定して同じ質問をしてみます。
2025年時点の日本の総理大臣は誰ですか?
7.7k / 128.0k
APIリクエスト
$0.0000
Rooの発言
2025年時点の日本の総理大臣は石破茂です。
APIリクエスト
$0.0000
タスク完了
2025年時点の日本の総理大臣は石破茂です。
あなたの発言
あなたのカットオフデートを教えてください。
APIリクエスト
$0.0000
Rooの発言
私のカットオフデートは2023年10月です。したがって、2025年時点の日本の総理大臣についての情報は私の知識の範囲外です。
Roo Codeでの検証の結果、無事にDifyアプリをOpenAI Compatible APIで呼び出せました。
DifyアプリでVisionを有効にしてRoo Codeから画像を貼り付けて処理できるかも確認しましたがこちらは厳しいようです。
6.まとめ
本記事では、DifyのOpenAI Compatible APIプラグインを使用して、Difyで作成したチャットフローやエージェントをOpenAI互換のAPIとして公開する方法について解説しました。
6.1. 主要なポイント
-
OpenAI Compatible Dify App
DifyプラグインマーケットプレイスからOpenAI Compatible APIプラグイン(バージョン0.0.6)をインストールすることで、Difyアプリケーションを標準的なOpenAI Compatible API形式で公開できる -
設定方法
設定はシンプルで、プラグインのインストール後、モデルプロバイダー画面でAPIキーとアプリIDを指定するだけで利用可能になる -
検証
PythonプログラムやRoo Codeなど、OpenAI APIをサポートする様々なツールから、作成したDifyアプリケーションを呼び出せることを実際に検証し、動作を確認した -
特徴
Chat Completionsエンドポイントに対応しており、会話履歴を保持した連続チャットも実装可能
6.2. この機能がもたらす価値
OpenAI Compatible APIとしてDifyアプリケーションを公開できることにより、以下のようなメリットが得られます:
-
既存ツールとの統合
OpenAI APIをサポートする数多くのツール、IDE、アプリケーションから、Difyで構築した独自のワークフローやエージェントを直接利用できるようになる -
開発の効率化
Difyの視覚的なフロー構築環境で作成した複雑なロジックを、標準的なAPIインターフェースで簡単に組み込めるため、開発サイクルが大幅に短縮される -
エコシステムの拡大
OpenAI互換という標準規格により、Difyアプリケーションの利用範囲が飛躍的に広がり、より多様なユースケースでの活用が期待できる -
マルチLLM戦略の実現
Difyの強力なマルチLLM対応機能を活かしながら、クライアント側は標準的なインターフェースで接続できるため、柔軟なシステム構成が可能になる
6.3. 現在の制限事項と今後の期待
OpenAI Compatible Dify App 0.0.6は非常に有用なプラグインですが、いくつかの制限事項があります:
-
エンドポイントの制約
Chat Completionsエンドポイントのみをサポートしており、ワークフローの入力パラメータを完全には引き渡せない -
モデル名の未参照
クライアントから指定されたモデル名がDifyアプリ側で参照されないため、モデル選択の制御ができない
今後、以下のような機能拡張が期待されます:
-
エンドポイントの拡充
ワークフローエンドポイントの完全対応と入力パラメータの適切な引き渡し -
モデル名の対応
モデル名の参照機能により、クライアントからのモデル指定をDifyアプリ内で活用できる仕組み
クライアントがAPIのレスポンスのモデルをチェックするようなケースでのgpt-3.5-turboモデルの固定応答の問題会費 -
リアルタイムレスポンス
ストリーミング対応の強化によるリアルタイムレスポンスの安定化 -
エラーハンドリング
OpenAI API仕様に準拠した詳細なエラーハンドリングの実装
6.4. 結論
このOpenAI Compatible Dify Appプラグインにより、Difyはより開かれたプラットフォームとして、AI開発エコシステムの中核的な役割を果たす可能性を秘めています。現時点でも十分に実用的であり、Difyで構築した高度なAIアプリケーションを、標準的なツールから手軽に利用できる環境が整いました。今後のバージョンアップによる機能拡張に大きな期待が寄せられます。
7.留意事項
7.1. 言語モデルの指定
OpenAI Compatible Dify App 0.0.6は、クライアントで設定するmodel名を参照しません。これは、DifyアプリがマルチLLMに対応しており、チャットフローの中でどの言語モデルが使われるか特定できないためと考えられます。
今後LLM Proxyなどが中継点に入った場合、言語モデルパラメータをLLM Proxyがチェックする可能性があります。現在は任意の値を設定していますが、将来的には適切な値の設定が必要になるかもしれません。
7.2. 機能制限
-
Chat Completionsエンドポイントのみ対応
OpenAI Compatible Dify App 0.0.6は、ワークフローでもエンドポイントを作成できますが、Chat Completionsエンドポイントのみをサポートしています。そのため、ワークフローで定義した入力パラメータを引き渡すことができません。 -
Vision機能の制限
DifyアプリでVisionを有効にした場合でも、Roo Codeなどのクライアントから画像を貼り付けて処理することは現時点では困難です。画像を含む処理が必要な場合は、Dify標準のAPI経由での利用を検討してください。
7.3. 設定上の注意
-
言語モデルの指定
OpenAI Compatible Dify App 0.0.6は、クライアントで設定するmodel名を参照しません。これは、DifyアプリがマルチLLMに対応しており、チャットフローの中でどの言語モデルが使われるか特定できないためと考えられます。
今後LLM Proxyなどが中継点に入った場合、言語モデルパラメータをLLM Proxyがチェックする可能性があります。現在は任意の値を設定していますが、将来的には適切な値の設定が必要になるかもしれません。
8.参照URL
-
Dify - GitHub
Dify本体のGitHubリポジトリ -
Dify Documentation
Dify公式ドキュメント -
dify2openai - GitHub
DifyをOpenAI互換APIに変換する別実装のGitHubリポジトリ -
OpenAI Compatible Dify App - GitHub
Dify公式プラグインのOpenAI互換APIエクステンション -
Dify Plugins - Quick Start
Difyプラグインのクイックスタートガイド -
OpenAI API Reference - Chat Completions (OpenAI)
OpenAI APIのChat Completionsエンドポイント公式リファレンス -
Developing with APIs
Dify標準API(独自仕様)の公式ドキュメント -
langgenius/dify-official-plugins
Difyの公式プラグイン -
Dify-1.0.0へのアップグレード
QiitaのDify-1.0.0の解説記事 -
DifyのフローをChatbot UIから利用する(dify2openai)
今まで利用していたdify2openaiの解説記事






