diff --git a/zh_CN/.gitbook/assets/Weather_search_tool (1).jpeg b/zh_CN/.gitbook/assets/Weather_search_tool (1).jpeg new file mode 100644 index 0000000..dea5d9a Binary files /dev/null and b/zh_CN/.gitbook/assets/Weather_search_tool (1).jpeg differ diff --git a/zh_CN/.gitbook/assets/Weather_search_tool (2).jpeg b/zh_CN/.gitbook/assets/Weather_search_tool (2).jpeg new file mode 100644 index 0000000..dea5d9a Binary files /dev/null and b/zh_CN/.gitbook/assets/Weather_search_tool (2).jpeg differ diff --git a/zh_CN/.gitbook/assets/Weather_search_tool (3).jpeg b/zh_CN/.gitbook/assets/Weather_search_tool (3).jpeg new file mode 100644 index 0000000..dea5d9a Binary files /dev/null and b/zh_CN/.gitbook/assets/Weather_search_tool (3).jpeg differ diff --git a/zh_CN/.gitbook/assets/Weather_search_tool.jpeg b/zh_CN/.gitbook/assets/Weather_search_tool.jpeg new file mode 100644 index 0000000..dea5d9a Binary files /dev/null and b/zh_CN/.gitbook/assets/Weather_search_tool.jpeg differ diff --git a/zh_CN/.gitbook/assets/api_based (1).png b/zh_CN/.gitbook/assets/api_based (1).png new file mode 100644 index 0000000..18f2357 Binary files /dev/null and b/zh_CN/.gitbook/assets/api_based (1).png differ diff --git a/zh_CN/.gitbook/assets/api_based.png b/zh_CN/.gitbook/assets/api_based.png new file mode 100644 index 0000000..18f2357 Binary files /dev/null and b/zh_CN/.gitbook/assets/api_based.png differ diff --git a/zh_CN/.gitbook/assets/api_based_extension1.png b/zh_CN/.gitbook/assets/api_based_extension1.png new file mode 100644 index 0000000..62eb076 Binary files /dev/null and b/zh_CN/.gitbook/assets/api_based_extension1.png differ diff --git a/zh_CN/.gitbook/assets/log.jpeg b/zh_CN/.gitbook/assets/log.jpeg new file mode 100644 index 0000000..290c6c0 Binary files /dev/null and b/zh_CN/.gitbook/assets/log.jpeg differ diff --git a/zh_CN/.gitbook/assets/moderation1.png b/zh_CN/.gitbook/assets/moderation1.png new file mode 100644 index 0000000..116b610 Binary files /dev/null and b/zh_CN/.gitbook/assets/moderation1.png differ diff --git a/zh_CN/.gitbook/assets/moderation2.png b/zh_CN/.gitbook/assets/moderation2.png new file mode 100644 index 0000000..26819fd Binary files /dev/null and b/zh_CN/.gitbook/assets/moderation2.png differ diff --git a/zh_CN/.gitbook/assets/moderation3.png b/zh_CN/.gitbook/assets/moderation3.png new file mode 100644 index 0000000..82092ad Binary files /dev/null and b/zh_CN/.gitbook/assets/moderation3.png differ diff --git a/zh_CN/.gitbook/assets/moderation4.png b/zh_CN/.gitbook/assets/moderation4.png new file mode 100644 index 0000000..5c997a6 Binary files /dev/null and b/zh_CN/.gitbook/assets/moderation4.png differ diff --git a/zh_CN/.gitbook/assets/weather inquiry.png b/zh_CN/.gitbook/assets/weather inquiry.png new file mode 100644 index 0000000..6852b6b Binary files /dev/null and b/zh_CN/.gitbook/assets/weather inquiry.png differ diff --git a/zh_CN/SUMMARY.md b/zh_CN/SUMMARY.md index 66d62f0..42c061d 100644 --- a/zh_CN/SUMMARY.md +++ b/zh_CN/SUMMARY.md @@ -22,6 +22,8 @@ * [设计提示词&编排应用](application/prompt-engineering/README.md) * [文本生成型应用](application/prompt-engineering/text-generation-application.md) * [对话型应用](application/prompt-engineering/conversation-application.md) + * [外部数据工具](application/prompt-engineering/wai-bu-shu-ju-gong-ju.md) + * [敏感内容审查](application/prompt-engineering/min-gan-nei-rong-shen-cha.md) * [基于 APIs 开发](application/developing-with-apis.md) * [日志与标注](application/logs.md) @@ -52,9 +54,11 @@ * [接入 OpenLLM 部署的本地模型](advanced/model-configuration/openllm.md) * [接入 LocalAI 部署的本地模型](advanced/model-configuration/localai.md) * [更多集成](advanced/more-integration.md) -* [API-based 扩展](advanced/api\_based\_extension/README.md) - * [外部数据工具](advanced/api\_based\_extension/wai-bu-shu-ju-gong-ju.md) - * [敏感内容审查](advanced/api\_based\_extension/min-gan-nei-rong-shen-cha.md) +* [扩展](advanced/kuo-zhan/README.md) + * [API-based 扩展](advanced/kuo-zhan/api\_based\_extension/README.md) + * [外部数据工具扩展](advanced/kuo-zhan/api\_based\_extension/external\_data\_tool.md) + * [敏感内容审查扩展](advanced/kuo-zhan/api\_based\_extension/moderation.md) + * [Code-based 扩展](advanced/kuo-zhan/codebased-kuo-zhan.md) ## 使用案例 diff --git a/zh_CN/advanced/api_based_extension/wai-bu-shu-ju-gong-ju.md b/zh_CN/advanced/api_based_extension/wai-bu-shu-ju-gong-ju.md deleted file mode 100644 index 4613342..0000000 --- a/zh_CN/advanced/api_based_extension/wai-bu-shu-ju-gong-ju.md +++ /dev/null @@ -1,89 +0,0 @@ -# 外部数据工具 - -## 功能介绍 - -此前,为了应对大多数语言模型使用过时训练数据,且对文本长度有限制,无法利用用户最新的私有上下文进行对话等问题,Dify 通过数据集功能实现了简易的数据集管理和集成,参见 👉 [datasets](../datasets/ "mention")。开发者可以直接上传各类格式的长文本、结构化数据来构建数据集,同时支持从外部数据源同步数据至数据集,比如 [sync-from-notion.md](../datasets/sync-from-notion.md "mention")。Dify 会自动将数据集内容集成到 AI 应用中,使其基于用户的私有、最新上下文进行对话。这种数据集管理集成方式,解决了语言模型使用限制的同时,也降低了开发者获取高质量对话上下文的门槛。 - -然而企业在开发 AI 应用如企业知识库 ChatBot 的时候,会面临以下 4 个方面的难题: - -1. 数据安全 - -很多企业拥有自己的知识库或私有数据集,通常以数据库方式存储,其中可能包含隐私或敏感信息,不能直接上传到第三方平台。 - -2. 自定义能力 - -虽然此前 Dify 提供了统一管理数据集的平台以便于维护,但是企业可能根据自己的业务需要寻求更加定制化的需求。 - -3. 实时调用 - -上传离线数据,无法做到实时同步企业日益更新的知识库,频繁的手动上传无法跟上大批量内容更迭的脚步,在维护方面需要更宽泛的灵活性。 - -4. 保护核心竞争力 - -业务能力往往是企业的核心竞争力,无论是独特的产品或服务,还是创新的商业模式,都是企业珍贵的资产,企业往往不想直接暴露给第三方。 - - - -所以,我们开发了外部数据工具(External\_Data\_Tool),借助该功能,你可以通过企业自己的 API 来扩展 Dify 的查询模块能力,而无需将数据集上传到 Dify,同时解决了以上的 4 个难题。 - -## 具体实现 - -当终端用户向对话系统提出请求时,平台后端会触发外部数据工具(即调用自己的 API),它会查询用户问题相关的外部信息,如员工资料、实时记录等,并返回与当前请求相关的部分。平台后端会将返回的结果组装成文本作为上下文注入到 Prompt 中,以输出更加个性化和符合用户需求的回复内容。这样的设计避免了语言模型只依赖单次请求中的有限信息进行推理,让其可以基于更丰富的用户背景积累进行对话,从而产生更智能、贴近人的交互体验。 - -### 扩展点 - -`app.external_data_tool.query` 应用外部数据工具查询扩展点。 - -该扩展点将终端用户传入的应用变量内容和对话输入内容(对话型应用固定参数)作为参数,传给 API。 - -开发者需要实现对应工具的查询逻辑,并返回字符串类型的查询结果。 - -#### Request Body - -``` -{ - "point": "app.external_data_tool.query", // 扩展点类型,此处固定为 app.external_data_tool.query - "params": { - "app_id": string, // 应用 ID - "tool_variable": string, // 外部数据工具变量名称,表示对应变量工具调用来源 - "inputs": { // 终端用户传入变量值,key 为变量名,value 为变量值 - "var_1": "value_1", - "var_2": "value_2", - ... - }, - "query": string | null // 终端用户当前对话输入内容,对话型应用固定参数。 - } -} -``` - -* Example - * ``` - { - "point": "app.external_data_tool.query", - "params": { - "app_id": "61248ab4-1125-45be-ae32-0ce91334d021", - "tool_variable": "weather_retrieve", - "inputs": { - "location": "London" - }, - "query": "How's the weather today?" - } - } - ``` - -#### API 返回 - -``` -{ - "result": string -} -``` - -* Example - * ``` - { - "result": "City: London\nTemperature: 10°C\nRealFeel®: 8°C\nAir Quality: Poor\nWind Direction: ENE\nWind Speed: 8 km/h\nWind Gusts: 14 km/h\nPrecipitation: Light rain" - } - ``` - -\ diff --git a/zh_CN/advanced/kuo-zhan/README.md b/zh_CN/advanced/kuo-zhan/README.md new file mode 100644 index 0000000..f9775c1 --- /dev/null +++ b/zh_CN/advanced/kuo-zhan/README.md @@ -0,0 +1,2 @@ +# 扩展 + diff --git a/zh_CN/advanced/api_based_extension/README.md b/zh_CN/advanced/kuo-zhan/api_based_extension/README.md similarity index 97% rename from zh_CN/advanced/api_based_extension/README.md rename to zh_CN/advanced/kuo-zhan/api_based_extension/README.md index 45e0278..a3e0f2e 100644 --- a/zh_CN/advanced/api_based_extension/README.md +++ b/zh_CN/advanced/kuo-zhan/api_based_extension/README.md @@ -9,7 +9,7 @@ 除了需要开发对应的模块能力,还需要遵照以下规范,以便 Dify 正确调用 API。 -

