モデルスキーマ
モデルスキーマ
ここでは、プロバイダーと各モデルタイプが実装する必要があるインターフェースメソッドとパラメータについて説明します。
モデルプロバイダー
__base.model_provider.ModelProvider 基底クラスを継承し、以下のインターフェースを実装します。
def validate_provider_credentials(self, credentials: dict) -> None:
"""
Validate provider credentials
You can choose any validate_credentials method of model type or implement validate method by yourself,
such as: get model list api
if validate failed, raise exception
:param credentials: provider credentials, credentials form defined in `provider_credential_schema`.
"""credentials(object): 認証情報
認証情報のパラメータは、サプライヤーの YAML 設定ファイルの provider_credential_schemaで定義され、api_keyなどが渡されます。検証に失敗した場合は、errors.validate.CredentialsValidateFailedErrorエラーを発生させてください。注: プリ定義モデルはこのインターフェースを完全に実装する必要があります。カスタムモデルサプライヤーは、以下のような簡単な実装で十分です。
class XinferenceProvider(Provider):
def validate_provider_credentials(self, credentials: dict) -> None:
passモデル
モデルは5つの異なるモデルタイプに分類され、異なるモデルタイプは異なる基底クラスを継承し、実装する必要があるメソッドも異なります。
共通インターフェース
すべてのモデルは、以下の2つのメソッドを共通して実装する必要があります。
モデル認証情報の検証
サプライヤーの認証情報検証と同様に、ここでは個々のモデルに対して検証を行います。
パラメータ:
model(string): モデル名credentials(object): 認証情報
認証情報のパラメータは、サプライヤーの YAML 設定ファイルのprovider_credential_schemaまたはmodel_credential_schemaで定義され、api_keyなどが渡されます。検証に失敗した場合は、errors.validate.CredentialsValidateFailedErrorエラーを発生させてください。
呼び出しエラーのマッピング
モデルの呼び出し中に例外が発生した場合、Dify が異なるエラーに対して適切な後続処理を実行できるように、Runtime で定義されたInvokeErrorタイプにマッピングする必要があります。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 と同等です。つまり、ツール呼び出しのためのツール一覧を渡します。
- 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) [オプション]: ユーザーの一意な識別子ベンダーが不正利用を監視・検出するのに役立ちます。
戻り値:
テキスト変換後の音声ストリーム。
Moderation (モデレーション)
__base.moderation_model.ModerationModel を継承し、以下のインターフェースを実装します。
Invoke (呼び出し)
パラメータ:
model(string): モデル名credentials(object): 認証情報認証情報のパラメータは、ベンダーの YAML 設定ファイルの
provider_credential_schemaまたはmodel_credential_schemaで定義され、api_keyなどが渡されます。
text(string): テキストコンテンツuser(string) [オプション]: ユーザーの一意な識別子ベンダーが不正利用を監視・検出するのに役立ちます。
戻り値:
入力テキストが安全な場合は
False、そうでない場合はTrueを返します。
Entity(エンティティ)
PromptMessageRole (プロンプトメッセージの役割)
メッセージの役割を定義する列挙型です。
PromptMessageContentType (プロンプトメッセージのコンテンツタイプ)
メッセージコンテンツのタイプを定義する列挙型です。テキストと画像の2種類があります。
PromptMessageContent (プロンプトメッセージのコンテンツ)
メッセージコンテンツの基底クラスです。パラメータ定義のみに用いられ、直接の初期化はできません。
現在、テキストと画像の2種類のタイプがサポートされており、テキストと複数の画像を同時に渡すことができます。それぞれ TextPromptMessageContent および ImagePromptMessageContent を初期化して渡す必要があります。
TextPromptMessageContent
テキストと画像を同時に送信する場合、テキストはこのエンティティを content リストの一部として構成する必要があります。
ImagePromptMessageContent
画像とテキストを同時に送信する場合、画像はこのエンティティを content リストの一部として構成する必要があります。
data には、画像の url または base64 エンコードされた文字列を指定できます。
PromptMessage
すべての Role メッセージの基底クラスで、パラメータ定義のみに使用され、インスタンス化はできません。
UserPromptMessage
ユーザーメッセージを表す UserMessage のメッセージボディです。
AssistantPromptMessage
モデルからの応答メッセージを表し、通常は few-shots やチャット履歴の入力に使用されます。
tool_calls は、モデルに tools が渡された後、モデルから返されるツール呼び出しのリストです。
SystemPromptMessage
システムメッセージを表し、通常はモデルにシステム命令を設定するために使用されます。
ToolPromptMessage
ツールメッセージを表し、ツールの実行結果をモデルに渡して、次の計画を立てるために使用されます。
基底クラスの content にはツールの実行結果を渡します。
PromptMessageTool
LLMResult
LLMResultChunkDelta
ストリーミング結果の各イテレーションにおける差分エンティティ
LLMResultChunk
ストリーミング結果の各イテレーションエンティティ
LLMUsage
TextEmbeddingResult
EmbeddingUsage
RerankResult
RerankDocument
Last updated