Difyのプラグイン開発の世界へようこそ!Difyの強力な機能は、コミュニティ貢献者の共同の努力なしにはありえません。たとえプロのプログラマーでなくても、AI技術に情熱を持ち、資料を調べる意欲があれば、Difyにより多くの、より新しいAIモデルをサポートするなど、Difyに貢献できると信じています。

この記事では、最も簡潔な方法で、最も一般的で簡単な貢献、つまりDifyが既にサポートしているモデルプロバイダーに、新しいモデルタイプを追加する方法を説明します。この方法は通常、設定ファイルの変更のみが必要で、コードを書く必要がないため、最初の貢献として非常に適しています!

関連概念:開始する前に、モデルプラグインのドキュメントを読んで、モデルプラグインの基本概念と構造を理解することをお勧めします。

この迅速な統合方法は、以下の場合に適しています:

  • 新しいモデルが、Difyが既にプラグインでサポートしているプロバイダー(OpenAI、Google Gemini、Anthropic Claudeなど)に属している場合。
  • 新しいモデルが、同じシリーズの他のモデルと同じAPI認証および基本的な呼び出しロジックを使用している場合。
  • 主な違いが、モデルID、コンテキスト長、最大トークン数、価格設定などの設定パラメーターにある場合。

(追加する必要のあるモデルが新しいAPIロジックを必要とするか、特殊な機能をサポートする場合、Pythonコードの記述が必要になります。新しいモデルプロバイダーの作成 で詳細なガイドを参照してください。)

準備作業:

  • 基本的なGit操作(Fork、Clone、Pull Request)に慣れていること。
  • GitHubアカウント。
  • Difyプラグイン開発ツールキットをインストールし、設定済みであること(開発ツールの初期化を参照)。

