Skip to main content
⚠️ このドキュメントはAIによって自動翻訳されています。不正確な部分がある場合は、英語版を参照してください。
カスタムモデルとは、自分でデプロイまたは設定するLLMを指します。このドキュメントでは、Xinferenceモデルを例として、カスタムモデルをモデルプラグインに統合する方法を説明します。 デフォルトでは、カスタムモデルは自動的に2つのパラメータ(モデルタイプモデル名)を含み、プロバイダーYAMLファイルで追加の定義は必要ありません。 プロバイダー設定ファイルにvalidate_provider_credentialを実装する必要はありません。ランタイム中、ユーザーが選択したモデルタイプまたはモデル名に基づいて、Difyは自動的に対応するモデルレイヤーのvalidate_credentialsメソッドを呼び出して認証情報を検証します。

カスタムモデルプラグインの統合

以下はカスタムモデルを統合する手順です:
  1. モデルプロバイダーファイルの作成
    カスタムモデルに含まれるモデルタイプを特定します。
  2. モデルタイプごとのコードファイルの作成
    モデルのタイプ(例:llmtext_embedding)に応じて、別々のコードファイルを作成します。各モデルタイプが個別の論理レイヤーに整理されていることを確認し、保守と将来の拡張を容易にします。
  3. モデル呼び出しロジックの開発
    各モデルタイプモジュール内で、そのモデルタイプの名前を付けたPythonファイル(例:llm.py)を作成します。ファイル内でシステムのモデルインターフェース仕様に準拠した特定のモデルロジックを実装するクラスを定義します。
  4. プラグインのデバッグ
    新しいプロバイダー機能のユニットテストと統合テストを作成し、すべてのコンポーネントが意図どおりに動作することを確認します。

1. モデルプロバイダーファイルの作成

プラグインの/providerディレクトリに、xinference.yamlファイルを作成します。 XinferenceファミリーのモデルはLLMText EmbeddingRerankモデルタイプをサポートしているため、xinference.yamlにはこれら3つすべてを含める必要があります。 例:
次に、provider_credential_schemaを定義します。Xinferenceはテキスト生成、エンベディング、リランキングモデルをサポートしているため、以下のように設定できます:
Xinferenceのすべてのモデルにはmodel_nameが必要です:
Xinferenceはローカルでデプロイする必要があるため、ユーザーはサーバーアドレス(server_url)とモデルUIDを提供する必要があります。例えば:
これらのパラメータを定義したら、カスタムモデルプロバイダーのYAML設定は完了です。次に、この設定で定義された各モデルの機能コードファイルを作成します。

2. モデルコードの開発

Xinferenceはllm、rerank、speech2text、ttsをサポートしているため、/models下に対応するディレクトリを作成し、それぞれに機能コードを含める必要があります。 以下はllmタイプのモデルの例です。llm.pyという名前のファイルを作成し、__base.large_language_model.LargeLanguageModelを拡張するXinferenceAILargeLanguageModelなどのクラスを定義します。このクラスには以下を含める必要があります:
  • LLM呼び出し
LLMを呼び出すためのコアメソッドで、ストリーミングと同期応答の両方をサポートします:
ストリーミングと同期応答を処理するために2つの別々の関数が必要です。Pythonはyieldを含む関数をGenerator型を返すジェネレータとして扱うため、これらを分離することをお勧めします:
  • 入力トークンの事前計算
モデルがトークンカウントインターフェースを提供していない場合は、単に0を返します:
または、AIModel基底クラスからself._get_num_tokens_by_gpt2(text: str)を呼び出すことができます。これはGPT-2トークナイザーを使用します。これは近似値であり、モデルと正確に一致しない場合があることに注意してください。
  • モデル認証情報の検証
プロバイダーレベルの認証情報チェックと似ていますが、単一のモデルにスコープされます:
  • 動的モデルパラメータスキーマ
事前定義モデルとは異なり、モデルがサポートするパラメータを定義するYAMLはありません。パラメータスキーマを動的に生成する必要があります。 例えば、Xinferenceはmax_tokenstemperaturetop_pをサポートしています。他のプロバイダー(例:OpenLLM)は、特定のモデルでのみtop_kなどのパラメータをサポートする場合があります。つまり、各モデルの機能に合わせてスキーマを適応させる必要があります:
  • エラーマッピング
モデル呼び出し中にエラーが発生した場合、ランタイムが認識する適切なInvokeErrorタイプにマッピングします。これにより、Difyは異なるエラーを標準化された方法で処理できます: ランタイムエラー:
インターフェースメソッドの詳細については、モデルドキュメントを参照してください。 このガイドで説明した完全なコードファイルを表示するには、GitHubリポジトリにアクセスしてください。

3. プラグインのデバッグ

開発が完了したら、プラグインをテストして正しく動作することを確認します。詳細については、以下を参照してください:

プラグインのデバッグ

4. プラグインの公開

このプラグインをDify Marketplaceに掲載したい場合は、以下を参照してください: Dify Marketplaceに公開

さらに探索

クイックスタート: プラグインエンドポイントドキュメント:
Edit this page | Report an issue