前置知识 link
- 基础的网络知识:端口,防火墙……
- Docker 和 Docker Compose 基础知识
- 大模型相关接口和参数
- RAG 相关知识:向量模型,向量数据库,向量检索
部署架构图 link

🤖
MongoDB:用于存储除了向量外的各类数据
PostgreSQL/Milvus:存储向量数据
OneAPI: 聚合各类 AI API,支持多模型调用 (任何模型问题,先自行通过 OneAPI 测试校验)
推荐配置 link
PgVector版本 link
非常轻量,适合知识库索引量在 5000 万以下。
| 环境 | 最低配置(单节点) | 推荐配置 |
|---|---|---|
| 测试(可以把计算进程设置少一些) | 2c4g | 2c8g |
| 100w 组向量 | 4c8g 50GB | 4c16g 50GB |
| 500w 组向量 | 8c32g 200GB | 16c64g 200GB |
Milvus版本 link
对于亿级以上向量性能更优秀。
| 环境 | 最低配置(单节点) | 推荐配置 |
|---|---|---|
| 测试 | 2c8g | 4c16g |
| 100w 组向量 | 未测试 | |
| 500w 组向量 |
zilliz cloud版本 link
Zilliz Cloud 由 Milvus 原厂打造,是全托管的 SaaS 向量数据库服务,性能优于 Milvus 并提供 SLA,点击使用 Zilliz Cloud。
由于向量库使用了 Cloud,无需占用本地资源,无需太关注。
前置工作 link
1. 确保网络环境 link
如果使用OpenAI等国外模型接口,请确保可以正常访问,否则会报错:Connection error 等。 方案可以参考:代理方案
2. 准备 Docker 环境 link
+Table of Contents
Docker Compose 快速部署
使用 Docker Compose 快速部署 FastGPT
前置知识 link
- 基础的网络知识:端口,防火墙……
- Docker 和 Docker Compose 基础知识
- 大模型相关接口和参数
- RAG 相关知识:向量模型,向量数据库,向量检索
部署架构图 link

🤖
MongoDB:用于存储除了向量外的各类数据
PostgreSQL/Milvus:存储向量数据
OneAPI: 聚合各类 AI API,支持多模型调用 (任何模型问题,先自行通过 OneAPI 测试校验)
推荐配置 link
PgVector版本 link
非常轻量,适合知识库索引量在 5000 万以下。
| 环境 | 最低配置(单节点) | 推荐配置 |
|---|---|---|
| 测试(可以把计算进程设置少一些) | 2c4g | 2c8g |
| 100w 组向量 | 4c8g 50GB | 4c16g 50GB |
| 500w 组向量 | 8c32g 200GB | 16c64g 200GB |
Milvus版本 link
对于亿级以上向量性能更优秀。
| 环境 | 最低配置(单节点) | 推荐配置 |
|---|---|---|
| 测试 | 2c8g | 4c16g |
| 100w 组向量 | 未测试 | |
| 500w 组向量 |
zilliz cloud版本 link
Zilliz Cloud 由 Milvus 原厂打造,是全托管的 SaaS 向量数据库服务,性能优于 Milvus 并提供 SLA,点击使用 Zilliz Cloud。
由于向量库使用了 Cloud,无需占用本地资源,无需太关注。
前置工作 link
1. 确保网络环境 link
如果使用OpenAI等国外模型接口,请确保可以正常访问,否则会报错:Connection error 等。 方案可以参考:代理方案
2. 准备 Docker 环境 link
# 安装 Docker
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
systemctl enable --now docker
@@ -47,9 +47,9 @@ chmod +x /usr/local/bin/docker-compose
docker -v
docker-compose -v
# 如失效,自行百度~
- 推荐直接使用 Orbstack。可直接通过 Homebrew 来安装:
+
我们建议将源代码和其他数据绑定到 Linux 容器中时,将其存储在 Linux 文件系统中,而不是 Windows 文件系统中。
可以选择直接使用 WSL 2 后端在 Windows 中安装 Docker Desktop。
也可以直接在 WSL 2 中安装命令行版本的 Docker。
开始部署 link
1. 下载 docker-compose.yml link
非 Linux 环境或无法访问外网环境,可手动创建一个目录,并下载配置文件和对应版本的docker-compose.yml,在这个文件夹中依据下载的配置文件运行docker,若作为本地开发使用推荐docker-compose-pgvector版本,并且自行拉取并运行sandbox和fastgpt,并在docker配置文件中注释掉sandbox和fastgpt的部分
- config.json
- docker-compose.yml (注意,不同向量库版本的文件不一样)
🤖
所有 docker-compose.yml 配置文件中 MongoDB 为 5.x,需要用到AVX指令集,部分 CPU 不支持,需手动更改其镜像版本为 4.4.24**(需要自己在docker hub下载,阿里云镜像没做备份)
Linux 快速脚本
+
或者直接下载安装包进行安装。
我们建议将源代码和其他数据绑定到 Linux 容器中时,将其存储在 Linux 文件系统中,而不是 Windows 文件系统中。
可以选择直接使用 WSL 2 后端在 Windows 中安装 Docker Desktop。
也可以直接在 WSL 2 中安装命令行版本的 Docker。
开始部署 link
1. 下载 docker-compose.yml link
非 Linux 环境或无法访问外网环境,可手动创建一个目录,并下载配置文件和对应版本的docker-compose.yml,在这个文件夹中依据下载的配置文件运行docker,若作为本地开发使用推荐docker-compose-pgvector版本,并且自行拉取并运行sandbox和fastgpt,并在docker配置文件中注释掉sandbox和fastgpt的部分
- config.json
- docker-compose.yml (注意,不同向量库版本的文件不一样)
🤖
所有 docker-compose.yml 配置文件中 MongoDB 为 5.x,需要用到AVX指令集,部分 CPU 不支持,需手动更改其镜像版本为 4.4.24**(需要自己在docker hub下载,阿里云镜像没做备份)
Linux 快速脚本
mkdir fastgpt
cd fastgpt
curl -O https://raw.githubusercontent.com/labring/FastGPT/main/projects/app/data/config.json
@@ -63,9 +63,9 @@ curl -o docker-compose.yml https://raw.githubusercontent.com/labring/FastGPT/mai
# curl -o docker-compose.yml https://raw.githubusercontent.com/labring/FastGPT/main/deploy/docker/docker-compose-milvus.yml
# zilliz 版本
# curl -o docker-compose.yml https://raw.githubusercontent.com/labring/FastGPT/main/deploy/docker/docker-compose-zilliz.yml
- 2. 修改环境变量 link
找到 yml 文件中,fastgpt 容器的环境变量进行下面操作:
打开 Zilliz Cloud, 创建实例并获取相关秘钥。

🤖
- 修改
MILVUS_ADDRESS和MILVUS_TOKEN链接参数,分别对应zilliz的Public Endpoint和Api key,记得把自己ip加入白名单。
3. 启动容器 link
在 docker-compose.yml 同级目录下执行。请确保docker-compose版本最好在2.17以上,否则可能无法执行自动化命令。
+
2. 修改环境变量 link
找到 yml 文件中,fastgpt 容器的环境变量进行下面操作:
打开 Zilliz Cloud, 创建实例并获取相关秘钥。

🤖
- 修改
MILVUS_ADDRESS和MILVUS_TOKEN链接参数,分别对应zilliz的Public Endpoint和Api key,记得把自己ip加入白名单。
3. 启动容器 link
在 docker-compose.yml 同级目录下执行。请确保docker-compose版本最好在2.17以上,否则可能无法执行自动化命令。
# 启动容器
docker-compose up -d
4. 访问 FastGPT link
目前可以通过 ip:3000 直接访问(注意开放防火墙)。登录用户名为 root,密码为docker-compose.yml环境变量里设置的 DEFAULT_ROOT_PSW。
如果需要域名访问,请自行安装并配置 Nginx。
首次运行,会自动初始化 root 用户,密码为 1234(与环境变量中的DEFAULT_ROOT_PSW一致),日志可能会提示一次MongoServerError: Unable to read from a snapshot due to pending collection catalog changes;可忽略。
5. 配置模型 link
- 首次登录FastGPT后,系统会提示未配置
语言模型和索引模型,并自动跳转模型配置页面。系统必须至少有这两类模型才能正常使用。 - 如果系统未正常跳转,可以在
账号-模型提供商页面,进行模型配置。点击查看相关教程 - 目前已知可能问题:首次进入系统后,整个浏览器 tab 无法响应。此时需要删除该tab,重新打开一次即可。
FAQ link
登录系统后,浏览器无法响应 link
无法点击任何内容,刷新也无效。此时需要删除该tab,重新打开一次即可。
Mongo 副本集自动初始化失败 link
最新的 docker-compose 示例优化 Mongo 副本集初始化,实现了全自动。目前在 unbuntu20,22 centos7, wsl2, mac, window 均通过测试。仍无法正常启动,大部分是因为 cpu 不支持 AVX 指令集,可以切换 Mongo4.x 版本。
如果是由于,无法自动初始化副本集合,可以手动初始化副本集:
- 终端中执行下面命令,创建mongo密钥:
私有部署常见问题
FastGPT 私有部署常见问题
一、错误排查方式 link
可以先找找Issue,或新提 Issue,私有部署错误,务必提供详细的操作步骤、日志、截图,否则很难排查。
获取后端错误 link
docker ps -a查看所有容器运行状态,检查是否全部 running,如有异常,尝试docker logs 容器名查看对应日志。- 容器都运行正常的,
docker logs 容器名查看报错日志
前端错误 link
前端报错时,页面会出现崩溃,并提示检查控制台日志。可以打开浏览器控制台,并查看console中的 log 日志。还可以点击对应 log 的超链接,会提示到具体错误文件,可以把这些详细错误信息提供,方便排查。
OneAPI 错误 link
带有requestId的,都是 OneAPI 提示错误,大部分都是因为模型接口报错。可以参考 OneAPI 常见错误
二、通用问题 link
前端页面崩溃 link
- 90% 情况是模型配置不正确:确保每类模型都至少有一个启用;检查模型中一些
对象参数是否异常(数组和对象),如果为空,可以尝试给个空数组或空对象。 - 少部分是由于浏览器兼容问题,由于项目中包含一些高阶语法,可能低版本浏览器不兼容,可以将具体操作步骤和控制台中错误信息提供 issue。
- 关闭浏览器翻译功能,如果浏览器开启了翻译,可能会导致页面崩溃。
通过sealos部署的话,是否没有本地部署的一些限制? link
这是索引模型的长度限制,通过任何方式部署都一样的,但不同索引模型的配置不一样,可以在后台修改参数。
怎么挂载小程序配置文件 link
将验证文件,挂载到指定位置:/app/projects/app/public/xxxx.txt
然后重启。例如:

数据库3306端口被占用了,启动服务失败 link

把端口映射改成 3307 之类的,例如 3307:3306。
本地部署的限制 link
具体内容参考https://fael3z0zfze.feishu.cn/wiki/OFpAw8XzAi36Guk8dfucrCKUnjg。
能否纯本地运行 link
可以。需要准备好向量模型和LLM模型。
其他模型没法进行问题分类/内容提取 link
- 看日志。如果提示 JSON invalid,not support tool 之类的,说明该模型不支持工具调用或函数调用,需要设置
toolChoice=false和functionCall=false,就会默认走提示词模式。目前内置提示词仅针对了商业模型API进行测试。问题分类基本可用,内容提取不太行。 - 如果已经配置正常,并且没有错误日志,则说明可能提示词不太适合该模型,可以通过修改
customCQPrompt来自定义提示词。
页面崩溃 link
- 关闭翻译
- 检查配置文件是否正常加载,如果没有正常加载会导致缺失系统信息,在某些操作下会导致空指针。
- 95%情况是配置文件不对。会提示 xxx undefined
- 提示
URI malformed,请 Issue 反馈具体操作和页面,这是由于特殊字符串编码解析报错。
- 某些api不兼容问题(较少)
开启内容补全后,响应速度变慢 link
- 问题补全需要经过一轮AI生成。
- 会进行3~5轮的查询,如果数据库性能不足,会有明显影响。
页面中可以正常回复,API 报错 link
页面中是用 stream=true 模式,所以API也需要设置 stream=true 来进行测试。部分模型接口(国产居多)非 Stream 的兼容有点垃圾。 -和上一个问题一样,curl 测试。
知识库索引没有进度/索引很慢 link
先看日志报错信息。有以下几种情况:
- 可以对话,但是索引没有进度:没有配置向量模型(vectorModels)
- 不能对话,也不能索引:API调用失败。可能是没连上OneAPI或OpenAI
- 有进度,但是非常慢:api key不行,OpenAI的免费号,一分钟只有3次还是60次。一天上限200次。
Connection error link
网络异常。国内服务器无法请求OpenAI,自行检查与AI模型的连接是否正常。
或者是FastGPT请求不到 OneAPI(没放同一个网络)
修改了 vectorModels 但是没有生效 link
- 重启容器,确保模型配置已经加载(可以在日志或者新建知识库时候看到新模型)
- 记得刷新一次浏览器。
- 如果是已经创建的知识库,需要删除重建。向量模型是创建时候绑定的,不会动态更新。
三、常见的 OneAPI 错误 link
带有 requestId 的都是 OneAPI 的报错。
insufficient_user_quota user quota is not enough link
OneAPI 账号的余额不足,默认 root 用户只有 200 刀,可以手动修改。
路径:打开OneAPI -> 用户 -> root用户右边的编辑 -> 剩余余额调大
xxx渠道找不到 link
FastGPT 模型配置文件中的 model 必须与 OneAPI 渠道中的模型对应上,否则就会提示这个错误。可检查下面内容:
- OneAPI 中没有配置该模型渠道,或者被禁用了。
- FastGPT 配置文件有 OneAPI 没有配置的模型。如果 OneAPI 没有配置对应模型的,配置文件中也不要写。
- 使用旧的向量模型创建了知识库,后又更新了向量模型。这时候需要删除以前的知识库,重建。
如果OneAPI中,没有配置对应的模型,config.json中也不要配置,否则容易报错。
点击模型测试失败 link
OneAPI 只会测试渠道的第一个模型,并且只会测试对话模型,向量模型无法自动测试,需要手动发起请求进行测试。查看测试模型命令示例
get request url failed: Post “https://xxx dial tcp: xxxx link
OneAPI 与模型网络不通,需要检查网络配置。
Incorrect API key provided: sk-xxxx.You can find your api Key at xxx link
OneAPI 的 API Key 配置错误,需要修改OPENAI_API_KEY环境变量,并重启容器(先 docker-compose down 然后再 docker-compose up -d 运行一次)。
可以exec进入容器,env查看环境变量是否生效。
bad_response_status_code bad response status code 503 link
- 模型服务不可用
- 模型接口参数异常(温度、max token等可能不适配)
- ….
Tiktoken 下载失败 link
由于 OneAPI 会在启动时从网络下载一个 tiktoken 的依赖,如果网络异常,就会导致启动失败。可以参考OneAPI 离线部署解决。
四、常见模型问题 link
如何检查模型可用性问题 link
- 私有部署模型,先确认部署的模型是否正常。
- 通过 CURL 请求,直接测试上游模型是否正常运行(云端模型或私有模型均进行测试)
- 通过 CURL 请求,请求 OneAPI 去测试模型是否正常。
- 在 FastGPT 中使用该模型进行测试。
下面是几个测试 CURL 示例:
+和上一个问题一样,curl 测试。知识库索引没有进度/索引很慢 link
先看日志报错信息。有以下几种情况:
- 可以对话,但是索引没有进度:没有配置向量模型(vectorModels)
- 不能对话,也不能索引:API调用失败。可能是没连上OneAPI或OpenAI
- 有进度,但是非常慢:api key不行,OpenAI的免费号,一分钟只有3次还是60次。一天上限200次。
Connection error link
网络异常。国内服务器无法请求OpenAI,自行检查与AI模型的连接是否正常。
或者是FastGPT请求不到 OneAPI(没放同一个网络)
修改了 vectorModels 但是没有生效 link
- 重启容器,确保模型配置已经加载(可以在日志或者新建知识库时候看到新模型)
- 记得刷新一次浏览器。
- 如果是已经创建的知识库,需要删除重建。向量模型是创建时候绑定的,不会动态更新。
三、常见的 OneAPI 错误 link
带有 requestId 的都是 OneAPI 的报错。
insufficient_user_quota user quota is not enough link
OneAPI 账号的余额不足,默认 root 用户只有 200 刀,可以手动修改。
路径:打开OneAPI -> 用户 -> root用户右边的编辑 -> 剩余余额调大
xxx渠道找不到 link
FastGPT 模型配置文件中的 model 必须与 OneAPI 渠道中的模型对应上,否则就会提示这个错误。可检查下面内容:
- OneAPI 中没有配置该模型渠道,或者被禁用了。
- FastGPT 配置文件有 OneAPI 没有配置的模型。如果 OneAPI 没有配置对应模型的,配置文件中也不要写。
- 使用旧的向量模型创建了知识库,后又更新了向量模型。这时候需要删除以前的知识库,重建。
如果OneAPI中,没有配置对应的模型,
config.json中也不要配置,否则容易报错。点击模型测试失败 link
OneAPI 只会测试渠道的第一个模型,并且只会测试对话模型,向量模型无法自动测试,需要手动发起请求进行测试。查看测试模型命令示例
get request url failed: Post “https://xxx dial tcp: xxxx link
OneAPI 与模型网络不通,需要检查网络配置。
Incorrect API key provided: sk-xxxx.You can find your api Key at xxx link
OneAPI 的 API Key 配置错误,需要修改
OPENAI_API_KEY环境变量,并重启容器(先 docker-compose down 然后再 docker-compose up -d 运行一次)。可以
exec进入容器,env查看环境变量是否生效。bad_response_status_code bad response status code 503 link
- 模型服务不可用
- 模型接口参数异常(温度、max token等可能不适配)
- ….
Tiktoken 下载失败 link
由于 OneAPI 会在启动时从网络下载一个 tiktoken 的依赖,如果网络异常,就会导致启动失败。可以参考OneAPI 离线部署解决。
四、常见模型问题 link
如何检查模型可用性问题 link
- 私有部署模型,先确认部署的模型是否正常。
- 通过 CURL 请求,直接测试上游模型是否正常运行(云端模型或私有模型均进行测试)
- 通过 CURL 请求,请求 OneAPI 去测试模型是否正常。
- 在 FastGPT 中使用该模型进行测试。
下面是几个测试 CURL 示例:
curl https://api.openai.com/v1/chat/completions \ -H "Content-Type: application/json" \ -H "Authorization: Bearer $OPENAI_API_KEY" \ @@ -57,7 +57,7 @@ Table of Contents+curl https://api.openai.com/v1/embeddings \ -H "Authorization: Bearer $OPENAI_API_KEY" \ -H "Content-Type: application/json" \ @@ -66,7 +66,7 @@ Table of Contents+curl --location --request POST 'https://xxxx.com/api/v1/rerank' \ --header 'Authorization: Bearer {{ACCESS_TOKEN}}' \ --header 'Content-Type: application/json' \ @@ -77,7 +77,7 @@ Table of Contents+curl https://api.openai.com/v1/audio/speech \ -H "Authorization: Bearer $OPENAI_API_KEY" \ -H "Content-Type: application/json" \ @@ -87,7 +87,7 @@ Table of Contents+curl https://api.openai.com/v1/audio/transcriptions \ -H "Authorization: Bearer $OPENAI_API_KEY" \ -H "Content-Type: multipart/form-data" \ diff --git a/docs/development/openapi/chat/index.html b/docs/development/openapi/chat/index.html index c86616b13..1b8a9adee 100644 --- a/docs/development/openapi/chat/index.html +++ b/docs/development/openapi/chat/index.html @@ -34,9 +34,9 @@ FAQ 对话接口chat对话接口
FastGPT OpenAPI 对话接口
如何获取 AppId link
可在应用详情的路径里获取 AppId。
发起对话 link
🤖
- 该接口的 API Key 需使用
应用特定的 key,否则会报错。
有些包调用时,
BaseUrl需要添加v1路径,有些不需要,如果出现404情况,可补充v1重试。请求简易应用和工作流 link
v1对话接口兼容GPT的接口!如果你的项目使用的是标准的GPT官方接口,可以直接通过修改BaseUrl和Authorization来访问 FastGpt 应用,不过需要注意下面几个规则:🤖
传入的
model,temperature等参数字段均无效,这些字段由编排决定,不会根据 API 参数改变。不会返回实际消耗
Token值,如果需要,可以设置detail=true,并手动计算responseData里的tokens值。请求 link
+Table of Contentschat对话接口
FastGPT OpenAPI 对话接口
如何获取 AppId link
可在应用详情的路径里获取 AppId。
发起对话 link
🤖
- 该接口的 API Key 需使用
应用特定的 key,否则会报错。
有些包调用时,
BaseUrl需要添加v1路径,有些不需要,如果出现404情况,可补充v1重试。请求简易应用和工作流 link
v1对话接口兼容GPT的接口!如果你的项目使用的是标准的GPT官方接口,可以直接通过修改BaseUrl和Authorization来访问 FastGpt 应用,不过需要注意下面几个规则:🤖
传入的
model,temperature等参数字段均无效,这些字段由编排决定,不会根据 API 参数改变。不会返回实际消耗
Token值,如果需要,可以设置detail=true,并手动计算responseData里的tokens值。请求 link
curl --location --request POST 'http://localhost:3000/api/v1/chat/completions' \ --header 'Authorization: Bearer fastgpt-xxxxxx' \ --header 'Content-Type: application/json' \ @@ -56,7 +56,7 @@ Table of Contents
- 仅
messages有部分区别,其他参数一致。- 目前不支持上传文件,需上传到自己的对象存储中,获取对应的文件链接。
+
- 仅
messages有部分区别,其他参数一致。- 目前不支持上传文件,需上传到自己的对象存储中,获取对应的文件链接。
curl --location --request POST 'http://localhost:3000/api/v1/chat/completions' \ --header 'Authorization: Bearer fastgpt-xxxxxx' \ --header 'Content-Type: application/json' \ @@ -86,11 +86,11 @@ Table of Contentsinfo
- headers.Authorization: Bearer {{apikey}}
- chatId: string | undefined 。
- 为
undefined时(不传入),不使用 FastGpt 提供的上下文功能,完全通过传入的 messages 构建上下文。- 为
非空字符串时,意味着使用 chatId 进行对话,自动从 FastGpt 数据库取历史记录,并使用 messages 数组最后一个内容作为用户问题,其余 message 会被忽略。请自行确保 chatId 唯一,长度小于250,通常可以是自己系统的对话框ID。- messages: 结构与 GPT接口 chat模式一致。
- responseChatItemId: string | undefined 。如果传入,则会将该值作为本次对话的响应消息的 ID,FastGPT 会自动将该 ID 存入数据库。请确保,在当前
chatId下,responseChatItemId是唯一的。- detail: 是否返回中间值(模块状态,响应的完整结果等),
stream模式下会通过event进行区分,非stream模式结果保存在responseData中。- variables: 模块变量,一个对象,会替换模块中,输入框内容里的
{{key}}+info
- headers.Authorization: Bearer {{apikey}}
- chatId: string | undefined 。
- 为
undefined时(不传入),不使用 FastGpt 提供的上下文功能,完全通过传入的 messages 构建上下文。- 为
非空字符串时,意味着使用 chatId 进行对话,自动从 FastGpt 数据库取历史记录,并使用 messages 数组最后一个内容作为用户问题,其余 message 会被忽略。请自行确保 chatId 唯一,长度小于250,通常可以是自己系统的对话框ID。- messages: 结构与 GPT接口 chat模式一致。
- responseChatItemId: string | undefined 。如果传入,则会将该值作为本次对话的响应消息的 ID,FastGPT 会自动将该 ID 存入数据库。请确保,在当前
chatId下,responseChatItemId是唯一的。- detail: 是否返回中间值(模块状态,响应的完整结果等),
stream模式下会通过event进行区分,非stream模式结果保存在responseData中。- variables: 模块变量,一个对象,会替换模块中,输入框内容里的
{{key}}{ "id": "adsfasf", "model": "", @@ -110,7 +110,7 @@ Table of Contents+data: {"id":"","object":"","created":0,"choices":[{"delta":{"content":""},"index":0,"finish_reason":null}]} data: {"id":"","object":"","created":0,"choices":[{"delta":{"content":"电"},"index":0,"finish_reason":null}]} @@ -118,7 +118,7 @@ data: {"id":"","object":"","created":0,& data: {"id":"","object":"","created":0,"choices":[{"delta":{"content":"影"},"index":0,"finish_reason":null}]} data: {"id":"","object":"","created":0,"choices":[{"delta":{"content":"《"},"index":0,"finish_reason":null}]}-+{ "responseData": [ // 不同模块的响应值, 不同版本具体值可能有差异,可先 log 自行查看最新值。 { @@ -202,7 +202,7 @@ data: {"id":"","object":"","created":0,& } ] }-+event: flowNodeStatus data: {"status":"running","name":"知识库搜索"} @@ -232,8 +232,8 @@ data: [DONE] event: flowResponses data: [{"moduleName":"知识库搜索","moduleType":"datasetSearchNode","runningTime":1.78},{"question":"导演是谁","quoteList":[{"id":"654f2e49b64caef1d9431e8b","q":"电影《铃芽之旅》的导演是谁?","a":"电影《铃芽之旅》的导演是新海诚!","indexes":[{"type":"qa","dataId":"3515487","text":"电影《铃芽之旅》的导演是谁?","_id":"654f2e49b64caef1d9431e8c","defaultIndex":true}],"datasetId":"646627f4f7b896cfd8910e38","collectionId":"653279b16cd42ab509e766e8","sourceName":"data (81).csv","sourceId":"64fd3b6423aa1307b65896f6","score":0.8935586214065552},{"id":"6552e14c50f4a2a8e632af11","q":"导演是谁?","a":"电影《铃芽之旅》的导演是新海诚。","indexes":[{"defaultIndex":true,"type":"qa","dataId":"3644565","text":"导演是谁?\n电影《铃芽之旅》的导演是新海诚。","_id":"6552e14dde5cc7ba3954e417"}],"datasetId":"646627f4f7b896cfd8910e38","collectionId":"653279b16cd42ab509e766e8","sourceName":"data (81).csv","sourceId":"64fd3b6423aa1307b65896f6","score":0.8890955448150635},{"id":"654f34a0b64caef1d946337e","q":"本作的主人公是谁?","a":"本作的主人公是名叫铃芽的少女。","indexes":[{"type":"qa","dataId":"3515541","text":"本作的主人公是谁?","_id":"654f34a0b64caef1d946337f","defaultIndex":true}],"datasetId":"646627f4f7b896cfd8910e38","collectionId":"653279b16cd42ab509e766e8","sourceName":"data (81).csv","sourceId":"64fd3b6423aa1307b65896f6","score":0.8738770484924316},{"id":"654f3002b64caef1d944207a","q":"电影《铃芽之旅》男主角是谁?","a":"电影《铃芽之旅》男主角是宗像草太,由松村北斗配音。","indexes":[{"type":"qa","dataId":"3515538","text":"电影《铃芽之旅》男主角是谁?","_id":"654f3002b64caef1d944207b","defaultIndex":true}],"datasetId":"646627f4f7b896cfd8910e38","collectionId":"653279b16cd42ab509e766e8","sourceName":"data (81).csv","sourceId":"64fd3b6423aa1307b65896f6","score":0.8607980012893677},{"id":"654f2fc8b64caef1d943fd46","q":"电影《铃芽之旅》的编剧是谁?","a":"新海诚是本片的编剧。","indexes":[{"defaultIndex":true,"type":"qa","dataId":"3515550","text":"电影《铃芽之旅》的编剧是谁?22","_id":"654f2fc8b64caef1d943fd47"}],"datasetId":"646627f4f7b896cfd8910e38","collectionId":"653279b16cd42ab509e766e8","sourceName":"data (81).csv","sourceId":"64fd3b6423aa1307b65896f6","score":0.8468944430351257}],"moduleName":"AI 对话","moduleType":"chatNode","runningTime":1.86}]-event取值:
- answer: 返回给客户端的文本(最终会算作回答)
- fastAnswer: 指定回复返回给客户端的文本(最终会算作回答)
- toolCall: 执行工具
- toolParams: 工具参数
- toolResponse: 工具返回
- flowNodeStatus: 运行到的节点状态
- flowResponses: 节点完整响应
- updateVariables: 更新变量
- error: 报错
交互节点响应 link
如果工作流中包含交互节点,依然是调用该 API 接口,需要设置
detail=true,并可以从event=interactive的数据中获取交互节点的配置信息。如果是stream=false,则可以从 choice 中获取type=interactive的元素,获取交互节点的选择信息。当你调用一个带交互节点的工作流时,如果工作流遇到了交互节点,那么会直接返回,你可以得到下面的信息:
+event取值:
- answer: 返回给客户端的文本(最终会算作回答)
- fastAnswer: 指定回复返回给客户端的文本(最终会算作回答)
- toolCall: 执行工具
- toolParams: 工具参数
- toolResponse: 工具返回
- flowNodeStatus: 运行到的节点状态
- flowResponses: 节点完整响应
- updateVariables: 更新变量
- error: 报错
交互节点响应 link
如果工作流中包含交互节点,依然是调用该 API 接口,需要设置
detail=true,并可以从event=interactive的数据中获取交互节点的配置信息。如果是stream=false,则可以从 choice 中获取type=interactive的元素,获取交互节点的选择信息。当你调用一个带交互节点的工作流时,如果工作流遇到了交互节点,那么会直接返回,你可以得到下面的信息:
{ "interactive": { "type": "userSelect", @@ -252,7 +252,7 @@ data: [{"moduleName":"知识库搜索","moduleType":" } } }-+{ "interactive": { "type": "userInput", @@ -295,8 +295,8 @@ data: [{"moduleName":"知识库搜索","moduleType":" } } }-交互节点继续运行 link
紧接着上一节,当你接收到交互节点信息后,可以根据这些数据进行 UI 渲染,引导用户输入或选择相关信息。然后需要再次发起对话,来继续工作流。调用的接口与仍是该接口,你需要按以下格式来发起请求:
对于用户选择,你只需要直接传递一个选择的结果给 messages 即可。
+交互节点继续运行 link
紧接着上一节,当你接收到交互节点信息后,可以根据这些数据进行 UI 渲染,引导用户输入或选择相关信息。然后需要再次发起对话,来继续工作流。调用的接口与仍是该接口,你需要按以下格式来发起请求:
对于用户选择,你只需要直接传递一个选择的结果给 messages 即可。
curl --location --request POST 'https://api.fastgpt.in/api/v1/chat/completions' \ --header 'Authorization: Bearer fastgpt-xxx' \ --header 'Content-Type: application/json' \ @@ -311,7 +311,7 @@ data: [{"moduleName":"知识库搜索","moduleType":" } ] }'-表单输入稍微麻烦一点,需要将输入的内容,以对象形式并序列化成字符串,作为
messages的值。对象的 key 对应表单的 key,value 为用户输入的值。务必确保chatId是一致的。+表单输入稍微麻烦一点,需要将输入的内容,以对象形式并序列化成字符串,作为
messages的值。对象的 key 对应表单的 key,value 为用户输入的值。务必确保chatId是一致的。curl --location --request POST 'https://api.fastgpt.in/api/v1/chat/completions' \ --header 'Authorization: Bearer fastgpt-xxxx' \ --header 'Content-Type: application/json' \ @@ -337,9 +337,9 @@ data: [{"moduleName":"知识库搜索","moduleType":" "query":"你好" # 我的插件输入有一个参数,变量名叫 query } }'-响应示例 link
- 插件的输出可以通过查找
responseData中,moduleType=pluginOutput的元素,其pluginOutput是插件的输出。- 流输出,仍可以通过
choices进行获取。+响应示例 link
- 插件的输出可以通过查找
responseData中,moduleType=pluginOutput的元素,其pluginOutput是插件的输出。- 流输出,仍可以通过
choices进行获取。{ "responseData": [ { @@ -396,7 +396,7 @@ data: [{"moduleName":"知识库搜索","moduleType":" } ] }-
- 插件的输出可以通过获取
event=flowResponses中的字符串,并将其反序列化后得到一个数组。同样的,查找moduleType=pluginOutput的元素,其pluginOutput是插件的输出。- 流输出,仍和对话接口一样获取。
+
- 插件的输出可以通过获取
event=flowResponses中的字符串,并将其反序列化后得到一个数组。同样的,查找moduleType=pluginOutput的元素,其pluginOutput是插件的输出。- 流输出,仍和对话接口一样获取。
event: flowNodeStatus data: {"status":"running","name":"AI 对话"} @@ -453,9 +453,9 @@ data: [DONE] event: flowResponses data: [{"nodeId":"fdDgXQ6SYn8v","moduleName":"AI 对话","moduleType":"chatNode","totalPoints":0.033,"model":"FastAI-3.5","tokens":33,"query":"你好","maxToken":2000,"historyPreview":[{"obj":"Human","value":"你好"},{"obj":"AI","value":"你好!有什么可以帮助你的吗?"}],"contextTotalLen":2,"runningTime":1.42},{"nodeId":"pluginOutput","moduleName":"插件输出","moduleType":"pluginOutput","totalPoints":0,"pluginOutput":{"result":"你好!有什么可以帮助你的吗?"},"runningTime":0}]-event取值:
- answer: 返回给客户端的文本(最终会算作回答)
- fastAnswer: 指定回复返回给客户端的文本(最终会算作回答)
- toolCall: 执行工具
- toolParams: 工具参数
- toolResponse: 工具返回
- flowNodeStatus: 运行到的节点状态
- flowResponses: 节点完整响应
- updateVariables: 更新变量
- error: 报错
对话 CRUD link
🤖
以下接口可使用任意
API Key调用。4.8.12 以上版本才能使用
重要字段
- chatId - 指一个应用下,某一个对话窗口的 ID
- dataId - 指一个对话窗口下,某一个对话记录的 ID
历史记录 link
获取某个应用历史记录 link
+event取值:
- answer: 返回给客户端的文本(最终会算作回答)
- fastAnswer: 指定回复返回给客户端的文本(最终会算作回答)
- toolCall: 执行工具
- toolParams: 工具参数
- toolResponse: 工具返回
- flowNodeStatus: 运行到的节点状态
- flowResponses: 节点完整响应
- updateVariables: 更新变量
- error: 报错
对话 CRUD link
🤖
以下接口可使用任意
API Key调用。4.8.12 以上版本才能使用
重要字段
- chatId - 指一个应用下,某一个对话窗口的 ID
- dataId - 指一个对话窗口下,某一个对话记录的 ID
历史记录 link
获取某个应用历史记录 link
curl --location --request POST 'http://localhost:3000/api/core/chat/getHistories' \ --header 'Authorization: Bearer {{apikey}}' \ --header 'Content-Type: application/json' \ @@ -465,7 +465,7 @@ data: [{"nodeId":"fdDgXQ6SYn8v","moduleName":"AI 对 "pageSize": 20, "source": "api" }'-
- appId - 应用 Id
- offset - 偏移量,即从第几条数据开始取
- pageSize - 记录数量
- source - 对话源。source=api,表示获取通过 API 创建的对话(不会获取到页面上的对话记录)
+
- appId - 应用 Id
- offset - 偏移量,即从第几条数据开始取
- pageSize - 记录数量
- source - 对话源。source=api,表示获取通过 API 创建的对话(不会获取到页面上的对话记录)
{ "code": 200, "statusText": "", @@ -492,9 +492,9 @@ data: [{"nodeId":"fdDgXQ6SYn8v","moduleName":"AI 对 "total": 2 } }-修改某个对话的标题 link
+修改某个对话的标题 link
curl --location --request POST 'http://localhost:3000/api/core/chat/updateHistory' \ --header 'Authorization: Bearer {{apikey}}' \ --header 'Content-Type: application/json' \ @@ -503,16 +503,16 @@ data: [{"nodeId":"fdDgXQ6SYn8v","moduleName":"AI 对 "chatId": "chatId", "customTitle": "自定义标题" }'-
- appId - 应用 Id
- chatId - 历史记录 Id
- customTitle - 自定义对话名
+
- appId - 应用 Id
- chatId - 历史记录 Id
- customTitle - 自定义对话名
{ "code": 200, "statusText": "", "message": "", "data": null }-置顶 / 取消置顶 link
+置顶 / 取消置顶 link
curl --location --request POST 'http://localhost:3000/api/core/chat/updateHistory' \ --header 'Authorization: Bearer {{apikey}}' \ --header 'Content-Type: application/json' \ @@ -521,43 +521,43 @@ data: [{"nodeId":"fdDgXQ6SYn8v","moduleName":"AI 对 "chatId": "chatId", "top": true }'-
- appId - 应用Id
- chatId - 历史记录 Id
- top - 是否置顶,ture 置顶,false 取消置顶
+
- appId - 应用Id
- chatId - 历史记录 Id
- top - 是否置顶,ture 置顶,false 取消置顶
{ "code": 200, "statusText": "", "message": "", "data": null }-删除某个历史记录 link
+删除某个历史记录 link
curl --location --request DELETE 'http://localhost:3000/api/core/chat/delHistory?chatId={{chatId}}&appId={{appId}}' \ --header 'Authorization: Bearer {{apikey}}'-
- appId - 应用 Id
- chatId - 历史记录 Id
+
- appId - 应用 Id
- chatId - 历史记录 Id
{ "code": 200, "statusText": "", "message": "", "data": null }-清空所有历史记录 link
仅会情况通过 API Key 创建的对话历史记录,不会清空在线使用、分享链接等其他来源的对话历史记录。
+清空所有历史记录 link
仅会情况通过 API Key 创建的对话历史记录,不会清空在线使用、分享链接等其他来源的对话历史记录。
curl --location --request DELETE 'http://localhost:3000/api/core/chat/clearHistories?appId={{appId}}' \ --header 'Authorization: Bearer {{apikey}}'-
- appId - 应用 Id
+
- appId - 应用 Id
{ "code": 200, "statusText": "", "message": "", "data": null }-对话记录 link
指的是某个 chatId 下的对话记录操作。
获取单个对话初始化信息 link
+对话记录 link
指的是某个 chatId 下的对话记录操作。
获取单个对话初始化信息 link
curl --location --request GET 'http://localhost:3000/api/core/chat/init?appId={{appId}}&chatId={{chatId}}' \ --header 'Authorization: Bearer {{apikey}}'-
- appId - 应用 Id
- chatId - 历史记录 Id
+
- appId - 应用 Id
- chatId - 历史记录 Id
{ "code": 200, "statusText": "", @@ -611,9 +611,9 @@ data: [{"nodeId":"fdDgXQ6SYn8v","moduleName":"AI 对 } } }-获取对话记录列表 link
+获取对话记录列表 link
curl --location --request POST 'http://localhost:3000/api/core/chat/getPaginationRecords' \ --header 'Authorization: Bearer {{apikey}}' \ --header 'Content-Type: application/json' \ @@ -624,7 +624,7 @@ data: [{"nodeId":"fdDgXQ6SYn8v","moduleName":"AI 对 "pageSize": 10, "loadCustomFeedbacks": true }'-
- appId - 应用 Id
- chatId - 历史记录 Id
- offset - 偏移量
- pageSize - 记录数量
- loadCustomFeedbacks - 是否读取自定义反馈(可选)
+
- appId - 应用 Id
- chatId - 历史记录 Id
- offset - 偏移量
- pageSize - 记录数量
- loadCustomFeedbacks - 是否读取自定义反馈(可选)
{ "code": 200, "statusText": "", @@ -673,12 +673,12 @@ data: [{"nodeId":"fdDgXQ6SYn8v","moduleName":"AI 对 "total": 2 } }-获取单个对话记录运行详情 link
+获取单个对话记录运行详情 link
curl --location --request GET 'http://localhost:3000/api/core/chat/getResData?appId={{appId}}&chatId={{chatId}}&dataId={{dataId}}' \ --header 'Authorization: Bearer {{apikey}}'-
- appId - 应用 Id
- chatId - 对话 Id
- dataId - 对话记录 Id
+
- appId - 应用 Id
- chatId - 对话 Id
- dataId - 对话记录 Id
{ "code": 200, "statusText": "", @@ -724,21 +724,21 @@ data: [{"nodeId":"fdDgXQ6SYn8v","moduleName":"AI 对 } ] }-删除对话记录 link
+删除对话记录 link
curl --location --request DELETE 'http://localhost:3000/api/core/chat/item/delete?contentId={{contentId}}&chatId={{chatId}}&appId={{appId}}' \ --header 'Authorization: Bearer {{apikey}}'-
- appId - 应用 Id
- chatId - 历史记录 Id
- contentId - 对话记录 Id
+
- appId - 应用 Id
- chatId - 历史记录 Id
- contentId - 对话记录 Id
{ "code": 200, "statusText": "", "message": "", "data": null }-点赞 / 取消点赞 link
+点赞 / 取消点赞 link
curl --location --request POST 'http://localhost:3000/api/core/chat/feedback/updateUserFeedback' \ --header 'Authorization: Bearer {{apikey}}' \ --header 'Content-Type: application/json' \ @@ -748,16 +748,16 @@ data: [{"nodeId":"fdDgXQ6SYn8v","moduleName":"AI 对 "dataId": "dataId", "userGoodFeedback": "yes" }'-
- appId - 应用 Id
- chatId - 历史记录 Id
- dataId - 对话记录 Id
- userGoodFeedback - 用户点赞时的信息(可选),取消点赞时不填此参数即可
+
- appId - 应用 Id
- chatId - 历史记录 Id
- dataId - 对话记录 Id
- userGoodFeedback - 用户点赞时的信息(可选),取消点赞时不填此参数即可
{ "code": 200, "statusText": "", "message": "", "data": null }-点踩 / 取消点踩 link
+点踩 / 取消点踩 link
curl --location --request POST 'http://localhost:3000/api/core/chat/feedback/updateUserFeedback' \ --header 'Authorization: Bearer {{apikey}}' \ --header 'Content-Type: application/json' \ @@ -767,16 +767,16 @@ data: [{"nodeId":"fdDgXQ6SYn8v","moduleName":"AI 对 "dataId": "dataId", "userBadFeedback": "yes" }'-
- appId - 应用 Id
- chatId - 历史记录 Id
- dataId - 对话记录 Id
- userBadFeedback - 用户点踩时的信息(可选),取消点踩时不填此参数即可
+
- appId - 应用 Id
- chatId - 历史记录 Id
- dataId - 对话记录 Id
- userBadFeedback - 用户点踩时的信息(可选),取消点踩时不填此参数即可
{ "code": 200, "statusText": "", "message": "", "data": null }-猜你想问 link
4.8.16 后新版接口
新版猜你想问,必须包含 appId 和 chatId 的参数才可以进行使用。会自动根据 chatId 去拉取最近 6 轮对话记录作为上下文来引导回答。
+猜你想问 link
4.8.16 后新版接口
新版猜你想问,必须包含 appId 和 chatId 的参数才可以进行使用。会自动根据 chatId 去拉取最近 6 轮对话记录作为上下文来引导回答。
curl --location --request POST 'http://localhost:3000/api/core/ai/agent/v2/createQuestionGuide' \ --header 'Authorization: Bearer {{apikey}}' \ --header 'Content-Type: application/json' \ @@ -789,7 +789,7 @@ data: [{"nodeId":"fdDgXQ6SYn8v","moduleName":"AI 对 "customPrompt": "你是一个智能助手,请根据用户的问题生成猜你想问。" } }'-
参数名 类型 必填 说明 appId string ✅ 应用 Id chatId string ✅ 对话 Id questionGuide object 自定义配置,不传的话,则会根据 appId,取最新发布版本的配置 +
参数名 类型 必填 说明 appId string ✅ 应用 Id chatId string ✅ 对话 Id questionGuide object 自定义配置,不传的话,则会根据 appId,取最新发布版本的配置 type CreateQuestionGuideParams = OutLinkChatAuthProps & { appId: string; chatId: string; @@ -799,7 +799,7 @@ data: [{"nodeId":"fdDgXQ6SYn8v","moduleName":"AI 对 customPrompt?: string; }; };-+{ "code": 200, "statusText": "", @@ -810,9 +810,9 @@ data: [{"nodeId":"fdDgXQ6SYn8v","moduleName":"AI 对 "你希望AI能做什么?" ] }-4.8.16 前旧版接口:
+4.8.16 前旧版接口:
curl --location --request POST 'http://localhost:3000/api/core/ai/agent/createQuestionGuide' \ --header 'Authorization: Bearer {{apikey}}' \ --header 'Content-Type: application/json' \ @@ -828,7 +828,7 @@ data: [{"nodeId":"fdDgXQ6SYn8v","moduleName":"AI 对 } ] }'-
- messages - 对话消息,提供给 AI 的消息记录
+
- messages - 对话消息,提供给 AI 的消息记录
{ "code": 200, "statusText": "", diff --git a/docs/development/openapi/dataset/index.html b/docs/development/openapi/dataset/index.html index f218a5d38..dd8cc56f3 100644 --- a/docs/development/openapi/dataset/index.html +++ b/docs/development/openapi/dataset/index.html @@ -34,8 +34,8 @@ FAQ 知识库接口dataset知识库接口
FastGPT OpenAPI 知识库接口
如何获取知识库ID(datasetId) 如何获取文件集合ID(collection_id) 创建训练订单 link
新例子
+Table of Contentsdataset知识库接口
FastGPT OpenAPI 知识库接口
如何获取知识库ID(datasetId) 如何获取文件集合ID(collection_id) 创建训练订单 link
新例子
curl --location --request POST 'http://localhost:3000/api/support/wallet/usage/createTrainingUsage' \ --header 'Authorization: Bearer {{apikey}}' \ --header 'Content-Type: application/json' \ @@ -43,16 +43,16 @@ Table of Contentsdata 为 billId,可用于添加知识库数据时进行账单聚合。
+data 为 billId,可用于添加知识库数据时进行账单聚合。
{ "code": 200, "statusText": "", "message": "", "data": "65112ab717c32018f4156361" }-知识库 link
创建一个知识库 link
+知识库 link
创建一个知识库 link
curl --location --request POST 'http://localhost:3000/api/core/dataset/create' \ --header 'Authorization: Bearer {{authorization}}' \ --header 'Content-Type: application/json' \ @@ -65,23 +65,23 @@ Table of Contents
- parentId - 父级ID,用于构建目录结构。通常可以为 null 或者直接不传。
- type -
dataset或者folder,代表普通知识库和文件夹。不传则代表创建普通知识库。- name - 知识库名(必填)
- intro - 介绍(可选)
- avatar - 头像地址(可选)
- vectorModel - 向量模型(建议传空,用系统默认的)
- agentModel - 文本处理模型(建议传空,用系统默认的)
+
- parentId - 父级ID,用于构建目录结构。通常可以为 null 或者直接不传。
- type -
dataset或者folder,代表普通知识库和文件夹。不传则代表创建普通知识库。- name - 知识库名(必填)
- intro - 介绍(可选)
- avatar - 头像地址(可选)
- vectorModel - 向量模型(建议传空,用系统默认的)
- agentModel - 文本处理模型(建议传空,用系统默认的)
{ "code": 200, "statusText": "", "message": "", "data": "65abc9bd9d1448617cba5e6c" }-获取知识库列表 link
+获取知识库列表 link
curl --location --request POST 'http://localhost:3000/api/core/dataset/list?parentId=' \ --header 'Authorization: Bearer xxxx' \ --header 'Content-Type: application/json' \ --data-raw '{ "parentId":"" }'-
- parentId - 父级ID,传空字符串或者null,代表获取根目录下的知识库
+
- parentId - 父级ID,传空字符串或者null,代表获取根目录下的知识库
{ "code": 200, "statusText": "", @@ -108,12 +108,12 @@ Table of Contents获取知识库详情 link
+获取知识库详情 link
curl --location --request GET 'http://localhost:3000/api/core/dataset/detail?id=6593e137231a2be9c5603ba7' \ --header 'Authorization: Bearer {{authorization}}' \-
- id: 知识库的ID
+
- id: 知识库的ID
{ "code": 200, "statusText": "", @@ -149,21 +149,21 @@ Table of Contents删除一个知识库 link
+删除一个知识库 link
curl --location --request DELETE 'http://localhost:3000/api/core/dataset/delete?id=65abc8729d1448617cba5df6' \ --header 'Authorization: Bearer {{authorization}}' \-
- id: 知识库的ID
+
- id: 知识库的ID
{ "code": 200, "statusText": "", "message": "", "data": null }-集合 link
通用创建参数说明(必看) link
入参
参数 说明 必填 datasetId 知识库ID ✅ parentId: 父级ID,不填则默认为根目录 trainingType 数据处理方式。chunk: 按文本长度进行分割;qa: 问答对提取 ✅ autoIndexes 是否自动生成索引(仅商业版支持) imageIndex 是否自动生成图片索引(仅商业版支持) chunkSettingMode 分块参数模式。auto: 系统默认参数; custom: 手动指定参数 chunkSplitMode 分块拆分模式。size: 按长度拆分; char: 按字符拆分。chunkSettingMode=auto时不生效。 chunkSize 分块大小,默认 1500。chunkSettingMode=auto时不生效。 indexSize 索引大小,默认 512,必须小于索引模型最大token。chunkSettingMode=auto时不生效。 chunkSplitter 自定义最高优先分割符号,除非超出文件处理最大上下文,否则不会进行进一步拆分。chunkSettingMode=auto时不生效。 qaPrompt qa拆分提示词 tags 集合标签(字符串数组) createTime 文件创建时间(Date / String) 出参
- collectionId - 新建的集合ID
- insertLen:插入的块数量
创建一个空的集合 link
+集合 link
通用创建参数说明(必看) link
入参
参数 说明 必填 datasetId 知识库ID ✅ parentId: 父级ID,不填则默认为根目录 trainingType 数据处理方式。chunk: 按文本长度进行分割;qa: 问答对提取 ✅ autoIndexes 是否自动生成索引(仅商业版支持) imageIndex 是否自动生成图片索引(仅商业版支持) chunkSettingMode 分块参数模式。auto: 系统默认参数; custom: 手动指定参数 chunkSplitMode 分块拆分模式。size: 按长度拆分; char: 按字符拆分。chunkSettingMode=auto时不生效。 chunkSize 分块大小,默认 1500。chunkSettingMode=auto时不生效。 indexSize 索引大小,默认 512,必须小于索引模型最大token。chunkSettingMode=auto时不生效。 chunkSplitter 自定义最高优先分割符号,除非超出文件处理最大上下文,否则不会进行进一步拆分。chunkSettingMode=auto时不生效。 qaPrompt qa拆分提示词 tags 集合标签(字符串数组) createTime 文件创建时间(Date / String) 出参
- collectionId - 新建的集合ID
- insertLen:插入的块数量
创建一个空的集合 link
curl --location --request POST 'http://localhost:3000/api/core/dataset/collection/create' \ --header 'Authorization: Bearer {{authorization}}' \ --header 'Content-Type: application/json' \ @@ -176,16 +176,16 @@ Table of Contents
- datasetId: 知识库的ID(必填)
- parentId: 父级ID,不填则默认为根目录
- name: 集合名称(必填)
- type:
- folder:文件夹
- virtual:虚拟集合(手动集合)
- metadata: 元数据(暂时没啥用)
data 为集合的 ID。
+
- datasetId: 知识库的ID(必填)
- parentId: 父级ID,不填则默认为根目录
- name: 集合名称(必填)
- type:
- folder:文件夹
- virtual:虚拟集合(手动集合)
- metadata: 元数据(暂时没啥用)
data 为集合的 ID。
{ "code": 200, "statusText": "", "message": "", "data": "65abcd009d1448617cba5ee1" }-创建一个纯文本集合 link
传入一段文字,创建一个集合,会根据传入的文字进行分割。
+创建一个纯文本集合 link
传入一段文字,创建一个集合,会根据传入的文字进行分割。
curl --location --request POST 'http://localhost:3000/api/core/dataset/collection/create/text' \ --header 'Authorization: Bearer {{authorization}}' \ --header 'Content-Type: application/json' \ @@ -201,7 +201,7 @@ Table of Contents
- text: 原文本
- datasetId: 知识库的ID(必填)
- parentId: 父级ID,不填则默认为根目录
- name: 集合名称(必填)
- metadata: 元数据(暂时没啥用)
data 为集合的 ID。
+
- text: 原文本
- datasetId: 知识库的ID(必填)
- parentId: 父级ID,不填则默认为根目录
- name: 集合名称(必填)
- metadata: 元数据(暂时没啥用)
data 为集合的 ID。
{ "code": 200, "statusText": "", @@ -216,9 +216,9 @@ Table of Contents创建一个链接集合 link
传入一个网络链接,创建一个集合,会先去对应网页抓取内容,再抓取的文字进行分割。
+创建一个链接集合 link
传入一个网络链接,创建一个集合,会先去对应网页抓取内容,再抓取的文字进行分割。
curl --location --request POST 'http://localhost:3000/api/core/dataset/collection/create/link' \ --header 'Authorization: Bearer {{authorization}}' \ --header 'Content-Type: application/json' \ @@ -235,7 +235,7 @@ Table of Contents
- link: 网络链接
- datasetId: 知识库的ID(必填)
- parentId: 父级ID,不填则默认为根目录
- metadata.webPageSelector: 网页选择器,用于指定网页中的哪个元素作为文本(可选)
data 为集合的 ID。
+
- link: 网络链接
- datasetId: 知识库的ID(必填)
- parentId: 父级ID,不填则默认为根目录
- metadata.webPageSelector: 网页选择器,用于指定网页中的哪个元素作为文本(可选)
data 为集合的 ID。
{ "code": 200, "statusText": "", @@ -250,14 +250,14 @@ Table of Contents创建一个文件集合 link
传入一个文件,创建一个集合,会读取文件内容进行分割。目前支持:pdf, docx, md, txt, html, csv。
使用代码上传时,请注意中文 filename 需要进行 encode 处理,否则容易乱码。
+创建一个文件集合 link
传入一个文件,创建一个集合,会读取文件内容进行分割。目前支持:pdf, docx, md, txt, html, csv。
使用代码上传时,请注意中文 filename 需要进行 encode 处理,否则容易乱码。
curl --location --request POST 'http://localhost:3000/api/core/dataset/collection/create/localFile' \ --header 'Authorization: Bearer {{authorization}}' \ --form 'file=@"C:\\Users\\user\\Desktop\\fastgpt测试文件\\index.html"' \ --form 'data="{\"datasetId\":\"6593e137231a2be9c5603ba7\",\"parentId\":null,\"trainingType\":\"chunk\",\"chunkSize\":512,\"chunkSplitter\":\"\",\"qaPrompt\":\"\",\"metadata\":{}}"'-需要使用 POST form-data 的格式上传。包含 file 和 data 两个字段。
- file: 文件
- data: 知识库相关信息(json序列化后传入),参数说明见上方“通用创建参数说明”
data 为集合的 ID。
+需要使用 POST form-data 的格式上传。包含 file 和 data 两个字段。
- file: 文件
- data: 知识库相关信息(json序列化后传入),参数说明见上方“通用创建参数说明”
data 为集合的 ID。
{ "code": 200, "statusText": "", @@ -272,9 +272,9 @@ Table of Contents创建一个API集合 link
传入一个文件的 id,创建一个集合,会读取文件内容进行分割。目前支持:pdf, docx, md, txt, html, csv。
使用代码上传时,请注意中文 filename 需要进行 encode 处理,否则容易乱码。
+创建一个API集合 link
传入一个文件的 id,创建一个集合,会读取文件内容进行分割。目前支持:pdf, docx, md, txt, html, csv。
使用代码上传时,请注意中文 filename 需要进行 encode 处理,否则容易乱码。
curl --location --request POST 'http://localhost:3000/api/core/dataset/collection/create/apiCollection' \ --header 'Authorization: Bearer fastgpt-xxx' \ --header 'Content-Type: application/json' \ @@ -290,7 +290,7 @@ Table of Contents需要使用 POST form-data 的格式上传。包含 file 和 data 两个字段。
- name: 集合名,建议就用文件名,必填。
- apiFileId: 文件的ID,必填。
- datasetId: 知识库的ID(必填)
- parentId: 父级ID,不填则默认为根目录
- trainingType:训练模式(必填)
- chunkSize: 每个 chunk 的长度(可选). chunk模式:100~3000; qa模式: 4000~模型最大token(16k模型通常建议不超过10000)
- chunkSplitter: 自定义最高优先分割符号(可选)
- qaPrompt: qa拆分自定义提示词(可选)
data 为集合的 ID。
+需要使用 POST form-data 的格式上传。包含 file 和 data 两个字段。
- name: 集合名,建议就用文件名,必填。
- apiFileId: 文件的ID,必填。
- datasetId: 知识库的ID(必填)
- parentId: 父级ID,不填则默认为根目录
- trainingType:训练模式(必填)
- chunkSize: 每个 chunk 的长度(可选). chunk模式:100~3000; qa模式: 4000~模型最大token(16k模型通常建议不超过10000)
- chunkSplitter: 自定义最高优先分割符号(可选)
- qaPrompt: qa拆分自定义提示词(可选)
data 为集合的 ID。
{ "code": 200, "statusText": "", @@ -305,9 +305,9 @@ Table of Contents创建一个外部文件库集合(商业版) link
+创建一个外部文件库集合(商业版) link
curl --location --request POST 'http://localhost:3000/api/proApi/core/dataset/collection/create/externalFileUrl' \ --header 'Authorization: Bearer {{authorization}}' \ --header 'User-Agent: Apifox/1.0.0 (https://apifox.com)' \ @@ -326,7 +326,7 @@ Table of Contents
参数 说明 必填 externalFileUrl 文件访问链接(可以是临时链接) ✅ externalFileId 外部文件ID filename 自定义文件名,需要带后缀 createTime 文件创建时间(Date ISO 字符串都 ok) data 为集合的 ID。
+
参数 说明 必填 externalFileUrl 文件访问链接(可以是临时链接) ✅ externalFileId 外部文件ID filename 自定义文件名,需要带后缀 createTime 文件创建时间(Date ISO 字符串都 ok) data 为集合的 ID。
{ "code": 200, "statusText": "", @@ -341,9 +341,9 @@ Table of Contents获取集合列表 link
4.8.19+
+获取集合列表 link
4.8.19+
curl --location --request POST 'http://localhost:3000/api/core/dataset/collection/listV2' \ --header 'Authorization: Bearer {{authorization}}' \ --header 'Content-Type: application/json' \ @@ -365,7 +365,7 @@ Table of Contents
- offset: 偏移量
- pageSize: 每页数量,最大30(选填)
- datasetId: 知识库的ID(必填)
- parentId: 父级Id(选填)
- searchText: 模糊搜索文本(选填)
+
- offset: 偏移量
- pageSize: 每页数量,最大30(选填)
- datasetId: 知识库的ID(必填)
- parentId: 父级Id(选填)
- searchText: 模糊搜索文本(选填)
{ "code": 200, "statusText": "", @@ -425,12 +425,12 @@ Table of Contents获取集合详情 link
+获取集合详情 link
curl --location --request GET 'http://localhost:3000/api/core/dataset/collection/detail?id=65abcfab9d1448617cba5f0d' \ --header 'Authorization: Bearer {{authorization}}' \-
- id: 集合的ID
+
- id: 集合的ID
{ "code": 200, "statusText": "", @@ -469,9 +469,9 @@ Table of Contents修改集合信息 link
通过集合 ID 修改集合信息
+修改集合信息 link
通过集合 ID 修改集合信息
curl --location --request PUT 'http://localhost:3000/api/core/dataset/collection/update' \ --header 'Authorization: Bearer {{authorization}}' \ --header 'Content-Type: application/json' \ @@ -496,29 +496,29 @@ Table of Contents
- id: 集合的ID
- parentId: 修改父级ID(可选)
- name: 修改集合名称(可选)
- tags: 修改集合标签(可选)
- forbid: 修改集合禁用状态(可选)
- createTime: 修改集合创建时间(可选)
+
- id: 集合的ID
- parentId: 修改父级ID(可选)
- name: 修改集合名称(可选)
- tags: 修改集合标签(可选)
- forbid: 修改集合禁用状态(可选)
- createTime: 修改集合创建时间(可选)
{ "code": 200, "statusText": "", "message": "", "data": null }-删除一个集合 link
+删除一个集合 link
curl --location --request DELETE 'http://localhost:3000/api/core/dataset/collection/delete?id=65aa2a64e6cb9b8ccdc00de8' \ --header 'Authorization: Bearer {{authorization}}' \-
- id: 集合的ID
+
- id: 集合的ID
{ "code": 200, "statusText": "", "message": "", "data": null }-数据 link
数据的结构 link
Data结构
字段 类型 说明 必填 teamId String 团队ID ✅ tmbId String 成员ID ✅ datasetId String 知识库ID ✅ collectionId String 集合ID ✅ q String 主要数据 ✅ a String 辅助数据 ✖ fullTextToken String 分词 ✖ indexes Index[] 向量索引 ✅ updateTime Date 更新时间 ✅ chunkIndex Number 分块下表 ✖ Index结构
每组数据的自定义索引最多5个
字段 类型 说明 必填 type String 可选索引类型:default-默认索引; custom-自定义索引; summary-总结索引; question-问题索引; image-图片索引 dataId String 关联的向量ID,变更数据时候传入该 ID,会进行差量更新,而不是全量更新 text String 文本内容 ✅
type不填则默认为custom索引,还会基于 q/a 组成一个默认索引。如果传入了默认索引,则不会额外创建。为集合批量添加添加数据 link
注意,每次最多推送 200 组数据。
+数据 link
数据的结构 link
Data结构
字段 类型 说明 必填 teamId String 团队ID ✅ tmbId String 成员ID ✅ datasetId String 知识库ID ✅ collectionId String 集合ID ✅ q String 主要数据 ✅ a String 辅助数据 ✖ fullTextToken String 分词 ✖ indexes Index[] 向量索引 ✅ updateTime Date 更新时间 ✅ chunkIndex Number 分块下表 ✖ Index结构
每组数据的自定义索引最多5个
字段 类型 说明 必填 type String 可选索引类型:default-默认索引; custom-自定义索引; summary-总结索引; question-问题索引; image-图片索引 dataId String 关联的向量ID,变更数据时候传入该 ID,会进行差量更新,而不是全量更新 text String 文本内容 ✅
type不填则默认为custom索引,还会基于 q/a 组成一个默认索引。如果传入了默认索引,则不会额外创建。为集合批量添加添加数据 link
注意,每次最多推送 200 组数据。
curl --location --request POST 'https://api.fastgpt.in/api/core/dataset/data/pushData' \ --header 'Authorization: Bearer apikey' \ --header 'Content-Type: application/json' \ @@ -546,7 +546,7 @@ Table of Contents
- collectionId: 集合ID(必填)
- trainingType:训练模式(必填)
- prompt: 自定义 QA 拆分提示词,需严格按照模板,建议不要传入。(选填)
- data:(具体数据)
- q: 主要数据(必填)
- a: 辅助数据(选填)
- indexes: 自定义索引(选填)。可以不传或者传空数组,默认都会使用q和a组成一个索引。
+
- collectionId: 集合ID(必填)
- trainingType:训练模式(必填)
- prompt: 自定义 QA 拆分提示词,需严格按照模板,建议不要传入。(选填)
- data:(具体数据)
- q: 主要数据(必填)
- a: 辅助数据(选填)
- indexes: 自定义索引(选填)。可以不传或者传空数组,默认都会使用q和a组成一个索引。
{ "code": 200, "statusText": "", @@ -557,7 +557,7 @@ Table of Contents{{theme}} 里的内容可以换成数据的主题。默认为:它们可能包含多个主题内容
+{{theme}} 里的内容可以换成数据的主题。默认为:它们可能包含多个主题内容
我会给你一段文本,{{theme}},学习它们,并整理学习成果,要求为: 1. 提出最多 25 个问题。 2. 给出每个问题的答案。 @@ -571,9 +571,9 @@ A2: …… 我的文本:"""{{text}}"""-获取集合的数据列表 link
4.8.11+
+获取集合的数据列表 link
4.8.11+
curl --location --request POST 'http://localhost:3000/api/core/dataset/data/v2/list' \ --header 'Authorization: Bearer {{authorization}}' \ --header 'Content-Type: application/json' \ @@ -593,7 +593,7 @@ A2: "collectionId":"65abd4ac9d1448617cba6171", "searchText":"" }'-
- offset: 偏移量(选填)
- pageSize: 每页数量,最大30(选填)
- collectionId: 集合的ID(必填)
- searchText: 模糊搜索词(选填)
+
- offset: 偏移量(选填)
- pageSize: 每页数量,最大30(选填)
- collectionId: 集合的ID(必填)
- searchText: 模糊搜索词(选填)
{ "code": 200, "statusText": "", @@ -620,12 +620,12 @@ A2: "total": 63 } }-获取单条数据详情 link
+获取单条数据详情 link
curl --location --request GET 'http://localhost:3000/api/core/dataset/data/detail?id=65abd4b29d1448617cba61db' \ --header 'Authorization: Bearer {{authorization}}' \-
- id: 数据的id
+
- id: 数据的id
{ "code": 200, "statusText": "", @@ -651,9 +651,9 @@ A2: "canWrite": true } }-修改单条数据 link
+修改单条数据 link
curl --location --request PUT 'http://localhost:3000/api/core/dataset/data/update' \ --header 'Authorization: Bearer {{authorization}}' \ --header 'Content-Type: application/json' \ @@ -678,28 +678,28 @@ A2: } ] }'-
- dataId: 数据的id
- q: 主要数据(选填)
- a: 辅助数据(选填)
- indexes: 自定义索引(选填),类型参考
为集合批量添加添加数据。如果创建时候有自定义索引,+
- dataId: 数据的id
- q: 主要数据(选填)
- a: 辅助数据(选填)
- indexes: 自定义索引(选填),类型参考
为集合批量添加添加数据。如果创建时候有自定义索引,{ "code": 200, "statusText": "", "message": "", "data": null }-删除单条数据 link
+删除单条数据 link
curl --location --request DELETE 'http://localhost:3000/api/core/dataset/data/delete?id=65abd4b39d1448617cba624d' \ --header 'Authorization: Bearer {{authorization}}' \-
- id: 数据的id
+
- id: 数据的id
{ "code": 200, "statusText": "", "message": "", "data": "success" }-搜索测试 link
+搜索测试 link
curl --location --request POST 'https://api.fastgpt.in/api/core/dataset/searchTest' \ --header 'Authorization: Bearer fastgpt-xxxxx' \ --header 'Content-Type: application/json' \ @@ -715,7 +715,7 @@ A2: "datasetSearchExtensionModel": "gpt-4o-mini", "datasetSearchExtensionBg": "" }'-
- datasetId - 知识库ID
- text - 需要测试的文本
- limit - 最大 tokens 数量
- similarity - 最低相关度(0~1,可选)
- searchMode - 搜索模式:embedding | fullTextRecall | mixedRecall
- usingReRank - 使用重排
- datasetSearchUsingExtensionQuery - 使用问题优化
- datasetSearchExtensionModel - 问题优化模型
- datasetSearchExtensionBg - 问题优化背景描述
返回 top k 结果, limit 为最大 Tokens 数量,最多 20000 tokens。
+
- datasetId - 知识库ID
- text - 需要测试的文本
- limit - 最大 tokens 数量
- similarity - 最低相关度(0~1,可选)
- searchMode - 搜索模式:embedding | fullTextRecall | mixedRecall
- usingReRank - 使用重排
- datasetSearchUsingExtensionQuery - 使用问题优化
- datasetSearchExtensionModel - 问题优化模型
- datasetSearchExtensionBg - 问题优化背景描述
返回 top k 结果, limit 为最大 Tokens 数量,最多 20000 tokens。
{ "code": 200, "statusText": "", diff --git a/docs/development/openapi/share/index.html b/docs/development/openapi/share/index.html index 3ba914672..705a32179 100644 --- a/docs/development/openapi/share/index.html +++ b/docs/development/openapi/share/index.html @@ -43,43 +43,43 @@ Table of Contents
FastGPT将会判断success是否为true决定是允许用户继续操作。message与msg是等同的,你可以选择返回其中一个,当success不为true时,将会提示这个错误。
uid是用户的唯一凭证,将会用于拉取对话记录以及保存对话记录。可参考下方实践案例。触发流程 link
配置教程 link
1. 配置身份校验地址 link
配置校验地址后,在每次分享链接使用时,都会向对应的地址发起校验和上报请求。
🤖
这里仅需配置根地址,无需具体到完整请求路径。
2. 分享链接中增加额外 query link
在分享链接的地址中,增加一个额外的参数: authToken。例如:
原始的链接:
https://share.tryfastgpt.ai/chat/share?shareId=648aaf5ae121349a16d62192完整链接:
https://share.tryfastgpt.ai/chat/share?shareId=648aaf5ae121349a16d62192&authToken=userid12345这个
authToken通常是你系统生成的用户唯一凭证(Token之类的)。FastGPT 会在鉴权接口的body中携带 token={{authToken}} 的参数。3. 编写聊天初始化校验接口 link
+
FastGPT将会判断success是否为true决定是允许用户继续操作。message与msg是等同的,你可以选择返回其中一个,当success不为true时,将会提示这个错误。
uid是用户的唯一凭证,将会用于拉取对话记录以及保存对话记录。可参考下方实践案例。触发流程 link
配置教程 link
1. 配置身份校验地址 link
配置校验地址后,在每次分享链接使用时,都会向对应的地址发起校验和上报请求。
🤖
这里仅需配置根地址,无需具体到完整请求路径。
2. 分享链接中增加额外 query link
在分享链接的地址中,增加一个额外的参数: authToken。例如:
原始的链接:
https://share.tryfastgpt.ai/chat/share?shareId=648aaf5ae121349a16d62192完整链接:
https://share.tryfastgpt.ai/chat/share?shareId=648aaf5ae121349a16d62192&authToken=userid12345这个
authToken通常是你系统生成的用户唯一凭证(Token之类的)。FastGPT 会在鉴权接口的body中携带 token={{authToken}} 的参数。3. 编写聊天初始化校验接口 link
curl --location --request POST '{{host}}/shareAuth/init' \ --header 'Content-Type: application/json' \ --data-raw '{ "token": "{{authToken}}" }'-+{ "success": true, "data": { "uid": "用户唯一凭证" } }-系统会拉取该分享链接下,uid 为 username123 的对话记录。
+系统会拉取该分享链接下,uid 为 username123 的对话记录。
{ "success": false, "message": "身份错误", }-4. 编写对话前校验接口 link
+4. 编写对话前校验接口 link
curl --location --request POST '{{host}}/shareAuth/start' \ --header 'Content-Type: application/json' \ --data-raw '{ "token": "{{authToken}}", "question": "用户问题", }'-+{ "success": true, "data": { "uid": "用户唯一凭证" } }-+{ "success": false, "message": "身份验证失败", @@ -202,9 +202,9 @@ Table of Contents实践案例 link
我们以Laf作为服务器为例,简单展示这 3 个接口的使用方式。
1. 创建3个Laf接口 link
diff --git a/docs/development/upgrading/index.xml b/docs/development/upgrading/index.xml index 80cde3745..13fe3cd42 100644 --- a/docs/development/upgrading/index.xml +++ b/docs/development/upgrading/index.xml @@ -9,7 +9,7 @@ docker-compose pull docker-compose up -d 执行升级初始化脚本 link镜像 QA link为什么需要执行升级脚本 link数据表出现大幅度变更,无法通过设置默认值,或复杂度较高时,会通过升级脚本来更新部分数据表字段。 严格按初始化步骤进行操作,不会造成旧数据丢失。但在初始化过程中,如果数据量大,需要初始化的时间较长,这段时间可能会造成服务无法正常使用。 {{host}} 是什么 link{{}} 代表变量, {{host}}代表一个名为 host 的变量。指的是你服务器的域名或 IP。 Sealos 中,你可以在下图中找到你的域名: -如何获取 rootkey link从docker-compose.yml中的environment中获取,对应的是ROOT_KEY的值。这个接口中,我们设置了
token必须等于fastgpt才能通过校验。(实际生产中不建议固定写死)+实践案例 link
我们以Laf作为服务器为例,简单展示这 3 个接口的使用方式。
1. 创建3个Laf接口 link
这个接口中,我们设置了
token必须等于fastgpt才能通过校验。(实际生产中不建议固定写死)import cloud from '@lafjs/cloud' export default async function (ctx: FunctionContext) { @@ -217,7 +217,7 @@ export default async function (ctx: FunctionContext) { return { success: false,message:"身份错误" } }-这个接口中,我们设置了
token必须等于fastgpt才能通过校验。并且如果问题中包含了你字,则会报错,用于模拟敏感校验。+这个接口中,我们设置了
token必须等于fastgpt才能通过校验。并且如果问题中包含了你字,则会报错,用于模拟敏感校验。import cloud from '@lafjs/cloud' export default async function (ctx: FunctionContext) { @@ -235,7 +235,7 @@ export default async function (ctx: FunctionContext) { return { success: true, data: { uid: "user1" } } }-结果上报接口可自行进行逻辑处理。
+结果上报接口可自行进行逻辑处理。
import cloud from '@lafjs/cloud' export default async function (ctx: FunctionContext) { diff --git a/docs/development/upgrading/496/index.html b/docs/development/upgrading/496/index.html index 6028f4521..4391737ee 100644 --- a/docs/development/upgrading/496/index.html +++ b/docs/development/upgrading/496/index.html @@ -34,7 +34,7 @@ FAQ V4.9.6(进行中)upgradeV4.9.6(进行中)
FastGPT V4.9.6 更新说明
🚀 新增内容 link
- 以 MCP 方式对外提供应用调用。
- 支持以 MCP SSE 协议创建工具。
- 批量执行节点支持交互节点,可实现每一轮循环都人工参与。
- 增加工作台二级菜单,合并工具箱。
- 增加 grok3、GPT4.1、Gemini2.5 模型系统配置。
⚙️ 优化 link
- 工作流数据类型转化鲁棒性和兼容性增强。
- Python sandbox 代码,支持大数据输入。
- 路径组件支持配置最后一步是否可点击。
- 知识库工具调用结果,自动补充图片域名。
- Github action runner 升级成 unbuntu24
🐛 修复 link
- 修复子工作流包含交互节点时,未成功恢复子工作流所有数据。
- completion v1 接口,未接受 interactive 参数,导致 API 调用失败。
V4.9.6(进行中) https://doc.tryfastgpt.ai/docs/development/upgrading/496/Mon, 01 Jan 0001 00:00:00 +0000 https://doc.tryfastgpt.ai/docs/development/upgrading/496/ 🚀 新增内容 link 以 MCP 方式对外提供应用调用。 支持以 MCP SSE 协议创建工具。 批量执行节点支持交互节点,可实现每一轮循环都人工参与。 增加工作台二级菜单,合并工具箱。 增加 grok3、GPT4.1、Gemini2.5 模型系统配置。 ⚙️ 优化 link 工作流数据类型转化鲁棒性和兼容性增强。 Python sandbox 代码,支持大数据输入。 路径组件支持配置最后一步是否可点击。 知识库工具调用结果,自动补充图片域名。 Github action runner 升级成 unbuntu24 🐛 修复 link 修复子工作流包含交互节点时,未成功恢复子工作流所有数据。 completion v1 接口,未接受 interactive 参数,导致 API 调用失败。 V4.9.5 https://doc.tryfastgpt.ai/docs/development/upgrading/495/Mon, 01 Jan 0001 00:00:00 +0000 https://doc.tryfastgpt.ai/docs/development/upgrading/495/ 升级指南 link1. 做好数据备份 link2. 更新镜像 tag link 更新 FastGPT 镜像 tag: v4.9.5 更新 FastGPT 商业版镜像 tag: v4.9.5 Sandbox 无需更新 AIProxy 无需更新 🚀 新增内容 link 团队成员权限细分,可分别控制是否可创建在根目录应用/知识库以及 API Key 支持交互节点在嵌套工作流中使用。 团队成员操作日志。 用户输入节点支持多选框。 ⚙️ 优化 link 繁体中文翻译。 Arm 镜像打包 🐛 修复 link password 检测规则错误。 分享链接无法隐藏知识库检索结果。 IOS 低版本正则兼容问题。 修复问答提取队列错误后,计数器未清零问题,导致问答提取队列失效。 Debug 模式交互节点下一步可能造成死循环。 V4.9.4 https://doc.tryfastgpt.ai/docs/development/upgrading/494/Mon, 01 Jan 0001 00:00:00 +0000 https://doc.tryfastgpt.ai/docs/development/upgrading/494/ 升级指南 link1. 做好数据备份 link2. 安装 Redis link docker 部署的用户,参考最新的 docker-compose.yml 文件增加 Redis 配置。增加一个 redis 容器,并配置fastgpt,fastgpt-pro的环境变量,增加 REDIS_URL 环境变量。 Sealos 部署的用户,在数据库里新建一个redis数据库,并复制内网地址的 connection 作为 redis 的链接串。然后配置fastgpt,fastgpt-pro的环境变量,增加 REDIS_URL 环境变量。 3. 更新镜像 tag link 更新 FastGPT 镜像 tag: v4.9.4 更新 FastGPT 商业版镜像 tag: v4.9.4 Sandbox 无需更新 AIProxy 无需更新 4. 执行升级脚本 link该脚本仅需商业版用户执行。 +如何获取 rootkey link从docker-compose.yml中的environment中获取,对应的是ROOT_KEY的值。 V4.9.6(进行中) https://doc.tryfastgpt.ai/docs/development/upgrading/496/Mon, 01 Jan 0001 00:00:00 +0000 https://doc.tryfastgpt.ai/docs/development/upgrading/496/ 🚀 新增内容 link 以 MCP 方式对外提供应用调用。 支持以 MCP SSE 协议创建工具。 批量执行节点支持交互节点,可实现每一轮循环都人工参与。 增加工作台二级菜单,合并工具箱。 增加 grok3、GPT4.1、Gemini2.5 模型系统配置。 ⚙️ 优化 link 工作流数据类型转化鲁棒性和兼容性增强。 Python sandbox 代码,支持大数据输入。 路径组件支持配置最后一步是否可点击。 知识库工具调用结果,自动补充图片域名。 Github action runner 升级成 unbuntu24 去除飞书、公众号等三方渠道,回复时,可能前后多一个换行的问题。 🐛 修复 link 修复子工作流包含交互节点时,未成功恢复子工作流所有数据。 completion v1 接口,未接受 interactive 参数,导致 API 调用失败。 V4.9.5 https://doc.tryfastgpt.ai/docs/development/upgrading/495/Mon, 01 Jan 0001 00:00:00 +0000 https://doc.tryfastgpt.ai/docs/development/upgrading/495/ 升级指南 link1. 做好数据备份 link2. 更新镜像 tag link 更新 FastGPT 镜像 tag: v4.9.5 更新 FastGPT 商业版镜像 tag: v4.9.5 Sandbox 无需更新 AIProxy 无需更新 🚀 新增内容 link 团队成员权限细分,可分别控制是否可创建在根目录应用/知识库以及 API Key 支持交互节点在嵌套工作流中使用。 团队成员操作日志。 用户输入节点支持多选框。 ⚙️ 优化 link 繁体中文翻译。 Arm 镜像打包 🐛 修复 link password 检测规则错误。 分享链接无法隐藏知识库检索结果。 IOS 低版本正则兼容问题。 修复问答提取队列错误后,计数器未清零问题,导致问答提取队列失效。 Debug 模式交互节点下一步可能造成死循环。 V4.9.4 https://doc.tryfastgpt.ai/docs/development/upgrading/494/Mon, 01 Jan 0001 00:00:00 +0000 https://doc.tryfastgpt.ai/docs/development/upgrading/494/ 升级指南 link1. 做好数据备份 link2. 安装 Redis link docker 部署的用户,参考最新的 docker-compose.yml 文件增加 Redis 配置。增加一个 redis 容器,并配置fastgpt,fastgpt-pro的环境变量,增加 REDIS_URL 环境变量。 Sealos 部署的用户,在数据库里新建一个redis数据库,并复制内网地址的 connection 作为 redis 的链接串。然后配置fastgpt,fastgpt-pro的环境变量,增加 REDIS_URL 环境变量。 3. 更新镜像 tag link 更新 FastGPT 镜像 tag: v4.9.4 更新 FastGPT 商业版镜像 tag: v4.9.4 Sandbox 无需更新 AIProxy 无需更新 4. 执行升级脚本 link该脚本仅需商业版用户执行。 从任意终端,发起 1 个 HTTP 请求。其中 {{rootkey}} 替换成环境变量里的 rootkey;{{host}} 替换成FastGPT 域名。 curl --location --request POST 'https://{{host}}/api/admin/initv494' \ --header 'rootkey: {{rootkey}}' \ --header 'Content-Type: application/json' 脚本功能 V4.9.3 https://doc.tryfastgpt.ai/docs/development/upgrading/493/Mon, 01 Jan 0001 00:00:00 +0000 https://doc.tryfastgpt.ai/docs/development/upgrading/493/ 更新指南 link1. 做好数据库备份 link2. 更新镜像 link 更新 FastGPT 镜像 tag: v4.9.3 更新 FastGPT 商业版镜像 tag: v4.9.3 Sandbox 镜像tag: v4.9.3 AIProxy 镜像tag: v0.1.5 🚀 新增内容 link 工作流 debug 模式支持交互节点。 代码运行支持 Python3 代码。 🐛 修复 link 工作流格式转化异常。 V4.9.2 https://doc.tryfastgpt.ai/docs/development/upgrading/492/Mon, 01 Jan 0001 00:00:00 +0000 https://doc.tryfastgpt.ai/docs/development/upgrading/492/ 更新指南 link可直接升级v4.9.3,v4.9.2存在一个工作流数据类型转化错误。 1. 做好数据库备份 link2. SSO 迁移 link使用了 SSO 或成员同步的商业版用户,并且是对接钉钉、企微的,需要迁移已有的 SSO 相关配置: diff --git a/docs/guide/admin/sso/index.html b/docs/guide/admin/sso/index.html index 97de5919f..9428f7863 100644 --- a/docs/guide/admin/sso/index.html +++ b/docs/guide/admin/sso/index.html @@ -160,12 +160,12 @@ Table of Contents 标准接口文档 link
以下是 FastGPT-pro 中,SSO 和成员同步的标准接口文档,如果需要对接非标准系统,可以参考该章节进行开发。
FastGPT 提供如下标准接口支持:
- https://example.com/login/oauth/getAuthURL 获取鉴权重定向地址
- https://example.com/login/oauth/getUserInfo?code=xxxxx 消费 code,换取用户信息
- https://example.com/org/list 获取组织列表
- https://example.com/user/list 获取成员列表
获取 SSO 登录重定向地址 link
返回一个重定向登录地址,fastgpt 会自动重定向到该地址。redirect_uri 会自动拼接到该地址的 query中。
diff --git a/docs/guide/dashboard/workflow/http/index.html b/docs/guide/dashboard/workflow/http/index.html index 297b5ae54..26ece9a87 100644 --- a/docs/guide/dashboard/workflow/http/index.html +++ b/docs/guide/dashboard/workflow/http/index.html @@ -34,9 +34,9 @@ FAQ+标准接口文档 link
以下是 FastGPT-pro 中,SSO 和成员同步的标准接口文档,如果需要对接非标准系统,可以参考该章节进行开发。
FastGPT 提供如下标准接口支持:
- https://example.com/login/oauth/getAuthURL 获取鉴权重定向地址
- https://example.com/login/oauth/getUserInfo?code=xxxxx 消费 code,换取用户信息
- https://example.com/org/list 获取组织列表
- https://example.com/user/list 获取成员列表
获取 SSO 登录重定向地址 link
返回一个重定向登录地址,fastgpt 会自动重定向到该地址。redirect_uri 会自动拼接到该地址的 query中。
curl -X GET "https://redict.example/login/oauth/getAuthURL?redirect_uri=xxx&state=xxxx" \ -H "Authorization: Bearer your_token_here" \ -H "Content-Type: application/json"-成功:
+成功:
{ "success": true, "message": "", @@ -177,12 +177,12 @@ Table of ContentsSSO 获取用户信息 link
该接口接受一个 code 参数作为鉴权,消费 code 返回用户信息。
+SSO 获取用户信息 link
该接口接受一个 code 参数作为鉴权,消费 code 返回用户信息。
curl -X GET "https://oauth.example/login/oauth/getUserInfo?code=xxxxxx" \ -H "Authorization: Bearer your_token_here" \ -H "Content-Type: application/json"-成功:
+成功:
{ "success": true, "message": "", @@ -199,12 +199,12 @@ Table of Contents获取组织 link
+获取组织 link
curl -X GET "https://example.com/org/list" \ -H "Authorization: Bearer your_token_here" \ -H "Content-Type: application/json"-⚠️注意:只能存在一个根部门。如果你的系统中存在多个根部门,需要先进行处理,加一个虚拟的根部门。返回值类型:
+⚠️注意:只能存在一个根部门。如果你的系统中存在多个根部门,需要先进行处理,加一个虚拟的根部门。返回值类型:
type OrgListResponseType = { message?: string; // 报错信息 success: boolean; @@ -231,12 +231,12 @@ Table of Contents获取成员 link
+获取成员 link
curl -X GET "https://example.com/user/list" \ -H "Authorization: Bearer your_token_here" \ -H "Content-Type: application/json"-返回值类型:
+返回值类型:
type UserListResponseListType = { message?: string; // 报错信息 success: boolean; diff --git a/docs/guide/dashboard/index.xml b/docs/guide/dashboard/index.xml index f61530f9e..b11170644 100644 --- a/docs/guide/dashboard/index.xml +++ b/docs/guide/dashboard/index.xml @@ -1,4 +1,4 @@ -工作台 on FastGPT https://doc.tryfastgpt.ai/docs/guide/dashboard/Recent content in 工作台 on FastGPT Hugo -- gohugo.io zh-cn 简易模式 https://doc.tryfastgpt.ai/docs/guide/dashboard/basic-mode/Mon, 01 Jan 0001 00:00:00 +0000 https://doc.tryfastgpt.ai/docs/guide/dashboard/basic-mode/ 工作流&插件 https://doc.tryfastgpt.ai/docs/guide/dashboard/intro/Mon, 01 Jan 0001 00:00:00 +0000 https://doc.tryfastgpt.ai/docs/guide/dashboard/intro/ FastGPT 从 V4 版本开始采用新的交互方式来构建 AI 应用。使用了 Flow 节点编排(工作流)的方式来实现复杂工作流,提高可玩性和扩展性。但同时也提高了上手的门槛,有一定开发背景的用户使用起来会比较容易。 + 工作台 on FastGPT https://doc.tryfastgpt.ai/docs/guide/dashboard/Recent content in 工作台 on FastGPT Hugo -- gohugo.io zh-cn 简易模式 https://doc.tryfastgpt.ai/docs/guide/dashboard/basic-mode/Mon, 01 Jan 0001 00:00:00 +0000 https://doc.tryfastgpt.ai/docs/guide/dashboard/basic-mode/ 工作流&插件 https://doc.tryfastgpt.ai/docs/guide/dashboard/intro/Mon, 01 Jan 0001 00:00:00 +0000 https://doc.tryfastgpt.ai/docs/guide/dashboard/intro/ FastGPT 从 V4.0 版本开始采用新的交互方式来构建 AI 应用。使用了 Flow 节点编排(工作流)的方式来实现复杂工作流,提高可玩性和扩展性。但同时也提高了上手的门槛,有一定开发背景的用户使用起来会比较容易。 查看视频教程 什么是节点? link在程序中,节点可以理解为一个个 Function 或者接口。可以理解为它就是一个步骤。将多个节点一个个拼接起来,即可一步步的去实现最终的 AI 输出。 如下图,这是一个最简单的 AI 对话。它由用流程开始和 AI 对话节点组成。 diff --git a/docs/guide/dashboard/intro/index.html b/docs/guide/dashboard/intro/index.html index 5b498e8d5..a2d4f5402 100644 --- a/docs/guide/dashboard/intro/index.html +++ b/docs/guide/dashboard/intro/index.html @@ -34,7 +34,7 @@ FAQ 工作流&插件extension工作流&插件
快速了解 FastGPT 工作流和插件的使用
FastGPT 从 V4 版本开始采用新的交互方式来构建 AI 应用。使用了 Flow 节点编排(工作流)的方式来实现复杂工作流,提高可玩性和扩展性。但同时也提高了上手的门槛,有一定开发背景的用户使用起来会比较容易。
什么是节点? link
在程序中,节点可以理解为一个个 Function 或者接口。可以理解为它就是一个步骤。将多个节点一个个拼接起来,即可一步步的去实现最终的 AI 输出。
如下图,这是一个最简单的 AI 对话。它由用流程开始和 AI 对话节点组成。
执行流程如下:
- 用户输入问题后,【流程开始】节点执行,用户问题被保存。
- 【AI 对话】节点执行,此节点有两个必填参数“聊天记录” “用户问题”,聊天记录的值是默认输入的6条,表示此模块上下文长度。用户问题选择的是【流程开始】模块中保存的用户问题。
- 【AI 对话】节点根据传入的聊天记录和用户问题,调用对话接口,从而实现回答。
节点分类 link
从功能上,节点可以分为 2 类:
- 系统节点:用户引导(配置一些对话框信息)、用户问题(流程入口)。
- 功能节点:知识库搜索、AI 对话等剩余节点。(这些节点都有输入和输出,可以自由组合)。
节点的组成 link
每个节点会包含 3 个核心部分:输入、输出和触发器。
- AI模型、提示词、聊天记录、用户问题,知识库引用为输入,节点的输入可以是手动输入也可以是变量引用,变量引用的范围包括“全局变量”和之前任意一个节点的输出。
- 新的上下文和AI回复内容为输出,输出可以被之后任意节点变量引用。
- 节点的上下左右有四个“触发器”可以被用来连接,被连接的节点按顺序决定是否执行。
重点 - 工作流是如何运行的 link
FastGPT的工作流从【流程开始】节点开始执行,可以理解为从用户输入问题开始,没有固定的出口,是以节点运行结束作为出口,如果在一个轮调用中,所有节点都不再运行,则工作流结束。
下面我们来看下,工作流是如何运行的,以及每个节点何时被触发执行。
如上图所示节点会“被连接”也会“连接其他节点”,我们称“被连接”的那根线为前置线,“连接其他节点的线”为后置线。上图例子中【知识库搜索】模块左侧有一根前置线,右侧有一根后置线。而【AI对话】节点只有左侧一根前置线。
FastGPT工作流中的线有以下几种状态:
waiting:被连接的节点等待执行。active:被连接的节点可以执行。skip:被连接的节点不需要执行跳过。节点执行的原则:
- 判断前置线中有没有状态为
waiting的,如果有则等待。- 判断前置线中状态有没有状态为
active如果有则执行。- 如果前置线中状态即没有
waiting也没有active则认为此节点需要跳过。- 节点执行完毕后,需要根据实际情况更改后置线的状态为
active或skip并且更改前置线状态为waiting等待下一轮执行。让我们看一下上面例子的执行过程:
- 【流程开始】节点执行完毕,更改后置线为
active。- 【知识库搜索】节点判断前置线状态为
active开始执行,执行完毕后更改后置线状态为active前置线状态为waiting。- 【AI对话】节点判断前置线状态为
active开始执行,流程执行结束。如何连接节点 link
- 为了方便连接,FastGPT 每个节点的上下左右都有连接点,左和上是前置线连接点,右和下是后置线连接点。
- 可以点击连接线中间的 x 来删除连接线。
- 可以左键点击选中连接线
如何阅读? link
- 建议从左往右阅读。
- 从 用户问题 节点开始。用户问题节点,代表的是用户发送了一段文本,触发任务开始。
- 关注【AI 对话】和【指定回复】节点,这两个节点是输出答案的地方。
FAQ link
想合并多个输出结果怎么实现? link
- 文本加工,可以对字符串进行合并。
- 知识库搜索合并,可以合并多个知识库搜索结果
- 其他结果,无法直接合并,可以考虑传入到
HTTP节点中进行合并,使用[Laf](https://laf.run/)可以快速实现一个无服务器HTTP接口。 HTTP 请求httpHTTP 请求
FastGPT HTTP 模块介绍
特点 link
- 可重复添加
- 手动配置
- 触发执行
- 核中核模块
介绍 link
HTTP 模块会向对应的地址发送一个
HTTP请求,实际操作与 Postman 和 ApiFox 这类直流工具使用差不多。
- Params 为路径请求参数,GET请求中用的居多。
- Body 为请求体,POST/PUT请求中用的居多。
- Headers 为请求头,用于传递一些特殊的信息。
- 自定义变量中可以接收前方节点的输出作为变量
- 3 种数据中均可以通过
{{}}来引用变量。- url 也可以通过
{{}}来引用变量。- 变量来自于
全局变量、系统变量、前方节点输出参数结构 link
系统变量说明 link
你可以将鼠标放置在
请求参数旁边的问号中,里面会提示你可用的变量。
- appId: 应用的ID
- chatId: 当前对话的ID,测试模式下不存在。
- responseChatItemId: 当前对话中,响应的消息ID,测试模式下不存在。
- variables: 当前对话的全局变量。
- cTime: 当前时间。
- histories: 历史记录(默认最多取10条,无法修改长度)
Params, Headers link
不多描述,使用方法和Postman, ApiFox 基本一致。
可通过 {{key}} 来引入变量。例如:
key value appId {{appId}} Authorization Bearer {{token}} Body link
只有特定请求类型下会生效。
可以写一个
自定义的 Json,并通过 {{key}} 来引入变量。例如:+Table of ContentshttpHTTP 请求
FastGPT HTTP 模块介绍
特点 link
- 可重复添加
- 手动配置
- 触发执行
- 核中核模块
介绍 link
HTTP 模块会向对应的地址发送一个
HTTP请求,实际操作与 Postman 和 ApiFox 这类直流工具使用差不多。
- Params 为路径请求参数,GET请求中用的居多。
- Body 为请求体,POST/PUT请求中用的居多。
- Headers 为请求头,用于传递一些特殊的信息。
- 自定义变量中可以接收前方节点的输出作为变量
- 3 种数据中均可以通过
{{}}来引用变量。- url 也可以通过
{{}}来引用变量。- 变量来自于
全局变量、系统变量、前方节点输出参数结构 link
系统变量说明 link
你可以将鼠标放置在
请求参数旁边的问号中,里面会提示你可用的变量。
- appId: 应用的ID
- chatId: 当前对话的ID,测试模式下不存在。
- responseChatItemId: 当前对话中,响应的消息ID,测试模式下不存在。
- variables: 当前对话的全局变量。
- cTime: 当前时间。
- histories: 历史记录(默认最多取10条,无法修改长度)
Params, Headers link
不多描述,使用方法和Postman, ApiFox 基本一致。
可通过 {{key}} 来引入变量。例如:
key value appId {{appId}} Authorization Bearer {{token}} Body link
只有特定请求类型下会生效。
可以写一个
自定义的 Json,并通过 {{key}} 来引入变量。例如:{ "string": "字符串", "number": 123, @@ -47,7 +47,7 @@ Table of Contents注意,在 Body 中,你如果引用
字符串,则需要加上"",例如:"{{string}}"。+注意,在 Body 中,你如果引用
字符串,则需要加上"",例如:"{{string}}"。{ "string": "{{string}}", "token": "Bearer {{string}}", @@ -57,7 +57,7 @@ Table of Contents+{ "string": "字符串", "token": "Bearer 字符串", @@ -70,8 +70,8 @@ Table of Contents如何获取返回值 link
从图中可以看出,FastGPT可以添加多个返回值,这个返回值并不代表接口的返回值,而是代表
如何解析接口返回值,可以通过JSON path的语法,来提取接口响应的值。语法可以参考: https://github.com/JSONPath-Plus/JSONPath?tab=readme-ov-file
+如何获取返回值 link
从图中可以看出,FastGPT可以添加多个返回值,这个返回值并不代表接口的返回值,而是代表
如何解析接口返回值,可以通过JSON path的语法,来提取接口响应的值。语法可以参考: https://github.com/JSONPath-Plus/JSONPath?tab=readme-ov-file
{ "message": "测试", "data":{ @@ -89,7 +89,7 @@ Table of Contents+{ "$.message": "测试", "$.data.user": { "name": "xxx", "age": 12 }, diff --git a/docs/guide/knowledge_base/api_dataset/index.html b/docs/guide/knowledge_base/api_dataset/index.html index e2f3c3c6b..a522db37c 100644 --- a/docs/guide/knowledge_base/api_dataset/index.html +++ b/docs/guide/knowledge_base/api_dataset/index.html @@ -50,8 +50,8 @@ type FileListItem = { updateTime: Date; createTime: Date; }-1. 获取文件树 link
- parentId - 父级 id,可选,或者 null。
- searchKey - 检索词,可选
+1. 获取文件树 link
- parentId - 父级 id,可选,或者 null。
- searchKey - 检索词,可选
curl --location --request POST '{{baseURL}}/v1/file/list' \ --header 'Authorization: Bearer {{authorization}}' \ --header 'Content-Type: application/json' \ @@ -59,7 +59,7 @@ type FileListItem = { "parentId": null, "searchKey": "" }'-+{ "code": 200, "success": true, @@ -75,12 +75,12 @@ type FileListItem = { } ] }-2. 获取单个文件内容(文本内容或访问链接) link
+2. 获取单个文件内容(文本内容或访问链接) link
curl --location --request GET '{{baseURL}}/v1/file/content?id=xx' \ --header 'Authorization: Bearer {{authorization}}'-+{ "code": 200, "success": true, @@ -91,11 +91,11 @@ type FileListItem = { "previewUrl": "xxxx" } }-
- title - 文件标题。
- content - 文件内容,直接拿来用。
- previewUrl - 文件链接,系统会请求该地址获取文件内容。
content和previewUrl二选一返回,如果同时返回则content优先级更高,返回previewUrl时,则会访问该链接进行文档内容读取。3. 获取文件阅读链接(用于查看原文) link
id 为文件的 id。
+
- title - 文件标题。
- content - 文件内容,直接拿来用。
- previewUrl - 文件链接,系统会请求该地址获取文件内容。
content和previewUrl二选一返回,如果同时返回则content优先级更高,返回previewUrl时,则会访问该链接进行文档内容读取。3. 获取文件阅读链接(用于查看原文) link
id 为文件的 id。
curl --location --request GET '{{baseURL}}/v1/file/read?id=xx' \ --header 'Authorization: Bearer {{authorization}}'-+{ "code": 200, "success": true, diff --git a/index.xml b/index.xml index 293bf5d4a..be093fe6a 100644 --- a/index.xml +++ b/index.xml @@ -61,7 +61,7 @@ appId - 应用ID searchKey - 搜索关键字上传的文件如何存储在数据库中 linkFastGPT 的对话记录存储结构中,role=user 的消息,value 值会按以下结构存储: type UserChatItemValueItemType = { type: 'text' | 'file' text?: { content: string; }; file?: { type: 'img' | 'doc' name?: string; url: string; }; }; 也就是说,上传的图片和文档,都会以 URL 的形式存储在库中,并不会存储解析后的文档内容。 图片如何处理 link文档解析节点不会处理图片,图片链接会被过滤,图片识别请直接使用支持图片识别的 LLM 模型。 -文档解析节点如何工作 link文档解析依赖文档解析节点,这个节点会接收一个array<string>类型的输入,对应的是文件输入的 URL;输出的是一个string,对应的是文档解析后的内容。 简易模式 https://doc.tryfastgpt.ai/docs/guide/dashboard/basic-mode/Mon, 01 Jan 0001 00:00:00 +0000 https://doc.tryfastgpt.ai/docs/guide/dashboard/basic-mode/ 工作流&插件 https://doc.tryfastgpt.ai/docs/guide/dashboard/intro/Mon, 01 Jan 0001 00:00:00 +0000 https://doc.tryfastgpt.ai/docs/guide/dashboard/intro/ FastGPT 从 V4 版本开始采用新的交互方式来构建 AI 应用。使用了 Flow 节点编排(工作流)的方式来实现复杂工作流,提高可玩性和扩展性。但同时也提高了上手的门槛,有一定开发背景的用户使用起来会比较容易。 +文档解析节点如何工作 link文档解析依赖文档解析节点,这个节点会接收一个array<string>类型的输入,对应的是文件输入的 URL;输出的是一个string,对应的是文档解析后的内容。 简易模式 https://doc.tryfastgpt.ai/docs/guide/dashboard/basic-mode/Mon, 01 Jan 0001 00:00:00 +0000 https://doc.tryfastgpt.ai/docs/guide/dashboard/basic-mode/ 工作流&插件 https://doc.tryfastgpt.ai/docs/guide/dashboard/intro/Mon, 01 Jan 0001 00:00:00 +0000 https://doc.tryfastgpt.ai/docs/guide/dashboard/intro/ FastGPT 从 V4.0 版本开始采用新的交互方式来构建 AI 应用。使用了 Flow 节点编排(工作流)的方式来实现复杂工作流,提高可玩性和扩展性。但同时也提高了上手的门槛,有一定开发背景的用户使用起来会比较容易。 查看视频教程 什么是节点? link在程序中,节点可以理解为一个个 Function 或者接口。可以理解为它就是一个步骤。将多个节点一个个拼接起来,即可一步步的去实现最终的 AI 输出。 如下图,这是一个最简单的 AI 对话。它由用流程开始和 AI 对话节点组成。 @@ -578,7 +578,7 @@ mkdir -p /fastgpt/data/backup 准备好后,后续上传 ### 新fastgpt环境【B】中也需要建一个,比如/fastgpt/mongobackup目录,注意不要在fastgpt/data目录下建立目录 mkdir -p /fastgpt/mongobackup ###2. 正题开始,从fastgpt老环境【A】中导出数据 进入A环境,使用mongodump 导出mongo数据库。 #### 2. Docker 数据库迁移(无脑操作) https://doc.tryfastgpt.ai/docs/development/migration/docker_db/Mon, 01 Jan 0001 00:00:00 +0000 https://doc.tryfastgpt.ai/docs/development/migration/docker_db/ 1. 停止服务 link docker-compose down 2. Copy文件夹 linkDocker 部署数据库都会通过 volume 挂载本地的目录进入容器,如果要迁移,直接复制这些目录即可。 PG 数据: pg/data Mongo 数据: mongo/data -直接把pg 和 mongo目录全部复制走即可。 V4.9.6(进行中) https://doc.tryfastgpt.ai/docs/development/upgrading/496/Mon, 01 Jan 0001 00:00:00 +0000 https://doc.tryfastgpt.ai/docs/development/upgrading/496/ 🚀 新增内容 link 以 MCP 方式对外提供应用调用。 支持以 MCP SSE 协议创建工具。 批量执行节点支持交互节点,可实现每一轮循环都人工参与。 增加工作台二级菜单,合并工具箱。 增加 grok3、GPT4.1、Gemini2.5 模型系统配置。 ⚙️ 优化 link 工作流数据类型转化鲁棒性和兼容性增强。 Python sandbox 代码,支持大数据输入。 路径组件支持配置最后一步是否可点击。 知识库工具调用结果,自动补充图片域名。 Github action runner 升级成 unbuntu24 🐛 修复 link 修复子工作流包含交互节点时,未成功恢复子工作流所有数据。 completion v1 接口,未接受 interactive 参数,导致 API 调用失败。 V4.9.5 https://doc.tryfastgpt.ai/docs/development/upgrading/495/Mon, 01 Jan 0001 00:00:00 +0000 https://doc.tryfastgpt.ai/docs/development/upgrading/495/ 升级指南 link1. 做好数据备份 link2. 更新镜像 tag link 更新 FastGPT 镜像 tag: v4.9.5 更新 FastGPT 商业版镜像 tag: v4.9.5 Sandbox 无需更新 AIProxy 无需更新 🚀 新增内容 link 团队成员权限细分,可分别控制是否可创建在根目录应用/知识库以及 API Key 支持交互节点在嵌套工作流中使用。 团队成员操作日志。 用户输入节点支持多选框。 ⚙️ 优化 link 繁体中文翻译。 Arm 镜像打包 🐛 修复 link password 检测规则错误。 分享链接无法隐藏知识库检索结果。 IOS 低版本正则兼容问题。 修复问答提取队列错误后,计数器未清零问题,导致问答提取队列失效。 Debug 模式交互节点下一步可能造成死循环。 V4.9.4 https://doc.tryfastgpt.ai/docs/development/upgrading/494/Mon, 01 Jan 0001 00:00:00 +0000 https://doc.tryfastgpt.ai/docs/development/upgrading/494/ 升级指南 link1. 做好数据备份 link2. 安装 Redis link docker 部署的用户,参考最新的 docker-compose.yml 文件增加 Redis 配置。增加一个 redis 容器,并配置fastgpt,fastgpt-pro的环境变量,增加 REDIS_URL 环境变量。 Sealos 部署的用户,在数据库里新建一个redis数据库,并复制内网地址的 connection 作为 redis 的链接串。然后配置fastgpt,fastgpt-pro的环境变量,增加 REDIS_URL 环境变量。 3. 更新镜像 tag link 更新 FastGPT 镜像 tag: v4.9.4 更新 FastGPT 商业版镜像 tag: v4.9.4 Sandbox 无需更新 AIProxy 无需更新 4. 执行升级脚本 link该脚本仅需商业版用户执行。 +直接把pg 和 mongo目录全部复制走即可。 V4.9.6(进行中) https://doc.tryfastgpt.ai/docs/development/upgrading/496/Mon, 01 Jan 0001 00:00:00 +0000 https://doc.tryfastgpt.ai/docs/development/upgrading/496/ 🚀 新增内容 link 以 MCP 方式对外提供应用调用。 支持以 MCP SSE 协议创建工具。 批量执行节点支持交互节点,可实现每一轮循环都人工参与。 增加工作台二级菜单,合并工具箱。 增加 grok3、GPT4.1、Gemini2.5 模型系统配置。 ⚙️ 优化 link 工作流数据类型转化鲁棒性和兼容性增强。 Python sandbox 代码,支持大数据输入。 路径组件支持配置最后一步是否可点击。 知识库工具调用结果,自动补充图片域名。 Github action runner 升级成 unbuntu24 去除飞书、公众号等三方渠道,回复时,可能前后多一个换行的问题。 🐛 修复 link 修复子工作流包含交互节点时,未成功恢复子工作流所有数据。 completion v1 接口,未接受 interactive 参数,导致 API 调用失败。 V4.9.5 https://doc.tryfastgpt.ai/docs/development/upgrading/495/Mon, 01 Jan 0001 00:00:00 +0000 https://doc.tryfastgpt.ai/docs/development/upgrading/495/ 升级指南 link1. 做好数据备份 link2. 更新镜像 tag link 更新 FastGPT 镜像 tag: v4.9.5 更新 FastGPT 商业版镜像 tag: v4.9.5 Sandbox 无需更新 AIProxy 无需更新 🚀 新增内容 link 团队成员权限细分,可分别控制是否可创建在根目录应用/知识库以及 API Key 支持交互节点在嵌套工作流中使用。 团队成员操作日志。 用户输入节点支持多选框。 ⚙️ 优化 link 繁体中文翻译。 Arm 镜像打包 🐛 修复 link password 检测规则错误。 分享链接无法隐藏知识库检索结果。 IOS 低版本正则兼容问题。 修复问答提取队列错误后,计数器未清零问题,导致问答提取队列失效。 Debug 模式交互节点下一步可能造成死循环。 V4.9.4 https://doc.tryfastgpt.ai/docs/development/upgrading/494/Mon, 01 Jan 0001 00:00:00 +0000 https://doc.tryfastgpt.ai/docs/development/upgrading/494/ 升级指南 link1. 做好数据备份 link2. 安装 Redis link docker 部署的用户,参考最新的 docker-compose.yml 文件增加 Redis 配置。增加一个 redis 容器,并配置fastgpt,fastgpt-pro的环境变量,增加 REDIS_URL 环境变量。 Sealos 部署的用户,在数据库里新建一个redis数据库,并复制内网地址的 connection 作为 redis 的链接串。然后配置fastgpt,fastgpt-pro的环境变量,增加 REDIS_URL 环境变量。 3. 更新镜像 tag link 更新 FastGPT 镜像 tag: v4.9.4 更新 FastGPT 商业版镜像 tag: v4.9.4 Sandbox 无需更新 AIProxy 无需更新 4. 执行升级脚本 link该脚本仅需商业版用户执行。 从任意终端,发起 1 个 HTTP 请求。其中 {{rootkey}} 替换成环境变量里的 rootkey;{{host}} 替换成FastGPT 域名。 curl --location --request POST 'https://{{host}}/api/admin/initv494' \ --header 'rootkey: {{rootkey}}' \ --header 'Content-Type: application/json' 脚本功能 V4.9.3 https://doc.tryfastgpt.ai/docs/development/upgrading/493/Mon, 01 Jan 0001 00:00:00 +0000 https://doc.tryfastgpt.ai/docs/development/upgrading/493/ 更新指南 link1. 做好数据库备份 link2. 更新镜像 link 更新 FastGPT 镜像 tag: v4.9.3 更新 FastGPT 商业版镜像 tag: v4.9.3 Sandbox 镜像tag: v4.9.3 AIProxy 镜像tag: v0.1.5 🚀 新增内容 link 工作流 debug 模式支持交互节点。 代码运行支持 Python3 代码。 🐛 修复 link 工作流格式转化异常。 V4.9.2 https://doc.tryfastgpt.ai/docs/development/upgrading/492/Mon, 01 Jan 0001 00:00:00 +0000 https://doc.tryfastgpt.ai/docs/development/upgrading/492/ 更新指南 link可直接升级v4.9.3,v4.9.2存在一个工作流数据类型转化错误。 1. 做好数据库备份 link2. SSO 迁移 link使用了 SSO 或成员同步的商业版用户,并且是对接钉钉、企微的,需要迁移已有的 SSO 相关配置: diff --git a/js/doc-generate-llms.js b/js/doc-generate-llms.js deleted file mode 100644 index cd4e2f368..000000000 --- a/js/doc-generate-llms.js +++ /dev/null @@ -1,108 +0,0 @@ -const fs = require('fs'); -const path = require('path'); -const yaml = require('js-yaml'); - -// 项目名称和描述 -const projectName = "FastGPT"; -const projectDescription = "FastGPT 文档"; - -// 文档目录,使用相对路径 -const docsDir = path.join(__dirname, '../../content/zh-cn/docs'); -// 基础 URL -const baseUrl = "https://doc.fastgpt.cn/docs/"; - -// 生成 llms.txt -let llmsTxtContent = `# ${projectName}\n${projectDescription}\n`; - -function getMdInfo(filePath) { - try { - // 读取文件内容 - const content = fs.readFileSync(filePath, 'utf8'); - // 找到前置元数据的起始和结束位置 - const startIndex = content.indexOf('---'); - const endIndex = content.indexOf('---', startIndex + 3); - if (startIndex!== -1 && endIndex!== -1) { - const frontMatterStr = content.slice(startIndex + 3, endIndex).trim(); - // 使用 yaml 解析前置元数据 - const frontMatter = yaml.load(frontMatterStr); - const title = frontMatter.title; - const description = frontMatter.description; - return [title, description]; - } - } catch (error) { - if (error.code === 'ENOENT') { - console.log(`文件 ${filePath} 未找到。`); - } else { - console.log(`解析 ${filePath} 的前置元数据时出错:`, error.message); - } - } - return [null, null]; -} - -// 遍历文档目录 -function walkDir(dir) { - const entries = fs.readdirSync(dir, { withFileTypes: true }); - for (const entry of entries) { - const entryPath = path.join(dir, entry.name); - if (entry.isDirectory()) { - walkDir(entryPath); - } else if (entry.name.endsWith('.md')) { - const relativePath = path.relative(docsDir, entryPath); - const sectionName = path.dirname(relativePath) || 'Home'; - if (!llmsTxtContent.includes(`## ${sectionName}`)) { - llmsTxtContent += `\n## ${sectionName}\n`; - } - const fullUrl = baseUrl + relativePath.replace(/\\/g, '/').replace('.md', '/'); - const [title, description] = getMdInfo(entryPath); - const finalTitle = title || path.basename(entry.name, '.md'); - const finalDescription = description || ''; - llmsTxtContent += `- [${finalTitle}](${fullUrl}) ${finalDescription}\n`; - } - } -} - -walkDir(docsDir); - -// 保存 llms.txt -const saveDir = path.join(__dirname, '../'); -if (!fs.existsSync(saveDir)) { - fs.mkdirSync(saveDir, { recursive: true }); -} -const llmsTxtSavePath = path.join(saveDir, 'llms.txt'); -fs.writeFileSync(llmsTxtSavePath, llmsTxtContent, 'utf8'); - -// 生成 llms - full.txt -let llmsFullTxtContent = ''; -function collectMdContent(dir) { - const entries = fs.readdirSync(dir, { withFileTypes: true }); - for (const entry of entries) { - const entryPath = path.join(dir, entry.name); - if (entry.isDirectory()) { - collectMdContent(entryPath); - } else if (entry.name.endsWith('.md')) { - const content = fs.readFileSync(entryPath, 'utf8'); - // 找到前置元数据的起始和结束位置 - const startIndex = content.indexOf('---'); - const endIndex = content.indexOf('---', startIndex + 3); - if (startIndex!== -1 && endIndex!== -1) { - const frontMatterStr = content.slice(startIndex + 3, endIndex).trim(); - // 使用 yaml 解析前置元数据 - const frontMatter = yaml.load(frontMatterStr); - const title = frontMatter.title || ''; - const description = frontMatter.description || ''; - // 提取标题和描述后,删除首部元数据 - const newContent = content.slice(endIndex + 3).trim(); - llmsFullTxtContent += `# ${title}\n## ${description}\n\n${newContent}\n\n`; - } else { - llmsFullTxtContent += content + '\n\n'; - } - } - } -} - -collectMdContent(docsDir); - -// 保存 llms - full.txt -const llmsFullTxtSavePath = path.join(saveDir, 'llms-full.txt'); -fs.writeFileSync(llmsFullTxtSavePath, llmsFullTxtContent, 'utf8'); - \ No newline at end of file diff --git a/llms-full.txt b/llms-full.txt index 0ec21d400..830dc197b 100644 --- a/llms-full.txt +++ b/llms-full.txt @@ -148,11 +148,6 @@ FastGPT 服务协议是您与珠海环界云计算有限公司(以下简称“ 1. 如本协议中部分条款因违反法律法规而被视为无效,不影响其他条款的效力。 2. 本公司保留对本协议及隐私政策的最终解释权。如您对本协议或隐私政策有任何疑问,请联系我们:yujinlong@sealos.io。 -# 协议 -## 社区相关内容 - - - # 加入社区 ## 加入 FastGPT 开发者社区和我们一起成长 @@ -377,113 +372,113 @@ services: # 接入 ChatGLM2-m3e 模型 ## 将 FastGPT 接入私有化模型 ChatGLM2和m3e-large -## 前言 - -FastGPT 默认使用了 OpenAI 的 LLM 模型和向量模型,如果想要私有化部署的话,可以使用 ChatGLM2 和 m3e-large 模型。以下是由用户@不做了睡大觉 提供的接入方法。该镜像直接集成了 M3E-Large 和 ChatGLM2-6B 模型,可以直接使用。 - -## 部署镜像 - -+ 镜像名: `stawky/chatglm2-m3e:latest` -+ 国内镜像名: `registry.cn-hangzhou.aliyuncs.com/fastgpt_docker/chatglm2-m3e:latest` -+ 端口号: 6006 - -``` -# 设置安全凭证(即oneapi中的渠道密钥) -默认值:sk-aaabbbcccdddeeefffggghhhiiijjjkkk -也可以通过环境变量引入:sk-key。有关docker环境变量引入的方法请自寻教程,此处不再赘述。 -``` - -## 接入 [One API](/docs/development/modelconfig/one-api/) - -为 chatglm2 和 m3e-large 各添加一个渠道,参数如下: - - - -这里我填入 m3e 作为向量模型,chatglm2 作为语言模型 - -## 测试 - -curl 例子: - -```bash -curl --location --request POST 'https://domain/v1/embeddings' \ ---header 'Authorization: Bearer sk-aaabbbcccdddeeefffggghhhiiijjjkkk' \ ---header 'Content-Type: application/json' \ ---data-raw '{ - "model": "m3e", - "input": ["laf是什么"] -}' -``` - -```bash -curl --location --request POST 'https://domain/v1/chat/completions' \ ---header 'Authorization: Bearer sk-aaabbbcccdddeeefffggghhhiiijjjkkk' \ ---header 'Content-Type: application/json' \ ---data-raw '{ - "model": "chatglm2", - "messages": [{"role": "user", "content": "Hello!"}] -}' -``` - -Authorization 为 sk-aaabbbcccdddeeefffggghhhiiijjjkkk。model 为刚刚在 One API 填写的自定义模型。 - -## 接入 FastGPT - -修改 config.json 配置文件,在 llmModels 中加入 chatglm2, 在 vectorModels 中加入 M3E 模型: - -```json -"llmModels": [ - //其他对话模型 - { - "model": "chatglm2", - "name": "chatglm2", - "maxToken": 8000, - "price": 0, - "quoteMaxToken": 4000, - "maxTemperature": 1.2, - "defaultSystemChatPrompt": "" - } -], -"vectorModels": [ - { - "model": "text-embedding-ada-002", - "name": "Embedding-2", - "price": 0.2, - "defaultToken": 500, - "maxToken": 3000 - }, - { - "model": "m3e", - "name": "M3E(测试使用)", - "price": 0.1, - "defaultToken": 500, - "maxToken": 1800 - } -], -``` - -## 测试使用 - -M3E 模型的使用方法如下: - -1. 创建知识库时候选择 M3E 模型。 - - 注意,一旦选择后,知识库将无法修改向量模型。 - -  - -2. 导入数据 -3. 搜索测试 - -  - -4. 应用绑定知识库 - - 注意,应用只能绑定同一个向量模型的知识库,不能跨模型绑定。并且,需要注意调整相似度,不同向量模型的相似度(距离)会有所区别,需要自行测试实验。 - -  - -chatglm2 模型的使用方法如下: +## 前言 + +FastGPT 默认使用了 OpenAI 的 LLM 模型和向量模型,如果想要私有化部署的话,可以使用 ChatGLM2 和 m3e-large 模型。以下是由用户@不做了睡大觉 提供的接入方法。该镜像直接集成了 M3E-Large 和 ChatGLM2-6B 模型,可以直接使用。 + +## 部署镜像 + ++ 镜像名: `stawky/chatglm2-m3e:latest` ++ 国内镜像名: `registry.cn-hangzhou.aliyuncs.com/fastgpt_docker/chatglm2-m3e:latest` ++ 端口号: 6006 + +``` +# 设置安全凭证(即oneapi中的渠道密钥) +默认值:sk-aaabbbcccdddeeefffggghhhiiijjjkkk +也可以通过环境变量引入:sk-key。有关docker环境变量引入的方法请自寻教程,此处不再赘述。 +``` + +## 接入 [One API](/docs/development/modelconfig/one-api/) + +为 chatglm2 和 m3e-large 各添加一个渠道,参数如下: + + + +这里我填入 m3e 作为向量模型,chatglm2 作为语言模型 + +## 测试 + +curl 例子: + +```bash +curl --location --request POST 'https://domain/v1/embeddings' \ +--header 'Authorization: Bearer sk-aaabbbcccdddeeefffggghhhiiijjjkkk' \ +--header 'Content-Type: application/json' \ +--data-raw '{ + "model": "m3e", + "input": ["laf是什么"] +}' +``` + +```bash +curl --location --request POST 'https://domain/v1/chat/completions' \ +--header 'Authorization: Bearer sk-aaabbbcccdddeeefffggghhhiiijjjkkk' \ +--header 'Content-Type: application/json' \ +--data-raw '{ + "model": "chatglm2", + "messages": [{"role": "user", "content": "Hello!"}] +}' +``` + +Authorization 为 sk-aaabbbcccdddeeefffggghhhiiijjjkkk。model 为刚刚在 One API 填写的自定义模型。 + +## 接入 FastGPT + +修改 config.json 配置文件,在 llmModels 中加入 chatglm2, 在 vectorModels 中加入 M3E 模型: + +```json +"llmModels": [ + //其他对话模型 + { + "model": "chatglm2", + "name": "chatglm2", + "maxToken": 8000, + "price": 0, + "quoteMaxToken": 4000, + "maxTemperature": 1.2, + "defaultSystemChatPrompt": "" + } +], +"vectorModels": [ + { + "model": "text-embedding-ada-002", + "name": "Embedding-2", + "price": 0.2, + "defaultToken": 500, + "maxToken": 3000 + }, + { + "model": "m3e", + "name": "M3E(测试使用)", + "price": 0.1, + "defaultToken": 500, + "maxToken": 1800 + } +], +``` + +## 测试使用 + +M3E 模型的使用方法如下: + +1. 创建知识库时候选择 M3E 模型。 + + 注意,一旦选择后,知识库将无法修改向量模型。 + +  + +2. 导入数据 +3. 搜索测试 + +  + +4. 应用绑定知识库 + + 注意,应用只能绑定同一个向量模型的知识库,不能跨模型绑定。并且,需要注意调整相似度,不同向量模型的相似度(距离)会有所区别,需要自行测试实验。 + +  + +chatglm2 模型的使用方法如下: 模型选择 chatglm2 即可 # 接入 ChatGLM2-6B @@ -790,180 +785,180 @@ CUSTOM_READ_FILE_EXTENSION=pdf # 使用 Ollama 接入本地模型 ## 采用 Ollama 部署自己的模型 -[Ollama](https://ollama.com/) 是一个开源的AI大模型部署工具,专注于简化大语言模型的部署和使用,支持一键下载和运行各种大模型。 - -## 安装 Ollama - -Ollama 本身支持多种安装方式,但是推荐使用 Docker 拉取镜像部署。如果是个人设备上安装了 Ollama 后续需要解决如何让 Docker 中 FastGPT 容器访问宿主机 Ollama的问题,较为麻烦。 - -### Docker 安装(推荐) - -你可以使用 Ollama 官方的 Docker 镜像来一键安装和启动 Ollama 服务(确保你的机器上已经安装了 Docker),命令如下: - -```bash -docker pull ollama/ollama -docker run --rm -d --name ollama -p 11434:11434 ollama/ollama -``` - -如果你的 FastGPT 是在 Docker 中进行部署的,建议在拉取 Ollama 镜像时保证和 FastGPT 镜像处于同一网络,否则可能出现 FastGPT 无法访问的问题,命令如下: - -```bash -docker run --rm -d --name ollama --network (你的 Fastgpt 容器所在网络) -p 11434:11434 ollama/ollama -``` - -### 主机安装 - -如果你不想使用 Docker ,也可以采用主机安装,以下是主机安装的一些方式。 - -#### MacOS - -如果你使用的是 macOS,且系统中已经安装了 Homebrew 包管理器,可通过以下命令来安装 Ollama: - -```bash -brew install ollama -ollama serve #安装完成后,使用该命令启动服务 -``` - -#### Linux - -在 Linux 系统上,你可以借助包管理器来安装 Ollama。以 Ubuntu 为例,在终端执行以下命令: - -```bash -curl https://ollama.com/install.sh | sh #此命令会从官方网站下载并执行安装脚本。 -ollama serve #安装完成后,同样启动服务 -``` - -#### Windows - -在 Windows 系统中,你可以从 Ollama 官方网站 下载 Windows 版本的安装程序。下载完成后,运行安装程序,按照安装向导的提示完成安装。安装完成后,在命令提示符或 PowerShell 中启动服务: - -```bash -ollama serve #安装完成并启动服务后,你可以在浏览器中访问 http://localhost:11434 来验证 Ollama 是否安装成功。 -``` - -#### 补充说明 - -如果你是采用的主机应用 Ollama 而不是镜像,需要确保你的 Ollama 可以监听0.0.0.0。 - -##### 1. Linxu 系统 - -如果 Ollama 作为 systemd 服务运行,打开终端,编辑 Ollama 的 systemd 服务文件,使用命令sudo systemctl edit ollama.service,在[Service]部分添加Environment="OLLAMA_HOST=0.0.0.0"。保存并退出编辑器,然后执行sudo systemctl daemon - reload和sudo systemctl restart ollama使配置生效。 - -##### 2. MacOS 系统 - -打开终端,使用launchctl setenv ollama_host "0.0.0.0"命令设置环境变量,然后重启 Ollama 应用程序以使更改生效。 - -##### 3. Windows 系统 - -通过 “开始” 菜单或搜索栏打开 “编辑系统环境变量”,在 “系统属性” 窗口中点击 “环境变量”,在 “系统变量” 部分点击 “新建”,创建一个名为OLLAMA_HOST的变量,变量值设置为0.0.0.0,点击 “确定” 保存更改,最后从 “开始” 菜单重启 Ollama 应用程序。 - -### Ollama 拉取模型镜像 - -在安装 Ollama 后,本地是没有模型镜像的,需要自己去拉取 Ollama 中的模型镜像。命令如下: - -```bash -# Docker 部署需要先进容器,命令为: docker exec -it < Ollama 容器名 > /bin/sh -ollama pull <模型名> -``` - - - - -### 测试通信 - -在安装完成后,需要进行检测测试,首先进入 FastGPT 所在的容器,尝试访问自己的 Ollama ,命令如下: - -```bash -docker exec -it < FastGPT 所在的容器名 > /bin/sh -curl http://XXX.XXX.XXX.XXX:11434 #容器部署地址为“http://<容器名>:<端口>”,主机安装地址为"http://<主机IP>:<端口>",主机IP不可为localhost -``` - -看到访问显示自己的 Ollama 服务以及启动,说明可以正常通信。 - -## 将 Ollama 接入 FastGPT - -### 1. 查看 Ollama 所拥有的模型 - -首先采用下述命令查看 Ollama 中所拥有的模型, - -```bash -# Docker 部署 Ollama,需要此命令 docker exec -it < Ollama 容器名 > /bin/sh -ollama ls -``` - - - -### 2. AI Proxy 接入 - -如果你采用的是 FastGPT 中的默认配置文件部署[这里](/docs/development/docker.md),即默认采用 AI Proxy 进行启动。 - - - -以及在确保你的 FastGPT 可以直接访问 Ollama 容器的情况下,无法访问,参考上文[点此跳转](#安装-ollama)的安装过程,检测是不是主机不能监测0.0.0.0,或者容器不在同一个网络。 - - - -在 FastGPT 中点击账号->模型提供商->模型配置->新增模型,添加自己的模型即可,添加模型时需要保证模型ID和 OneAPI 中的模型名称一致。详细参考[这里](/docs/development/modelConfig/intro.md) - - - - - -运行 FastGPT ,在页面中选择账号->模型提供商->模型渠道->新增渠道。之后,在渠道选择中选择 Ollama ,然后加入自己拉取的模型,填入代理地址,如果是容器中安装 Ollama ,代理地址为http://地址:端口,补充:容器部署地址为“http://<容器名>:<端口>”,主机安装地址为"http://<主机IP>:<端口>",主机IP不可为localhost - - - -在工作台中创建一个应用,选择自己之前添加的模型,此处模型名称为自己当时设置的别名。注:同一个模型无法多次添加,系统会采取最新添加时设置的别名。 - - - -### 3. OneAPI 接入 - -如果你想使用 OneAPI ,首先需要拉取 OneAPI 镜像,然后将其在 FastGPT 容器的网络中运行。具体命令如下: - -```bash -# 拉取 oneAPI 镜像 -docker pull intel/oneapi-hpckit - -# 运行容器并指定自定义网络和容器名 -docker run -it --network < FastGPT 网络 > --name 容器名 intel/oneapi-hpckit /bin/bash -``` - -进入 OneAPI 页面,添加新的渠道,类型选择 Ollama ,在模型中填入自己 Ollama 中的模型,需要保证添加的模型名称和 Ollama 中一致,再在下方填入自己的 Ollama 代理地址,默认http://地址:端口,不需要填写/v1。添加成功后在 OneAPI 进行渠道测试,测试成功则说明添加成功。此处演示采用的是 Docker 部署 Ollama 的效果,主机 Ollama需要修改代理地址为http://<主机IP>:<端口> - - - -渠道添加成功后,点击令牌,点击添加令牌,填写名称,修改配置。 - - - -修改部署 FastGPT 的 docker-compose.yml 文件,在其中将 AI Proxy 的使用注释,在 OPENAI_BASE_URL 中加入自己的 OneAPI 开放地址,默认是http://地址:端口/v1,v1必须填写。KEY 中填写自己在 OneAPI 的令牌。 - - - -[直接跳转5](#5-模型添加和使用)添加模型,并使用。 - -### 4. 直接接入 - -如果你既不想使用 AI Proxy,也不想使用 OneAPI,也可以选择直接接入,修改部署 FastGPT 的 docker-compose.yml 文件,在其中将 AI Proxy 的使用注释,采用和 OneAPI 的类似配置。注释掉 AIProxy 相关代码,在OPENAI_BASE_URL中加入自己的 Ollama 开放地址,默认是http://地址:端口/v1,强调:v1必须填写。在KEY中随便填入,因为 Ollama 默认没有鉴权,如果开启鉴权,请自行填写。其他操作和在 OneAPI 中加入 Ollama 一致,只需在 FastGPT 中加入自己的模型即可使用。此处演示采用的是 Docker 部署 Ollama 的效果,主机 Ollama需要修改代理地址为http://<主机IP>:<端口> - - - -完成后[点击这里](#5-模型添加和使用)进行模型添加并使用。 - -### 5. 模型添加和使用 - -在 FastGPT 中点击账号->模型提供商->模型配置->新增模型,添加自己的模型即可,添加模型时需要保证模型ID和 OneAPI 中的模型名称一致。 - - - - - -在工作台中创建一个应用,选择自己之前添加的模型,此处模型名称为自己当时设置的别名。注:同一个模型无法多次添加,系统会采取最新添加时设置的别名。 - - - -### 6. 补充 +[Ollama](https://ollama.com/) 是一个开源的AI大模型部署工具,专注于简化大语言模型的部署和使用,支持一键下载和运行各种大模型。 + +## 安装 Ollama + +Ollama 本身支持多种安装方式,但是推荐使用 Docker 拉取镜像部署。如果是个人设备上安装了 Ollama 后续需要解决如何让 Docker 中 FastGPT 容器访问宿主机 Ollama的问题,较为麻烦。 + +### Docker 安装(推荐) + +你可以使用 Ollama 官方的 Docker 镜像来一键安装和启动 Ollama 服务(确保你的机器上已经安装了 Docker),命令如下: + +```bash +docker pull ollama/ollama +docker run --rm -d --name ollama -p 11434:11434 ollama/ollama +``` + +如果你的 FastGPT 是在 Docker 中进行部署的,建议在拉取 Ollama 镜像时保证和 FastGPT 镜像处于同一网络,否则可能出现 FastGPT 无法访问的问题,命令如下: + +```bash +docker run --rm -d --name ollama --network (你的 Fastgpt 容器所在网络) -p 11434:11434 ollama/ollama +``` + +### 主机安装 + +如果你不想使用 Docker ,也可以采用主机安装,以下是主机安装的一些方式。 + +#### MacOS + +如果你使用的是 macOS,且系统中已经安装了 Homebrew 包管理器,可通过以下命令来安装 Ollama: + +```bash +brew install ollama +ollama serve #安装完成后,使用该命令启动服务 +``` + +#### Linux + +在 Linux 系统上,你可以借助包管理器来安装 Ollama。以 Ubuntu 为例,在终端执行以下命令: + +```bash +curl https://ollama.com/install.sh | sh #此命令会从官方网站下载并执行安装脚本。 +ollama serve #安装完成后,同样启动服务 +``` + +#### Windows + +在 Windows 系统中,你可以从 Ollama 官方网站 下载 Windows 版本的安装程序。下载完成后,运行安装程序,按照安装向导的提示完成安装。安装完成后,在命令提示符或 PowerShell 中启动服务: + +```bash +ollama serve #安装完成并启动服务后,你可以在浏览器中访问 http://localhost:11434 来验证 Ollama 是否安装成功。 +``` + +#### 补充说明 + +如果你是采用的主机应用 Ollama 而不是镜像,需要确保你的 Ollama 可以监听0.0.0.0。 + +##### 1. Linxu 系统 + +如果 Ollama 作为 systemd 服务运行,打开终端,编辑 Ollama 的 systemd 服务文件,使用命令sudo systemctl edit ollama.service,在[Service]部分添加Environment="OLLAMA_HOST=0.0.0.0"。保存并退出编辑器,然后执行sudo systemctl daemon - reload和sudo systemctl restart ollama使配置生效。 + +##### 2. MacOS 系统 + +打开终端,使用launchctl setenv ollama_host "0.0.0.0"命令设置环境变量,然后重启 Ollama 应用程序以使更改生效。 + +##### 3. Windows 系统 + +通过 “开始” 菜单或搜索栏打开 “编辑系统环境变量”,在 “系统属性” 窗口中点击 “环境变量”,在 “系统变量” 部分点击 “新建”,创建一个名为OLLAMA_HOST的变量,变量值设置为0.0.0.0,点击 “确定” 保存更改,最后从 “开始” 菜单重启 Ollama 应用程序。 + +### Ollama 拉取模型镜像 + +在安装 Ollama 后,本地是没有模型镜像的,需要自己去拉取 Ollama 中的模型镜像。命令如下: + +```bash +# Docker 部署需要先进容器,命令为: docker exec -it < Ollama 容器名 > /bin/sh +ollama pull <模型名> +``` + + + + +### 测试通信 + +在安装完成后,需要进行检测测试,首先进入 FastGPT 所在的容器,尝试访问自己的 Ollama ,命令如下: + +```bash +docker exec -it < FastGPT 所在的容器名 > /bin/sh +curl http://XXX.XXX.XXX.XXX:11434 #容器部署地址为“http://<容器名>:<端口>”,主机安装地址为"http://<主机IP>:<端口>",主机IP不可为localhost +``` + +看到访问显示自己的 Ollama 服务以及启动,说明可以正常通信。 + +## 将 Ollama 接入 FastGPT + +### 1. 查看 Ollama 所拥有的模型 + +首先采用下述命令查看 Ollama 中所拥有的模型, + +```bash +# Docker 部署 Ollama,需要此命令 docker exec -it < Ollama 容器名 > /bin/sh +ollama ls +``` + + + +### 2. AI Proxy 接入 + +如果你采用的是 FastGPT 中的默认配置文件部署[这里](/docs/development/docker.md),即默认采用 AI Proxy 进行启动。 + + + +以及在确保你的 FastGPT 可以直接访问 Ollama 容器的情况下,无法访问,参考上文[点此跳转](#安装-ollama)的安装过程,检测是不是主机不能监测0.0.0.0,或者容器不在同一个网络。 + + + +在 FastGPT 中点击账号->模型提供商->模型配置->新增模型,添加自己的模型即可,添加模型时需要保证模型ID和 OneAPI 中的模型名称一致。详细参考[这里](/docs/development/modelConfig/intro.md) + + + + + +运行 FastGPT ,在页面中选择账号->模型提供商->模型渠道->新增渠道。之后,在渠道选择中选择 Ollama ,然后加入自己拉取的模型,填入代理地址,如果是容器中安装 Ollama ,代理地址为http://地址:端口,补充:容器部署地址为“http://<容器名>:<端口>”,主机安装地址为"http://<主机IP>:<端口>",主机IP不可为localhost + + + +在工作台中创建一个应用,选择自己之前添加的模型,此处模型名称为自己当时设置的别名。注:同一个模型无法多次添加,系统会采取最新添加时设置的别名。 + + + +### 3. OneAPI 接入 + +如果你想使用 OneAPI ,首先需要拉取 OneAPI 镜像,然后将其在 FastGPT 容器的网络中运行。具体命令如下: + +```bash +# 拉取 oneAPI 镜像 +docker pull intel/oneapi-hpckit + +# 运行容器并指定自定义网络和容器名 +docker run -it --network < FastGPT 网络 > --name 容器名 intel/oneapi-hpckit /bin/bash +``` + +进入 OneAPI 页面,添加新的渠道,类型选择 Ollama ,在模型中填入自己 Ollama 中的模型,需要保证添加的模型名称和 Ollama 中一致,再在下方填入自己的 Ollama 代理地址,默认http://地址:端口,不需要填写/v1。添加成功后在 OneAPI 进行渠道测试,测试成功则说明添加成功。此处演示采用的是 Docker 部署 Ollama 的效果,主机 Ollama需要修改代理地址为http://<主机IP>:<端口> + + + +渠道添加成功后,点击令牌,点击添加令牌,填写名称,修改配置。 + + + +修改部署 FastGPT 的 docker-compose.yml 文件,在其中将 AI Proxy 的使用注释,在 OPENAI_BASE_URL 中加入自己的 OneAPI 开放地址,默认是http://地址:端口/v1,v1必须填写。KEY 中填写自己在 OneAPI 的令牌。 + + + +[直接跳转5](#5-模型添加和使用)添加模型,并使用。 + +### 4. 直接接入 + +如果你既不想使用 AI Proxy,也不想使用 OneAPI,也可以选择直接接入,修改部署 FastGPT 的 docker-compose.yml 文件,在其中将 AI Proxy 的使用注释,采用和 OneAPI 的类似配置。注释掉 AIProxy 相关代码,在OPENAI_BASE_URL中加入自己的 Ollama 开放地址,默认是http://地址:端口/v1,强调:v1必须填写。在KEY中随便填入,因为 Ollama 默认没有鉴权,如果开启鉴权,请自行填写。其他操作和在 OneAPI 中加入 Ollama 一致,只需在 FastGPT 中加入自己的模型即可使用。此处演示采用的是 Docker 部署 Ollama 的效果,主机 Ollama需要修改代理地址为http://<主机IP>:<端口> + + + +完成后[点击这里](#5-模型添加和使用)进行模型添加并使用。 + +### 5. 模型添加和使用 + +在 FastGPT 中点击账号->模型提供商->模型配置->新增模型,添加自己的模型即可,添加模型时需要保证模型ID和 OneAPI 中的模型名称一致。 + + + + + +在工作台中创建一个应用,选择自己之前添加的模型,此处模型名称为自己当时设置的别名。注:同一个模型无法多次添加,系统会采取最新添加时设置的别名。 + + + +### 6. 补充 上述接入 Ollama 的代理地址中,主机安装 Ollama 的地址为“http://<主机IP>:<端口>”,容器部署 Ollama 地址为“http://<容器名>:<端口>” # 使用 Xinference 接入本地模型 @@ -1125,11 +1120,6 @@ curl --location --request POST 'https:// /v1/chat/completions' \ + 参考:[FastGPT + Xinference:一站式本地 LLM 私有化部署和应用开发](https://xorbits.cn/blogs/fastgpt-weather-chat) -# 本地模型使用 -## FastGPT 对接本地模型 - - - # 数据集 ## FastGPT 数据集中文件与数据的设计方案 @@ -1150,11 +1140,6 @@ curl --location --request POST 'https:// /v1/chat/completions' \ 4. 点击上传数据:将文件的状态改为 `used`,并将数据推送到 mongo `training` 表中等待训练 5. 由训练线程从 mongo 中取数据,并在获取向量后插入到 pg。 -# 设计方案 -## FastGPT 部分设计方案 - - - # Docker Compose 快速部署 ## 使用 Docker Compose 快速部署 FastGPT @@ -2365,11 +2350,6 @@ docker logs -f mongo **强烈建议先检查mongo运行情况,在去做登录 6. 启动fastgpt容器服务后,登录新fastgpt web,能看到原来的数据库内容完整显示,说明已经导入系统了。 -# 迁移&备份 -## FastGPT 迁移&备份 - - - # 通过 AI Proxy 接入模型 ## 通过 AI Proxy 接入模型 @@ -3264,11 +3244,6 @@ CHAT_API_KEY=sk-xxxxxx 如果你决定未来私有化部署模型和 FastGPT,前期可通过 SiliconCloud 进行测试验证,后期再进行硬件采购,减少 POC 时间和成本。 -# 模型配置方案 -## 本模型配置方案 - - - # 对话接口 ## FastGPT OpenAPI 对话接口 @@ -6946,11 +6921,6 @@ export default async function (ctx: FunctionContext) { 除了对接已有系统的用户外,你还可以对接`余额`功能,通过`结果上报`接口扣除用户余额,通过`对话前校验`接口检查用户的余额。 -# OpenAPI 接口文档 -## FastGPT OpenAPI 文档 - - - # Cloudflare Worker 中转 ## 使用 Cloudflare Worker 实现中转 @@ -7141,11 +7111,6 @@ AXIOS_PROXY_PORT=7890 **Done!** -# 代理方案 -## FastGPT 私有化部署代理方案 - - - # Sealos 一键部署 ## 使用 Sealos 一键部署 FastGPT @@ -7280,7 +7245,7 @@ FastGPT 商业版共包含了2个应用(fastgpt, fastgpt-plus)和2个数据 SYSTEM_NAME=FastGPT SYSTEM_DESCRIPTION= SYSTEM_FAVICON=/favicon.ico -HOME_URL=/app/list +HOME_URL=/dashboard/apps ``` SYSTEM_FAVICON 可以是一个网络地址 @@ -7874,10 +7839,10 @@ curl --location --request POST 'https://{{host}}/api/admin/initv464' \ ## V4.6.5 功能介绍 -1. 新增 - [问题优化模块](/docs/guide/workbench/workflow/coreferenceresolution/) -2. 新增 - [文本编辑模块](/docs/guide/workbench/workflow/text_editor/) -3. 新增 - [判断器模块](/docs/guide/workbench/workflow/tfswitch//) -4. 新增 - [自定义反馈模块](/docs/guide/workbench/workflow/custom_feedback/) +1. 新增 - [问题优化模块](/docs/guide/dashboard/workflow/coreferenceresolution/) +2. 新增 - [文本编辑模块](/docs/guide/dashboard/workflow/text_editor/) +3. 新增 - [判断器模块](/docs/guide/dashboard/workflow/tfswitch//) +4. 新增 - [自定义反馈模块](/docs/guide/dashboard/workflow/custom_feedback/) 5. 新增 - 【内容提取】模块支持选择模型,以及字段枚举 6. 优化 - docx读取,兼容表格(表格转markdown) 7. 优化 - 高级编排连接线交互 @@ -8029,7 +7994,7 @@ curl --location --request POST 'https://{{host}}/api/init/v468' \ 1. 新增 - 知识库搜索合并模块。 2. 新增 - 新的 Http 模块,支持更加灵活的参数传入。同时支持了输入输出自动数据类型转化,例如:接口输出的 JSON 类型会自动转成字符串类型,直接给其他模块使用。此外,还补充了一些例子,可在文档中查看。 -3. 优化 - 内容补全。将内容补全内置到【知识库搜索】中,并实现了一次内容补全,即可完成“指代消除”和“问题扩展”。FastGPT知识库搜索详细流程可查看:[知识库搜索介绍](/docs/guide/workbench/workflow/dataset_search/) +3. 优化 - 内容补全。将内容补全内置到【知识库搜索】中,并实现了一次内容补全,即可完成“指代消除”和“问题扩展”。FastGPT知识库搜索详细流程可查看:[知识库搜索介绍](/docs/guide/dashboard/workflow/dataset_search/) 4. 优化 - LLM 模型配置,不再区分对话、分类、提取模型。同时支持模型的默认参数,避免不同模型参数冲突,可通过`defaultConfig`传入默认的配置。 5. 优化 - 流响应,参考了`ChatNextWeb`的流,更加丝滑。此外,之前提到的乱码、中断,刷新后又正常了,可能会修复) 6. 修复 - 语音输入文件无法上传。 @@ -9843,6 +9808,31 @@ curl --location --request POST 'https://{{host}}/api/admin/initv494' \ 4. 修复问答提取队列错误后,计数器未清零问题,导致问答提取队列失效。 5. Debug 模式交互节点下一步可能造成死循环。 +# V4.9.6(进行中) +## FastGPT V4.9.6 更新说明 + +## 🚀 新增内容 + +1. 以 MCP 方式对外提供应用调用。 +2. 支持以 MCP SSE 协议创建工具。 +3. 批量执行节点支持交互节点,可实现每一轮循环都人工参与。 +4. 增加工作台二级菜单,合并工具箱。 +5. 增加 grok3、GPT4.1、Gemini2.5 模型系统配置。 + +## ⚙️ 优化 + +1. 工作流数据类型转化鲁棒性和兼容性增强。 +2. Python sandbox 代码,支持大数据输入。 +3. 路径组件支持配置最后一步是否可点击。 +4. 知识库工具调用结果,自动补充图片域名。 +5. Github action runner 升级成 unbuntu24 +6. 去除飞书、公众号等三方渠道,回复时,可能前后多一个换行的问题。 + +## 🐛 修复 + +1. 修复子工作流包含交互节点时,未成功恢复子工作流所有数据。 +2. completion v1 接口,未接受 interactive 参数,导致 API 调用失败。 + # 升级说明 ## FastGPT 升级说明 @@ -9931,16 +9921,6 @@ sealos 中可以从上图左侧的环境变量中获取。 逐一升级 -# 版本更新/升级操作 -## FastGPT 版本更新介绍及升级操作 - - - -# 开发与部署指南 -## 本地开发 FastGPT 必看 - - - # 应用使用问题 ## FastGPT 常见应用使用问题,包括简易应用、工作流和插件 @@ -10163,12 +10143,140 @@ FastGPT回复长度计算公式: -# FAQ -## 常见问题的解答 +# 对话框与HTML渲染 +## 如何在FastGPT中通过Markdown嵌入HTML代码块,并提供全屏、源代码切换等交互功能 - +| 源码模式 | 预览模式 | 全屏模式 | +| --- | --- | --- | +|  |  |  | -FastGPT 是一个由用户和贡献者参与推动的开源项目,如果您对产品使用存在疑问和建议,可尝试[加入社区](community)寻求支持。我们的团队与社区会竭尽所能为您提供帮助。 + +### 1. **设计背景** + + 尽管Markdown本身支持嵌入HTML标签,但由于安全问题,许多平台和环境对HTML的渲染进行了限制,特别是在渲染动态内容、交互式元素以及外部资源时。这些限制大大降低了用户在撰写和展示复杂文档时的灵活性,尤其是当需要嵌入外部HTML内容时。为了应对这一问题,我们通过使用 `iframe` 来嵌入和渲染HTML内容,并结合 `sandbox` 属性,保障了外部HTML的安全渲染。 + +### 2. 功能简介 + + 该功能模块的主要目的是扩展FastGPT在Markdown渲染中的能力,支持嵌入和渲染HTML内容。由于是利用 Iframe 渲染,所以无法确认内容的高度,FastGPT 中会给 Iframe 设置一个固定高度来进行渲染。并且不支持 HTML 中执行 js 脚本。 + +### 3. 技术实现 + + 本模块通过以下方式实现了HTML渲染和互动功能: + + - **组件设计**:该模块通过渲染 `iframe` 类型的代码块展示HTML内容。使用自定义的 `IframeBlock` 组件,结合 `sandbox` 属性来保障嵌入内容的安全性。`sandbox` 限制了外部HTML中的行为,如禁用脚本执行、限制表单提交等,确保HTML内容的安全性。通过辅助函数与渲染Markdown内容的部分结合,处理 `iframe` 嵌入的HTML内容。 + - **安全机制**:通过 `iframe` 的 `sandbox` 属性和 `referrerPolicy` 来防止潜在的安全风险。`sandbox` 属性提供了细粒度的控制,允许特定的功能(如脚本、表单、弹出窗口等)在受限的环境中执行,以确保渲染的HTML内容不会对系统造成威胁。 + - **展示与互动功能**:用户可以通过不同的展示模式(如全屏、预览、源代码模式)自由切换,以便更灵活地查看和控制嵌入的HTML内容。嵌入的 `iframe` 自适应父容器的宽度,同时保证 `iframe`嵌入的内容能够适当显示。 + +### 4. 如何使用 + +你只需要通过 Markdown 代码块格式,并标记语言为 `html` 即可。例如: + +```md +```html + + + + + + +
欢迎使用FastGPT + + + + + + +``` + +# 知识库引用分块阅读器 +## FastGPT 分块阅读器功能介绍 + +在企业 AI 应用落地过程中,文档知识引用的精确性和透明度一直是用户关注的焦点。FastGPT 4.9.1 版本带来的知识库分块阅读器,巧妙解决了这一痛点,让 AI 引用不再是"黑盒"。 + +# 为什么需要分块阅读器? + +传统的 AI 对话中,当模型引用企业知识库内容时,用户往往只能看到被引用的片段,无法获取完整语境,这给内容验证和深入理解带来了挑战。分块阅读器的出现,让用户可以在对话中直接查看引用内容的完整文档,并精确定位到引用位置,实现了引用的"可解释性"。 + +## 传统引用体验的局限 + +以往在知识库中上传文稿后,当我们在工作流中输入问题时,传统的引用方式只会展示引用到的分块,无法确认分块在文章中的上下文: + +| 问题 | 引用 | +| --- | --- | +|  |  | + +## FastGPT 分块阅读器:精准定位,无缝阅读 + +而在 FastGPT 全新的分块式阅读器中,同样的知识库内容和问题,呈现方式发生了质的飞跃 + + + +当 AI 引用知识库内容时,用户只需点击引用链接,即可打开一个浮窗,呈现完整的原文内容,并通过醒目的高亮标记精确显示引用的文本片段。这既保证了回答的可溯源性,又提供了便捷的原文查阅体验。 + +# 核心功能 + +## 全文展示与定位 + +"分块阅读器" 让用户能直观查看AI回答引用的知识来源。 + +在对话界面中,当 AI 引用了知识库内容,系统会在回复下方展示出处信息。用户只需点击这些引用链接,即可打开一个优雅的浮窗,呈现完整的原文内容,并通过醒目的高亮标记精确显示 AI 引用的文本片段。 + +这一设计既保证了回答的可溯源性,又提供了便捷的原文查阅体验,让用户能轻松验证AI回答的准确性和相关上下文。 + + + + +## 便捷引用导航 + +分块阅读器右上角设计了简洁实用的导航控制,用户可以通过这对按钮轻松在多个引用间切换浏览。导航区还直观显示当前查看的引用序号及总引用数量(如 "7/10"),帮助用户随时了解浏览进度和引用内容的整体规模。 + + + +## 引用质量评分 + +每条引用内容旁边都配有智能评分标签,直观展示该引用在所有知识片段中的相关性排名。用户只需将鼠标悬停在评分标签上,即可查看完整的评分详情,了解这段引用内容为何被AI选中以及其相关性的具体构成。 + + + + +## 文档内容一键导出 + +分块阅读器贴心配备了内容导出功能,让有效信息不再流失。只要用户拥有相应知识库的阅读权限,便可通过简单点击将引用涉及的全文直接保存到本地设备。 + + + +# 进阶特性 + +## 灵活的可见度控制 + +FastGPT提供灵活的引用可见度设置,让知识共享既开放又安全。以免登录链接为例,管理员可精确控制外部访问者能看到的信息范围。 + +当设置为"仅引用内容可见"时,外部用户点击引用链接将只能查看 AI 引用的特定文本片段,而非完整原文档。如图所示,分块阅读器此时智能调整显示模式,仅呈现相关引用内容。 + +| | | +| --- | --- | +|  |  | + +## 即时标注优化 + +在浏览过程中,授权用户可以直接对引用内容进行即时标注和修正,系统会智能处理这些更新而不打断当前的对话体验。所有修改过的内容会通过醒目的"已更新"标签清晰标识,既保证了引用的准确性,又维持了对话历史的完整性。 + +这一无缝的知识优化流程特别适合团队协作场景,让知识库能在实际使用过程中持续进化,确保AI回答始终基于最新、最准确的信息源。 + +## 智能文档性能优化 + +面对现实业务中可能包含成千上万分块的超长文档,FastGPT采用了先进的性能优化策略,确保分块阅读器始终保持流畅响应。 + +系统根据引用相关性排序和数据库索引进行智能加载管理,实现了"按需渲染"机制——根据索引排序和数据库 id,只有当用户实际需要查看的内容才会被加载到内存中。这意味着无论是快速跳转到特定引用,还是自然滚动浏览文档,都能获得丝滑的用户体验,不会因为文档体积庞大而出现卡顿或延迟。 + +这一技术优化使FastGPT能够轻松应对企业级的大规模知识库场景,让即使是包含海量信息的专业文档也能高效展示和查阅。 # SSO & 外部成员同步 ## FastGPT 外部成员系统接入设计与配置 @@ -10822,11 +10930,6 @@ curl示例  -# 商业版后台 -## 商业版后台使用教程 - - - # AI 相关参数配置说明 ## FastGPT AI 相关参数配置说明 @@ -11240,1643 +11343,6 @@ ${content}  -# 基础教程 -## FastGPT 基础教程 - - - -# 对话框与HTML渲染 -## 如何在FastGPT中通过Markdown嵌入HTML代码块,并提供全屏、源代码切换等交互功能 - -| 源码模式 | 预览模式 | 全屏模式 | -| --- | --- | --- | -|  |  |  | - - -### 1. **设计背景** - - 尽管Markdown本身支持嵌入HTML标签,但由于安全问题,许多平台和环境对HTML的渲染进行了限制,特别是在渲染动态内容、交互式元素以及外部资源时。这些限制大大降低了用户在撰写和展示复杂文档时的灵活性,尤其是当需要嵌入外部HTML内容时。为了应对这一问题,我们通过使用 `iframe` 来嵌入和渲染HTML内容,并结合 `sandbox` 属性,保障了外部HTML的安全渲染。 - -### 2. 功能简介 - - 该功能模块的主要目的是扩展FastGPT在Markdown渲染中的能力,支持嵌入和渲染HTML内容。由于是利用 Iframe 渲染,所以无法确认内容的高度,FastGPT 中会给 Iframe 设置一个固定高度来进行渲染。并且不支持 HTML 中执行 js 脚本。 - -### 3. 技术实现 - - 本模块通过以下方式实现了HTML渲染和互动功能: - - - **组件设计**:该模块通过渲染 `iframe` 类型的代码块展示HTML内容。使用自定义的 `IframeBlock` 组件,结合 `sandbox` 属性来保障嵌入内容的安全性。`sandbox` 限制了外部HTML中的行为,如禁用脚本执行、限制表单提交等,确保HTML内容的安全性。通过辅助函数与渲染Markdown内容的部分结合,处理 `iframe` 嵌入的HTML内容。 - - **安全机制**:通过 `iframe` 的 `sandbox` 属性和 `referrerPolicy` 来防止潜在的安全风险。`sandbox` 属性提供了细粒度的控制,允许特定的功能(如脚本、表单、弹出窗口等)在受限的环境中执行,以确保渲染的HTML内容不会对系统造成威胁。 - - **展示与互动功能**:用户可以通过不同的展示模式(如全屏、预览、源代码模式)自由切换,以便更灵活地查看和控制嵌入的HTML内容。嵌入的 `iframe` 自适应父容器的宽度,同时保证 `iframe`嵌入的内容能够适当显示。 - -### 4. 如何使用 - -你只需要通过 Markdown 代码块格式,并标记语言为 `html` 即可。例如: - -```md -```html - - - - - - -欢迎使用FastGPT - - - - - - -``` - -# 知识库引用分块阅读器 -## FastGPT 分块阅读器功能介绍 - -在企业 AI 应用落地过程中,文档知识引用的精确性和透明度一直是用户关注的焦点。FastGPT 4.9.1 版本带来的知识库分块阅读器,巧妙解决了这一痛点,让 AI 引用不再是"黑盒"。 - -# 为什么需要分块阅读器? - -传统的 AI 对话中,当模型引用企业知识库内容时,用户往往只能看到被引用的片段,无法获取完整语境,这给内容验证和深入理解带来了挑战。分块阅读器的出现,让用户可以在对话中直接查看引用内容的完整文档,并精确定位到引用位置,实现了引用的"可解释性"。 - -## 传统引用体验的局限 - -以往在知识库中上传文稿后,当我们在工作流中输入问题时,传统的引用方式只会展示引用到的分块,无法确认分块在文章中的上下文: - -| 问题 | 引用 | -| --- | --- | -|  |  | - -## FastGPT 分块阅读器:精准定位,无缝阅读 - -而在 FastGPT 全新的分块式阅读器中,同样的知识库内容和问题,呈现方式发生了质的飞跃 - - - -当 AI 引用知识库内容时,用户只需点击引用链接,即可打开一个浮窗,呈现完整的原文内容,并通过醒目的高亮标记精确显示引用的文本片段。这既保证了回答的可溯源性,又提供了便捷的原文查阅体验。 - -# 核心功能 - -## 全文展示与定位 - -"分块阅读器" 让用户能直观查看AI回答引用的知识来源。 - -在对话界面中,当 AI 引用了知识库内容,系统会在回复下方展示出处信息。用户只需点击这些引用链接,即可打开一个优雅的浮窗,呈现完整的原文内容,并通过醒目的高亮标记精确显示 AI 引用的文本片段。 - -这一设计既保证了回答的可溯源性,又提供了便捷的原文查阅体验,让用户能轻松验证AI回答的准确性和相关上下文。 - - - - -## 便捷引用导航 - -分块阅读器右上角设计了简洁实用的导航控制,用户可以通过这对按钮轻松在多个引用间切换浏览。导航区还直观显示当前查看的引用序号及总引用数量(如 "7/10"),帮助用户随时了解浏览进度和引用内容的整体规模。 - - - -## 引用质量评分 - -每条引用内容旁边都配有智能评分标签,直观展示该引用在所有知识片段中的相关性排名。用户只需将鼠标悬停在评分标签上,即可查看完整的评分详情,了解这段引用内容为何被AI选中以及其相关性的具体构成。 - - - - -## 文档内容一键导出 - -分块阅读器贴心配备了内容导出功能,让有效信息不再流失。只要用户拥有相应知识库的阅读权限,便可通过简单点击将引用涉及的全文直接保存到本地设备。 - - - -# 进阶特性 - -## 灵活的可见度控制 - -FastGPT提供灵活的引用可见度设置,让知识共享既开放又安全。以免登录链接为例,管理员可精确控制外部访问者能看到的信息范围。 - -当设置为"仅引用内容可见"时,外部用户点击引用链接将只能查看 AI 引用的特定文本片段,而非完整原文档。如图所示,分块阅读器此时智能调整显示模式,仅呈现相关引用内容。 - -| | | -| --- | --- | -|  |  | - -## 即时标注优化 - -在浏览过程中,授权用户可以直接对引用内容进行即时标注和修正,系统会智能处理这些更新而不打断当前的对话体验。所有修改过的内容会通过醒目的"已更新"标签清晰标识,既保证了引用的准确性,又维持了对话历史的完整性。 - -这一无缝的知识优化流程特别适合团队协作场景,让知识库能在实际使用过程中持续进化,确保AI回答始终基于最新、最准确的信息源。 - -## 智能文档性能优化 - -面对现实业务中可能包含成千上万分块的超长文档,FastGPT采用了先进的性能优化策略,确保分块阅读器始终保持流畅响应。 - -系统根据引用相关性排序和数据库索引进行智能加载管理,实现了"按需渲染"机制——根据索引排序和数据库 id,只有当用户实际需要查看的内容才会被加载到内存中。这意味着无论是快速跳转到特定引用,还是自然滚动浏览文档,都能获得丝滑的用户体验,不会因为文档体积庞大而出现卡顿或延迟。 - -这一技术优化使FastGPT能够轻松应对企业级的大规模知识库场景,让即使是包含海量信息的专业文档也能高效展示和查阅。 - -# 对话框 -## 对话框组件,支持多种交互方式,提升用户在应用中的交互体验。 - - - -# API 文件库 -## FastGPT API 文件库功能介绍和使用方式 - -| | | -| --- | --- | -|  |  | - -## 背景 - -目前 FastGPT 支持本地文件导入,但是很多时候,用户自身已经有了一套文档库,如果把文件重复导入一遍,会造成二次存储,并且不方便管理。因为 FastGPT 提供了一个 API 文件库的概念,可以通过简单的 API 接口,去拉取已有的文档库,并且可以灵活配置是否导入。 - -API 文件库能够让用户轻松对接已有的文档库,只需要按照 FastGPT 的 API 文件库规范,提供相应文件接口,然后将服务接口的 baseURL 和 token 填入知识库创建参数中,就能直接在页面上拿到文件库的内容,并选择性导入 - -## 如何使用 API 文件库 - -创建知识库时,选择 API 文件库类型,然后需要配置两个关键参数:文件服务接口的 baseURL 和用于身份验证的请求头信息。只要提供的接口规范符合 FastGPT 的要求,系统就能自动获取并展示完整的文件列表,可以根据需要选择性地将文件导入到知识库中。 - -你需要提供两个参数: -- baseURL: 文件服务接口的 baseURL -- authorization: 用于身份验证的请求头信息,实际请求格式为 `Authorization: Bearer` - -## 接口规范 - -接口响应格式: - -```ts -type ResponseType = { - success: boolean; - message: string; - data: any; -} -``` - -数据类型: - -```ts -// 文件列表中,单项的文件类型 -type FileListItem = { - id: string; - parentId: string | null; - name: string; - type: 'file' | 'folder'; - updateTime: Date; - createTime: Date; -} -``` - - -### 1. 获取文件树 - -{{< tabs tabTotal="2" >}} -{{< tab tabName="请求示例" >}} -{{< markdownify >}} - -{{% alert icon=" " context="success" %}} -- parentId - 父级 id,可选,或者 null。 -- searchKey - 检索词,可选 -{{% /alert %}} - -```bash -curl --location --request POST '{{baseURL}}/v1/file/list' \ ---header 'Authorization: Bearer {{authorization}}' \ ---header 'Content-Type: application/json' \ ---data-raw '{ - "parentId": null, - "searchKey": "" -}' -``` - -{{< /markdownify >}} -{{< /tab >}} - -{{< tab tabName="响应示例" >}} -{{< markdownify >}} - -```json -{ - "code": 200, - "success": true, - "message": "", - "data": [ - { - "id": "xxxx", - "parentId": "xxxx", - "type": "file", // file | folder - "name":"test.json", - "updateTime":"2024-11-26T03:05:24.759Z", - "createTime":"2024-11-26T03:05:24.759Z" - } - ] -} -``` - -{{< /markdownify >}} -{{< /tab >}} -{{< /tabs >}} - -### 2. 获取单个文件内容(文本内容或访问链接) - -{{< tabs tabTotal="3" >}} -{{< tab tabName="请求示例" >}} -{{< markdownify >}} - -```bash -curl --location --request GET '{{baseURL}}/v1/file/content?id=xx' \ ---header 'Authorization: Bearer {{authorization}}' -``` - -{{< /markdownify >}} -{{< /tab >}} - -{{< tab tabName="响应示例" >}} -{{< markdownify >}} - -```json -{ - "code": 200, - "success": true, - "message": "", - "data": { - "title": "文档标题", - "content": "FastGPT 是一个基于 LLM 大语言模型的知识库问答系统,提供开箱即用的数据处理、模型调用等能力。同时可以通过 Flow 可视化进行工作流编排,从而实现复杂的问答场景!\n", - "previewUrl": "xxxx" - } -} -``` - -{{% alert icon=" " context="success" %}} - -- title - 文件标题。 -- content - 文件内容,直接拿来用。 -- previewUrl - 文件链接,系统会请求该地址获取文件内容。 - -`content`和`previewUrl`二选一返回,如果同时返回则 `content` 优先级更高,返回 `previewUrl`时,则会访问该链接进行文档内容读取。 - -{{% /alert %}} - -{{< /markdownify >}} -{{< /tab >}} -{{< /tabs >}} - - -### 3. 获取文件阅读链接(用于查看原文) - -{{< tabs tabTotal="2" >}} -{{< tab tabName="请求示例" >}} -{{< markdownify >}} - -id 为文件的 id。 - -```bash -curl --location --request GET '{{baseURL}}/v1/file/read?id=xx' \ ---header 'Authorization: Bearer {{authorization}}' -``` - -{{< /markdownify >}} -{{< /tab >}} - -{{< tab tabName="响应示例" >}} -{{< markdownify >}} - -```json -{ - "code": 200, - "success": true, - "message": "", - "data": { - "url": "xxxx" - } -} -``` - -{{% alert icon=" " context="success" %}} -- url - 文件访问链接,拿到后会自动打开。 -{{% /alert %}} - -{{< /markdownify >}} -{{< /tab >}} -{{< /tabs >}} - -# 知识库搜索方案和参数 -## 本节会详细介绍 FastGPT 知识库结构设计,理解其 QA 的存储格式和多向量映射,以便更好的构建知识库。同时会介绍每个搜索参数的功能。这篇介绍主要以使用为主,详细原理不多介绍。 - -## 理解向量 - -FastGPT 采用了 RAG 中的 Embedding 方案构建知识库,要使用好 FastGPT 需要简单的理解`Embedding`向量是如何工作的及其特点。 - -人类的文字、图片、视频等媒介是无法直接被计算机理解的,要想让计算机理解两段文字是否有相似性、相关性,通常需要将它们转成计算机可以理解的语言,向量是其中的一种方式。 - -向量可以简单理解为一个数字数组,两个向量之间可以通过数学公式得出一个`距离`,距离越小代表两个向量的相似度越大。从而映射到文字、图片、视频等媒介上,可以用来判断两个媒介之间的相似度。向量搜索便是利用了这个原理。 - -而由于文字是有多种类型,并且拥有成千上万种组合方式,因此在转成向量进行相似度匹配时,很难保障其精确性。在向量方案构建的知识库中,通常使用`topk`召回的方式,也就是查找前`k`个最相似的内容,丢给大模型去做更进一步的`语义判断`、`逻辑推理`和`归纳总结`,从而实现知识库问答。因此,在知识库问答中,向量搜索的环节是最为重要的。 - -影响向量搜索精度的因素非常多,主要包括:向量模型的质量、数据的质量(长度,完整性,多样性)、检索器的精度(速度与精度之间的取舍)。与数据质量对应的就是检索词的质量。 - -检索器的精度比较容易解决,向量模型的训练略复杂,因此数据和检索词质量优化成了一个重要的环节。 - - -### 提高向量搜索精度的方法 - -1. 更好分词分段:当一段话的结构和语义是完整的,并且是单一的,精度也会提高。因此,许多系统都会优化分词器,尽可能的保障每组数据的完整性。 -2. 精简`index`的内容,减少向量内容的长度:当`index`的内容更少,更准确时,检索精度自然会提高。但与此同时,会牺牲一定的检索范围,适合答案较为严格的场景。 -3. 丰富`index`的数量,可以为同一个`chunk`内容增加多组`index`。 -4. 优化检索词:在实际使用过程中,用户的问题通常是模糊的或是缺失的,并不一定是完整清晰的问题。因此优化用户的问题(检索词)很大程度上也可以提高精度。 -5. 微调向量模型:由于市面上直接使用的向量模型都是通用型模型,在特定领域的检索精度并不高,因此微调向量模型可以很大程度上提高专业领域的检索效果。 - -## FastGPT 构建知识库方案 - -### 数据存储结构 - -在 FastGPT 中,整个知识库由库、集合和数据 3 部分组成。集合可以简单理解为一个`文件`。一个`库`中可以包含多个`集合`,一个`集合`中可以包含多组`数据`。最小的搜索单位是`库`,也就是说,知识库搜索时,是对整个`库`进行搜索,而集合仅是为了对数据进行分类管理,与搜索效果无关。(起码目前还是) - - - -### 向量存储结构 - -FastGPT 采用了`PostgresSQL`的`PG Vector`插件作为向量检索器,索引为`HNSW`。且`PostgresSQL`仅用于向量检索(该引擎可以替换成其它数据库),`MongoDB`用于其他数据的存取。 - -在`MongoDB`的`dataset.datas`表中,会存储向量原数据的信息,同时有一个`indexes`字段,会记录其对应的向量ID,这是一个数组,也就是说,一组数据可以对应多个向量。 - -在`PostgresSQL`的表中,设置一个`vector`字段用于存储向量。在检索时,会先召回向量,再根据向量的ID,去`MongoDB`中寻找原数据内容,如果对应了同一组原数据,则进行合并,向量得分取最高得分。 - - - -### 多向量的目的和使用方式 - -在一组向量中,内容的长度和语义的丰富度通常是矛盾的,无法兼得。因此,FastGPT 采用了多向量映射的方式,将一组数据映射到多组向量中,从而保障数据的完整性和语义的丰富度。 - -你可以为一组较长的文本,添加多组向量,从而在检索时,只要其中一组向量被检索到,该数据也将被召回。 - -意味着,你可以通过标注数据块的方式,不断提高数据块的精度。 - -### 检索方案 - -1. 通过`问题优化`实现指代消除和问题扩展,从而增加连续对话的检索能力以及语义丰富度。 -2. 通过`Concat query`来增加`Rerank`连续对话的时,排序的准确性。 -3. 通过`RRF`合并方式,综合多个渠道的检索效果。 -4. 通过`Rerank`来二次排序,提高精度。 - - - - -## 搜索参数 -| | | | -| --- |---| --- | -||  |  | - -### 搜索模式 - -#### 语义检索 - -语义检索是通过向量距离,计算用户问题与知识库内容的距离,从而得出“相似度”,当然这并不是语文上的相似度,而是数学上的。 - -优点: -- 相近语义理解 -- 跨多语言理解(例如输入中文问题匹配英文知识点) -- 多模态理解(文本,图片,音视频等) - -缺点: -- 依赖模型训练效果 -- 精度不稳定 -- 受关键词和句子完整度影响 - -#### 全文检索 - -采用传统的全文检索方式。适合查找关键的主谓语等。 - -#### 混合检索 - -同时使用向量检索和全文检索,并通过 RRF 公式进行两个搜索结果合并,一般情况下搜索结果会更加丰富准确。 - -由于混合检索后的查找范围很大,并且无法直接进行相似度过滤,通常需要进行利用重排模型进行一次结果重新排序,并利用重排的得分进行过滤。 - -#### 结果重排 - -利用`ReRank`模型对搜索结果进行重排,绝大多数情况下,可以有效提高搜索结果的准确率。不过,重排模型与问题的完整度(主谓语齐全)有一些关系,通常会先走问题优化后再进行搜索-重排。重排后可以得到一个`0-1`的得分,代表着搜索内容与问题的相关度,该分数通常比向量的得分更加精确,可以根据得分进行过滤。 - -FastGPT 会使用 `RRF` 对重排结果、向量搜索结果、全文检索结果进行合并,得到最终的搜索结果。 - -### 搜索过滤 - -#### 引用上限 - -每次搜索最多引用`n`个`tokens`的内容。 - -之所以不采用`top k`,是发现在混合知识库(问答库、文档库)时,不同`chunk`的长度差距很大,会导致`top k`的结果不稳定,因此采用了`tokens`的方式进行引用上限的控制。 - -#### 最低相关度 - -一个`0-1`的数值,会过滤掉一些低相关度的搜索结果。 - -该值仅在`语义检索`或使用`结果重排`时生效。 - -### 问题优化 - -#### 背景 - -在 RAG 中,我们需要根据输入的问题去数据库里执行 embedding 搜索,查找相关的内容,从而查找到相似的内容(简称知识库搜索)。 - -在搜索的过程中,尤其是连续对话的搜索,我们通常会发现后续的问题难以搜索到合适的内容,其中一个原因是知识库搜索只会使用“当前”的问题去执行。看下面的例子: - - - -用户在提问“第二点是什么”的时候,只会去知识库里查找“第二点是什么”,压根查不到内容。实际上需要查询的是“QA结构是什么”。因此我们需要引入一个【问题优化】模块,来对用户当前的问题进行补全,从而使得知识库搜索能够搜索到合适的内容。使用补全后效果如下: - - - -#### 实现方式 - -在进行`数据检索`前,会先让模型进行`指代消除`与`问题扩展`,一方面可以可以解决指代对象不明确问题,同时可以扩展问题的语义丰富度。你可以通过每次对话后的对话详情,查看补全的结果。 - -# 外部文件知识库 -## FastGPT 外部文件知识库功能介绍和使用方式 - -外部文件库是 FastGPT 商业版特有功能。它允许接入你现在的文件系统,无需将文件再导入一份到 FastGPT 中。 - -并且,阅读权限可以通过你的文件系统进行控制。 - -| | | | -| --------------------- | --------------------- | --------------------- | -|  |  |  | - - -## 导入参数说明 - -- 外部预览地址:用于跳转你的文件阅读地址,会携带“文件阅读ID”进行访问。 -- 文件访问URL:文件可访问的地址。 -- 文件阅读ID:通常情况下,文件访问URL是临时的。如果希望永久可以访问,你需要使用该文件阅读ID,并配合上“外部预览地址”,跳转至新的阅读地址进行原文件访问。 -- 文件名:默认会自动解析文件访问URL上的文件名。如果你手动填写,将会以手动填写的值为准。 - -[点击查看API导入文档](/docs/development/openapi/dataset/#创建一个外部文件库集合商业版) - -## API 文件库替代方案 - -4.8.15 提供了新的知识库类型 - API 文件库,对外部文件知识库做了进一步的拓展 - -通过对接口进行简单的调整,就能使用 API 文件库代替外部文件知识库的功能 - -你可以直接将外部文件知识库中的外部预览地址,作为 API 文件库接口规范中获取文件阅读链接的接口返回 - -然后再以相同的 baseURL 实现获取文件列表和获取单个文件内容这两个接口 - -这样就能轻松地使用 API 文件库替代原有的外部文件知识库,更多详细的内容见 API 文件库的文档 - -# 飞书知识库 -## FastGPT 飞书知识库功能介绍和使用方式 - -| | | -| --- | --- | -|  |  | - -FastGPT v4.8.16 版本开始,商业版用户支持飞书知识库导入,用户可以通过配置飞书应用的 appId 和 appSecret,并选中一个**文档空间的顶层文件夹**来导入飞书知识库。目前处于测试阶段,部分交互有待优化。 - -由于飞书限制,无法直接获取所有文档内容,目前仅可以获取共享空间下文件目录的内容,无法获取个人空间和知识库里的内容。 - - -## 1. 创建飞书应用 - -打开 [飞书开放平台](https://open.feishu.cn/?lang=zh-CN),点击**创建应用**,选择**自建应用**,然后填写应用名称。 - -## 2. 配置应用权限 - -创建应用后,进入应用可以配置相关权限,这里需要增加**3个权限**: - -1. 获取云空间文件夹下的云文档清单 -2. 查看新版文档 -3. 查看、评论、编辑和管理云空间中所有文件 - - - -## 3. 获取 appId 和 appSecret - - - -## 4. 给 Folder 增加权限 - -可参考飞书教程: https://open.feishu.cn/document/server-docs/docs/drive-v1/faq#b02e5bfb - -大致总结为: - -1. 把刚刚创建的应用拉入一个群里 -2. 给这个群增加目录权限 - -如果你的目录已经给全员组增加权限了,则可以跳过上面步骤,直接获取 Folder Token。 - - - -## 5. 获取 Folder Token - -可以页面路径上获取 Folder Token,注意不要把问号复制进来。 - - - -## 6. 创建知识库 - -根据 3 和 5 获取到的 3 个参数,创建知识库,选择飞书文件库类型,然后填入对应的参数,点击创建。 - - - -# 知识库基础原理介绍 -## 本节详细介绍RAG模型的核心机制、应用场景及其在生成任务中的优势与局限性。 - -[RAG文档](https://huggingface.co/docs/transformers/model_doc/rag) - -# 1. 引言 - -随着自然语言处理(NLP)技术的迅猛发展,生成式语言模型(如GPT、BART等)在多种文本生成任务中表现卓越,尤其在语言生成和上下文理解方面。然而,纯生成模型在处理事实类任务时存在一些固有的局限性。例如,由于这些模型依赖于固定的预训练数据,它们在回答需要最新或实时信息的问题时,可能会出现“编造”信息的现象,导致生成结果不准确或缺乏事实依据。此外,生成模型在面对长尾问题和复杂推理任务时,常因缺乏特定领域的外部知识支持而表现不佳,难以提供足够的深度和准确性。 - -与此同时,检索模型(Retriever)能够通过在海量文档中快速找到相关信息,解决事实查询的问题。然而,传统检索模型(如BM25)在面对模糊查询或跨域问题时,往往只能返回孤立的结果,无法生成连贯的自然语言回答。由于缺乏上下文推理能力,检索模型生成的答案通常不够连贯和完整。 - -为了解决这两类模型的不足,检索增强生成模型(Retrieval-Augmented Generation,RAG)应运而生。RAG通过结合生成模型和检索模型的优势,实时从外部知识库中获取相关信息,并将其融入生成任务中,确保生成的文本既具备上下文连贯性,又包含准确的知识。这种混合架构在智能问答、信息检索与推理、以及领域特定的内容生成等场景中表现尤为出色。 - -## 1.1 RAG的定义 - -RAG是一种将信息检索与生成模型相结合的混合架构。首先,检索器从外部知识库或文档集中获取与用户查询相关的内容片段;然后,生成器基于这些检索到的内容生成自然语言输出,确保生成的内容既信息丰富,又具备高度的相关性和准确性。 - -# 2. RAG模型的核心机制 - -RAG 模型由两个主要模块构成:检索器(Retriever)与生成器(Generator)。这两个模块相互配合,确保生成的文本既包含外部的相关知识,又具备自然流畅的语言表达。 - -## 2.1 检索器(Retriever) - -检索器的主要任务是从一个外部知识库或文档集中获取与输入查询最相关的内容。在RAG中,常用的技术包括: - -- 向量检索:如BERT向量等,它通过将文档和查询转化为向量空间中的表示,并使用相似度计算来进行匹配。向量检索的优势在于能够更好地捕捉语义相似性,而不仅仅是依赖于词汇匹配。 -- 传统检索算法:如BM25,主要基于词频和逆文档频率(TF-IDF)的加权搜索模型来对文档进行排序和检索。BM25适用于处理较为简单的匹配任务,尤其是当查询和文档中的关键词有直接匹配时。 - -RAG中检索器的作用是为生成器提供一个上下文背景,使生成器能够基于这些检索到的文档片段生成更为相关的答案。 - -## 2.2 生成器(Generator) - -生成器负责生成最终的自然语言输出。在RAG系统中,常用的生成器包括: - -- BART:BART是一种序列到序列的生成模型,专注于文本生成任务,可以通过不同层次的噪声处理来提升生成的质量 。 -- GPT系列:GPT是一个典型的预训练语言模型,擅长生成流畅自然的文本。它通过大规模数据训练,能够生成相对准确的回答,尤其在任务-生成任务中表现尤为突出 。 - -生成器在接收来自检索器的文档片段后,会利用这些片段作为上下文,并结合输入的查询,生成相关且自然的文本回答。这确保了模型的生成结果不仅仅基于已有的知识,还能够结合外部最新的信息。 - -## 2.3 RAG的工作流程 - -RAG模型的工作流程可以总结为以下几个步骤: - -1. 输入查询:用户输入问题,系统将其转化为向量表示。 -2. 文档检索:检索器从知识库中提取与查询最相关的文档片段,通常使用向量检索技术或BM25等传统技术进行。 -3. 生成答案:生成器接收检索器提供的片段,并基于这些片段生成自然语言答案。生成器不仅基于原始的用户查询,还会利用检索到的片段提供更加丰富、上下文相关的答案。 -4. 输出结果:生成的答案反馈给用户,这个过程确保了用户能够获得基于最新和相关信息的准确回答。 - -# 3. RAG模型的工作原理 - -## 3.1 检索阶段 - -在RAG模型中,用户的查询首先被转化为向量表示,然后在知识库中执行向量检索。通常,检索器采用诸如BERT等预训练模型生成查询和文档片段的向量表示,并通过相似度计算(如余弦相似度)匹配最相关的文档片段。RAG的检索器不仅仅依赖简单的关键词匹配,而是采用语义级别的向量表示,从而在面对复杂问题或模糊查询时,能够更加准确地找到相关知识。这一步骤对于最终生成的回答至关重要,因为检索的效率和质量直接决定了生成器可利用的上下文信息 。 - -## 3.2 生成阶段 - -生成阶段是RAG模型的核心部分,生成器负责基于检索到的内容生成连贯且自然的文本回答。RAG中的生成器,如BART或GPT等模型,结合用户输入的查询和检索到的文档片段,生成更加精准且丰富的答案。与传统生成模型相比,RAG的生成器不仅能够生成语言流畅的回答,还可以根据外部知识库中的实际信息提供更具事实依据的内容,从而提高了生成的准确性 。 - -## 3.3 多轮交互与反馈机制 - -RAG模型在对话系统中能够有效支持多轮交互。每一轮的查询和生成结果会作为下一轮的输入,系统通过分析和学习用户的反馈,逐步优化后续查询的上下文。通过这种循环反馈机制,RAG能够更好地调整其检索和生成策略,使得在多轮对话中生成的答案越来越符合用户的期望。此外,多轮交互还增强了RAG在复杂对话场景中的适应性,使其能够处理跨多轮的知识整合和复杂推理 。 - -# 4. RAG的优势与局限 - -## 4.1 优势 - -- 信息完整性:RAG 模型结合了检索与生成技术,使得生成的文本不仅语言自然流畅,还能够准确利用外部知识库提供的实时信息。这种方法能够显著提升生成任务的准确性,特别是在知识密集型场景下,如医疗问答或法律意见生成。通过从知识库中检索相关文档,RAG 模型避免了生成模型“编造”信息的风险,确保输出更具真实性 。 -- 知识推理能力:RAG 能够利用大规模的外部知识库进行高效检索,并结合这些真实数据进行推理,生成基于事实的答案。相比传统生成模型,RAG 能处理更为复杂的任务,特别是涉及跨领域或跨文档的推理任务。例如,法律领域的复杂判例推理或金融领域的分析报告生成都可以通过RAG的推理能力得到优化 。 -- 领域适应性强:RAG 具有良好的跨领域适应性,能够根据不同领域的知识库进行特定领域内的高效检索和生成。例如,在医疗、法律、金融等需要实时更新和高度准确性的领域,RAG 模型的表现优于仅依赖预训练的生成模型 。 - -## 4.2 局限 - -RAG(检索增强生成)模型通过结合检索器和生成器,实现了在多种任务中知识密集型内容生成的突破性进展。然而,尽管其具有较强的应用潜力和跨领域适应能力,但在实际应用中仍然面临着一些关键局限,限制了其在大规模系统中的部署和优化。以下是RAG模型的几个主要局限性: - -#### 4.2.1 检索器的依赖性与质量问题 - -RAG模型的性能很大程度上取决于检索器返回的文档质量。由于生成器主要依赖检索器提供的上下文信息,如果检索到的文档片段不相关、不准确,生成的文本可能出现偏差,甚至产生误导性的结果。尤其在多模糊查询或跨领域检索的情况下,检索器可能无法找到合适的片段,这将直接影响生成内容的连贯性和准确性。 - -- 挑战:当知识库庞大且内容多样时,如何提高检索器在复杂问题下的精确度是一大挑战。当前的方法如BM25等在特定任务上有局限,尤其是在面对语义模糊的查询时,传统的关键词匹配方式可能无法提供语义上相关的内容。 -- 解决途径:引入混合检索技术,如结合稀疏检索(BM25)与密集检索(如向量检索)。例如,Faiss的底层实现允许通过BERT等模型生成密集向量表示,显著提升语义级别的匹配效果。通过这种方式,检索器可以捕捉深层次的语义相似性,减少无关文档对生成器的负面影响。 - -#### 4.2.2 生成器的计算复杂度与性能瓶颈 - -RAG模型将检索和生成模块结合,尽管生成结果更加准确,但也大大增加了模型的计算复杂度。尤其在处理大规模数据集或长文本时,生成器需要处理来自多个文档片段的信息,导致生成时间明显增加,推理速度下降。对于实时问答系统或其他需要快速响应的应用场景,这种高计算复杂度是一个主要瓶颈。 - -- 挑战:当知识库规模扩大时,检索过程中的计算开销以及生成器在多片段上的整合能力都会显著影响系统的效率。同时,生成器也面临着资源消耗的问题,尤其是在多轮对话或复杂生成任务中,GPU和内存的消耗会成倍增加。 -- 解决途径:使用模型压缩技术和知识蒸馏来减少生成器的复杂度和推理时间。此外,分布式计算与模型并行化技术的引入,如[DeepSpeed](https://www.deepspeed.ai/)和模型压缩工具,可以有效应对生成任务的高计算复杂度,提升大规模应用场景中的推理效率。 - -#### 4.2.3 知识库的更新与维护 - -RAG模型通常依赖于一个预先建立的外部知识库,该知识库可能包含文档、论文、法律条款等各类信息。然而,知识库内容的时效性和准确性直接影响到RAG生成结果的可信度。随着时间推移,知识库中的内容可能过时,导致生成的回答不能反映最新的信息。这对于需要实时信息的场景(如医疗、金融)尤其明显。 - -- 挑战:知识库需要频繁更新,但手动更新知识库既耗时又容易出错。如何在不影响系统性能的情况下实现知识库的持续自动更新是当前的一大挑战。 -- 解决途径:利用自动化爬虫和信息提取系统,可以实现对知识库的自动化更新,例如,Scrapy等爬虫框架可以自动抓取网页数据并更新知识库。结合[动态索引技术](https://arxiv.org/pdf/2102.03315),可以帮助检索器实时更新索引,确保知识库反映最新信息。同时,结合增量学习技术,生成器可以逐步吸收新增的信息,避免生成过时答案。此外,动态索引技术也可以帮助检索器实时更新索引,确保知识库检索到的文档反映最新的内容。 - -#### 4.2.4 生成内容的可控性与透明度 - -RAG模型结合了检索与生成模块,在生成内容的可控性和透明度上存在一定问题。特别是在复杂任务或多义性较强的用户输入情况下,生成器可能会基于不准确的文档片段生成错误的推理,导致生成的答案偏离实际问题。此外,由于RAG模型的“黑箱”特性,用户难以理解生成器如何利用检索到的文档信息,这在高敏感领域如法律或医疗中尤为突出,可能导致用户对生成内容产生不信任感。 - -- 挑战:模型透明度不足使得用户难以验证生成答案的来源和可信度。对于需要高可解释性的任务(如医疗问诊、法律咨询等),无法追溯生成答案的知识来源会导致用户不信任模型的决策。 -- 解决途径:为提高透明度,可以引入可解释性AI(XAI)技术,如LIME或SHAP([链接](https://github.com/marcotcr/lime)),为每个生成答案提供详细的溯源信息,展示所引用的知识片段。这种方法能够帮助用户理解模型的推理过程,从而增强对模型输出的信任。此外,针对生成内容的控制,可以通过加入规则约束或用户反馈机制,逐步优化生成器的输出,确保生成内容更加可信。 - -# 5. RAG整体改进方向 - -RAG模型的整体性能依赖于知识库的准确性和检索的效率,因此在数据采集、内容分块、精准检索和回答生成等环节进行优化,是提升模型效果的关键。通过加强数据来源、改进内容管理、优化检索策略及提升回答生成的准确性,RAG模型能够更加适应复杂且动态的实际应用需求。 - -## 5.1 数据采集与知识库构建 - -RAG模型的核心依赖在于知识库的数据质量和广度,知识库在某种程度上充当着“外部记忆”的角色。因此,高质量的知识库不仅应包含广泛领域的内容,更要确保数据来源的权威性、可靠性以及时效性。知识库的数据源应涵盖多种可信的渠道,例如科学文献数据库(如PubMed、IEEE Xplore)、权威新闻媒体、行业标准和报告等,这样才能提供足够的背景信息支持RAG在不同任务中的应用。此外,为了确保RAG模型能够提供最新的回答,知识库需要具备自动化更新的能力,以避免数据内容老旧,导致回答失准或缺乏现实参考。 - -- 挑战: - - 尽管数据采集是构建知识库的基础,但在实际操作中仍存在以下几方面的不足: - - 数据采集来源单一或覆盖不全 - 1. RAG模型依赖多领域数据的支持,然而某些知识库过度依赖单一或有限的数据源,通常集中在某些领域,导致在多任务需求下覆盖不足。例如,依赖医学领域数据而缺乏法律和金融数据会使RAG模型在跨领域问答中表现不佳。这种局限性削弱了RAG模型在处理不同主题或多样化查询时的准确性,使得系统在应对复杂或跨领域任务时能力欠缺。 - - 数据质量参差不齐 - 1. 数据源的质量差异直接影响知识库的可靠性。一些数据可能来源于非权威或低质量渠道,存在偏见、片面或不准确的内容。这些数据若未经筛选录入知识库,会导致RAG模型生成偏差或不准确的回答。例如,在医学领域中,如果引入未经验证的健康信息,可能导致模型给出误导性回答,产生负面影响。数据质量不一致的知识库会大大降低模型输出的可信度和适用性。 - - 缺乏定期更新机制 - 1. 许多知识库缺乏自动化和频繁的更新机制,特别是在信息变动频繁的领域,如法律、金融和科技。若知识库长期未更新,则RAG模型无法提供最新信息,生成的回答可能过时或不具备实时参考价值。对于用户而言,特别是在需要实时信息的场景下,滞后的知识库会显著影响RAG模型的可信度和用户体验。 - - 数据处理耗时且易出错 - 1. 数据的采集、清洗、分类和结构化处理是一项繁琐而复杂的任务,尤其是当数据量巨大且涉及多种格式时。通常,大量数据需要人工参与清洗和结构化,而自动化处理流程也存在缺陷,可能会产生错误或遗漏关键信息。低效和易出错的数据处理流程会导致知识库内容不准确、不完整,进而影响RAG模型生成的答案的准确性和连贯性。 - - 数据敏感性和隐私问题 - 1. 一些特定领域的数据(如医疗、法律、金融)包含敏感信息,未经适当的隐私保护直接引入知识库可能带来隐私泄露的风险。此外,某些敏感数据需要严格的授权和安全存储,以确保在知识库使用中避免违规或隐私泄漏。若未能妥善处理数据隐私问题,不仅会影响系统的合规性,还可能对用户造成严重后果。 -- 改进: - - 针对以上不足,可以从以下几个方面进行改进,以提高数据采集和知识库构建的有效性: - - 扩大数据源覆盖范围,增加数据的多样性 - 1. 具体实施:将知识库的数据源扩展至多个重要领域,确保包含医疗、法律、金融等关键领域的专业数据库,如PubMed、LexisNexis和金融数据库。使用具有开放许可的开源数据库和经过认证的数据,确保来源多样化且权威性强。 - 2. 目的与效果:通过跨领域数据覆盖,知识库的广度和深度得以增强,确保RAG模型能够在多任务场景下提供可靠回答。借助多领域合作机构的数据支持,在应对多样化需求时将更具优势。 - - 构建数据质量审查与过滤机制 - 1. 具体实施:采用自动化数据质量检测算法,如文本相似度检查、情感偏差检测等工具,结合人工审查过滤不符合标准的数据。为数据打分并构建“数据可信度评分”,基于来源可信度、内容完整性等指标筛选数据。 - 2. 目的与效果:减少低质量、偏见数据的干扰,确保知识库内容的可靠性。此方法保障了RAG模型输出的权威性,特别在回答复杂或专业问题时,用户能够获得更加精准且中立的答案。 - - 实现知识库的自动化更新 - 1. 具体实施:引入自动化数据更新系统,如网络爬虫,定期爬取可信站点、行业数据库的最新数据,并利用变化检测算法筛选出与已有知识库重复或已失效的数据。更新机制可以结合智能筛选算法,仅采纳与用户查询高相关性或时效性强的数据。 - 2. 目的与效果:知识库保持及时更新,确保模型在快速变化的领域(如金融、政策、科技)中提供最新信息。用户体验将因此大幅提升,特别是在需要动态或最新信息的领域,输出的内容将更具时效性。 - - 采用高效的数据清洗与分类流程 - 1. 具体实施:使用自然语言处理技术,如BERT等模型进行数据分类、实体识别和文本去噪,结合去重算法清理重复内容。采用自动化的数据标注和分类算法,将不同数据类型分领域存储。 - 2. 目的与效果:数据清洗和分领域管理可以大幅提高数据处理的准确性,减少低质量数据的干扰。此改进确保RAG模型的回答生成更流畅、上下文更连贯,提升用户对生成内容的理解和信赖。 - - 强化数据安全与隐私保护措施 - 1. 具体实施:针对医疗、法律等敏感数据,采用去标识化处理技术(如数据脱敏、匿名化等),并结合差分隐私保护。建立数据权限管理和加密存储机制,对敏感信息进行严格管控。 - 2. 目的与效果:在保护用户隐私的前提下,确保使用的数据合规、安全,适用于涉及个人或敏感数据的应用场景。此措施进一步保证了系统的法律合规性,并有效防止隐私泄露风险。 - - 优化数据格式与结构的标准化 - 1. 具体实施:建立统一的数据格式与标准编码格式,例如使用JSON、XML或知识图谱形式组织结构化数据,以便于检索系统在查询时高效利用。同时,使用知识图谱等结构化工具,将复杂数据间的关系进行系统化存储。 - 2. 目的与效果:提高数据检索效率,确保模型在生成回答时能够高效使用数据的关键信息。标准化的数据结构支持高效的跨领域检索,并提高了RAG模型的内容准确性和知识关系的透明度。 - - 用户反馈机制 - 1. 具体实施:通过用户反馈系统,记录用户对回答的满意度、反馈意见及改进建议。使用机器学习算法从反馈中识别知识库中的盲区与信息误差,反馈至数据管理流程中进行更新和优化。 - 2. 目的与效果:利用用户反馈作为数据质量的调整依据,帮助知识库持续优化内容。此方法不仅提升了RAG模型的实际效用,还使知识库更贴合用户需求,确保输出内容始终符合用户期望。 - -## 5.2 数据分块与内容管理 - -RAG模型的数据分块与内容管理是优化检索与生成流程的关键。合理的分块策略能够帮助模型高效定位目标信息,并在回答生成时提供清晰的上下文支持。通常情况下,将数据按段落、章节或主题进行分块,不仅有助于检索效率的提升,还能避免冗余数据对生成内容造成干扰。尤其在复杂、长文本中,适当的分块策略可保证模型生成的答案具备连贯性、精确性,避免出现内容跳跃或上下文断裂的问题。 - -- 挑战: - - 在实际操作中,数据分块与内容管理环节存在以下问题: - - 分块不合理导致的信息断裂 - 1. 部分文本过度切割或分块策略不合理,可能导致信息链条被打断,使得模型在回答生成时缺乏必要的上下文支持。这会使生成内容显得零散,不具备连贯性,影响用户对答案的理解。例如,将法律文本或技术文档随意切割成小段落会导致重要的上下文关系丢失,降低模型的回答质量。 - - 冗余数据导致生成内容重复或信息过载 - 1. 数据集中往往包含重复信息,若不去重或优化整合,冗余数据可能导致生成内容的重复或信息过载。这不仅影响用户体验,还会浪费计算资源。例如,在新闻数据或社交媒体内容中,热点事件的描述可能重复出现,模型在生成回答时可能反复引用相同信息。 - - 分块粒度选择不当影响检索精度 - 1. 如果分块粒度过细,模型可能因缺乏足够的上下文而生成不准确的回答;若分块过大,检索时将难以定位具体信息,导致回答内容冗长且含有无关信息。选择适当的分块粒度对生成答案的准确性和相关性至关重要,特别是在问答任务中需要精确定位答案的情况下,粗放的分块策略会明显影响用户的阅读体验和回答的可读性。 - - 难以实现基于主题或内容逻辑的分块 - 1. 某些复杂文本难以直接按主题或逻辑结构进行分块,尤其是内容密集或领域专业性较强的数据。基于关键字或简单的规则切割往往难以识别不同主题和信息层次,导致模型在回答生成时信息杂乱。对内容逻辑或主题的错误判断,尤其是在医学、金融等场景下,会大大影响生成答案的准确度和专业性。 -- 改进: - - 为提高数据分块和内容管理的有效性,可以从以下几方面进行优化: - - 引入NLP技术进行自动化分块和上下文分析 - 1. 具体实施:借助自然语言处理(NLP)技术,通过句法分析、语义分割等方式对文本进行逻辑切割,以确保分块的合理性。可以基于BERT等预训练模型实现主题识别和上下文分析,确保每个片段均具备完整的信息链,避免信息断裂。 - 2. 目的与效果:确保文本切割基于逻辑或语义关系,避免信息链条被打断,生成答案时能够更具连贯性,尤其适用于长文本和复杂结构的内容,使模型在回答时上下文更加完整、连贯。 - - 去重与信息整合,优化内容简洁性 - 1. 具体实施:利用相似度算法(如TF-IDF、余弦相似度)识别冗余内容,并结合聚类算法自动合并重复信息。针对内容频繁重复的情况,可设置内容标记或索引,避免生成时多次引用相同片段。 - 2. 目的与效果:通过去重和信息整合,使数据更具简洁性,避免生成答案中出现重复信息。减少冗余信息的干扰,使用户获得简明扼要的回答,增强阅读体验,同时提升生成过程的计算效率。 - - 根据任务需求动态调整分块粒度 - 1. 具体实施:根据模型任务的不同,设置动态分块策略。例如,在问答任务中对关键信息较短的内容可采用小粒度分块,而在长文本或背景性内容中采用较大粒度。分块策略可基于查询需求或内容复杂度自动调整。 - 2. 目的与效果:分块粒度的动态调整确保模型在检索和生成时既能准确定位关键内容,又能为回答提供足够的上下文支持,提升生成内容的精准性和相关性,确保用户获取的信息既准确又不冗长。 - - 引入基于主题的分块方法以提升上下文完整性 - 1. 具体实施:使用主题模型(如LDA)或嵌入式文本聚类技术,对文本内容按主题进行自动分类与分块。基于相同主题内容的聚合分块,有助于模型识别不同内容层次,尤其适用于复杂的学术文章或多章节的长篇报告。 - 2. 目的与效果:基于主题的分块确保同一主题的内容保持在一个片段内,提升模型在回答生成时的上下文连贯性。适用于主题复杂、层次清晰的内容场景,提高回答的专业性和条理性,使用户更容易理解生成内容的逻辑关系。 - - 实时评估分块策略与内容呈现效果的反馈机制 - 1. 具体实施:通过用户反馈机制和生成质量评估系统实时监测生成内容的连贯性和准确性。对用户反馈中涉及分块效果差的部分进行重新分块,通过用户使用数据优化分块策略。 - 2. 目的与效果:用户反馈帮助识别不合理的分块和内容呈现问题,实现分块策略的动态优化,持续提升生成内容的质量和用户满意度。 - -## 5.3 检索优化 - -在RAG模型中,检索模块决定了生成答案的相关性和准确性。有效的检索策略可确保模型获取到最适合的上下文片段,使生成的回答更加精准且贴合查询需求。常用的混合检索策略(如BM25和DPR结合)能够在关键词匹配和语义检索方面实现优势互补:BM25适合高效地处理关键字匹配任务,而DPR在理解深层语义上表现更为优异。因此,合理选用检索策略有助于在不同任务场景下达到计算资源和检索精度的平衡,以高效提供相关上下文供生成器使用。 - -- 挑战: - - 检索优化过程中,仍面临以下不足之处: - - 检索策略单一导致的回答偏差 - 1. 当仅依赖BM25或DPR等单一技术时,模型可能难以平衡关键词匹配与语义理解。BM25在处理具象关键字时表现良好,但在面对复杂、含义丰富的语义查询时效果欠佳;相反,DPR虽然具备深度语义匹配能力,但对高频关键词匹配的敏感度较弱。检索策略单一将导致模型难以适应复杂的用户查询,回答中出现片面性或不够精准的情况。 - - 检索效率与资源消耗的矛盾 - 1. 检索模块需要在短时间内处理大量查询,而语义检索(如DPR)需要进行大量的计算和存储操作,计算资源消耗高,影响系统响应速度。特别是对于需要实时响应的应用场景,DPR的计算复杂度往往难以满足实际需求,因此在实时性和资源利用率上亟需优化。 - - 检索结果的冗余性导致内容重复 - 1. 当检索策略未对结果进行去重或排序优化时,RAG模型可能从知识库中检索出相似度高但内容冗余的文档片段。这会导致生成的回答中包含重复信息,影响阅读体验,同时增加无效信息的比例,使用户难以迅速获取核心答案。 - - 不同任务需求下检索策略的适配性差 - 1. RAG模型应用场景丰富,但不同任务对检索精度、速度和上下文长度的需求不尽相同。固定检索策略难以灵活应对多样化的任务需求,导致在应对不同任务时,模型检索效果受限。例如,面向精确性较高的医疗问答场景时,检索策略应偏向语义准确性,而在热点新闻场景中则应偏重检索速度。 -- 改进: - - 针对上述不足,可以从以下几个方面优化检索模块: - - 结合BM25与DPR的混合检索策略 - 1. 具体实施:采用BM25进行关键词初筛,快速排除无关信息,然后使用DPR进行深度语义匹配筛选。这样可以有效提升检索精度,平衡关键词匹配和语义理解。 - 2. 目的与效果:通过多层筛选过程,确保检索结果在语义理解和关键词匹配方面互补,提升生成内容的准确性,特别适用于多意图查询或复杂的长文本检索。 - - 优化检索效率,控制计算资源消耗 - 1. 具体实施:利用缓存机制存储近期高频查询结果,避免对相似查询的重复计算。同时,可基于分布式计算结构,将DPR的语义计算任务分散至多节点并行处理。 - 2. 目的与效果:缓存与分布式计算结合可显著减少检索计算压力,使系统能够在有限资源下提高响应速度,适用于高并发、实时性要求高的应用场景。 - - 引入去重和排序优化算法 - 1. 具体实施:在检索结果中应用余弦相似度去重算法,筛除冗余内容,并基于用户偏好或时间戳对检索结果排序,以确保输出内容的丰富性和新鲜度。 - 2. 目的与效果:通过去重和优化排序,确保生成内容更加简洁、直接,减少重复信息的干扰,提高用户获取信息的效率和体验。 - - 动态调整检索策略适应多任务需求 - 1. 具体实施:设置不同检索策略模板,根据任务类型自动调整检索权重、片段长度和策略组合。例如在医疗场景中偏向语义检索,而在金融新闻场景中更重视快速关键词匹配。 - 2. 目的与效果:动态调整检索策略使RAG模型更加灵活,能够适应不同任务需求,确保检索的精准性和生成答案的上下文适配性,显著提升多场景下的用户体验。 - - 借助Haystack等检索优化框架 - 1. 具体实施:在RAG模型中集成Haystack框架,以实现更高效的检索效果,并利用框架中的插件生态系统来增强检索模块的可扩展性和可调节性。 - 2. 目的与效果:Haystack提供了检索和生成的整合接口,有助于快速优化检索模块,并适应复杂多样的用户需求,在多任务环境中提供更稳定的性能表现。 - -## 5.4 回答生成与优化 - -在RAG模型中,生成器负责基于检索模块提供的上下文,为用户查询生成自然语言答案。生成内容的准确性和逻辑性直接决定了用户的体验,因此优化生成器的表现至关重要。通过引入知识图谱等结构化信息,生成器能够更准确地理解和关联上下文,从而生成逻辑连贯、准确的回答。此外,生成器的生成逻辑可结合用户反馈持续优化,使回答风格和内容更加符合用户需求。 - -- 挑战: - - 在回答生成过程中,RAG模型仍面临以下不足: - - 上下文不充分导致的逻辑不连贯 - 1. 当生成器在上下文缺失或信息不完整的情况下生成回答时,生成内容往往不够连贯,特别是在处理复杂、跨领域任务时。这种缺乏上下文支持的问题,容易导致生成器误解或忽略关键信息,最终生成内容的逻辑性和完整性欠佳。如在医学场景中,若生成器缺少对病例或症状的全面理解,可能导致回答不准确或不符合逻辑,影响专业性和用户信任度。 - - 专业领域回答的准确性欠佳 - 1. 在医学、法律等高专业领域中,生成器的回答需要高度的准确性。然而,生成器可能因缺乏特定知识而生成不符合领域要求的回答,出现内容偏差或理解错误,尤其在涉及专业术语和复杂概念时更为明显。如在法律咨询中,生成器可能未能正确引用相关法条或判例,导致生成的答案不够精确,甚至可能产生误导。 - - 难以有效整合多轮用户反馈 - 1. 生成器缺乏有效机制来利用多轮用户反馈进行自我优化。用户反馈可能涉及回答内容的准确性、逻辑性以及风格适配等方面,但生成器在连续对话中缺乏充分的调节机制,难以持续调整生成策略和回答风格。如在客服场景中,生成器可能连续生成不符合用户需求的回答,降低了用户满意度。 - - 生成内容的可控性和一致性不足 - 1. 在特定领域回答生成中,生成器的输出往往不具备足够的可控性和一致性。由于缺乏领域特定的生成规则和约束,生成内容的专业性和风格一致性欠佳,难以满足高要求的应用场景。如在金融报告生成中,生成内容需要确保一致的风格和术语使用,否则会影响输出的专业性和可信度。 -- 改进: - - 针对以上不足,可以从以下方面优化回答生成模块: - - 引入知识图谱与结构化数据,增强上下文理解 - 1. 具体实施:结合知识图谱或知识库,将医学、法律等专业领域的信息整合到生成过程中。生成器在生成回答时,可以从知识图谱中提取关键信息和关联知识点,确保回答具备连贯的逻辑链条。 - 2. 目的与效果:知识图谱的引入提升了生成内容的连贯性和准确性,尤其在高专业性领域中,通过丰富的上下文理解,使生成器能够产生符合逻辑的回答。 - - 设计专业领域特定的生成规则和约束 - 1. 具体实施:在生成模型中加入领域特定的生成规则和用语约束,特别针对医学、法律等领域的常见问答场景,设定回答模板、术语库等,以提高生成内容的准确性和一致性。 - 2. 目的与效果:生成内容更具领域特征,输出风格和内容的专业性增强,有效降低了生成器在专业领域中的回答偏差,满足用户对专业性和可信度的要求。 - - 优化用户反馈机制,实现动态生成逻辑调整 - 1. 具体实施:利用机器学习算法对用户反馈进行分析,从反馈中提取生成错误或用户需求的调整信息,动态调节生成器的生成逻辑和策略。同时,在多轮对话中逐步适应用户的需求和风格偏好。 - 2. 目的与效果:用户反馈的高效利用能够帮助生成器优化生成内容,提高连续对话中的响应质量,提升用户体验,并使回答更贴合用户需求。 - - 引入生成器与检索器的协同优化机制 - 1. 具体实施:通过协同优化机制,在生成器生成答案之前,允许生成器请求检索器补充缺失的上下文信息。生成器可基于回答需求自动向检索器发起上下文补充请求,从而获取完整的上下文。 - 2. 目的与效果:协同优化机制保障了生成器在回答时拥有足够的上下文支持,避免信息断层或缺失,提升回答的完整性和准确性。 - - 实施生成内容的一致性检测和语义校正 - 1. 具体实施:通过一致性检测算法对生成内容进行术语、风格的统一管理,并结合语义校正模型检测生成内容是否符合用户需求的逻辑结构。在复杂回答生成中,使用语义校正对不符合逻辑的生成内容进行自动优化。 - 2. 目的与效果:生成内容具备高度一致性和逻辑性,特别是在多轮对话和专业领域生成中,保障了内容的稳定性和专业水准,提高了生成答案的可信度和用户满意度。 - -## 5.5 RAG流程 - - - -1. 数据加载与查询输入: - 1. 用户通过界面或API提交自然语言查询,系统接收查询作为输入。 - 2. 输入被传递至向量化器,利用向量化技术(如BERT或Sentence Transformer)将自然语言查询转换为向量表示。 -2. 文档检索: - 1. 向量化后的查询会传递给检索器,检索器通过在知识库中查找最相关的文档片段。 - 2. 检索可以基于稀疏检索技术(如BM25)或密集检索技术(如DPR)来提高匹配效率和精度。 -3. 生成器处理与自然语言生成: - 1. 检索到的文档片段作为生成器的输入,生成器(如GPT、BART或T5)基于查询和文档内容生成自然语言回答。 - 2. 生成器结合了外部检索结果和预训练模型的语言知识,使回答更加精准、自然。 -4. 结果输出: - 1. 系统生成的答案通过API或界面返回给用户,确保答案连贯且知识准确。 -5. 反馈与优化: - 1. 用户可以对生成的答案进行反馈,系统根据反馈优化检索与生成过程。 - 2. 通过微调模型参数或调整检索权重,系统逐步改进其性能,确保未来查询时更高的准确性与效率。 - -# 6. RAG相关案例整合 - -[各种分类领域下的RAG](https://github.com/hymie122/RAG-Survey) - -# 7. RAG模型的应用 - -RAG模型已在多个领域得到广泛应用,主要包括: - -## 7.1 智能问答系统中的应用 - -- RAG通过实时检索外部知识库,生成包含准确且详细的答案,避免传统生成模型可能产生的错误信息。例如,在医疗问答系统中,RAG能够结合最新的医学文献,生成包含最新治疗方案的准确答案,避免生成模型提供过时或错误的建议。这种方法帮助医疗专家快速获得最新的研究成果和诊疗建议,提升医疗决策的质量。 - - [医疗问答系统案例](https://www.apexon.com/blog/empowering-discovery-the-role-of-rag-architecture-generative-ai-in-healthcare-life-sciences/) - -  - - 用户通过Web应用程序发起查询: - 1. 用户在一个Web应用上输入查询请求,这个请求进入后端系统,启动了整个数据处理流程。 - - 使用Azure AD进行身份验证: - 1. 系统通过Azure Active Directory (Azure AD) 对用户进行身份验证,确保只有经过授权的用户才能访问系统和数据。 - - 用户权限检查: - 1. 系统根据用户的组权限(由Azure AD管理)过滤用户能够访问的内容。这个步骤保证了用户只能看到他们有权限查看的信息。 - - Azure AI搜索服务: - 1. 过滤后的用户查询被传递给Azure AI搜索服务,该服务会在已索引的数据库或文档中查找与查询相关的内容。这个搜索引擎通过语义搜索技术检索最相关的信息。 - - 文档智能处理: - 1. 系统使用OCR(光学字符识别)和文档提取等技术处理输入的文档,将非结构化数据转换为结构化、可搜索的数据,便于Azure AI进行检索。 - - 文档来源: - 1. 这些文档来自预先存储的输入文档集合,这些文档在被用户查询之前已经通过文档智能处理进行了准备和索引。 - - Azure Open AI生成响应: - 1. 在检索到相关信息后,数据会被传递到Azure Open AI,该模块利用自然语言生成(NLG)技术,根据用户的查询和检索结果生成连贯的回答。 - - 响应返回用户: - 1. 最终生成的回答通过Web应用程序返回给用户,完成整个查询到响应的流程。 - - 整个流程展示了Azure AI技术的集成,通过文档检索、智能处理以及自然语言生成来处理复杂的查询,并确保了数据的安全和合规性。 - -## 7.2 信息检索与文本生成 - -- 文本生成:RAG不仅可以检索相关文档,还能根据这些文档生成总结、报告或文档摘要,从而增强生成内容的连贯性和准确性。例如,法律领域中,RAG可以整合相关法条和判例,生成详细的法律意见书,确保内容的全面性和严谨性。这在法律咨询和文件生成过程中尤为重要,可以帮助律师和法律从业者提高工作效率。 - - [法律领域检索增强生成案例](https://www.apexon.com/blog/empowering-discovery-the-role-of-rag-architecture-generative-ai-in-healthcare-life-sciences/) - - 内容总结: - - 背景: 传统的大语言模型 (LLMs) 在生成任务中表现优异,但在处理法律领域中的复杂任务时存在局限。法律文档具有独特的结构和术语,标准的检索评估基准往往无法充分捕捉这些领域特有的复杂性。为了弥补这一不足,LegalBench-RAG 旨在提供一个评估法律文档检索效果的专用基准。 - - LegalBench-RAG 的结构: - 1.  - 2. 工作流程: - 3. 用户输入问题(Q: ?,A: ?):用户通过界面输入查询问题,提出需要答案的具体问题。 - 4. 嵌入与检索模块(Embed + Retrieve):该模块接收到用户的查询后,会对问题进行嵌入(将其转化为向量),并在外部知识库或文档中执行相似度检索。通过检索算法,系统找到与查询相关的文档片段或信息。 - 5. 生成答案(A):基于检索到的最相关信息,生成模型(如GPT或类似的语言模型)根据检索的结果生成连贯的自然语言答案。 - 6. 对比和返回结果:生成的答案会与之前的相关问题答案进行对比,并最终将生成的答案返回给用户。 - 7. 该基准基于 LegalBench 的数据集,构建了 6858 个查询-答案对,并追溯到其原始法律文档的确切位置。 - 8. LegalBench-RAG 侧重于精确地检索法律文本中的小段落,而非宽泛的、上下文不相关的片段。 - 9. 数据集涵盖了合同、隐私政策等不同类型的法律文档,确保涵盖多个法律应用场景。 - - 意义: LegalBench-RAG 是第一个专门针对法律检索系统的公开可用的基准。它为研究人员和公司提供了一个标准化的框架,用于比较不同的检索算法的效果,特别是在需要高精度的法律任务中,例如判决引用、条款解释等。 - - 关键挑战: - 1. RAG 系统的生成部分依赖检索到的信息,错误的检索结果可能导致错误的生成输出。 - 2. 法律文档的长度和术语复杂性增加了模型检索和生成的难度。 - - 质量控制: 数据集的构建过程确保了高质量的人工注释和文本精确性,特别是在映射注释类别和文档ID到具体文本片段时进行了多次人工校验。 - -## 7.3 其它应用场景 - -RAG还可以应用于多模态生成场景,如图像、音频和3D内容生成。例如,跨模态应用如ReMoDiffuse和Make-An-Audio利用RAG技术实现不同数据形式的生成。此外,在企业决策支持中,RAG能够快速检索外部资源(如行业报告、市场数据),生成高质量的前瞻性报告,从而提升企业战略决策的能力。 - -## 8 总结 - -本文档系统阐述了检索增强生成(RAG)模型的核心机制、优势与应用场景。通过结合生成模型与检索模型,RAG解决了传统生成模型在面对事实性任务时的“编造”问题和检索模型难以生成连贯自然语言输出的不足。RAG模型能够实时从外部知识库获取信息,使生成内容既包含准确的知识,又具备流畅的语言表达,适用于医疗、法律、智能问答系统等多个知识密集型领域。 - -在应用实践中,RAG模型虽然有着信息完整性、推理能力和跨领域适应性等显著优势,但也面临着数据质量、计算资源消耗和知识库更新等挑战。为进一步提升RAG的性能,提出了针对数据采集、内容分块、检索策略优化以及回答生成的全面改进措施,如引入知识图谱、优化用户反馈机制、实施高效去重算法等,以增强模型的适用性和效率。 - -RAG在智能问答、信息检索与文本生成等领域展现了出色的应用潜力,并在不断发展的技术支持下进一步拓展至多模态生成和企业决策支持等场景。通过引入混合检索技术、知识图谱以及动态反馈机制,RAG能够更加灵活地应对复杂的用户需求,生成具有事实支撑和逻辑连贯性的回答。未来,RAG将通过增强模型透明性与可控性,进一步提升在专业领域中的可信度和实用性,为智能信息检索与内容生成提供更广泛的应用空间。 - -# Web 站点同步 -## FastGPT Web 站点同步功能介绍和使用方式 - - - -该功能目前仅向商业版用户开放。 - -## 什么是 Web 站点同步 - -Web 站点同步利用爬虫的技术,可以通过一个入口网站,自动捕获`同域名`下的所有网站,目前最多支持`200`个子页面。出于合规与安全角度,FastGPT 仅支持`静态站点`的爬取,主要用于各个文档站点快速构建知识库。 - -Tips: 国内的媒体站点基本不可用,公众号、csdn、知乎等。可以通过终端发送`curl`请求检测是否为静态站点,例如: - -```bash -curl https://doc.tryfastgpt.ai/docs/intro/ -``` - -## 如何使用 - -### 1. 新建知识库,选择 Web 站点同步 - - - - - -### 2. 点击配置站点信息 - - - -### 3. 填写网址和选择器 - - - -好了, 现在点击开始同步,静等系统自动抓取网站信息即可。 - - -## 创建应用,绑定知识库 - - - -## 选择器如何使用 - -选择器是 HTML CSS JS 的产物,你可以通过选择器来定位到你需要抓取的具体内容,而不是整个站点。使用方式为: - -### 首先打开浏览器调试面板(通常是 F12,或者【右键 - 检查】) - - - - - -### 输入对应元素的选择器 - -[菜鸟教程 css 选择器](https://www.runoob.com/cssref/css-selectors.html),具体选择器的使用方式可以参考菜鸟教程。 - -上图中,我们选中了一个区域,对应的是`div`标签,它有 `data-prismjs-copy`, `data-prismjs-copy-success`, `data-prismjs-copy-error` 三个属性,这里我们用到一个就够。所以选择器是: -**`div[data-prismjs-copy]`** - -除了属性选择器,常见的还有类和ID选择器。例如: - - - -上图 class 里的是类名(可能包含多个类名,都是空格隔开的,选择一个即可),选择器可以为:**`.docs-content`** - -### 多选择器使用 - -在开头的演示中,我们对 FastGPT 文档是使用了多选择器的方式来选择,通过逗号隔开了两个选择器。 - - - -我们希望选中上图两个标签中的内容,此时就需要两组选择器。一组是:`.docs-content .mb-0.d-flex`,含义是 `docs-content` 类下同时包含 `mb-0`和`d-flex` 两个类的子元素; - -另一组是`.docs-content div[data-prismjs-copy]`,含义是`docs-content` 类下包含`data-prismjs-copy`属性的`div`元素。 - -把两组选择器用逗号隔开即可:`.docs-content .mb-0.d-flex, .docs-content div[data-prismjs-copy]` - -# 语雀文件库 -## FastGPT 语雀文件库功能介绍和使用方式 - -| | | -| --- | --- | -|  |  | - -FastGPT v4.8.16 版本开始,商业版用户支持语雀文件库导入,用户可以通过配置语雀的 token 和 uid 来导入语雀文档库。目前处于测试阶段,部分交互有待优化。 - -## 1. 获取语雀的 token 和 uid - -在语雀首页 - 个人头像 - 设置,可找到对应参数。 - - - -参考下图获取 Token 和 User ID,注意给 Token 赋值权限: - -| 获取 Token | 增加权限 | 获取 User ID | -| --- | --- | --- | -|  |  |  | - -## 2. 创建知识库 - -使用上一步获取的 token 和 uid,创建知识库,选择语雀文件库类型,然后填入对应的参数,点击创建。 - - - - - -## 3. 导入文档 - -创建完知识库后,点击`添加文件`即可导入语雀的文档库,跟随引导即可。 - -语雀知识库支持定时同步功能,每天会不定时的扫描一次,如果文档有更新,则会进行同步,也可以进行手动同步。 - - - -# 知识库 -## 知识库的基础原理、搜索方案、Web站点同步和外部文件知识库的使用方法。 - - - -# Bing 搜索插件填写说明 -## FastGPT Bing 搜索插件配置步骤详解 - -1. # 打开微软Azure官网,登陆账号 - -https://portal.azure.com/ - - - -1. # 创建bing web搜索资源 - -搜索Bing Search v7,点击创建 - -https://portal.azure.com/#create/Microsoft.BingSearch - - - -1. # 进入资源详情点击管理密钥 - - - -# 4. 复制任意一个密钥填入插件输入 - - - - - -# Doc2x 插件填写说明 -## 如何配置和使用 Doc2x 插件 - -1. # 打开docx官网,创建账号,并复制 apikey - -https://doc2x.noedgeai.com/ - - - - - -1. # 填写apikey到fastgpt中 - -**工作流****中:** - - - -**简易模式使用:** - - - -# Google 搜索插件填写说明 -## FastGPT Google 搜索插件配置指南 - -1. # 创建Google Custom Search Engine - -https://programmablesearchengine.google.com/ - -我们连到Custom Search Engine control panel 建立Search Engine - - - -取得搜索引擎的ID,即cx - - - -1. # 获取api key - -https://developers.google.com/custom-search/v1/overview?hl=zh-cn - - - -1. # 填入插件输入参数 - -将搜索引擎ID填入cx字段,api key填入key字段 - - - -# 如何提交系统插件 -## FastGPT 系统插件提交指南 - -> 如何向 FastGPT 社区提交系统插件 - -## 系统插件原则 - -- 尽可能的轻量简洁,以解决实际问题的工具为主 -- 不允许有密集 cpu 计算,不会占用大量内存占用或网络消耗 -- 不允许操作数据库 -- 不允许往固定的私人地址发送请求(不包含请求某些在线服务,例如 gapier, firecrawl等) -- 不允许使用私人包,可使用主流的开源包 - -## 什么插件可以合并 - -由于目前未采用按需安装的模式,合并进仓库的插件会全部展示给用户使用。 - -为了控制插件的质量以及避免数量过多带来的繁琐,并不是所有的插件都会被合并到开源仓库中,你可以提前 PR 与我们沟通插件的内容。 - -后续实现插件按需安装后,我们会允许更多的社区插件合入。 - -## 如何写一个系统插件 - 初步 - -FastGPT 系统插件和用户工作台的插件效果是一致的,所以你需要提前了解“插件”的定义和功能。 - -在 FastGPT 中,插件是一种特殊的工作流,它允许你将一个工作流封装起来,并自定义入口参数和出口参数,类似于代码里的 “子函数”。 - -1. ### 跑通 FastGPT dev 环境 - -需要在 dev 环境下执行下面的操作。 - -1. ### 在 FastGPT 工作台中,创建一个插件 - -选择基础模板即可。 - - - -1. ### 创建系统插件配置 - -系统插件配置以及自定义代码,都会在 **packages/plugins** 目录下。 - -1. 在 **packages/plugins/src** 下,复制一份 **template** 目录,并修改名字。 -2. 打开目录里面的 template.json 文件,配置如下: -3. 目录还有一个 index.ts 文件,下文再提。 - -```TypeScript -{ - "author": "填写你的名字", - "version": "当前系统版本号", - "name": "插件名", - "avatar": "插件头像,需要配成 icon 格式。直接把 logo 图在 pr 评论区提交即可,我们会帮你加入。", - "intro": " 插件的描述,这个描述会影响工具调用", - "showStatus": false, // 是否在对话过程展示状态 - "weight": 10, // 排序权重,均默认 10 - - "isTool": true, // 是否作为工具调用节点 - "templateType": "tools", // 都填写 tools 即可,由官方来分类 - - "workflow": { // 这个对象先不管,待会直接粘贴导出的工作流即可 - "nodes": [], - "edges": [] - } -} -``` - -1. 打开 **packages/plugins/register** 文件,注册你的插件。在 list 数组中,加入一个你插件目录的名字,如下图的例子。如需构建插件组(带目录),可参考 DuckDuckGo 插件。 - -无需额外写代码的插件,直接放在 staticPluginList 内,需要在项目内额外写代码的,写在 packagePluginList 中。 - - - -1. ### 完成工作流编排并测试 - -完成工作流编排后,可以点击右上角的发布,并在其他工作流中引入进行测试(此时属于团队插件)。 - -1. ### 复制配置到 template.json - -鼠标放置在左上角插件的头像和名称上,会出现对于下拉框操作,可以导出工作流配置。 - -导出的配置,会自动到剪切板,可以直接到 template.json 文件中粘贴使用,替换步骤 2 中,**workflow** 的值。 - - - -1. ### 验证插件是否加载成功 - -刷新页面,打开系统插件,看其是否成功加载,并将其添加到工作流中使用。 - - - -1. ### 提交 PR - -如果你觉得你的插件需要提交到开源仓库,可以通过 PR 形式向我们提交。 - -- 写清楚插件的介绍和功能 -- 配上插件运行的效果图 -- 插件参数填写说明,需要在 PR 中写清楚。例如,有些插件需要去某个提供商申请 key,需要附上对应的地址和教材,后续我们会加入到文档中。 - -## 写一个复杂的系统插件 - 进阶 - -这一章会介绍如何增加一些无法单纯通过编排实现的插件。因为可能需要用到网络请求或第三方包。 - -上一章提到,在插件的 **template** 目录下,还有一个 **index.ts** 文件,这个文件就是用来执行一些插件的代码的。你可以通过在 HTTP 节点中的 URL,填写插件的名字,即可触发该方法,下面以 **duckduckgo/search** 这个插件为例: - - - - - - - -参考上面 3 张图片,当 HTTP 节点的 URL 为系统插件注册的名字时,该请求不会以 HTTP 形式发送,而是会请求到 index.ts 文件中的 main 方法。出入参则对应了 body 和自定义输出的字段名。 - -由于目前插件会默认插件输出均作为“工具调用”的结果,无法单独指定某些字段作为工具输出,所以,请避免插件的自定义输出携带大量说明字段。 - -# SearXNG 搜索插件配置与使用说明 -## FastGPT SearXNG 搜索插件配置指南 - -[SearXNG](https://github.com/searxng/searxng)是一款免费的互联网元搜索引擎,它汇总了来自各种搜索服务和数据库的结果。它不会跟踪或分析用户。用户可以自行部署它进行使用。本文介绍 Searxng 的部署以及接入 FastGPT 插件。 - - -## 1. 部署应用 - -这里介绍在 Sealos 中部署 SearXNG 的方法。Docker 部署,可以直接参考 [SearXNG 官方教程](https://github.com/searxng/searxng)。 - -点击打开 [Sealos 北京区](https://bja.sealos.run?uid=fnWRt09fZP),点击应用部署,并新建一个应用: - -| 打开应用部署 | 点击新建应用 | -| --- | --- | -|  |  | - -## 2. 部署配置 - -把下面参数,填入配置中: - -* 镜像名: searxng/searxng:latest -* CPU: 0.2 -* 内存: 512M -* 容器暴露端口: 8080 -* 开启公网访问 -* 点击高级配置,填写环境变量和配置文件 - - - -**环境变量** - -填下面两个内容,主要是为了减小并发,不然内存占用非常大。 - -``` -UWSGI_WORKERS=4 -UWSGI_THREADS=4 -``` - -**配置文件** - -新增一个配置文件,文件名:`/etc/searx/settings.yml` -文件内容: - -```txt -general: - debug: false - instance_name: "searxng" - privacypolicy_url: false - donation_url: false - contact_url: false - enable_metrics: true - open_metrics: '' - -brand: - new_issue_url: https://github.com/searxng/searxng/issues/new - docs_url: https://docs.searxng.org/ - public_instances: https://searx.space - wiki_url: https://github.com/searxng/searxng/wiki - issue_url: https://github.com/searxng/searxng/issues - -search: - safe_search: 0 - autocomplete: "" - autocomplete_min: 4 - default_lang: "auto" - ban_time_on_fail: 5 - max_ban_time_on_fail: 120 - formats: - - html - -server: - port: 8080 - bind_address: "0.0.0.0" - base_url: false - limiter: false - public_instance: false - secret_key: "example" - image_proxy: false - http_protocol_version: "1.0" - method: "POST" - default_http_headers: - X-Content-Type-Options: nosniff - X-Download-Options: noopen - X-Robots-Tag: noindex, nofollow - Referrer-Policy: no-referrer - -redis: - url: false - -ui: - static_path: "" - static_use_hash: false - templates_path: "" - default_theme: simple - default_locale: "" - query_in_title: false - infinite_scroll: false - center_alignment: false - theme_args: - simple_style: auto - -outgoing: - request_timeout: 30.0 - max_request_timeout: 40.0 - pool_connections: 200 - pool_maxsize: 50 - enable_http2: false - retries: 5 - -engines: - - - name: bing - engine: bing - shortcut: bi - -doi_resolvers: - oadoi.org: 'https://oadoi.org/' - doi.org: 'https://doi.org/' - doai.io: 'https://dissem.in/' - sci-hub.se: 'https://sci-hub.se/' - sci-hub.st: 'https://sci-hub.st/' - sci-hub.ru: 'https://sci-hub.ru/' - -default_doi_resolver: 'oadoi.org' -``` - -国内目前只有 Bing 引擎可以正常用,所以上面的配置只配置了 bing 引擎。如果在海外部署,可以使用[Sealos 新加坡可用区](https://cloud.sealos.io?uid=fnWRt09fZP),并配置其他搜索引擎,可以参考[SearXNG 默认配置文件](https://github.com/searxng/searxng/blob/master/searx/settings.yml), 从里面复制一些 engine 配置。例如: - -``` - - name: duckduckgo - engine: duckduckgo - shortcut: ddg - - - name: google - engine: google - shortcut: go -``` - -## 3. FastGPT 使用 - -复制 Sealos 部署后提供的公网地址,填入 FastGPT 的 SearXNG 插件的 URL 中。 - -| 复制公网地址| 填入 URL | -| --- | --- | -|  |  | - -## 返回格式 - -* 成功时返回搜索结果数组: - -```Bash -{ - "result": "[{\"title\":\"标题1\",\"link\":\"链接1\",\"snippet\":\"摘要1\"}, ...]" -} -``` - -* 搜索结果为空时会返回友好提示: - -```Bash -{ - "result": "[]", - "error": { - "message": "No search results", - "code": 500 - } -} -``` - -* 失败时通过 Promise.reject 可能返回错误信息: - -```Bash -- "缺少查询参数" -- "缺少url" -- "Failed to fetch data from Search XNG" -``` - -一般问题来源于参数缺失与服务部署,如有更多问题可在用户群提问。 - -## FAQ - -### 无搜索结果 - -1. 先直接打开外网地址,测试是否可以正常搜索。 -2. 检查是否有超时的搜索引擎,通过 API 调用时不会返回结果。 - -# 系统插件 -## 介绍如何使用和提交系统插件,以及各插件的填写说明 - - - -# 邀请链接说明文档 -## 如何使用邀请链接来邀请团队成员 - -v4.9.1 团队邀请成员将开始使用「邀请链接」的模式,弃用之前输入用户名进行添加的形式。 - -在版本升级后,原收到邀请还未加入团队的成员,将自动清除邀请。请使用邀请链接重新邀请成员。 - -## 如何使用 - -1. **在团队管理页面,管理员可点击「邀请成员」按钮打开邀请成员弹窗** - - - -2. **在邀请成员弹窗中,点击「创建邀请链接」按钮,创建邀请链接。** - - - -3. **输入对应内容** - - - -链接描述:建议将链接描述为使用场景或用途。链接创建后不支持修改噢。 - -有效期:30分钟,7天,1年 - -有效人数:1人,无限制 - -4. **点击复制链接,并将其发送给想要邀请的人。** - - - -5. **用户访问链接后,如果未登录/未注册,则先跳转到登录页面进行登录。在登录后将进入团队页面,处理邀请。** - -> 邀请链接形如:fastgpt.cn/account/team?invitelinkid=xxxx - - - -点击接受,则用户将加入团队 - -点击忽略,则关闭弹窗,用户下次访问该邀请链接则还可以选择加入。 - -## 链接失效和自动清理 - -### 链接失效原因 - -手动停用链接 - -邀请链接到达有效期,自动停用 - -有效人数为1人的链接,已有1人通过邀请链接加入团队。 - -停用的链接无法访问,也无法再次启用。 - -### 链接上限 - -一个用户最多可以同时存在 10 个**有效的**邀请链接。 - -### 链接自动清理 - -失效的链接将在 30 天后自动清理。 - -# 团队&成员组&权限 -## 如何管理 FastGPT 团队、成员组及权限设置 - -# 团队 & 成员组 & 权限 - -## 权限系统简介 - -FastGPT -权限系统融合了基于**属性**和基于**角色**的权限管理范式,为团队协作提供精细化的权限控制方案。通过**成员、部门和群组**三种管理模式,您可以灵活配置对团队、应用和知识库等资源的访问权限。 - -## 团队 - -每位用户可以同时归属于多个团队,系统默认为每位用户创建一个初始团队。目前暂不支持用户手动创建额外团队。 - -## 权限管理 - -FastGPT 提供三种权限管理维度: - -**成员权限**:最高优先级,直接赋予个人的权限 - -**部门与群组权限**:采用权限并集原则,优先级低于成员权限 - -权限判定遵循以下逻辑: - -首先检查用户的个人成员权限 - -其次检查用户所属部门和群组的权限(取并集) - -最终权限为上述结果的组合 - -鉴权逻辑如下: - - - -### 资源权限 - -对于不同的**资源**,有不同的权限。 - -这里说的资源,是指应用、知识库、团队等等概念。 - -下表为不同资源,可以进行管理的权限。 - - - -
- -### 协作者 - -必须先添加**协作者**,才能对其进行权限管理: - - - -管理团队权限时,需先选择成员/组织/群组,再进行权限配置。 - - - -对于应用和知识库等资源,可直接修改成员权限。 - - - -团队权限在专门的权限页面进行设置 - - - -## 特殊权限说明 - -### 管理员权限 - -管理员主要负责管理资源的协作关系,但有以下限制: - -- 不能修改或移除自身权限 -- 不能修改或移除其他管理员权限 --不能将管理员权限赋予其他协作者 - -### Owner 权限 - -每个资源都有唯一的 Owner,拥有该资源的最高权限。Owner -可以转移所有权,但转移后原 Owner 将失去对资源的权限。 - -### Root 权限 - -Root -作为系统唯一的超级管理员账号,对所有团队的所有资源拥有完全访问和管理权限。 - -## 使用技巧 - -### 1. 设置团队默认权限 - -利用\"全员群组\"可快速为整个团队设置基础权限。例如,为应用设置全员可访问权限。 - -**注意**:个人成员权限会覆盖全员组权限。例如,应用 A -设置了全员编辑权限,而用户 M 被单独设置为使用权限,则用户 M -只能使用而无法编辑该应用。 - -### 2. 批量权限管理 - -通过创建群组或组织,可以高效管理多用户的权限配置。先将用户添加到群组,再对群组整体授权。 - -### 开发者参考 -> 以下内容面向开发者,如不涉及二次开发可跳过。 - -#### 权限设计原理 - -FastGPT 权限系统参考 Linux 权限设计,采用二进制方式存储权限位。权限位为 -1 表示拥有该权限,为 0 表示无权限。Owner 权限特殊标记为全 1。 - -#### 权限表 - -权限信息存储在 MongoDB 的 resource_permissions 集合中,其主要字段包括: - -- teamId: 团队标识 -- tmbId/groupId/orgId: 权限主体(三选一) -- resourceType: 资源类型(team/app/dataset) -- permission: 权限值(数字) -- resourceId: 资源ID(团队资源为null) - -系统通过这一数据结构实现了灵活而精确的权限控制。 - -对于这个表的 Schema 定义在 packages/service/support/permission/schema.ts -文件中。定义如下: -```typescript -export const ResourcePermissionSchema = new Schema({ - teamId: { - type: Schema.Types.ObjectId, - ref: TeamCollectionName - }, - tmbId: { - type: Schema.Types.ObjectId, - ref: TeamMemberCollectionName - }, - groupId: { - type: Schema.Types.ObjectId, - ref: MemberGroupCollectionName - }, - orgId: { - type: Schema.Types.ObjectId, - ref: OrgCollectionName - }, - resourceType: { - type: String, - enum: Object.values(PerResourceTypeEnum), - required: true - }, - permission: { - type: Number, - required: true - }, - // Resrouce ID: App or DataSet or any other resource type. - // It is null if the resourceType is team. - resourceId: { - type: Schema.Types.ObjectId - } -}); -``` - -# 团队与权限 -## 团队管理、成员组与权限设置,确保团队协作中的数据安全和权限分配合理。 - - - # 简易模式 ## 快速了解 FastGPT 工作台的简易模式 @@ -12940,7 +11406,7 @@ Gapier 是一个在线 GPTs Actions工具,提供了50多种现成工具,并 # 工作流&插件 ## 快速了解 FastGPT 工作流和插件的使用 -FastGPT 从 V4 版本开始采用新的交互方式来构建 AI 应用。使用了 Flow 节点编排(工作流)的方式来实现复杂工作流,提高可玩性和扩展性。但同时也提高了上手的门槛,有一定开发背景的用户使用起来会比较容易。 +FastGPT 从 V4.0 版本开始采用新的交互方式来构建 AI 应用。使用了 Flow 节点编排(工作流)的方式来实现复杂工作流,提高可玩性和扩展性。但同时也提高了上手的门槛,有一定开发背景的用户使用起来会比较容易。 [查看视频教程](https://www.bilibili.com/video/BV1is421u7bQ/) @@ -13023,6 +11489,104 @@ FastGPT工作流中的线有以下几种状态: 2. 知识库搜索合并,可以合并多个知识库搜索结果 3. 其他结果,无法直接合并,可以考虑传入到`HTTP`节点中进行合并,使用`[Laf](https://laf.run/)`可以快速实现一个无服务器HTTP接口。 +# MCP 服务 +## 快速了解 FastGPT MCP server + +## MCP server 介绍 + +MCP 协议(Model Context Protocol),是由 Anthropic 在 2024年 11 月初发布的协议。它的目的在于统一 AI 模型与外部系统之间的通信方式,从而简化 AI 模型与外部系统之间的通信问题。随着 OpenAI 官宣支持 MCP 协议,越来越多的 AI 厂商开始支持 MCP 协议。 + +MCP 协议主要包含 Client 和 Server 两部分。简单来说,Client 是使用 AI 模型的一方,它通过 MCP Client 可以给模型提供一些调用外部系统的能能力;Server 是提供外部系统调用的一方,也就是实际运行外部系统的一方。 + +FastGPT MCP Server 功能允许你选择`多个`在 FastGPT 上构建好的应用,以 MCP 协议对外提供调用 FastGPT 应用的能力。 + +目前 FastGPT 提供的 MCP server 为 SSE 通信协议,未来将会替换成 `HTTP streamable`。 + +## FastGPT 使用 MCP server + +### 1. 创建 MCP server + +登录 FastGPT 后,打开`工作台`,点击`MCP server`,即可进入管理页面,这里可以看到你创建的所有 MCP server,以及他们管理的应用数量。 + + + +可以自定义 MCP server 名称和选择关联的应用 + +| | | +|---|---| +|  |  | + +### 2. 获取 MCP server 地址 + +创建好 MCP server 后,可以直接点击`开始使用`,即可获取 MCP server 访问地址。 + +| | | +|---|---| +|  |  | + +#### 3. 使用 MCP server + +可以在支持 MCP 协议的客户端使用这些地址,来调用 FastGPT 应用,例如:`Cursor`、`Cherry Studio`。下面以 Cursor 为例,介绍如何使用 MCP server。 + +打开 Cursor 配置页面,点击 MCP 即可进入 MCP 配置页面,可以点击新建 MCP server 按钮,会跳转到一个 JSON 配置文件,将第二步的`接入脚本`复制到`json 文件`中,保存文件。 + +此时返回 Cursor 的 MCP 管理页面,即可看到你创建的 MCP server,记得设成`enabled`状态。 + +| | | | +|---|---|---| +|  |  |  | + + +打开 Cursor 的对话框,切换成`Agent`模型,只有这个模型,cursor 才会调用 MCP server。 +发送一个关于`fastgpt`的问题后,可以看到,cursor 调用了一个 MCP 工具(描述为:查询 fastgpt 知识库),也就是调用 FastGPT 应用去进行处理该问题,并返回了结果。 + +| | | +|---|---| +|  |  | + + +## 私有化部署 MCP server 问题 + +私有化部署版本的 FastGPT,需要升级到`v4.9.6-alpha`及以上版本才可使用 MCP server 功能。 + +### 修改 docker-compose.yml 文件 + +在`docker-compose.yml`文件中,加入`fastgpt-mcp-server`服务: + +```yml +fastgpt-mcp-server: + container_name: fastgpt-mcp-server + image: ghcr.io/labring/fastgpt-mcp_server:latest + ports: + - 3005:3000 + networks: + - fastgpt + restart: always + environment: + - FASTGPT_ENDPOINT=http://fastgpt:3000 +``` + +### 修改 FastGPT 容器环境变量 + +修改`config.json`配置文件,增加: `"feconfigs.mcpServerProxyEndpoint": "fastgpt-mcp-server 的访问地址"`, 末尾不要携带/,例如: +```json +{ + "feConfigs": { + "lafEnv": "https://laf.dev", + "mcpServerProxyEndpoint": "https://mcp.fastgpt.cn" + } +} +``` + +### 重启 FastGPT 容器 + +因为是修改的挂载文件,可以强制 down 再 up 服务。启动后,既可以在工作台看到 MCP server 服务选项。 + +```bash +docker-compose down +docker-compose up -d +``` + # AI 对话 ## FastGPT AI 对话模块介绍 @@ -14275,20 +12839,1482 @@ function main({secret}){ - 给一个「自定义变量」类型的全局变量赋值,从而实现全局变量无需用户输入 - 更新「变量更新」节点前的工作流节点输出,在后续使用中,使用的节点输出值为新的输出 -# 工作流节点 -## FastGPT 工作流节点设置和使用指南 +# 知识库基础原理介绍 +## 本节详细介绍RAG模型的核心机制、应用场景及其在生成任务中的优势与局限性。 - +[RAG文档](https://huggingface.co/docs/transformers/model_doc/rag) -# 工作台 -## FastGPT 工作台及工作流节点的使用说明 +# 1. 引言 - +随着自然语言处理(NLP)技术的迅猛发展,生成式语言模型(如GPT、BART等)在多种文本生成任务中表现卓越,尤其在语言生成和上下文理解方面。然而,纯生成模型在处理事实类任务时存在一些固有的局限性。例如,由于这些模型依赖于固定的预训练数据,它们在回答需要最新或实时信息的问题时,可能会出现“编造”信息的现象,导致生成结果不准确或缺乏事实依据。此外,生成模型在面对长尾问题和复杂推理任务时,常因缺乏特定领域的外部知识支持而表现不佳,难以提供足够的深度和准确性。 -# 功能介绍 -## FastGPT 的功能和使用指南 +与此同时,检索模型(Retriever)能够通过在海量文档中快速找到相关信息,解决事实查询的问题。然而,传统检索模型(如BM25)在面对模糊查询或跨域问题时,往往只能返回孤立的结果,无法生成连贯的自然语言回答。由于缺乏上下文推理能力,检索模型生成的答案通常不够连贯和完整。 - +为了解决这两类模型的不足,检索增强生成模型(Retrieval-Augmented Generation,RAG)应运而生。RAG通过结合生成模型和检索模型的优势,实时从外部知识库中获取相关信息,并将其融入生成任务中,确保生成的文本既具备上下文连贯性,又包含准确的知识。这种混合架构在智能问答、信息检索与推理、以及领域特定的内容生成等场景中表现尤为出色。 + +## 1.1 RAG的定义 + +RAG是一种将信息检索与生成模型相结合的混合架构。首先,检索器从外部知识库或文档集中获取与用户查询相关的内容片段;然后,生成器基于这些检索到的内容生成自然语言输出,确保生成的内容既信息丰富,又具备高度的相关性和准确性。 + +# 2. RAG模型的核心机制 + +RAG 模型由两个主要模块构成:检索器(Retriever)与生成器(Generator)。这两个模块相互配合,确保生成的文本既包含外部的相关知识,又具备自然流畅的语言表达。 + +## 2.1 检索器(Retriever) + +检索器的主要任务是从一个外部知识库或文档集中获取与输入查询最相关的内容。在RAG中,常用的技术包括: + +- 向量检索:如BERT向量等,它通过将文档和查询转化为向量空间中的表示,并使用相似度计算来进行匹配。向量检索的优势在于能够更好地捕捉语义相似性,而不仅仅是依赖于词汇匹配。 +- 传统检索算法:如BM25,主要基于词频和逆文档频率(TF-IDF)的加权搜索模型来对文档进行排序和检索。BM25适用于处理较为简单的匹配任务,尤其是当查询和文档中的关键词有直接匹配时。 + +RAG中检索器的作用是为生成器提供一个上下文背景,使生成器能够基于这些检索到的文档片段生成更为相关的答案。 + +## 2.2 生成器(Generator) + +生成器负责生成最终的自然语言输出。在RAG系统中,常用的生成器包括: + +- BART:BART是一种序列到序列的生成模型,专注于文本生成任务,可以通过不同层次的噪声处理来提升生成的质量 。 +- GPT系列:GPT是一个典型的预训练语言模型,擅长生成流畅自然的文本。它通过大规模数据训练,能够生成相对准确的回答,尤其在任务-生成任务中表现尤为突出 。 + +生成器在接收来自检索器的文档片段后,会利用这些片段作为上下文,并结合输入的查询,生成相关且自然的文本回答。这确保了模型的生成结果不仅仅基于已有的知识,还能够结合外部最新的信息。 + +## 2.3 RAG的工作流程 + +RAG模型的工作流程可以总结为以下几个步骤: + +1. 输入查询:用户输入问题,系统将其转化为向量表示。 +2. 文档检索:检索器从知识库中提取与查询最相关的文档片段,通常使用向量检索技术或BM25等传统技术进行。 +3. 生成答案:生成器接收检索器提供的片段,并基于这些片段生成自然语言答案。生成器不仅基于原始的用户查询,还会利用检索到的片段提供更加丰富、上下文相关的答案。 +4. 输出结果:生成的答案反馈给用户,这个过程确保了用户能够获得基于最新和相关信息的准确回答。 + +# 3. RAG模型的工作原理 + +## 3.1 检索阶段 + +在RAG模型中,用户的查询首先被转化为向量表示,然后在知识库中执行向量检索。通常,检索器采用诸如BERT等预训练模型生成查询和文档片段的向量表示,并通过相似度计算(如余弦相似度)匹配最相关的文档片段。RAG的检索器不仅仅依赖简单的关键词匹配,而是采用语义级别的向量表示,从而在面对复杂问题或模糊查询时,能够更加准确地找到相关知识。这一步骤对于最终生成的回答至关重要,因为检索的效率和质量直接决定了生成器可利用的上下文信息 。 + +## 3.2 生成阶段 + +生成阶段是RAG模型的核心部分,生成器负责基于检索到的内容生成连贯且自然的文本回答。RAG中的生成器,如BART或GPT等模型,结合用户输入的查询和检索到的文档片段,生成更加精准且丰富的答案。与传统生成模型相比,RAG的生成器不仅能够生成语言流畅的回答,还可以根据外部知识库中的实际信息提供更具事实依据的内容,从而提高了生成的准确性 。 + +## 3.3 多轮交互与反馈机制 + +RAG模型在对话系统中能够有效支持多轮交互。每一轮的查询和生成结果会作为下一轮的输入,系统通过分析和学习用户的反馈,逐步优化后续查询的上下文。通过这种循环反馈机制,RAG能够更好地调整其检索和生成策略,使得在多轮对话中生成的答案越来越符合用户的期望。此外,多轮交互还增强了RAG在复杂对话场景中的适应性,使其能够处理跨多轮的知识整合和复杂推理 。 + +# 4. RAG的优势与局限 + +## 4.1 优势 + +- 信息完整性:RAG 模型结合了检索与生成技术,使得生成的文本不仅语言自然流畅,还能够准确利用外部知识库提供的实时信息。这种方法能够显著提升生成任务的准确性,特别是在知识密集型场景下,如医疗问答或法律意见生成。通过从知识库中检索相关文档,RAG 模型避免了生成模型“编造”信息的风险,确保输出更具真实性 。 +- 知识推理能力:RAG 能够利用大规模的外部知识库进行高效检索,并结合这些真实数据进行推理,生成基于事实的答案。相比传统生成模型,RAG 能处理更为复杂的任务,特别是涉及跨领域或跨文档的推理任务。例如,法律领域的复杂判例推理或金融领域的分析报告生成都可以通过RAG的推理能力得到优化 。 +- 领域适应性强:RAG 具有良好的跨领域适应性,能够根据不同领域的知识库进行特定领域内的高效检索和生成。例如,在医疗、法律、金融等需要实时更新和高度准确性的领域,RAG 模型的表现优于仅依赖预训练的生成模型 。 + +## 4.2 局限 + +RAG(检索增强生成)模型通过结合检索器和生成器,实现了在多种任务中知识密集型内容生成的突破性进展。然而,尽管其具有较强的应用潜力和跨领域适应能力,但在实际应用中仍然面临着一些关键局限,限制了其在大规模系统中的部署和优化。以下是RAG模型的几个主要局限性: + +#### 4.2.1 检索器的依赖性与质量问题 + +RAG模型的性能很大程度上取决于检索器返回的文档质量。由于生成器主要依赖检索器提供的上下文信息,如果检索到的文档片段不相关、不准确,生成的文本可能出现偏差,甚至产生误导性的结果。尤其在多模糊查询或跨领域检索的情况下,检索器可能无法找到合适的片段,这将直接影响生成内容的连贯性和准确性。 + +- 挑战:当知识库庞大且内容多样时,如何提高检索器在复杂问题下的精确度是一大挑战。当前的方法如BM25等在特定任务上有局限,尤其是在面对语义模糊的查询时,传统的关键词匹配方式可能无法提供语义上相关的内容。 +- 解决途径:引入混合检索技术,如结合稀疏检索(BM25)与密集检索(如向量检索)。例如,Faiss的底层实现允许通过BERT等模型生成密集向量表示,显著提升语义级别的匹配效果。通过这种方式,检索器可以捕捉深层次的语义相似性,减少无关文档对生成器的负面影响。 + +#### 4.2.2 生成器的计算复杂度与性能瓶颈 + +RAG模型将检索和生成模块结合,尽管生成结果更加准确,但也大大增加了模型的计算复杂度。尤其在处理大规模数据集或长文本时,生成器需要处理来自多个文档片段的信息,导致生成时间明显增加,推理速度下降。对于实时问答系统或其他需要快速响应的应用场景,这种高计算复杂度是一个主要瓶颈。 + +- 挑战:当知识库规模扩大时,检索过程中的计算开销以及生成器在多片段上的整合能力都会显著影响系统的效率。同时,生成器也面临着资源消耗的问题,尤其是在多轮对话或复杂生成任务中,GPU和内存的消耗会成倍增加。 +- 解决途径:使用模型压缩技术和知识蒸馏来减少生成器的复杂度和推理时间。此外,分布式计算与模型并行化技术的引入,如[DeepSpeed](https://www.deepspeed.ai/)和模型压缩工具,可以有效应对生成任务的高计算复杂度,提升大规模应用场景中的推理效率。 + +#### 4.2.3 知识库的更新与维护 + +RAG模型通常依赖于一个预先建立的外部知识库,该知识库可能包含文档、论文、法律条款等各类信息。然而,知识库内容的时效性和准确性直接影响到RAG生成结果的可信度。随着时间推移,知识库中的内容可能过时,导致生成的回答不能反映最新的信息。这对于需要实时信息的场景(如医疗、金融)尤其明显。 + +- 挑战:知识库需要频繁更新,但手动更新知识库既耗时又容易出错。如何在不影响系统性能的情况下实现知识库的持续自动更新是当前的一大挑战。 +- 解决途径:利用自动化爬虫和信息提取系统,可以实现对知识库的自动化更新,例如,Scrapy等爬虫框架可以自动抓取网页数据并更新知识库。结合[动态索引技术](https://arxiv.org/pdf/2102.03315),可以帮助检索器实时更新索引,确保知识库反映最新信息。同时,结合增量学习技术,生成器可以逐步吸收新增的信息,避免生成过时答案。此外,动态索引技术也可以帮助检索器实时更新索引,确保知识库检索到的文档反映最新的内容。 + +#### 4.2.4 生成内容的可控性与透明度 + +RAG模型结合了检索与生成模块,在生成内容的可控性和透明度上存在一定问题。特别是在复杂任务或多义性较强的用户输入情况下,生成器可能会基于不准确的文档片段生成错误的推理,导致生成的答案偏离实际问题。此外,由于RAG模型的“黑箱”特性,用户难以理解生成器如何利用检索到的文档信息,这在高敏感领域如法律或医疗中尤为突出,可能导致用户对生成内容产生不信任感。 + +- 挑战:模型透明度不足使得用户难以验证生成答案的来源和可信度。对于需要高可解释性的任务(如医疗问诊、法律咨询等),无法追溯生成答案的知识来源会导致用户不信任模型的决策。 +- 解决途径:为提高透明度,可以引入可解释性AI(XAI)技术,如LIME或SHAP([链接](https://github.com/marcotcr/lime)),为每个生成答案提供详细的溯源信息,展示所引用的知识片段。这种方法能够帮助用户理解模型的推理过程,从而增强对模型输出的信任。此外,针对生成内容的控制,可以通过加入规则约束或用户反馈机制,逐步优化生成器的输出,确保生成内容更加可信。 + +# 5. RAG整体改进方向 + +RAG模型的整体性能依赖于知识库的准确性和检索的效率,因此在数据采集、内容分块、精准检索和回答生成等环节进行优化,是提升模型效果的关键。通过加强数据来源、改进内容管理、优化检索策略及提升回答生成的准确性,RAG模型能够更加适应复杂且动态的实际应用需求。 + +## 5.1 数据采集与知识库构建 + +RAG模型的核心依赖在于知识库的数据质量和广度,知识库在某种程度上充当着“外部记忆”的角色。因此,高质量的知识库不仅应包含广泛领域的内容,更要确保数据来源的权威性、可靠性以及时效性。知识库的数据源应涵盖多种可信的渠道,例如科学文献数据库(如PubMed、IEEE Xplore)、权威新闻媒体、行业标准和报告等,这样才能提供足够的背景信息支持RAG在不同任务中的应用。此外,为了确保RAG模型能够提供最新的回答,知识库需要具备自动化更新的能力,以避免数据内容老旧,导致回答失准或缺乏现实参考。 + +- 挑战: + - 尽管数据采集是构建知识库的基础,但在实际操作中仍存在以下几方面的不足: + - 数据采集来源单一或覆盖不全 + 1. RAG模型依赖多领域数据的支持,然而某些知识库过度依赖单一或有限的数据源,通常集中在某些领域,导致在多任务需求下覆盖不足。例如,依赖医学领域数据而缺乏法律和金融数据会使RAG模型在跨领域问答中表现不佳。这种局限性削弱了RAG模型在处理不同主题或多样化查询时的准确性,使得系统在应对复杂或跨领域任务时能力欠缺。 + - 数据质量参差不齐 + 1. 数据源的质量差异直接影响知识库的可靠性。一些数据可能来源于非权威或低质量渠道,存在偏见、片面或不准确的内容。这些数据若未经筛选录入知识库,会导致RAG模型生成偏差或不准确的回答。例如,在医学领域中,如果引入未经验证的健康信息,可能导致模型给出误导性回答,产生负面影响。数据质量不一致的知识库会大大降低模型输出的可信度和适用性。 + - 缺乏定期更新机制 + 1. 许多知识库缺乏自动化和频繁的更新机制,特别是在信息变动频繁的领域,如法律、金融和科技。若知识库长期未更新,则RAG模型无法提供最新信息,生成的回答可能过时或不具备实时参考价值。对于用户而言,特别是在需要实时信息的场景下,滞后的知识库会显著影响RAG模型的可信度和用户体验。 + - 数据处理耗时且易出错 + 1. 数据的采集、清洗、分类和结构化处理是一项繁琐而复杂的任务,尤其是当数据量巨大且涉及多种格式时。通常,大量数据需要人工参与清洗和结构化,而自动化处理流程也存在缺陷,可能会产生错误或遗漏关键信息。低效和易出错的数据处理流程会导致知识库内容不准确、不完整,进而影响RAG模型生成的答案的准确性和连贯性。 + - 数据敏感性和隐私问题 + 1. 一些特定领域的数据(如医疗、法律、金融)包含敏感信息,未经适当的隐私保护直接引入知识库可能带来隐私泄露的风险。此外,某些敏感数据需要严格的授权和安全存储,以确保在知识库使用中避免违规或隐私泄漏。若未能妥善处理数据隐私问题,不仅会影响系统的合规性,还可能对用户造成严重后果。 +- 改进: + - 针对以上不足,可以从以下几个方面进行改进,以提高数据采集和知识库构建的有效性: + - 扩大数据源覆盖范围,增加数据的多样性 + 1. 具体实施:将知识库的数据源扩展至多个重要领域,确保包含医疗、法律、金融等关键领域的专业数据库,如PubMed、LexisNexis和金融数据库。使用具有开放许可的开源数据库和经过认证的数据,确保来源多样化且权威性强。 + 2. 目的与效果:通过跨领域数据覆盖,知识库的广度和深度得以增强,确保RAG模型能够在多任务场景下提供可靠回答。借助多领域合作机构的数据支持,在应对多样化需求时将更具优势。 + - 构建数据质量审查与过滤机制 + 1. 具体实施:采用自动化数据质量检测算法,如文本相似度检查、情感偏差检测等工具,结合人工审查过滤不符合标准的数据。为数据打分并构建“数据可信度评分”,基于来源可信度、内容完整性等指标筛选数据。 + 2. 目的与效果:减少低质量、偏见数据的干扰,确保知识库内容的可靠性。此方法保障了RAG模型输出的权威性,特别在回答复杂或专业问题时,用户能够获得更加精准且中立的答案。 + - 实现知识库的自动化更新 + 1. 具体实施:引入自动化数据更新系统,如网络爬虫,定期爬取可信站点、行业数据库的最新数据,并利用变化检测算法筛选出与已有知识库重复或已失效的数据。更新机制可以结合智能筛选算法,仅采纳与用户查询高相关性或时效性强的数据。 + 2. 目的与效果:知识库保持及时更新,确保模型在快速变化的领域(如金融、政策、科技)中提供最新信息。用户体验将因此大幅提升,特别是在需要动态或最新信息的领域,输出的内容将更具时效性。 + - 采用高效的数据清洗与分类流程 + 1. 具体实施:使用自然语言处理技术,如BERT等模型进行数据分类、实体识别和文本去噪,结合去重算法清理重复内容。采用自动化的数据标注和分类算法,将不同数据类型分领域存储。 + 2. 目的与效果:数据清洗和分领域管理可以大幅提高数据处理的准确性,减少低质量数据的干扰。此改进确保RAG模型的回答生成更流畅、上下文更连贯,提升用户对生成内容的理解和信赖。 + - 强化数据安全与隐私保护措施 + 1. 具体实施:针对医疗、法律等敏感数据,采用去标识化处理技术(如数据脱敏、匿名化等),并结合差分隐私保护。建立数据权限管理和加密存储机制,对敏感信息进行严格管控。 + 2. 目的与效果:在保护用户隐私的前提下,确保使用的数据合规、安全,适用于涉及个人或敏感数据的应用场景。此措施进一步保证了系统的法律合规性,并有效防止隐私泄露风险。 + - 优化数据格式与结构的标准化 + 1. 具体实施:建立统一的数据格式与标准编码格式,例如使用JSON、XML或知识图谱形式组织结构化数据,以便于检索系统在查询时高效利用。同时,使用知识图谱等结构化工具,将复杂数据间的关系进行系统化存储。 + 2. 目的与效果:提高数据检索效率,确保模型在生成回答时能够高效使用数据的关键信息。标准化的数据结构支持高效的跨领域检索,并提高了RAG模型的内容准确性和知识关系的透明度。 + - 用户反馈机制 + 1. 具体实施:通过用户反馈系统,记录用户对回答的满意度、反馈意见及改进建议。使用机器学习算法从反馈中识别知识库中的盲区与信息误差,反馈至数据管理流程中进行更新和优化。 + 2. 目的与效果:利用用户反馈作为数据质量的调整依据,帮助知识库持续优化内容。此方法不仅提升了RAG模型的实际效用,还使知识库更贴合用户需求,确保输出内容始终符合用户期望。 + +## 5.2 数据分块与内容管理 + +RAG模型的数据分块与内容管理是优化检索与生成流程的关键。合理的分块策略能够帮助模型高效定位目标信息,并在回答生成时提供清晰的上下文支持。通常情况下,将数据按段落、章节或主题进行分块,不仅有助于检索效率的提升,还能避免冗余数据对生成内容造成干扰。尤其在复杂、长文本中,适当的分块策略可保证模型生成的答案具备连贯性、精确性,避免出现内容跳跃或上下文断裂的问题。 + +- 挑战: + - 在实际操作中,数据分块与内容管理环节存在以下问题: + - 分块不合理导致的信息断裂 + 1. 部分文本过度切割或分块策略不合理,可能导致信息链条被打断,使得模型在回答生成时缺乏必要的上下文支持。这会使生成内容显得零散,不具备连贯性,影响用户对答案的理解。例如,将法律文本或技术文档随意切割成小段落会导致重要的上下文关系丢失,降低模型的回答质量。 + - 冗余数据导致生成内容重复或信息过载 + 1. 数据集中往往包含重复信息,若不去重或优化整合,冗余数据可能导致生成内容的重复或信息过载。这不仅影响用户体验,还会浪费计算资源。例如,在新闻数据或社交媒体内容中,热点事件的描述可能重复出现,模型在生成回答时可能反复引用相同信息。 + - 分块粒度选择不当影响检索精度 + 1. 如果分块粒度过细,模型可能因缺乏足够的上下文而生成不准确的回答;若分块过大,检索时将难以定位具体信息,导致回答内容冗长且含有无关信息。选择适当的分块粒度对生成答案的准确性和相关性至关重要,特别是在问答任务中需要精确定位答案的情况下,粗放的分块策略会明显影响用户的阅读体验和回答的可读性。 + - 难以实现基于主题或内容逻辑的分块 + 1. 某些复杂文本难以直接按主题或逻辑结构进行分块,尤其是内容密集或领域专业性较强的数据。基于关键字或简单的规则切割往往难以识别不同主题和信息层次,导致模型在回答生成时信息杂乱。对内容逻辑或主题的错误判断,尤其是在医学、金融等场景下,会大大影响生成答案的准确度和专业性。 +- 改进: + - 为提高数据分块和内容管理的有效性,可以从以下几方面进行优化: + - 引入NLP技术进行自动化分块和上下文分析 + 1. 具体实施:借助自然语言处理(NLP)技术,通过句法分析、语义分割等方式对文本进行逻辑切割,以确保分块的合理性。可以基于BERT等预训练模型实现主题识别和上下文分析,确保每个片段均具备完整的信息链,避免信息断裂。 + 2. 目的与效果:确保文本切割基于逻辑或语义关系,避免信息链条被打断,生成答案时能够更具连贯性,尤其适用于长文本和复杂结构的内容,使模型在回答时上下文更加完整、连贯。 + - 去重与信息整合,优化内容简洁性 + 1. 具体实施:利用相似度算法(如TF-IDF、余弦相似度)识别冗余内容,并结合聚类算法自动合并重复信息。针对内容频繁重复的情况,可设置内容标记或索引,避免生成时多次引用相同片段。 + 2. 目的与效果:通过去重和信息整合,使数据更具简洁性,避免生成答案中出现重复信息。减少冗余信息的干扰,使用户获得简明扼要的回答,增强阅读体验,同时提升生成过程的计算效率。 + - 根据任务需求动态调整分块粒度 + 1. 具体实施:根据模型任务的不同,设置动态分块策略。例如,在问答任务中对关键信息较短的内容可采用小粒度分块,而在长文本或背景性内容中采用较大粒度。分块策略可基于查询需求或内容复杂度自动调整。 + 2. 目的与效果:分块粒度的动态调整确保模型在检索和生成时既能准确定位关键内容,又能为回答提供足够的上下文支持,提升生成内容的精准性和相关性,确保用户获取的信息既准确又不冗长。 + - 引入基于主题的分块方法以提升上下文完整性 + 1. 具体实施:使用主题模型(如LDA)或嵌入式文本聚类技术,对文本内容按主题进行自动分类与分块。基于相同主题内容的聚合分块,有助于模型识别不同内容层次,尤其适用于复杂的学术文章或多章节的长篇报告。 + 2. 目的与效果:基于主题的分块确保同一主题的内容保持在一个片段内,提升模型在回答生成时的上下文连贯性。适用于主题复杂、层次清晰的内容场景,提高回答的专业性和条理性,使用户更容易理解生成内容的逻辑关系。 + - 实时评估分块策略与内容呈现效果的反馈机制 + 1. 具体实施:通过用户反馈机制和生成质量评估系统实时监测生成内容的连贯性和准确性。对用户反馈中涉及分块效果差的部分进行重新分块,通过用户使用数据优化分块策略。 + 2. 目的与效果:用户反馈帮助识别不合理的分块和内容呈现问题,实现分块策略的动态优化,持续提升生成内容的质量和用户满意度。 + +## 5.3 检索优化 + +在RAG模型中,检索模块决定了生成答案的相关性和准确性。有效的检索策略可确保模型获取到最适合的上下文片段,使生成的回答更加精准且贴合查询需求。常用的混合检索策略(如BM25和DPR结合)能够在关键词匹配和语义检索方面实现优势互补:BM25适合高效地处理关键字匹配任务,而DPR在理解深层语义上表现更为优异。因此,合理选用检索策略有助于在不同任务场景下达到计算资源和检索精度的平衡,以高效提供相关上下文供生成器使用。 + +- 挑战: + - 检索优化过程中,仍面临以下不足之处: + - 检索策略单一导致的回答偏差 + 1. 当仅依赖BM25或DPR等单一技术时,模型可能难以平衡关键词匹配与语义理解。BM25在处理具象关键字时表现良好,但在面对复杂、含义丰富的语义查询时效果欠佳;相反,DPR虽然具备深度语义匹配能力,但对高频关键词匹配的敏感度较弱。检索策略单一将导致模型难以适应复杂的用户查询,回答中出现片面性或不够精准的情况。 + - 检索效率与资源消耗的矛盾 + 1. 检索模块需要在短时间内处理大量查询,而语义检索(如DPR)需要进行大量的计算和存储操作,计算资源消耗高,影响系统响应速度。特别是对于需要实时响应的应用场景,DPR的计算复杂度往往难以满足实际需求,因此在实时性和资源利用率上亟需优化。 + - 检索结果的冗余性导致内容重复 + 1. 当检索策略未对结果进行去重或排序优化时,RAG模型可能从知识库中检索出相似度高但内容冗余的文档片段。这会导致生成的回答中包含重复信息,影响阅读体验,同时增加无效信息的比例,使用户难以迅速获取核心答案。 + - 不同任务需求下检索策略的适配性差 + 1. RAG模型应用场景丰富,但不同任务对检索精度、速度和上下文长度的需求不尽相同。固定检索策略难以灵活应对多样化的任务需求,导致在应对不同任务时,模型检索效果受限。例如,面向精确性较高的医疗问答场景时,检索策略应偏向语义准确性,而在热点新闻场景中则应偏重检索速度。 +- 改进: + - 针对上述不足,可以从以下几个方面优化检索模块: + - 结合BM25与DPR的混合检索策略 + 1. 具体实施:采用BM25进行关键词初筛,快速排除无关信息,然后使用DPR进行深度语义匹配筛选。这样可以有效提升检索精度,平衡关键词匹配和语义理解。 + 2. 目的与效果:通过多层筛选过程,确保检索结果在语义理解和关键词匹配方面互补,提升生成内容的准确性,特别适用于多意图查询或复杂的长文本检索。 + - 优化检索效率,控制计算资源消耗 + 1. 具体实施:利用缓存机制存储近期高频查询结果,避免对相似查询的重复计算。同时,可基于分布式计算结构,将DPR的语义计算任务分散至多节点并行处理。 + 2. 目的与效果:缓存与分布式计算结合可显著减少检索计算压力,使系统能够在有限资源下提高响应速度,适用于高并发、实时性要求高的应用场景。 + - 引入去重和排序优化算法 + 1. 具体实施:在检索结果中应用余弦相似度去重算法,筛除冗余内容,并基于用户偏好或时间戳对检索结果排序,以确保输出内容的丰富性和新鲜度。 + 2. 目的与效果:通过去重和优化排序,确保生成内容更加简洁、直接,减少重复信息的干扰,提高用户获取信息的效率和体验。 + - 动态调整检索策略适应多任务需求 + 1. 具体实施:设置不同检索策略模板,根据任务类型自动调整检索权重、片段长度和策略组合。例如在医疗场景中偏向语义检索,而在金融新闻场景中更重视快速关键词匹配。 + 2. 目的与效果:动态调整检索策略使RAG模型更加灵活,能够适应不同任务需求,确保检索的精准性和生成答案的上下文适配性,显著提升多场景下的用户体验。 + - 借助Haystack等检索优化框架 + 1. 具体实施:在RAG模型中集成Haystack框架,以实现更高效的检索效果,并利用框架中的插件生态系统来增强检索模块的可扩展性和可调节性。 + 2. 目的与效果:Haystack提供了检索和生成的整合接口,有助于快速优化检索模块,并适应复杂多样的用户需求,在多任务环境中提供更稳定的性能表现。 + +## 5.4 回答生成与优化 + +在RAG模型中,生成器负责基于检索模块提供的上下文,为用户查询生成自然语言答案。生成内容的准确性和逻辑性直接决定了用户的体验,因此优化生成器的表现至关重要。通过引入知识图谱等结构化信息,生成器能够更准确地理解和关联上下文,从而生成逻辑连贯、准确的回答。此外,生成器的生成逻辑可结合用户反馈持续优化,使回答风格和内容更加符合用户需求。 + +- 挑战: + - 在回答生成过程中,RAG模型仍面临以下不足: + - 上下文不充分导致的逻辑不连贯 + 1. 当生成器在上下文缺失或信息不完整的情况下生成回答时,生成内容往往不够连贯,特别是在处理复杂、跨领域任务时。这种缺乏上下文支持的问题,容易导致生成器误解或忽略关键信息,最终生成内容的逻辑性和完整性欠佳。如在医学场景中,若生成器缺少对病例或症状的全面理解,可能导致回答不准确或不符合逻辑,影响专业性和用户信任度。 + - 专业领域回答的准确性欠佳 + 1. 在医学、法律等高专业领域中,生成器的回答需要高度的准确性。然而,生成器可能因缺乏特定知识而生成不符合领域要求的回答,出现内容偏差或理解错误,尤其在涉及专业术语和复杂概念时更为明显。如在法律咨询中,生成器可能未能正确引用相关法条或判例,导致生成的答案不够精确,甚至可能产生误导。 + - 难以有效整合多轮用户反馈 + 1. 生成器缺乏有效机制来利用多轮用户反馈进行自我优化。用户反馈可能涉及回答内容的准确性、逻辑性以及风格适配等方面,但生成器在连续对话中缺乏充分的调节机制,难以持续调整生成策略和回答风格。如在客服场景中,生成器可能连续生成不符合用户需求的回答,降低了用户满意度。 + - 生成内容的可控性和一致性不足 + 1. 在特定领域回答生成中,生成器的输出往往不具备足够的可控性和一致性。由于缺乏领域特定的生成规则和约束,生成内容的专业性和风格一致性欠佳,难以满足高要求的应用场景。如在金融报告生成中,生成内容需要确保一致的风格和术语使用,否则会影响输出的专业性和可信度。 +- 改进: + - 针对以上不足,可以从以下方面优化回答生成模块: + - 引入知识图谱与结构化数据,增强上下文理解 + 1. 具体实施:结合知识图谱或知识库,将医学、法律等专业领域的信息整合到生成过程中。生成器在生成回答时,可以从知识图谱中提取关键信息和关联知识点,确保回答具备连贯的逻辑链条。 + 2. 目的与效果:知识图谱的引入提升了生成内容的连贯性和准确性,尤其在高专业性领域中,通过丰富的上下文理解,使生成器能够产生符合逻辑的回答。 + - 设计专业领域特定的生成规则和约束 + 1. 具体实施:在生成模型中加入领域特定的生成规则和用语约束,特别针对医学、法律等领域的常见问答场景,设定回答模板、术语库等,以提高生成内容的准确性和一致性。 + 2. 目的与效果:生成内容更具领域特征,输出风格和内容的专业性增强,有效降低了生成器在专业领域中的回答偏差,满足用户对专业性和可信度的要求。 + - 优化用户反馈机制,实现动态生成逻辑调整 + 1. 具体实施:利用机器学习算法对用户反馈进行分析,从反馈中提取生成错误或用户需求的调整信息,动态调节生成器的生成逻辑和策略。同时,在多轮对话中逐步适应用户的需求和风格偏好。 + 2. 目的与效果:用户反馈的高效利用能够帮助生成器优化生成内容,提高连续对话中的响应质量,提升用户体验,并使回答更贴合用户需求。 + - 引入生成器与检索器的协同优化机制 + 1. 具体实施:通过协同优化机制,在生成器生成答案之前,允许生成器请求检索器补充缺失的上下文信息。生成器可基于回答需求自动向检索器发起上下文补充请求,从而获取完整的上下文。 + 2. 目的与效果:协同优化机制保障了生成器在回答时拥有足够的上下文支持,避免信息断层或缺失,提升回答的完整性和准确性。 + - 实施生成内容的一致性检测和语义校正 + 1. 具体实施:通过一致性检测算法对生成内容进行术语、风格的统一管理,并结合语义校正模型检测生成内容是否符合用户需求的逻辑结构。在复杂回答生成中,使用语义校正对不符合逻辑的生成内容进行自动优化。 + 2. 目的与效果:生成内容具备高度一致性和逻辑性,特别是在多轮对话和专业领域生成中,保障了内容的稳定性和专业水准,提高了生成答案的可信度和用户满意度。 + +## 5.5 RAG流程 + + + +1. 数据加载与查询输入: + 1. 用户通过界面或API提交自然语言查询,系统接收查询作为输入。 + 2. 输入被传递至向量化器,利用向量化技术(如BERT或Sentence Transformer)将自然语言查询转换为向量表示。 +2. 文档检索: + 1. 向量化后的查询会传递给检索器,检索器通过在知识库中查找最相关的文档片段。 + 2. 检索可以基于稀疏检索技术(如BM25)或密集检索技术(如DPR)来提高匹配效率和精度。 +3. 生成器处理与自然语言生成: + 1. 检索到的文档片段作为生成器的输入,生成器(如GPT、BART或T5)基于查询和文档内容生成自然语言回答。 + 2. 生成器结合了外部检索结果和预训练模型的语言知识,使回答更加精准、自然。 +4. 结果输出: + 1. 系统生成的答案通过API或界面返回给用户,确保答案连贯且知识准确。 +5. 反馈与优化: + 1. 用户可以对生成的答案进行反馈,系统根据反馈优化检索与生成过程。 + 2. 通过微调模型参数或调整检索权重,系统逐步改进其性能,确保未来查询时更高的准确性与效率。 + +# 6. RAG相关案例整合 + +[各种分类领域下的RAG](https://github.com/hymie122/RAG-Survey) + +# 7. RAG模型的应用 + +RAG模型已在多个领域得到广泛应用,主要包括: + +## 7.1 智能问答系统中的应用 + +- RAG通过实时检索外部知识库,生成包含准确且详细的答案,避免传统生成模型可能产生的错误信息。例如,在医疗问答系统中,RAG能够结合最新的医学文献,生成包含最新治疗方案的准确答案,避免生成模型提供过时或错误的建议。这种方法帮助医疗专家快速获得最新的研究成果和诊疗建议,提升医疗决策的质量。 + - [医疗问答系统案例](https://www.apexon.com/blog/empowering-discovery-the-role-of-rag-architecture-generative-ai-in-healthcare-life-sciences/) + -  + - 用户通过Web应用程序发起查询: + 1. 用户在一个Web应用上输入查询请求,这个请求进入后端系统,启动了整个数据处理流程。 + - 使用Azure AD进行身份验证: + 1. 系统通过Azure Active Directory (Azure AD) 对用户进行身份验证,确保只有经过授权的用户才能访问系统和数据。 + - 用户权限检查: + 1. 系统根据用户的组权限(由Azure AD管理)过滤用户能够访问的内容。这个步骤保证了用户只能看到他们有权限查看的信息。 + - Azure AI搜索服务: + 1. 过滤后的用户查询被传递给Azure AI搜索服务,该服务会在已索引的数据库或文档中查找与查询相关的内容。这个搜索引擎通过语义搜索技术检索最相关的信息。 + - 文档智能处理: + 1. 系统使用OCR(光学字符识别)和文档提取等技术处理输入的文档,将非结构化数据转换为结构化、可搜索的数据,便于Azure AI进行检索。 + - 文档来源: + 1. 这些文档来自预先存储的输入文档集合,这些文档在被用户查询之前已经通过文档智能处理进行了准备和索引。 + - Azure Open AI生成响应: + 1. 在检索到相关信息后,数据会被传递到Azure Open AI,该模块利用自然语言生成(NLG)技术,根据用户的查询和检索结果生成连贯的回答。 + - 响应返回用户: + 1. 最终生成的回答通过Web应用程序返回给用户,完成整个查询到响应的流程。 + - 整个流程展示了Azure AI技术的集成,通过文档检索、智能处理以及自然语言生成来处理复杂的查询,并确保了数据的安全和合规性。 + +## 7.2 信息检索与文本生成 + +- 文本生成:RAG不仅可以检索相关文档,还能根据这些文档生成总结、报告或文档摘要,从而增强生成内容的连贯性和准确性。例如,法律领域中,RAG可以整合相关法条和判例,生成详细的法律意见书,确保内容的全面性和严谨性。这在法律咨询和文件生成过程中尤为重要,可以帮助律师和法律从业者提高工作效率。 + - [法律领域检索增强生成案例](https://www.apexon.com/blog/empowering-discovery-the-role-of-rag-architecture-generative-ai-in-healthcare-life-sciences/) + - 内容总结: + - 背景: 传统的大语言模型 (LLMs) 在生成任务中表现优异,但在处理法律领域中的复杂任务时存在局限。法律文档具有独特的结构和术语,标准的检索评估基准往往无法充分捕捉这些领域特有的复杂性。为了弥补这一不足,LegalBench-RAG 旨在提供一个评估法律文档检索效果的专用基准。 + - LegalBench-RAG 的结构: + 1.  + 2. 工作流程: + 3. 用户输入问题(Q: ?,A: ?):用户通过界面输入查询问题,提出需要答案的具体问题。 + 4. 嵌入与检索模块(Embed + Retrieve):该模块接收到用户的查询后,会对问题进行嵌入(将其转化为向量),并在外部知识库或文档中执行相似度检索。通过检索算法,系统找到与查询相关的文档片段或信息。 + 5. 生成答案(A):基于检索到的最相关信息,生成模型(如GPT或类似的语言模型)根据检索的结果生成连贯的自然语言答案。 + 6. 对比和返回结果:生成的答案会与之前的相关问题答案进行对比,并最终将生成的答案返回给用户。 + 7. 该基准基于 LegalBench 的数据集,构建了 6858 个查询-答案对,并追溯到其原始法律文档的确切位置。 + 8. LegalBench-RAG 侧重于精确地检索法律文本中的小段落,而非宽泛的、上下文不相关的片段。 + 9. 数据集涵盖了合同、隐私政策等不同类型的法律文档,确保涵盖多个法律应用场景。 + - 意义: LegalBench-RAG 是第一个专门针对法律检索系统的公开可用的基准。它为研究人员和公司提供了一个标准化的框架,用于比较不同的检索算法的效果,特别是在需要高精度的法律任务中,例如判决引用、条款解释等。 + - 关键挑战: + 1. RAG 系统的生成部分依赖检索到的信息,错误的检索结果可能导致错误的生成输出。 + 2. 法律文档的长度和术语复杂性增加了模型检索和生成的难度。 + - 质量控制: 数据集的构建过程确保了高质量的人工注释和文本精确性,特别是在映射注释类别和文档ID到具体文本片段时进行了多次人工校验。 + +## 7.3 其它应用场景 + +RAG还可以应用于多模态生成场景,如图像、音频和3D内容生成。例如,跨模态应用如ReMoDiffuse和Make-An-Audio利用RAG技术实现不同数据形式的生成。此外,在企业决策支持中,RAG能够快速检索外部资源(如行业报告、市场数据),生成高质量的前瞻性报告,从而提升企业战略决策的能力。 + +## 8 总结 + +本文档系统阐述了检索增强生成(RAG)模型的核心机制、优势与应用场景。通过结合生成模型与检索模型,RAG解决了传统生成模型在面对事实性任务时的“编造”问题和检索模型难以生成连贯自然语言输出的不足。RAG模型能够实时从外部知识库获取信息,使生成内容既包含准确的知识,又具备流畅的语言表达,适用于医疗、法律、智能问答系统等多个知识密集型领域。 + +在应用实践中,RAG模型虽然有着信息完整性、推理能力和跨领域适应性等显著优势,但也面临着数据质量、计算资源消耗和知识库更新等挑战。为进一步提升RAG的性能,提出了针对数据采集、内容分块、检索策略优化以及回答生成的全面改进措施,如引入知识图谱、优化用户反馈机制、实施高效去重算法等,以增强模型的适用性和效率。 + +RAG在智能问答、信息检索与文本生成等领域展现了出色的应用潜力,并在不断发展的技术支持下进一步拓展至多模态生成和企业决策支持等场景。通过引入混合检索技术、知识图谱以及动态反馈机制,RAG能够更加灵活地应对复杂的用户需求,生成具有事实支撑和逻辑连贯性的回答。未来,RAG将通过增强模型透明性与可控性,进一步提升在专业领域中的可信度和实用性,为智能信息检索与内容生成提供更广泛的应用空间。 + +# API 文件库 +## FastGPT API 文件库功能介绍和使用方式 + +| | | +| --- | --- | +|  |  | + +## 背景 + +目前 FastGPT 支持本地文件导入,但是很多时候,用户自身已经有了一套文档库,如果把文件重复导入一遍,会造成二次存储,并且不方便管理。因为 FastGPT 提供了一个 API 文件库的概念,可以通过简单的 API 接口,去拉取已有的文档库,并且可以灵活配置是否导入。 + +API 文件库能够让用户轻松对接已有的文档库,只需要按照 FastGPT 的 API 文件库规范,提供相应文件接口,然后将服务接口的 baseURL 和 token 填入知识库创建参数中,就能直接在页面上拿到文件库的内容,并选择性导入 + +## 如何使用 API 文件库 + +创建知识库时,选择 API 文件库类型,然后需要配置两个关键参数:文件服务接口的 baseURL 和用于身份验证的请求头信息。只要提供的接口规范符合 FastGPT 的要求,系统就能自动获取并展示完整的文件列表,可以根据需要选择性地将文件导入到知识库中。 + +你需要提供两个参数: +- baseURL: 文件服务接口的 baseURL +- authorization: 用于身份验证的请求头信息,实际请求格式为 `Authorization: Bearer- - - -资源 -可管理权限 -说明 -- -团队 -创建应用 -创建,删除等基础操作 -- -创建知识库 -创建,删除等基础操作 -- -创建团队 APIKey -创建,删除等基础操作 -- -管理成员 -邀请、移除用户,创建群组等 -- -应用 -可使用 -允许进行对话交互 -- -可编辑 -修改基本信息,进行流程编排等 -- -可管理 -添加或删除协作者 -- -知识库 -可使用 -可以在应用中调用该知识库 -- -可编辑 -修改知识库的内容 -- - -可管理 -添加或删除协作者 -` + +## 接口规范 + +接口响应格式: + +```ts +type ResponseType = { + success: boolean; + message: string; + data: any; +} +``` + +数据类型: + +```ts +// 文件列表中,单项的文件类型 +type FileListItem = { + id: string; + parentId: string | null; + name: string; + type: 'file' | 'folder'; + updateTime: Date; + createTime: Date; +} +``` + + +### 1. 获取文件树 + +{{< tabs tabTotal="2" >}} +{{< tab tabName="请求示例" >}} +{{< markdownify >}} + +{{% alert icon=" " context="success" %}} +- parentId - 父级 id,可选,或者 null。 +- searchKey - 检索词,可选 +{{% /alert %}} + +```bash +curl --location --request POST '{{baseURL}}/v1/file/list' \ +--header 'Authorization: Bearer {{authorization}}' \ +--header 'Content-Type: application/json' \ +--data-raw '{ + "parentId": null, + "searchKey": "" +}' +``` + +{{< /markdownify >}} +{{< /tab >}} + +{{< tab tabName="响应示例" >}} +{{< markdownify >}} + +```json +{ + "code": 200, + "success": true, + "message": "", + "data": [ + { + "id": "xxxx", + "parentId": "xxxx", + "type": "file", // file | folder + "name":"test.json", + "updateTime":"2024-11-26T03:05:24.759Z", + "createTime":"2024-11-26T03:05:24.759Z" + } + ] +} +``` + +{{< /markdownify >}} +{{< /tab >}} +{{< /tabs >}} + +### 2. 获取单个文件内容(文本内容或访问链接) + +{{< tabs tabTotal="3" >}} +{{< tab tabName="请求示例" >}} +{{< markdownify >}} + +```bash +curl --location --request GET '{{baseURL}}/v1/file/content?id=xx' \ +--header 'Authorization: Bearer {{authorization}}' +``` + +{{< /markdownify >}} +{{< /tab >}} + +{{< tab tabName="响应示例" >}} +{{< markdownify >}} + +```json +{ + "code": 200, + "success": true, + "message": "", + "data": { + "title": "文档标题", + "content": "FastGPT 是一个基于 LLM 大语言模型的知识库问答系统,提供开箱即用的数据处理、模型调用等能力。同时可以通过 Flow 可视化进行工作流编排,从而实现复杂的问答场景!\n", + "previewUrl": "xxxx" + } +} +``` + +{{% alert icon=" " context="success" %}} + +- title - 文件标题。 +- content - 文件内容,直接拿来用。 +- previewUrl - 文件链接,系统会请求该地址获取文件内容。 + +`content`和`previewUrl`二选一返回,如果同时返回则 `content` 优先级更高,返回 `previewUrl`时,则会访问该链接进行文档内容读取。 + +{{% /alert %}} + +{{< /markdownify >}} +{{< /tab >}} +{{< /tabs >}} + + +### 3. 获取文件阅读链接(用于查看原文) + +{{< tabs tabTotal="2" >}} +{{< tab tabName="请求示例" >}} +{{< markdownify >}} + +id 为文件的 id。 + +```bash +curl --location --request GET '{{baseURL}}/v1/file/read?id=xx' \ +--header 'Authorization: Bearer {{authorization}}' +``` + +{{< /markdownify >}} +{{< /tab >}} + +{{< tab tabName="响应示例" >}} +{{< markdownify >}} + +```json +{ + "code": 200, + "success": true, + "message": "", + "data": { + "url": "xxxx" + } +} +``` + +{{% alert icon=" " context="success" %}} +- url - 文件访问链接,拿到后会自动打开。 +{{% /alert %}} + +{{< /markdownify >}} +{{< /tab >}} +{{< /tabs >}} + +# 知识库搜索方案和参数 +## 本节会详细介绍 FastGPT 知识库结构设计,理解其 QA 的存储格式和多向量映射,以便更好的构建知识库。同时会介绍每个搜索参数的功能。这篇介绍主要以使用为主,详细原理不多介绍。 + +## 理解向量 + +FastGPT 采用了 RAG 中的 Embedding 方案构建知识库,要使用好 FastGPT 需要简单的理解`Embedding`向量是如何工作的及其特点。 + +人类的文字、图片、视频等媒介是无法直接被计算机理解的,要想让计算机理解两段文字是否有相似性、相关性,通常需要将它们转成计算机可以理解的语言,向量是其中的一种方式。 + +向量可以简单理解为一个数字数组,两个向量之间可以通过数学公式得出一个`距离`,距离越小代表两个向量的相似度越大。从而映射到文字、图片、视频等媒介上,可以用来判断两个媒介之间的相似度。向量搜索便是利用了这个原理。 + +而由于文字是有多种类型,并且拥有成千上万种组合方式,因此在转成向量进行相似度匹配时,很难保障其精确性。在向量方案构建的知识库中,通常使用`topk`召回的方式,也就是查找前`k`个最相似的内容,丢给大模型去做更进一步的`语义判断`、`逻辑推理`和`归纳总结`,从而实现知识库问答。因此,在知识库问答中,向量搜索的环节是最为重要的。 + +影响向量搜索精度的因素非常多,主要包括:向量模型的质量、数据的质量(长度,完整性,多样性)、检索器的精度(速度与精度之间的取舍)。与数据质量对应的就是检索词的质量。 + +检索器的精度比较容易解决,向量模型的训练略复杂,因此数据和检索词质量优化成了一个重要的环节。 + + +### 提高向量搜索精度的方法 + +1. 更好分词分段:当一段话的结构和语义是完整的,并且是单一的,精度也会提高。因此,许多系统都会优化分词器,尽可能的保障每组数据的完整性。 +2. 精简`index`的内容,减少向量内容的长度:当`index`的内容更少,更准确时,检索精度自然会提高。但与此同时,会牺牲一定的检索范围,适合答案较为严格的场景。 +3. 丰富`index`的数量,可以为同一个`chunk`内容增加多组`index`。 +4. 优化检索词:在实际使用过程中,用户的问题通常是模糊的或是缺失的,并不一定是完整清晰的问题。因此优化用户的问题(检索词)很大程度上也可以提高精度。 +5. 微调向量模型:由于市面上直接使用的向量模型都是通用型模型,在特定领域的检索精度并不高,因此微调向量模型可以很大程度上提高专业领域的检索效果。 + +## FastGPT 构建知识库方案 + +### 数据存储结构 + +在 FastGPT 中,整个知识库由库、集合和数据 3 部分组成。集合可以简单理解为一个`文件`。一个`库`中可以包含多个`集合`,一个`集合`中可以包含多组`数据`。最小的搜索单位是`库`,也就是说,知识库搜索时,是对整个`库`进行搜索,而集合仅是为了对数据进行分类管理,与搜索效果无关。(起码目前还是) + + + +### 向量存储结构 + +FastGPT 采用了`PostgresSQL`的`PG Vector`插件作为向量检索器,索引为`HNSW`。且`PostgresSQL`仅用于向量检索(该引擎可以替换成其它数据库),`MongoDB`用于其他数据的存取。 + +在`MongoDB`的`dataset.datas`表中,会存储向量原数据的信息,同时有一个`indexes`字段,会记录其对应的向量ID,这是一个数组,也就是说,一组数据可以对应多个向量。 + +在`PostgresSQL`的表中,设置一个`vector`字段用于存储向量。在检索时,会先召回向量,再根据向量的ID,去`MongoDB`中寻找原数据内容,如果对应了同一组原数据,则进行合并,向量得分取最高得分。 + + + +### 多向量的目的和使用方式 + +在一组向量中,内容的长度和语义的丰富度通常是矛盾的,无法兼得。因此,FastGPT 采用了多向量映射的方式,将一组数据映射到多组向量中,从而保障数据的完整性和语义的丰富度。 + +你可以为一组较长的文本,添加多组向量,从而在检索时,只要其中一组向量被检索到,该数据也将被召回。 + +意味着,你可以通过标注数据块的方式,不断提高数据块的精度。 + +### 检索方案 + +1. 通过`问题优化`实现指代消除和问题扩展,从而增加连续对话的检索能力以及语义丰富度。 +2. 通过`Concat query`来增加`Rerank`连续对话的时,排序的准确性。 +3. 通过`RRF`合并方式,综合多个渠道的检索效果。 +4. 通过`Rerank`来二次排序,提高精度。 + + + + +## 搜索参数 +| | | | +| --- |---| --- | +||  |  | + +### 搜索模式 + +#### 语义检索 + +语义检索是通过向量距离,计算用户问题与知识库内容的距离,从而得出“相似度”,当然这并不是语文上的相似度,而是数学上的。 + +优点: +- 相近语义理解 +- 跨多语言理解(例如输入中文问题匹配英文知识点) +- 多模态理解(文本,图片,音视频等) + +缺点: +- 依赖模型训练效果 +- 精度不稳定 +- 受关键词和句子完整度影响 + +#### 全文检索 + +采用传统的全文检索方式。适合查找关键的主谓语等。 + +#### 混合检索 + +同时使用向量检索和全文检索,并通过 RRF 公式进行两个搜索结果合并,一般情况下搜索结果会更加丰富准确。 + +由于混合检索后的查找范围很大,并且无法直接进行相似度过滤,通常需要进行利用重排模型进行一次结果重新排序,并利用重排的得分进行过滤。 + +#### 结果重排 + +利用`ReRank`模型对搜索结果进行重排,绝大多数情况下,可以有效提高搜索结果的准确率。不过,重排模型与问题的完整度(主谓语齐全)有一些关系,通常会先走问题优化后再进行搜索-重排。重排后可以得到一个`0-1`的得分,代表着搜索内容与问题的相关度,该分数通常比向量的得分更加精确,可以根据得分进行过滤。 + +FastGPT 会使用 `RRF` 对重排结果、向量搜索结果、全文检索结果进行合并,得到最终的搜索结果。 + +### 搜索过滤 + +#### 引用上限 + +每次搜索最多引用`n`个`tokens`的内容。 + +之所以不采用`top k`,是发现在混合知识库(问答库、文档库)时,不同`chunk`的长度差距很大,会导致`top k`的结果不稳定,因此采用了`tokens`的方式进行引用上限的控制。 + +#### 最低相关度 + +一个`0-1`的数值,会过滤掉一些低相关度的搜索结果。 + +该值仅在`语义检索`或使用`结果重排`时生效。 + +### 问题优化 + +#### 背景 + +在 RAG 中,我们需要根据输入的问题去数据库里执行 embedding 搜索,查找相关的内容,从而查找到相似的内容(简称知识库搜索)。 + +在搜索的过程中,尤其是连续对话的搜索,我们通常会发现后续的问题难以搜索到合适的内容,其中一个原因是知识库搜索只会使用“当前”的问题去执行。看下面的例子: + + + +用户在提问“第二点是什么”的时候,只会去知识库里查找“第二点是什么”,压根查不到内容。实际上需要查询的是“QA结构是什么”。因此我们需要引入一个【问题优化】模块,来对用户当前的问题进行补全,从而使得知识库搜索能够搜索到合适的内容。使用补全后效果如下: + + + +#### 实现方式 + +在进行`数据检索`前,会先让模型进行`指代消除`与`问题扩展`,一方面可以可以解决指代对象不明确问题,同时可以扩展问题的语义丰富度。你可以通过每次对话后的对话详情,查看补全的结果。 + +# 外部文件知识库 +## FastGPT 外部文件知识库功能介绍和使用方式 + +外部文件库是 FastGPT 商业版特有功能。它允许接入你现在的文件系统,无需将文件再导入一份到 FastGPT 中。 + +并且,阅读权限可以通过你的文件系统进行控制。 + +| | | | +| --------------------- | --------------------- | --------------------- | +|  |  |  | + + +## 导入参数说明 + +- 外部预览地址:用于跳转你的文件阅读地址,会携带“文件阅读ID”进行访问。 +- 文件访问URL:文件可访问的地址。 +- 文件阅读ID:通常情况下,文件访问URL是临时的。如果希望永久可以访问,你需要使用该文件阅读ID,并配合上“外部预览地址”,跳转至新的阅读地址进行原文件访问。 +- 文件名:默认会自动解析文件访问URL上的文件名。如果你手动填写,将会以手动填写的值为准。 + +[点击查看API导入文档](/docs/development/openapi/dataset/#创建一个外部文件库集合商业版) + +## API 文件库替代方案 + +4.8.15 提供了新的知识库类型 - API 文件库,对外部文件知识库做了进一步的拓展 + +通过对接口进行简单的调整,就能使用 API 文件库代替外部文件知识库的功能 + +你可以直接将外部文件知识库中的外部预览地址,作为 API 文件库接口规范中获取文件阅读链接的接口返回 + +然后再以相同的 baseURL 实现获取文件列表和获取单个文件内容这两个接口 + +这样就能轻松地使用 API 文件库替代原有的外部文件知识库,更多详细的内容见 API 文件库的文档 + +# 飞书知识库 +## FastGPT 飞书知识库功能介绍和使用方式 + +| | | +| --- | --- | +|  |  | + +FastGPT v4.8.16 版本开始,商业版用户支持飞书知识库导入,用户可以通过配置飞书应用的 appId 和 appSecret,并选中一个**文档空间的顶层文件夹**来导入飞书知识库。目前处于测试阶段,部分交互有待优化。 + +由于飞书限制,无法直接获取所有文档内容,目前仅可以获取共享空间下文件目录的内容,无法获取个人空间和知识库里的内容。 + + +## 1. 创建飞书应用 + +打开 [飞书开放平台](https://open.feishu.cn/?lang=zh-CN),点击**创建应用**,选择**自建应用**,然后填写应用名称。 + +## 2. 配置应用权限 + +创建应用后,进入应用可以配置相关权限,这里需要增加**3个权限**: + +1. 获取云空间文件夹下的云文档清单 +2. 查看新版文档 +3. 查看、评论、编辑和管理云空间中所有文件 + + + +## 3. 获取 appId 和 appSecret + + + +## 4. 给 Folder 增加权限 + +可参考飞书教程: https://open.feishu.cn/document/server-docs/docs/drive-v1/faq#b02e5bfb + +大致总结为: + +1. 把刚刚创建的应用拉入一个群里 +2. 给这个群增加目录权限 + +如果你的目录已经给全员组增加权限了,则可以跳过上面步骤,直接获取 Folder Token。 + + + +## 5. 获取 Folder Token + +可以页面路径上获取 Folder Token,注意不要把问号复制进来。 + + + +## 6. 创建知识库 + +根据 3 和 5 获取到的 3 个参数,创建知识库,选择飞书文件库类型,然后填入对应的参数,点击创建。 + + + +# Web 站点同步 +## FastGPT Web 站点同步功能介绍和使用方式 + + + +该功能目前仅向商业版用户开放。 + +## 什么是 Web 站点同步 + +Web 站点同步利用爬虫的技术,可以通过一个入口网站,自动捕获`同域名`下的所有网站,目前最多支持`200`个子页面。出于合规与安全角度,FastGPT 仅支持`静态站点`的爬取,主要用于各个文档站点快速构建知识库。 + +Tips: 国内的媒体站点基本不可用,公众号、csdn、知乎等。可以通过终端发送`curl`请求检测是否为静态站点,例如: + +```bash +curl https://doc.tryfastgpt.ai/docs/intro/ +``` + +## 如何使用 + +### 1. 新建知识库,选择 Web 站点同步 + + + + + +### 2. 点击配置站点信息 + + + +### 3. 填写网址和选择器 + + + +好了, 现在点击开始同步,静等系统自动抓取网站信息即可。 + + +## 创建应用,绑定知识库 + + + +## 选择器如何使用 + +选择器是 HTML CSS JS 的产物,你可以通过选择器来定位到你需要抓取的具体内容,而不是整个站点。使用方式为: + +### 首先打开浏览器调试面板(通常是 F12,或者【右键 - 检查】) + + + + + +### 输入对应元素的选择器 + +[菜鸟教程 css 选择器](https://www.runoob.com/cssref/css-selectors.html),具体选择器的使用方式可以参考菜鸟教程。 + +上图中,我们选中了一个区域,对应的是`div`标签,它有 `data-prismjs-copy`, `data-prismjs-copy-success`, `data-prismjs-copy-error` 三个属性,这里我们用到一个就够。所以选择器是: +**`div[data-prismjs-copy]`** + +除了属性选择器,常见的还有类和ID选择器。例如: + + + +上图 class 里的是类名(可能包含多个类名,都是空格隔开的,选择一个即可),选择器可以为:**`.docs-content`** + +### 多选择器使用 + +在开头的演示中,我们对 FastGPT 文档是使用了多选择器的方式来选择,通过逗号隔开了两个选择器。 + + + +我们希望选中上图两个标签中的内容,此时就需要两组选择器。一组是:`.docs-content .mb-0.d-flex`,含义是 `docs-content` 类下同时包含 `mb-0`和`d-flex` 两个类的子元素; + +另一组是`.docs-content div[data-prismjs-copy]`,含义是`docs-content` 类下包含`data-prismjs-copy`属性的`div`元素。 + +把两组选择器用逗号隔开即可:`.docs-content .mb-0.d-flex, .docs-content div[data-prismjs-copy]` + +# 语雀文件库 +## FastGPT 语雀文件库功能介绍和使用方式 + +| | | +| --- | --- | +|  |  | + +FastGPT v4.8.16 版本开始,商业版用户支持语雀文件库导入,用户可以通过配置语雀的 token 和 uid 来导入语雀文档库。目前处于测试阶段,部分交互有待优化。 + +## 1. 获取语雀的 token 和 uid + +在语雀首页 - 个人头像 - 设置,可找到对应参数。 + + + +参考下图获取 Token 和 User ID,注意给 Token 赋值权限: + +| 获取 Token | 增加权限 | 获取 User ID | +| --- | --- | --- | +|  |  |  | + +## 2. 创建知识库 + +使用上一步获取的 token 和 uid,创建知识库,选择语雀文件库类型,然后填入对应的参数,点击创建。 + + + + + +## 3. 导入文档 + +创建完知识库后,点击`添加文件`即可导入语雀的文档库,跟随引导即可。 + +语雀知识库支持定时同步功能,每天会不定时的扫描一次,如果文档有更新,则会进行同步,也可以进行手动同步。 + + + +# Bing 搜索插件填写说明 +## FastGPT Bing 搜索插件配置步骤详解 + +1. # 打开微软Azure官网,登陆账号 + +https://portal.azure.com/ + + + +1. # 创建bing web搜索资源 + +搜索Bing Search v7,点击创建 + +https://portal.azure.com/#create/Microsoft.BingSearch + + + +1. # 进入资源详情点击管理密钥 + + + +# 4. 复制任意一个密钥填入插件输入 + + + + + +# Doc2x 插件填写说明 +## 如何配置和使用 Doc2x 插件 + +1. # 打开docx官网,创建账号,并复制 apikey + +https://doc2x.noedgeai.com/ + + + + + +1. # 填写apikey到fastgpt中 + +**工作流****中:** + + + +**简易模式使用:** + + + +# Google 搜索插件填写说明 +## FastGPT Google 搜索插件配置指南 + +1. # 创建Google Custom Search Engine + +https://programmablesearchengine.google.com/ + +我们连到Custom Search Engine control panel 建立Search Engine + + + +取得搜索引擎的ID,即cx + + + +1. # 获取api key + +https://developers.google.com/custom-search/v1/overview?hl=zh-cn + + + +1. # 填入插件输入参数 + +将搜索引擎ID填入cx字段,api key填入key字段 + + + +# 如何提交系统插件 +## FastGPT 系统插件提交指南 + +> 如何向 FastGPT 社区提交系统插件 + +## 系统插件原则 + +- 尽可能的轻量简洁,以解决实际问题的工具为主 +- 不允许有密集 cpu 计算,不会占用大量内存占用或网络消耗 +- 不允许操作数据库 +- 不允许往固定的私人地址发送请求(不包含请求某些在线服务,例如 gapier, firecrawl等) +- 不允许使用私人包,可使用主流的开源包 + +## 什么插件可以合并 + +由于目前未采用按需安装的模式,合并进仓库的插件会全部展示给用户使用。 + +为了控制插件的质量以及避免数量过多带来的繁琐,并不是所有的插件都会被合并到开源仓库中,你可以提前 PR 与我们沟通插件的内容。 + +后续实现插件按需安装后,我们会允许更多的社区插件合入。 + +## 如何写一个系统插件 - 初步 + +FastGPT 系统插件和用户工作台的插件效果是一致的,所以你需要提前了解“插件”的定义和功能。 + +在 FastGPT 中,插件是一种特殊的工作流,它允许你将一个工作流封装起来,并自定义入口参数和出口参数,类似于代码里的 “子函数”。 + +1. ### 跑通 FastGPT dev 环境 + +需要在 dev 环境下执行下面的操作。 + +1. ### 在 FastGPT 工作台中,创建一个插件 + +选择基础模板即可。 + + + +1. ### 创建系统插件配置 + +系统插件配置以及自定义代码,都会在 **packages/plugins** 目录下。 + +1. 在 **packages/plugins/src** 下,复制一份 **template** 目录,并修改名字。 +2. 打开目录里面的 template.json 文件,配置如下: +3. 目录还有一个 index.ts 文件,下文再提。 + +```TypeScript +{ + "author": "填写你的名字", + "version": "当前系统版本号", + "name": "插件名", + "avatar": "插件头像,需要配成 icon 格式。直接把 logo 图在 pr 评论区提交即可,我们会帮你加入。", + "intro": " 插件的描述,这个描述会影响工具调用", + "showStatus": false, // 是否在对话过程展示状态 + "weight": 10, // 排序权重,均默认 10 + + "isTool": true, // 是否作为工具调用节点 + "templateType": "tools", // 都填写 tools 即可,由官方来分类 + + "workflow": { // 这个对象先不管,待会直接粘贴导出的工作流即可 + "nodes": [], + "edges": [] + } +} +``` + +1. 打开 **packages/plugins/register** 文件,注册你的插件。在 list 数组中,加入一个你插件目录的名字,如下图的例子。如需构建插件组(带目录),可参考 DuckDuckGo 插件。 + +无需额外写代码的插件,直接放在 staticPluginList 内,需要在项目内额外写代码的,写在 packagePluginList 中。 + + + +1. ### 完成工作流编排并测试 + +完成工作流编排后,可以点击右上角的发布,并在其他工作流中引入进行测试(此时属于团队插件)。 + +1. ### 复制配置到 template.json + +鼠标放置在左上角插件的头像和名称上,会出现对于下拉框操作,可以导出工作流配置。 + +导出的配置,会自动到剪切板,可以直接到 template.json 文件中粘贴使用,替换步骤 2 中,**workflow** 的值。 + + + +1. ### 验证插件是否加载成功 + +刷新页面,打开系统插件,看其是否成功加载,并将其添加到工作流中使用。 + + + +1. ### 提交 PR + +如果你觉得你的插件需要提交到开源仓库,可以通过 PR 形式向我们提交。 + +- 写清楚插件的介绍和功能 +- 配上插件运行的效果图 +- 插件参数填写说明,需要在 PR 中写清楚。例如,有些插件需要去某个提供商申请 key,需要附上对应的地址和教材,后续我们会加入到文档中。 + +## 写一个复杂的系统插件 - 进阶 + +这一章会介绍如何增加一些无法单纯通过编排实现的插件。因为可能需要用到网络请求或第三方包。 + +上一章提到,在插件的 **template** 目录下,还有一个 **index.ts** 文件,这个文件就是用来执行一些插件的代码的。你可以通过在 HTTP 节点中的 URL,填写插件的名字,即可触发该方法,下面以 **duckduckgo/search** 这个插件为例: + + + + + + + +参考上面 3 张图片,当 HTTP 节点的 URL 为系统插件注册的名字时,该请求不会以 HTTP 形式发送,而是会请求到 index.ts 文件中的 main 方法。出入参则对应了 body 和自定义输出的字段名。 + +由于目前插件会默认插件输出均作为“工具调用”的结果,无法单独指定某些字段作为工具输出,所以,请避免插件的自定义输出携带大量说明字段。 + +# SearXNG 搜索插件配置与使用说明 +## FastGPT SearXNG 搜索插件配置指南 + +[SearXNG](https://github.com/searxng/searxng)是一款免费的互联网元搜索引擎,它汇总了来自各种搜索服务和数据库的结果。它不会跟踪或分析用户。用户可以自行部署它进行使用。本文介绍 Searxng 的部署以及接入 FastGPT 插件。 + + +## 1. 部署应用 + +这里介绍在 Sealos 中部署 SearXNG 的方法。Docker 部署,可以直接参考 [SearXNG 官方教程](https://github.com/searxng/searxng)。 + +点击打开 [Sealos 北京区](https://bja.sealos.run?uid=fnWRt09fZP),点击应用部署,并新建一个应用: + +| 打开应用部署 | 点击新建应用 | +| --- | --- | +|  |  | + +## 2. 部署配置 + +把下面参数,填入配置中: + +* 镜像名: searxng/searxng:latest +* CPU: 0.2 +* 内存: 512M +* 容器暴露端口: 8080 +* 开启公网访问 +* 点击高级配置,填写环境变量和配置文件 + + + +**环境变量** + +填下面两个内容,主要是为了减小并发,不然内存占用非常大。 + +``` +UWSGI_WORKERS=4 +UWSGI_THREADS=4 +``` + +**配置文件** + +新增一个配置文件,文件名:`/etc/searx/settings.yml` +文件内容: + +```txt +general: + debug: false + instance_name: "searxng" + privacypolicy_url: false + donation_url: false + contact_url: false + enable_metrics: true + open_metrics: '' + +brand: + new_issue_url: https://github.com/searxng/searxng/issues/new + docs_url: https://docs.searxng.org/ + public_instances: https://searx.space + wiki_url: https://github.com/searxng/searxng/wiki + issue_url: https://github.com/searxng/searxng/issues + +search: + safe_search: 0 + autocomplete: "" + autocomplete_min: 4 + default_lang: "auto" + ban_time_on_fail: 5 + max_ban_time_on_fail: 120 + formats: + - html + +server: + port: 8080 + bind_address: "0.0.0.0" + base_url: false + limiter: false + public_instance: false + secret_key: "example" + image_proxy: false + http_protocol_version: "1.0" + method: "POST" + default_http_headers: + X-Content-Type-Options: nosniff + X-Download-Options: noopen + X-Robots-Tag: noindex, nofollow + Referrer-Policy: no-referrer + +redis: + url: false + +ui: + static_path: "" + static_use_hash: false + templates_path: "" + default_theme: simple + default_locale: "" + query_in_title: false + infinite_scroll: false + center_alignment: false + theme_args: + simple_style: auto + +outgoing: + request_timeout: 30.0 + max_request_timeout: 40.0 + pool_connections: 200 + pool_maxsize: 50 + enable_http2: false + retries: 5 + +engines: + + - name: bing + engine: bing + shortcut: bi + +doi_resolvers: + oadoi.org: 'https://oadoi.org/' + doi.org: 'https://doi.org/' + doai.io: 'https://dissem.in/' + sci-hub.se: 'https://sci-hub.se/' + sci-hub.st: 'https://sci-hub.st/' + sci-hub.ru: 'https://sci-hub.ru/' + +default_doi_resolver: 'oadoi.org' +``` + +国内目前只有 Bing 引擎可以正常用,所以上面的配置只配置了 bing 引擎。如果在海外部署,可以使用[Sealos 新加坡可用区](https://cloud.sealos.io?uid=fnWRt09fZP),并配置其他搜索引擎,可以参考[SearXNG 默认配置文件](https://github.com/searxng/searxng/blob/master/searx/settings.yml), 从里面复制一些 engine 配置。例如: + +``` + - name: duckduckgo + engine: duckduckgo + shortcut: ddg + + - name: google + engine: google + shortcut: go +``` + +## 3. FastGPT 使用 + +复制 Sealos 部署后提供的公网地址,填入 FastGPT 的 SearXNG 插件的 URL 中。 + +| 复制公网地址| 填入 URL | +| --- | --- | +|  |  | + +## 返回格式 + +* 成功时返回搜索结果数组: + +```Bash +{ + "result": "[{\"title\":\"标题1\",\"link\":\"链接1\",\"snippet\":\"摘要1\"}, ...]" +} +``` + +* 搜索结果为空时会返回友好提示: + +```Bash +{ + "result": "[]", + "error": { + "message": "No search results", + "code": 500 + } +} +``` + +* 失败时通过 Promise.reject 可能返回错误信息: + +```Bash +- "缺少查询参数" +- "缺少url" +- "Failed to fetch data from Search XNG" +``` + +一般问题来源于参数缺失与服务部署,如有更多问题可在用户群提问。 + +## FAQ + +### 无搜索结果 + +1. 先直接打开外网地址,测试是否可以正常搜索。 +2. 检查是否有超时的搜索引擎,通过 API 调用时不会返回结果。 + +# 邀请链接说明文档 +## 如何使用邀请链接来邀请团队成员 + +v4.9.1 团队邀请成员将开始使用「邀请链接」的模式,弃用之前输入用户名进行添加的形式。 + +在版本升级后,原收到邀请还未加入团队的成员,将自动清除邀请。请使用邀请链接重新邀请成员。 + +## 如何使用 + +1. **在团队管理页面,管理员可点击「邀请成员」按钮打开邀请成员弹窗** + + + +2. **在邀请成员弹窗中,点击「创建邀请链接」按钮,创建邀请链接。** + + + +3. **输入对应内容** + + + +链接描述:建议将链接描述为使用场景或用途。链接创建后不支持修改噢。 + +有效期:30分钟,7天,1年 + +有效人数:1人,无限制 + +4. **点击复制链接,并将其发送给想要邀请的人。** + + + +5. **用户访问链接后,如果未登录/未注册,则先跳转到登录页面进行登录。在登录后将进入团队页面,处理邀请。** + +> 邀请链接形如:fastgpt.cn/account/team?invitelinkid=xxxx + + + +点击接受,则用户将加入团队 + +点击忽略,则关闭弹窗,用户下次访问该邀请链接则还可以选择加入。 + +## 链接失效和自动清理 + +### 链接失效原因 + +手动停用链接 + +邀请链接到达有效期,自动停用 + +有效人数为1人的链接,已有1人通过邀请链接加入团队。 + +停用的链接无法访问,也无法再次启用。 + +### 链接上限 + +一个用户最多可以同时存在 10 个**有效的**邀请链接。 + +### 链接自动清理 + +失效的链接将在 30 天后自动清理。 + +# 团队&成员组&权限 +## 如何管理 FastGPT 团队、成员组及权限设置 + +# 团队 & 成员组 & 权限 + +## 权限系统简介 + +FastGPT +权限系统融合了基于**属性**和基于**角色**的权限管理范式,为团队协作提供精细化的权限控制方案。通过**成员、部门和群组**三种管理模式,您可以灵活配置对团队、应用和知识库等资源的访问权限。 + +## 团队 + +每位用户可以同时归属于多个团队,系统默认为每位用户创建一个初始团队。目前暂不支持用户手动创建额外团队。 + +## 权限管理 + +FastGPT 提供三种权限管理维度: + +**成员权限**:最高优先级,直接赋予个人的权限 + +**部门与群组权限**:采用权限并集原则,优先级低于成员权限 + +权限判定遵循以下逻辑: + +首先检查用户的个人成员权限 + +其次检查用户所属部门和群组的权限(取并集) + +最终权限为上述结果的组合 + +鉴权逻辑如下: + + + +### 资源权限 + +对于不同的**资源**,有不同的权限。 + +这里说的资源,是指应用、知识库、团队等等概念。 + +下表为不同资源,可以进行管理的权限。 + + + +
+ +### 协作者 + +必须先添加**协作者**,才能对其进行权限管理: + + + +管理团队权限时,需先选择成员/组织/群组,再进行权限配置。 + + + +对于应用和知识库等资源,可直接修改成员权限。 + + + +团队权限在专门的权限页面进行设置 + + + +## 特殊权限说明 + +### 管理员权限 + +管理员主要负责管理资源的协作关系,但有以下限制: + +- 不能修改或移除自身权限 +- 不能修改或移除其他管理员权限 +-不能将管理员权限赋予其他协作者 + +### Owner 权限 + +每个资源都有唯一的 Owner,拥有该资源的最高权限。Owner +可以转移所有权,但转移后原 Owner 将失去对资源的权限。 + +### Root 权限 + +Root +作为系统唯一的超级管理员账号,对所有团队的所有资源拥有完全访问和管理权限。 + +## 使用技巧 + +### 1. 设置团队默认权限 + +利用\"全员群组\"可快速为整个团队设置基础权限。例如,为应用设置全员可访问权限。 + +**注意**:个人成员权限会覆盖全员组权限。例如,应用 A +设置了全员编辑权限,而用户 M 被单独设置为使用权限,则用户 M +只能使用而无法编辑该应用。 + +### 2. 批量权限管理 + +通过创建群组或组织,可以高效管理多用户的权限配置。先将用户添加到群组,再对群组整体授权。 + +### 开发者参考 +> 以下内容面向开发者,如不涉及二次开发可跳过。 + +#### 权限设计原理 + +FastGPT 权限系统参考 Linux 权限设计,采用二进制方式存储权限位。权限位为 +1 表示拥有该权限,为 0 表示无权限。Owner 权限特殊标记为全 1。 + +#### 权限表 + +权限信息存储在 MongoDB 的 resource_permissions 集合中,其主要字段包括: + +- teamId: 团队标识 +- tmbId/groupId/orgId: 权限主体(三选一) +- resourceType: 资源类型(team/app/dataset) +- permission: 权限值(数字) +- resourceId: 资源ID(团队资源为null) + +系统通过这一数据结构实现了灵活而精确的权限控制。 + +对于这个表的 Schema 定义在 packages/service/support/permission/schema.ts +文件中。定义如下: +```typescript +export const ResourcePermissionSchema = new Schema({ + teamId: { + type: Schema.Types.ObjectId, + ref: TeamCollectionName + }, + tmbId: { + type: Schema.Types.ObjectId, + ref: TeamMemberCollectionName + }, + groupId: { + type: Schema.Types.ObjectId, + ref: MemberGroupCollectionName + }, + orgId: { + type: Schema.Types.ObjectId, + ref: OrgCollectionName + }, + resourceType: { + type: String, + enum: Object.values(PerResourceTypeEnum), + required: true + }, + permission: { + type: Number, + required: true + }, + // Resrouce ID: App or DataSet or any other resource type. + // It is null if the resourceType is team. + resourceId: { + type: Schema.Types.ObjectId + } +}); +``` # 快速了解 FastGPT ## FastGPT 的能力与优势 @@ -14471,11 +14497,6 @@ Sealos 云服务属于按量计费,下面是它的价格表: - [海外版](https://cloud.tryfastgpt.ai/price) - [国内版](https://cloud.fastgpt.cn/price) -# 收费说明 -## FastGPT 收费说明 - - - # Dalle3 绘图 ## 使用 HTTP 模块绘制图片 @@ -20595,11 +20616,6 @@ Fastgpt 提供了工作流线路可以返回去执行的功能,所以我们可 {{% /details %}} -# 应用搭建案例 -## FastGPT 应用场景及功能实现的搭建案例 - - - # 接入钉钉机器人教程 ## FastGPT 接入钉钉机器人教程 @@ -21036,18 +21052,3 @@ WORK_PRO_TOKEN=你申请的企微 token (企业微信需要填写,私人 只需要发送信息,或者拉入群聊@登录的微信就会回复信息啦。  -# 外部调用 FastGPT -## 外部应用通过多种方式调用 FastGPT 功能的教程 - - - -# 使用案例 -## 有关 FastGPT 其他实践案例的更多信息 - - - -# 文档 -## FastGPT 官方文档 - - - diff --git a/llms.txt b/llms.txt index e82ca94c6..149d25ba3 100644 --- a/llms.txt +++ b/llms.txt @@ -5,7 +5,6 @@ FastGPT 文档 - [开源协议](https://doc.fastgpt.cn/docs/agreement/open-source/) FastGPT 开源许可证 - [隐私政策](https://doc.fastgpt.cn/docs/agreement/privacy/) FastGPT 隐私政策 - [服务协议](https://doc.fastgpt.cn/docs/agreement/terms/) FastGPT 服务协议 -- [协议](https://doc.fastgpt.cn/docs/agreement/_index/) 社区相关内容 ## . - [加入社区](https://doc.fastgpt.cn/docs/community/) 加入 FastGPT 开发者社区和我们一起成长 @@ -13,7 +12,7 @@ FastGPT 文档 ## development - [配置文件介绍](https://doc.fastgpt.cn/docs/development/configuration/) FastGPT 配置参数介绍 -## development\custom-models +## development/custom-models - [接入 bge-rerank 重排模型](https://doc.fastgpt.cn/docs/development/custom-models/bge-rerank/) 接入 bge-rerank 重排模型 - [接入 ChatGLM2-m3e 模型](https://doc.fastgpt.cn/docs/development/custom-models/chatglm2-m3e/) 将 FastGPT 接入私有化模型 ChatGLM2和m3e-large - [接入 ChatGLM2-6B](https://doc.fastgpt.cn/docs/development/custom-models/chatglm2/) 将 FastGPT 接入私有化模型 ChatGLM2-6B @@ -21,43 +20,37 @@ FastGPT 文档 - [接入 Marker PDF 文档解析](https://doc.fastgpt.cn/docs/development/custom-models/marker/) 使用 Marker 解析 PDF 文档,可实现图片提取和布局识别 - [使用 Ollama 接入本地模型 ](https://doc.fastgpt.cn/docs/development/custom-models/ollama/) 采用 Ollama 部署自己的模型 - [使用 Xinference 接入本地模型](https://doc.fastgpt.cn/docs/development/custom-models/xinference/) 一站式本地 LLM 私有化部署 -- [本地模型使用](https://doc.fastgpt.cn/docs/development/custom-models/_index/) FastGPT 对接本地模型 -## development\design +## development/design - [数据集](https://doc.fastgpt.cn/docs/development/design/dataset/) FastGPT 数据集中文件与数据的设计方案 -- [设计方案](https://doc.fastgpt.cn/docs/development/design/_index/) FastGPT 部分设计方案 - [Docker Compose 快速部署](https://doc.fastgpt.cn/docs/development/docker/) 使用 Docker Compose 快速部署 FastGPT - [私有部署常见问题](https://doc.fastgpt.cn/docs/development/faq/) FastGPT 私有部署常见问题 - [快速开始本地开发](https://doc.fastgpt.cn/docs/development/intro/) 对 FastGPT 进行开发调试 -## development\migration +## development/migration - [Docker 数据库迁移(无脑操作)](https://doc.fastgpt.cn/docs/development/migration/docker_db/) FastGPT Docker 数据库备份和迁移 - [Docker Mongo迁移(dump模式)](https://doc.fastgpt.cn/docs/development/migration/docker_mongo/) FastGPT Docker Mongo迁移 -- [迁移&备份](https://doc.fastgpt.cn/docs/development/migration/_index/) FastGPT 迁移&备份 -## development\modelConfig +## development/modelConfig - [通过 AI Proxy 接入模型](https://doc.fastgpt.cn/docs/development/modelConfig/ai-proxy/) 通过 AI Proxy 接入模型 - [FastGPT 模型配置说明](https://doc.fastgpt.cn/docs/development/modelConfig/intro/) FastGPT 模型配置说明 - [通过 OneAPI 接入模型](https://doc.fastgpt.cn/docs/development/modelConfig/one-api/) 通过 OneAPI 接入模型 - [通过 PPIO LLM API 接入模型](https://doc.fastgpt.cn/docs/development/modelConfig/ppio/) 通过 PPIO LLM API 接入模型 - [通过 SiliconCloud 体验开源模型](https://doc.fastgpt.cn/docs/development/modelConfig/siliconCloud/) 通过 SiliconCloud 体验开源模型 -- [模型配置方案](https://doc.fastgpt.cn/docs/development/modelConfig/_index/) 本模型配置方案 -## development\openapi +## development/openapi - [对话接口](https://doc.fastgpt.cn/docs/development/openapi/chat/) FastGPT OpenAPI 对话接口 - [知识库接口](https://doc.fastgpt.cn/docs/development/openapi/dataset/) FastGPT OpenAPI 知识库接口 - [OpenAPI 介绍](https://doc.fastgpt.cn/docs/development/openapi/intro/) FastGPT OpenAPI 介绍 - [分享链接身份鉴权](https://doc.fastgpt.cn/docs/development/openapi/share/) FastGPT 分享链接身份鉴权 -- [OpenAPI 接口文档](https://doc.fastgpt.cn/docs/development/openapi/_index/) FastGPT OpenAPI 文档 -## development\proxy +## development/proxy - [Cloudflare Worker 中转](https://doc.fastgpt.cn/docs/development/proxy/cloudflare/) 使用 Cloudflare Worker 实现中转 - [HTTP 代理中转](https://doc.fastgpt.cn/docs/development/proxy/http_proxy/) 使用 HTTP 代理实现中转 - [Nginx 中转](https://doc.fastgpt.cn/docs/development/proxy/nginx/) 使用 Sealos 部署 Nginx 实现中转 -- [代理方案](https://doc.fastgpt.cn/docs/development/proxy/_index/) FastGPT 私有化部署代理方案 - [Sealos 一键部署](https://doc.fastgpt.cn/docs/development/sealos/) 使用 Sealos 一键部署 FastGPT -## development\upgrading +## development/upgrading - [升级到 V4.0](https://doc.fastgpt.cn/docs/development/upgrading/40/) FastGPT 从旧版本升级到 V4.0 操作指南 - [升级到 V4.1](https://doc.fastgpt.cn/docs/development/upgrading/41/) FastGPT 从旧版本升级到 V4.1 操作指南 - [升级到 V4.2](https://doc.fastgpt.cn/docs/development/upgrading/42/) FastGPT 从旧版本升级到 V4.2 操作指南 @@ -114,9 +107,8 @@ FastGPT 文档 - [V4.9.3](https://doc.fastgpt.cn/docs/development/upgrading/493/) FastGPT V4.9.3 更新说明 - [V4.9.4](https://doc.fastgpt.cn/docs/development/upgrading/494/) FastGPT V4.9.4 更新说明 - [V4.9.5](https://doc.fastgpt.cn/docs/development/upgrading/495/) FastGPT V4.9.5 更新说明 +- [V4.9.6(进行中)](https://doc.fastgpt.cn/docs/development/upgrading/496/) FastGPT V4.9.6 更新说明 - [升级说明](https://doc.fastgpt.cn/docs/development/upgrading/intro/) FastGPT 升级说明 -- [版本更新/升级操作](https://doc.fastgpt.cn/docs/development/upgrading/_index/) FastGPT 版本更新介绍及升级操作 -- [开发与部署指南](https://doc.fastgpt.cn/docs/development/_index/) 本地开发 FastGPT 必看 ## faq - [应用使用问题](https://doc.fastgpt.cn/docs/faq/app/) FastGPT 常见应用使用问题,包括简易应用、工作流和插件 @@ -128,85 +120,75 @@ FastGPT 文档 - [其他问题](https://doc.fastgpt.cn/docs/faq/other/) - [积分消耗](https://doc.fastgpt.cn/docs/faq/points_consumption/) 了解 FastGPT 中的积分消耗机制和使用场景 - [私有部署常见问题](https://doc.fastgpt.cn/docs/faq/privateDeploy/) FastGPT 私有部署常见问题 -- [FAQ](https://doc.fastgpt.cn/docs/faq/_index/) 常见问题的解答 -## guide\admin +## guide/DialogBoxes +- [对话框与HTML渲染](https://doc.fastgpt.cn/docs/guide/DialogBoxes/htmlRendering/) 如何在FastGPT中通过Markdown嵌入HTML代码块,并提供全屏、源代码切换等交互功能 +- [知识库引用分块阅读器](https://doc.fastgpt.cn/docs/guide/DialogBoxes/quoteList/) FastGPT 分块阅读器功能介绍 + +## guide/admin - [SSO & 外部成员同步](https://doc.fastgpt.cn/docs/guide/admin/sso/) FastGPT 外部成员系统接入设计与配置 - [团队模式说明文档](https://doc.fastgpt.cn/docs/guide/admin/teamMode/) FastGPT 团队模式说明文档 -- [商业版后台](https://doc.fastgpt.cn/docs/guide/admin/_index/) 商业版后台使用教程 -## guide\course +## guide/course - [AI 相关参数配置说明](https://doc.fastgpt.cn/docs/guide/course/ai_settings/) FastGPT AI 相关参数配置说明 - [对话问题引导](https://doc.fastgpt.cn/docs/guide/course/chat_input_guide/) FastGPT 对话问题引导 - [知识库集合标签](https://doc.fastgpt.cn/docs/guide/course/collection_tags/) FastGPT 知识库集合标签使用说明 - [文件输入功能介绍](https://doc.fastgpt.cn/docs/guide/course/fileInput/) FastGPT 文件输入功能介绍 - [快速上手](https://doc.fastgpt.cn/docs/guide/course/quick-start/) 快速体验 FastGPT 基础功能 -- [基础教程](https://doc.fastgpt.cn/docs/guide/course/_index/) FastGPT 基础教程 -## guide\DialogBoxes -- [对话框与HTML渲染](https://doc.fastgpt.cn/docs/guide/DialogBoxes/htmlRendering/) 如何在FastGPT中通过Markdown嵌入HTML代码块,并提供全屏、源代码切换等交互功能 -- [知识库引用分块阅读器](https://doc.fastgpt.cn/docs/guide/DialogBoxes/quoteList/) FastGPT 分块阅读器功能介绍 -- [对话框](https://doc.fastgpt.cn/docs/guide/DialogBoxes/_index/) 对话框组件,支持多种交互方式,提升用户在应用中的交互体验。 +## guide/dashboard +- [简易模式](https://doc.fastgpt.cn/docs/guide/dashboard/basic-mode/) 快速了解 FastGPT 工作台的简易模式 +- [使用 Gapier 快速导入Agent工具](https://doc.fastgpt.cn/docs/guide/dashboard/gapier/) FastGPT 使用 Gapier 快速导入Agent工具 +- [工作流&插件](https://doc.fastgpt.cn/docs/guide/dashboard/intro/) 快速了解 FastGPT 工作流和插件的使用 +- [MCP 服务](https://doc.fastgpt.cn/docs/guide/dashboard/mcp_server/) 快速了解 FastGPT MCP server -## guide\knowledge_base +## guide/dashboard/workflow +- [AI 对话](https://doc.fastgpt.cn/docs/guide/dashboard/workflow/ai_chat/) FastGPT AI 对话模块介绍 +- [文本内容提取](https://doc.fastgpt.cn/docs/guide/dashboard/workflow/content_extract/) FastGPT 内容提取模块介绍 +- [问题优化](https://doc.fastgpt.cn/docs/guide/dashboard/workflow/coreferenceResolution/) 问题优化模块介绍和使用 +- [自定义反馈](https://doc.fastgpt.cn/docs/guide/dashboard/workflow/custom_feedback/) 自定义反馈模块介绍 +- [知识库搜索](https://doc.fastgpt.cn/docs/guide/dashboard/workflow/dataset_search/) FastGPT AI 知识库搜索模块介绍 +- [文档解析](https://doc.fastgpt.cn/docs/guide/dashboard/workflow/document_parsing/) FastGPT 文档解析模块介绍 +- [表单输入](https://doc.fastgpt.cn/docs/guide/dashboard/workflow/form_input/) FastGPT 表单输入模块介绍 +- [HTTP 请求](https://doc.fastgpt.cn/docs/guide/dashboard/workflow/http/) FastGPT HTTP 模块介绍 +- [知识库搜索引用合并](https://doc.fastgpt.cn/docs/guide/dashboard/workflow/knowledge_base_search_merge/) FastGPT 知识库搜索引用合并模块介绍 +- [Laf 函数调用](https://doc.fastgpt.cn/docs/guide/dashboard/workflow/laf/) FastGPT Laf 函数调用模块介绍 +- [批量运行](https://doc.fastgpt.cn/docs/guide/dashboard/workflow/loop/) FastGPT 批量运行节点介绍和使用 +- [问题分类](https://doc.fastgpt.cn/docs/guide/dashboard/workflow/question_classify/) FastGPT 问题分类模块介绍 +- [指定回复](https://doc.fastgpt.cn/docs/guide/dashboard/workflow/reply/) FastGPT 指定回复模块介绍 +- [代码运行](https://doc.fastgpt.cn/docs/guide/dashboard/workflow/sandbox/) FastGPT 代码运行节点介绍 +- [文本拼接](https://doc.fastgpt.cn/docs/guide/dashboard/workflow/text_editor/) FastGPT 文本加工模块介绍 +- [判断器](https://doc.fastgpt.cn/docs/guide/dashboard/workflow/tfswitch/) FastGPT 判断器模块介绍 +- [工具调用&终止](https://doc.fastgpt.cn/docs/guide/dashboard/workflow/tool/) FastGPT 工具调用模块介绍 +- [用户选择](https://doc.fastgpt.cn/docs/guide/dashboard/workflow/user-selection/) FastGPT 用户选择模块的使用说明 +- [变量更新](https://doc.fastgpt.cn/docs/guide/dashboard/workflow/variable_update/) FastGPT 变量更新模块介绍 + +## guide/knowledge_base +- [知识库基础原理介绍](https://doc.fastgpt.cn/docs/guide/knowledge_base/RAG/) 本节详细介绍RAG模型的核心机制、应用场景及其在生成任务中的优势与局限性。 - [API 文件库](https://doc.fastgpt.cn/docs/guide/knowledge_base/api_dataset/) FastGPT API 文件库功能介绍和使用方式 - [知识库搜索方案和参数](https://doc.fastgpt.cn/docs/guide/knowledge_base/dataset_engine/) 本节会详细介绍 FastGPT 知识库结构设计,理解其 QA 的存储格式和多向量映射,以便更好的构建知识库。同时会介绍每个搜索参数的功能。这篇介绍主要以使用为主,详细原理不多介绍。 - [外部文件知识库](https://doc.fastgpt.cn/docs/guide/knowledge_base/externalFile/) FastGPT 外部文件知识库功能介绍和使用方式 - [飞书知识库](https://doc.fastgpt.cn/docs/guide/knowledge_base/lark_dataset/) FastGPT 飞书知识库功能介绍和使用方式 -- [知识库基础原理介绍](https://doc.fastgpt.cn/docs/guide/knowledge_base/RAG/) 本节详细介绍RAG模型的核心机制、应用场景及其在生成任务中的优势与局限性。 - [Web 站点同步](https://doc.fastgpt.cn/docs/guide/knowledge_base/websync/) FastGPT Web 站点同步功能介绍和使用方式 - [语雀文件库](https://doc.fastgpt.cn/docs/guide/knowledge_base/yuque_dataset/) FastGPT 语雀文件库功能介绍和使用方式 -- [知识库](https://doc.fastgpt.cn/docs/guide/knowledge_base/_index/) 知识库的基础原理、搜索方案、Web站点同步和外部文件知识库的使用方法。 -## guide\plugins +## guide/plugins - [Bing 搜索插件填写说明](https://doc.fastgpt.cn/docs/guide/plugins/bing_search_plugin/) FastGPT Bing 搜索插件配置步骤详解 - [Doc2x 插件填写说明](https://doc.fastgpt.cn/docs/guide/plugins/doc2x_plugin_guide/) 如何配置和使用 Doc2x 插件 - [Google 搜索插件填写说明](https://doc.fastgpt.cn/docs/guide/plugins/google_search_plugin_guide/) FastGPT Google 搜索插件配置指南 - [如何提交系统插件](https://doc.fastgpt.cn/docs/guide/plugins/how_to_submit_system_plugin/) FastGPT 系统插件提交指南 - [SearXNG 搜索插件配置与使用说明](https://doc.fastgpt.cn/docs/guide/plugins/searxng_plugin_guide/) FastGPT SearXNG 搜索插件配置指南 -- [系统插件](https://doc.fastgpt.cn/docs/guide/plugins/_index/) 介绍如何使用和提交系统插件,以及各插件的填写说明 -## guide\team_permissions +## guide/team_permissions - [邀请链接说明文档](https://doc.fastgpt.cn/docs/guide/team_permissions/invitation_link/) 如何使用邀请链接来邀请团队成员 - [团队&成员组&权限](https://doc.fastgpt.cn/docs/guide/team_permissions/team_roles_permissions/) 如何管理 FastGPT 团队、成员组及权限设置 -- [团队与权限](https://doc.fastgpt.cn/docs/guide/team_permissions/_index/) 团队管理、成员组与权限设置,确保团队协作中的数据安全和权限分配合理。 - -## guide\workbench -- [简易模式](https://doc.fastgpt.cn/docs/guide/workbench/basic-mode/) 快速了解 FastGPT 工作台的简易模式 -- [使用 Gapier 快速导入Agent工具](https://doc.fastgpt.cn/docs/guide/workbench/gapier/) FastGPT 使用 Gapier 快速导入Agent工具 -- [工作流&插件](https://doc.fastgpt.cn/docs/guide/workbench/intro/) 快速了解 FastGPT 工作流和插件的使用 - -## guide\workbench\workflow -- [AI 对话](https://doc.fastgpt.cn/docs/guide/workbench/workflow/ai_chat/) FastGPT AI 对话模块介绍 -- [文本内容提取](https://doc.fastgpt.cn/docs/guide/workbench/workflow/content_extract/) FastGPT 内容提取模块介绍 -- [问题优化](https://doc.fastgpt.cn/docs/guide/workbench/workflow/coreferenceResolution/) 问题优化模块介绍和使用 -- [自定义反馈](https://doc.fastgpt.cn/docs/guide/workbench/workflow/custom_feedback/) 自定义反馈模块介绍 -- [知识库搜索](https://doc.fastgpt.cn/docs/guide/workbench/workflow/dataset_search/) FastGPT AI 知识库搜索模块介绍 -- [文档解析](https://doc.fastgpt.cn/docs/guide/workbench/workflow/document_parsing/) FastGPT 文档解析模块介绍 -- [表单输入](https://doc.fastgpt.cn/docs/guide/workbench/workflow/form_input/) FastGPT 表单输入模块介绍 -- [HTTP 请求](https://doc.fastgpt.cn/docs/guide/workbench/workflow/http/) FastGPT HTTP 模块介绍 -- [知识库搜索引用合并](https://doc.fastgpt.cn/docs/guide/workbench/workflow/knowledge_base_search_merge/) FastGPT 知识库搜索引用合并模块介绍 -- [Laf 函数调用](https://doc.fastgpt.cn/docs/guide/workbench/workflow/laf/) FastGPT Laf 函数调用模块介绍 -- [批量运行](https://doc.fastgpt.cn/docs/guide/workbench/workflow/loop/) FastGPT 批量运行节点介绍和使用 -- [问题分类](https://doc.fastgpt.cn/docs/guide/workbench/workflow/question_classify/) FastGPT 问题分类模块介绍 -- [指定回复](https://doc.fastgpt.cn/docs/guide/workbench/workflow/reply/) FastGPT 指定回复模块介绍 -- [代码运行](https://doc.fastgpt.cn/docs/guide/workbench/workflow/sandbox/) FastGPT 代码运行节点介绍 -- [文本拼接](https://doc.fastgpt.cn/docs/guide/workbench/workflow/text_editor/) FastGPT 文本加工模块介绍 -- [判断器](https://doc.fastgpt.cn/docs/guide/workbench/workflow/tfswitch/) FastGPT 判断器模块介绍 -- [工具调用&终止](https://doc.fastgpt.cn/docs/guide/workbench/workflow/tool/) FastGPT 工具调用模块介绍 -- [用户选择](https://doc.fastgpt.cn/docs/guide/workbench/workflow/user-selection/) FastGPT 用户选择模块的使用说明 -- [变量更新](https://doc.fastgpt.cn/docs/guide/workbench/workflow/variable_update/) FastGPT 变量更新模块介绍 -- [工作流节点](https://doc.fastgpt.cn/docs/guide/workbench/workflow/_index/) FastGPT 工作流节点设置和使用指南 -- [工作台](https://doc.fastgpt.cn/docs/guide/workbench/_index/) FastGPT 工作台及工作流节点的使用说明 -- [功能介绍](https://doc.fastgpt.cn/docs/guide/_index/) FastGPT 的功能和使用指南 - [快速了解 FastGPT](https://doc.fastgpt.cn/docs/intro/) FastGPT 的能力与优势 ## shopping_cart - [商业版](https://doc.fastgpt.cn/docs/shopping_cart/intro/) FastGPT 商业版相关说明 - [线上版定价](https://doc.fastgpt.cn/docs/shopping_cart/saas/) FastGPT 线上版定价 -- [收费说明](https://doc.fastgpt.cn/docs/shopping_cart/_index/) FastGPT 收费说明 -## use-cases\app-cases +## use-cases/app-cases - [Dalle3 绘图](https://doc.fastgpt.cn/docs/use-cases/app-cases/dalle3/) 使用 HTTP 模块绘制图片 - [英语作文纠错机器人](https://doc.fastgpt.cn/docs/use-cases/app-cases/english_essay_correction_bot/) 使用 FastGPT 创建一个用于英语作文纠错的机器人,帮助用户检测并纠正语言错误 - [发送飞书webhook通知](https://doc.fastgpt.cn/docs/use-cases/app-cases/feishu_webhook/) 利用工具调用模块,发送一个飞书webhook通知 @@ -216,9 +198,8 @@ FastGPT 文档 - [多轮翻译机器人](https://doc.fastgpt.cn/docs/use-cases/app-cases/multi_turn_translation_bot/) 如何使用 FastGPT 构建一个多轮翻译机器人,实现连续的对话翻译功能 - [如何提交应用模板](https://doc.fastgpt.cn/docs/use-cases/app-cases/submit_application_template/) 指南:如何向 FastGPT 提交应用模板 - [长字幕翻译](https://doc.fastgpt.cn/docs/use-cases/app-cases/translate-subtitle-using-gpt/) 利用 AI 自我反思提升翻译质量,同时循环迭代执行 AI 工作流来突破 LLM tokens 限制,实现一个高效的长字幕翻译机器人。 -- [应用搭建案例](https://doc.fastgpt.cn/docs/use-cases/app-cases/_index/) FastGPT 应用场景及功能实现的搭建案例 -## use-cases\external-integration +## use-cases/external-integration - [接入钉钉机器人教程](https://doc.fastgpt.cn/docs/use-cases/external-integration/dingtalk/) FastGPT 接入钉钉机器人教程 - [接入飞书机器人教程](https://doc.fastgpt.cn/docs/use-cases/external-integration/feishu/) FastGPT 接入飞书机器人教程 - [iframe 接入](https://doc.fastgpt.cn/docs/use-cases/external-integration/iframe_integration/) 通过 iframe 嵌入 FastGPT 内容到其他网页或应用 @@ -226,6 +207,3 @@ FastGPT 文档 - [对接 chatgpt-on-wechat](https://doc.fastgpt.cn/docs/use-cases/external-integration/onwechat/) FastGPT 对接 chatgpt-on-wechat - [通过 API 访问应用](https://doc.fastgpt.cn/docs/use-cases/external-integration/openapi/) 通过 API 访问 FastGPT 应用 - [接入微信和企业微信 ](https://doc.fastgpt.cn/docs/use-cases/external-integration/wechat/) FastGPT 接入微信和企业微信 -- [外部调用 FastGPT](https://doc.fastgpt.cn/docs/use-cases/external-integration/_index/) 外部应用通过多种方式调用 FastGPT 功能的教程 -- [使用案例](https://doc.fastgpt.cn/docs/use-cases/_index/) 有关 FastGPT 其他实践案例的更多信息 -- [文档](https://doc.fastgpt.cn/docs/_index/) FastGPT 官方文档+ + + +资源 +可管理权限 +说明 ++ +团队 +创建应用 +创建,删除等基础操作 ++ +创建知识库 +创建,删除等基础操作 ++ +创建团队 APIKey +创建,删除等基础操作 ++ +管理成员 +邀请、移除用户,创建群组等 ++ +应用 +可使用 +允许进行对话交互 ++ +可编辑 +修改基本信息,进行流程编排等 ++ +可管理 +添加或删除协作者 ++ +知识库 +可使用 +可以在应用中调用该知识库 ++ +可编辑 +修改知识库的内容 ++ + +可管理 +添加或删除协作者 +










