GITBOOK-19: zorroj's Nov 6 changes

pull/24/head
zorroj 2023-11-07 06:03:17 +00:00 committed by gitbook-bot
parent ba8955a4c8
commit e9a78db706
No known key found for this signature in database
GPG Key ID: 07D2180C7B12D0FF
22 changed files with 137 additions and 95 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 475 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 475 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 475 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 475 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 229 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 229 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 295 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 99 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 321 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 254 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 258 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 320 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 229 KiB

View File

@ -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)
## 使用案例 <a href="#use-cases" id="use-cases"></a>

View File

@ -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 <a href="#user-content-request-body" id="user-content-request-body"></a>
```
{
"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 返回 <a href="#usercontentapi-fan-hui" id="usercontentapi-fan-hui"></a>
```
{
"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"
}
```
\

View File

@ -0,0 +1,2 @@
# 扩展

View File

@ -9,7 +9,7 @@
除了需要开发对应的模块能力,还需要遵照以下规范,以便 Dify 正确调用 API。
<figure><img src="../../.gitbook/assets/api_based_01.png" alt=""><figcaption><p>基于 API 扩展</p></figcaption></figure>
<figure><img src="../../../.gitbook/assets/api_based_01.png" alt=""><figcaption><p>基于 API 扩展</p></figcaption></figure>
### [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) <a href="#usercontentapi-gui-fan" id="usercontentapi-gui-fan"></a>
@ -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并发送以下内容范例

View File

@ -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 <a href="#user-content-request-body" id="user-content-request-body"></a>
```
{
"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 返回 <a href="#usercontentapi-fan-hui" id="usercontentapi-fan-hui"></a>
```
{
"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"
}
```
\

View File

@ -0,0 +1,2 @@
# Code-based 扩展

View File

@ -0,0 +1,23 @@
# 敏感内容审查
我们在与 AI 应用交互的过程中,往往在内容安全性,用户体验,法律法规等方面有较为苛刻的要求,此时我们需要“敏感词审查”功能,来为终端用户创造一个更好的交互环境。 在提示词编排页面,点击“添加功能”,找到底部的工具箱“内容审核”:
<figure><img src="../../.gitbook/assets/moderation1.png" alt=""><figcaption><p>Content moderation</p></figcaption></figure>
### 功能一:调用 OpenAI Moderation API
OpenAI 和大多数 LLM 公司提供的模型,都带有内容审查功能,确保不会输出包含有争议的内容,比如暴力,性和非法行为,并且 OpenAI 还开放了这种内容审查能力,具体可以参考 [platform.openai.com](https://platform.openai.com/docs/guides/moderation/overview) 。现在你也可以直接在 Dify 上调用 OpenAI Moderation API你可以审核输入内容或输出内容只要输入对应的“预设回复”即可。
<figure><img src="../../.gitbook/assets/moderation2.png" alt=""><figcaption><p>OpenAI Moderation API</p></figcaption></figure>
### 功能二:自定义关键词
开发者可以自定义需要审查的敏感词比如把“kill”作为关键词在用户输入的时候作审核动作要求预设回复内容为“The content is violating usage policies.”可以预见的结果是当用户在终端输入包含“kill”的语料片段就会触发敏感词审查工具返回预设回复内容。
<figure><img src="../../.gitbook/assets/moderation3.png" alt=""><figcaption><p>Keywords</p></figcaption></figure>
### 功能三: 敏感词审查 Moderation 扩展
不同的企业内部往往有着不同的敏感词审查机制,企业在开发自己的 AI 应用如企业内部知识库 ChatBot需要对员工输入的查询内容作敏感词审查。为此开发者可以根据自己企业内部的敏感词审查机制写一个 API 扩展,具体可参考 [moderation.md](../../advanced/kuo-zhan/api\_based\_extension/moderation.md "mention"),从而在 Dify 上调用,实现敏感词审查的高度自定义和隐私保护。
<figure><img src="../../.gitbook/assets/moderation4.png" alt=""><figcaption><p>Moderation 扩展</p></figcaption></figure>

View File

@ -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 上的各类应用中直接使用。
<figure><img src="../../.gitbook/assets/api_based.png" alt=""><figcaption><p>API-based Extension</p></figcaption></figure>
3. 我们以“查询天气”为例,在“新增基于 API 的扩展”对话框输入名字API 端点API Key。保存后我们就可以调用 API 了。
<figure><img src="../../.gitbook/assets/weather inquiry.png" alt=""><figcaption><p>Weather Inquiry</p></figcaption></figure>
4. 在提示词编排页面,点击“工具”右侧的“+添加”按钮,在打开的“添加 工具”对话框,填写名称和变量名称(变量名称会被引用到 Prompt 中,请填写英文),以及选择第 2 步中已经添加的基于 API 的扩展。
<figure><img src="../../.gitbook/assets/api_based_extension1.png" alt=""><figcaption><p>External_data_tool</p></figcaption></figure>
5. 这样,我们在提示词编排框就可以把查询到的外部数据拼装到 Prompt 中。比如我们要查询今天的伦敦天气,可以添加`location` 变量,输入"London",结合外部数据工具的扩展变量名称`weather_data`,调试输出如下:
<figure><img src="../../.gitbook/assets/Weather_search_tool.jpeg" alt=""><figcaption><p>Weather_search_tool</p></figcaption></figure>
在对话日志中,我们也可以看到 API 返回的实时数据:
<figure><img src="../../.gitbook/assets/log.jpeg" alt="" width="335"><figcaption><p>Prompt Log</p></figcaption></figure>