モデルスキーマ

モデルスキーマ

ここでは、プロバイダーと各モデルタイプが実装する必要があるインターフェースメソッドとパラメータについて説明します。

モデルプロバイダー

__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 などが渡されます。

モデルが Completion タイプの場合、リストにはUserPromptMessage 要素を1つだけ渡します。モデルが Chat タイプの場合、メッセージに応じてSystemPromptMessageUserPromptMessageAssistantPromptMessageToolPromptMessage 要素のリストを渡す必要があります。

- 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)からその基底クラスモデルを取得し、基底クラスモデルの事前定義されたパラメータルールを返すことができます。具体的な実装については、OpenAIarrow-up-right を参照してください。

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