Skip to main content
⚠️ このドキュメントはAIによって自動翻訳されています。不正確な部分がある場合は、英語版を参照してください。

はじめに

このドキュメントでは、Difyモデルプラグインを実装するために必要なインターフェースとデータ構造について詳しく説明します。AIモデルをDifyプラットフォームと統合する開発者向けの技術リファレンスとして機能します。
このAPIリファレンスに入る前に、概念的な理解のためにモデル設計ルールモデルプラグイン入門を先に読むことをお勧めします。

プロバイダー実装

異なるAIサービスプロバイダー向けのモデルプロバイダークラスの実装方法を学ぶ

モデルタイプ

5つのサポートされているモデルタイプの実装詳細:LLM、Embedding、Rerank、Speech2Text、Text2Speech

データ構造

モデルAPIで使用されるすべてのデータ構造の包括的なリファレンス

エラーハンドリング

適切なエラーマッピングと例外処理のガイドライン

モデルプロバイダー

すべてのモデルプロバイダーは__base.model_provider.ModelProvider基底クラスを継承し、認証情報検証インターフェースを実装する必要があります。

プロバイダー認証情報検証

dict
プロバイダーのYAML設定のprovider_credential_schemaで定義された認証情報。 通常、api_keyorganization_idなどのフィールドを含みます。
検証が失敗した場合、実装はCredentialsValidateFailedError例外をスローする必要があります。これにより、Dify UIで適切なエラーハンドリングが保証されます。
事前定義されたモデルプロバイダーの場合、認証情報がAPIで機能することを検証する徹底的な検証メソッドを実装する必要があります。カスタムモデルプロバイダー(各モデルが独自の認証情報を持つ場合)では、簡略化された実装で十分です。

モデル

Difyは5つの異なるモデルタイプをサポートしており、それぞれ特定のインターフェースの実装が必要です。ただし、すべてのモデルタイプにはいくつかの共通要件があります。

共通インターフェース

タイプに関係なく、すべてのモデル実装はこれら2つの基本メソッドを実装する必要があります:

1. モデル認証情報検証

string
必須
検証する特定のモデル識別子(例:「gpt-4」、「claude-3-opus」)
dict
必須
プロバイダーの設定で定義された認証情報

2. エラーマッピング

class
ネットワーク接続の失敗、タイムアウト
class
サービスプロバイダーがダウンまたは利用不可
class
レート制限またはクォータ制限に到達
class
認証または権限の問題
class
無効なパラメータまたはリクエスト
エラーマッピングに依存する代わりに、コード内でこれらの標準化されたエラータイプを直接スローすることもできます。このアプローチにより、エラーメッセージをより細かく制御できます。

LLM実装

大規模言語モデルプロバイダーを実装するには、__base.large_language_model.LargeLanguageModel基底クラスを継承し、これらのメソッドを実装します:

1. モデル呼び出し

このコアメソッドは、言語モデルへのストリーミングおよび非ストリーミングAPI呼び出しの両方を処理します。
string
必須
モデル識別子(例:「gpt-4」、「claude-3」)
dict
必須
API用の認証情報
list[PromptMessage]
必須
Difyの標準化されたフォーマットのメッセージリスト:
  • completionモデルの場合:単一のUserPromptMessageを含める
  • chatモデルの場合:必要に応じてSystemPromptMessageUserPromptMessageAssistantPromptMessageToolPromptMessageを含める
dict
必須
モデルのYAML設定で定義されたモデル固有のパラメータ(temperature、top_pなど)
list[PromptMessageTool]
関数呼び出し機能のためのツール定義
list[string]
遭遇時にモデル生成を停止するストップシーケンス
boolean
デフォルト:true
ストリーミングレスポンスを返すかどうか
string
API監視用のユーザー識別子
Generator[LLMResultChunk, None, None]
利用可能になったレスポンスのチャンクをyieldするジェネレータ
LLMResult
完全な生成テキストを含む完全なレスポンスオブジェクト
コードを整理して保守しやすくするために、ストリーミングと非ストリーミング呼び出し用に別々のヘルパーメソッドを実装することをお勧めします。

