部署架构图 link
🤖
MongoDB:用于存储除了向量外的各类数据
PostgreSQL/Milvus:存储向量数据
OneAPI: 聚合各类 AI API,支持多模型调用 (任何模型问题,先自行通过 OneAPI 测试校验)
推荐配置 link
PgVector版本 link
体验测试首选
环境 | 最低配置(单节点) | 推荐配置 |
---|---|---|
测试 | 2c2g | 2c4g |
100w 组向量 | 4c8g 50GB | 4c16g 50GB |
500w 组向量 | 8c32g 200GB | 16c64g 200GB |
Milvus版本 link
生产部署首选,对于千万级以上向量性能更优秀。
环境 | 最低配置(单节点) | 推荐配置 |
---|---|---|
测试 | 2c8g | 4c16g |
100w 组向量 | 未测试 | |
500w 组向量 |
zilliz cloud版本 link
Milvus 的全托管服务,性能优于 Milvus 并提供 SLA,点击使用 Zilliz Cloud。
由于向量库使用了 Cloud,无需占用本地资源,无需太关注。
前置工作 link
1. 确保网络环境 link
如果使用OpenAI
等国外模型接口,请确保可以正常访问,否则会报错:Connection error
等。 方案可以参考:代理方案
2. 准备 Docker 环境 link
+Table of Contents
Docker Compose 快速部署
使用 Docker Compose 快速部署 FastGPT
部署架构图 link
🤖
MongoDB:用于存储除了向量外的各类数据
PostgreSQL/Milvus:存储向量数据
OneAPI: 聚合各类 AI API,支持多模型调用 (任何模型问题,先自行通过 OneAPI 测试校验)
推荐配置 link
PgVector版本 link
体验测试首选
环境 | 最低配置(单节点) | 推荐配置 |
---|---|---|
测试 | 2c2g | 2c4g |
100w 组向量 | 4c8g 50GB | 4c16g 50GB |
500w 组向量 | 8c32g 200GB | 16c64g 200GB |
Milvus版本 link
生产部署首选,对于千万级以上向量性能更优秀。
环境 | 最低配置(单节点) | 推荐配置 |
---|---|---|
测试 | 2c8g | 4c16g |
100w 组向量 | 未测试 | |
500w 组向量 |
zilliz cloud版本 link
Milvus 的全托管服务,性能优于 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
@@ -44,9 +44,9 @@
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
@@ -57,13 +57,13 @@
# curl -o docker-compose.yml https://raw.githubusercontent.com/labring/FastGPT/main/files/docker/docker-compose-milvus.yml
# zilliz 版本
# curl -o docker-compose.yml https://raw.githubusercontent.com/labring/FastGPT/main/files/docker/docker-compose-zilliz.yml
-
2. 修改环境变量 link
找到 yml 文件中,fastgpt 容器的环境变量进行下面操作:
+
2. 修改环境变量 link
找到 yml 文件中,fastgpt 容器的环境变量进行下面操作:
FE_DOMAIN=你的前端你访问地址,例如 http://192.168.0.1:3000;https://cloud.fastgpt.cn
-
+
FE_DOMAIN=你的前端你访问地址,例如 http://192.168.0.1:3000;https://cloud.fastgpt.cn
-
打开 Zilliz Cloud, 创建实例并获取相关秘钥。
🤖
- 修改
MILVUS_ADDRESS
和MILVUS_TOKEN
链接参数,分别对应zilliz
的Public Endpoint
和Api key
,记得把自己ip加入白名单。 - 修改FE_DOMAIN=你的前端你访问地址,例如 http://192.168.0.1:3000;https://cloud.fastgpt.cn
3. 启动容器 link
在 docker-compose.yml 同级目录下执行。请确保docker-compose
版本最好在2.17以上,否则可能无法执行自动化命令。
+
打开 Zilliz Cloud, 创建实例并获取相关秘钥。
🤖
- 修改
MILVUS_ADDRESS
和MILVUS_TOKEN
链接参数,分别对应zilliz
的Public Endpoint
和Api key
,记得把自己ip加入白名单。 - 修改FE_DOMAIN=你的前端你访问地址,例如 http://192.168.0.1:3000;https://cloud.fastgpt.cn
3. 启动容器 link
在 docker-compose.yml 同级目录下执行。请确保docker-compose
版本最好在2.17以上,否则可能无法执行自动化命令。
# 启动容器
docker-compose up -d
# 等待10s,OneAPI第一次总是要重启几次才能连上Mysql
diff --git a/docs/development/openapi/chat/index.html b/docs/development/openapi/chat/index.html
index ece774e65ec..c7920b0b300 100644
--- a/docs/development/openapi/chat/index.html
+++ b/docs/development/openapi/chat/index.html
@@ -31,9 +31,9 @@
menu
对话接口
FastGPT OpenAPI 对话接口
发起对话 link
🤖
该接口的 API Key 需使用
应用特定的 key
,否则会报错。有些包调用时,
BaseUrl
需要添加v1
路径,有些不需要,如果出现404情况,可补充v1
重试。
请求简易应用和工作流 link
对话接口兼容GPT
的接口!如果你的项目使用的是标准的GPT
官方接口,可以直接通过修改BaseUrl
和 Authorization
来访问 FastGpt 应用,不过需要注意下面几个规则:
🤖
传入的
model
,temperature
等参数字段均无效,这些字段由编排决定,不会根据 API 参数改变。不会返回实际消耗
Token
值,如果需要,可以设置detail=true
,并手动计算responseData
里的tokens
值。
请求 link
+Table of Contents
对话接口
FastGPT OpenAPI 对话接口
发起对话 link
🤖
该接口的 API Key 需使用
应用特定的 key
,否则会报错。有些包调用时,
BaseUrl
需要添加v1
路径,有些不需要,如果出现404情况,可补充v1
重试。
请求简易应用和工作流 link
对话接口兼容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' \
@@ -53,7 +53,7 @@
}
]
}'
-
- 仅
messages
有部分区别,其他参数一致。 - 目前不支持上次文件,需上传到自己的对象存储中,获取对应的文件链接。
+
- 仅
messages
有部分区别,其他参数一致。 - 目前不支持上次文件,需上传到自己的对象存储中,获取对应的文件链接。
curl --location --request POST 'http://localhost:3000/api/v1/chat/completions' \
--header 'Authorization: Bearer fastgpt-xxxxxx' \
--header 'Content-Type: application/json' \
@@ -83,11 +83,11 @@
}
]
}'
-
- headers.Authorization: Bearer {{apikey}}
- chatId: string | undefined 。
- 为
undefined
时(不传入),不使用 FastGpt 提供的上下文功能,完全通过传入的 messages 构建上下文。 不会将你的记录存储到数据库中,你也无法在记录汇总中查阅到。 - 为
非空字符串
时,意味着使用 chatId 进行对话,自动从 FastGpt 数据库取历史记录,并使用 messages 数组最后一个内容作为用户问题。请自行确保 chatId 唯一,长度小于250,通常可以是自己系统的对话框ID。
- 为
- messages: 结构与 GPT接口 chat模式一致。
- responseChatItemId: string | undefined 。如果传入,则会将该值作为本次对话的响应消息的 ID,FastGPT 会自动将该 ID 存入数据库。请确保,在当前
chatId
下,responseChatItemId
是唯一的。 - detail: 是否返回中间值(模块状态,响应的完整结果等),
stream模式
下会通过event
进行区分,非stream模式
结果保存在responseData
中。 - variables: 模块变量,一个对象,会替换模块中,输入框内容里的
{{key}}
响应 link
+
- headers.Authorization: Bearer {{apikey}}
- chatId: string | undefined 。
- 为
undefined
时(不传入),不使用 FastGpt 提供的上下文功能,完全通过传入的 messages 构建上下文。 不会将你的记录存储到数据库中,你也无法在记录汇总中查阅到。 - 为
非空字符串
时,意味着使用 chatId 进行对话,自动从 FastGpt 数据库取历史记录,并使用 messages 数组最后一个内容作为用户问题。请自行确保 chatId 唯一,长度小于250,通常可以是自己系统的对话框ID。
- 为
- messages: 结构与 GPT接口 chat模式一致。
- responseChatItemId: string | undefined 。如果传入,则会将该值作为本次对话的响应消息的 ID,FastGPT 会自动将该 ID 存入数据库。请确保,在当前
chatId
下,responseChatItemId
是唯一的。 - detail: 是否返回中间值(模块状态,响应的完整结果等),
stream模式
下会通过event
进行区分,非stream模式
结果保存在responseData
中。 - variables: 模块变量,一个对象,会替换模块中,输入框内容里的
{{key}}
响应 link
{
"id": "adsfasf",
"model": "",
@@ -107,7 +107,7 @@
}
]
}
-
+
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}]}
@@ -115,7 +115,7 @@
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 自行查看最新值。
{
@@ -199,7 +199,7 @@
}
]
}
-
+
event: flowNodeStatus
data: {"status":"running","name":"知识库搜索"}
@@ -229,8 +229,8 @@
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",
@@ -249,7 +249,7 @@
}
}
}
-
+
{
"interactive": {
"type": "userInput",
@@ -292,8 +292,8 @@
}
}
}
-
交互节点继续运行 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' \
@@ -308,7 +308,7 @@
}
]
}'
-
表单输入稍微麻烦一点,需要将输入的内容,以对象形式并序列化成字符串,作为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' \
@@ -334,9 +334,9 @@
"query":"你好" # 我的插件输入有一个参数,变量名叫 query
}
}'
-
响应示例 link
- 插件的输出可以通过查找
responseData
中,moduleType=pluginOutput
的元素,其pluginOutput
是插件的输出。 - 流输出,仍可以通过
choices
进行获取。
+
响应示例 link
- 插件的输出可以通过查找
responseData
中,moduleType=pluginOutput
的元素,其pluginOutput
是插件的输出。 - 流输出,仍可以通过
choices
进行获取。
{
"responseData": [
{
@@ -393,7 +393,7 @@
}
]
}
-
- 插件的输出可以通过获取
event=flowResponses
中的字符串,并将其反序列化后得到一个数组。同样的,查找moduleType=pluginOutput
的元素,其pluginOutput
是插件的输出。 - 流输出,仍和对话接口一样获取。
+
- 插件的输出可以通过获取
event=flowResponses
中的字符串,并将其反序列化后得到一个数组。同样的,查找moduleType=pluginOutput
的元素,其pluginOutput
是插件的输出。 - 流输出,仍和对话接口一样获取。
event: flowNodeStatus
data: {"status":"running","name":"AI 对话"}
@@ -450,9 +450,9 @@
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' \
@@ -462,7 +462,7 @@
"pageSize": 20,
"source: "api"
}'
-
- appId - 应用 Id
- offset - 偏移量,即从第几条数据开始取
- pageSize - 记录数量
- source - 对话源
+
- appId - 应用 Id
- offset - 偏移量,即从第几条数据开始取
- pageSize - 记录数量
- source - 对话源
{
"code": 200,
"statusText": "",
@@ -489,9 +489,9 @@
"total": 2
}
}
-
修改某个对话的标题 link
+
修改某个对话的标题 link
curl --location --request POST 'http://localhost:3000/api/core/chat/updateHistory' \
--header 'Authorization: Bearer {{apikey}}' \
--header 'Content-Type: application/json' \
@@ -500,16 +500,16 @@
"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' \
@@ -518,43 +518,43 @@
"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
+
清空所有历史记录 link
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": "",
@@ -608,9 +608,9 @@
}
}
}
-
获取对话记录列表 link
+
获取对话记录列表 link
curl --location --request POST 'http://localhost:3000/api/core/chat/getPaginationRecords' \
--header 'Authorization: Bearer {{apikey}}' \
--header 'Content-Type: application/json' \
@@ -621,7 +621,7 @@
"pageSize": 10,
"loadCustomFeedbacks": true
}'
-
- appId - 应用 Id
- chatId - 历史记录 Id
- offset - 偏移量
- pageSize - 记录数量
- loadCustomFeedbacks - 是否读取自定义反馈(可选)
+
- appId - 应用 Id
- chatId - 历史记录 Id
- offset - 偏移量
- pageSize - 记录数量
- loadCustomFeedbacks - 是否读取自定义反馈(可选)
{
"code": 200,
"statusText": "",
@@ -670,12 +670,12 @@
"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": "",
@@ -721,21 +721,21 @@
}
]
}
-
删除对话记录 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' \
@@ -745,16 +745,16 @@
"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' \
@@ -764,16 +764,16 @@
"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
+
猜你想问 link
curl --location --request POST 'http://localhost:3000/api/core/ai/agent/createQuestionGuide' \
--header 'Authorization: Bearer {{apikey}}' \
--header 'Content-Type: application/json' \
@@ -789,7 +789,7 @@
}
]
}'
-
- messages - 对话消息,提供给 AI 的消息记录
+
- messages - 对话消息,提供给 AI 的消息记录
知识库接口
FastGPT OpenAPI 知识库接口
如何获取知识库ID(datasetId) | 如何获取文件集合ID(collection_id) |
---|---|
创建训练订单 link
新例子
+Table of Contents
知识库接口
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' \
@@ -40,16 +40,16 @@
"datasetId": "知识库 ID",
"name": "可选,自定义订单名称,例如:文档训练-fastgpt.docx"
}'
-
data 为 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' \
@@ -62,23 +62,23 @@
"vectorModel": "text-embedding-ada-002",
"agentModel": "gpt-3.5-turbo-16k"
}'
-
- 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": "",
@@ -105,12 +105,12 @@
}
]
}
-
获取知识库详情 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": "",
@@ -146,21 +146,21 @@
"isOwner": true
}
}
-
删除一个知识库 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: QA拆分;auto: 增强训练 | ✅ |
chunkSize | 预估块大小 | |
chunkSplitter | 自定义最高优先分割符号 | |
qaPrompt | qa拆分提示词 | |
tags | 集合标签(字符串数组) | |
createTime | 文件创建时间(Date / String) |
出参
- collectionId - 新建的集合ID
- insertLen:插入的块数量
创建一个空的集合 link
+
集合 link
通用创建参数说明 link
入参
参数 | 说明 | 必填 |
---|---|---|
datasetId | 知识库ID | ✅ |
parentId: | 父级ID,不填则默认为根目录 | |
trainingType | 训练模式。chunk: 按文本长度进行分割;qa: QA拆分;auto: 增强训练 | ✅ |
chunkSize | 预估块大小 | |
chunkSplitter | 自定义最高优先分割符号 | |
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' \
@@ -173,16 +173,16 @@
"test":111
}
}'
-
- 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' \
@@ -199,7 +199,7 @@
"metadata":{}
}'
-
- text: 原文本
- datasetId: 知识库的ID(必填)
- parentId: 父级ID,不填则默认为根目录
- name: 集合名称(必填)
- metadata: 元数据(暂时没啥用)
- trainingType:(必填)
- chunk: 按文本长度进行分割
- qa: QA拆分
- chunkSize: 每个 chunk 的长度(可选). chunk模式:100~3000; qa模式: 4000~模型最大token(16k模型通常建议不超过10000)
- chunkSplitter: 自定义最高优先分割符号(可选)
- qaPrompt: qa拆分自定义提示词(可选)
data 为集合的 ID。
+
- text: 原文本
- datasetId: 知识库的ID(必填)
- parentId: 父级ID,不填则默认为根目录
- name: 集合名称(必填)
- metadata: 元数据(暂时没啥用)
- trainingType:(必填)
- chunk: 按文本长度进行分割
- qa: QA拆分
- chunkSize: 每个 chunk 的长度(可选). chunk模式:100~3000; qa模式: 4000~模型最大token(16k模型通常建议不超过10000)
- chunkSplitter: 自定义最高优先分割符号(可选)
- qaPrompt: qa拆分自定义提示词(可选)
data 为集合的 ID。
{
"code": 200,
"statusText": "",
@@ -214,9 +214,9 @@
}
}
}
-
创建一个链接集合 link
传入一个网络链接,创建一个集合,会先去对应网页抓取内容,再抓取的文字进行分割。
+
创建一个链接集合 link
传入一个网络链接,创建一个集合,会先去对应网页抓取内容,再抓取的文字进行分割。
curl --location --request POST 'http://localhost:3000/api/core/dataset/collection/create/link' \
--header 'Authorization: Bearer {{authorization}}' \
--header 'Content-Type: application/json' \
@@ -234,7 +234,7 @@
"webPageSelector":".docs-content"
}
}'
-
- link: 网络链接
- datasetId: 知识库的ID(必填)
- parentId: 父级ID,不填则默认为根目录
- metadata.webPageSelector: 网页选择器,用于指定网页中的哪个元素作为文本(可选)
- trainingType:(必填)
- chunk: 按文本长度进行分割
- qa: QA拆分
- chunkSize: 每个 chunk 的长度(可选). chunk模式:100~3000; qa模式: 4000~模型最大token(16k模型通常建议不超过10000)
- chunkSplitter: 自定义最高优先分割符号(可选)
- qaPrompt: qa拆分自定义提示词(可选)
data 为集合的 ID。
+
- link: 网络链接
- datasetId: 知识库的ID(必填)
- parentId: 父级ID,不填则默认为根目录
- metadata.webPageSelector: 网页选择器,用于指定网页中的哪个元素作为文本(可选)
- trainingType:(必填)
- chunk: 按文本长度进行分割
- qa: QA拆分
- chunkSize: 每个 chunk 的长度(可选). chunk模式:100~3000; qa模式: 4000~模型最大token(16k模型通常建议不超过10000)
- chunkSplitter: 自定义最高优先分割符号(可选)
- qaPrompt: qa拆分自定义提示词(可选)
data 为集合的 ID。
{
"code": 200,
"statusText": "",
@@ -243,14 +243,14 @@
"collectionId": "65abd0ad9d1448617cba6031"
}
}
-
创建一个文件集合 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序列化后传入)
- datasetId: 知识库的ID(必填)
- parentId: 父级ID,不填则默认为根目录
- trainingType:(必填)
- chunk: 按文本长度进行分割
- qa: QA拆分
- chunkSize: 每个 chunk 的长度(可选). chunk模式:100~3000; qa模式: 4000~模型最大token(16k模型通常建议不超过10000)
- chunkSplitter: 自定义最高优先分割符号(可选)
- qaPrompt: qa拆分自定义提示词(可选)
data 为集合的 ID。
+
需要使用 POST form-data 的格式上传。包含 file 和 data 两个字段。
- file: 文件
- data: 知识库相关信息(json序列化后传入)
- datasetId: 知识库的ID(必填)
- parentId: 父级ID,不填则默认为根目录
- trainingType:(必填)
- chunk: 按文本长度进行分割
- qa: QA拆分
- chunkSize: 每个 chunk 的长度(可选). chunk模式:100~3000; qa模式: 4000~模型最大token(16k模型通常建议不超过10000)
- chunkSplitter: 自定义最高优先分割符号(可选)
- qaPrompt: qa拆分自定义提示词(可选)
data 为集合的 ID。
{
"code": 200,
"statusText": "",
@@ -265,9 +265,9 @@
}
}
}
-
创建一个外部文件库集合(商业版) 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)' \
@@ -286,7 +286,7 @@
"chunkSplitter":"",
"qaPrompt":""
}'
-
参数 | 说明 | 必填 |
---|---|---|
externalFileUrl | 文件访问链接(可以是临时链接) | ✅ |
externalFileId | 外部文件ID | |
filename | 自定义文件名,需要带后缀 | |
createTime | 文件创建时间(Date ISO 字符串都 ok) |
data 为集合的 ID。
+
参数 | 说明 | 必填 |
---|---|---|
externalFileUrl | 文件访问链接(可以是临时链接) | ✅ |
externalFileId | 外部文件ID | |
filename | 自定义文件名,需要带后缀 | |
createTime | 文件创建时间(Date ISO 字符串都 ok) |
data 为集合的 ID。
{
"code": 200,
"statusText": "",
@@ -296,9 +296,9 @@
"insertLen": 3
}
}
-
获取集合列表 link
+
获取集合列表 link
curl --location --request POST 'http://localhost:3000/api/core/dataset/collection/list' \
--header 'Authorization: Bearer {{authorization}}' \
--header 'Content-Type: application/json' \
@@ -309,7 +309,7 @@
"parentId": null,
"searchText":""
}'
-
- pageNum: 页码(选填)
- pageSize: 每页数量,最大30(选填)
- datasetId: 知识库的ID(必填)
- parentId: 父级Id(选填)
- searchText: 模糊搜索文本(选填)
+
- pageNum: 页码(选填)
- pageSize: 每页数量,最大30(选填)
- datasetId: 知识库的ID(必填)
- parentId: 父级Id(选填)
- searchText: 模糊搜索文本(选填)
{
"code": 200,
"statusText": "",
@@ -371,12 +371,12 @@
"total": 93
}
}
-
获取集合详情 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": "",
@@ -415,9 +415,9 @@
"sourceName": "测试训练"
}
}
-
修改集合信息 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' \
@@ -442,29 +442,29 @@
"forbid": false,
"createTime": "2024-01-01T00:00:00.000Z"
}'
-
- 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个
字段 | 类型 | 说明 | 必填 |
---|---|---|---|
defaultIndex | Boolean | 是否为默认索引 | ✅ |
dataId | String | 关联的向量ID | ✅ |
text | String | 文本内容 | ✅ |
为集合批量添加添加数据 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个
字段 | 类型 | 说明 | 必填 |
---|---|---|---|
defaultIndex | Boolean | 是否为默认索引 | ✅ |
dataId | String | 关联的向量ID | ✅ |
text | String | 文本内容 | ✅ |
为集合批量添加添加数据 link
注意,每次最多推送 200 组数据。
curl --location --request POST 'https://api.fastgpt.in/api/core/dataset/data/pushData' \
--header 'Authorization: Bearer apikey' \
--header 'Content-Type: application/json' \
@@ -492,7 +492,7 @@
}
]
}'
-
- collectionId: 集合ID(必填)
- trainingType:(必填)
- chunk: 按文本长度进行分割
- qa: QA拆分
- prompt: 自定义 QA 拆分提示词,需严格按照模板,建议不要传入。(选填)
- data:(具体数据)
- q: 主要数据(必填)
- a: 辅助数据(选填)
- indexes: 自定义索引(选填)。可以不传或者传空数组,默认都会使用q和a组成一个索引。
+
- collectionId: 集合ID(必填)
- trainingType:(必填)
- chunk: 按文本长度进行分割
- qa: QA拆分
- prompt: 自定义 QA 拆分提示词,需严格按照模板,建议不要传入。(选填)
- data:(具体数据)
- q: 主要数据(必填)
- a: 辅助数据(选填)
- indexes: 自定义索引(选填)。可以不传或者传空数组,默认都会使用q和a组成一个索引。
{
"code": 200,
"statusText": "",
@@ -503,7 +503,7 @@
"error": [] // 其他错误
}
}
-
{{theme}} 里的内容可以换成数据的主题。默认为:它们可能包含多个主题内容
+
{{theme}} 里的内容可以换成数据的主题。默认为:它们可能包含多个主题内容
我会给你一段文本,{{theme}},学习它们,并整理学习成果,要求为:
1. 提出最多 25 个问题。
2. 给出每个问题的答案。
@@ -517,9 +517,9 @@
……
我的文本:"""{{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' \
@@ -539,7 +539,7 @@
"collectionId":"65abd4ac9d1448617cba6171",
"searchText":""
}'
-
- pageNum: 偏移量(选填)
- pageNum: 页码(选填)
- pageSize: 每页数量,最大30(选填)
- collectionId: 集合的ID(必填)
- searchText: 模糊搜索词(选填)
+
- pageNum: 偏移量(选填)
- pageNum: 页码(选填)
- pageSize: 每页数量,最大30(选填)
- collectionId: 集合的ID(必填)
- searchText: 模糊搜索词(选填)
{
"code": 200,
"statusText": "",
@@ -568,12 +568,12 @@
"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": "",
@@ -600,9 +600,9 @@
"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' \
@@ -621,28 +621,28 @@
}
]
}'
-
- 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' \
@@ -654,7 +654,7 @@
"searchMode": "embedding",
"usingReRank": false
}'
-
- datasetId - 知识库ID
- text - 需要测试的文本
- limit - 最大 tokens 数量
- similarity - 最低相关度(0~1,可选)
- searchMode - 搜索模式:embedding | fullTextRecall | mixedRecall
- usingReRank - 使用重排
返回 top k 结果, limit 为最大 Tokens 数量,最多 20000 tokens。
+
- datasetId - 知识库ID
- text - 需要测试的文本
- limit - 最大 tokens 数量
- similarity - 最低相关度(0~1,可选)
- searchMode - 搜索模式:embedding | fullTextRecall | mixedRecall
- usingReRank - 使用重排
返回 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 4b71e727cf9..78c815116e2 100644
--- a/docs/development/openapi/share/index.html
+++ b/docs/development/openapi/share/index.html
@@ -40,43 +40,43 @@
"uid": "用户唯一凭证"
}
}
-
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": "身份验证失败",
@@ -199,9 +199,9 @@
isElseResult?: boolean; // 判断器结果
}
-
实践案例 link
我们以Laf作为服务器为例,简单展示这 3 个接口的使用方式。
1. 创建3个Laf接口 link
这个接口中,我们设置了token
必须等于fastgpt
才能通过校验。(实际生产中不建议固定写死)
+
实践案例 link
我们以Laf作为服务器为例,简单展示这 3 个接口的使用方式。
1. 创建3个Laf接口 link
这个接口中,我们设置了token
必须等于fastgpt
才能通过校验。(实际生产中不建议固定写死)
import cloud from '@lafjs/cloud'
export default async function (ctx: FunctionContext) {
@@ -214,7 +214,7 @@
return { success: false,message:"身份错误" }
}
-
这个接口中,我们设置了token
必须等于fastgpt
才能通过校验。并且如果问题中包含了你
字,则会报错,用于模拟敏感校验。
+
这个接口中,我们设置了token
必须等于fastgpt
才能通过校验。并且如果问题中包含了你
字,则会报错,用于模拟敏感校验。
import cloud from '@lafjs/cloud'
export default async function (ctx: FunctionContext) {
@@ -232,7 +232,7 @@
return { success: true, data: { uid: "user1" } }
}
-
结果上报接口可自行进行逻辑处理。
+
结果上报接口可自行进行逻辑处理。
import cloud from '@lafjs/cloud'
export default async function (ctx: FunctionContext) {
diff --git a/docs/guide/workbench/workflow/http/index.html b/docs/guide/workbench/workflow/http/index.html
index 6d16baef3bc..4b5c5accdc2 100644
--- a/docs/guide/workbench/workflow/http/index.html
+++ b/docs/guide/workbench/workflow/http/index.html
@@ -31,9 +31,9 @@
menu
HTTP 请求
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 Contents
HTTP 请求
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,
@@ -44,7 +44,7 @@
"url": "https://tryfastgpt.ai"
}
}
-
注意,在 Body 中,你如果引用字符串
,则需要加上""
,例如:"{{string}}"
。
+
注意,在 Body 中,你如果引用字符串
,则需要加上""
,例如:"{{string}}"
。
{
"string": "{{string}}",
"token": "Bearer {{string}}",
@@ -54,7 +54,7 @@
"array2": {{array}},
"object": {{obj}}
}
-
+
{
"string": "字符串",
"token": "Bearer 字符串",
@@ -67,8 +67,8 @@
"url": "https://tryfastgpt.ai"
}
}
-
如何获取返回值 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":{
@@ -86,7 +86,7 @@
"psw": "xxx"
}
}
-
+
{
"$.message": "测试",
"$.data.user": { "name": "xxx", "age": 12 },
diff --git a/docs/use-cases/external-integration/official_account/index.html b/docs/use-cases/external-integration/official_account/index.html
index bf6390f699b..733217b29c7 100644
--- a/docs/use-cases/external-integration/official_account/index.html
+++ b/docs/use-cases/external-integration/official_account/index.html
@@ -52,7 +52,7 @@
34.87.152.33
35.197.149.75
35.247.161.35
-
国内版用户(fastgpt.cn)可以填写下面的 IP 白名单:
+
国内版用户(fastgpt.cn)可以填写下面的 IP 白名单:
47.97.1.240
121.43.105.217
121.41.178.7
@@ -66,7 +66,15 @@
112.124.41.79
121.196.235.183
121.41.75.88
-121.43.108.48
+121.43.108.48
+112.124.12.6
+121.43.52.222
+121.199.162.43
+121.199.162.102
+120.55.94.163
+47.99.59.223
+112.124.46.5
+121.40.46.247
4. 获取AES Key,选择加密方式 link
随机生成AESKey,填入 FastGPT 配置弹窗中。
选择加密方式为安全模式。
5. 获取 URL link
- 在FastGPT确认创建,获取URL。
- 填入微信公众平台的 URL 处,然后提交保存
6. 启用服务器配置(如已自动启用,请忽略) link
7. 开始使用 link
现在用户向公众号发消息,消息则会被转发到 FastGPT,通过公众号返回对话结果。