V4.9.11 feature (#4969)

* Feat: Images dataset collection (#4941)

* New pic (#4858)

* 更新数据集相关类型,添加图像文件ID和预览URL支持;优化数据集导入功能,新增图像数据集处理组件;修复部分国际化文本;更新文件上传逻辑以支持新功能。

* 与原先代码的差别

* 新增 V4.9.10 更新说明,支持 PG 设置`systemEnv.hnswMaxScanTuples`参数,优化 LLM stream 调用超时,修复全文检索多知识库排序问题。同时更新数据集索引,移除 datasetId 字段以简化查询。

* 更换成fileId_image逻辑,并增加训练队列匹配的逻辑

* 新增图片集合判断逻辑,优化预览URL生成流程,确保仅在数据集为图片集合时生成预览URL,并添加相关日志输出以便调试。

* Refactor Docker Compose configuration to comment out exposed ports for production environments, update image versions for pgvector, fastgpt, and mcp_server, and enhance Redis service with a health check. Additionally, standardize dataset collection labels in constants and improve internationalization strings across multiple languages.

* Enhance TrainingStates component by adding internationalization support for the imageParse training mode and update defaultCounts to include imageParse mode in trainingDetail API.

* Enhance dataset import context by adding additional steps for image dataset import process and improve internationalization strings for modal buttons in the useEditTitle hook.

* Update DatasetImportContext to conditionally render MyStep component based on data source type, improving the import process for non-image datasets.

* Refactor image dataset handling by improving internationalization strings, enhancing error messages, and streamlining the preview URL generation process.

* 图片上传到新建的 dataset_collection_images 表,逻辑跟随更改

* 修改了除了controller的其他部分问题

* 把图片数据集的逻辑整合到controller里面

* 补充i18n

* 补充i18n

* resolve评论:主要是上传逻辑的更改和组件复用

* 图片名称的图标显示

* 修改编译报错的命名问题

* 删除不需要的collectionid部分

* 多余文件的处理和改动一个删除按钮

* 除了loading和统一的imageId,其他都resolve掉的

* 处理图标报错

* 复用了MyPhotoView并采用全部替换的方式将imageFileId变成imageId

* 去除不必要文件修改

* 报错和字段修改

* 增加上传成功后删除临时文件的逻辑以及回退一些修改

* 删除path字段,将图片保存到gridfs内,并修改增删等操作的代码

* 修正编译错误

---------

Co-authored-by: archer <545436317@qq.com>

* perf: image dataset

* feat: insert image

* perf: image icon

* fix: training state

---------

Co-authored-by: Zhuangzai fa <143257420+ctrlz526@users.noreply.github.com>

* fix: ts (#4948)

* Thirddatasetmd (#4942)

* add thirddataset.md

* fix thirddataset.md

* fix

* delete wrong png

---------

Co-authored-by: dreamer6680 <146868355@qq.com>

* perf: api dataset code

* perf: log

* add secondary.tsx (#4946)

* add secondary.tsx

* fix

---------

Co-authored-by: dreamer6680 <146868355@qq.com>

* perf: multiple menu

* perf: i18n

* feat: parse queue (#4960)

* feat: parse queue

* feat: sync parse queue

* fix thirddataset.md (#4962)

* fix thirddataset-4.png (#4963)

* feat: Dataset template import (#4934)

* 模版导入部分除了文档还没写

* 修复模版导入的 build 错误

* Document production

* compress pictures

* Change some constants to variables

---------

Co-authored-by: Archer <545436317@qq.com>

* perf: template import

* doc

* llm pargraph

* bocha tool

* fix: del collection

---------

Co-authored-by: Zhuangzai fa <143257420+ctrlz526@users.noreply.github.com>
Co-authored-by: dreamer6680 <1468683855@qq.com>
Co-authored-by: dreamer6680 <146868355@qq.com>
This commit is contained in:
Archer
2025-06-06 14:48:44 +08:00
committed by GitHub
parent bb810a43a1
commit c30f069f2f
198 changed files with 4934 additions and 2290 deletions

View File

@@ -295,12 +295,15 @@ curl --location --request DELETE 'http://localhost:3000/api/core/dataset/delete?
| --- | --- | --- |
| datasetId | 知识库ID | ✅ |
| parentId | 父级ID不填则默认为根目录 | |
| trainingType | 数据处理方式。chunk: 按文本长度进行分割;qa: 问答对提取 | ✅ |
| customPdfParse | PDF增强解析。true: 开启PDF增强解析;不填则默认为false | |
| trainingType | 数据处理方式。chunk: 按文本长度进行分割;qa: 问答对提取 | ✅ |
| chunkTriggerType | 分块条件逻辑。minSize默认: 大于 n 时分块;maxSize: 小于文件处理模型最大上下文时分块;forceChunk: 强制分块 | |
| chunkTriggerMinSize | chunkTriggerType=minSize 时候填写,原文长度大于该值时候分块(默认 1000 | |
| autoIndexes | 是否自动生成索引(仅商业版支持) | |
| imageIndex | 是否自动生成图片索引(仅商业版支持) | |
| chunkSettingMode | 分块参数模式。auto: 系统默认参数; custom: 手动指定参数 | |
| chunkSplitMode | 分块拆分模式。size: 按长度拆分; char: 按字符拆分。chunkSettingMode=auto时不生效。 | |
| chunkSplitMode | 分块拆分模式。paragraph段落优先再按长度分size: 按长度拆分; char: 按字符拆分。chunkSettingMode=auto时不生效。 | |
| paragraphChunkDeep | 最大段落深度(默认 5 | |
| chunkSize | 分块大小,默认 1500。chunkSettingMode=auto时不生效。 | |
| indexSize | 索引大小,默认 512必须小于索引模型最大token。chunkSettingMode=auto时不生效。 | |
| chunkSplitter | 自定义最高优先分割符号除非超出文件处理最大上下文否则不会进行进一步拆分。chunkSettingMode=auto时不生效。 | |
@@ -428,10 +431,7 @@ data 为集合的 ID。
"data": {
"collectionId": "65abcfab9d1448617cba5f0d",
"results": {
"insertLen": 5, // 分割成多少段
"overToken": [],
"repeat": [],
"error": []
"insertLen": 5 // 分割成多少段
}
}
}
@@ -497,10 +497,7 @@ data 为集合的 ID。
"data": {
"collectionId": "65abd0ad9d1448617cba6031",
"results": {
"insertLen": 1,
"overToken": [],
"repeat": [],
"error": []
"insertLen": 1
}
}
}
@@ -546,7 +543,7 @@ curl --location --request POST 'http://localhost:3000/api/core/dataset/collectio
{{< tab tabName="响应示例" >}}
{{< markdownify >}}
data 为集合的 ID
由于解析文档是异步操作,此处不会返回插入的数量
```json
{
@@ -556,10 +553,7 @@ data 为集合的 ID。
"data": {
"collectionId": "65abc044e4704bac793fbd81",
"results": {
"insertLen": 1,
"overToken": [],
"repeat": [],
"error": []
"insertLen": 0
}
}
}
@@ -632,10 +626,7 @@ data 为集合的 ID。
"data": {
"collectionId": "65abc044e4704bac793fbd81",
"results": {
"insertLen": 1,
"overToken": [],
"repeat": [],
"error": []
"insertLen": 1
}
}
}
@@ -702,10 +693,7 @@ data 为集合的 ID。
"data": {
"collectionId": "6646fcedfabd823cdc6de746",
"results": {
"insertLen": 1,
"overToken": [],
"repeat": [],
"error": []
"insertLen": 1
}
}
}

View File

@@ -1,5 +1,5 @@
---
title: 'V4.9.1'
title: 'V4.9.1(包含升级脚本)'
description: 'FastGPT V4.9.1 更新说明'
icon: 'upgrade'
draft: false

View File

@@ -7,11 +7,29 @@ toc: true
weight: 789
---
## 执行升级脚本
该脚本仅需商业版用户执行。
从任意终端,发起 1 个 HTTP 请求。其中 {{rootkey}} 替换成环境变量里的 `rootkey`{{host}} 替换成**FastGPT 域名**。
```bash
curl --location --request POST 'https://{{host}}/api/admin/initv4911' \
--header 'rootkey: {{rootkey}}' \
--header 'Content-Type: application/json'
```
**脚本功能**
1. 移动第三方知识库 API 配置。
## 🚀 新增内容
1. 工作流中增加节点搜索功能
2. 工作流中,子流程版本控制,可选择“保持最新版本”,无需手动更新
1. 商业版支持图片知识库
2. 工作流中增加节点搜索功能
3. 工作流中,子流程版本控制,可选择“保持最新版本”,无需手动更新。
4. 增加更多审计操作日志。
5. 知识库增加文档解析异步队列,导入文档时,无需等待文档解析完毕才进行导入。
## ⚙️ 优化
@@ -22,4 +40,6 @@ weight: 789
1. 工作流中,管理员声明的全局系统工具,无法进行版本管理。
2. 工具调用节点前,有交互节点时,上下文异常。
3. 修复备份导入,小于 1000 字时,无法分块问题。
4. 自定义 PDF 解析,无法保存 base64 图片。
4. 自定义 PDF 解析,无法保存 base64 图片。
5. 非流请求,未进行 CITE 标记替换。
6. Python 沙盒存在隐藏风险。

View File

@@ -1,5 +1,5 @@
---
title: 'V4.9.4'
title: 'V4.9.4(包含升级脚本)'
description: 'FastGPT V4.9.4 更新说明'
icon: 'upgrade'
draft: false

View File

@@ -0,0 +1,118 @@
---
title: '模板导入'
description: 'FastGPT 模板导入功能介绍和使用方式'
icon: 'language'
draft: false
toc: true
weight: 420
---
## 背景
FastGPT 提供了模板导入功能,让用户可以通过预设的 CSV 模板格式批量导入问答对数据。这种方式特别适合已经有结构化问答数据的用户,可以快速将数据导入到知识库中。
## 模板结构说明
模板采用 CSV 格式,包含以下列:
- q: 问题列,存放用户可能提出的问题
- a: 答案列,存放对应问题的标准答案
- indexes: 索引列,用于存放与该问题相关的索引
### 示例数据
```csv
q,a,indexes
"你是谁呀?","我呀,是 AI 小助手哟,专门在这儿随时准备着,陪你交流、为你答疑解惑,不管是学习上的知识探讨,生活里的小疑问,还是创意灵感的碰撞,我都能尽力参与,用我的 "知识大脑" 给你提供帮助和陪伴呢,就盼着能成为你互动交流、探索世界的好伙伴呀 。","1. 你是什么?\n2. 你能做什么?\n3. 你可以解答哪些方面的疑问?\n4. 你希望成为什么样的伙伴?\n5. 你如何提供帮助?"
"你是什么?","我是 AI 小助手,专门随时准备陪用户交流、为用户答疑解惑,能参与学习上的知识探讨、生活里的小疑问以及创意灵感的碰撞,用 "知识大脑" 提供帮助和陪伴,希望成为用户互动交流、探索世界的好伙伴。","你是什么?"
"你能做什么?","能陪用户交流、为用户答疑解惑,参与学习上的知识探讨、生活里的小疑问以及创意灵感的碰撞,用 "知识大脑" 提供帮助和陪伴。","你能做什么?"
```
## 使用说明
### 1. 打开知识库,点击导入,选择模版导入
![](/imgs/template/import.png)
![](/imgs/template/box.png)
### 2. 下载模板
点击下载 CSV 模版,其中存在两个模式的内容
#### 常规模式的数据模版
![](/imgs/template/nomal.png)
对应 CSV 格式为
![](/imgs/template/nomal_data.png)
常规模式下q为内容a为空indexes可多个
#### 问答对的数据模版
![](/imgs/template/Question-answer.png)
对应CSV格式为
![](/imgs/template/Question-answer_data.png)
问答对模式下q为问题a为答案indexes即为索引部分
### 3. 填写数据
按照模板格式填写你的问答数据:
- 每一行代表一个内容或者一个问答对
- 问题(q)始终不为空
- 在一行内,索引部分可往后继续添加
### 4. 导入限制
- 仅支持 CSV 格式文件
- 单个文件大小限制为 100MB
- 必须严格按照模板格式填写,否则可能导入失败
- 每次只能导入一个文件
成功导入后如下:
![](/imgs/template/import_csv.png)
### 4. 注意事项
- 确保 CSV 文件使用 UTF-8 编码
- 如果内容中包含逗号,请用双引号包裹整个内容
- indexes 列的内容会被用作相关问题的索引,有助于提高检索准确性
- 建议在导入大量数据前先测试少量数据
## 最佳实践
1. **数据准备**
- 确保内容或者问答对的质量,答案应该清晰、准确
- 为每个导入的添加合适的索引关键词
- 避免重复的内容或者问答对
2. **格式检查**
- 导入前检查 CSV 文件格式是否正确
- 确保没有多余的空行或空格
- 验证特殊字符是否正确转义
3. **分批导入**
- 如果数据量较大,建议分批导入
- 每批导入后验证数据的正确性
## 常见问题
Q: 为什么我的文件导入失败了?
A: 请检查以下几点:
- 文件格式是否为 CSV
- 编码是否为 UTF-8
- 是否严格按照模板格式填写
- 文件大小是否超过限制
Q: 如何验证导入是否成功?
A: 导入成功后,你可以:
- 在知识库中搜索导入的问题
- 通过对话测试回答的准确性
- 查看知识库的数据统计

View File

@@ -0,0 +1,162 @@
---
title: '第三方知识库开发'
description: '本节详细介绍如何在FastGPT上自己接入第三方知识库'
icon: 'language'
draft: false
toc: true
weight: 410
---
目前,互联网上拥有各种各样的文档库,例如飞书,语雀等等。 FastGPT 的不同用户可能使用的文档库不同,目前 FastGPT 内置了飞书、语雀文档库,如果需要接入其他文档库,可以参考本节内容。
## 统一的接口规范
为了实现对不同文档库的统一接入FastGPT 对第三方文档库进行了接口的规范,共包含 4 个接口内容,可以[查看 API 文件库接口](/docs/guide/knowledge_base/api_dataset)。
所有内置的文档库,都是基于标准的 API 文件库进行扩展。可以参考`FastGPT/packages/service/core/dataset/apiDataset/yuqueDataset/api.ts`中的代码,进行其他文档库的扩展。一共需要完成 4 个接口开发:
1. 获取文件列表
2. 获取文件内容/文件链接
3. 获取原文预览地址
4. 获取文件详情信息
## 开始一个第三方文件库
为了方便讲解,这里以添加飞书知识库( FeishuKnowledgeDataset )为例。
### 1. 添加第三方文档库参数
首先,要进入 FastGPT 项目路径下的`FastGPT\packages\global\core\dataset\apiDataset.d.ts`文件,添加第三方文档库 Server 类型。知识库类型的字段由自己设计,主要是自己需要那些内容。例如,语雀知识库中,需要提供`userId``token`两个字段作为鉴权信息。
```ts
export type YuqueServer = {
userId: string;
token?: string;
basePath?: string;
};
```
{{% alert icon="🤖 " context="success" %}}
如果文档库有`根目录`选择的功能,需要设置添加一个字段`basePath`[点击查看`根目录`功能](/docs/guide/knowledge_base/third_dataset/#添加配置表单)
{{% /alert %}}
![](/imgs/thirddataset-1.png)
### 2. 创建 Hook 文件
每个第三方文档库都会采用 Hook 的方式来实现一套 API 接口的维护Hook 里包含 4 个函数需要完成。
-`FastGPT\packages\service\core\dataset\apiDataset\`下创建一个文档库的文件夹,然后在文件夹下创建一个`api.ts`文件
-`api.ts`文件中,需要完成 4 个函数的定义,分别是:
- `listFiles`:获取文件列表
- `getFileContent`:获取文件内容/文件链接
- `getFileDetail`:获取文件详情信息
- `getFilePreviewUrl`:获取原文预览地址
### 3. 添加知识库类型
`FastGPT\packages\global\core\dataset\type.d.ts`文件中,导入自己创建的知识库类型。
![](/imgs/thirddataset-2.png)
### 4. 添加知识库数据获取
`FastGPT\packages\global\core\dataset\apiDataset\utils.ts`文件中,添加如下内容。
![](/imgs/thirddataset-3.png)
### 5. 添加知识库调用方法
`FastGPT\packages\service\core\dataset\apiDataset\index.ts`文件下,添加如下内容。
![](/imgs/thirddataset-4.png)
## 添加前端
`FastGPT\packages\web\i18n\zh-CN\dataset.json`,`FastGPT\packages\web\i18n\en\dataset.json``FastGPT\packages\web\i18n\zh-Hant\dataset.json`中添加自己的 I18n 翻译,以中文翻译为例,大体需要如下几个内容:
![](/imgs/thirddataset-5.png)
`FastGPT\packages\service\support\operationLog\util.ts`文件下添加如下内容,以支持获取 I18n 翻译。
![](/imgs/thirddataset-6.png)
{{% alert icon="🤖 " context="success" %}}
此次 I18n 翻译内容存放在`FastGPT\packages\web\i18n\zh-Hant\account_team.json`,`FastGPT\packages\web\i18n\zh-CN\account_team.json``FastGPT\packages\web\i18n\en\account_team.json`,字段格式为`dataset.XXX_dataset`,以飞书知识库为例,字段值为`dataset.feishu_knowledge_dataset`
{{% /alert %}}
`FastGPT\packages\web\components\common\Icon\icons\core\dataset\`添加自己的知识库图标,一共是两个,分为`Outline``Color`,分别是有颜色的和无色的,具体看如下图片。
![](/imgs/thirddataset-7.png)
`FastGPT\packages\web\components\common\Icon\constants.ts`文件中,添加自己的图标。 `import` 是图标的存放路径。
![](/imgs/thirddataset-8.png)
`FastGPT\packages\global\core\dataset\constants.ts`中,添加自己的知识库类型,分别要在`DatasetTypeEnum``ApiDatasetTypeMap`中添加内容。
| | |
| --- | --- |
| ![](/imgs/thirddataset-9.png) | ![](/imgs/thirddataset-10.png) |
{{% alert icon="🤖 " context="success" %}}
`courseUrl`字段是相应的文档说明,如果有的话,可以添加。
文档添加在`FastGPT\docSite\content\zh-cn\docs\guide\knowledge_base\`
`label`内容是自己之前通过 i18n 翻译添加的知识库名称的。
`icon``avatar`是自己之前添加的两个图标
{{% /alert %}}
`FastGPT\projects\app\src\pages\dataset\list\index.tsx`文件下,添加如下内容。这个文件负责的是知识库列表页的`新建`按钮点击后的菜单,只有在该文件添加知识库后,才能创建知识库。
![](/imgs/thirddataset-11.png)
`FastGPT\projects\app\src\pageComponents\dataset\detail\Info\index.tsx`文件下添加如下内容。此处配置对应ui界面的如下。
| | |
| --- | --- |
![](/imgs/thirddataset-12.png)|![](/imgs/thirddataset-13.png)
## 添加配置表单
`FastGPT\projects\app\src\pageComponents\dataset\ApiDatasetForm.tsx`文件下,添加自己如下内容。这个文件负责的是创建知识库页的字段填写。
| | | |
| --- | --- | --- |
| ![](/imgs/thirddataset-14.png) | ![](/imgs/thirddataset-15.png) | ![](/imgs/thirddataset-16.png) |
代码中添加的两个组件是对根目录选择的渲染,对应设计的 api 的 getfiledetail 方法,如果你的知识库不支持,你可以不引用。
```
{renderBaseUrlSelector()} //这是对`Base URL`字段的渲染
{renderDirectoryModal()} //点击`选择`后出现的`选择根目录`窗口,见图
```
| | |
| --- | --- |
| ![](/imgs/thirddataset-17.png) | ![](/imgs/thirddataset-18.png) |
如果知识库需要支持根目录,还需要在`ApiDatasetForm`文件中添加如下内容。
### 1. 解析知识库类型
需要从`apiDatasetServer`解析出自己的知识库类型,如图:
![](/imgs/thirddataset-19.png)
### 2. 添加选择根目录逻辑和`parentId`赋值逻辑
需要添加根目录选择逻辑,来确保用户已经填写了调动的 api 方法所必需的字段,比如 Token 之类的。
![](/imgs/thirddataset-20.png)
### 3. 添加字段检查和赋值逻辑
需要在调用方法前再次检测是否以及获取完所有必须字段,在选择根目录后,将根目录值赋值给对应的字段。
![](/imgs/thirddataset-21.png)
## 提示
建议知识库创建完成后,完整测试一遍知识库的功能,以确定有无漏洞,如果你的知识库添加有问题,且无法在文档找到对应的文件解决,一定是杂项没有添加完全,建议重复一次全局搜索`YuqueServer``yuqueServer`,检查是否有地方没有加上自己的类型。