本書では、Difyモデルプラグイン開発に必要なインターフェース仕様について詳しく説明します。これには、モデルプロバイダーの実装、5つのモデルタイプ(LLM、TextEmbedding、Rerank、Speech2text、Text2speech)のインターフェース定義、およびPromptMessage、LLMResultなどの関連データ構造の完全な仕様が含まれます。本書は、開発者が様々なモデル統合を実装する際の開発リファレンスとして適しています。
__base.model_provider.ModelProvider
ベースクラスを継承し、以下のインターフェースを実装します:
credentials
(object) クレデンシャル情報provider_credential_schema
で定義され、api_key
などが渡されます。検証に失敗した場合は、errors.validate.CredentialsValidateFailedError
エラーをスローしてください。注:事前定義モデルはこのインターフェースを完全に実装する必要がありますが、カスタムモデルプロバイダーは以下のように簡単な実装で済みます:
model
(string) モデル名credentials
(object) クレデンシャル情報provider_credential_schema
または model_credential_schema
で定義され、api_key
などが渡されます。検証に失敗した場合は、errors.validate.CredentialsValidateFailedError
エラーをスローしてください。
InvokeError
タイプにマッピングする必要があります。これにより、Dify は異なるエラーに対して異なる後続処理を行うことができます。Runtime Errors:
InvokeConnectionError
呼び出し接続エラーInvokeServerUnavailableError
呼び出し先サーバー利用不可InvokeRateLimitError
呼び出しレート制限超過InvokeAuthorizationError
呼び出し認証失敗InvokeBadRequestError
呼び出しパラメータ不正InvokeConnectionError
などの例外を直接スローできます。
__base.large_language_model.LargeLanguageModel
ベースクラスを継承し、以下のインターフェースを実装します:
model
(string) モデル名credentials
(object) クレデンシャル情報provider_credential_schema
または model_credential_schema
で定義され、api_key
などが渡されます。
prompt_messages
(array[PromptMessage]) プロンプトリストCompletion
タイプの場合、リストには UserPromptMessage 要素を1つ渡すだけで十分です。モデルが Chat
タイプの場合、メッセージに応じて SystemPromptMessage、UserPromptMessage、AssistantPromptMessage、ToolPromptMessage 要素のリストを渡す必要があります。
model_parameters
(object) モデルパラメータ。モデルパラメータはモデルのYAML設定の parameter_rules
で定義されます。
tools
(array[PromptMessageTool]) [optional] ツールリスト。function calling
における function
と同等です。つまり、tool calling に渡すツールリストです。
stop
(array[string]) [optional] ストップシーケンス。モデルの返却は、ストップシーケンスで定義された文字列の直前で停止します。
stream
(bool) ストリーミング出力かどうか、デフォルトは True。ストリーミング出力は Generator[LLMResultChunk] を返し、非ストリーミング出力は LLMResult を返します。
user
(string) [optional] ユーザーの一意の識別子。プロバイダーが不正利用を監視および検出するのに役立ちます。
LLM 呼び出し
を参照してください。このインターフェースは、対応する model
に基づいて適切な tokenizer
を選択して計算する必要があります。対応するモデルが tokenizer
を提供していない場合は、AIModel
ベースクラスの _get_num_tokens_by_gpt2(text: str)
メソッドを使用して計算できます。
OpenAI
プロバイダーのほとんどのファインチューニングモデルでは、ファインチューニングモデル名(例:gpt-3.5-turbo-1106
)からベースモデルを取得し、そのベースモデルの事前定義パラメータルールを返すことができます。OpenAI の具体的な実装を参照してください。
__base.text_embedding_model.TextEmbeddingModel
ベースクラスを継承し、以下のインターフェースを実装します:
model
(string) モデル名
credentials
(object) クレデンシャル情報
provider_credential_schema
または model_credential_schema
で定義され、api_key
などが渡されます。
texts
(array[string]) テキストリスト、バッチ処理可能
user
(string) [optional] ユーザーの一意の識別子。プロバイダーが不正利用を監視および検出するのに役立ちます。
Embedding 呼び出し
を参照してください。
上記の LargeLanguageModel
と同様に、このインターフェースは対応する model
に基づいて適切な tokenizer
を選択して計算する必要があります。対応するモデルが tokenizer
を提供していない場合は、AIModel
ベースクラスの _get_num_tokens_by_gpt2(text: str)
メソッドを使用して計算できます。
__base.rerank_model.RerankModel
ベースクラスを継承し、以下のインターフェースを実装します:
model
(string) モデル名
credentials
(object) クレデンシャル情報
クレデンシャル情報のパラメータは、プロバイダーのYAML設定ファイルの provider_credential_schema
または model_credential_schema
で定義され、api_key
などが渡されます。
query
(string) クエリリクエストの内容
docs
(array[string]) リランキングが必要なドキュメント(チャンク)のリスト
score_threshold
(float) [optional] スコアのしきい値
top_n
(int) [optional] 上位n個のドキュメント(チャンク)を取得
user
(string) [optional] ユーザーの一意の識別子。プロバイダーが不正利用を監視および検出するのに役立ちます。
__base.speech2text_model.Speech2TextModel
ベースクラスを継承し、以下のインターフェースを実装します:
model
(string) モデル名
credentials
(object) クレデンシャル情報
クレデンシャル情報のパラメータは、プロバイダーのYAML設定ファイルの provider_credential_schema
または model_credential_schema
で定義され、api_key
などが渡されます。
file
(File) ファイルストリーム
user
(string) [optional] ユーザーの一意の識別子。プロバイダーが不正利用を監視および検出するのに役立ちます。
__base.text2speech_model.Text2SpeechModel
ベースクラスを継承し、以下のインターフェースを実装します:
model
(string) モデル名
credentials
(object) 認証情報
認証情報のパラメータは、プロバイダーのYAML設定ファイルの provider_credential_schema
または model_credential_schema
で定義され、api_key
などが渡されます。
content_text
(string) 変換が必要なテキストコンテンツ
streaming
(bool) ストリーミング出力を行うかどうか
user
(string) [optional] ユーザーの一意の識別子
プロバイダーが不正利用を監視および検出するのに役立ちます。
__base.moderation_model.ModerationModel
ベースクラスを継承し、以下のインターフェースを実装します:
model
(string) モデル名
credentials
(object) 認証情報
認証情報のパラメータは、プロバイダーのYAML設定ファイルの provider_credential_schema
または model_credential_schema
で定義され、api_key
などが渡されます。
text
(string) テキストコンテンツ
user
(string) [optional] ユーザーの一意の識別子
プロバイダーが不正利用を監視および検出するのに役立ちます。
TextPromptMessageContent
と ImagePromptMessageContent
を初期化して渡す必要があります。
content
リストの一部として構築する必要があります。
content
リストの一部として構築する必要があります。
data
は url
または画像の base64
エンコードされた文字列です。
few-shots
またはチャット履歴の入力に使用されます。
tool_calls
は、モデルを呼び出す際に tools
を渡した後、モデルから返される tool call
のリストです。
content
にツールの実行結果を渡します。
delta
エンティティ