---
title: モデルプロバイダーの構築
---


{/* 
  コントリビューター注:
  ----------------
  これはレガシードキュメントであり、非推奨になります。
  このバージョンに変更を加えないでください。
  すべての更新は新しいバージョンに向けられるべきです：
  /plugin-dev-ja/0222-creating-new-model-provider
*/}

<Card title="このドキュメントはまもなく非推奨になります" icon="circle-exclamation" href="/plugin-dev-ja/0222-creating-new-model-provider">
  <p>ドキュメント再編の一環として、このページは段階的に廃止されます。</p>
  
  <p><u><b>このカードをクリックして</b></u>、最新情報が含まれる更新版にリダイレクトしてください。</p>
  
  <p>新しいドキュメントに不一致や改善が必要な箇所を見つけた場合は、ページ下部の「問題を報告」ボタンを使用してください。</p>
</Card>

Modelタイプのプラグインを作成する最初のステップは、プラグインプロジェクトを初期化し、モデルプロバイダーファイルを作成することです。その後、具体的な定義済みモデルやカスタムモデルを接続します。

### 事前準備 <a href="#qian-zhi-zhun-bei" id="qian-zhi-zhun-bei"></a>

* Difyプラグインのスキャフォールディングツール
* Python環境（バージョン3.12以上）

プラグイン開発用のスキャフォールディングツールの準備方法については、[開発ツールの初期化](/ja-jp/plugins/quick-start/develop-plugins/initialize-development-tools)を参照してください。

### 新規プロジェクトの作成 <a href="#chuang-jian-xin-xiang-mu" id="chuang-jian-xin-xiang-mu"></a>

スキャフォールディングツールのコマンドラインから、新しいDifyプラグインプロジェクトを作成します。

```
./dify-plugin-darwin-arm64 plugin init
```

このバイナリファイルを`dify`にリネームし、`/usr/local/bin`にコピーした場合は、次のコマンドで新しいプラグインプロジェクトを作成できます。

```bash
dify plugin init
```

### モデルプラグインテンプレートの選択 <a href="#xuan-ze-cha-jian-lei-xing-he-mu-ban" id="xuan-ze-cha-jian-lei-xing-he-mu-ban"></a>

スキャフォールディングツール内のすべてのテンプレートには、必要なコードが全て含まれています。`LLM`タイプのプラグインテンプレートを選択してください。

![プラグインタイプ: llm](https://assets-docs.dify.ai/2024/12/8efe646e9174164b9edbf658b5934b86.png)

#### プラグイン権限の設定

このLLMプラグインには、次の権限を設定します。

* Models
* LLM
* Storage

![モデルプラグイン権限](https://assets-docs.dify.ai/2024/12/10f3b3ee6c03a1215309f13d712455d4.png)

#### モデルタイプ設定の説明

モデルプロバイダーは、以下の2つのモデル設定方法をサポートしています。

*   `predefined-model` **定義済みモデル**

    一般的な大規模モデルタイプで、統一されたプロバイダー認証情報を設定するだけで、モデルプロバイダーが提供する定義済みモデルを利用できます。たとえば、`OpenAI`モデルプロバイダーは、`gpt-3.5-turbo-0125`や`gpt-4o-2024-05-13`など、様々な定義済みモデルを提供しています。詳細な開発手順については、定義済みモデルの接続を参照してください。
*   `customizable-model` **カスタムモデル**

    各モデルの認証情報設定を手動で追加する必要があります。たとえば、`Xinference`はLLMとText Embeddingの両方をサポートしていますが、各モデルには一意の**model\_uid**があります。両方を同時に接続する場合は、各モデルに**model\_uid**を設定する必要があります。詳細な開発手順については、カスタムモデルの接続を参照してください。

これら2つの設定方法は**共存可能**です。つまり、プロバイダーが`predefined-model`と`customizable-model`の両方、または`predefined-model`のみをサポートしている場合、プロバイダーの統一認証情報を設定することで、定義済みモデルとリモートから取得したモデルを使用できます。さらに、新しいモデルを追加した場合は、それに基づいてカスタムモデルを使用することも可能です。

### 新しいモデルプロバイダーの追加

新しいモデルプロバイダーを追加するには、主に次の手順が必要です。

1.  **モデルプロバイダー設定YAMLファイルの作成**

    プロバイダーディレクトリにYAMLファイルを追加し、プロバイダーの基本情報とパラメータ設定を記述します。ProviderSchemaの要件に従って記述し、システムの仕様との整合性を確保してください。
2.  **モデルプロバイダーコードの記述**

    プロバイダークラスのコードを作成します。システムのインターフェース要件に準拠したPythonクラスを実装して、プロバイダーのAPIに接続し、コア機能を実装します。

***

以下は、各ステップの詳細な操作手順です。

#### 1. **モデルプロバイダー設定ファイルの作成**

ManifestはYAML形式のファイルで、モデルプロバイダーの基本情報、サポートされているモデルタイプ、設定方法、認証情報ルールを定義します。プラグインプロジェクトのテンプレートには、`/providers`パスに設定ファイルが自動的に生成されます。

以下は、`Anthropic`モデルの設定ファイル`anthropic.yaml`のサンプルコードです。

```yaml
provider: anthropic
label:
  en_US: Anthropic
description:
  en_US: Anthropic's powerful models, such as Claude 3.
  zh_Hans: Anthropic 的强大模型，例如 Claude 3。
  ja_JP: Anthropicの強力なモデル（例：Claude 3）。
icon_small:
  en_US: icon_s_en.svg
icon_large:
  en_US: icon_l_en.svg
background: "#F0F0EB"
help:
  title:
    en_US: Get your API Key from Anthropic
    zh_Hans: 从 Anthropic 获取 API Key
    ja_JP: AnthropicからAPI Keyを取得
  url:
    en_US: https://console.anthropic.com/account/keys
supported_model_types:
  - llm
configurate_methods:
  - predefined-model
provider_credential_schema:
  credential_form_schemas:
    - variable: anthropic_api_key
      label:
        en_US: API Key
      type: secret-input
      required: true
      placeholder:
        en_US: Enter your API Key
        zh_Hans: 在此输入您的 API Key
        ja_JP: API Keyを入力してください
    - variable: anthropic_api_url
      label:
        en_US: API URL
      type: text-input
      required: false
      placeholder:
        en_US: Enter your API URL
        zh_Hans: 在此输入您的 API URL
        ja_JP: API URLを入力してください
models:
  llm:
    predefined:
      - "models/llm/*.yaml"
    position: "models/llm/_position.yaml"
extra:
  python:
    provider_source: provider/anthropic.py
    model_sources:
      - "models/llm/llm.py"
```

接続するプロバイダーがカスタムモデル（たとえば、`OpenAI`がファインチューニングモデルを提供する場合）を提供する場合は、`model_credential_schema`フィールドを追加する必要があります。

以下は、`OpenAI`ファミリーモデルのサンプルコードです。

```yaml
model_credential_schema:
  model: # ファインチューニングモデル名
    label:
      en_US: Model Name
      zh_Hans: 模型名称
      ja_JP: モデル名
    placeholder:
      en_US: Enter your model name
      zh_Hans: 输入模型名称
      ja_JP: モデル名を入力
  credential_form_schemas:
  - variable: openai_api_key
    label:
      en_US: API Key
    type: secret-input
    required: true
    placeholder:
      en_US: Enter your API Key
      zh_Hans: 在此输入您的 API Key
      ja_JP: API Keyを入力してください
  - variable: openai_organization
    label:
        en_US: Organization
        zh_Hans: 组织 ID
        ja_JP: 組織ID
    type: text-input
    required: false
    placeholder:
      en_US: Enter your Organization ID
      zh_Hans: 在此输入您的组织 ID
      ja_JP: 組織IDを入力してください
  - variable: openai_api_base
    label:
      en_US: API Base
      zh_Hans: API Base
      ja_JP: API Base
    type: text-input
    required: false
    placeholder:
      en_US: Enter your API Base
      zh_Hans: 在此输入您的 API Base
      ja_JP: API Baseを入力してください
```

より詳細なモデルプロバイダーYAMLの仕様については、[モデルインターフェースドキュメント](/ja-jp/plugins/schema-definition/model/model-schema)を参照してください。

#### 2. **モデルプロバイダーコードの記述**

`/providers`フォルダに、同じ名前のPythonファイル（たとえば、`anthropic.py`）を作成し、`__base.provider.Provider`基本クラス（たとえば、`AnthropicProvider`）を継承する`class`を実装します。

以下は、`Anthropic`のサンプルコードです。

```python
import logging
from dify_plugin.entities.model import ModelType
from dify_plugin.errors.model import CredentialsValidateFailedError
from dify_plugin import ModelProvider

logger = logging.getLogger(__name__)


class AnthropicProvider(ModelProvider):
    def validate_provider_credentials(self, credentials: dict) -> None:
        """
        Validate provider credentials

        if validate failed, raise exception

        :param credentials: provider credentials, credentials form defined in `provider_credential_schema`.
        """
        try:
            model_instance = self.get_model_instance(ModelType.LLM)
            model_instance.validate_credentials(model="claude-3-opus-20240229", credentials=credentials)
        except CredentialsValidateFailedError as ex:
            raise ex
        except Exception as ex:
            logger.exception(f"{self.get_provider_schema().provider} credentials validate failed")
            raise ex
```

プロバイダーは、`__base.model_provider.ModelProvider`基底クラスを継承し、`validate_provider_credentials`プロバイダー統一認証情報検証メソッドを実装する必要があります。

```python
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`.
    """
```

もちろん、`validate_provider_credentials`の実装を後回しにして、モデル認証情報検証メソッドの実装後に直接再利用することもできます。

#### **カスタムモデルプロバイダー**

他のタイプのモデルプロバイダーについては、以下の設定方法を参照してください。

`Xinference`のようなカスタムモデルプロバイダーの場合、完全な実装手順を省略できます。`XinferenceProvider`という名前の空のクラスを作成し、その中に空の`validate_provider_credentials`メソッドを実装するだけで済みます。

**詳細説明：**

* `XinferenceProvider`は、カスタムモデルプロバイダーを識別するためのプレースホルダーとして機能します。
* `validate_provider_credentials`メソッドは実際には呼び出されませんが、親クラスが抽象クラスであるため、すべてのサブクラスがこのメソッドを実装する必要があります。空の実装を提供することで、抽象メソッドが実装されていないことによるインスタンス化エラーを回避できます。

```python
class XinferenceProvider(Provider):
    def validate_provider_credentials(self, credentials: dict) -> None:
        pass
```

モデルプロバイダーを初期化した後、プロバイダーが提供する具体的なLLMモデルを接続する必要があります。詳細については、以下を参照してください。

* [定義済みモデルの接続](/ja-jp/guides/model-configuration/predefined-model)
* [カスタムモデルの接続](/ja-jp/guides/model-configuration/customizable-model)

{/*
Contributing Section
DO NOT edit this section!
It will be automatically generated by the script.
*/}

---

[このページを編集する](https://github.com/langgenius/dify-docs/edit/main/ja-jp/plugins/quick-start/develop-plugins/model-plugin/create-model-providers.mdx) | [問題を報告する](https://github.com/langgenius/dify-docs/issues/new?template=docs.yml)