基于 API 扩展

+

基于 API 扩展

### [API 规范](https://github.com/langgenius/dify-docs/diffs/2?branch=main\&name=main\&qualified\_name=refs%2Fheads%2Fmain\&sha1=fb07d2bea301bd6388c393d5f3d8a80386c4dfdb\&sha2=a72d056812efe42f153d649085811e5b49ee131e\&short\_path=e2d7adb\&unchanged=expanded\&w=false#api-%E8%A7%84%E8%8C%83) @@ -195,11 +195,11 @@ Authorization: Bearer 123456 ``` 4. 在 Dify 配置该 API。 -[![](https://github.com/langgenius/dify-docs/raw/main/zh\_CN/.gitbook/assets/api\_based\_01.png)](../../.gitbook/assets/api\_based\_01.png) +[![](https://github.com/langgenius/dify-docs/raw/main/zh\_CN/.gitbook/assets/api\_based\_01.png)](../../../.gitbook/assets/api\_based\_01.png) 5. 在 App 中选择该 API 扩展。 -[![](https://github.com/langgenius/dify-docs/raw/main/zh\_CN/.gitbook/assets/api\_based\_02.png)](../../.gitbook/assets/api\_based\_02.png) +[![](https://github.com/langgenius/dify-docs/raw/main/zh\_CN/.gitbook/assets/api\_based\_02.png)](../../../.gitbook/assets/api\_based\_02.png) App 调试时,Dify 将请求配置的 API,并发送以下内容(范例): diff --git a/zh_CN/advanced/kuo-zhan/api_based_extension/external_data_tool.md b/zh_CN/advanced/kuo-zhan/api_based_extension/external_data_tool.md new file mode 100644 index 0000000..3437376 --- /dev/null +++ b/zh_CN/advanced/kuo-zhan/api_based_extension/external_data_tool.md @@ -0,0 +1,65 @@ +# 外部数据工具扩展 + +在创建 AI 应用时,开发者可以通过 API 扩展的方式实现使用外部工具获取额外数据组装至 Prompt 中作为 LLM 额外信息。具体的实操过程可以参考 [wai-bu-shu-ju-gong-ju.md](../../../application/prompt-engineering/wai-bu-shu-ju-gong-ju.md "mention")。 + +### 前置条件 + +请先阅读 [.](./ "mention") 完成 API 服务基础能力的开发和接入。 + +### 扩展点 + +`app.external_data_tool.query` 应用外部数据工具查询扩展点。 + +该扩展点将终端用户传入的应用变量内容和对话输入内容(对话型应用固定参数)作为参数,传给 API。 + +开发者需要实现对应工具的查询逻辑,并返回字符串类型的查询结果。 + +#### Request Body + +``` +{ + "point": "app.external_data_tool.query", // 扩展点类型,此处固定为 app.external_data_tool.query + "params": { + "app_id": string, // 应用 ID + "tool_variable": string, // 外部数据工具变量名称,表示对应变量工具调用来源 + "inputs": { // 终端用户传入变量值,key 为变量名,value 为变量值 + "var_1": "value_1", + "var_2": "value_2", + ... + }, + "query": string | null // 终端用户当前对话输入内容,对话型应用固定参数。 + } +} +``` + +* Example + * ``` + { + "point": "app.external_data_tool.query", + "params": { + "app_id": "61248ab4-1125-45be-ae32-0ce91334d021", + "tool_variable": "weather_retrieve", + "inputs": { + "location": "London" + }, + "query": "How's the weather today?" + } + } + ``` + +#### API 返回 + +``` +{ + "result": string +} +``` + +* Example + * ``` + { + "result": "City: London\nTemperature: 10°C\nRealFeel®: 8°C\nAir Quality: Poor\nWind Direction: ENE\nWind Speed: 8 km/h\nWind Gusts: 14 km/h\nPrecipitation: Light rain" + } + ``` + +\ diff --git a/zh_CN/advanced/api_based_extension/min-gan-nei-rong-shen-cha.md b/zh_CN/advanced/kuo-zhan/api_based_extension/moderation.md similarity index 100% rename from zh_CN/advanced/api_based_extension/min-gan-nei-rong-shen-cha.md rename to zh_CN/advanced/kuo-zhan/api_based_extension/moderation.md diff --git a/zh_CN/advanced/kuo-zhan/codebased-kuo-zhan.md b/zh_CN/advanced/kuo-zhan/codebased-kuo-zhan.md new file mode 100644 index 0000000..4b0f628 --- /dev/null +++ b/zh_CN/advanced/kuo-zhan/codebased-kuo-zhan.md @@ -0,0 +1,2 @@ +# Code-based 扩展 + diff --git a/zh_CN/application/prompt-engineering/min-gan-nei-rong-shen-cha.md b/zh_CN/application/prompt-engineering/min-gan-nei-rong-shen-cha.md new file mode 100644 index 0000000..b52da3b --- /dev/null +++ b/zh_CN/application/prompt-engineering/min-gan-nei-rong-shen-cha.md @@ -0,0 +1,23 @@ +# 敏感内容审查 + +我们在与 AI 应用交互的过程中,往往在内容安全性,用户体验,法律法规等方面有较为苛刻的要求,此时我们需要“敏感词审查”功能,来为终端用户创造一个更好的交互环境。 在提示词编排页面,点击“添加功能”,找到底部的工具箱“内容审核”: + +

