4.7 doc update (#1068)

* fix: plugin update

* feat: get current time plugin

* fix: ts

* perf: select app ux

* fix: ts

* perf: max w

* move code

* perf: inform tip

* fix: inform

* doc

* fix: tool handle

* perf: tmp file store

* doc

* fix: message file selector

* feat: doc

* perf: switch trigger

* doc

* fix: openapi import

* rount the number

* parse openapi schema

* fix empty line after variables (#64)

* doc image

* image size

* doc

* doc

* catch error

---------

Co-authored-by: heheer <71265218+newfish-cmyk@users.noreply.github.com>
This commit is contained in:
Archer
2024-03-27 12:50:07 +08:00
committed by GitHub
parent c7e6448272
commit 6b7b03c245
160 changed files with 1393 additions and 558 deletions

View File

@@ -9,7 +9,7 @@ weight: 351
## 特点
- 可重复添加(复杂编排时防止线太乱,可以更美观)
- 可重复添加
- 有外部输入
- 有静态配置
- 触发执行
@@ -19,53 +19,18 @@ weight: 351
## 参数说明
### 对话模型
## AI模型
可以通过 [config.json](/docs/development/configuration/) 配置可选的对话模型,通过 [one-api](/docs/development/one-api/) 来实现多模型接入。
### 温度 & 回复上限
点击AI模型后可以配置模型的相关参数。
+ **温度**:越低回答越严谨,少废话(实测下来,感觉差别不大)
+ **回复上限**:最大回复 token 数量(只有 OpenAI 模型有效)。注意,是回复!不是总 tokens。
![](/imgs/aichat02.png)
### 系统提示词(可被外部输入覆盖)
![](/imgs/aichat2.png)
被放置在上下文数组的最前面role 为 system用于引导模型。具体用法参考各搜索引擎的教程~
### 限定词(可被外部输入覆盖)
与系统提示词类似role 也是 system 类型,只不过位置会被放置在问题前,拥有更强的引导作用。
### 引用内容
接收一个外部输入的数组,主要是由【知识库搜索】模块生成,也可以由 HTTP 模块从外部引入。数据结构示例如下:
```ts
type DataType = {
dataset_id?: string;
id?: string;
q: string;
a: string;
source?: string;
};
// 如果是外部引入的内容,尽量不要携带 dataset_id 和 id
const quoteList: DataType[] = [
{ dataset_id: '11', id: '222', q: '你还', a: '哈哈', source: '' },
{ dataset_id: '11', id: '333', q: '你还', a: '哈哈', source: '' },
{ dataset_id: '11', id: '444', q: '你还', a: '哈哈', source: '' }
];
```
## 完整上下文组成
最终发送给 LLM 大模型的数据是一个数组,内容和顺序如下:
```bash
[
系统提示词
引用内容
聊天记录
限定词
问题
]
```
{{% alert icon="🍅" context="success" %}}
具体配置参数介绍可以参考: [AI参数配置说明](/docs/course/ai_settings)
{{% /alert %}}

View File

@@ -21,11 +21,11 @@ weight: 364
在搜索的过程中,尤其是连续对话的搜索,我们通常会发现后续的问题难以搜索到合适的内容,其中一个原因是知识库搜索只会使用“当前”的问题去执行。看下面的例子:
![](/imgs/coreferenceResolution2.jpg)
![](/imgs/coreferenceResolution2.webp)
用户在提问“第二点是什么”的时候只会去知识库里查找“第二点是什么”压根查不到内容。实际上需要查询的是“QA结构是什么”。因此我们需要引入一个【问题优化】模块来对用户当前的问题进行补全从而使得知识库搜索能够搜索到合适的内容。使用补全后效果如下
![](/imgs/coreferenceResolution3.jpg)
![](/imgs/coreferenceResolution3.webp)
## 功能

View File

@@ -17,7 +17,7 @@ weight: 357
- 触发执行
- 核心模块
![](/imgs/flow-kbsearch1.png)
![](/imgs/flow-dataset1.png)
## 参数说明
@@ -25,15 +25,9 @@ weight: 357
可以选择一个或多个**相同向量模型**的知识库,用于向量搜索。
### 输入 - 相似度
### 输入 - 搜索参数
学名称为距离,两个向量之间距离,可以认为是两个向量的相似度,又可以映射成文本之间的相似度。
需要注意的是不同的向量模型之间的相似度是不能比较的因为他们的距离值计算出来差距很大。例如openai 的 embedding 模型,通常 0.8 以上的才是较为准确的内容,而 M3E 模型则是 0.35。
### 输入 - 单次搜索上限
每次触发搜索模块时,最多取 n 条作为最终引用,又称 topN。需要注意的是取了 n 条引用不代表对话模型都可以使用,还会受对话模型最大 Tokens 的影响。
[点击查看参数介绍](/docs/course/data_search/#搜索参数)
### 输出 - 搜索结果

View File

@@ -1,71 +0,0 @@
---
title: "用户引导"
description: "FastGPT 用户引导模块介绍"
icon: "psychology"
draft: false
toc: true
weight: 353
---
## 特点
- 仅可添加 1 个
- 无外部输入
- 不参与实际调度
## 作用
可以配置欢迎语、全局变量、语言播报等,类似于系统设置,不参与工作流的运行。
![](/imgs/guide.png)
### 欢迎语
会在对话开始前发送一个欢迎语。该功能只在网页生效API是无效的并且该欢迎语不会被加入 AI 的对话记录中。
可以通过特殊的 Markdown 语法,来实现快速提问。 如图中的:
```
[剧情介绍]
[导演是谁]
```
### 全局变量
| | |
| ----- | ----- |
| ![](/imgs/variable.png) | ![](/imgs/variable2.png) |
如上图中,我们配置了一个名为`测试`, key为`test`的变量,类型为`文本`的全局变量。并在对话中,通过`{{test}}`来引用该变量。
| | |
| ----- | ----- |
| ![](/imgs/variable3.png) | ![](/imgs/variable4.png) |
从上图中,可以看出,实际的提示词从:`这是一个变量测试: {{test}}` 变成了: `这是一个变量测试: 变量测试`,因为`{{test}}` 被变量替换了。
变量在工作流中大部分的`文本输入框`都生效例如HTTP模块的URL和参数、各种功能块的提示词。
有一个特殊类型的变量,交`外部传入`。这种变量不需要用户填写而是直接在调用时实时传入。目前支持从分享链接的Query和API调用的`variables`对象中获取。
![](/imgs/variable4.png)
------
除了自定义的全局变量外,还有一些系统参数可以选择:
+ **cTime**: 当前时间字符串格式例如2023/3/3 20:22
### 语音播报
| | |
| ----- | ----- |
| ![](/imgs/tts_setting.png) | ![](/imgs/tts_setting2.png) |
### 猜你想问
开启后每次对话结束会发送最近的6条对话记录给AIAI会根据这些对话记录给出 3 个可能的问题。
![](/imgs/question_guide.png)

View File

@@ -19,12 +19,13 @@ weight: 355
## 介绍
HTTP 模块会向对应的地址发送一个 `POST/GET` 请求,携带部分`系统参数``自定义参数`,并接收一个 JSON 响应值,字段也是自定义
HTTP 模块会向对应的地址发送一个 `HTTP` 请求,实际操作与 Postman 和 ApiFox 这类直流工具使用差不多
- Params 为路径请求参数GET请求中用的居多。
- Body 为请求体POST请求中用的居多。
- Body 为请求体POST/PUT请求中用的居多。
- Headers 为请求头,用于传递一些特殊的信息。
- 3 种数据中均可以通过 `{{}}` 来引用变量。
- url 也可以通过 `{{}}` 来引用变量。
- 变量来自于`全局变量``系统变量``局部传入`
## 参数结构
@@ -42,7 +43,7 @@ HTTP 模块会向对应的地址发送一个 `POST/GET` 请求,携带部分`
### Params, Headers
不多描述使用方法和Postman, ApiFox 基本一致,目前 Params 和 Headers 未提供语法提示,后续会加入
不多描述使用方法和Postman, ApiFox 基本一致。
可通过 {{key}} 来引入变量。例如:
@@ -53,7 +54,7 @@ HTTP 模块会向对应的地址发送一个 `POST/GET` 请求,携带部分`
### Body
只有`POST`模式下会生效。
只有特定请求类型下会生效。
可以写一个`自定义的 Json`,并通过 {{key}} 来引入变量。例如:
@@ -182,17 +183,15 @@ HTTP 模块会向对应的地址发送一个 `POST/GET` 请求,携带部分`
FastGPT v4.6.8 后,加入了出参格式化功能,主要以`json`格式化成`字符串`为主。如果你的输出类型选择了`字符串`,则会将`HTTP`对应`key`的值,转成`json`字符串进行输出。因此,未来你可以直接从`HTTP`接口输出内容至`文本加工`中,然后拼接适当的提示词,最终输入给`AI对话`
### 动态外部数据
在插件中的`HTTP模块`有一个属性叫`动态外部数据`,这个属性是与`插件输入`中,数据类型为`动态外部数据`的值搭配使用。
{{% alert context="warning" %}}
HTTP模块非常强大你可以对接一些公开的API来提高编排的功能。
类似于文本加工模块会有一个不确定长度不确定key的用户输入因此这部分数据会被`动态外部数据`接收,它们是一个对象。在 HTTP 模块中,你可以在`Body`中接收到一个`key``DYNAMIC_INPUT_KEY`的对象
如果你不想额外部署服务,可以使用 [Laf](https://laf.dev/) 来快速开发上线接口,即写即发,无需部署
{{% /alert %}}
## laf 对接 HTTP 示例
{{% alert context="warning" %}}
如果你不想额外部署服务,可以使用 [Laf](https://laf.dev/) 来快速开发上线接口,即写即发,无需部署。
{{% /alert %}}
下面是在 Laf 编写的 POST 请求示例:
@@ -250,4 +249,5 @@ export default async function (ctx: FunctionContext) {
## 相关示例
- [谷歌搜索](/docs/workflow/examples/google_search/)
- [发送飞书webhook](/docs/workflow/examples/feishu_webhook/)
- [实验室预约(操作数据库)](/docs/workflow/examples/lab_appointment/)

View File

@@ -1,6 +1,6 @@
---
title: "用户问题"
description: "FastGPT 用户问题模块介绍"
title: "对话入口"
description: "FastGPT 对话入口模块介绍"
icon: "input"
draft: false
toc: true

View File

@@ -0,0 +1,59 @@
---
title: "工具调用"
description: "FastGPT 工具调用模块介绍"
icon: "build"
draft: false
toc: true
weight: 356
---
![](/imgs/flow-tool1.png)
## 什么是工具
工具可以是一个系统模块例如AI对话、知识库搜索、HTTP模块等。也可以是一个插件。
工具调用可以让 LLM 更动态的决策流程而不都是固定的流程。当然缺点就是费tokens
## 工具的组成
1. 工具介绍。通常是模块的介绍或插件的介绍这个介绍会告诉LLM这个工具的作用是什么。
2. 工具参数。对于系统模块来说,工具参数已经是固定的,无需额外配置。对于插件来说,工具参数是一个可配置项。
## 工具是如何运行的
要了解工具如何允许,首先需要知道它的运行条件。
1. 需要工具的介绍或者叫描述。这个介绍会告诉LLM这个工具的作用是什么LLM会根据上下文语义决定是否需要调用这个工具。
2. 工具的参数。有些工具调用时可能需要一些特殊的参数。参数中有2个关键的值`参数介绍``是否必须`
结合工具的介绍、参数介绍和参数是否必须LLM会决定是否调用这个工具。有以下几种情况
1. 无参数的工具:直接根据工具介绍,决定是否需要执行。例如:获取当前时间。
2. 有参数的工具:
1. 无必须的参数尽管上下文中没有适合的参数也可以调用该工具。但有时候LLM会自己伪造一个参数。
2. 有必须的参数如果没有适合的参数LLM可能不会调用该工具。可以通过提示词引导用户提供参数。
### 工具调用逻辑
在支持`函数调用`的模型中,可以一次性调用多个工具,调用逻辑如下:
![](/imgs/flow-tool2.png)
## 怎么用
| 有工具调用模块 | 无工具调用模块 |
| --- | --- |
| ![](/imgs/flow-tool3.png) | ![](/imgs/flow-tool4.png) |
高级编排中,一旦有了工具调用模块,可用的工具头部会出现一个菱形,可以将它与工具调用模块底部的菱形相连接。
被连接的工具,会自动分离工具输入与普通的输入,并且可以编辑`介绍`,可以通过调整介绍,使得该工具调用时机更加精确。
关于工具调用,如何调试仍然是一个玄学,所以建议,不要一次性增加太多工具,选择少量工具调优后再进一步尝试。
## 相关示例
- [谷歌搜索](/docs/workflow/examples/google_search/)
- [发送飞书webhook](/docs/workflow/examples/feishu_webhook/)