validate_provider_credentialを実装する必要はありません。Runtimeは、ユーザーが選択したモデルタイプまたはモデル名に基づいて、対応するモデルレイヤーのvalidate_credentialsメソッドを自動的に呼び出して検証を行います。
カスタムモデルプラグインの統合
カスタムモデルの統合は、以下のステップに分かれます:- モデルプロバイダーファイルの作成 カスタムモデルに含まれるモデルタイプを明確にします。
-
モデルタイプに基づいたコードファイルの作成
モデルのタイプ(例:
llmまたはtext_embedding)に基づいてコードファイルを作成します。各モデルタイプが独立したロジックレイヤーを持つようにし、保守と拡張を容易にします。 - 異なるモデルモジュールに基づいたモデル呼び出しコードの記述 対応するモデルタイプモジュールの下に、モデルタイプと同名のPythonファイル(例:llm.py)を作成します。ファイル内で具体的なモデルロジックを実装するクラスを定義し、そのクラスはシステムのモデルインターフェース仕様に準拠する必要があります。
- プラグインのデバッグ 新たに追加されたプロバイダー機能に対して単体テストと結合テストを作成し、すべての機能モジュールが期待通りに動作することを確認します。
1. モデルプロバイダーファイルの作成
プラグインプロジェクトの/providerパスの下に、新しいxinference.yamlファイルを作成します。
XinferenceファミリーモデルはLLM、Text Embedding、Rerankモデルタイプをサポートしているため、xinference.yamlファイルにこれらのモデルタイプを含める必要があります。
サンプルコード:
provider_credential_schemaフィールドを定義する必要があります。Xinferenceはtext-generation、embeddings、rerankingモデルをサポートしています。サンプルコードは以下の通りです:
model_nameを定義する必要があります。
2. モデルコードの記述
Xinferenceモデルプロバイダーのモデルタイプには、llm、rerank、speech2text、ttsタイプが含まれるため、/modelsパスの下に各モデルタイプごとに独立したグループを作成し、対応する機能コードファイルを作成する必要があります。
以下では、llmタイプを例に、llm.pyコードファイルの作成方法を説明します。コード作成時には、XinferenceAILargeLanguageModelという名前のXinference LLMクラスを作成し、__base.large_language_model.LargeLanguageModelベースクラスを継承し、以下のいくつかのメソッドを実装する必要があります:
- LLM呼び出し LLM呼び出しのコアメソッドであり、ストリーミングと同期の両方のレスポンスをサポートします。
yieldキーワードが含まれる関数をジェネレータ関数として認識し、返されるデータ型はGeneratorに固定されるため、同期応答とストリーミング応答をそれぞれ実装する必要があります。例えば、以下のサンプルコードです:
この例では簡略化されたパラメータを使用しています。実際のコード作成時には、上記のパラメータリストを参照してください。
- 入力トークンの事前計算 モデルがトークンを事前計算するインターフェースを提供していない場合は、直接0を返すことができます。
self._get_num_tokens_by_gpt2(text: str)メソッドを使用してトークンを計算できます。このメソッドはAIModelベースクラスにあり、GPT-2のTokenizerを使用して計算します。ただし、これは代替案であり、計算結果にはある程度の誤差が生じる可能性があることに注意してください。
- モデル認証情報検証 プロバイダーの認証情報検証と同様に、ここでは個別のモデルに対して検証を行います。
-
モデルパラメータスキーマ
事前定義済みモデルタイプとは異なり、YAMLファイルでモデルがサポートするパラメータが事前設定されていないため、モデルパラメータのスキーマを動的に生成する必要があります。
例えば、Xinferenceは
max_tokens、temperature、top_pの3つのモデルパラメータをサポートしています。しかし、一部のプロバイダー(例えばOpenLLM)は、具体的なモデルによって異なるパラメータをサポートします。 例を挙げると、プロバイダーOpenLLMのAモデルはtop_kパラメータをサポートしていますが、Bモデルはtop_kをサポートしていません。この場合、各モデルに対応するパラメータスキーマを動的に生成する必要があります。サンプルコードは以下の通りです:
-
呼び出し例外エラーマッピング表
モデル呼び出しが例外をスローした場合、Runtimeが指定する
InvokeErrorタイプにマッピングする必要があります。これにより、Difyが異なるエラーに対して異なる後続処理を行うのに便利です。 Runtimeエラー:InvokeConnectionError呼び出し接続エラーInvokeServerUnavailableError呼び出しサービス利用不可InvokeRateLimitError呼び出しレート制限到達InvokeAuthorizationError呼び出し認証失敗InvokeBadRequestError呼び出しパラメータ不正
3. プラグインのデバッグ
プラグインの開発が完了したら、次にプラグインが正常に動作するかをテストする必要があります。詳細については、以下を参照してください: debug-plugin.md4. プラグインの公開
プラグインをDify Marketplaceに公開したい場合は、以下の内容を参照してください: publish-to-dify-marketplaceさらに探索
クイックスタート: プラグインインターフェースドキュメント:このページを編集する | 問題を報告する