Content moderation

+ +### 功能一:调用 OpenAI Moderation API + +OpenAI 和大多数 LLM 公司提供的模型,都带有内容审查功能,确保不会输出包含有争议的内容,比如暴力,性和非法行为,并且 OpenAI 还开放了这种内容审查能力,具体可以参考 [platform.openai.com](https://platform.openai.com/docs/guides/moderation/overview) 。现在你也可以直接在 Dify 上调用 OpenAI Moderation API,你可以审核输入内容或输出内容,只要输入对应的“预设回复”即可。 + +

OpenAI Moderation API

+ +### 功能二:自定义关键词 + +开发者可以自定义需要审查的敏感词,比如把“kill”作为关键词,在用户输入的时候作审核动作,要求预设回复内容为“The content is violating usage policies.”可以预见的结果是当用户在终端输入包含“kill”的语料片段,就会触发敏感词审查工具,返回预设回复内容。 + +

Keywords

+ +### 功能三: 敏感词审查 Moderation 扩展 + +不同的企业内部往往有着不同的敏感词审查机制,企业在开发自己的 AI 应用如企业内部知识库 ChatBot,需要对员工输入的查询内容作敏感词审查。为此,开发者可以根据自己企业内部的敏感词审查机制写一个 API 扩展,具体可参考 [moderation.md](../../advanced/kuo-zhan/api\_based\_extension/moderation.md "mention"),从而在 Dify 上调用,实现敏感词审查的高度自定义和隐私保护。 + +