操作手順:

  1. 公式プラグインリポジトリをフォーク&クローン:

    • Dify公式プラグインリポジトリ https://github.com/langgenius/dify-official-plugins にアクセスします。
    • 「Fork」ボタンをクリックして、リポジトリを自分のGitHubアカウントにフォークします。
    • Gitを使用して、フォークしたリポジトリをローカルコンピュータにクローンします。
  2. モデル設定ファイルを見つけてコピー:

    • ローカルリポジトリで、models/ ディレクトリに移動し、モデルを追加したいプロバイダーのフォルダ(例:vertex_ai)を見つけます。
    • そのプロバイダーに対応するモデルタイプのサブディレクトリ(通常はテキスト生成モデルの場合 models/llm/)に入ります。
    • そのディレクトリ内で、追加したい新しいモデルに最も似ている既存モデルのYAML設定ファイル(例:gemini-1.0-pro-001.yaml)を見つけます。
    • このYAMLファイルをコピーし、新しいモデルタイプを明確に識別できる名前に変更します(例:gemini-1.5-pro-latest.yaml)。
  3. モデル設定の変更 (YAML):

    • 先ほど名前を変更したYAMLファイル(例:gemini-1.5-pro-latest.yaml)を開きます。
    • 核心ステップ: モデルプロバイダーの公式ドキュメントを参照し、ファイル内の以下の重要な情報を注意深く確認して変更します:
      • model: 必須 新しいモデルタイプの公式API識別子に更新します。
      • label: 必須 Difyインターフェースでユーザーに表示されるモデル名に更新します(en_USzh_Hans の両方の言語を提供することをお勧めします)。
      • model_properties: context_size(コンテキストウィンドウサイズ)を更新します。
      • parameter_rules: モデルパラメータの制限、特に max_tokens(最大出力トークン数)の defaultminmax 値を確認して更新します。
      • pricing: モデルの入力(input)と出力(output)の価格設定、および単位(unit、通常は百万トークンを表す 0.000001)と通貨(currency)を更新します。
    • (参考) モデルYAMLファイルの各フィールドの詳細な仕様については、モデル設計ルール および モデルスキーマ定義 を参照してください。

    例 (Gemini 1.5 Pro の追加):

    パラメータ既存モデルの可能性 (例)新しい Gemini 1.5 Pro (例)説明
    modelgemini-1.0-pro-001gemini-1.5-pro-latest必須 公式モデルIDに変更
    label: en_USGemini 1.0 ProGemini 1.5 Pro必須 ユーザーに表示されるラベルに変更
    context_size307201048576必須 公式ドキュメントに基づいて変更
    max_tokens (下)20488192必須 公式ドキュメントに基づいてデフォルト/最大値を変更
  4. プロバイダーマニフェストのバージョンを更新:

    • そのモデルプロバイダーのルートディレクトリ(例:models/vertex_ai/)に戻ります。
    • manifest.yaml ファイルを見つけて開きます。
    • その中の version フィールドをマイナーバージョン番号でインクリメントします(例:version: 0.0.8 -> version: 0.0.9)。これにより、Difyにこれが更新であることを伝えます。
  5. パッケージ化とローカルテスト:

    • ターミナル(コマンドラインツール)を開きます。
    • 現在のディレクトリが dify-official-plugins リポジトリのルートディレクトリ(つまり、modelstools などのフォルダが含まれるディレクトリ)であることを確認してください。
    • パッケージ化コマンドを実行します:
    # <provider_name> を実際のプロバイダーディレクトリ名(例: cohere や vertex_ai)に置き換えます
    dify plugin package models/<provider_name>
    
    • 成功すると、plugin packaged successfully, output path: <provider_name>.difypkg のようなメッセージが表示され、現在のプロジェクトのルートディレクトリに <provider_name>.difypkg という名前のプラグインパッケージファイルが生成されます。
    • Difyインスタンス(ローカルデプロイまたはクラウドバージョンのいずれか)にログインします。
    • Difyページ最上部のナビゲーションバー右側にある 「プラグイン」 メニュー項目をクリックします。
    • プラグインページで、「プラグインをインストール」 ボタンをクリックします。
    • 「ローカルプラグイン」 タブを選択します。
    • アップロードエリアをクリックし、先ほどローカルで生成した <provider_name>.difypkg ファイルを選択またはドラッグアンドドロップしてアップロードします。
    • プラグインのインストールまたは更新が完了するのを待ちます。
    • インストールが成功したら、通常、「設定」->「モデルプロバイダー」に移動して対応するプロバイダーを見つけ、API認証情報(以前に設定していない場合)を設定する必要があります。
    • 新しいDifyアプリケーションを作成するか、既存のアプリケーションを編集し、「プロンプトエンジニアリング」->「モデル」設定で、新しく追加したモデルを選択してみてください。簡単な会話や呼び出しテストを行い、正常に動作し、期待される結果が返されることを確認します。
  6. コントリビューションを提出:

    • ローカルテストで問題がなければ、変更(新しいモデルYAMLファイルと更新された manifest.yaml)をGitでコミット(commit)し、フォークしたGitHubリポジトリにプッシュ(push)します。
    • GitHub上で、langgenius/dify-official-plugins のメインリポジトリに対してプルリクエスト(PR)を作成します。PRの説明には、どのモデルを追加したかを簡潔に説明し、そのモデルの公式ドキュメントへのリンクを添付して、レビュー担当者がパラメータを確認しやすくします。

それで、次は?

PRがレビューされマージされると、あなたの貢献はDify公式プラグインの一部となり、すべてのDifyユーザーがこの新しいモデルを簡単に利用できるようになります!

この迅速な統合方法は、Difyが新しいモデルをサポートするための最速の方法です。もちろん、将来このモデルがより複雑な機能(例えば、画像入力、関数呼び出しなど)をサポートする必要がある場合、経験豊富な開発者がプラグインをコードレベルで更新する必要があるかもしれません。しかし、あなたが今完了したこのステップは、既に非常に価値のある貢献です!

さらに探求する: