mirror of
https://github.com/langgenius/dify-docs.git
synced 2026-03-27 13:28:32 +07:00
274 lines
13 KiB
Plaintext
274 lines
13 KiB
Plaintext
---
|
||
dimensions:
|
||
type:
|
||
primary: implementation
|
||
detail: standard
|
||
level: intermediate
|
||
standard_title: Creating New Model Provider
|
||
language: ja
|
||
title: モデルプロバイダーの作成
|
||
description: このドキュメントでは、モデルプロバイダープラグインを作成する方法について詳しく説明します。プロジェクトの初期化、モデル設定方法(事前定義モデルとカスタムモデル)の選択、プロバイダー設定YAMLファイルの作成、およびプロバイダーコードの作成の完全なプロセスが含まれます。
|
||
---
|
||
|
||
Modelタイプのプラグインを作成する最初のステップは、プラグインプロジェクトを初期化し、モデルプロバイダーファイルを作成することです。その後、具体的な事前定義済み/カスタムモデルのコードを記述します。既存のモデルプロバイダーに新しいモデルを追加したいだけの場合は、[新しいモデルの迅速な統合](/plugin-dev-ja/0211-getting-started-new-model)を参照してください。
|
||
|
||
### 事前準備
|
||
|
||
* Dify プラグインスケルトンツール
|
||
* Python 環境、バージョン ≥ 3.12
|
||
|
||
プラグイン開発用のスケルトンツールを準備する方法の詳細については、[開発ツールの初期化](/plugin-dev-ja/0221-initialize-development-tools)を参照してください。開始する前に、[モデルプラグイン](/plugin-dev-ja/0131-model-plugin-introduction.ja)の基本的な概念と構造を理解することをお勧めします。
|
||
|
||
### 新規プロジェクトの作成
|
||
|
||
スケルトンコマンドラインツールのパスで、新しい Dify プラグインプロジェクトを作成します。
|
||
|
||
```
|
||
./dify-plugin-darwin-arm64 plugin init
|
||
```
|
||
|
||
このバイナリファイルを `dify` にリネームし、`/usr/local/bin` パスにコピーした場合、次のコマンドを実行して新しいプラグインプロジェクトを作成できます:
|
||
|
||
```bash
|
||
dify plugin init
|
||
```
|
||
|
||
### モデルプラグインテンプレートの選択
|
||
|
||
スケルトンツール内のすべてのテンプレートには、完全なコードプロジェクトが提供されています。`LLM` タイプのプラグインテンプレートを選択します。
|
||
|
||

|
||
|
||
#### プラグイン権限の設定
|
||
|
||
このLLMプラグインに次の権限を設定します:
|
||
|
||
* Models
|
||
* LLM
|
||
* Storage
|
||
|
||

|
||
|
||
#### モデルタイプ設定の説明
|
||
|
||
モデルプロバイダーは、以下の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。
|
||
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 キーを取得
|
||
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:
|
||
zh_Hans: ここに API キーを入力してください
|
||
en_US: Enter your API Key
|
||
- variable: anthropic_api_url
|
||
label:
|
||
en_US: API URL
|
||
type: text-input
|
||
required: false
|
||
placeholder:
|
||
zh_Hans: ここに API URL を入力してください
|
||
en_US: Enter your 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: モデル名
|
||
placeholder:
|
||
en_US: Enter your model name
|
||
zh_Hans: モデル名を入力
|
||
credential_form_schemas:
|
||
- variable: openai_api_key
|
||
label:
|
||
en_US: API Key
|
||
type: secret-input
|
||
required: true
|
||
placeholder:
|
||
zh_Hans: ここに API キーを入力してください
|
||
en_US: Enter your API Key
|
||
- variable: openai_organization
|
||
label:
|
||
zh_Hans: 組織 ID
|
||
en_US: Organization
|
||
type: text-input
|
||
required: false
|
||
placeholder:
|
||
zh_Hans: ここに組織 ID を入力してください
|
||
en_US: Enter your Organization ID
|
||
- variable: openai_api_base
|
||
label:
|
||
zh_Hans: API ベース
|
||
en_US: API Base
|
||
type: text-input
|
||
required: false
|
||
placeholder:
|
||
zh_Hans: ここに API ベースを入力してください
|
||
en_US: Enter your API Base
|
||
```
|
||
|
||
より完全なモデルプロバイダーYAML仕様については、[モデルスキーマ](/plugin-dev-ja/0412-model-schema)ドキュメントを参照してください。
|
||
|
||
#### 2. **モデルプロバイダーコードの記述**
|
||
|
||
`/providers` フォルダに同名の Python ファイルを作成します。例えば `anthropic.py` とし、`__base.provider.Provider` 基本クラスを継承する `class` を実装します。例えば `AnthropicProvider` です。
|
||
|
||
以下は `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モデルを統合する必要があります。詳細については、以下の内容を参照してください:
|
||
|
||
* [モデル設計ルール](/plugin-dev-ja/0411-model-designing-rules) - 事前定義済みモデルを統合するための仕様を理解する
|
||
* [モデルスキーマ](/plugin-dev-ja/0412-model-schema) - カスタムモデルを統合するための仕様を理解する
|
||
* [リリース概要](/plugin-dev-ja/0321-release-overview) - プラグインのリリースプロセスを学ぶ
|
||
|
||
## 参考リソース
|
||
|
||
- [新しいモデルの迅速な統合](/plugin-dev-ja/0211-getting-started-new-model) - 既存のプロバイダーに新しいモデルを追加する方法
|
||
- [プラグイン開発の基本概念](/plugin-dev-ja/0111-getting-started-dify-plugin) - プラグイン開発入門ガイドに戻る
|
||
- [新しいモデルプロバイダー作成の補足](/plugin-dev-ja/0222-creating-new-model-provider-extra) - より高度な設定について学ぶ
|
||
- [一般仕様定義](/plugin-dev-ja/0411-general-specifications) - プラグインマニフェストファイルの設定を理解する
|
||
|
||
{/*
|
||
Contributing Section
|
||
DO NOT edit this section!
|
||
It will be automatically generated by the script.
|
||
*/}
|
||
|
||
---
|
||
|
||
[このページを編集する](https://github.com/langgenius/dify-docs/edit/main/plugin-dev-ja/0222-creating-new-model-provider.mdx) | [問題を報告する](https://github.com/langgenius/dify-docs/issues/new?template=docs.yml)
|
||
|