2. トークンカウント

モデルがトークナイザーを提供していない場合、基底クラスの_get_num_tokens_by_gpt2(text)メソッドを使用して妥当な近似値を得ることができます。

3. カスタムモデルスキーマ(オプション)

このメソッドは、カスタムモデルをサポートするプロバイダーにのみ必要です。カスタムモデルが基本モデルからパラメータルールを継承できるようにします。

TextEmbedding実装

テキスト埋め込みモデルは、テキストを意味的な意味を捉える高次元ベクトルに変換し、検索、類似性検索、分類に役立ちます。
Text Embeddingプロバイダーを実装するには、__base.text_embedding_model.TextEmbeddingModel基底クラスを継承します:

1. コア埋め込みメソッド

string
必須
埋め込みモデル識別子
dict
必須
埋め込みサービス用の認証情報
list[string]
必須
埋め込むテキスト入力のリスト
string
API監視用のユーザー識別子
object
必須
以下を含む構造化されたレスポンス:
  • model:埋め込みに使用されたモデル
  • embeddings:入力テキストに対応する埋め込みベクトルのリスト
  • usage:トークン使用量とコストに関するメタデータ

2. トークンカウントメソッド

埋め込みモデルでは、正確なトークンカウントはコスト見積もりに重要ですが、機能性には重要ではありません。_get_num_tokens_by_gpt2メソッドはほとんどのモデルに対して妥当な近似値を提供します。

Rerank実装

リランキングモデルは、通常初期検索フェーズの後、クエリとの関連性に基づいて候補ドキュメントのセットを再順序付けすることで検索品質を向上させます。
Rerankingプロバイダーを実装するには、__base.rerank_model.RerankModel基底クラスを継承します:
string
必須
リランキングモデル識別子
dict
必須
API用の認証情報
string
必須
検索クエリテキスト
list[string]
必須
リランキングされるドキュメントテキストのリスト
float
結果をフィルタリングするためのオプションの最小スコア閾値
int
返す結果数のオプションの制限
string
API監視用のユーザー識別子
object
必須
以下を含む構造化されたレスポンス:
  • model:リランキングに使用されたモデル
  • docs:index、text、scoreを持つRerankDocumentオブジェクトのリスト
リランキングは計算コストが高くなる可能性があり、特に大きなドキュメントセットでは顕著です。タイムアウトや過度のリソース消費を避けるために、大きなドキュメントコレクションにはバッチ処理を実装してください。

Speech2Text実装

音声テキスト変換モデルは、音声ファイルから話された言語を書かれたテキストに変換し、文字起こしサービス、音声コマンド、アクセシビリティ機能などのアプリケーションを可能にします。
Speech-to-Textプロバイダーを実装するには、__base.speech2text_model.Speech2TextModel基底クラスを継承します:
string
必須
音声テキスト変換モデル識別子
dict
必須
API用の認証情報
IO[bytes]
必須
文字起こしする音声を含むバイナリファイルオブジェクト
string
API監視用のユーザー識別子
string
必須
音声ファイルから文字起こしされたテキスト
異なるファイルタイプを適切に処理するためには、音声フォーマットの検出が重要です。例に示すように、ファイルヘッダーからフォーマットを検出するヘルパーメソッドの実装を検討してください。
一部の音声テキスト変換APIにはファイルサイズの制限があります。必要に応じて、大きな音声ファイル用にチャンク処理を実装することを検討してください。

Text2Speech実装