Moderation 扩展

diff --git a/zh_CN/application/prompt-engineering/wai-bu-shu-ju-gong-ju.md b/zh_CN/application/prompt-engineering/wai-bu-shu-ju-gong-ju.md new file mode 100644 index 0000000..4a19809 --- /dev/null +++ b/zh_CN/application/prompt-engineering/wai-bu-shu-ju-gong-ju.md @@ -0,0 +1,35 @@ +# 外部数据工具 + +## 功能介绍 + +此前 [datasets](../../advanced/datasets/ "mention") 功能允许开发者可以直接上传各类格式的长文本、结构化数据来构建数据集,使 AI 应用基于用户上传的最新上下文进行对话。 + +而本次更新的**外部数据工具**赋能开发者可以使用自有的搜索能力或内部知识库等外部数据作为 LLM 的上下文,通过 API 扩展的方式实现外部数据的获取并嵌入 Prompt。相比在云端上传数据集,使用**外部数据工具**可以在保障私有数据安全,自定义搜索,获取实时数据等方面有显著优势。 + +## 具体实现 + +当终端用户向对话系统提出请求时,平台后端会触发外部数据工具(即调用自己的 API),它会查询用户问题相关的外部信息,如员工资料、实时记录等,通过 API 返回与当前请求相关的部分。平台后端会将返回的结果组装成文本作为上下文注入到 Prompt 中,以输出更加个性化和符合用户需求的回复内容。 + +## 操作说明 + +1. 在使用外部数据工具之前,你需要准备一个 API 和用于鉴权的 API Key,请阅读[external\_data\_tool.md](../../advanced/kuo-zhan/api\_based\_extension/external\_data\_tool.md "mention") +2. Dify 提供了集中式的 API 管理,在设置界面统一添加 API 扩展配置后,即可在 Dify 上的各类应用中直接使用。 + +

API-based Extension

+ +3. 我们以“查询天气”为例,在“新增基于 API 的扩展”对话框输入名字,API 端点,API Key。保存后我们就可以调用 API 了。 + +

Weather Inquiry

+ +4. 在提示词编排页面,点击“工具”右侧的“+添加”按钮,在打开的“添加 工具”对话框,填写名称和变量名称(变量名称会被引用到 Prompt 中,请填写英文),以及选择第 2 步中已经添加的基于 API 的扩展。 + +

External_data_tool

+ +5. 这样,我们在提示词编排框就可以把查询到的外部数据拼装到 Prompt 中。比如我们要查询今天的伦敦天气,可以添加`location` 变量,输入"London",结合外部数据工具的扩展变量名称`weather_data`,调试输出如下: + +

Weather_search_tool

+ +在对话日志中,我们也可以看到 API 返回的实时数据: + +

Prompt Log

+