diff --git a/.gitignore b/.gitignore
new file mode 100644
index 00000000..ad64a3f4
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,2 @@
+._DS_Store
+.DS_Store
diff --git a/plugin_dev_zh/0221-initialize-development-tools.zh.mdx b/plugin_dev_zh/0221-initialize-development-tools.zh.mdx
index ca641c3e..8363f5de 100644
--- a/plugin_dev_zh/0221-initialize-development-tools.zh.mdx
+++ b/plugin_dev_zh/0221-initialize-development-tools.zh.mdx
@@ -7,30 +7,58 @@ dimensions:
standard_title: Initialize Development Tools
language: zh
title: 初始化开发工具
-description: 本文档详细介绍了Dify插件开发前的必要准备工作,包括安装Dify插件脚手架工具(dify-plugin-daemon)和配置Python环境(版本要求≥3.12)的完整步骤。文档还提供了各类型插件开发的参考链接。
+description: 本文档详细介绍了Dify插件开发前的必要准备工作,包括安装Dify插件CLI工具(dify-plugin-daemon)和配置Python环境(版本要求≥3.12)的完整步骤。文档还提供了各类型插件开发的参考链接。
---
开发 Dify 插件需要进行以下准备。本文档是开始[插件开发](/plugin_dev_zh/0111-getting-started-dify-plugin.zh)的第一步。
-* Dify 插件脚手架工具
+* Dify 插件 CLI 工具
* Python 环境,版本号 ≥ 3.12
-> Dify 插件开发脚手架工具又称为 `dify-plugin-daemon`,可以被视作**插件开发 SDK**。
+> Dify 插件 CLI 工具又称为 `dify-plugin-daemon`,可以被视作**插件开发 SDK**。
-### **1. 安装 Dify 插件开发脚手架工具**
+### **1. 安装 Dify 插件 CLI 工具**
-访问 [Dify Plugin CLI](https://github.com/langgenius/dify-plugin-daemon/releases) 项目地址,下载并安装最新版本号和对应操作系统的工具。
+Dify 插件 CLI 工具可以通过 Homebrew(在 Linux 和 macOS 上)或独立的二进制可执行文件(在 Windows、Linux 和 macOS 上)进行安装。
+
+#### 通过 Homebrew 安装
+
+对于 macOS 和 Linux 用户,建议使用 [Homebrew](https://brew.sh/) 安装 Dify 插件 CLI 工具。
+
+首先添加 [Dify 插件 CLI 工具的 Homebrew 配方](https://github.com/langgenius/homebrew-dify),然后使用 `brew install` 命令进行安装。
+
+```bash
+brew tap langgenius/dify
+brew install dify
+```
+
+要检查安装是否成功,请运行 `dify version`,应该会显示版本代码。
+```bash
+dify version
+```
+
+要升级 Dify 插件 CLI 工具,请运行以下命令:
+
+```bash
+brew upgrade dify
+```
+
+#### 通过二进制可执行文件安装
+
+**下载二进制可执行文件:**
+
+访问 [Dify Plugin CLI](https://github.com/langgenius/dify-plugin-daemon/releases) 项目地址,在发布页面的资产列表中,选择并下载适合操作系统(Linux / macOS / Windows)和芯片架构(`amd64` 为 x86 芯片 / `arm64` 为 ARM 或 Apple 的 M 芯片)的二进制可执行文件。
本文**以装载 M 系列芯片的 macOS** 为例。下载 `dify-plugin-darwin-arm64` 文件后,赋予其执行权限。
-```
-chmod +x dify-plugin-darwin-arm64
+```bash
+chmod +x ./dify-plugin-darwin-arm64
+mv ./dify-plugin-darwin-arm64 ./dify
```
-运行以下命令检查安装是否成功。
-
-```
-./dify-plugin-darwin-arm64 version
+要检查安装是否成功,请运行 `./dify version`,应该会显示版本代码。
+```bash
+./dify version
```
> 若提示 “Apple 无法验证” 错误,请前往 **“设置 → 隐私与安全性 → 安全性”**,轻点 “仍要打开” 按钮。
@@ -39,7 +67,7 @@ chmod +x dify-plugin-darwin-arm64
> **💡 提示:**
>
-> 如果想要在系统全局使用 `dify` 命令运行脚手架工具,建议将该二进制文件重命名为 `dify` 并拷贝至 `/usr/local/bin` 系统路径内。
+> 如果想要在系统全局使用 `dify` 命令运行 CLI 工具,建议将该二进制文件重命名为 `dify` 并拷贝至 `/usr/local/bin` 系统路径内。
>
> 配置完成后,在终端输入 `dify version` 命令后将输出版本号信息。
>
diff --git a/plugin_dev_zh/0222-tool-plugin.zh.mdx b/plugin_dev_zh/0222-tool-plugin.zh.mdx
index 72043ea8..935b09f4 100644
--- a/plugin_dev_zh/0222-tool-plugin.zh.mdx
+++ b/plugin_dev_zh/0222-tool-plugin.zh.mdx
@@ -218,7 +218,7 @@ extra:
- `identity` 包含了工具的基本信息,包括名称、作者、标签、描述等。
- `parameters` 参数列表
- `name` (必填)参数名称,唯一,不允许和其他参数重名。
- - `type` (必填)参数类型,目前支持`string`、`number`、`boolean`、`select`、`secret-input` 五种类型,分别对应字符串、数字、布尔值、下拉框、加密输入框,对于敏感信息,请使用`secret-input`类型。
+ - `type` (必填)参数类型,目前支持`string`、`number`、`boolean`、`select`、`secret-input`、`file`、`files`、`model-selector`、`app-selector` 九种类型,分别对应字符串、数字、布尔值、下拉框、加密输入框、文件、文件集、模型选择、应用选择,对于敏感信息,请使用 `secret-input` 类型。
- `label`(必填)参数标签,用于前端展示。
- `form` (必填)表单类型,目前支持`llm`、`form`两种类型。
- 在 Agent 应用中,`llm` 表示该参数 LLM 自行推理,`form` 表示要使用该工具可提前设定的参数。
@@ -287,7 +287,7 @@ class GoogleSearchTool(Tool):
该例子的含义为请求 `serpapi`,并使用 `self.create_json_message` 返回一串 `json` 的格式化数据,如果想了解更多的返回数据类型,可以参考[远程调试插件](/plugin_dev_zh/0411-remote-debug-a-plugin.zh)和[持久化存储 KV](/plugin_dev_zh/0411-persistent-storage-kv.zh)文档。
-#### 4. 完成工具供应商代码
+#### 5. 完成工具供应商代码
最后需要创建一个供应商的实现代码,用于实现凭据验证逻辑。如果凭据验证失败,将会抛出`ToolProviderCredentialValidationError`异常。验证成功后,将正确请求 `google_search` 工具服务。
diff --git a/plugin_dev_zh/0312-privacy-protection-guidelines.zh.mdx b/plugin_dev_zh/0312-privacy-protection-guidelines.zh.mdx
index 13176d4f..24dd1598 100644
--- a/plugin_dev_zh/0312-privacy-protection-guidelines.zh.mdx
+++ b/plugin_dev_zh/0312-privacy-protection-guidelines.zh.mdx
@@ -76,7 +76,7 @@ description: 本文档描述了开发者向Dify Marketplace提交插件时如何
* 使用登录功能(含第三方认证);
* 收集可能包含个人信息的输入或资源;
* 分析用户行为、互动和使用情况;
-* 存储通讯内容,如消息、聊天记录、邮箱;
+* 存储通讯内容,如消息、聊天记录、邮件;
* 访问关联社交媒体的用户资料;
* 收集健康数据,如运动、心率、医疗信息;
* 保存搜索记录或浏览行为;
diff --git a/plugin_dev_zh/0321-release-overview.zh.mdx b/plugin_dev_zh/0321-release-overview.zh.mdx
index 5e6d1055..aab18ba6 100644
--- a/plugin_dev_zh/0321-release-overview.zh.mdx
+++ b/plugin_dev_zh/0321-release-overview.zh.mdx
@@ -76,6 +76,12 @@ description: 本文档介绍了Dify插件的三种发布方式:官方Marketpla
* **开源共享项目** → **推荐使用 GitHub**,方便版本管理与社区协作。
* **快速分发或内部测试** → **推荐使用插件文件**,简单高效地安装和分享。
+{/*
+### 第三方验证
+
+安装非 Dify 市场内的插件时,有可能遇到第三方签名验证问题。解决办法请参考[第三方签名验证](./signing-plugins-for-third-party-signature-verification.mdx)。
+*/}
+
## 相关资源
- [插件开发基本概念](/plugin_dev_zh/0111-getting-started-dify-plugin.zh) - 全面了解Dify插件开发
diff --git a/plugin_dev_zh/0322-release-by-file.zh.mdx b/plugin_dev_zh/0322-release-by-file.zh.mdx
index 43f607d3..78eba256 100644
--- a/plugin_dev_zh/0322-release-by-file.zh.mdx
+++ b/plugin_dev_zh/0322-release-by-file.zh.mdx
@@ -10,7 +10,7 @@ title: 打包为本地文件与分享
description: 本文档介绍了如何将Dify插件项目打包为本地文件并分享给他人的详细步骤。内容包括插件打包前的准备工作、使用Dify插件开发工具执行打包命令、生成的.difypkg文件的安装方式以及如何分享插件文件给其他用户。
---
-完成插件开发后,你可以将插件项目打包为一个本地文件并分享给他人,通过插件文件后即可安装至 Dify Workspace 内。如果您还没有开发插件,可以参考[插件开发入门指南](/plugin_dev_zh/0211-getting-started-dify-tool.zh)。
+完成插件开发后,你可以将插件项目打包为一个本地文件并分享给他人,通过插件文件即可安装至 Dify Workspace 内。如果您还没有开发插件,可以参考[插件开发入门指南](/plugin_dev_zh/0211-getting-started-dify-tool.zh)。
* **特点**:
* 不依赖在线平台,**快速灵活**地分享插件。
diff --git a/plugin_dev_zh/0331-faq.zh.mdx b/plugin_dev_zh/0331-faq.zh.mdx
index 44fa1261..bc5e57e4 100644
--- a/plugin_dev_zh/0331-faq.zh.mdx
+++ b/plugin_dev_zh/0331-faq.zh.mdx
@@ -19,7 +19,7 @@ description: Author Allen 本文档回答了Dify插件开发和安装过程中
重新运行插件打包命令并安装新的插件包。
-## 装插件时遇到异常应如何处理安?
+## 安装插件时遇到异常应如何处理?
**问题描述**:安装插件时遇到异常信息:`plugin verification has been enabled, and the plugin you want to install has a bad signature`,应该如何处理?
diff --git a/plugin_dev_zh/0411-general-specifications.zh.mdx b/plugin_dev_zh/0411-general-specifications.zh.mdx
index 26163c97..65990852 100644
--- a/plugin_dev_zh/0411-general-specifications.zh.mdx
+++ b/plugin_dev_zh/0411-general-specifications.zh.mdx
@@ -37,8 +37,8 @@ description: 本文档详细介绍了Dify插件开发中的通用结构和规范
`ProviderConfig` 为一个通用的供应商表单结构,适用于 `Tool`与`Endpoint`
* `name`(string):表单项名称
-* `label`([I18nObject](#i18nobject), requierd):遵循 [IETF BCP 47](https://tools.ietf.org/html/bcp47)
-* `type`([provider\_config\_type](#providerconfigtype-string), requierd):表单类型
+* `label`([I18nObject](#i18nobject), required):遵循 [IETF BCP 47](https://tools.ietf.org/html/bcp47)
+* `type`([provider\_config\_type](#providerconfigtype-string), required):表单类型
* `scope`([provider\_config\_scope](#providerconfigscope-string)):可选项范围,根据`type`变动
* `required`(bool):不能为空
* `default`(any):默认值,仅支持基础类型 `float` `int` `string`
diff --git a/plugin_dev_zh/0411-model-designing-rules.zh.mdx b/plugin_dev_zh/0411-model-designing-rules.zh.mdx
index 4e7ab2b1..1fc9f8bd 100644
--- a/plugin_dev_zh/0411-model-designing-rules.zh.mdx
+++ b/plugin_dev_zh/0411-model-designing-rules.zh.mdx
@@ -130,16 +130,16 @@ description: 本文档详细定义了Dify模型插件开发的核心概念和结
可在 use\_template 中直接设置模板变量名,将会使用 entities.defaults.PARAMETER\_RULE\_TEMPLATE 中的默认配置不用设置除 `name` 和 `use_template` 之外的所有参数,若设置了额外的配置参数,将覆盖默认配置。可参考 `openai/llm/gpt-3.5-turbo.yaml`。
* `label` (object) \[optional] 标签,i18n
-* `zh_Hans`(string) \[optional] 中文标签名
-* `en_US` (string) 英文标签名
+ * `zh_Hans`(string) \[optional] 中文标签名
+ * `en_US` (string) 英文标签名
* `type`(string) \[optional] 参数类型
* `int` 整数
* `float` 浮点数
* `string` 字符串
* `boolean` 布尔型
-* `help` (string) \[optional] 帮助信息
-* `zh_Hans` (string) \[optional] 中文帮助信息
-* `en_US` (string) 英文帮助信息
+* `help` (object) \[optional] 帮助信息
+ * `zh_Hans` (string) \[optional] 中文帮助信息
+ * `en_US` (string) 英文帮助信息
* `required` (bool) 是否必填,默认 False。
* `default`(int/float/string/bool) \[optional] 默认值
* `min`(int/float) \[optional] 最小值,仅数字类型适用
diff --git a/plugin_dev_zh/0411-model-plugin-introduction.zh.mdx b/plugin_dev_zh/0411-model-plugin-introduction.zh.mdx
index 84c2cfd6..0e4d5bcb 100644
--- a/plugin_dev_zh/0411-model-plugin-introduction.zh.mdx
+++ b/plugin_dev_zh/0411-model-plugin-introduction.zh.mdx
@@ -8,6 +8,7 @@ standard_title: Model Plugin Introduction
language: zh
title: Model 插件
description: 介绍模型插件的基本概念和结构。模型插件让Dify能够调用不同供应商(如OpenAI、Anthropic、Google等)的各类模型,包括大语言模型(LLM)、文本嵌入、语音转文字等不同类型。
+todo: 考虑恢复被注释的'开始开发模型插件'章节,提供初学者友好的3步骤快速指引
---
Model 模型插件使 Dify 平台能够调用该模型供应商下的所有 LLM。例如,安装 OpenAI 模型插件后,Dify 平台即可调用 OpenAI 提供的 `GPT-4`、`GPT-4o-2024-05-13` 等模型。
@@ -73,6 +74,16 @@ Model 模型插件使 Dify 平台能够调用该模型供应商下的所有 LLM
模型插件通过配置文件定义模型的行为和属性。详细的模型设计规则和配置格式请参考[模型设计规则](/plugin_dev_zh/0411-model-designing-rules.zh)文档和[模型架构](/plugin_dev_zh/0412-model-schema.zh)规范。
+{/*
+### 开始开发模型插件
+
+请参考以下顺序阅读文档,了解如何开发一个模型插件。
+
+1. [创建模型供应商](/zh-hans/plugins/quick-start/develop-plugins/model-plugin/create-model-providers)
+2. 接入[预定义](/zh-hans/guides/model-configuration/predefined-model) / [自定义](/zh-hans/plugins/quick-start/develop-plugins/model-plugin/customizable-model)模型
+3. [调试插件](/zh-hans/plugins/quick-start/debug-plugin)
+*/}
+
## 进一步阅读
- [快速接入一个新模型](/plugin_dev_zh/0211-getting-started-new-model.zh) - 学习如何为已支持的供应商添加新模型
diff --git a/plugin_dev_zh/0411-persistent-storage-kv.zh.mdx b/plugin_dev_zh/0411-persistent-storage-kv.zh.mdx
index c3cb454d..15d7f9a7 100644
--- a/plugin_dev_zh/0411-persistent-storage-kv.zh.mdx
+++ b/plugin_dev_zh/0411-persistent-storage-kv.zh.mdx
@@ -12,7 +12,7 @@ description: 本文档介绍了Dify插件中的持久化存储功能,详细说
如果单独审视插件中的 Tool 及 Endpoint,不难发现大多数情况下其只能完成单轮交互,请求后返回数据,任务结束。
-如果有需要长期储存的数据,如实现持久化的记忆,需要插件具备持久化存储能力。**持久化储机制能够让插件具备在相同 Workspace 持久存储数据的能力**,目前通过提供 KV 数据库满足存储需求,未来可能会根据实际的使用情况推出更灵活更强大的储存接口。
+如果有需要长期储存的数据,如实现持久化的记忆,需要插件具备持久化存储能力。**持久化存储机制能够让插件具备在相同 Workspace 持久存储数据的能力**,目前通过提供 KV 数据库满足存储需求,未来可能会根据实际的使用情况推出更灵活更强大的储存接口。
### 储存 Key
diff --git a/plugin_dev_zh/0411-plugin-info-by-manifest.zh.mdx b/plugin_dev_zh/0411-plugin-info-by-manifest.zh.mdx
index df55bd97..c88c3dbe 100644
--- a/plugin_dev_zh/0411-plugin-info-by-manifest.zh.mdx
+++ b/plugin_dev_zh/0411-plugin-info-by-manifest.zh.mdx
@@ -14,6 +14,10 @@ Manifest 是一个符合 yaml 规范的文件,它定义了**插件**最基础
若该文件的格式错误,插件的解析和打包过程都将会失败。
+### 版本管理
+
+插件的版本由 `manifest` 文件中的 `version` 字段管理。版本号必须符合 `大版本.小版本.补丁版本` 格式,否则自动更新可能无法正常工作。
+
### 代码示例
下面是一个 Manifest 文件的简单示例,将在下文解释各个数据的含义和作用。
@@ -54,7 +58,7 @@ meta:
- "arm64"
runner:
language: "python"
- version: "3.10"
+ version: "3.11"
entrypoint: "main"
privacy: "./privacy.md"
```
diff --git a/plugin_dev_zh/0411-remote-debug-a-plugin.zh.mdx b/plugin_dev_zh/0411-remote-debug-a-plugin.zh.mdx
index 4027c8b6..abbfe8ca 100644
--- a/plugin_dev_zh/0411-remote-debug-a-plugin.zh.mdx
+++ b/plugin_dev_zh/0411-remote-debug-a-plugin.zh.mdx
@@ -10,11 +10,11 @@ title: 插件调试
description: 本文档介绍了如何使用Dify的远程调试功能来测试插件。详细说明了获取调试信息、配置环境变量文件、启动插件远程调试以及验证插件安装状态的完整流程。通过这种方式,开发者可以在本地开发的同时在Dify环境中实时测试插件。
---
-插件开发完成后,接下来需要测试插件是否可以正常运行。Dify 提供便捷地远程调试方式,帮助你快速在测试环境中验证插件功能。
+插件开发完成后,接下来需要测试插件是否可以正常运行。Dify 提供便捷的远程调试方式,帮助你快速在测试环境中验证插件功能。
前往[“插件管理”](https://cloud.dify.ai/plugins)页获取远程服务器地址和调试 Key。
-
+
回到插件项目,拷贝 `.env.example` 文件并重命名为 `.env`,将获取的远程服务器地址和调试 Key 等信息填入其中。
diff --git a/plugin_dev_zh/0412-model-schema.zh.mdx b/plugin_dev_zh/0412-model-schema.zh.mdx
index b2692684..d7ce6f71 100644
--- a/plugin_dev_zh/0412-model-schema.zh.mdx
+++ b/plugin_dev_zh/0412-model-schema.zh.mdx
@@ -116,7 +116,7 @@ def _invoke(self, model: str, credentials: dict,
:param prompt_messages: prompt messages
:param model_parameters: model parameters
:param tools: tools for tool calling
- :param stop: stop words
+ :param stop: stop sequences
:param stream: is stream response
:param user: unique user id
:return: full response or stream response chunk generator result
diff --git a/plugin_dev_zh/0432-develop-a-slack-bot-plugin.zh.mdx b/plugin_dev_zh/0432-develop-a-slack-bot-plugin.zh.mdx
index 1d81b822..4e6520f1 100644
--- a/plugin_dev_zh/0432-develop-a-slack-bot-plugin.zh.mdx
+++ b/plugin_dev_zh/0432-develop-a-slack-bot-plugin.zh.mdx
@@ -258,7 +258,7 @@ class SlackEndpoint(Endpoint):
```bash
INSTALL_METHOD=remote
-REMOTE_INSTALL_HOST=remote
+REMOTE_INSTALL_HOST=remote-url
REMOTE_INSTALL_PORT=5003
REMOTE_INSTALL_KEY=****-****-****-****-****
```
@@ -273,7 +273,7 @@ python -m main
在 Dify 的插件管理页中找到自动安装的测试插件,新建一个 Endpoint,填写名称、Bot token、选择需要连接的 app。
-
+
保存后将生成一个 POST 请求地址。
@@ -297,7 +297,7 @@ python -m main
代码使用了 `self.session.app.chat.invoke` 调用 Dify 平台内的 App,并传递了 `app_id` 和 `query` 等信息,最后将 response 的内容返回至 Slack Bot。运行 `python -m main` 命令重启插件进行调试,确认 Slack Bot 是否能够正确输出 Dify App 的答复消息。
-
+
### 4. 打包插件(可选)
diff --git a/plugin_dev_zh/9231-extension-plugin.zh.mdx b/plugin_dev_zh/9231-extension-plugin.zh.mdx
index e47d4ed0..bd055120 100644
--- a/plugin_dev_zh/9231-extension-plugin.zh.mdx
+++ b/plugin_dev_zh/9231-extension-plugin.zh.mdx
@@ -233,7 +233,7 @@ pip install dify-plugin
```bash
INSTALL_METHOD=remote
-REMOTE_INSTALL_HOST=remote
+REMOTE_INSTALL_HOST=remote-url
REMOTE_INSTALL_PORT=5003
REMOTE_INSTALL_KEY=****-****-****-****-****
```
@@ -251,8 +251,6 @@ REMOTE_INSTALL_KEY=****-****-****-****-****
确认插件能够正常运行后,可以通过以下命令行工具打包并命名插件。运行以后你可以在当前文件夹发现 `neko.difypkg` 文件,该文件为最终的插件包。
```bash
-# 将 ./neko 替换为插件项目的实际路径
-
dify plugin package ./neko
```
diff --git a/plugin_dev_zh/9232-agent.zh.mdx b/plugin_dev_zh/9232-agent.zh.mdx
index 82566f68..35b44ccc 100644
--- a/plugin_dev_zh/9232-agent.zh.mdx
+++ b/plugin_dev_zh/9232-agent.zh.mdx
@@ -107,7 +107,7 @@ extra:
source: strategies/function_calling.py
```
-代码格式类似 [`Tool` 标准格式](tool.md),定义了 `model` `tools` `query` `max_iterations` 等一共四个参数,以便于实现最基础的 Agent 策略。该代码的含义是可以允许用户选择模型和需要使用的工具,配置最大迭代次数并最终传入一个 query 后开始执行 Agent。
+代码格式类似 [`Tool` 标准格式](/plugin_dev_zh/0411-tool.zh),定义了 `model` `tools` `query` `max_iterations` 等一共四个参数,以便于实现最基础的 Agent 策略。该代码的含义是可以允许用户选择模型和需要使用的工具,配置最大迭代次数并最终传入一个 query 后开始执行 Agent。
#### 编写功能实现代码
diff --git a/plugin_dev_zh/9241-bundle.zh.mdx b/plugin_dev_zh/9241-bundle.zh.mdx
index db6d6ca0..0a3d3326 100644
--- a/plugin_dev_zh/9241-bundle.zh.mdx
+++ b/plugin_dev_zh/9241-bundle.zh.mdx
@@ -23,7 +23,7 @@ Bundle 插件包是多个插件的集合。它可以将多个插件打包在一
* Dify 插件脚手架工具
* Python 环境,版本号 ≥ 3.10
-关于如何准备插件开发的脚手架工具,详细说明请参考[初始化开发工具](initialize-development-tools.md)。
+关于如何准备插件开发的脚手架工具,详细说明请参考[初始化开发工具](initialize-development-tools.zh.mdx)。
### 创建 Bundle 项目
diff --git a/plugin_dev_zh/9242-reverse-invocation-app.zh.mdx b/plugin_dev_zh/9242-reverse-invocation-app.zh.mdx
index a06e9f0a..62355946 100644
--- a/plugin_dev_zh/9242-reverse-invocation-app.zh.mdx
+++ b/plugin_dev_zh/9242-reverse-invocation-app.zh.mdx
@@ -62,8 +62,12 @@ class Duck(Endpoint):
app_id = values["app_id"]
def generator():
- response = self.session.app.workflow.invoke(
- app_id=app_id, inputs={}, response_mode="streaming", files=[]
+ response = self.session.app.chat.invoke(
+ app_id=app_id,
+ inputs={},
+ response_mode="streaming",
+ conversation_id="", # 可选,留空则创建新对话
+ files=[]
)
for data in response:
diff --git a/plugin_dev_zh/9242-reverse-invocation-tool.zh.mdx b/plugin_dev_zh/9242-reverse-invocation-tool.zh.mdx
index cae86661..a5981e84 100644
--- a/plugin_dev_zh/9242-reverse-invocation-tool.zh.mdx
+++ b/plugin_dev_zh/9242-reverse-invocation-tool.zh.mdx
@@ -90,7 +90,7 @@ description: 本文档详细介绍了插件如何反向调用Dify平台中的工
- [反向调用 App](/plugin_dev_zh/9242-reverse-invocation-app.zh) - 了解如何调用平台内的 App
- [反向调用 Model](/plugin_dev_zh/9242-reverse-invocation-model.zh) - 了解如何调用平台内的模型能力
- [工具插件开发指南](/plugin_dev_zh/0211-getting-started-dify-tool.zh) - 学习如何开发工具插件
-- [高级工具插件](/plugin_dev_zh/9223-tool.zh) - 了解 Workflow as Tool 等高级功能\
+- [高级工具插件](/plugin_dev_zh/9223-tool.zh) - 了解 Workflow as Tool 等高级功能
{/*
Contributing Section
diff --git a/plugin_dev_zh/9243-customizable-model.zh.mdx b/plugin_dev_zh/9243-customizable-model.zh.mdx
index b09c2bd8..c3e2c7f7 100644
--- a/plugin_dev_zh/9243-customizable-model.zh.mdx
+++ b/plugin_dev_zh/9243-customizable-model.zh.mdx
@@ -43,7 +43,7 @@ description: 本文档详细介绍了如何在Dify中接入自定义模型,以
示例代码:
-```yaml
+```yaml {14-17}
provider: xinference # 确定供应商标识
label: # 供应商展示名称,可设置 en_US 英文、zh_Hans 中文两种语言,zh_Hans 不设置将默认使用 en_US。
en_US: Xorbits Inference
@@ -69,7 +69,7 @@ provider_credential_schema:
接着需要定义 `provider_credential_schema` 字段。`Xinference 支持` text-generation,embeddings 和 reranking 模型,示例代码如下:
-```yaml
+```yaml {10,14,17}
provider_credential_schema:
credential_form_schemas:
- variable: model_type
@@ -107,7 +107,7 @@ Xinference 中的每个模型都需要定义名称 `model_name`。
Xinference 模型需要使用者输入模型的本地部署地址,插件内需要提供允许填写 Xinference 模型的本地部署地址(server\_url)和模型 UID 的位置,示例代码如下:
-```yaml
+```yaml {1,10}
- variable: server_url
label:
zh_Hans: 服务器 URL
diff --git a/plugin_dev_zh/9243-reverse-invocation-node.zh.mdx b/plugin_dev_zh/9243-reverse-invocation-node.zh.mdx
index 8a9b7973..fe201c5f 100644
--- a/plugin_dev_zh/9243-reverse-invocation-node.zh.mdx
+++ b/plugin_dev_zh/9243-reverse-invocation-node.zh.mdx
@@ -35,7 +35,7 @@ description: 本文档介绍了插件如何反向调用Dify平台中的Chatflow/
pass
```
-其中 `parameters` 是需要提取出的参数的列表,`model` 符合 `LLMModelConfig` 规范,`query` 为提取参数的源文本,`instruction` 为一些可能额外需要给到 LLM 的指令,`NodeResponse` 的结构请参考该[文档](../general-specifications.md#noderesponse)。
+其中 `parameters` 是需要提取出的参数的列表,`model` 符合 `LLMModelConfig` 规范,`query` 为提取参数的源文本,`instruction` 为一些可能额外需要给到 LLM 的指令,`NodeResponse` 的结构请参考该[文档](../general-specifications#noderesponse)。
#### **用例**
@@ -93,7 +93,7 @@ class ParameterExtractorTool(Tool):
pass
```
-该接口参数与 `ParameterExtractor` 一致,最终的返回结果储存在 `NodeResponse.outputs['class_name']` 中。\
+该接口参数与 `ParameterExtractor` 一致,最终的返回结果储存在 `NodeResponse.outputs['class_name']` 中。
{/*
Contributing Section
diff --git a/plugin_dev_zh/9433-agent-strategy-plugin.zh.mdx b/plugin_dev_zh/9433-agent-strategy-plugin.zh.mdx
index c6d15d19..1107c263 100644
--- a/plugin_dev_zh/9433-agent-strategy-plugin.zh.mdx
+++ b/plugin_dev_zh/9433-agent-strategy-plugin.zh.mdx
@@ -21,13 +21,13 @@ Agent 策略插件能够帮助 LLM 执行推理或决策逻辑,包括工具选
关于如何准备插件开发的脚手架工具,详细说明请参考[初始化开发工具](/plugin_dev_zh/0221-initialize-development-tools.zh)。
-**Tips**:在终端运行 `dify version` 命令,检查是否出现版本号以确认成功安装脚手架工具。
+**Tips**:在终端运行 `dify version` 命令,检查是否出现版本号以确认成功安装脚手架工具。
### 1. 初始化插件模板
运行以下命令,初始化 Agent 插件开发模板。
-```
+```bash
dify plugin init
```
@@ -72,7 +72,7 @@ Models:
初始化插件模板后将生成一个代码文件夹,包含插件开发过程中所需的完整资源。熟悉 Agent 策略插件的整体代码结构有助于插件的开发过程。
-```
+```text
├── GUIDE.md # User guide and documentation
├── PRIVACY.md # Privacy policy and data handling guidelines
├── README.md # Project overview and setup instructions
@@ -103,13 +103,13 @@ Agent 策略插件的开发主要围绕以下两个文件展开:
建议优先配置以下四个基础参数:
-1\. **model**:指定要调用的大语言模型(LLM),如 GPT-4、GPT-4o-mini 等。
+1. **model**:指定要调用的大语言模型(LLM),如 GPT-4、GPT-4o-mini 等。
-2\. **tools**:定义插件可以使用的工具列表,增强插件功能。
+2. **tools**:定义插件可以使用的工具列表,增强插件功能。
-3\. **query**:设置与模型交互的提示词或输入内容。
+3. **query**:设置与模型交互的提示词或输入内容。
-4\. **maximum\_iterations**:限制插件执行的最大迭代次数,避免过度计算。
+4. **maximum_iterations**:限制插件执行的最大迭代次数,避免过度计算。
示例代码:
@@ -191,7 +191,7 @@ class BasicAgentAgentStrategy(AgentStrategy):
params = BasicParams(**parameters)
```
-#### 3. 调用模型
+#### 2.3 调用模型
在 Agent 策略插件中,**调用模型**是核心执行逻辑之一。可以通过 SDK 提供的 `session.model.llm.invoke()` 方法高效地调用 LLM 模型,实现文本生成、对话处理等功能。
@@ -224,7 +224,91 @@ def invoke(

-#### 4. 调用工具
+#### 2.4 为模型添加记忆
+
+当使用 Agent 插件调用模型时,为模型添加记忆功能能够极大提升对话体验。通过记忆功能,模型可以理解完整的对话上下文,实现连贯的交互体验和精准的工具调用。
+
+具体实现步骤:
+
+1. 配置记忆功能
+
+在 Agent 插件的 YAML 配置文件 `strategies/agent.yaml` 中添加 `history-messages` 特性:
+
+```yaml
+identity:
+ name: basic_agent # Agent策略名称
+ author: novice # 作者
+ label:
+ en_US: BasicAgent # 英文标签
+description:
+ en_US: BasicAgent # 英文描述
+features:
+ - history-messages # 启用历史消息功能
+...
+```
+
+2. 启用记忆设置
+
+修改插件配置文件并重启后,你将在节点配置界面中看到 **记忆** 开关。点击右侧的开关按钮,启用记忆功能。
+
+启用后,您可以通过 **窗口大小** 滑块调整记忆窗口,它决定了模型能够“记住”多少之前的对话内容。
+
+3. 调试历史消息
+
+添加以下代码,查看历史消息内容:
+
+```python
+class BasicAgentAgentStrategy(AgentStrategy):
+ def _invoke(self, parameters: dict[str, Any]) -> Generator[AgentInvokeMessage]:
+ params = BasicParams(**parameters)
+ print(f"history_messages: {params.model.history_prompt_messages}")
+ ...
+```
+
+
+
+控制台将显示类似如下输出:
+
+```
+history_messages: []
+history_messages: [UserPromptMessage(role=, content='hello, my name is novice', name=None), AssistantPromptMessage(role=, content='Hello, Novice! How can I assist you today?', name=None, tool_calls=[])]
+```
+
+4. 将历史消息集成到模型调用
+
+最后,修改模型调用代码,将历史消息拼接到当前查询:
+
+```python
+class BasicAgentAgentStrategy(AgentStrategy):
+ def _invoke(self, parameters: dict[str, Any]) -> Generator[AgentInvokeMessage]:
+ params = BasicParams(**parameters)
+
+ chunks: Generator[LLMResultChunk, None, None] | LLMResult = (
+ self.session.model.llm.invoke(
+ model_config=LLMModelConfig(**params.model.model_dump(mode="json")),
+ # 添加历史消息
+ prompt_messages=params.model.history_prompt_messages
+ + [UserPromptMessage(content=params.query)],
+ tools=[
+ self._convert_tool_to_prompt_message_tool(tool)
+ for tool in params.tools
+ ],
+ stop=params.model.completion_params.get("stop", [])
+ if params.model.completion_params
+ else [],
+ stream=True,
+ )
+ )
+ ...
+```
+
+5. 效果验证
+
+添加加记忆功能后,模型能够基于历史对话进行回复。在下图示例中,模型成功地记住了之前对话中提及的用户名称,实现了对话的连贯性。
+
+
+
+#### 2.5 调用工具
填写工具参数后,需赋予 Agent 策略插件实际调用工具的能力。可以通过 SDK 中的`session.tool.invoke()` 函数进行工具调用。
@@ -268,7 +352,7 @@ for tool_call_id, tool_call_name, tool_call_args in tool_calls:

-#### 5. 日志创建
+#### 2.6 日志创建
在 **Agent 策略插件**中,通常需要执行多轮操作才能完成复杂任务。记录每轮操作的执行结果对于开发者来说非常重要,有助于追踪 Agent 的执行过程、分析每一步的决策依据,从而更好地评估和优化策略效果。
@@ -331,9 +415,10 @@ model_log = self.create_log_message(
yield model_log
```
-#### 插件功能示例代码
-
+### 插件功能示例代码
+
+
#### 调用模型
以下代码将演示如何赋予 Agent 策略插件调用模型的能力:
@@ -558,8 +643,9 @@ class BasicAgentAgentStrategy(AgentStrategy):
return tool_calls
```
+
-
+
#### 调用工具
以下代码展示了如何为 Agent 策略插件实现模型调用并向工具发送规范化请求。
@@ -784,8 +870,9 @@ class BasicAgentAgentStrategy(AgentStrategy):
return tool_calls
```
+
-
+
#### 完整功能代码示例
包含**调用模型、调用工具**以及**输出多轮日志功能**的完整插件代码示例:
@@ -1041,14 +1128,14 @@ class BasicAgentAgentStrategy(AgentStrategy):
return tool_calls
```
-
-
+
+
### 3. 调试插件
-配置插件的声明文件与功能代码后,在插件的目录内运行 `python -m main` 命令重启插件。接下来需测试插件是否可以正常运行。Dify 提供远程调试方式,前往[“插件管理”](https://console-plugin.dify.dev/plugins)获取调试 Key 和远程服务器地址。
+配置插件的声明文件与功能代码后,在插件的目录内运行 `python -m main` 命令重启插件。接下来需测试插件是否可以正常运行。Dify 提供远程调试方式,前往[“插件管理”](https://cloud.dify.ai/plugins)获取调试 Key 和远程服务器地址。
-
+
回到插件项目,拷贝 `.env.example` 文件并重命名为 `.env`,将获取的远程服务器地址和调试 Key 等信息填入至 `REMOTE_INSTALL_HOST` 与 `REMOTE_INSTALL_KEY` 参数内。