モデルインターフェース
本書では、Difyモデルプラグイン開発に必要なインターフェース仕様について詳しく説明します。これには、モデルプロバイダーの実装、5つのモデルタイプ(LLM、TextEmbedding、Rerank、Speech2text、Text2speech)のインターフェース定義、およびPromptMessage、LLMResultなどの関連データ構造の完全な仕様が含まれます。本書は、開発者が様々なモデル統合を実装する際の開発リファレンスとして適しています。
ここでは、プロバイダーと各モデルタイプが実装する必要のあるインターフェースメソッドとパラメータについて説明します。モデルプラグインを開発する前に、まずモデル設計ルールとモデルプラグイン紹介を読むことをお勧めします。
モデルプロバイダー
__base.model_provider.ModelProvider
ベースクラスを継承し、以下のインターフェースを実装します:
credentials
(object) クレデンシャル情報
クレデンシャル情報のパラメータは、プロバイダーのYAML設定ファイルの provider_credential_schema
で定義され、api_key
などが渡されます。検証に失敗した場合は、errors.validate.CredentialsValidateFailedError
エラーをスローしてください。注:事前定義モデルはこのインターフェースを完全に実装する必要がありますが、カスタムモデルプロバイダーは以下のように簡単な実装で済みます:
モデル
モデルは5つの異なるモデルタイプに分かれ、モデルタイプごとに継承するベースクラスや実装が必要なメソッドも異なります。
共通インターフェース
すべてのモデルは、以下の2つのメソッドを共通して実装する必要があります:
- モデルクレデンシャルの検証
プロバイダーのクレデンシャル検証と同様に、ここでは個別のモデルに対して検証を行います。
パラメータ:
model
(string) モデル名credentials
(object) クレデンシャル情報
クレデンシャル情報のパラメータは、プロバイダーのYAML設定ファイルの provider_credential_schema
または model_credential_schema
で定義され、api_key
などが渡されます。検証に失敗した場合は、errors.validate.CredentialsValidateFailedError
エラーをスローしてください。
- 呼び出し例外エラーマッピングテーブル
モデル呼び出し時に例外が発生した場合、Runtime が指定する InvokeError
タイプにマッピングする必要があります。これにより、Dify は異なるエラーに対して異なる後続処理を行うことができます。Runtime Errors:
InvokeConnectionError
呼び出し接続エラーInvokeServerUnavailableError
呼び出し先サーバー利用不可InvokeRateLimitError
呼び出しレート制限超過InvokeAuthorizationError
呼び出し認証失敗InvokeBadRequestError
呼び出しパラメータ不正
対応するエラーを直接スローし、以下のように定義することも可能です。これにより、その後の呼び出しで InvokeConnectionError
などの例外を直接スローできます。
LLM
__base.large_language_model.LargeLanguageModel
ベースクラスを継承し、以下のインターフェースを実装します:
- LLM 呼び出し
LLM 呼び出しのコアメソッドを実装し、ストリーミングと同期的な返却の両方をサポートできます。
- パラメータ:
model
(string) モデル名credentials
(object) クレデンシャル情報
クレデンシャル情報のパラメータは、プロバイダーのYAML設定ファイルの 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] ユーザーの一意の識別子。プロバイダーが不正利用を監視および検出するのに役立ちます。 -
返り値
ストリーミング出力は Generator[LLMResultChunk] を返し、非ストリーミング出力は LLMResult を返します。
- 入力トークンの事前計算
モデルがトークン事前計算インターフェースを提供していない場合、直接 0 を返すことができます。
パラメータの説明は上記の LLM 呼び出し
を参照してください。このインターフェースは、対応する model
に基づいて適切な tokenizer
を選択して計算する必要があります。対応するモデルが tokenizer
を提供していない場合は、AIModel
ベースクラスの _get_num_tokens_by_gpt2(text: str)
メソッドを使用して計算できます。
- カスタムモデルルールの取得 [オプション]
プロバイダーがカスタムLLMの追加をサポートしている場合、このメソッドを実装することで、カスタムモデルがモデルルールを取得できるようになります。デフォルトでは None を返します。
OpenAI
プロバイダーのほとんどのファインチューニングモデルでは、ファインチューニングモデル名(例:gpt-3.5-turbo-1106
)からベースモデルを取得し、そのベースモデルの事前定義パラメータルールを返すことができます。OpenAI の具体的な実装を参照してください。
TextEmbedding
__base.text_embedding_model.TextEmbeddingModel
ベースクラスを継承し、以下のインターフェースを実装します:
- Embedding 呼び出し
-
パラメータ:
-
model
(string) モデル名 -
credentials
(object) クレデンシャル情報
クレデンシャル情報のパラメータは、プロバイダーのYAML設定ファイルの provider_credential_schema
または model_credential_schema
で定義され、api_key
などが渡されます。
-
texts
(array[string]) テキストリスト、バッチ処理可能 -
user
(string) [optional] ユーザーの一意の識別子。プロバイダーが不正利用を監視および検出するのに役立ちます。 -
返り値:
TextEmbeddingResult エンティティ。
- トークンの事前計算
パラメータの説明は上記の Embedding 呼び出し
を参照してください。
上記の LargeLanguageModel
と同様に、このインターフェースは対応する model
に基づいて適切な tokenizer
を選択して計算する必要があります。対応するモデルが tokenizer
を提供していない場合は、AIModel
ベースクラスの _get_num_tokens_by_gpt2(text: str)
メソッドを使用して計算できます。
Rerank
__base.rerank_model.RerankModel
ベースクラスを継承し、以下のインターフェースを実装します:
- rerank 呼び出し
-
パラメータ:
-
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] ユーザーの一意の識別子。プロバイダーが不正利用を監視および検出するのに役立ちます。 -
返り値:
RerankResult エンティティ。
Speech2text
__base.speech2text_model.Speech2TextModel
ベースクラスを継承し、以下のインターフェースを実装します:
- Invoke 呼び出し
-
パラメータ:
-
model
(string) モデル名 -
credentials
(object) クレデンシャル情報 クレデンシャル情報のパラメータは、プロバイダーのYAML設定ファイルのprovider_credential_schema
またはmodel_credential_schema
で定義され、api_key
などが渡されます。 -
file
(File) ファイルストリーム -
user
(string) [optional] ユーザーの一意の識別子。プロバイダーが不正利用を監視および検出するのに役立ちます。 -
返り値:
音声変換された文字列。
Text2speech
__base.text2speech_model.Text2SpeechModel
ベースクラスを継承し、以下のインターフェースを実装します:
- Invoke 呼び出し
-
パラメータ:
-
model
(string) モデル名 -
credentials
(object) 認証情報 認証情報のパラメータは、プロバイダーのYAML設定ファイルのprovider_credential_schema
またはmodel_credential_schema
で定義され、api_key
などが渡されます。 -
content_text
(string) 変換が必要なテキストコンテンツ -
streaming
(bool) ストリーミング出力を行うかどうか -
user
(string) [optional] ユーザーの一意の識別子 プロバイダーが不正利用を監視および検出するのに役立ちます。 -
戻り値:
テキスト変換後の音声ストリーム。
Moderation
__base.moderation_model.ModerationModel
ベースクラスを継承し、以下のインターフェースを実装します:
- Invoke 呼び出し
-
パラメータ:
-
model
(string) モデル名 -
credentials
(object) 認証情報 認証情報のパラメータは、プロバイダーのYAML設定ファイルのprovider_credential_schema
またはmodel_credential_schema
で定義され、api_key
などが渡されます。 -
text
(string) テキストコンテンツ -
user
(string) [optional] ユーザーの一意の識別子 プロバイダーが不正利用を監視および検出するのに役立ちます。 -
戻り値:
Falseは渡されたテキストが安全であることを示し、Trueはその逆を示します。
エンティティ
PromptMessageRole
メッセージロール
PromptMessageContentType
メッセージコンテントタイプ。プレーンテキストと画像に分かれます。
PromptMessageContent
メッセージコンテントのベースクラス。パラメータ宣言専用であり、初期化できません。
現在、テキストと画像の2つのタイプをサポートしており、テキストと複数の画像を同時に渡すことができます。
それぞれ TextPromptMessageContent
と ImagePromptMessageContent
を初期化して渡す必要があります。
TextPromptMessageContent
画像とテキストを渡す場合、その中のテキストはこのエンティティを content
リストの一部として構築する必要があります。
ImagePromptMessageContent
画像とテキストを渡す場合、その中の画像はこのエンティティを content
リストの一部として構築する必要があります。
data
は url
または画像の base64
エンコードされた文字列です。
PromptMessage
すべてのRoleメッセージボディのベースクラス。パラメータ宣言専用であり、初期化できません。
UserPromptMessage
UserMessageメッセージボディ。ユーザーメッセージを表します。
AssistantPromptMessage
モデルの返信メッセージを表します。通常、few-shots
またはチャット履歴の入力に使用されます。
この tool_calls
は、モデルを呼び出す際に tools
を渡した後、モデルから返される tool call
のリストです。
SystemPromptMessage
システムメッセージを表します。通常、モデルに設定するシステム指示に使用されます。
ToolPromptMessage
ツールメッセージを表します。ツールの実行後に結果をモデルに渡し、次のステップを計画するために使用されます。
ベースクラスの content
にツールの実行結果を渡します。
PromptMessageTool
LLMResult
LLMResultChunkDelta
ストリーミングレスポンスにおける各イテレーション内部の delta
エンティティ
LLMResultChunk
ストリーミングレスポンスにおける各イテレーションのエンティティ
LLMUsage
TextEmbeddingResult
EmbeddingUsage
RerankResult
RerankDocument
関連リソース
- モデル設計ルール - モデル設定の仕様を理解する
- モデルプラグイン紹介 - モデルプラグインの基本概念を素早く理解する
- 新しいモデルへの迅速な接続 - 既存のプロバイダーに新しいモデルを追加する方法を学ぶ
- 新規モデルプロバイダーの作成 - 全く新しいモデルプロバイダーを開発する方法を学ぶ