モデルスキーマ
ここでは、プロバイダーと各モデルタイプが実装する必要があるインターフェースメソッドとパラメータについて説明します。
モデルプロバイダー
__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
エラーを発生させてください。
- 呼び出しエラーのマッピング
モデルの呼び出し中に例外が発生した場合、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
などが渡されます。
- 認証情報のパラメータは、ベンダーの YAML 設定ファイルの
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
などが渡されます。
- 認証情報のパラメータは、ベンダーの YAML 設定ファイルの
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
ストリーミング結果の各イテレーションエンティティ