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