diff --git a/ja/develop-plugin/dev-guides-and-walkthroughs/agent-strategy-plugin.mdx b/ja/develop-plugin/dev-guides-and-walkthroughs/agent-strategy-plugin.mdx index f8c67a8ad..e24de2e7a 100644 --- a/ja/develop-plugin/dev-guides-and-walkthroughs/agent-strategy-plugin.mdx +++ b/ja/develop-plugin/dev-guides-and-walkthroughs/agent-strategy-plugin.mdx @@ -1,5 +1,6 @@ --- title: エージェント戦略プラグイン +description: Function Callingエージェント戦略をゼロから構築する—LLMにツールを与えて自律的に現在時刻を取得させる方法を示す実践例 --- ⚠️ このドキュメントは AI によって自動翻訳されています。不正確な部分がある場合は、[英語版](/en/develop-plugin/dev-guides-and-walkthroughs/agent-strategy-plugin) を参照してください。 @@ -8,7 +9,7 @@ title: エージェント戦略プラグイン 以下では、現在時刻を自動的に取得するための**Function Calling**をサポートするプラグインの開発方法を説明します。 -### 前提条件 +## 前提条件 - Difyプラグインスキャフォールディングツール - Python環境(バージョン 3.12) @@ -21,7 +22,7 @@ title: エージェント戦略プラグイン --- -### 1. プラグインテンプレートの初期化 +## 1. プラグインテンプレートの初期化 以下のコマンドを実行して、エージェントプラグインの開発テンプレートを作成します: @@ -90,14 +91,14 @@ Models: --- -### 2. プラグインの開発 +## 2. プラグインの開発 エージェント戦略プラグインの開発は、2つのファイルを中心に行われます: - **プラグイン宣言**: `strategies/basic_agent.yaml` - **プラグイン実装**: `strategies/basic_agent.py` -#### 2.1 パラメータの定義 +### 2.1 パラメータの定義 エージェントプラグインを構築するには、まず`strategies/basic_agent.yaml`で必要なパラメータを指定します。これらのパラメータは、LLMの呼び出しやツールの使用など、プラグインのコア機能を定義します。 @@ -106,7 +107,7 @@ Models: 1. **model**: 呼び出す大規模言語モデル(例:GPT-4、GPT-4o-mini)。 2. **tools**: プラグインの機能を拡張するツールのリスト。 3. **query**: モデルに送信されるユーザー入力またはプロンプトの内容。 -4. **maximum_iterations**: 過度な計算を防ぐための最大反復回数。 +4. **maximum_iterations**: 過度な計算を防ぐための最大イテレーション数。 サンプルコード: @@ -162,7 +163,7 @@ extra: ![エージェント戦略プラグインの UI](https://assets-docs.dify.ai/2025/01/d011e2eba4c37f07a9564067ba787df8.png) -#### 2.2 パラメータの取得と実行 +### 2.2 パラメータの取得と実行 ユーザーがこれらの基本フィールドを入力した後、プラグインは送信されたパラメータを処理する必要があります。`strategies/basic_agent.py`で、エージェント用のパラメータクラスを定義し、ロジック内でこれらのパラメータを取得して適用します。 @@ -188,7 +189,7 @@ class BasicAgentAgentStrategy(AgentStrategy): params = BasicParams(**parameters) ``` -### 3. モデルの呼び出し +## 3. モデルの呼び出し エージェント戦略プラグインでは、**モデルの呼び出し**がワークフローの中心です。SDKの`session.model.llm.invoke()`を使用して、テキスト生成、対話などを処理し、LLMを効率的に呼び出すことができます。 @@ -223,7 +224,7 @@ def invoke( ![ツール生成のためのリクエストパラメータ](https://assets-docs.dify.ai/2025/01/01e32c2d77150213c7c929b3cceb4dae.png) -### 4. ツールの処理 +## 4. ツールの処理 ツールパラメータを指定した後、エージェント戦略プラグインは実際にこれらのツールを呼び出す必要があります。`session.tool.invoke()`を使用してこれらのリクエストを行います。 @@ -267,7 +268,7 @@ for tool_call_id, tool_call_name, tool_call_args in tool_calls: ![ツール呼び出し](https://assets-docs.dify.ai/2025/01/80e5de8acc2b0ed00524e490fd611ff5.png) -### 5. ログの作成 +## 5. ログの作成 **エージェント戦略プラグイン**で複雑なタスクを完了するには、複数のステップが必要になることがよくあります。開発者が各ステップの結果を追跡し、意思決定プロセスを分析し、戦略を最適化することは非常に重要です。SDKの`create_log_message`と`finish_log_message`を使用することで、呼び出しの前後のリアルタイムの状態をログに記録し、迅速な問題診断に役立てることができます。 @@ -330,7 +331,7 @@ model_log = self.create_log_message( yield model_log ``` -#### エージェントプラグイン機能のサンプルコード +### エージェントプラグイン機能のサンプルコード @@ -1044,12 +1045,12 @@ class BasicAgentAgentStrategy(AgentStrategy): -### 6. プラグインのデバッグ +## 6. プラグインのデバッグ プラグインの宣言ファイルと実装コードを完成させた後、プラグインディレクトリで`python -m main`を実行して再起動します。次に、プラグインが正しく動作することを確認します。Difyはリモートデバッグを提供しています。**プラグイン管理**に移動して、デバッグキーとリモートサーバーアドレスを取得してください。 - ![](https://assets-docs.dify.ai/2024/12/053415ef127f1f4d6dd85dd3ae79626a.png) + ![プラグインの宣言ファイルと実装コードを完成させた後、python -m mainを実行](https://assets-docs.dify.ai/2024/12/053415ef127f1f4d6dd85dd3ae79626a.png) プラグインプロジェクトに戻り、`.env.example`を`.env`にコピーし、関連するリモートサーバーとデバッグキー情報を挿入します。 @@ -1072,7 +1073,7 @@ python -m main ![プラグインのブラウズ](https://assets-docs.dify.ai/2025/01/c82ec0202e5bf914b36e06c796398dd6.png) -### プラグインのパッケージング(オプション) +## プラグインのパッケージング(オプション) すべてが正常に動作したら、以下を実行してプラグインをパッケージングできます: @@ -1082,19 +1083,19 @@ python -m main dify plugin package ./basic_agent/ ``` -現在のフォルダに`google.difypkg`(例)という名前のファイルが表示されます。これが最終的なプラグインパッケージです。 +現在のフォルダに`basic_agent.difypkg`(プラグイン名と一致)という名前のファイルが表示されます。これが最終的なプラグインパッケージです。 **おめでとうございます!** エージェント戦略プラグインの開発、テスト、パッケージングが完了しました。 -### プラグインの公開(オプション) +## プラグインの公開(オプション) [Difyプラグインリポジトリ](https://github.com/langgenius/dify-plugins)にアップロードできます。その前に、[プラグイン公開ガイドライン](/ja/develop-plugin/publishing/marketplace-listing/release-to-dify-marketplace)を満たしていることを確認してください。承認されると、コードがメインブランチにマージされ、プラグインは自動的に[Dify Marketplace](https://marketplace.dify.ai/)で公開されます。 --- -### さらなる探求 +## さらなる探求 -複雑なタスクには、複数ラウンドの思考とツール呼び出しが必要になることが多く、通常は**モデル呼び出し → ツール使用**をタスクが終了するか最大反復回数に達するまで繰り返します。このプロセスでは、プロンプトを効果的に管理することが重要です。[完全なFunction Calling実装](https://github.com/langgenius/dify-official-plugins/blob/main/agent-strategies/cot_agent/strategies/function_calling.py)を参照して、モデルが外部ツールを呼び出し、その出力を処理するための標準化されたアプローチを確認してください。 +複雑なタスクには、複数ラウンドの思考とツール呼び出しが必要になることが多く、通常は**モデル呼び出し → ツール使用**をタスクが終了するか最大イテレーション数に達するまで繰り返します。このプロセスでは、プロンプトを効果的に管理することが重要です。[完全なFunction Calling実装](https://github.com/langgenius/dify-official-plugins/blob/main/agent-strategies/cot_agent/strategies/function_calling.py)を参照して、モデルが外部ツールを呼び出し、その出力を処理するための標準化されたアプローチを確認してください。 {/* Contributing Section diff --git a/ja/develop-plugin/dev-guides-and-walkthroughs/cheatsheet.mdx b/ja/develop-plugin/dev-guides-and-walkthroughs/cheatsheet.mdx index f870d40d2..04aca84bc 100644 --- a/ja/develop-plugin/dev-guides-and-walkthroughs/cheatsheet.mdx +++ b/ja/develop-plugin/dev-guides-and-walkthroughs/cheatsheet.mdx @@ -5,25 +5,25 @@ dimensions: detail: architecture level: beginner standard_title: Cheatsheet -language: en -title: Dify プラグイン開発チートシート +language: ja +title: チートシート description: 環境要件、インストール方法、開発プロセス、プラグインのカテゴリとタイプ、一般的なコードスニペット、よくある問題の解決策を含む、Dify プラグイン開発の包括的なリファレンスガイドです。開発者が素早く参照できるように設計されています。 --- ⚠️ このドキュメントは AI によって自動翻訳されています。不正確な部分がある場合は、[英語版](/en/develop-plugin/dev-guides-and-walkthroughs/cheatsheet) を参照してください。 -### 環境要件 +## 環境要件 - Python バージョン 3.12 - Dify プラグインスキャフォールドツール (dify-plugin-daemon) > 詳細: [開発ツールの初期化](/ja/develop-plugin/getting-started/cli) -### Dify プラグイン開発パッケージの取得 +## Dify プラグイン開発パッケージの取得 [Dify Plugin CLI](https://github.com/langgenius/dify-plugin-daemon/releases) -#### 各プラットフォームのインストール方法 +### 各プラットフォームのインストール方法 **macOS [Brew](https://github.com/langgenius/homebrew-dify) (グローバルインストール)**: @@ -68,13 +68,13 @@ sudo mv dify /usr/local/bin/ dify version ``` -### 開発パッケージの実行 +## 開発パッケージの実行 ここでは `dify` を例として使用します。ローカルインストール方法を使用している場合は、コマンドを適宜置き換えてください。例: `./dify-plugin-darwin-arm64 plugin init` -### プラグイン開発プロセス +## プラグイン開発プロセス -#### 1. 新しいプラグインの作成 +### 1. 新しいプラグインの作成 ```bash ./dify plugin init @@ -84,7 +84,7 @@ dify version > 詳細: [Dify プラグイン開発: Hello World ガイド](/ja/develop-plugin/dev-guides-and-walkthroughs/tool-plugin) -#### 2. 開発モードで実行 +### 2. 開発モードで実行 `.env` ファイルを設定し、プラグインディレクトリで以下のコマンドを実行します: @@ -94,7 +94,7 @@ python -m main > 詳細: [プラグインのリモートデバッグ](/ja/develop-plugin/features-and-specs/plugin-types/remote-debug-a-plugin) -#### 3. パッケージングとデプロイ +### 3. パッケージングとデプロイ プラグインをパッケージ化: @@ -105,9 +105,9 @@ dify plugin package ./yourapp > 詳細: [公開の概要](/ja/develop-plugin/publishing/marketplace-listing/release-overview) -### プラグインカテゴリ +## プラグインカテゴリ -#### ツールラベル +### ツールラベル カテゴリ `tag` [class ToolLabelEnum(Enum)](https://github.com/langgenius/dify-plugin-sdks/blob/main/python/dify_plugin/entities/tool.py) @@ -131,7 +131,7 @@ class ToolLabelEnum(Enum): OTHER = "other" ``` -### プラグインタイプリファレンス +## プラグインタイプリファレンス Dify は様々なタイプのプラグイン開発をサポートしています: @@ -141,10 +141,10 @@ Dify は様々なタイプのプラグイン開発をサポートしています - **モデルプラグイン**: AI モデルを統合 > 詳細: [モデルプラグイン](/ja/develop-plugin/features-and-specs/plugin-types/model-designing-rules)、[新しいモデルのクイック統合](/ja/develop-plugin/dev-guides-and-walkthroughs/creating-new-model-provider) -- **エージェント戦略プラグイン**: エージェントの思考と意思決定戦略をカスタマイズ +- **エージェント戦略プラグイン**: Agent の思考と意思決定戦略をカスタマイズ > 詳細: [エージェント戦略プラグイン](/ja/develop-plugin/features-and-specs/advanced-development/reverse-invocation) -- **拡張プラグイン**: Endpoints や WebAPP など、Dify プラットフォームの機能を拡張 +- **拡張プラグイン**: Endpoints や WebApp など、Dify プラットフォームの機能を拡張 > 詳細: [拡張プラグイン](/ja/develop-plugin/dev-guides-and-walkthroughs/endpoint) - **データソースプラグイン**: ナレッジベースパイプラインのドキュメントデータソースおよび開始点として機能 diff --git a/ja/develop-plugin/dev-guides-and-walkthroughs/creating-new-model-provider.mdx b/ja/develop-plugin/dev-guides-and-walkthroughs/creating-new-model-provider.mdx index d18f4c026..fa90ae0e7 100644 --- a/ja/develop-plugin/dev-guides-and-walkthroughs/creating-new-model-provider.mdx +++ b/ja/develop-plugin/dev-guides-and-walkthroughs/creating-new-model-provider.mdx @@ -5,14 +5,14 @@ dimensions: detail: standard level: intermediate standard_title: Model Provider Plugin -language: en +language: ja title: モデルプロバイダープラグイン description: この包括的なガイドでは、モデルプロバイダープラグインの作成について詳細な手順を提供し、プロジェクトの初期化、ディレクトリ構造の編成、モデル構成方法、プロバイダーコードの記述、およびコア API 実装の詳細な例を含むモデル統合の実装について説明します。 --- ⚠️ このドキュメントは AI によって自動翻訳されています。不正確な部分がある場合は、[英語版](/en/develop-plugin/dev-guides-and-walkthroughs/creating-new-model-provider) を参照してください。 -### 前提条件 +## 前提条件 * [Dify CLI](/ja/develop-plugin/getting-started/cli) * 基本的な Python プログラミングスキルとオブジェクト指向プログラミングの理解 @@ -423,8 +423,7 @@ Dify は、開発中にプラグインをテストできるリモートデバッ ```dotenv INSTALL_METHOD=remote -REMOTE_INSTALL_HOST= -REMOTE_INSTALL_PORT=5003 +REMOTE_INSTALL_URL=:5003 REMOTE_INSTALL_KEY=****-****-****-****-**** ``` diff --git a/ja/develop-plugin/dev-guides-and-walkthroughs/datasource-plugin.mdx b/ja/develop-plugin/dev-guides-and-walkthroughs/datasource-plugin.mdx index 1211ca9d0..71f6901e3 100644 --- a/ja/develop-plugin/dev-guides-and-walkthroughs/datasource-plugin.mdx +++ b/ja/develop-plugin/dev-guides-and-walkthroughs/datasource-plugin.mdx @@ -1,5 +1,6 @@ --- -title: "データソースプラグイン" +title: データソースプラグイン +description: Dify 1.9.0以降のデータソースプラグインを構築し、ナレッジパイプラインにドキュメントを供給—アーキテクチャ、コードサンプル、デバッグ手順 --- ⚠️ このドキュメントは AI によって自動翻訳されています。不正確な部分がある場合は、[英語版](/en/develop-plugin/dev-guides-and-walkthroughs/datasource-plugin) を参照してください。 @@ -20,7 +21,7 @@ title: "データソースプラグイン" Difyは3種類のデータソースプラグインをサポートしています:Webクローラー、オンラインドキュメント、オンラインドライブ。プラグインコードを実装する際、プラグインの機能を提供するクラスは特定のデータソースクラスを継承する必要があります。3種類のプラグインタイプはそれぞれ異なる親クラスに対応しています。 - 親クラスを継承してプラグイン機能を実装する方法については、[ツールプラグイン:ツールコードの準備](/ja/develop-plugin/dev-guides-and-walkthroughs/tool-plugin#4-ツールコードの準備)を参照してください。 + 親クラスを継承してプラグイン機能を実装する方法については、[ツールプラグイン:ツールコードの準備](/ja/develop-plugin/dev-guides-and-walkthroughs/tool-plugin#4-prepare-tool-code)を参照してください。 各データソースプラグインタイプは複数のデータソースをサポートしています。例えば: @@ -112,7 +113,7 @@ datasources: ``` - プロバイダーYAMLファイルの作成について詳しくは、[ツールプラグイン:サードパーティサービス認証情報の完成](/ja/develop-plugin/dev-guides-and-walkthroughs/tool-plugin#2-サードパーティサービス認証情報の完成)を参照してください。 + プロバイダーYAMLファイルの作成について詳しくは、[ツールプラグイン:サードパーティサービス認証情報の完成](/ja/develop-plugin/dev-guides-and-walkthroughs/tool-plugin#2-complete-third-party-service-credentials)を参照してください。 diff --git a/ja/develop-plugin/dev-guides-and-walkthroughs/develop-a-slack-bot-plugin.mdx b/ja/develop-plugin/dev-guides-and-walkthroughs/develop-a-slack-bot-plugin.mdx index 8145ea78d..28bafd250 100644 --- a/ja/develop-plugin/dev-guides-and-walkthroughs/develop-a-slack-bot-plugin.mdx +++ b/ja/develop-plugin/dev-guides-and-walkthroughs/develop-a-slack-bot-plugin.mdx @@ -4,9 +4,9 @@ dimensions: primary: reference detail: examples level: intermediate -standard_title: Develop A Slack Bot Plugin -language: en -title: Slack Botプラグインの開発 +standard_title: Slack Bot +language: ja +title: Slack Bot description: このガイドでは、Slack Botプラグインの開発について、プロジェクトの初期化、設定フォームの編集、機能の実装、デバッグ、エンドポイントのセットアップ、検証、パッケージングまで完全なウォークスルーを提供します。Slack上でAIを活用したチャットボットを構築するために、Difyプラグインスキャフォールディングツールと事前に作成したSlack Appが必要です。 --- @@ -16,7 +16,7 @@ description: このガイドでは、Slack Botプラグインの開発につい AIを活用したSlack Botの構築方法をしっかりと理解できます。このBotはSlack内でユーザーの質問に直接回答できます。プラグインを初めて開発する場合は、まず[プラグイン開発クイックスタートガイド](/ja/develop-plugin/dev-guides-and-walkthroughs/tool-plugin)を読むことをお勧めします。 -### プロジェクトの背景 +## プロジェクトの背景 Difyプラグインエコシステムは、統合をよりシンプルでアクセスしやすくすることに焦点を当てています。このガイドでは、Slackを例として、Slack Botプラグインの開発プロセスを順を追って説明します。これにより、チームはSlack内でLLMと直接チャットでき、AIの活用効率が大幅に向上します。 @@ -29,7 +29,7 @@ Slackは、堅牢なAPIを備えたオープンなリアルタイムコミュニ > 混乱を避けるため、以下の概念を説明します: > > * **Slack Bot** Slackプラットフォーム上のチャットボットで、リアルタイムでやり取りできる仮想ユーザーとして機能します。 -> * **Slack Botプラグイン** DifyアプリケーションとSlackを接続するDify Marketplace内のプラグインです。このガイドでは、そのプラグインの開発方法に焦点を当てています。 +> * **Slack Botプラグイン** DifyアプリケーションとSlackを接続するDifyマーケットプレイス内のプラグインです。このガイドでは、そのプラグインの開発方法に焦点を当てています。 **動作の仕組み(簡単な概要)**: @@ -45,7 +45,7 @@ Slackは、堅牢なAPIを備えたオープンなリアルタイムコミュニ Slack BotプラグインがDifyアプリケーションから応答を受け取ると、同じルートを通じてLLMの回答をSlack Botに送り返します。Slack内のユーザーは、チャットしている場所で、よりインテリジェントでインタラクティブな体験を得られます。 -### 前提条件 +## 前提条件 - **Difyプラグイン開発ツール**:詳細については、[開発ツールの初期化](/ja/develop-plugin/getting-started/cli)を参照してください。 - **Python環境(バージョン 3.12)**:[Python公式ダウンロードページ](https://www.python.org/downloads/)を参照するか、LLMに完全なセットアップガイドを尋ねてください。 @@ -75,11 +75,11 @@ Slackは、堅牢なAPIを備えたオープンなリアルタイムコミュニ ![将来のプラグイン開発のためにOAuthトークンを取得する](https://assets-docs.dify.ai/2025/01/dcd8ec947253f2ef9ae121ed77ec9f26.png) -### 1. プラグインの開発 +## 1. プラグインの開発 ここから実際のコーディングに入ります。開始する前に、[クイックスタート:拡張プラグインの開発](/ja/develop-plugin/dev-guides-and-walkthroughs/endpoint)を読んでいるか、すでにDifyプラグインを構築した経験があることを確認してください。 -#### 1.1 プロジェクトの初期化 +### 1.1 プロジェクトの初期化 以下のコマンドを実行して、プラグイン開発環境をセットアップします: @@ -95,11 +95,11 @@ dify plugin init ![プラグイン権限](https://assets-docs.dify.ai/2024/12/d89a6282c5584fc43a9cadeddf09c0de.png) -#### 1.2 設定フォームの編集 +### 1.2 設定フォームの編集 このプラグインは、どのDifyアプリが応答を処理するか、およびBotの応答を認証するためのSlack Appトークンを知る必要があります。そのため、プラグインのフォームにこれら2つのフィールドを追加します。 -groupディレクトリ内のYAMLファイルを修正します。例えば、`group/slack.yaml`です。フォームのファイル名は、プラグイン作成時に入力した情報によって決まるので、適宜調整してください。 +groupディレクトリ内のYAMLファイル(例:`group/slack.yaml`)を修正します。フォームのファイル名は、プラグイン作成時に入力した情報によって決まるので、適宜調整してください。 **サンプルコード**: @@ -156,7 +156,7 @@ endpoints: * **type**: app-selectorに設定すると、ユーザーはこのプラグインを使用する際にメッセージを特定のDifyアプリに転送できます。 -* **scope**: chatに設定すると、プラグインはエージェント、チャットボット、またはchatflowなどのアプリタイプとのみやり取りできます。 +* **scope**: chatに設定すると、プラグインはAgent、チャットボット、またはチャットフローなどのアプリタイプとのみやり取りできます。 最後に、`endpoints/slack.yaml`ファイルで、受信するSlackメッセージを適切に処理するためにリクエストメソッドをPOSTに変更します。 @@ -172,7 +172,7 @@ extra: source: "endpoints/slack.py" ``` -### 2. 関数コードの編集 +## 2. 関数コードの編集 `endpoints/slack.py`ファイルを修正し、以下のコードを追加します: @@ -251,7 +251,7 @@ class SlackEndpoint(Endpoint): return Response(status=200, response="ok") ``` -### 3. プラグインのデバッグ +## 3. プラグインのデバッグ Difyプラットフォームに移動し、プラグインのリモートデバッグアドレスとキーを取得します。 @@ -273,7 +273,7 @@ REMOTE_INSTALL_KEY=********-****-****-****-************ python -m main ``` -#### プラグインエンドポイントの設定 +### プラグインエンドポイントの設定 Difyのプラグイン管理ページから、新しくインストールされたテストプラグインを見つけ、新しいエンドポイントを作成します。名前、Botトークンを入力し、接続するアプリを選択します。 @@ -309,7 +309,7 @@ Difyのプラグイン管理ページから、新しくインストールされ --- -### 4. プラグインの検証 +## 4. プラグインの検証 コード内で、`self.session.app.chat.invoke`がDifyアプリケーションを呼び出すために使用され、`app_id`や`query`などのパラメータを渡します。応答はSlack Botに返されます。`python -m main`を再度実行してプラグインをデバッグ用に再起動し、SlackがDify Appの応答を正しく表示するかどうかを確認します: @@ -319,9 +319,9 @@ Difyのプラグイン管理ページから、新しくインストールされ --- -### 5. プラグインのパッケージ化(オプション) +## 5. プラグインのパッケージ化(オプション) -プラグインが正しく動作することを確認したら、以下のコマンドでパッケージ化して名前を付けることができます。実行後、現在のディレクトリに`slack_bot.difypkg`ファイルが作成されます。これが最終的なプラグインパッケージです。詳細なパッケージ化手順については、[ローカルファイルとしてパッケージ化して共有](/ja/develop-plugin/publishing/marketplace-listing/release-by-file)を参照してください。 +プラグインが正しく動作することを確認したら、以下のコマンドでパッケージ化して名前を付けることができます。実行後、現在のディレクトリに`slack_bot.difypkg`ファイルが作成されます:これが最終的なプラグインパッケージです。詳細なパッケージ化手順については、[ローカルファイルとしてパッケージ化して共有](/ja/develop-plugin/publishing/marketplace-listing/release-by-file)を参照してください。 ```bash # ./slack_botを実際のプラグインプロジェクトパスに置き換えてください。 @@ -333,9 +333,9 @@ dify plugin package ./slack_bot --- -### 6. プラグインの公開(オプション) +## 6. プラグインの公開(オプション) -[Dify Marketplaceリポジトリ](https://github.com/langgenius/dify-plugins)にアップロードして公開できます。公開前に、プラグインが[Dify Marketplace公開ガイドライン](/ja/develop-plugin/publishing/marketplace-listing/release-to-dify-marketplace)に準拠していることを確認してください。承認されると、コードはメインブランチにマージされ、プラグインは[Dify Marketplace](https://marketplace.dify.ai/)で公開されます。 +[Difyマーケットプレイスリポジトリ](https://github.com/langgenius/dify-plugins)にアップロードして公開できます。公開前に、プラグインが[Difyマーケットプレイス公開ガイドライン](/ja/develop-plugin/publishing/marketplace-listing/release-to-dify-marketplace)に準拠していることを確認してください。承認されると、コードはメインブランチにマージされ、プラグインは[Difyマーケットプレイス](https://marketplace.dify.ai/)で公開されます。 --- @@ -347,10 +347,10 @@ dify plugin package ./slack_bot - [Difyサービスの逆呼び出し](/ja/develop-plugin/features-and-specs/advanced-development/reverse-invocation) - Difyプラットフォームの機能を呼び出す方法を理解する - [逆呼び出し:App](/ja/develop-plugin/features-and-specs/advanced-development/reverse-invocation-app) - プラットフォーム内でアプリを呼び出す方法を学ぶ - [プラグインの公開](/ja/develop-plugin/publishing/marketplace-listing/release-overview) - 公開プロセスを学ぶ -- [Dify Marketplaceへの公開](/ja/develop-plugin/publishing/marketplace-listing/release-to-dify-marketplace) - Marketplace公開ガイド +- [Difyマーケットプレイスへの公開](/ja/develop-plugin/publishing/marketplace-listing/release-to-dify-marketplace) - マーケットプレイス公開ガイド - [エンドポイントの詳細定義](/ja/develop-plugin/dev-guides-and-walkthroughs/endpoint) - 詳細なエンドポイント定義 -### さらに読む +## さらに読む 完全なDifyプラグインプロジェクトの例については、[GitHubリポジトリ](https://github.com/langgenius/dify-plugins)をご覧ください。完全なソースコードと実装の詳細を含む追加のプラグインも見つかります。 diff --git a/ja/develop-plugin/dev-guides-and-walkthroughs/develop-flomo-plugin.mdx b/ja/develop-plugin/dev-guides-and-walkthroughs/develop-flomo-plugin.mdx index ff20a0b84..2305dc74e 100644 --- a/ja/develop-plugin/dev-guides-and-walkthroughs/develop-flomo-plugin.mdx +++ b/ja/develop-plugin/dev-guides-and-walkthroughs/develop-flomo-plugin.mdx @@ -1,8 +1,8 @@ --- -title: '10分でDifyプラグインを構築するガイド' -description: 'わずか10分でFlomoメモサービスと連携する機能的なDifyプラグインの構築方法を学びます' +title: 'Flomoツール(10分)' +description: 'わずか10分でFlomoメモサービスとエンドツーエンドで連携する機能的なDifyツールプラグインを構築します' language: en -standard_title: 10-Minute Guide to Building Dify Plugins +standard_title: Flomo Tool (10-min) --- ⚠️ このドキュメントは AI によって自動翻訳されています。不正確な部分がある場合は、[英語版](/en/develop-plugin/dev-guides-and-walkthroughs/develop-flomo-plugin) を参照してください。 @@ -37,13 +37,11 @@ standard_title: 10-Minute Guide to Building Dify Plugins ``` - [Dify GitHubリリースページ](https://github.com/langgenius/dify-plugin-daemon/releases)から最新のDify CLIを取得してください - + [Dify Plugin Daemonリリースページ](https://github.com/langgenius/dify-plugin-daemon/releases)から最新のバイナリをダウンロードしてください。x86_64の場合は`dify-plugin-linux-amd64`を、ARMの場合は`dify-plugin-linux-arm64`を選択してください。 + ```bash - # Download appropriate version chmod +x dify-plugin-linux-amd64 - mv dify-plugin-linux-amd64 dify - sudo mv dify /usr/local/bin/ + sudo mv dify-plugin-linux-amd64 /usr/local/bin/dify ``` @@ -102,8 +100,8 @@ resource: plugins: tools: - - flomo.yaml - + - provider/flomo.yaml + meta: version: 0.0.1 arch: @@ -117,7 +115,9 @@ meta: ## ステップ3:ツール定義の作成 -ツールインターフェースを定義する`flomo.yaml`ファイルを作成します: +ツールプラグインは2つのYAMLファイルを使用します:認証情報を宣言しツールをリストする**プロバイダー**ファイルと、呼び出し可能なツールごとに1つの**ツール**ファイルです。完全なスキーマについては[一般仕様](/ja/develop-plugin/features-and-specs/plugin-types/general-specifications)を参照してください。 + +`provider/flomo.yaml`を作成します: ```yaml identity: @@ -126,32 +126,61 @@ identity: label: en_US: Flomo Note zh_Hans: Flomo 浮墨笔记 -description: - human: + description: en_US: Add notes to your Flomo account directly from Dify. - zh_Hans: 直接从Dify添加笔记到您的Flomo账户。 - llm: > - A tool that allows users to save notes to Flomo. Use this tool when users want to save important information from the conversation. The tool accepts a 'content' parameter that contains the text to be saved as a note. -credential_schema: + zh_Hans: 直接从 Dify 添加笔记到您的 Flomo 账户。 + icon: icon.png +credentials_for_provider: api_url: - type: string + type: secret-input required: true label: en_US: API URL zh_Hans: API URL - human_description: + placeholder: + en_US: https://flomoapp.com/iwh/{token}/{secret}/ + help: en_US: Flomo API URL from your Flomo account settings. - zh_Hans: 从您的Flomo账户设置中获取的API URL。 -tool_schema: - content: + zh_Hans: 从您的 Flomo 账户设置中获取的 API URL。 +tools: + - tools/flomo.yaml +extra: + python: + source: provider/flomo.py +``` + +`tools/flomo.yaml`を作成します: + +```yaml +identity: + name: flomo + author: yourname + label: + en_US: Save to Flomo + zh_Hans: 保存到 Flomo +description: + human: + en_US: Save the conversation content as a Flomo note. + zh_Hans: 将对话内容保存为 Flomo 笔记。 + llm: > + Saves content to the user's Flomo account. Use this tool when the user + asks to save, capture, or remember the current message. Takes a single + `content` parameter containing the text to save. +parameters: + - name: content type: string required: true label: - en_US: Note Content + en_US: Note content zh_Hans: 笔记内容 human_description: en_US: Content to save as a note in Flomo. - zh_Hans: 要保存为Flomo笔记的内容。 + zh_Hans: 要保存为 Flomo 笔记的内容。 + llm_description: The text to save as a Flomo note. + form: llm +extra: + python: + source: tools/flomo.py ``` ## ステップ4:コアユーティリティ関数の実装 @@ -264,12 +293,11 @@ class FlomoTool(Tool): `.env`ファイルをDify環境の詳細で編集します: ``` INSTALL_METHOD=remote - REMOTE_INSTALL_HOST=debug-plugin.dify.dev - REMOTE_INSTALL_PORT=5003 + REMOTE_INSTALL_URL=debug-plugin.dify.dev:5003 REMOTE_INSTALL_KEY=your_debug_key ``` - - デバッグキーとホストはDifyダッシュボードで確認できます:右上の「プラグイン」アイコンをクリックし、デバッグアイコンをクリックします。ポップアップウィンドウで「APIキー」と「ホストアドレス」をコピーしてください。 + + デバッグURLとキーはDifyダッシュボードで確認できます:右上の**プラグイン**アイコンをクリックし、デバッグアイコンをクリックします。**APIキー**と**ホストアドレス**をコピーしてください(ホストにはすでにポートが含まれています)。 diff --git a/ja/develop-plugin/dev-guides-and-walkthroughs/develop-md-exporter.mdx b/ja/develop-plugin/dev-guides-and-walkthroughs/develop-md-exporter.mdx index 8ca0d7a96..0a2ddf6e9 100644 --- a/ja/develop-plugin/dev-guides-and-walkthroughs/develop-md-exporter.mdx +++ b/ja/develop-plugin/dev-guides-and-walkthroughs/develop-md-exporter.mdx @@ -1,5 +1,5 @@ --- -title: 'Markdownエクスポータープラグインの構築' +title: Markdownエクスポーター description: '会話をさまざまなドキュメント形式にエクスポートするプラグインの作成方法を学ぶ' language: en standard_title: Building a Markdown Exporter Plugin @@ -456,8 +456,7 @@ plugin = PluginRunner( Dify環境の詳細を設定します: ``` INSTALL_METHOD=remote - REMOTE_INSTALL_HOST=debug-plugin.dify.dev - REMOTE_INSTALL_PORT=5003 + REMOTE_INSTALL_URL=debug-plugin.dify.dev:5003 REMOTE_INSTALL_KEY=your_debug_key ``` @@ -509,7 +508,7 @@ dify plugin package ./ ドキュメント変換の核心的な課題は、フォーマットと構造を維持することです。このプラグインで使用されているアプローチは、まずMarkdownをHTML(中間形式)に変換し、その後そのHTMLをターゲット形式に処理します。 -この2段階のプロセスは柔軟性を提供します—HTML表現で動作する新しい出力モジュールを追加するだけで、追加のフォーマットをサポートするように拡張できます。 +この2段階のプロセスは柔軟性を提供します:HTML表現で動作する新しい出力モジュールを追加するだけで、追加のフォーマットをサポートするように拡張できます。 PDF生成には、CSSサポート付きの高品質なPDFレンダリングを提供するWeasyPrintが選択されました。Word文書には、python-docxがドキュメント構造に対する詳細な制御を提供します。 @@ -547,4 +546,4 @@ It will be automatically generated by the script. --- -[このページを編集](https://github.com/langgenius/dify-docs/edit/main/en/develop-plugin/dev-guides-and-walkthroughs/develop-md-exporter.mdx) | [問題を報告](https://github.com/langgenius/dify-docs/issues/new?template=docs.yml) \ No newline at end of file +[このページを編集](https://github.com/langgenius/dify-docs/edit/main/ja/develop-plugin/dev-guides-and-walkthroughs/develop-md-exporter.mdx) | [問題を報告](https://github.com/langgenius/dify-docs/issues/new?template=docs.yml) \ No newline at end of file diff --git a/ja/develop-plugin/dev-guides-and-walkthroughs/develop-multimodal-data-processing-tool.mdx b/ja/develop-plugin/dev-guides-and-walkthroughs/develop-multimodal-data-processing-tool.mdx index a184e024a..0fb628653 100644 --- a/ja/develop-plugin/dev-guides-and-walkthroughs/develop-multimodal-data-processing-tool.mdx +++ b/ja/develop-plugin/dev-guides-and-walkthroughs/develop-multimodal-data-processing-tool.mdx @@ -1,25 +1,25 @@ --- -title: ナレッジパイプラインでマルチモーダルデータを処理するツールプラグインの構築 +title: マルチモーダルツール +description: ナレッジベースノードがマルチモーダル出力をテキストと一緒に埋め込めるように、画像、音声、または動画を出力するツールプラグインを設定する --- ⚠️ このドキュメントは AI によって自動翻訳されています。不正確な部分がある場合は、[英語版](/en/develop-plugin/dev-guides-and-walkthroughs/develop-multimodal-data-processing-tool) を参照してください。 ナレッジパイプラインでは、ナレッジベースノードは2種類のマルチモーダルデータ形式の入力をサポートしています:`multimodal-Parent-Child` と `multimodal-General`。 -マルチモーダルデータ処理用のツールプラグインを開発する際、プラグインの出力するマルチモーダルデータ(テキスト、画像、音声、動画など)がナレッジベースノードで正しく認識・ベクトル化されるためには、以下の設定が必要です: +マルチモーダルデータ処理用のツールプラグインを開発する際、プラグインの出力するマルチモーダルデータ(テキスト、画像、音声、動画など)がナレッジベースノードで正しく認識・埋め込みされるためには、以下の設定が必要です: -- **ツールコード内で**、APIを呼び出してファイルオブジェクト `files` をアップロード・構築します。 +- **ツールコードファイル内で**、ツールセッションインターフェースを呼び出してファイルをアップロードし、`files` オブジェクトを構築します。 -- **ツールプロバイダーのYAML**ファイルで、`output_schema` を `multimodal-Parent-Child` または `multimodal-General` として宣言します。 +- **ツールプロバイダーのYAMLファイル**で、`output_schema` を `multimodal-Parent-Child` または `multimodal-General` として宣言します。 -## ファイルオブジェクトのアップロードと構築 +## ファイルのアップロードとファイルオブジェクトの構築 -マルチモーダルデータ(画像など)を処理する際は、まずDifyのツールセッションインターフェースを通じてファイルをアップロードし、ファイルのメタデータを取得する必要があります。 +マルチモーダルデータ(画像など)を処理する際は、まずDifyのツールセッションツールを使用してファイルをアップロードし、ファイルのメタデータを取得する必要があります。 -以下にDify公式プラグインDify Extractorを例として、ファイルのアップロードとファイルオブジェクトの構築方法を示します。 +以下の例では、Dify公式プラグイン **Dify Extractor** を使用して、ファイルのアップロードと `files` オブジェクトの構築方法を示します。 ```python - # Upload the file using the tool session file_res = self._tool.session.file.upload( file_name, # filename @@ -30,8 +30,7 @@ file_res = self._tool.session.file.upload( # Generate a Markdown image reference using the file preview URL image_url = f"![image]({file_res.preview_url})" ``` - -アップロードインターフェースは、ファイルの基本情報を含む `UploadFileResponse` オブジェクトを返します: +アップロードインターフェースは、ファイル情報を含む `UploadFileResponse` オブジェクトを返します。その構造は以下の通りです: ```python from enum import Enum @@ -62,10 +61,10 @@ image_url = f"![image]({file_res.preview_url})" preview_url: str | None = None ``` -その構造に基づき、ファイル情報(`name`、`size`、`extension`、`mime_type` など)をマルチモーダル出力構造の `files` フィールドにマッピングできます。 +ファイル情報(`name`、`size`、`extension`、`mime_type` など)をマルチモーダル出力構造の `files` フィールドにマッピングできます。 - ```yaml multimodal_parent_child_structure highlight={22-62} expandable + ```yaml multimodal_parent_child_structure highlight={22-62} expandable { "$id": "https://dify.ai/schemas/v1/multimodal_parent_child_structure.json", "$schema": "http://json-schema.org/draft-07/schema#", @@ -146,7 +145,7 @@ image_url = f"![image]({file_res.preview_url})" } ``` - ```yaml multimodal_general_structure highlight={18-56} expandable + ```yaml multimodal_general_structure highlight={18-56} expandable { "$id": "https://dify.ai/schemas/v1/multimodal_general_structure.json", "$schema": "http://json-schema.org/draft-07/schema#", @@ -233,7 +232,7 @@ output_schema: # $ref: "https://dify.ai/schemas/v1/multimodal_general_structure.json" ``` -`multimodal-Parent-Child` の例として、完全なYAMLファイルの設定は以下の通りです: +`multimodal-Parent-Child` の例として、完全なYAML設定は以下の通りです: ```yaml expandable identity: diff --git a/ja/develop-plugin/dev-guides-and-walkthroughs/endpoint.mdx b/ja/develop-plugin/dev-guides-and-walkthroughs/endpoint.mdx index 4e041be0d..3eec8eb98 100644 --- a/ja/develop-plugin/dev-guides-and-walkthroughs/endpoint.mdx +++ b/ja/develop-plugin/dev-guides-and-walkthroughs/endpoint.mdx @@ -6,17 +6,15 @@ dimensions: level: intermediate standard_title: Endpoint language: ja -title: Neko Cat Endpoint +title: Endpoint プラグイン description: 著者 Yeuoly、Allen。このドキュメントでは、Neko Cat プロジェクトを例として、Dify プラグインにおける Endpoint の構造と実装について詳しく説明します。Endpoint グループの定義、インターフェースの設定、_invoke メソッドの実装、リクエストとレスポンスの処理について説明します。また、各種 YAML 設定フィールドの意味と使用方法についても解説します。 --- ⚠️ このドキュメントは AI によって自動翻訳されています。不正確な部分がある場合は、[英語版](/en/develop-plugin/dev-guides-and-walkthroughs/endpoint) を参照してください。 -# Endpoint +このドキュメントでは、[Neko Cat](https://github.com/langgenius/dify-plugin-sdks/tree/main/python/examples/neko) プロジェクトを例として、プラグイン内の Endpoint の構造について説明します。Endpoint はプラグインが公開する HTTP インターフェースで、外部システムとの統合に使用できます。完全なプラグインコードについては、[GitHub リポジトリ](https://github.com/langgenius/dify-plugin-sdks/tree/main/python/examples/neko)を参照してください。 -このドキュメントでは、[Neko Cat](/ja/develop-plugin/dev-guides-and-walkthroughs/endpoint) プロジェクトを例として、プラグイン内の Endpoint の構造について説明します。Endpoint はプラグインが公開する HTTP インターフェースで、外部システムとの統合に使用できます。完全なプラグインコードについては、[GitHub リポジトリ](https://github.com/langgenius/dify-plugin-sdks/tree/main/python/examples/neko)を参照してください。 - -### グループ定義 +## グループ定義 `Endpoint` グループは、複数の `Endpoint` の集合です。Dify プラグイン内で新しい `Endpoint` を作成する際、以下の設定を入力する必要がある場合があります。 @@ -27,10 +25,10 @@ description: 著者 Yeuoly、Allen。このドキュメントでは、Neko Cat `Endpoint Name` の他に、グループの設定情報を記述することで新しいフォーム項目を追加できます。保存をクリックすると、含まれる複数のインターフェースが表示され、それらは同じ設定情報を使用します。 - ![](https://assets-docs.dify.ai/2024/11/b778b7093b7df0dc80a476c65ddcbe58.png) + ![Besides the Endpoint Name, You Can Add New Form Items by Writing the Group's](https://assets-docs.dify.ai/2024/11/b778b7093b7df0dc80a476c65ddcbe58.png) -#### **構造** +### **構造** * `settings` (map[string] [ProviderConfig](/ja/develop-plugin/features-and-specs/plugin-types/general-specifications#providerconfig)): Endpoint 設定の定義。 * `endpoints` (list[string]、必須): 具体的な `endpoint` インターフェース定義を指します。 @@ -55,7 +53,7 @@ endpoints: - endpoints/neko.yaml ``` -### インターフェース定義 +## インターフェース定義 * `path` (string): Werkzeug インターフェース標準に従います。 * `method` (string): インターフェースメソッド、`HEAD`、`GET`、`POST`、`PUT`、`DELETE`、`OPTIONS` のみサポートします。 @@ -71,7 +69,7 @@ extra: source: "endpoints/duck.py" ``` -### インターフェース実装 +## インターフェース実装 `dify_plugin.Endpoint` を継承するサブクラスを実装し、`_invoke` メソッドを実装する必要があります。 diff --git a/ja/develop-plugin/dev-guides-and-walkthroughs/tool-oauth.mdx b/ja/develop-plugin/dev-guides-and-walkthroughs/tool-oauth.mdx index 9df885092..4c8da32da 100644 --- a/ja/develop-plugin/dev-guides-and-walkthroughs/tool-oauth.mdx +++ b/ja/develop-plugin/dev-guides-and-walkthroughs/tool-oauth.mdx @@ -1,5 +1,6 @@ --- -title: "ツールプラグインにOAuthサポートを追加する" +title: Tool OAuth +description: 手動でのAPIキー入力をOAuth認可フローに置き換えることで、ユーザーがワンクリックでサードパーティサービスへのアクセスを許可できるようにします --- ⚠️ このドキュメントは AI によって自動翻訳されています。不正確な部分がある場合は、[英語版](/en/develop-plugin/dev-guides-and-walkthroughs/tool-oauth) を参照してください。 @@ -16,6 +17,33 @@ OAuthは、GmailやGitHubなどのサードパーティサービスからユー DifyにおけるOAuthには、開発者が理解し設計すべき**2つの別々のフロー**があります。 +```mermaid +sequenceDiagram + autonumber + participant Admin as Admin / Developer + participant Service as Third-party Service + participant Dify + participant User + + rect rgb(235, 245, 255) + Note over Admin,Dify: Flow 1: One-time OAuth client setup + Admin->>Service: Register OAuth app + Service-->>Admin: client_id + client_secret + Admin->>Dify: Configure plugin OAuth client + end + + rect rgb(245, 255, 235) + Note over User,Service: Flow 2: Per-user authorization + User->>Dify: Click "Authorize" + Dify->>Service: Redirect to consent screen + User->>Service: Approve + Service-->>Dify: Authorization code + Dify->>Service: Exchange for access token + Service-->>Dify: Access + refresh tokens + Dify-->>User: Tool ready to use + end +``` + ### フロー1: OAuthクライアントセットアップ(管理者/開発者フロー) @@ -173,7 +201,6 @@ def _oauth_get_authorization_url(self, redirect_uri: str, system_credentials: Ma return f"{self._AUTH_URL}?{urllib.parse.urlencode(params)}" ``` - ```python _oauth_get_credentials expandable def _oauth_get_credentials( self, redirect_uri: str, system_credentials: Mapping[str, Any], request: Request @@ -249,7 +276,6 @@ def _oauth_get_credentials( raise ToolProviderOAuthError(f"Failed to exchange authorization code: {str(e)}") ``` - ```python _oauth_refresh_credentials def _oauth_refresh_credentials( self, redirect_uri: str, system_credentials: Mapping[str, Any], credentials: Mapping[str, Any] @@ -341,10 +367,10 @@ OAuthとAPI_KEY認証の両方をサポートするプラグインの場合、`s ### 4. 正しいバージョンを指定する -以前のバージョンのプラグインSDKとDifyはOAuth認証をサポートしていません。そのため、プラグインSDKのバージョンを以下に設定する必要があります: +OAuthには最新のSDKとDifyバージョンが必要です。`requirements.txt`でプラグインSDKを固定します: ``` -dify_plugin>=0.4.2,<0.5.0. +dify_plugin>=0.5.0 ``` `manifest.yaml`に、最小Difyバージョンを追加します: diff --git a/ja/develop-plugin/dev-guides-and-walkthroughs/tool-plugin.mdx b/ja/develop-plugin/dev-guides-and-walkthroughs/tool-plugin.mdx index f71727ece..ff97d5732 100644 --- a/ja/develop-plugin/dev-guides-and-walkthroughs/tool-plugin.mdx +++ b/ja/develop-plugin/dev-guides-and-walkthroughs/tool-plugin.mdx @@ -5,14 +5,14 @@ dimensions: detail: standard level: intermediate standard_title: Tool Plugin -language: en +language: ja title: ツールプラグイン description: このドキュメントでは、Dify用のツールプラグインの開発方法について詳細な手順を提供します。Google Searchを例として、完全なツールプラグイン開発プロセスを示します。内容には、プラグインの初期化、テンプレートの選択、ツールプロバイダー設定ファイルの定義、サードパーティサービス認証情報の追加、ツール機能コードの実装、デバッグ、およびリリース用のパッケージングが含まれます。 --- ⚠️ このドキュメントは AI によって自動翻訳されています。不正確な部分がある場合は、[英語版](/en/develop-plugin/dev-guides-and-walkthroughs/tool-plugin) を参照してください。 -ツールとは、Chatflow / ワークフロー / エージェントタイプのアプリケーションから呼び出すことができるサードパーティサービスを指し、Difyアプリケーションを強化するための完全なAPI実装機能を提供します。例えば、オンライン検索、画像生成などの追加機能を追加できます。 +ツールとは、チャットフロー / ワークフロー / Agentタイプのアプリケーションから呼び出すことができるサードパーティサービスを指し、Difyアプリケーションを強化するための完全なAPI実装機能を提供します。例えば、オンライン検索、画像生成などの追加機能を追加できます。 ![ツールプラグインの例](https://assets-docs.dify.ai/2024/12/7e7bcf1f9e3acf72c6917ea9de4e4613.png) @@ -32,14 +32,14 @@ description: このドキュメントでは、Dify用のツールプラグイン この記事では、`Google Search`を例として、ツールプラグインを素早く開発する方法を説明します。 -### 前提条件 +## 前提条件 - Difyプラグインスキャフォールディングツール - Python環境(バージョン 3.12) -プラグイン開発スキャフォールディングツールの準備方法の詳細については、[開発ツールの初期化](/ja/develop-plugin/getting-started/cli)を参照してください。初めてプラグインを開発する場合は、まず[Difyプラグイン開発:Hello Worldガイド](/ja/develop-plugin/dev-guides-and-walkthroughs/tool-plugin)を読むことをお勧めします。 +プラグイン開発スキャフォールディングツールの準備方法の詳細については、[開発ツールの初期化](/ja/develop-plugin/getting-started/cli)を参照してください。 -### 新しいプロジェクトの作成 +## 新しいプロジェクトの作成 スキャフォールディングコマンドラインツールを実行して、新しいDifyプラグインプロジェクトを作成します。 @@ -55,7 +55,7 @@ dify plugin init > 以下のテキストでは、`dify`をコマンドライン例として使用します。問題が発生した場合は、`dify`コマンドをコマンドラインツールのパスに置き換えてください。 -### プラグインタイプとテンプレートの選択 +## プラグインタイプとテンプレートの選択 スキャフォールディングツールのすべてのテンプレートは完全なコードプロジェクトを提供します。この例では、`Tool`プラグインを選択します。 @@ -65,7 +65,7 @@ dify plugin init ![プラグインタイプ:ツール](https://assets-docs.dify.ai/2024/12/dd3c0f9a66454e15868eabced7b74fd6.png) -#### プラグイン権限の設定 +### プラグイン権限の設定 プラグインは、Difyプラットフォームから読み取る権限も必要です。このサンプルプラグインに以下の権限を付与します: @@ -82,9 +82,9 @@ dify plugin init ![プラグイン権限](https://assets-docs.dify.ai/2024/12/9cf92c2e74dce55e6e9e331d031e5a9f.png) -### ツールプラグインの開発 +## ツールプラグインの開発 -#### 1. ツールプロバイダーファイルの作成 +### 1. ツールプロバイダーファイルの作成 ツールプロバイダーファイルはyaml形式のファイルで、ツールプラグインの基本設定エントリとして理解でき、ツールに必要な認証情報を提供するために使用されます。 @@ -140,7 +140,7 @@ class ToolLabelEnum(Enum): OTHER = 'other' ``` -#### **2. サードパーティサービス認証情報の完成** +### **2. サードパーティサービス認証情報の完成** 開発の便宜のため、サードパーティサービス`SerpApi`が提供するGoogle Search APIを使用することを選択します。`SerpApi`は使用にAPI Keyが必要なため、`yaml`ファイルに`credentials_for_provider`フィールドを追加する必要があります。 @@ -186,7 +186,7 @@ extra: - プロバイダーに含まれるツールを指定する必要があります。この例では、`tools/google_search.yaml`ファイルのみが含まれています。 - プロバイダーとして、基本情報を定義するだけでなく、そのコードロジックの一部を実装する必要があるため、その実装ロジックを指定する必要があります。この例では、機能のコードファイルを`google.py`に配置しますが、まだ実装せず、最初に`google_search`のコードを書きます。 -#### 3. ツールYAMLファイルの記入 +### 3. ツールYAMLファイルの記入 ツールプラグインには複数のツール機能を持たせることができ、各ツール機能には、ツール機能の基本情報、パラメータ、出力などを記述する`yaml`ファイルが必要です。 @@ -231,10 +231,10 @@ extra: - `type`(必須)パラメータタイプ、現在`string`、`number`、`boolean`、`select`、`secret-input`の5つのタイプをサポートしており、それぞれ文字列、数値、ブール値、ドロップダウン、暗号化入力ボックスに対応しています。機密情報には`secret-input`タイプを使用してください。 - `label`(必須)パラメータラベル、フロントエンド表示用。 - `form`(必須)フォームタイプ、現在`llm`、`form`の2つのタイプをサポートしています。 - - エージェントアプリケーションでは、`llm`はパラメータがLLM自体によって推論されることを意味し、`form`はこのツールを使用するために事前にパラメータを設定できることを意味します。 + - Agentアプリケーションでは、`llm`はパラメータがLLM自体によって推論されることを意味し、`form`はこのツールを使用するために事前にパラメータを設定できることを意味します。 - ワークフローアプリケーションでは、`llm`と`form`の両方をフロントエンドで入力する必要がありますが、`llm`パラメータはツールノードの入力変数として使用されます。 - `required`必須かどうか - - `llm`モードでは、パラメータが必須の場合、エージェントはこのパラメータを推論する必要があります。 + - `llm`モードでは、パラメータが必須の場合、Agentはこのパラメータを推論する必要があります。 - `form`モードでは、パラメータが必須の場合、ユーザーは会話開始前にフロントエンドでこのパラメータを入力する必要があります。 - `options`パラメータオプション - `llm`モードでは、Difyはすべてのオプションをモデルに渡し、モデルはこれらのオプションに基づいて推論できます。 @@ -246,7 +246,7 @@ extra: - `placeholder`入力フィールドのプロンプトテキスト、フォームタイプが`form`でパラメータタイプが`string`、`number`、`secret-input`の場合に設定でき、複数言語をサポート。 - `llm_description`モデルに渡される説明。モデルがこのパラメータをより良く理解できるように、このパラメータに関するできるだけ詳細な情報をここに記述して、モデルがパラメータを理解できるようにしてください。 -#### 4. ツールコードの準備 +### 4. ツールコードの準備 ツールの設定情報を入力した後、ツールの機能のコードを書き始め、ツールの論理的な目的を実装できます。`/tools`ディレクトリに`google_search.py`を作成し、以下の内容を記述します: @@ -297,7 +297,7 @@ class GoogleSearchTool(Tool): この例は、`serpapi`にリクエストを送信し、`self.create_json_message`を使用してフォーマットされた`json`データ文字列を返すことを意味します。返却データタイプの詳細については、[プラグインのリモートデバッグ](/ja/develop-plugin/features-and-specs/plugin-types/remote-debug-a-plugin)と[永続ストレージKV](/ja/develop-plugin/features-and-specs/plugin-types/persistent-storage-kv)ドキュメントを参照してください。 -#### 5. ツールプロバイダーコードの完成 +### 5. ツールプロバイダーコードの完成 最後に、認証情報の検証ロジックを実装するプロバイダーの実装コードを作成する必要があります。認証情報の検証が失敗した場合、`ToolProviderCredentialValidationError`例外がスローされます。検証が成功すると、`google_search`ツールサービスが正しくリクエストされます。 @@ -321,7 +321,7 @@ class GoogleProvider(ToolProvider): raise ToolProviderCredentialValidationError(str(e)) ``` -### プラグインのデバッグ +## プラグインのデバッグ プラグインの開発が完了したら、プラグインが正常に機能するかどうかをテストする必要があります。Difyは、テスト環境でプラグインの機能を素早く検証するのに役立つ便利なリモートデバッグ方法を提供しています。 @@ -347,7 +347,7 @@ REMOTE_INSTALL_KEY=********-****-****-****-************ ![Python -M Mainコマンドを実行してプラグインを起動します](https://assets-docs.dify.ai/2024/11/0fe19a8386b1234755395018bc2e0e35.png) -### プラグインのパッケージング(オプション) +## プラグインのパッケージング(オプション) プラグインが正常に実行できることを確認した後、以下のコマンドラインツールを使用してプラグインをパッケージ化して名前を付けることができます。実行後、現在のフォルダに`google.difypkg`ファイルが作成されます。これが最終的なプラグインパッケージです。 @@ -359,27 +359,27 @@ dify plugin package ./google おめでとうございます!ツールタイプのプラグインの開発、デバッグ、パッケージングの全プロセスを完了しました! -### プラグインの公開(オプション) +## プラグインの公開(オプション) プラグインをDify Marketplaceに公開したい場合は、プラグインが[Dify Marketplaceへの公開](/ja/develop-plugin/publishing/marketplace-listing/release-to-dify-marketplace)の仕様に従っていることを確認してください。レビューに合格すると、コードはメインブランチにマージされ、自動的に[Dify Marketplace](https://marketplace.dify.ai/)で公開されます。 [公開の概要](/ja/develop-plugin/publishing/marketplace-listing/release-overview) -### さらに探索 +## さらに探索 -#### **クイックスタート**: +### **クイックスタート**: - [拡張プラグインの開発](/ja/develop-plugin/dev-guides-and-walkthroughs/endpoint) - [モデルプラグインの開発](/ja/develop-plugin/dev-guides-and-walkthroughs/creating-new-model-provider) - [バンドルプラグイン:複数のプラグインのパッケージング](/ja/develop-plugin/features-and-specs/advanced-development/bundle) -#### **プラグインインターフェースドキュメント**: +### **プラグインインターフェースドキュメント**: - [一般仕様](/ja/develop-plugin/features-and-specs/plugin-types/general-specifications) - マニフェスト構造とツール仕様 - [Endpoint](/ja/develop-plugin/dev-guides-and-walkthroughs/endpoint) - 詳細なEndpointの定義 - [リバース呼び出し](/ja/develop-plugin/features-and-specs/advanced-development/reverse-invocation) - Dify機能のリバース呼び出し - [モデルスキーマ](/ja/develop-plugin/features-and-specs/plugin-types/model-schema) - モデル -- [エージェントプラグイン](/ja/develop-plugin/features-and-specs/advanced-development/reverse-invocation) - エージェント戦略の拡張 +- [Agentプラグイン](/ja/develop-plugin/features-and-specs/advanced-development/reverse-invocation) - Agent戦略の拡張 ## 次の学習ステップ diff --git a/ja/develop-plugin/dev-guides-and-walkthroughs/trigger-plugin.mdx b/ja/develop-plugin/dev-guides-and-walkthroughs/trigger-plugin.mdx index ef9029b6d..84a3230a1 100644 --- a/ja/develop-plugin/dev-guides-and-walkthroughs/trigger-plugin.mdx +++ b/ja/develop-plugin/dev-guides-and-walkthroughs/trigger-plugin.mdx @@ -1,12 +1,13 @@ --- title: "トリガープラグイン" +description: "サードパーティの webhook イベントをワークフロー開始シグナルに変換する Dify 1.10.0 以降のトリガープラグインを構築する" --- ⚠️ このドキュメントは AI によって自動翻訳されています。不正確な部分がある場合は、[英語版](/en/develop-plugin/dev-guides-and-walkthroughs/trigger-plugin) を参照してください。 ## トリガープラグインとは? -トリガーは Dify v1.10.0 で新しいタイプの開始ノードとして導入されました。コード、ツール、ナレッジベース検索などの機能ノードとは異なり、トリガーの目的は**サードパーティのイベントを Dify が認識して処理できる入力形式に変換すること**です。 +トリガーは Dify v1.10.0 で新しいタイプの開始ノードとして導入されました。コード、ツール、ナレッジ検索などの機能ノードとは異なり、トリガーの目的は**サードパーティのイベントを Dify が認識して処理できる入力形式に変換すること**です。 ![トリガープラグインの紹介](/images/develop-plugin/dev-guide/trigger-plugin-intro.png) diff --git a/ja/develop-plugin/features-and-specs/advanced-development/bundle.mdx b/ja/develop-plugin/features-and-specs/advanced-development/bundle.mdx index 00fd55d38..765e98f1b 100644 --- a/ja/develop-plugin/features-and-specs/advanced-development/bundle.mdx +++ b/ja/develop-plugin/features-and-specs/advanced-development/bundle.mdx @@ -5,7 +5,7 @@ dimensions: detail: advanced level: beginner standard_title: Bundle -language: en +language: ja title: Bundleプラグインパッケージ description: このドキュメントでは、Bundleプラグインパッケージの概念と開発方法を紹介します。Bundleプラグインパッケージは複数のプラグインを集約でき、3つのタイプ(Marketplace、GitHub、Package)をサポートしています。ドキュメントでは、Bundleプロジェクトの作成、異なるタイプの依存関係の追加、Bundleプロジェクトのパッケージ化までの全プロセスを詳しく説明します。 --- @@ -20,14 +20,14 @@ Dify CLIツールを使用して、複数のプラグインをBundleにパッケ * `GitHub`タイプ。GitHubリポジトリアドレス、リリースバージョン番号、アセットファイル名を保存します。インポート時に、Difyは対応するGitHubリポジトリにアクセスしてプラグインパッケージをダウンロードします。 * `Package`タイプ。プラグインパッケージはBundle内に直接保存されます。参照元を保存しませんが、Bundleパッケージのサイズが大きくなる可能性があります。 -### 前提条件 +## 前提条件 * Difyプラグインスキャフォールディングツール * Python環境(バージョン 3.12) プラグイン開発スキャフォールディングツールの準備方法の詳細については、[開発ツールの初期化](/ja/develop-plugin/getting-started/cli)を参照してください。 -### Bundleプロジェクトの作成 +## Bundleプロジェクトの作成 現在のディレクトリで、スキャフォールディングコマンドラインツールを実行して新しいプラグインパッケージプロジェクトを作成します。 @@ -41,7 +41,7 @@ Dify CLIツールを使用して、複数のプラグインをBundleにパッケ dify bundle init ``` -#### 1. プラグイン情報の入力 +### 1. プラグイン情報の入力 プロンプトに従って、プラグイン名、作成者情報、プラグインの説明を設定します。チームで共同作業している場合は、作成者として組織名を入力することもできます。 @@ -54,10 +54,10 @@ dify bundle init 情報を入力してEnterを押すと、Bundleプラグインプロジェクトディレクトリが自動的に作成されます。 - ![](https://assets-docs.dify.ai/2024/12/356d1a8201fac3759bf01ee64e79a52b.png) + ![情報を入力してEnterを押すと、Bundleプラグインプロジェクト](https://assets-docs.dify.ai/2024/12/356d1a8201fac3759bf01ee64e79a52b.png) -#### 2. 依存関係の追加 +### 2. 依存関係の追加 * **Marketplace** @@ -89,7 +89,7 @@ dify-plugin bundle append package . --package_path=./openai.difypkg `package_path`はプラグインパッケージのディレクトリです。 -### Bundleプロジェクトのパッケージ化 +## Bundleプロジェクトのパッケージ化 次のコマンドを実行してBundleプラグインをパッケージ化します: diff --git a/ja/develop-plugin/features-and-specs/advanced-development/customizable-model.mdx b/ja/develop-plugin/features-and-specs/advanced-development/customizable-model.mdx index 242cf8d24..99db11194 100644 --- a/ja/develop-plugin/features-and-specs/advanced-development/customizable-model.mdx +++ b/ja/develop-plugin/features-and-specs/advanced-development/customizable-model.mdx @@ -7,7 +7,7 @@ dimensions: standard_title: Customizable Model language: ja title: カスタムモデルの統合 -description: このドキュメントでは、Xinferenceモデルを例として、カスタムモデルをDifyに統合する方法を詳しく説明します。モデルプロバイダーファイルの作成、モデルタイプに基づくコードの記述、モデル呼び出しロジックの実装、例外処理、デバッグ、公開までの完全なプロセスをカバーしています。特に、LLM呼び出し、トークン計算、認証情報の検証、パラメータ生成などのコアメソッドの実装を詳しく説明します。 +description: このドキュメントでは、Xinferenceモデルを例として、カスタムモデルをDifyに統合する方法を詳しく説明します。モデルプロバイダーファイルの作成、モデルタイプに基づくコードの記述、モデル呼び出しロジックの実装、例外処理、デバッグ、公開までの完全なプロセスをカバーしています。特に、LLM呼び出し、token計算、認証情報の検証、パラメータ生成などのコアメソッドの実装を詳しく説明します。 --- ⚠️ このドキュメントは AI によって自動翻訳されています。不正確な部分がある場合は、[英語版](/en/develop-plugin/features-and-specs/advanced-development/customizable-model) を参照してください。 @@ -183,9 +183,9 @@ def _handle_sync_response(self, **kwargs) -> LLMResult: return LLMResult(**response) ``` -* **入力トークンの事前計算** +* **入力tokenの事前計算** -モデルがトークンカウントインターフェースを提供していない場合は、単に0を返します: +モデルがtokenカウントインターフェースを提供していない場合は、単に0を返します: ```python def get_num_tokens( @@ -265,9 +265,7 @@ def get_customizable_model_schema(self, model: str, credentials: dict) -> AIMode ) ) - """ - some NOT IMPORTANT code here - """ + # ... additional ParameterRule entries omitted for brevity ... entity = AIModelEntity( model=model, diff --git a/ja/develop-plugin/features-and-specs/advanced-development/reverse-invocation-app.mdx b/ja/develop-plugin/features-and-specs/advanced-development/reverse-invocation-app.mdx index e5ff9087d..131cce0b8 100644 --- a/ja/develop-plugin/features-and-specs/advanced-development/reverse-invocation-app.mdx +++ b/ja/develop-plugin/features-and-specs/advanced-development/reverse-invocation-app.mdx @@ -64,15 +64,12 @@ class Duck(Endpoint): app_id = values["app_id"] def generator(): - # Note: The original example incorrectly called self.session.app.workflow.invoke - # It should call self.session.app.chat.invoke for a chat app. - # Assuming a chat app is intended here based on the section title. response = self.session.app.chat.invoke( - app_id=app_id, - inputs={}, # Provide actual inputs as needed - response_mode="streaming", - conversation_id="some-conversation-id", # Provide a conversation ID if needed - files=[] + app_id=app_id, + inputs={}, + response_mode="streaming", + conversation_id="some-conversation-id", + files=[], ) for data in response: diff --git a/ja/develop-plugin/features-and-specs/advanced-development/reverse-invocation-model.mdx b/ja/develop-plugin/features-and-specs/advanced-development/reverse-invocation-model.mdx index 56d35c366..bf540ff35 100644 --- a/ja/develop-plugin/features-and-specs/advanced-development/reverse-invocation-model.mdx +++ b/ja/develop-plugin/features-and-specs/advanced-development/reverse-invocation-model.mdx @@ -18,15 +18,15 @@ description: このドキュメントでは、プラグインがDifyプラット 例えば、`LLM`型のモデルでは、`completion_params`と`mode`パラメータも含める必要があります。この構造を手動で構築するか、`model-selector`型のパラメータまたは設定を使用できます。 -### LLMの呼び出し +## LLMの呼び出し -#### **エントリーポイント** +**エントリーポイント** ```python self.session.model.llm ``` -#### **エンドポイント** +**エンドポイント** ```python def invoke( @@ -42,7 +42,7 @@ description: このドキュメントでは、プラグインがDifyプラット 呼び出すモデルに`tool_call`機能がない場合、ここで渡される`tools`は有効にならないことに注意してください。 -#### **使用例** +**使用例** `Tool`内でOpenAIの`gpt-4o-mini`モデルを呼び出したい場合は、以下のサンプルコードを参照してください: @@ -83,7 +83,7 @@ class LLMTool(Tool): コード内で`tool_parameters`から`query`パラメータが渡されていることに注意してください。 -### **ベストプラクティス** +## **ベストプラクティス** `LLMModelConfig`を手動で構築することは推奨されません。代わりに、ユーザーがUI上で使用したいモデルを選択できるようにしてください。この場合、以下のように`model`パラメータを追加してツールのパラメータリストを変更できます: @@ -154,7 +154,7 @@ class LLMTool(Tool): content='you are a helpful assistant' ), UserPromptMessage( - content=tool_parameters.get('query') # Assuming 'query' is still needed, otherwise use 'prompt' from parameters + content=tool_parameters.get('prompt') ) ], stream=True @@ -166,7 +166,7 @@ class LLMTool(Tool): yield self.create_text_message(text=chunk.delta.message.content) ``` -### Summaryの呼び出し +## Summaryの呼び出し このエンドポイントにリクエストして、テキストを要約できます。現在のワークスペース内のシステムモデルを使用してテキストを要約します。 @@ -187,7 +187,7 @@ class LLMTool(Tool): ) -> str: ``` -### TextEmbeddingの呼び出し +## TextEmbeddingの呼び出し **エントリーポイント** @@ -199,12 +199,15 @@ class LLMTool(Tool): ```python def invoke( - self, model_config: TextEmbeddingResult, texts: list[str] + self, + model_config: TextEmbeddingModelConfig, + texts: list[str], + input_type: EmbeddingInputType = EmbeddingInputType.QUERY, ) -> TextEmbeddingResult: pass ``` -### Rerankの呼び出し +## Rerankの呼び出し **エントリーポイント** @@ -221,7 +224,7 @@ class LLMTool(Tool): pass ``` -### TTSの呼び出し +## TTSの呼び出し **エントリーポイント** @@ -240,7 +243,7 @@ class LLMTool(Tool): `tts`エンドポイントが返す`bytes`ストリームは`mp3`オーディオバイトストリームであることに注意してください。各イテレーションは完全なオーディオセグメントを返します。より詳細な処理タスクを実行したい場合は、適切なライブラリを選択してください。 -### Speech2Textの呼び出し +## Speech2Textの呼び出し **エントリーポイント** @@ -259,7 +262,7 @@ class LLMTool(Tool): ここで`file`は`mp3`形式でエンコードされたオーディオファイルです。 -### Moderationの呼び出し +## Moderationの呼び出し **エントリーポイント** diff --git a/ja/develop-plugin/features-and-specs/plugin-types/plugin-logging.mdx b/ja/develop-plugin/features-and-specs/plugin-types/plugin-logging.mdx index 741134c06..ae6817828 100644 --- a/ja/develop-plugin/features-and-specs/plugin-types/plugin-logging.mdx +++ b/ja/develop-plugin/features-and-specs/plugin-types/plugin-logging.mdx @@ -1,7 +1,10 @@ --- title: プラグインのロギング +description: SDK の plugin_logger_handler を使用してプラグイン内部からログを出力します。リモートデバッグ中に確認でき、デーモンコンテナログに永続化されます --- + ⚠️ このドキュメントは AI によって自動翻訳されています。不正確な部分がある場合は、[英語版](/en/develop-plugin/features-and-specs/plugin-types/plugin-logging) を参照してください。 + プラグインの開発者は、開発やデバッグの目的で、プラグインの処理の過程で任意の文字列をログに出力したいと考えることがあるでしょう。 この目的で、プラグインの SDK には、Python の標準ライブラリである `logging` 用のハンドラが実装されています。これを利用すれば、**リモートデバッグ中の標準出力** にも **プラグインデーモンのコンテナログ**(コミュニティ版のみ)にも、任意の文字列を出力できます。 @@ -46,4 +49,4 @@ It will be automatically generated by the script. --- -[このページを編集する](https://github.com/langgenius/dify-docs/edit/main/ja/develop-plugin/features-and-specs/plugin-types/plugin-logging.mdx) | [問題を報告する](https://github.com/langgenius/dify-docs/issues/new?template=docs.yml) +[このページを編集する](https://github.com/langgenius/dify-docs/edit/main/ja/develop-plugin/features-and-specs/plugin-types/plugin-logging.mdx) | [問題を報告する](https://github.com/langgenius/dify-docs/issues/new?template=docs.yml) \ No newline at end of file diff --git a/ja/develop-plugin/publishing/standards/third-party-signature-verification.mdx b/ja/develop-plugin/publishing/standards/third-party-signature-verification.mdx index 6fab87576..7e5ccf264 100644 --- a/ja/develop-plugin/publishing/standards/third-party-signature-verification.mdx +++ b/ja/develop-plugin/publishing/standards/third-party-signature-verification.mdx @@ -7,107 +7,124 @@ dimensions: standard_title: Third-Party Signature Verification language: ja title: サードパーティ署名検証用のプラグイン署名 -description: このドキュメントでは、Dify Community Editionでサードパーティ署名検証機能を有効化して使用する方法について説明します。キーペアの生成、プラグインの署名と検証、環境設定の手順を含み、管理者がDify Marketplaceで入手できないプラグインを安全にインストールできるようにします。 +description: Dify Community Editionで署名検証を完全に無効化することなく、署名付き`.difypkg`のインストールを有効にします(鍵の生成、パッケージの署名、公開鍵の配布) --- ⚠️ このドキュメントは AI によって自動翻訳されています。不正確な部分がある場合は、[英語版](/en/develop-plugin/publishing/standards/third-party-signature-verification) を参照してください。 ---- -title: ---- - -この機能はDify Community Editionでのみ利用可能です。サードパーティ署名検証は現在Dify Cloud Editionではサポートされていません。 + +サードパーティ署名検証は**Dify Community Edition**の機能です。Dify Cloudは署名を一元管理しており、これらの制御は公開されていません。 + -サードパーティ署名検証により、Dify管理者は署名検証を完全に無効化することなく、Dify Marketplaceに掲載されていないプラグインのインストールを安全に承認できます。これは例えば以下のシナリオをサポートします: +セルフホストのDifyはデフォルトで署名検証を強制します。サードパーティ署名検証により、管理者は検証を完全に無効化することなく、マーケットプレイスにないプラグインを安全にインストールできます。 -* Dify管理者は、開発者から送信されたプラグインを承認後、署名を追加できます。 -* プラグイン開発者は、自分のプラグインに署名を追加し、署名検証を無効化できないDify管理者向けに公開鍵と一緒に公開できます。 +2つのシナリオ: -Dify管理者とプラグイン開発者の両方が、事前に生成されたキーペアを使用してプラグインに署名を追加できます。さらに、管理者はプラグインのインストール時に特定の公開鍵を使用した署名検証を強制するようにDifyを設定できます。 + + + 管理者は信頼できる開発者からの`.difypkg`をレビューし、インストール前に自分の鍵で署名します。 + + + 開発者が`.difypkg`に署名し、対応する公開鍵を公開します。その開発者を信頼する管理者は、その公開鍵を検証リストに追加します。 + + -## 署名と検証用のキーペア生成 +どちらの場合も仕組みは同じです:キーペアを生成し、秘密鍵で署名し、公開鍵で検証します。 -プラグインの署名を追加および検証するための新しいキーペアを以下のコマンドで生成します: +## キーペアの生成 ```bash dify signature generate -f your_key_pair ``` -このコマンドを実行すると、現在のディレクトリに2つのファイルが生成されます: - -* **秘密鍵**: `your_key_pair.private.pem` -* **公開鍵**: `your_key_pair.public.pem` - -秘密鍵はプラグインの署名に使用し、公開鍵はプラグインの署名検証に使用します。 - -秘密鍵は安全に保管してください。漏洩した場合、攻撃者が任意のプラグインに有効な署名を追加でき、Difyのセキュリティが侵害される可能性があります。 - -## プラグインへの署名追加と検証 - -以下のコマンドを実行してプラグインに署名を追加します。**署名するプラグインファイル**と**秘密鍵**を指定する必要があることに注意してください: - -```bash -dify signature sign your_plugin_project.difypkg -p your_key_pair.private.pem -``` - -コマンドを実行すると、同じディレクトリに元のファイル名に`signed`が追加された新しいプラグインファイルが生成されます:`your_plugin_project.signed.difypkg` - -このコマンドを使用して、プラグインが正しく署名されていることを検証できます。ここでは、**署名済みプラグインファイル**と**公開鍵**を指定する必要があります: - -```bash -dify signature verify your_plugin_project.signed.difypkg -p your_key_pair.public.pem -``` - -公開鍵引数を省略した場合、検証にはDify Marketplace公開鍵が使用されます。その場合、Dify Marketplaceからダウンロードされていないプラグインファイルでは署名検証が失敗します。 - -## サードパーティ署名検証の有効化 - -Dify管理者は、プラグインをインストールする前に、事前承認された公開鍵を使用した署名検証を強制できます。 - -### 公開鍵の配置 - -署名に使用した秘密鍵に対応する**公開鍵**を、プラグインデーモンがアクセスできる場所に配置します。 - -例えば、`docker/volumes/plugin_daemon`の下に`public_keys`ディレクトリを作成し、公開鍵ファイルをそこにコピーします: - -```bash -mkdir docker/volumes/plugin_daemon/public_keys -cp your_key_pair.public.pem docker/volumes/plugin_daemon/public_keys -``` - -### 環境変数の設定 - -`plugin_daemon`コンテナで、以下の環境変数を設定します: - -* `THIRD_PARTY_SIGNATURE_VERIFICATION_ENABLED` - * サードパーティ署名検証を有効にします。 - * 機能を有効にするには`true`に設定します。 -* `THIRD_PARTY_SIGNATURE_VERIFICATION_PUBLIC_KEYS` - * 署名検証に使用する公開鍵ファイルのパスを指定します。 - * カンマで区切って複数の公開鍵ファイルをリストできます。 - -以下は、これらの変数を設定するDocker Composeオーバーライドファイル(`docker-compose.override.yaml`)の例です: - -```yaml -services: - plugin_daemon: - environment: - FORCE_VERIFYING_SIGNATURE: true - THIRD_PARTY_SIGNATURE_VERIFICATION_ENABLED: true - THIRD_PARTY_SIGNATURE_VERIFICATION_PUBLIC_KEYS: /app/storage/public_keys/your_key_pair.public.pem -``` - -`docker/volumes/plugin_daemon`は`plugin_daemon`コンテナ内の`/app/storage`にマウントされることに注意してください。`THIRD_PARTY_SIGNATURE_VERIFICATION_PUBLIC_KEYS`で指定するパスがコンテナ内のパスに対応していることを確認してください。 - -これらの変更を適用するには、Difyサービスを再起動します: - -```bash -cd docker -docker compose down -docker compose up -d -``` - -サービスを再起動すると、現在のCommunity Edition環境でサードパーティ署名検証機能が有効になります。 +現在のディレクトリに2つのファイルが生成されます: + +| ファイル | 用途 | +| :--- | :--- | +| `your_key_pair.private.pem` | プラグインの署名(秘密にする) | +| `your_key_pair.public.pem` | 署名の検証(公開する) | + + +秘密鍵を保護してください。秘密鍵を持つ人は誰でも、あなたの公開鍵を信頼するインストール環境で検証に合格するプラグインに署名できます。 + + +## プラグインの署名と検証 + + + + ```bash + dify signature sign your_plugin_project.difypkg -p your_key_pair.private.pem + ``` + + 同じディレクトリに`your_plugin_project.signed.difypkg`が生成されます。 + + + ```bash + dify signature verify your_plugin_project.signed.difypkg -p your_key_pair.public.pem + ``` + + 配布またはインストール前に署名が一致することを確認します。 + + + + +`-p`を省略した場合、`dify signature verify`はDify Marketplace公開鍵に対して検証します。Difyによって署名されていないプラグインは、そのモードでは検証に失敗します。 + + +## デーモンでの検証の有効化 + +管理者は、信頼する公開鍵のリストをプラグインデーモンに提供することで、署名済みプラグインをインストールします。 + + + + `.public.pem`ファイルをデーモンコンテナがアクセスできる場所に配置します。Docker Composeインストールの場合: + + ```bash + mkdir -p docker/volumes/plugin_daemon/public_keys + cp your_key_pair.public.pem docker/volumes/plugin_daemon/public_keys/ + ``` + + + `plugin_daemon`サービスで以下の変数を設定します: + + | 変数 | 値 | + | :--- | :--- | + | `FORCE_VERIFYING_SIGNATURE` | `true` | + | `THIRD_PARTY_SIGNATURE_VERIFICATION_ENABLED` | `true` | + | `THIRD_PARTY_SIGNATURE_VERIFICATION_PUBLIC_KEYS` | コンテナ内の公開鍵へのカンマ区切りパス | + + `docker-compose.override.yaml`のスニペット: + + ```yaml + services: + plugin_daemon: + environment: + FORCE_VERIFYING_SIGNATURE: true + THIRD_PARTY_SIGNATURE_VERIFICATION_ENABLED: true + THIRD_PARTY_SIGNATURE_VERIFICATION_PUBLIC_KEYS: /app/storage/public_keys/your_key_pair.public.pem + ``` + + + `docker/volumes/plugin_daemon`はコンテナ内の`/app/storage`にマウントされるため、`THIRD_PARTY_SIGNATURE_VERIFICATION_PUBLIC_KEYS`のパスはコンテナ内パスを使用する必要があります。 + + + + ```bash + cd docker + docker compose down + docker compose up -d + ``` + + 検証付きインストールが強制されます:設定された公開鍵に一致する署名済み`.difypkg`ファイルは正常にインストールされ、未署名または不一致のものは拒否されます。 + + + +## 関連リソース + +- [ローカルファイルとしてパッケージ化して共有](/ja/develop-plugin/publishing/marketplace-listing/release-by-file) +- [個人GitHubリポジトリに公開](/ja/develop-plugin/publishing/marketplace-listing/release-to-individual-github-repo) +- [プラグイン開発ガイドライン](/ja/develop-plugin/publishing/standards/contributor-covenant-code-of-conduct) +- [公開FAQ](/ja/develop-plugin/publishing/faq/faq) {/* Contributing Section diff --git a/zh/develop-plugin/dev-guides-and-walkthroughs/agent-strategy-plugin.mdx b/zh/develop-plugin/dev-guides-and-walkthroughs/agent-strategy-plugin.mdx index f8b0dc060..423c25426 100644 --- a/zh/develop-plugin/dev-guides-and-walkthroughs/agent-strategy-plugin.mdx +++ b/zh/develop-plugin/dev-guides-and-walkthroughs/agent-strategy-plugin.mdx @@ -1,5 +1,6 @@ --- title: Agent 策略插件 +description: 从零开始构建一个 Function Calling Agent 策略——一个展示如何为 LLM 提供工具并让其自主获取当前时间的实战示例 --- ⚠️ 本文档由 AI 自动翻译。如有任何不准确之处,请参考 [英文原版](/en/develop-plugin/dev-guides-and-walkthroughs/agent-strategy-plugin)。 @@ -8,7 +9,7 @@ title: Agent 策略插件 下面,你将看到如何开发一个支持 **Function Calling** 来自动获取当前时间的插件。 -### 前置条件 +## 前置条件 - Dify 插件脚手架工具 - Python 环境(版本 3.12) @@ -21,9 +22,9 @@ title: Agent 策略插件 --- -### 1. 初始化插件模板 +## 1. 初始化插件模板 -运行以下命令为你的智能体插件创建开发模板: +运行以下命令为你的 Agent 插件创建开发模板: ``` dify plugin init @@ -68,7 +69,7 @@ Models: ... ``` -初始化完成后,你将获得一个包含插件开发所需全部资源的文件夹。熟悉Agent 策略插件的整体结构将简化开发过程: +初始化完成后,你将获得一个包含插件开发所需全部资源的文件夹。熟悉 Agent 策略插件的整体结构将简化开发过程: ```text ├── GUIDE.md # User guide and documentation @@ -90,16 +91,16 @@ Models: --- -### 2. 开发插件 +## 2. 开发插件 Agent 策略插件的开发围绕两个文件展开: - **插件声明**:`strategies/basic_agent.yaml` - **插件实现**:`strategies/basic_agent.py` -#### 2.1 定义参数 +### 2.1 定义参数 -要构建智能体插件,首先在 `strategies/basic_agent.yaml` 中指定必要的参数。这些参数定义了插件的核心功能,例如调用 LLM 或使用工具。 +要构建 Agent 插件,首先在 `strategies/basic_agent.yaml` 中指定必要的参数。这些参数定义了插件的核心功能,例如调用 LLM 或使用工具。 我们建议首先包含以下四个参数: @@ -162,9 +163,9 @@ extra: ![Agent 策略插件界面](https://assets-docs.dify.ai/2025/01/d011e2eba4c37f07a9564067ba787df8.png) -#### 2.2 获取参数并执行 +### 2.2 获取参数并执行 -用户填写这些基本字段后,你的插件需要处理提交的参数。在 `strategies/basic_agent.py` 中,为智能体定义一个参数类,然后在你的逻辑中获取并应用这些参数。 +用户填写这些基本字段后,你的插件需要处理提交的参数。在 `strategies/basic_agent.py` 中,为 Agent 定义一个参数类,然后在你的逻辑中获取并应用这些参数。 验证传入参数: @@ -188,9 +189,9 @@ class BasicAgentAgentStrategy(AgentStrategy): params = BasicParams(**parameters) ``` -### 3. 调用模型 +## 3. 调用模型 -在Agent 策略插件中,**调用模型**是工作流的核心。你可以使用 SDK 中的 `session.model.llm.invoke()` 高效地调用 LLM,处理文本生成、对话等任务。 +在 Agent 策略插件中,**调用模型**是工作流的核心。你可以使用 SDK 中的 `session.model.llm.invoke()` 高效地调用 LLM,处理文本生成、对话等任务。 如果你希望 LLM **处理工具**,请确保它输出结构化参数以匹配工具的接口。换句话说,LLM 必须根据用户的指令生成工具可以接受的输入参数。 @@ -223,7 +224,7 @@ def invoke( ![生成工具的请求参数](https://assets-docs.dify.ai/2025/01/01e32c2d77150213c7c929b3cceb4dae.png) -### 4. 处理工具 +## 4. 处理工具 指定工具参数后,Agent 策略插件必须实际调用这些工具。使用 `session.tool.invoke()` 来发起这些请求。 @@ -261,15 +262,15 @@ for tool_call_id, tool_call_name, tool_call_args in tool_calls: ) ``` -完成这些设置后,你的Agent 策略插件可以自动执行 **Function Calling**——例如,获取当前时间。 +完成这些设置后,你的 Agent 策略插件可以自动执行 **Function Calling**,例如获取当前时间。 ![工具调用](https://assets-docs.dify.ai/2025/01/80e5de8acc2b0ed00524e490fd611ff5.png) -### 5. 创建日志 +## 5. 创建日志 -在**Agent 策略插件**中,通常需要多个步骤才能完成复杂任务。对于开发者来说,跟踪每个步骤的结果、分析决策过程和优化策略至关重要。使用 SDK 中的 `create_log_message` 和 `finish_log_message`,你可以在调用前后记录实时状态,有助于快速诊断问题。 +在 **Agent 策略插件**中,通常需要多个步骤才能完成复杂任务。对于开发者来说,跟踪每个步骤的结果、分析决策过程和优化策略至关重要。使用 SDK 中的 `create_log_message` 和 `finish_log_message`,你可以在调用前后记录实时状态,有助于快速诊断问题。 例如: @@ -304,7 +305,7 @@ yield self.finish_log_message( 设置完成后,工作流日志将输出执行结果: - ![智能体输出执行结果](https://assets-docs.dify.ai/2025/01/96516388a4fb1da9cea85fc1804ff377.png) + ![Agent 输出执行结果](https://assets-docs.dify.ai/2025/01/96516388a4fb1da9cea85fc1804ff377.png) 如果出现多轮日志,你可以通过在日志调用中设置 `parent` 参数来分层组织它们,使其更易于跟踪。 @@ -330,13 +331,13 @@ model_log = self.create_log_message( yield model_log ``` -#### 智能体插件功能示例代码 +### Agent 插件功能示例代码 #### 调用模型 -以下代码演示了如何为Agent 策略插件赋予调用模型的能力: +以下代码演示了如何为 Agent 策略插件赋予调用模型的能力: ```python import json @@ -562,7 +563,7 @@ class BasicAgentAgentStrategy(AgentStrategy): #### 处理工具 -以下代码展示了如何为Agent 策略插件实现模型调用并向工具发送规范化请求。 +以下代码展示了如何为 Agent 策略插件实现模型调用并向工具发送规范化请求。 ```python import json @@ -1044,12 +1045,12 @@ class BasicAgentAgentStrategy(AgentStrategy): -### 6. 调试插件 +## 6. 调试插件 -完成插件的声明文件和实现代码后,在插件目录中运行 `python -m main` 以重新启动它。接下来,确认插件运行正常。Dify 提供远程调试功能——前往**插件管理**获取你的调试密钥和远程服务器地址。 +完成插件的声明文件和实现代码后,在插件目录中运行 `python -m main` 以重新启动它。接下来,确认插件运行正常。Dify 提供远程调试功能。前往**插件管理**获取你的调试密钥和远程服务器地址。 - ![](https://assets-docs.dify.ai/2024/12/053415ef127f1f4d6dd85dd3ae79626a.png) + ![完成插件的声明文件和实现代码后,运行 Python -M](https://assets-docs.dify.ai/2024/12/053415ef127f1f4d6dd85dd3ae79626a.png) 返回你的插件项目,将 `.env.example` 复制为 `.env` 并填入相关的远程服务器和调试密钥信息。 @@ -1072,7 +1073,7 @@ python -m main ![浏览插件](https://assets-docs.dify.ai/2025/01/c82ec0202e5bf914b36e06c796398dd6.png) -### 打包插件(可选) +## 打包插件(可选) 一切正常后,你可以通过运行以下命令打包你的插件: @@ -1082,17 +1083,17 @@ python -m main dify plugin package ./basic_agent/ ``` -当前文件夹中会出现一个名为 `google.difypkg`(示例)的文件——这就是你的最终插件包。 +当前文件夹中会出现一个名为 `basic_agent.difypkg`(与你的插件名称匹配)的文件。这就是你的最终插件包。 -**恭喜!** 你已经完整地开发、测试和打包了你的Agent 策略插件。 +**恭喜!** 你已经完整地开发、测试和打包了你的 Agent 策略插件。 -### 发布插件(可选) +## 发布插件(可选) 你现在可以将其上传到 [Dify 插件仓库](https://github.com/langgenius/dify-plugins)。在此之前,请确保它符合[插件发布指南](/zh/develop-plugin/publishing/marketplace-listing/release-to-dify-marketplace)。一旦获得批准,你的代码将合并到主分支,插件将自动在 [Dify Marketplace](https://marketplace.dify.ai/) 上线。 --- -### 进一步探索 +## 进一步探索 复杂任务通常需要多轮思考和工具调用,通常重复**模型调用 → 工具使用**直到任务结束或达到最大迭代限制。在此过程中,有效管理提示词至关重要。查看[完整的 Function Calling 实现](https://github.com/langgenius/dify-official-plugins/blob/main/agent-strategies/cot_agent/strategies/function_calling.py),了解让模型调用外部工具并处理其输出的标准化方法。 @@ -1104,4 +1105,4 @@ It will be automatically generated by the script. --- -[编辑此页面](https://github.com/langgenius/dify-docs/edit/main/en/develop-plugin/dev-guides-and-walkthroughs/agent-strategy-plugin.mdx) | [报告问题](https://github.com/langgenius/dify-docs/issues/new?template=docs.yml) +[编辑此页面](https://github.com/langgenius/dify-docs/edit/main/en/develop-plugin/dev-guides-and-walkthroughs/agent-strategy-plugin.mdx) | [报告问题](https://github.com/langgenius/dify-docs/issues/new?template=docs.yml) \ No newline at end of file diff --git a/zh/develop-plugin/dev-guides-and-walkthroughs/cheatsheet.mdx b/zh/develop-plugin/dev-guides-and-walkthroughs/cheatsheet.mdx index 09260bec0..8d478cea1 100644 --- a/zh/develop-plugin/dev-guides-and-walkthroughs/cheatsheet.mdx +++ b/zh/develop-plugin/dev-guides-and-walkthroughs/cheatsheet.mdx @@ -5,25 +5,25 @@ dimensions: detail: architecture level: beginner standard_title: Cheatsheet -language: en -title: Dify 插件开发速查表 +language: zh +title: 速查表 description: Dify 插件开发的综合参考指南,包括环境要求、安装方法、开发流程、插件类别和类型、常用代码片段以及常见问题解决方案。适合开发者快速查阅和参考。 --- ⚠️ 本文档由 AI 自动翻译。如有任何不准确之处,请参考 [英文原版](/en/develop-plugin/dev-guides-and-walkthroughs/cheatsheet)。 -### 环境要求 +## 环境要求 - Python 版本 3.12 - Dify 插件脚手架工具 (dify-plugin-daemon) > 了解更多:[初始化开发工具](/zh/develop-plugin/getting-started/cli) -### 获取 Dify 插件开发包 +## 获取 Dify 插件开发包 [Dify Plugin CLI](https://github.com/langgenius/dify-plugin-daemon/releases) -#### 不同平台的安装方法 +### 不同平台的安装方法 **macOS [Brew](https://github.com/langgenius/homebrew-dify)(全局安装)**: @@ -68,13 +68,13 @@ sudo mv dify /usr/local/bin/ dify version ``` -### 运行开发包 +## 运行开发包 这里我们以 `dify` 为例。如果你使用的是本地安装方式,请相应地替换命令,例如 `./dify-plugin-darwin-arm64 plugin init`。 -### 插件开发流程 +## 插件开发流程 -#### 1. 创建新插件 +### 1. 创建新插件 ```bash ./dify plugin init @@ -84,7 +84,7 @@ dify version > 了解更多:[Dify 插件开发:Hello World 指南](/zh/develop-plugin/dev-guides-and-walkthroughs/tool-plugin) -#### 2. 以开发模式运行 +### 2. 以开发模式运行 配置 `.env` 文件,然后在插件目录中运行以下命令: @@ -94,7 +94,7 @@ python -m main > 了解更多:[远程调试插件](/zh/develop-plugin/features-and-specs/plugin-types/remote-debug-a-plugin) -#### 3. 打包和部署 +### 3. 打包和部署 打包插件: @@ -105,9 +105,9 @@ dify plugin package ./yourapp > 了解更多:[发布概览](/zh/develop-plugin/publishing/marketplace-listing/release-overview) -### 插件类别 +## 插件类别 -#### 工具标签 +### 工具标签 类别 `tag` [class ToolLabelEnum(Enum)](https://github.com/langgenius/dify-plugin-sdks/blob/main/python/dify_plugin/entities/tool.py) @@ -131,7 +131,7 @@ class ToolLabelEnum(Enum): OTHER = "other" ``` -### 插件类型参考 +## 插件类型参考 Dify 支持开发多种类型的插件: @@ -141,8 +141,8 @@ Dify 支持开发多种类型的插件: - **模型插件**:集成 AI 模型 > 了解更多:[模型插件](/zh/develop-plugin/features-and-specs/plugin-types/model-designing-rules),[快速集成新模型](/zh/develop-plugin/dev-guides-and-walkthroughs/creating-new-model-provider) -- **智能体策略插件**:自定义智能体思考和决策策略 - > 了解更多:[智能体策略插件](/zh/develop-plugin/features-and-specs/advanced-development/reverse-invocation) +- **Agent 策略插件**:自定义 Agent 思考和决策策略 + > 了解更多:[Agent 策略插件](/zh/develop-plugin/features-and-specs/advanced-development/reverse-invocation) - **扩展插件**:扩展 Dify 平台功能,如 Endpoints 和 WebAPP > 了解更多:[扩展插件](/zh/develop-plugin/dev-guides-and-walkthroughs/endpoint) diff --git a/zh/develop-plugin/dev-guides-and-walkthroughs/creating-new-model-provider.mdx b/zh/develop-plugin/dev-guides-and-walkthroughs/creating-new-model-provider.mdx index 2b9ac9b56..ae74d6d0f 100644 --- a/zh/develop-plugin/dev-guides-and-walkthroughs/creating-new-model-provider.mdx +++ b/zh/develop-plugin/dev-guides-and-walkthroughs/creating-new-model-provider.mdx @@ -12,7 +12,7 @@ description: 本综合指南提供了创建模型供应商插件的详细说明 ⚠️ 本文档由 AI 自动翻译。如有任何不准确之处,请参考 [英文原版](/en/develop-plugin/dev-guides-and-walkthroughs/creating-new-model-provider)。 -### 前提条件 +## 前提条件 * [Dify CLI](/zh/develop-plugin/getting-started/cli) * 基本的 Python 编程技能和面向对象编程的理解 @@ -308,7 +308,7 @@ parameter_rules: # 用户可调整的参数 pricing: # 可选的定价信息 input: '3.00' output: '15.00' - unit: '0.000001' # 每百万令牌 + unit: '0.000001' # 每百万 token currency: USD ``` @@ -423,8 +423,7 @@ Dify 提供远程调试功能,允许您在开发期间测试插件: ```dotenv INSTALL_METHOD=remote -REMOTE_INSTALL_HOST= -REMOTE_INSTALL_PORT=5003 +REMOTE_INSTALL_URL=:5003 REMOTE_INSTALL_KEY=****-****-****-****-**** ``` diff --git a/zh/develop-plugin/dev-guides-and-walkthroughs/datasource-plugin.mdx b/zh/develop-plugin/dev-guides-and-walkthroughs/datasource-plugin.mdx index 9c72167af..714a6a8fa 100644 --- a/zh/develop-plugin/dev-guides-and-walkthroughs/datasource-plugin.mdx +++ b/zh/develop-plugin/dev-guides-and-walkthroughs/datasource-plugin.mdx @@ -1,5 +1,6 @@ --- title: "数据源插件" +description: 构建 Dify 1.9.0+ 数据源插件,将文档输入知识库管道——架构、代码示例和调试步骤 --- ⚠️ 本文档由 AI 自动翻译。如有任何不准确之处,请参考 [英文原版](/en/develop-plugin/dev-guides-and-walkthroughs/datasource-plugin)。 @@ -20,7 +21,7 @@ title: "数据源插件" Dify 支持三种类型的数据源插件:网页爬虫、在线文档和在线云盘。在实现插件代码时,提供插件功能的类必须继承自特定的数据源类。三种插件类型分别对应不同的父类。 - 要了解如何通过继承父类来实现插件功能,请参阅[工具插件:准备工具代码](/zh/develop-plugin/dev-guides-and-walkthroughs/tool-plugin#4-准备工具代码)。 + 要了解如何通过继承父类来实现插件功能,请参阅[工具插件:准备工具代码](/zh/develop-plugin/dev-guides-and-walkthroughs/tool-plugin#4-prepare-tool-code)。 每种数据源插件类型支持多个数据源。例如: @@ -112,7 +113,7 @@ datasources: ``` - 有关创建提供者 YAML 文件的更多信息,请参阅[工具插件:完善第三方服务凭据](/zh/develop-plugin/dev-guides-and-walkthroughs/tool-plugin#2-完善第三方服务凭据)。 + 有关创建提供者 YAML 文件的更多信息,请参阅[工具插件:完善第三方服务凭据](/zh/develop-plugin/dev-guides-and-walkthroughs/tool-plugin#2-complete-third-party-service-credentials)。 diff --git a/zh/develop-plugin/dev-guides-and-walkthroughs/develop-a-slack-bot-plugin.mdx b/zh/develop-plugin/dev-guides-and-walkthroughs/develop-a-slack-bot-plugin.mdx index 8bc8d6aba..ac9efc679 100644 --- a/zh/develop-plugin/dev-guides-and-walkthroughs/develop-a-slack-bot-plugin.mdx +++ b/zh/develop-plugin/dev-guides-and-walkthroughs/develop-a-slack-bot-plugin.mdx @@ -4,9 +4,9 @@ dimensions: primary: reference detail: examples level: intermediate -standard_title: Develop A Slack Bot Plugin +standard_title: Slack Bot language: en -title: 开发 Slack Bot 插件 +title: Slack Bot description: 本指南提供了开发 Slack Bot 插件的完整演练,涵盖项目初始化、配置表单编辑、功能实现、调试、端点设置、验证和打包。你需要 Dify 插件脚手架工具和预先创建的 Slack App 来在 Slack 上构建 AI 驱动的聊天机器人。 --- @@ -16,7 +16,7 @@ description: 本指南提供了开发 Slack Bot 插件的完整演练,涵盖 深入了解如何构建一个由 AI 驱动的 Slack Bot——它可以直接在 Slack 中回答用户问题。如果你之前没有开发过插件,我们建议先阅读[插件开发快速入门指南](/zh/develop-plugin/dev-guides-and-walkthroughs/tool-plugin)。 -### 项目背景 +## 项目背景 Dify 插件生态系统致力于使集成更简单、更易于访问。在本指南中,我们将以 Slack 为例,带你完成开发 Slack Bot 插件的过程。这允许你的团队直接在 Slack 中与 LLM 聊天,显著提高他们使用 AI 的效率。 @@ -29,7 +29,7 @@ Slack 是一个开放的实时通信平台,拥有强大的 API。其功能之 > 为避免混淆,以下概念作说明: > > * **Slack Bot** Slack 平台上的聊天机器人,作为一个虚拟用户,你可以与其实时交互。 -> * **Slack Bot 插件** Dify Marketplace 中的一个插件,用于连接 Dify 应用程序与 Slack。本指南重点介绍如何开发该插件。 +> * **Slack Bot 插件** Dify 市场中的一个插件,用于连接 Dify 应用程序与 Slack。本指南重点介绍如何开发该插件。 **工作原理(简要概述)**: @@ -45,7 +45,7 @@ Slack 是一个开放的实时通信平台,拥有强大的 API。其功能之 一旦 Slack Bot 插件收到 Dify 应用程序的回复,它就会通过相同的路径将 LLM 的答案发送回 Slack Bot。Slack 中的用户就可以在他们聊天的地方看到更智能、更互动的体验。 -### 前提条件 +## 前提条件 - **Dify 插件开发工具**:更多信息,请参阅[初始化开发工具](/zh/develop-plugin/getting-started/cli)。 - **Python 环境(版本 3.12)**:参考 [Python 官方下载页面](https://www.python.org/downloads/)或向 LLM 询问完整的设置指南。 @@ -75,11 +75,11 @@ Slack 是一个开放的实时通信平台,拥有强大的 API。其功能之 ![获取 OAuth 令牌以供后续插件开发使用](https://assets-docs.dify.ai/2025/01/dcd8ec947253f2ef9ae121ed77ec9f26.png) -### 1. 开发插件 +## 1. 开发插件 现在我们将深入实际编码。在开始之前,请确保你已阅读[快速入门:开发扩展插件](/zh/develop-plugin/dev-guides-and-walkthroughs/endpoint)或已经构建过 Dify 插件。 -#### 1.1 初始化项目 +### 1.1 初始化项目 运行以下命令来设置你的插件开发环境: @@ -95,11 +95,11 @@ dify plugin init ![插件权限](https://assets-docs.dify.ai/2024/12/d89a6282c5584fc43a9cadeddf09c0de.png) -#### 1.2 编辑配置表单 +### 1.2 编辑配置表单 此插件需要知道哪个 Dify 应用应处理回复,以及用于验证机器人响应的 Slack App 令牌。因此,你需要在插件的表单中添加这两个字段。 -修改 group 目录中的 YAML 文件——例如 `group/slack.yaml`。表单的文件名由你创建插件时提供的信息决定,请相应调整。 +修改 group 目录中的 YAML 文件(例如 `group/slack.yaml`)。表单的文件名由你创建插件时提供的信息决定,请相应调整。 **示例代码**: @@ -156,7 +156,7 @@ endpoints: * **type**:设置为 app-selector,允许用户在使用此插件时将消息转发到特定的 Dify 应用。 -* **scope**:设置为 chat,意味着该插件只能与智能体、chatbot 或 chatflow 等应用类型交互。 +* **scope**:设置为 chat,意味着该插件只能与 Agent、chatbot 或 chatflow 等应用类型交互。 最后,在 `endpoints/slack.yaml` 文件中,将请求方法更改为 POST 以正确处理传入的 Slack 消息。 @@ -172,7 +172,7 @@ extra: source: "endpoints/slack.py" ``` -### 2. 编辑功能代码 +## 2. 编辑功能代码 修改 `endpoints/slack.py` 文件并添加以下代码: @@ -251,12 +251,12 @@ class SlackEndpoint(Endpoint): return Response(status=200, response="ok") ``` -### 3. 调试插件 +## 3. 调试插件 前往 Dify 平台并获取插件的远程调试地址和密钥。 - ![前往 Dify 平台并获取插件的远程调试地址和密钥](https://assets-docs.dify.ai/2025/01/8d24006f0cabf5bf61640a9023c45db8.png) + ![](https://assets-docs.dify.ai/2025/01/8d24006f0cabf5bf61640a9023c45db8.png) 回到你的插件项目,复制 `.env.example` 文件并将其重命名为 `.env`。 @@ -273,7 +273,7 @@ REMOTE_INSTALL_KEY=********-****-****-****-************ python -m main ``` -#### 配置插件端点 +### 配置插件端点 从 Dify 的插件管理页面,找到新安装的测试插件并创建一个新端点。提供名称、Bot 令牌,并选择你想要连接的应用。 @@ -309,7 +309,7 @@ python -m main --- -### 4. 验证插件 +## 4. 验证插件 在你的代码中,`self.session.app.chat.invoke` 用于调用 Dify 应用程序,传入 `app_id` 和 `query` 等参数。然后将响应返回给 Slack Bot。再次运行 `python -m main` 重启插件进行调试,并检查 Slack 是否正确显示 Dify App 的回复: @@ -319,7 +319,7 @@ python -m main --- -### 5. 打包插件(可选) +## 5. 打包插件(可选) 确认插件工作正常后,你可以通过以下命令打包并命名它。运行后,你会在当前目录中找到一个 `slack_bot.difypkg` 文件——这就是你的最终插件包。有关详细的打包步骤,请参阅[打包为本地文件并分享](/zh/develop-plugin/publishing/marketplace-listing/release-by-file)。 @@ -333,9 +333,9 @@ dify plugin package ./slack_bot --- -### 6. 发布插件(可选) +## 6. 发布插件(可选) -你现在可以将其上传到 [Dify Marketplace 仓库](https://github.com/langgenius/dify-plugins) 进行公开发布。在发布之前,请确保你的插件符合[发布到 Dify Marketplace 指南](/zh/develop-plugin/publishing/marketplace-listing/release-to-dify-marketplace)。一旦获得批准,你的代码将合并到主分支,插件将在 [Dify Marketplace](https://marketplace.dify.ai/) 上线。 +你现在可以将其上传到 [Dify 市场仓库](https://github.com/langgenius/dify-plugins) 进行公开发布。在发布之前,请确保你的插件符合[发布到 Dify 市场指南](/zh/develop-plugin/publishing/marketplace-listing/release-to-dify-marketplace)。一旦获得批准,你的代码将合并到主分支,插件将在 [Dify 市场](https://marketplace.dify.ai/) 上线。 --- @@ -347,10 +347,10 @@ dify plugin package ./slack_bot - [反向调用 Dify 服务](/zh/develop-plugin/features-and-specs/advanced-development/reverse-invocation) - 了解如何调用 Dify 平台功能 - [反向调用:App](/zh/develop-plugin/features-and-specs/advanced-development/reverse-invocation-app) - 了解如何调用平台内的应用 - [发布插件](/zh/develop-plugin/publishing/marketplace-listing/release-overview) - 了解发布流程 -- [发布到 Dify Marketplace](/zh/develop-plugin/publishing/marketplace-listing/release-to-dify-marketplace) - Marketplace 发布指南 +- [发布到 Dify 市场](/zh/develop-plugin/publishing/marketplace-listing/release-to-dify-marketplace) - 市场发布指南 - [端点详细定义](/zh/develop-plugin/dev-guides-and-walkthroughs/endpoint) - 端点详细定义 -### 延伸阅读 +## 延伸阅读 要获取完整的 Dify 插件项目示例,请访问 [GitHub 仓库](https://github.com/langgenius/dify-plugins)。你还可以找到包含完整源代码和实现细节的其他插件。 diff --git a/zh/develop-plugin/dev-guides-and-walkthroughs/develop-flomo-plugin.mdx b/zh/develop-plugin/dev-guides-and-walkthroughs/develop-flomo-plugin.mdx index 343c8d8c4..6af169590 100644 --- a/zh/develop-plugin/dev-guides-and-walkthroughs/develop-flomo-plugin.mdx +++ b/zh/develop-plugin/dev-guides-and-walkthroughs/develop-flomo-plugin.mdx @@ -1,8 +1,8 @@ --- -title: '10分钟构建 Dify 插件指南' -description: '学习如何在10分钟内构建一个连接 Flomo 笔记服务的功能性 Dify 插件' +title: 'Flomo 工具(10分钟)' +description: '在大约十分钟内端到端构建一个连接 Flomo 笔记服务的功能性 Dify 工具插件' language: en -standard_title: 10-Minute Guide to Building Dify Plugins +standard_title: Flomo Tool (10-min) --- ⚠️ 本文档由 AI 自动翻译。如有任何不准确之处,请参考 [英文原版](/en/develop-plugin/dev-guides-and-walkthroughs/develop-flomo-plugin)。 @@ -14,7 +14,7 @@ standard_title: 10-Minute Guide to Building Dify Plugins - 连接到 Flomo 笔记 API - 允许用户将 AI 对话中的笔记直接保存到 Flomo - 正确处理身份验证和错误状态 -- 准备好在 Dify Marketplace 中分发 +- 准备好在 Dify 市场中分发 @@ -37,13 +37,11 @@ standard_title: 10-Minute Guide to Building Dify Plugins ``` - 从 [Dify GitHub releases 页面](https://github.com/langgenius/dify-plugin-daemon/releases) 获取最新的 Dify CLI - + 从 [Dify Plugin Daemon releases 页面](https://github.com/langgenius/dify-plugin-daemon/releases) 下载最新的二进制文件。x86_64 选择 `dify-plugin-linux-amd64`,ARM 选择 `dify-plugin-linux-arm64`。 + ```bash - # Download appropriate version chmod +x dify-plugin-linux-amd64 - mv dify-plugin-linux-amd64 dify - sudo mv dify /usr/local/bin/ + sudo mv dify-plugin-linux-amd64 /usr/local/bin/dify ``` @@ -102,8 +100,8 @@ resource: plugins: tools: - - flomo.yaml - + - provider/flomo.yaml + meta: version: 0.0.1 arch: @@ -117,7 +115,9 @@ meta: ## 步骤 3:创建工具定义 -创建 `flomo.yaml` 文件来定义你的工具接口: +工具插件使用两个 YAML 文件:一个 **provider** 文件用于声明凭证并列出工具,以及每个可调用工具对应一个 **tool** 文件。完整的 schema 请参阅[通用规范](/zh/develop-plugin/features-and-specs/plugin-types/general-specifications)。 + +创建 `provider/flomo.yaml`: ```yaml identity: @@ -126,32 +126,61 @@ identity: label: en_US: Flomo Note zh_Hans: Flomo 浮墨笔记 -description: - human: + description: en_US: Add notes to your Flomo account directly from Dify. - zh_Hans: 直接从Dify添加笔记到您的Flomo账户。 - llm: > - A tool that allows users to save notes to Flomo. Use this tool when users want to save important information from the conversation. The tool accepts a 'content' parameter that contains the text to be saved as a note. -credential_schema: + zh_Hans: 直接从 Dify 添加笔记到您的 Flomo 账户。 + icon: icon.png +credentials_for_provider: api_url: - type: string + type: secret-input required: true label: en_US: API URL zh_Hans: API URL - human_description: + placeholder: + en_US: https://flomoapp.com/iwh/{token}/{secret}/ + help: en_US: Flomo API URL from your Flomo account settings. - zh_Hans: 从您的Flomo账户设置中获取的API URL。 -tool_schema: - content: + zh_Hans: 从您的 Flomo 账户设置中获取的 API URL。 +tools: + - tools/flomo.yaml +extra: + python: + source: provider/flomo.py +``` + +创建 `tools/flomo.yaml`: + +```yaml +identity: + name: flomo + author: yourname + label: + en_US: Save to Flomo + zh_Hans: 保存到 Flomo +description: + human: + en_US: Save the conversation content as a Flomo note. + zh_Hans: 将对话内容保存为 Flomo 笔记。 + llm: > + Saves content to the user's Flomo account. Use this tool when the user + asks to save, capture, or remember the current message. Takes a single + `content` parameter containing the text to save. +parameters: + - name: content type: string required: true label: - en_US: Note Content + en_US: Note content zh_Hans: 笔记内容 human_description: en_US: Content to save as a note in Flomo. - zh_Hans: 要保存为Flomo笔记的内容。 + zh_Hans: 要保存为 Flomo 笔记的内容。 + llm_description: The text to save as a Flomo note. + form: llm +extra: + python: + source: tools/flomo.py ``` ## 步骤 4:实现核心工具函数 @@ -264,12 +293,11 @@ class FlomoTool(Tool): 使用你的 Dify 环境详情编辑 `.env` 文件: ``` INSTALL_METHOD=remote - REMOTE_INSTALL_HOST=debug-plugin.dify.dev - REMOTE_INSTALL_PORT=5003 + REMOTE_INSTALL_URL=debug-plugin.dify.dev:5003 REMOTE_INSTALL_KEY=your_debug_key ``` - - 你可以在 Dify 仪表板中找到你的调试密钥和主机:点击右上角的"插件"图标,然后点击调试图标。在弹出窗口中,复制"API Key"和"Host Address"。 + + 你可以在 Dify 仪表板中找到你的调试 URL 和密钥:点击右上角的**插件**图标,然后点击调试图标。复制 **API Key** 和 **Host Address**(主机地址已包含端口)。 @@ -295,7 +323,7 @@ class FlomoTool(Tool): dify plugin package ./ ``` -这将创建一个 `plugin.difypkg` 文件,你可以将其上传到 Dify Marketplace。 +这将创建一个 `plugin.difypkg` 文件,你可以将其上传到 Dify 市场。 ## 常见问题和故障排除 diff --git a/zh/develop-plugin/dev-guides-and-walkthroughs/develop-md-exporter.mdx b/zh/develop-plugin/dev-guides-and-walkthroughs/develop-md-exporter.mdx index 049351e32..91a76bb1e 100644 --- a/zh/develop-plugin/dev-guides-and-walkthroughs/develop-md-exporter.mdx +++ b/zh/develop-plugin/dev-guides-and-walkthroughs/develop-md-exporter.mdx @@ -1,5 +1,5 @@ --- -title: '构建 Markdown 导出插件' +title: 'Markdown 导出器' description: '学习如何创建一个将对话导出为不同文档格式的插件' language: en standard_title: Building a Markdown Exporter Plugin @@ -456,8 +456,7 @@ plugin = PluginRunner( 使用你的 Dify 环境详细信息进行配置: ``` INSTALL_METHOD=remote - REMOTE_INSTALL_HOST=debug-plugin.dify.dev - REMOTE_INSTALL_PORT=5003 + REMOTE_INSTALL_URL=debug-plugin.dify.dev:5003 REMOTE_INSTALL_KEY=your_debug_key ``` @@ -509,7 +508,7 @@ dify plugin package ./ 文档转换的核心挑战是保持格式和结构。此插件使用的方法首先将 markdown 转换为 HTML(一种中间格式),然后将该 HTML 处理为目标格式。 -这个两步过程提供了灵活性——你可以通过简单地添加与 HTML 表示配合工作的新输出模块来扩展它以支持其他格式。 +这个两步过程提供了灵活性:你可以通过简单地添加与 HTML 表示配合工作的新输出模块来扩展它以支持其他格式。 对于 PDF 生成,选择 WeasyPrint 是因为它提供具有 CSS 支持的高质量 PDF 渲染。对于 Word 文档,python-docx 提供对文档结构的精细控制。 diff --git a/zh/develop-plugin/dev-guides-and-walkthroughs/develop-multimodal-data-processing-tool.mdx b/zh/develop-plugin/dev-guides-and-walkthroughs/develop-multimodal-data-processing-tool.mdx index 0462f17d7..ea9e3e147 100644 --- a/zh/develop-plugin/dev-guides-and-walkthroughs/develop-multimodal-data-processing-tool.mdx +++ b/zh/develop-plugin/dev-guides-and-walkthroughs/develop-multimodal-data-processing-tool.mdx @@ -1,5 +1,6 @@ --- -title: 构建在知识流水线中处理多模态数据的工具插件 +title: 多模态工具 +description: 配置工具插件以输出图片、音频或视频,使知识库节点能够将多模态输出与文本一同向量化 --- ⚠️ 本文档由 AI 自动翻译。如有任何不准确之处,请参考 [英文原版](/en/develop-plugin/dev-guides-and-walkthroughs/develop-multimodal-data-processing-tool)。 @@ -8,18 +9,17 @@ title: 构建在知识流水线中处理多模态数据的工具插件 开发用于多模态数据处理的工具插件时,若希望插件输出的多模态数据(如文字、图片、音视频等)能够被知识库节点正确识别并向量化,需要完成以下配置: -- **在工具代码中**,调用接口上传并构造文件对象 `files`。 +- **在工具代码文件中**,调用工具会话接口上传文件并构造 `files` 对象。 - **在工具提供者 YAML 文件中**,将 `output_schema` 声明为 `multimodal-Parent-Child` 或 `multimodal-General`。 ## 上传并构造文件对象 -在处理多模态数据(如图片)时,需要先通过 Dify 的工具会话接口上传文件,以获取文件元数据。 +在处理多模态数据(如图片)时,需要先通过 Dify 的工具会话工具上传文件,以获取文件元数据。 -下面以 Dify 官方插件 Dify Extractor 为例,展示如何上传文件并构造文件对象。 +下面以 Dify 官方插件 **Dify Extractor** 为例,展示如何上传文件并构造 `files` 对象。 ```python - # Upload the file using the tool session file_res = self._tool.session.file.upload( file_name, # filename @@ -30,8 +30,7 @@ file_res = self._tool.session.file.upload( # Generate a Markdown image reference using the file preview URL image_url = f"![image]({file_res.preview_url})" ``` - -上传接口会返回一个 `UploadFileResponse` 对象,包含文件的基本信息: +上传接口会返回一个 `UploadFileResponse` 对象,包含文件的基本信息。其结构如下: ```python from enum import Enum @@ -62,10 +61,10 @@ image_url = f"![image]({file_res.preview_url})" preview_url: str | None = None ``` -根据其结构,可将文件信息(如 `name`, `size`, `extension`, `mime_type` 等)映射到多模态输出结构中的 `files` 字段。 +可将文件信息(如 `name`、`size`、`extension`、`mime_type` 等)映射到多模态输出结构中的 `files` 字段。 - ```yaml multimodal_parent_child_structure highlight={22-62} expandable + ```yaml multimodal_parent_child_structure highlight={22-62} expandable { "$id": "https://dify.ai/schemas/v1/multimodal_parent_child_structure.json", "$schema": "http://json-schema.org/draft-07/schema#", @@ -146,7 +145,7 @@ image_url = f"![image]({file_res.preview_url})" } ``` - ```yaml multimodal_general_structure highlight={18-56} expandable + ```yaml multimodal_general_structure highlight={18-56} expandable { "$id": "https://dify.ai/schemas/v1/multimodal_general_structure.json", "$schema": "http://json-schema.org/draft-07/schema#", diff --git a/zh/develop-plugin/dev-guides-and-walkthroughs/endpoint.mdx b/zh/develop-plugin/dev-guides-and-walkthroughs/endpoint.mdx index 9e312d50c..d96009bcf 100644 --- a/zh/develop-plugin/dev-guides-and-walkthroughs/endpoint.mdx +++ b/zh/develop-plugin/dev-guides-and-walkthroughs/endpoint.mdx @@ -5,8 +5,8 @@ dimensions: detail: examples level: intermediate standard_title: Endpoint -language: en -title: Neko Cat Endpoint +language: zh +title: Endpoint 插件 description: Authors Yeuoly, Allen. This document details the structure and implementation of Endpoints in Dify plugins, using the Neko Cat project as an example. It covers defining Endpoint groups, configuring interfaces, implementing the _invoke method, @@ -16,25 +16,23 @@ description: Authors Yeuoly, Allen. This document details the structure and impl ⚠️ 本文档由 AI 自动翻译。如有任何不准确之处,请参考 [英文原版](/en/develop-plugin/dev-guides-and-walkthroughs/endpoint)。 -# Endpoint +本文档以 [Neko Cat](https://github.com/langgenius/dify-plugin-sdks/tree/main/python/examples/neko) 项目为例,介绍插件中 Endpoint 的结构。Endpoint 是插件暴露的 HTTP 接口,可用于与外部系统集成。完整的插件代码请参考 [GitHub 仓库](https://github.com/langgenius/dify-plugin-sdks/tree/main/python/examples/neko)。 -本文档以 [Neko Cat](/zh/develop-plugin/dev-guides-and-walkthroughs/endpoint) 项目为例,介绍插件中 Endpoint 的结构。Endpoint 是插件暴露的 HTTP 接口,可用于与外部系统集成。完整的插件代码请参考 [GitHub 仓库](https://github.com/langgenius/dify-plugin-sdks/tree/main/python/examples/neko)。 - -### 分组定义 +## 分组定义 `Endpoint` 分组是多个 `Endpoint` 的集合。在 Dify 插件中创建新的 `Endpoint` 时,你可能需要填写以下配置。 - ![Endpoint 分组是多个 Endpoint 的集合](https://assets-docs.dify.ai/2024/11/763dbf86e4319591415dc5a1b6948ccb.png) + ![](https://assets-docs.dify.ai/2024/11/763dbf86e4319591415dc5a1b6948ccb.png) 除了 `Endpoint Name` 之外,你可以通过编写分组的配置信息来添加新的表单项。点击保存后,你可以看到它包含的多个接口,这些接口将使用相同的配置信息。 - ![](https://assets-docs.dify.ai/2024/11/b778b7093b7df0dc80a476c65ddcbe58.png) + ![除了 Endpoint Name 之外,你可以通过编写分组的配置信息来添加新的表单项](https://assets-docs.dify.ai/2024/11/b778b7093b7df0dc80a476c65ddcbe58.png) -#### **结构** +### **结构** * `settings` (map[string] [ProviderConfig](/zh/develop-plugin/features-and-specs/plugin-types/general-specifications#providerconfig)):Endpoint 配置定义。 * `endpoints` (list[string],必填):指向具体的 `endpoint` 接口定义。 @@ -59,7 +57,7 @@ endpoints: - endpoints/neko.yaml ``` -### 接口定义 +## 接口定义 * `path` (string):遵循 Werkzeug 接口标准。 * `method` (string):接口方法,仅支持 `HEAD`、`GET`、`POST`、`PUT`、`DELETE`、`OPTIONS`。 @@ -75,7 +73,7 @@ extra: source: "endpoints/duck.py" ``` -### 接口实现 +## 接口实现 你需要实现一个继承自 `dify_plugin.Endpoint` 的子类,并实现 `_invoke` 方法。 diff --git a/zh/develop-plugin/dev-guides-and-walkthroughs/tool-oauth.mdx b/zh/develop-plugin/dev-guides-and-walkthroughs/tool-oauth.mdx index d5e3278f7..10c3582c9 100644 --- a/zh/develop-plugin/dev-guides-and-walkthroughs/tool-oauth.mdx +++ b/zh/develop-plugin/dev-guides-and-walkthroughs/tool-oauth.mdx @@ -1,5 +1,6 @@ --- -title: "为工具插件添加 OAuth 支持" +title: Tool OAuth +description: 用 OAuth 授权流程替代手动输入 API 密钥,让用户一键授权访问第三方服务 --- ⚠️ 本文档由 AI 自动翻译。如有任何不准确之处,请参考 [英文原版](/en/develop-plugin/dev-guides-and-walkthroughs/tool-oauth)。 @@ -16,6 +17,33 @@ OAuth 是为需要访问第三方服务(如 Gmail 或 GitHub)用户数据的 Dify 中的 OAuth 涉及**两个独立的流程**,开发者需要理解并为其进行设计。 +```mermaid +sequenceDiagram + autonumber + participant Admin as Admin / Developer + participant Service as Third-party Service + participant Dify + participant User + + rect rgb(235, 245, 255) + Note over Admin,Dify: Flow 1: One-time OAuth client setup + Admin->>Service: Register OAuth app + Service-->>Admin: client_id + client_secret + Admin->>Dify: Configure plugin OAuth client + end + + rect rgb(245, 255, 235) + Note over User,Service: Flow 2: Per-user authorization + User->>Dify: Click "Authorize" + Dify->>Service: Redirect to consent screen + User->>Service: Approve + Service-->>Dify: Authorization code + Dify->>Service: Exchange for access token + Service-->>Dify: Access + refresh tokens + Dify-->>User: Tool ready to use + end +``` + ### 流程 1:OAuth 客户端设置(管理员/开发者流程) @@ -173,7 +201,6 @@ def _oauth_get_authorization_url(self, redirect_uri: str, system_credentials: Ma return f"{self._AUTH_URL}?{urllib.parse.urlencode(params)}" ``` - ```python _oauth_get_credentials expandable def _oauth_get_credentials( self, redirect_uri: str, system_credentials: Mapping[str, Any], request: Request @@ -249,7 +276,6 @@ def _oauth_get_credentials( raise ToolProviderOAuthError(f"Failed to exchange authorization code: {str(e)}") ``` - ```python _oauth_refresh_credentials def _oauth_refresh_credentials( self, redirect_uri: str, system_credentials: Mapping[str, Any], credentials: Mapping[str, Any] @@ -341,10 +367,10 @@ class YourTool(BuiltinTool): ### 4. 指定正确的版本 -早期版本的插件 SDK 和 Dify 不支持 OAuth 认证。因此,你需要将插件 SDK 版本设置为: +OAuth 需要较新版本的 SDK 和 Dify。在 `requirements.txt` 中固定插件 SDK 版本: ``` -dify_plugin>=0.4.2,<0.5.0. +dify_plugin>=0.5.0 ``` 在 `manifest.yaml` 中,添加最低 Dify 版本: diff --git a/zh/develop-plugin/dev-guides-and-walkthroughs/tool-plugin.mdx b/zh/develop-plugin/dev-guides-and-walkthroughs/tool-plugin.mdx index fcac15989..62d442a0e 100644 --- a/zh/develop-plugin/dev-guides-and-walkthroughs/tool-plugin.mdx +++ b/zh/develop-plugin/dev-guides-and-walkthroughs/tool-plugin.mdx @@ -32,14 +32,14 @@ description: 本文档提供了如何为 Dify 开发工具插件的详细说明 本文将以 `Google Search` 为例,演示如何快速开发一个工具插件。 -### 前置条件 +## 前置条件 - Dify 插件脚手架工具 - Python 环境(版本 3.12) -关于如何准备插件开发脚手架工具的详细说明,请参考[初始化开发工具](/zh/develop-plugin/getting-started/cli)。如果你是首次开发插件,建议先阅读 [Dify 插件开发:Hello World 指南](/zh/develop-plugin/dev-guides-and-walkthroughs/tool-plugin)。 +关于如何准备插件开发脚手架工具的详细说明,请参考[初始化开发工具](/zh/develop-plugin/getting-started/cli)。 -### 创建新项目 +## 创建新项目 运行脚手架命令行工具来创建一个新的 Dify 插件项目。 @@ -55,7 +55,7 @@ dify plugin init > 在后续文本中,将使用 `dify` 作为命令行示例。如果遇到任何问题,请将 `dify` 命令替换为命令行工具的路径。 -### 选择插件类型和模板 +## 选择插件类型和模板 脚手架工具中的所有模板都提供完整的代码项目。在本示例中,选择 `Tool` 插件。 @@ -65,7 +65,7 @@ dify plugin init ![插件类型:工具](https://assets-docs.dify.ai/2024/12/dd3c0f9a66454e15868eabced7b74fd6.png) -#### 配置插件权限 +### 配置插件权限 插件还需要从 Dify 平台读取的权限。为本示例插件授予以下权限: @@ -82,9 +82,9 @@ dify plugin init ![插件权限](https://assets-docs.dify.ai/2024/12/9cf92c2e74dce55e6e9e331d031e5a9f.png) -### 开发工具插件 +## 开发工具插件 -#### 1. 创建工具提供者文件 +### 1. 创建工具提供者文件 工具提供者文件是一个 yaml 格式文件,可以理解为工具插件的基本配置入口,用于向工具提供必要的授权信息。 @@ -140,7 +140,7 @@ class ToolLabelEnum(Enum): OTHER = 'other' ``` -#### **2. 完善第三方服务凭据** +### **2. 完善第三方服务凭据** 为了开发方便,我们选择使用第三方服务 `SerpApi` 提供的 Google Search API。`SerpApi` 需要 API Key 才能使用,因此我们需要在 `yaml` 文件中添加 `credentials_for_provider` 字段。 @@ -186,7 +186,7 @@ extra: - 你需要指定提供者包含哪些工具。本示例只包含一个 `tools/google_search.yaml` 文件。 - 作为提供者,除了定义其基本信息外,还需要实现一些代码逻辑,因此需要指定其实现逻辑。在本示例中,我们将功能代码文件放在 `google.py` 中,但暂时不实现它,而是先编写 `google_search` 的代码。 -#### 3. 填写工具 YAML 文件 +### 3. 填写工具 YAML 文件 一个工具插件可以有多个工具功能,每个工具功能都需要一个 `yaml` 文件进行描述,包括工具功能的基本信息、参数、输出等。 @@ -231,10 +231,10 @@ extra: - `type`(必填)参数类型,目前支持 `string`、`number`、`boolean`、`select`、`secret-input` 五种类型,分别对应字符串、数字、布尔值、下拉框、加密输入框。对于敏感信息,请使用 `secret-input` 类型。 - `label`(必填)参数标签,用于前端显示。 - `form`(必填)表单类型,目前支持 `llm`、`form` 两种类型。 - - 在智能体应用中,`llm` 表示该参数由 LLM 自行推断,`form` 表示参数可以预先设置以使用此工具。 + - 在 Agent 应用中,`llm` 表示该参数由 LLM 自行推断,`form` 表示参数可以预先设置以使用此工具。 - 在工作流应用中,`llm` 和 `form` 都需要由前端填写,但 `llm` 参数将用作工具节点的输入变量。 - `required` 是否必填 - - 在 `llm` 模式下,如果参数是必填的,智能体将被要求推断此参数。 + - 在 `llm` 模式下,如果参数是必填的,Agent 将被要求推断此参数。 - 在 `form` 模式下,如果参数是必填的,用户将被要求在对话开始前在前端填写此参数。 - `options` 参数选项 - 在 `llm` 模式下,Dify 会将所有选项传递给 LLM,LLM 可以根据这些选项进行推断。 @@ -246,7 +246,7 @@ extra: - `placeholder` 输入字段的提示文本,当表单类型为 `form` 且参数类型为 `string`、`number`、`secret-input` 时可以设置,支持多语言。 - `llm_description` 传递给 LLM 的介绍。为了让 LLM 更好地理解此参数,请在此处写尽可能详细的关于此参数的信息,以便 LLM 能够理解该参数。 -#### 4. 准备工具代码 +### 4. 准备工具代码 填写完工具的配置信息后,就可以开始编写工具功能的代码,实现工具的逻辑目的。在 `/tools` 目录中创建 `google_search.py`,内容如下: @@ -297,7 +297,7 @@ class GoogleSearchTool(Tool): 此示例表示请求 `serpapi` 并使用 `self.create_json_message` 返回格式化的 `json` 数据字符串。如果你想了解更多关于返回数据类型的信息,可以参考[远程调试插件](/zh/develop-plugin/features-and-specs/plugin-types/remote-debug-a-plugin)和[持久化存储 KV](/zh/develop-plugin/features-and-specs/plugin-types/persistent-storage-kv) 文档。 -#### 5. 完善工具提供者代码 +### 5. 完善工具提供者代码 最后,你需要为提供者创建一个实现代码来实现凭据验证逻辑。如果凭据验证失败,将抛出 `ToolProviderCredentialValidationError` 异常。验证成功后,`google_search` 工具服务将被正确请求。 @@ -321,7 +321,7 @@ class GoogleProvider(ToolProvider): raise ToolProviderCredentialValidationError(str(e)) ``` -### 调试插件 +## 调试插件 完成插件开发后,需要测试插件是否能正常工作。Dify 提供了便捷的远程调试方法,帮助你在测试环境中快速验证插件的功能。 @@ -347,7 +347,7 @@ REMOTE_INSTALL_KEY=********-****-****-****-************ ![运行 Python -M Main 命令启动插件](https://assets-docs.dify.ai/2024/11/0fe19a8386b1234755395018bc2e0e35.png) -### 打包插件(可选) +## 打包插件(可选) 确认插件可以正常运行后,你可以使用以下命令行工具打包和命名插件。运行后,你会在当前文件夹中发现一个 `google.difypkg` 文件,这就是最终的插件包。 @@ -359,27 +359,27 @@ dify plugin package ./google 恭喜,你已经完成了工具类型插件的开发、调试和打包的整个流程! -### 发布插件(可选) +## 发布插件(可选) 如果你想将插件发布到 Dify Marketplace,请确保你的插件符合[发布到 Dify Marketplace](/zh/develop-plugin/publishing/marketplace-listing/release-to-dify-marketplace) 中的规范。通过审核后,代码将被合并到主分支并自动上架到 [Dify Marketplace](https://marketplace.dify.ai/)。 [发布概述](/zh/develop-plugin/publishing/marketplace-listing/release-overview) -### 探索更多 +## 探索更多 -#### **快速开始**: +### **快速开始**: - [开发扩展插件](/zh/develop-plugin/dev-guides-and-walkthroughs/endpoint) - [开发模型插件](/zh/develop-plugin/dev-guides-and-walkthroughs/creating-new-model-provider) - [Bundle 插件:打包多个插件](/zh/develop-plugin/features-and-specs/advanced-development/bundle) -#### **插件接口文档**: +### **插件接口文档**: - [通用规范](/zh/develop-plugin/features-and-specs/plugin-types/general-specifications) - Manifest 结构和工具规范 - [Endpoint](/zh/develop-plugin/dev-guides-and-walkthroughs/endpoint) - 详细的 Endpoint 定义 - [反向调用](/zh/develop-plugin/features-and-specs/advanced-development/reverse-invocation) - 反向调用 Dify 能力 - [模型 Schema](/zh/develop-plugin/features-and-specs/plugin-types/model-schema) - 模型 -- [智能体插件](/zh/develop-plugin/features-and-specs/advanced-development/reverse-invocation) - 扩展智能体策略 +- [Agent 插件](/zh/develop-plugin/features-and-specs/advanced-development/reverse-invocation) - 扩展 Agent 策略 ## 下一步学习 diff --git a/zh/develop-plugin/dev-guides-and-walkthroughs/trigger-plugin.mdx b/zh/develop-plugin/dev-guides-and-walkthroughs/trigger-plugin.mdx index 48241a943..8035748f9 100644 --- a/zh/develop-plugin/dev-guides-and-walkthroughs/trigger-plugin.mdx +++ b/zh/develop-plugin/dev-guides-and-walkthroughs/trigger-plugin.mdx @@ -1,5 +1,6 @@ --- title: "触发器插件" +description: 构建 Dify 1.10.0+ 触发器插件,将第三方 webhook 事件转换为工作流启动信号 --- ⚠️ 本文档由 AI 自动翻译。如有任何不准确之处,请参考 [英文原版](/en/develop-plugin/dev-guides-and-walkthroughs/trigger-plugin)。 @@ -30,7 +31,7 @@ Webhook 可以理解为一种基于 HTTP 的事件分发器。**一旦配置了 - **订阅(Subscription)**:基于 Webhook 的事件分发需要**在第三方平台的开发者控制台中将 Dify 的网络地址注册为目标服务器。在 Dify 中,这个配置过程称为*订阅*。** -- **事件(Event)**:一个平台可能发送多种类型的事件——例如*收到邮件*、*删除邮件*或*标记邮件为已读*——所有这些都会推送到注册的地址。触发器插件可以处理多种事件类型,每个事件对应 Dify 工作流中的一个插件触发器节点。 +- **事件(Event)**:一个平台可能发送多种类型的事件(例如*收到邮件*、*删除邮件*或*标记邮件为已读*),所有这些都会推送到注册的地址。触发器插件可以处理多种事件类型,每个事件对应 Dify 工作流中的一个插件触发器节点。 ## 插件开发 @@ -209,7 +210,7 @@ Webhook 可以理解为一种基于 HTTP 的事件分发器。**一旦配置了 ### 事件过滤 -要过滤掉某些事件——例如,只关注具有特定标签的 Issue 事件——你可以在 `issues.yaml` 的事件定义中添加 `parameters`。然后,在 `_on_event` 方法中,你可以抛出 `EventIgnoreError` 异常来过滤掉不符合配置条件的事件。 +要过滤掉某些事件(例如,只关注具有特定标签的 Issue 事件),你可以在 `issues.yaml` 的事件定义中添加 `parameters`。然后,在 `_on_event` 方法中,你可以抛出 `EventIgnoreError` 异常来过滤掉不符合配置条件的事件。 @@ -670,4 +671,4 @@ It will be automatically generated by the script. --- -[Edit this page](https://github.com/langgenius/dify-docs/edit/main/en/develop-plugin/dev-guides-and-walkthroughs/trigger-plugin.mdx) | [Report an issue](https://github.com/langgenius/dify-docs/issues/new?template=docs.yml) \ No newline at end of file +[编辑此页](https://github.com/langgenius/dify-docs/edit/main/en/develop-plugin/dev-guides-and-walkthroughs/trigger-plugin.mdx) | [报告问题](https://github.com/langgenius/dify-docs/issues/new?template=docs.yml) \ No newline at end of file diff --git a/zh/develop-plugin/features-and-specs/advanced-development/bundle.mdx b/zh/develop-plugin/features-and-specs/advanced-development/bundle.mdx index 445d1afb9..9b440daa0 100644 --- a/zh/develop-plugin/features-and-specs/advanced-development/bundle.mdx +++ b/zh/develop-plugin/features-and-specs/advanced-development/bundle.mdx @@ -5,7 +5,7 @@ dimensions: detail: advanced level: beginner standard_title: Bundle -language: en +language: zh title: Bundle 插件包 description: 本文档介绍 Bundle 插件包的概念和开发方法。Bundle 插件包可以将多个插件聚合在一起,支持三种类型(Marketplace、GitHub 和 Package)。文档详细介绍了创建 Bundle 项目、添加不同类型依赖以及打包 Bundle 项目的整个流程。 --- @@ -20,14 +20,14 @@ Bundle 插件包是多个插件的集合。它允许在单个插件中打包多 * `GitHub` 类型。存储 GitHub 仓库地址、发布版本号和资源文件名。导入时,Dify 将访问对应的 GitHub 仓库下载插件包。 * `Package` 类型。插件包直接存储在 Bundle 内部。它不存储引用来源,但这可能导致 Bundle 包体积较大。 -### 前置条件 +## 前置条件 * Dify 插件脚手架工具 * Python 环境(版本 3.12) 有关如何准备插件开发脚手架工具的详细说明,请参阅[初始化开发工具](/zh/develop-plugin/getting-started/cli)。 -### 创建 Bundle 项目 +## 创建 Bundle 项目 在当前目录下,运行脚手架命令行工具创建新的插件包项目。 @@ -41,7 +41,7 @@ Bundle 插件包是多个插件的集合。它允许在单个插件中打包多 dify bundle init ``` -#### 1. 填写插件信息 +### 1. 填写插件信息 按照提示配置插件名称、作者信息和插件描述。如果你是团队协作,也可以输入组织名称作为作者。 @@ -54,10 +54,10 @@ dify bundle init 填写信息并按 Enter 后,将自动创建 Bundle 插件项目目录。 - ![](https://assets-docs.dify.ai/2024/12/356d1a8201fac3759bf01ee64e79a52b.png) + ![填写信息并按 Enter 后,将自动创建 Bundle 插件项目](https://assets-docs.dify.ai/2024/12/356d1a8201fac3759bf01ee64e79a52b.png) -#### 2. 添加依赖 +### 2. 添加依赖 * **Marketplace** @@ -89,7 +89,7 @@ dify-plugin bundle append package . --package_path=./openai.difypkg 其中 `package_path` 是插件包的目录。 -### 打包 Bundle 项目 +## 打包 Bundle 项目 运行以下命令打包 Bundle 插件: diff --git a/zh/develop-plugin/features-and-specs/advanced-development/customizable-model.mdx b/zh/develop-plugin/features-and-specs/advanced-development/customizable-model.mdx index 45225a166..1f16dcbf4 100644 --- a/zh/develop-plugin/features-and-specs/advanced-development/customizable-model.mdx +++ b/zh/develop-plugin/features-and-specs/advanced-development/customizable-model.mdx @@ -5,16 +5,16 @@ dimensions: detail: advanced level: advanced standard_title: Customizable Model -language: en +language: zh title: 集成自定义模型 -description: 本文档详细介绍了如何将自定义模型集成到 Dify 中,以 Xinference 模型为例。它涵盖了完整的流程,包括创建模型供应商文件、根据模型类型编写代码、实现模型调用逻辑、处理异常、调试和发布。具体详细说明了 LLM 调用、令牌计算、凭据验证和参数生成等核心方法的实现。 +description: 本文档详细介绍了如何将自定义模型集成到 Dify 中,以 Xinference 模型为例。它涵盖了完整的流程,包括创建模型供应商文件、根据模型类型编写代码、实现模型调用逻辑、处理异常、调试和发布。具体详细说明了 LLM 调用、token 计算、凭据验证和参数生成等核心方法的实现。 --- ⚠️ 本文档由 AI 自动翻译。如有任何不准确之处,请参考 [英文原版](/en/develop-plugin/features-and-specs/advanced-development/customizable-model)。 -**自定义模型**是指您自行部署或配置的 LLM。本文档以 [Xinference 模型](https://inference.readthedocs.io/en/latest/)为例,演示如何将自定义模型集成到您的**模型插件**中。 +**自定义模型**是指您自行部署或配置的大语言模型。本文档以 [Xinference 模型](https://inference.readthedocs.io/en/latest/)为例,演示如何将自定义模型集成到您的**模型插件**中。 -默认情况下,自定义模型自动包含两个参数——其**模型类型**和**模型名称**——无需在供应商 YAML 文件中进行额外定义。 +默认情况下,自定义模型自动包含两个参数(其**模型类型**和**模型名称**),无需在供应商 YAML 文件中进行额外定义。 您无需在供应商配置文件中实现 `validate_provider_credential`。在运行时,根据用户选择的模型类型或模型名称,Dify 会自动调用相应模型层的 `validate_credentials` 方法来验证凭据。 @@ -134,7 +134,7 @@ Xinference 中的每个模型都需要一个 `model_name`: 由于 Xinference 支持 llm、rerank、speech2text 和 tts,您应该在 /models 下创建相应的目录,每个目录包含其各自的功能代码。 -以下是 llm 类型模型的示例。您需要创建一个名为 llm.py 的文件,然后定义一个类——例如 XinferenceAILargeLanguageModel——继承自 \_\_base.large\_language\_model.LargeLanguageModel。该类应包含: +以下是 llm 类型模型的示例。您需要创建一个名为 llm.py 的文件,然后定义一个类(例如 XinferenceAILargeLanguageModel),继承自 \_\_base.large\_language\_model.LargeLanguageModel。该类应包含: * **LLM 调用** @@ -183,9 +183,9 @@ def _handle_sync_response(self, **kwargs) -> LLMResult: return LLMResult(**response) ``` -* **预计算输入令牌** +* **预计算输入 Token** -如果您的模型不提供令牌计数接口,只需返回 0: +如果您的模型不提供 token 计数接口,只需返回 0: ```python def get_num_tokens( @@ -265,9 +265,7 @@ def get_customizable_model_schema(self, model: str, credentials: dict) -> AIMode ) ) - """ - some NOT IMPORTANT code here - """ + # ... additional ParameterRule entries omitted for brevity ... entity = AIModelEntity( model=model, diff --git a/zh/develop-plugin/features-and-specs/advanced-development/reverse-invocation-app.mdx b/zh/develop-plugin/features-and-specs/advanced-development/reverse-invocation-app.mdx index 18e514f9b..f6aa6ee81 100644 --- a/zh/develop-plugin/features-and-specs/advanced-development/reverse-invocation-app.mdx +++ b/zh/develop-plugin/features-and-specs/advanced-development/reverse-invocation-app.mdx @@ -5,7 +5,7 @@ dimensions: detail: advanced level: intermediate standard_title: Reverse Invocation App -language: en +language: zh title: 应用 description: 本文档详细介绍了插件如何在 Dify 平台内反向调用应用服务。涵盖三种接口类型:Chat 接口(用于 Chatbot/Agent/Chatflow 应用)、工作流接口和 Completion 接口,为每种接口提供入口点、调用规范和实用代码示例。 --- @@ -20,7 +20,7 @@ description: 本文档详细介绍了插件如何在 Dify 平台内反向调用 * 对于工作流应用,它们占用单独的**工作流接口。** * 对于 Completion(文本生成应用)应用,它们占用单独的 **Completion 接口**。 -请注意,插件只允许访问插件所在工作空间内的应用。 +请注意,插件只允许访问插件所在工作区内的应用。 ### 调用 Chat 接口 @@ -64,15 +64,12 @@ class Duck(Endpoint): app_id = values["app_id"] def generator(): - # Note: The original example incorrectly called self.session.app.workflow.invoke - # It should call self.session.app.chat.invoke for a chat app. - # Assuming a chat app is intended here based on the section title. response = self.session.app.chat.invoke( - app_id=app_id, - inputs={}, # Provide actual inputs as needed - response_mode="streaming", - conversation_id="some-conversation-id", # Provide a conversation ID if needed - files=[] + app_id=app_id, + inputs={}, + response_mode="streaming", + conversation_id="some-conversation-id", + files=[], ) for data in response: diff --git a/zh/develop-plugin/features-and-specs/advanced-development/reverse-invocation-model.mdx b/zh/develop-plugin/features-and-specs/advanced-development/reverse-invocation-model.mdx index 6a375a858..9c6b504a7 100644 --- a/zh/develop-plugin/features-and-specs/advanced-development/reverse-invocation-model.mdx +++ b/zh/develop-plugin/features-and-specs/advanced-development/reverse-invocation-model.mdx @@ -5,7 +5,7 @@ dimensions: detail: advanced level: intermediate standard_title: Reverse Invocation Model -language: en +language: zh title: 反向调用模型 description: 本文档详细介绍了插件如何在 Dify 平台内反向调用模型服务。涵盖了反向调用 LLM、Summary、TextEmbedding、Rerank、TTS、Speech2Text 和 Moderation 模型的具体方法。每个模型调用都包括其入口点、接口参数说明、实际使用代码示例以及调用模型的最佳实践建议。 --- @@ -18,15 +18,15 @@ description: 本文档详细介绍了插件如何在 Dify 平台内反向调用 例如,对于 `LLM` 类型的模型,还需要包含 `completion_params` 和 `mode` 参数。您可以手动构建此结构,或使用 `model-selector` 类型的参数或配置。 -### 调用 LLM +## 调用 LLM -#### **入口点** +**入口点** ```python self.session.model.llm ``` -#### **接口** +**接口** ```python def invoke( @@ -42,7 +42,7 @@ description: 本文档详细介绍了插件如何在 Dify 平台内反向调用 请注意,如果您调用的模型不具备 `tool_call` 能力,这里传递的 `tools` 将不会生效。 -#### **使用示例** +**使用示例** 如果您想在 `Tool` 中调用 OpenAI 的 `gpt-4o-mini` 模型,请参考以下示例代码: @@ -83,7 +83,7 @@ class LLMTool(Tool): 请注意,代码中传入了 `tool_parameters` 中的 `query` 参数。 -### **最佳实践** +## **最佳实践** 不建议手动构建 `LLMModelConfig`。相反,应该允许用户在 UI 上选择他们想要使用的模型。在这种情况下,您可以通过添加 `model` 参数来修改工具的参数列表,如下所示: @@ -154,7 +154,7 @@ class LLMTool(Tool): content='you are a helpful assistant' ), UserPromptMessage( - content=tool_parameters.get('query') # Assuming 'query' is still needed, otherwise use 'prompt' from parameters + content=tool_parameters.get('prompt') ) ], stream=True @@ -166,9 +166,9 @@ class LLMTool(Tool): yield self.create_text_message(text=chunk.delta.message.content) ``` -### 调用 Summary +## 调用 Summary -您可以请求此接口来总结一段文本。它将使用当前工作空间内的系统模型来总结文本。 +您可以请求此接口来总结一段文本。它将使用当前工作区内的系统模型来总结文本。 **入口点** @@ -187,7 +187,7 @@ class LLMTool(Tool): ) -> str: ``` -### 调用 TextEmbedding +## 调用 TextEmbedding **入口点** @@ -199,12 +199,15 @@ class LLMTool(Tool): ```python def invoke( - self, model_config: TextEmbeddingResult, texts: list[str] + self, + model_config: TextEmbeddingModelConfig, + texts: list[str], + input_type: EmbeddingInputType = EmbeddingInputType.QUERY, ) -> TextEmbeddingResult: pass ``` -### 调用 Rerank +## 调用 Rerank **入口点** @@ -221,7 +224,7 @@ class LLMTool(Tool): pass ``` -### 调用 TTS +## 调用 TTS **入口点** @@ -240,7 +243,7 @@ class LLMTool(Tool): 请注意,`tts` 接口返回的 `bytes` 流是 `mp3` 音频字节流。每次迭代返回一个完整的音频片段。如果您想要进行更深入的处理任务,请选择合适的库。 -### 调用 Speech2Text +## 调用 Speech2Text **入口点** @@ -259,7 +262,7 @@ class LLMTool(Tool): 其中 `file` 是以 `mp3` 格式编码的音频文件。 -### 调用 Moderation +## 调用 Moderation **入口点** diff --git a/zh/develop-plugin/features-and-specs/plugin-types/plugin-logging.mdx b/zh/develop-plugin/features-and-specs/plugin-types/plugin-logging.mdx index e56ec8587..b2a75a60c 100644 --- a/zh/develop-plugin/features-and-specs/plugin-types/plugin-logging.mdx +++ b/zh/develop-plugin/features-and-specs/plugin-types/plugin-logging.mdx @@ -1,7 +1,10 @@ --- title: 输出插件日志 +description: 使用 SDK 的 plugin_logger_handler 从插件内部输出日志信息,可在远程调试时查看,并持久化到守护进程容器日志中 --- + ⚠️ 本文档由 AI 自动翻译。如有任何不准确之处,请参考 [英文原版](/en/develop-plugin/features-and-specs/plugin-types/plugin-logging)。 + 作为插件开发者,你可能希望在插件处理过程中,为了开发或调试目的,将任意字符串输出到日志中。 为此,插件 SDK 实现了一个适用于 Python 标准库 `logging` 的处理器。通过使用它,你可以将任意字符串输出到**远程调试时的标准输出**以及**插件守护进程的容器日志**(仅社区版)。 @@ -46,5 +49,4 @@ It will be automatically generated by the script. --- -[编辑此页面](https://github.com/langgenius/dify-docs/edit/main/zh/develop-plugin/features-and-specs/plugin-types/plugin-logging.mdx) | [提交问题](https://github.com/langgenius/dify-docs/issues/new?template=docs.yml) - +[编辑此页面](https://github.com/langgenius/dify-docs/edit/main/zh/develop-plugin/features-and-specs/plugin-types/plugin-logging.mdx) | [提交问题](https://github.com/langgenius/dify-docs/issues/new?template=docs.yml) \ No newline at end of file diff --git a/zh/develop-plugin/publishing/standards/third-party-signature-verification.mdx b/zh/develop-plugin/publishing/standards/third-party-signature-verification.mdx index c3fab0896..3a8946604 100644 --- a/zh/develop-plugin/publishing/standards/third-party-signature-verification.mdx +++ b/zh/develop-plugin/publishing/standards/third-party-signature-verification.mdx @@ -7,107 +7,124 @@ dimensions: standard_title: Third-Party Signature Verification language: zh-Hans title: 为第三方签名验证签署插件 -description: 本文档介绍如何在 Dify 社区版中启用和使用第三方签名验证功能,包括密钥对生成、插件签名和验证,以及环境配置步骤,使管理员能够安全地安装 Dify Marketplace 上没有的插件。 +description: 在 Dify 社区版中启用已签名的 `.difypkg` 安装,无需完全禁用签名验证(生成密钥、签署软件包、分发公钥) --- ⚠️ 本文档由 AI 自动翻译。如有任何不准确之处,请参考 [英文原版](/en/develop-plugin/publishing/standards/third-party-signature-verification)。 ---- -title: ---- - -此功能仅在 Dify 社区版中可用。Dify 云版本目前不支持第三方签名验证。 + +第三方签名验证是 **Dify 社区版** 功能。Dify 云版本集中管理签名,不开放这些控制选项。 + -第三方签名验证允许 Dify 管理员在不完全禁用签名验证的情况下,安全地批准安装未在 Dify Marketplace 上列出的插件。例如,这支持以下场景: +自托管 Dify 默认强制执行签名验证。第三方签名验证允许管理员安全地安装不在市场上的插件,而无需完全禁用验证。 -* Dify 管理员可以在审核通过开发者发送的插件后为其添加签名。 -* 插件开发者可以为其插件添加签名,并将其与公钥一起发布,供无法禁用签名验证的 Dify 管理员使用。 +两种场景: -Dify 管理员和插件开发者都可以使用预先生成的密钥对为插件添加签名。此外,管理员可以配置 Dify 在插件安装期间使用特定公钥强制执行签名验证。 + + + 管理员审核来自可信开发者的 `.difypkg` 文件,并在安装前使用自己的密钥进行签名。 + + + 开发者签署 `.difypkg` 并发布匹配的公钥。信任该开发者的管理员将该公钥添加到验证列表中。 + + -## 生成用于签名和验证的密钥对 +两种情况的机制相同:生成密钥对,使用私钥签名,使用公钥验证。 -使用以下命令生成用于添加和验证插件签名的新密钥对: +## 生成密钥对 ```bash dify signature generate -f your_key_pair ``` -运行此命令后,将在当前目录中生成两个文件: - -* **私钥**:`your_key_pair.private.pem` -* **公钥**:`your_key_pair.public.pem` - -私钥用于签署插件,公钥用于验证插件的签名。 - -请妥善保管私钥。如果私钥泄露,攻击者可以为任何插件添加有效签名,这将危及 Dify 的安全性。 - -## 为插件添加签名并验证 - -运行以下命令为您的插件添加签名。请注意,您必须指定**要签名的插件文件**和**私钥**: - -```bash -dify signature sign your_plugin_project.difypkg -p your_key_pair.private.pem -``` - -执行命令后,将在同一目录中生成一个新的插件文件,其原始文件名中添加了 `signed`:`your_plugin_project.signed.difypkg` - -您可以使用此命令验证插件是否已正确签名。在这里,您需要指定**已签名的插件文件**和**公钥**: - -```bash -dify signature verify your_plugin_project.signed.difypkg -p your_key_pair.public.pem -``` - -如果省略公钥参数,验证将使用 Dify Marketplace 公钥。在这种情况下,对于任何未从 Dify Marketplace 下载的插件文件,签名验证都将失败。 - -## 启用第三方签名验证 - -Dify 管理员可以在安装插件之前使用预先批准的公钥强制执行签名验证。 - -### 放置公钥 - -将与签名所用私钥对应的**公钥**放置在插件守护程序可以访问的位置。 - -例如,在 `docker/volumes/plugin_daemon` 下创建一个 `public_keys` 目录,并将公钥文件复制到该目录: - -```bash -mkdir docker/volumes/plugin_daemon/public_keys -cp your_key_pair.public.pem docker/volumes/plugin_daemon/public_keys -``` - -### 环境变量配置 - -在 `plugin_daemon` 容器中,配置以下环境变量: - -* `THIRD_PARTY_SIGNATURE_VERIFICATION_ENABLED` - * 启用第三方签名验证。 - * 将此设置为 `true` 以启用该功能。 -* `THIRD_PARTY_SIGNATURE_VERIFICATION_PUBLIC_KEYS` - * 指定用于签名验证的公钥文件的路径。 - * 您可以列出多个公钥文件,用逗号分隔。 - -以下是配置这些变量的 Docker Compose 覆盖文件(`docker-compose.override.yaml`)示例: - -```yaml -services: - plugin_daemon: - environment: - FORCE_VERIFYING_SIGNATURE: true - THIRD_PARTY_SIGNATURE_VERIFICATION_ENABLED: true - THIRD_PARTY_SIGNATURE_VERIFICATION_PUBLIC_KEYS: /app/storage/public_keys/your_key_pair.public.pem -``` - -请注意,`docker/volumes/plugin_daemon` 被挂载到 `plugin_daemon` 容器中的 `/app/storage`。请确保 `THIRD_PARTY_SIGNATURE_VERIFICATION_PUBLIC_KEYS` 中指定的路径对应于容器内的路径。 - -要应用这些更改,请重启 Dify 服务: - -```bash -cd docker -docker compose down -docker compose up -d -``` - -重启服务后,第三方签名验证功能将在当前社区版环境中启用。 +当前目录中会生成两个文件: + +| 文件 | 用途 | +| :--- | :--- | +| `your_key_pair.private.pem` | 签署插件(保密) | +| `your_key_pair.public.pem` | 验证签名(公开分享) | + + +妥善保管私钥。任何拥有私钥的人都可以签署插件,而这些插件将通过信任您公钥的安装实例的验证。 + + +## 签署和验证插件 + + + + ```bash + dify signature sign your_plugin_project.difypkg -p your_key_pair.private.pem + ``` + + 在同一目录中生成 `your_plugin_project.signed.difypkg`。 + + + ```bash + dify signature verify your_plugin_project.signed.difypkg -p your_key_pair.public.pem + ``` + + 在分发或安装之前确认签名匹配。 + + + + +如果省略 `-p` 参数,`dify signature verify` 将使用 Dify 市场公钥进行验证。任何未由 Dify 签署的插件在该模式下都将验证失败。 + + +## 在守护程序上启用验证 + +管理员通过向插件守护程序提供受信任公钥列表来安装已签名的插件。 + + + + 将 `.public.pem` 文件放置在守护程序容器可以访问的位置。对于 Docker Compose 安装: + + ```bash + mkdir -p docker/volumes/plugin_daemon/public_keys + cp your_key_pair.public.pem docker/volumes/plugin_daemon/public_keys/ + ``` + + + 在 `plugin_daemon` 服务上设置以下变量: + + | 变量 | 值 | + | :--- | :--- | + | `FORCE_VERIFYING_SIGNATURE` | `true` | + | `THIRD_PARTY_SIGNATURE_VERIFICATION_ENABLED` | `true` | + | `THIRD_PARTY_SIGNATURE_VERIFICATION_PUBLIC_KEYS` | 容器内公钥的逗号分隔路径 | + + `docker-compose.override.yaml` 示例片段: + + ```yaml + services: + plugin_daemon: + environment: + FORCE_VERIFYING_SIGNATURE: true + THIRD_PARTY_SIGNATURE_VERIFICATION_ENABLED: true + THIRD_PARTY_SIGNATURE_VERIFICATION_PUBLIC_KEYS: /app/storage/public_keys/your_key_pair.public.pem + ``` + + + `docker/volumes/plugin_daemon` 挂载到容器内的 `/app/storage`,因此 `THIRD_PARTY_SIGNATURE_VERIFICATION_PUBLIC_KEYS` 中的路径必须使用容器内路径。 + + + + ```bash + cd docker + docker compose down + docker compose up -d + ``` + + 现在已强制执行验证安装:与配置的公钥匹配的已签名 `.difypkg` 文件可以顺利安装;未签名或不匹配的文件将被拒绝。 + + + +## 相关资源 + +- [打包为本地文件并分享](/zh/develop-plugin/publishing/marketplace-listing/release-by-file) +- [发布到个人 GitHub 仓库](/zh/develop-plugin/publishing/marketplace-listing/release-to-individual-github-repo) +- [插件开发指南](/zh/develop-plugin/publishing/standards/contributor-covenant-code-of-conduct) +- [发布常见问题](/zh/develop-plugin/publishing/faq/faq) {/* Contributing Section