テキスト音声変換モデルは、書かれたテキストを自然な音声に変換し、音声アシスタント、スクリーンリーダー、音声コンテンツ生成などのアプリケーションを可能にします。
Text-to-Speechプロバイダーを実装するには、__base.text2speech_model.Text2SpeechModel基底クラスを継承します:
string
必須
テキスト音声変換モデル識別子
dict
必須
API用の認証情報
string
必須
音声に変換するテキストコンテンツ
boolean
必須
ストリーミング音声を返すか完全なファイルを返すか
string
API監視用のユーザー識別子
Generator[bytes, None, None]
利用可能になった音声チャンクをyieldするジェネレータ
bytes
バイトとしての完全な音声データ
ほとんどのテキスト音声変換APIでは、モデルと一緒に音声を指定する必要があります。Difyのモデル識別子とプロバイダーの音声オプション間のマッピングを実装することを検討してください。
長いテキスト入力は、より良い音声合成品質のためにチャンク処理が必要な場合があります。句読点、数字、特殊文字を適切に処理するためのテキスト前処理の実装を検討してください。

Moderation実装

モデレーションモデルは、潜在的に有害、不適切、または安全でないコンテンツについてコンテンツを分析し、プラットフォームの安全性とコンテンツポリシーの維持を支援します。
Moderationプロバイダーを実装するには、__base.moderation_model.ModerationModel基底クラスを継承します:
string
必須
モデレーションモデル識別子
dict
必須
API用の認証情報
string
必須
分析するテキストコンテンツ
string
API監視用のユーザー識別子
boolean
必須
コンテンツの安全性を示すブール値:
  • False:コンテンツは安全
  • True:コンテンツに有害な素材が含まれている
モデレーションは安全機構として使用されることが多いです。ソリューションを実装する際は、偽陰性(有害なコンテンツを通過させる)と偽陽性(安全なコンテンツをブロックする)の影響を考慮してください。
多くのモデレーションAPIは、単なるバイナリ結果ではなく、詳細なカテゴリスコアを提供します。アプリケーションで必要な場合は、有害なコンテンツの特定のカテゴリに関するより詳細な情報を返すようにこの実装を拡張することを検討してください。

エンティティ

PromptMessageRole

メッセージロール

PromptMessageContentType

メッセージコンテンツタイプ、プレーンテキストと画像に分かれます。

PromptMessageContent

メッセージコンテンツ基底クラス、パラメータ宣言のみに使用され、初期化できません。
現在、テキストと画像の2種類をサポートしており、テキストと複数の画像を同時にサポートできます。 TextPromptMessageContentImagePromptMessageContentを別々に初期化する必要があります。

TextPromptMessageContent

テキストと画像を渡す場合、テキストはcontentリストの一部としてこのエンティティとして構築する必要があります。

ImagePromptMessageContent

テキストと画像を渡す場合、画像はcontentリストの一部としてこのエンティティとして構築する必要があります。 dataurlまたは画像のbase64エンコードされた文字列にすることができます。

PromptMessage

すべてのロールメッセージボディの基底クラス、パラメータ宣言のみに使用され、初期化できません。

UserPromptMessage

UserMessageメッセージボディ、ユーザーメッセージを表します。

AssistantPromptMessage

モデル応答メッセージを表し、通常few-shotsまたはチャット履歴入力に使用されます。
ここでtool_callsは、モデルにtoolsを渡した後にモデルが返すtool callのリストです。

SystemPromptMessage

システムメッセージを表し、通常モデルのシステム指示を設定するために使用されます。

ToolPromptMessage

ツールメッセージを表し、ツールが実行された後に次のステップの計画のために結果をモデルに渡すために使用されます。
基底クラスのcontentにツール実行結果を渡します。

PromptMessageTool


LLMResult

LLMResultChunkDelta

ストリーミングレスポンスの各イテレーション内のDeltaエンティティ

LLMResultChunk

ストリーミングレスポンスのイテレーションエンティティ

LLMUsage


TextEmbeddingResult

EmbeddingUsage


RerankResult

RerankDocument

関連リソース


Edit this page | Report an issue