こんにちは、JS2IIUです。
Difyの最も重要な機能である生成AIとの連携について具体的な手順をみていきます。今回もよろしくお願いします。
はじめに
大規模言語モデル(LLM)を活用したアプリケーションの開発は、従来は高い技術力を必要としました。しかし、Difyを使えば、ノーコード/ローコードでLLMを活用したアプリの構築や運用が容易になります。
本記事では、Difyで利用可能なLLMの設定方法と、**構造化出力(Structured Output)**を使った応答のカスタマイズ方法について詳しく解説します。
特に、PythonでLLMを手動設定する方法との違いにも触れながら、Difyの便利さを技術的にご紹介します。
1. Difyで利用できるLLMの一覧と要件
Difyは以下のような主要なLLMプロバイダに対応しています:
| プロバイダ | 利用例 | 特徴 |
|---|---|---|
| OpenAI | GPT-3.5, GPT-4 | 汎用性が高く、多用途 |
| Anthropic | Claude 3系(Haiku, Sonnet) | 長文処理に強み |
| Azure OpenAI | GPT系(企業向け) | セキュリティ性に優れる |
| Google Gemini | Gemini 1.5など | 高精度の自然言語処理 |
| ローカルLLM | LMStudioやOllama | オフラインでの利用も可能 |
Difyでこれらを利用するには、それぞれのAPIキーを取得して登録する必要があります。たとえばOpenAIの場合はこちらから取得可能です。
2. LLMの接続設定(APIキーの登録)
2.1 Dify管理画面からの設定手順
Difyでは、ブラウザのGUIから簡単にLLMの設定ができます。以下はOpenAIのモデルを登録する例です。
設定手順:
- Difyの管理画面にログイン
- Settings > Model Providers に移動
- 「+ Add Provider」ボタンをクリック
- プロバイダとして
OpenAIを選択 - APIキーを入力
- 利用したいモデル(例:
gpt-4)を選択して保存
Difyの管理画面は、右上端に表示されているユーザーのアイコンから「設定」をクリック。

設定の「モデルプロバイダー」を選択すると各種生成AIのモデルサービスへの接続用モジュールが並んでいるのでインストーするす。下の図は、OpenAI、Anthropic、Geminiへの接続設定が完了した画面。それぞれ、「セットアップ」をクリックすると、API_KEYを入力することができる。


モデルパラメータ(temperature、最大トークン数など)もGUI上で設定可能です。
モデルのパラメータは、ワークフロー作成画面のワークフローパーツ個々に設定可能です。モデルごとに設定可能な項目は異なります。

2.2 Pythonでの設定との比較
同じことをPythonで手動実装する場合、以下のようなコードになります:
import openai
# OpenAIのAPIキーを設定(セキュアに環境変数などで管理するのが望ましい)
openai.api_key = "YOUR_API_KEY"
# 会話の履歴(systemとuserメッセージ)
messages = [
{"role": "system", "content": "あなたは有能なAIアシスタントです。"},
{"role": "user", "content": "明日の東京の天気を教えてください。"}
]
# Chat Completionのリクエスト送信
response = openai.ChatCompletion.create(
model="gpt-4o", # 最新のOpenAIのマルチモーダルモデル
messages=messages,
temperature=0.7, # 応答のランダム性(0.0は決定論的、1.0は創造的)
top_p=1.0, # nucleus samplingの確率しきい値(通常は1.0で問題なし)
frequency_penalty=0.0, # 頻出語の抑制(0.0〜2.0)
presence_penalty=0.0, # 新しいトピックの出現を促す(0.0〜2.0)
max_tokens=512, # 応答の最大トークン数
stop=None # 応答停止トークン(必要に応じて指定)
)
# 応答の出力
print(response['choices'][0]['message']['content'])このようにPythonではAPIの呼び出し、パラメータ調整、エラー処理をすべて自分で実装する必要がありますが、DifyではノーコードでGUI上から一元管理できるのが大きな利点です。
3. モデル出力のカスタマイズ:構造化出力(Structured Output)
LLMは通常、自然言語で応答を返しますが、Difyでは**構造化された形式(JSONなど)**で応答を出すように設計できます。
3.1 構造化出力とは?
構造化出力とは、一定の形式に従ったデータ構造でLLMから応答を得ることを指します。たとえば、以下のようなJSON形式での応答がそれに当たります:
{
"location": "京都",
"highlights": ["清水寺", "伏見稲荷", "金閣寺"]
}このような形式は、LLMの応答をそのままフロントエンドや他システムに連携しやすくするために重要です。
3.2 Difyでの構造化出力設定方法
方法①:プロンプトに構造を明示
あなたは旅行ガイドです。以下の形式で応答してください:
{
"location": "場所名",
"highlights": ["見どころ1", "見どころ2"]
}Difyの「Promptテンプレート」編集画面でこのように記述すれば、LLMは可能な限りこの形式で応答を返します。
方法②:Function Callingの設定(OpenAI専用)
OpenAIのFunction Callingを使って、事前に関数スキーマを定義し、その構造に従って出力させることも可能です。Difyの開発者モードではこれに相当する設定ができます。
3.3 Pythonとの比較:構造化出力を扱う例
Pythonで構造化出力を扱う場合、プロンプト設計+レスポンスのパースが必要です:
import openai
import json
prompt = """
あなたは旅行ガイドです。以下のJSON形式で応答してください:
{
"location": "場所名",
"highlights": ["見どころ1", "見どころ2"]
}
"""
response = openai.ChatCompletion.create(
model="gpt-4",
messages=[{"role": "user", "content": prompt}]
)
# 応答の整形とパース
content = response.choices[0].message["content"]
try:
data = json.loads(content)
print(data["location"], data["highlights"])
except json.JSONDecodeError:
print("構造化出力の形式が不正です。")一方、DifyではプロンプトテンプレートにJSON形式を指定するだけで済み、パース処理も自動で行われます。
4. よくあるトラブルと対処法
| 問題 | 対処法 |
|---|---|
| モデルが選択できない | APIキーやモデル名の設定ミスを確認 |
| 応答が返らない(タイムアウト等) | トークン数や温度パラメータを調整。プロンプトを簡潔に。 |
| JSON形式で返ってこない | プロンプトに例付きで構造を明示。function callingの活用。 |
| Anthropicで構造化出力がうまくいかない | Claude系は自然言語に強いため、構造指示を明確に入れる必要あり |
5. まとめ
Difyを使えば、OpenAIやAnthropicなどのLLMをGUIから簡単に設定でき、構造化出力を通じてLLMの応答をアプリケーションに組み込みやすい形式で扱えます。
Pythonによる手動設定に比べて、Difyは設定の手間が大きく軽減され、プロトタイピングや本番運用に強みを発揮します。
6. 参考リンク
最後まで読んでいただきありがとうございます。
ご意見、ご質問などございましたらお気軽にコメントください。


コメント