diff --git a/docSite/assets/imgs/fileinpu-1.png b/docSite/assets/imgs/fileinpu-1.png new file mode 100644 index 000000000..d70b7f3ed Binary files /dev/null and b/docSite/assets/imgs/fileinpu-1.png differ diff --git a/docSite/assets/imgs/fileinpu-2.png b/docSite/assets/imgs/fileinpu-2.png new file mode 100644 index 000000000..27ccaf4cf Binary files /dev/null and b/docSite/assets/imgs/fileinpu-2.png differ diff --git a/docSite/assets/imgs/fileinpu-3.jpg b/docSite/assets/imgs/fileinpu-3.jpg new file mode 100644 index 000000000..4d183984f Binary files /dev/null and b/docSite/assets/imgs/fileinpu-3.jpg differ diff --git a/docSite/assets/imgs/fileinpu-4.jpg b/docSite/assets/imgs/fileinpu-4.jpg new file mode 100644 index 000000000..c96567faf Binary files /dev/null and b/docSite/assets/imgs/fileinpu-4.jpg differ diff --git a/docSite/assets/imgs/fileinpu-5.jpg b/docSite/assets/imgs/fileinpu-5.jpg new file mode 100644 index 000000000..f99b1a562 Binary files /dev/null and b/docSite/assets/imgs/fileinpu-5.jpg differ diff --git a/docSite/assets/imgs/fileinpu-6.jpg b/docSite/assets/imgs/fileinpu-6.jpg new file mode 100644 index 000000000..82550420c Binary files /dev/null and b/docSite/assets/imgs/fileinpu-6.jpg differ diff --git a/docSite/assets/imgs/fileinpu-7.jpg b/docSite/assets/imgs/fileinpu-7.jpg new file mode 100644 index 000000000..3d58e2081 Binary files /dev/null and b/docSite/assets/imgs/fileinpu-7.jpg differ diff --git a/docSite/content/zh-cn/docs/course/collection_tags.md b/docSite/content/zh-cn/docs/course/collection_tags.md index 212d168f2..12a580a98 100644 --- a/docSite/content/zh-cn/docs/course/collection_tags.md +++ b/docSite/content/zh-cn/docs/course/collection_tags.md @@ -4,7 +4,7 @@ description: "FastGPT 知识库集合标签使用说明" icon: "developer_guide" draft: false toc: true -weight: 108 +weight: 109 --- 知识库集合标签是 FastGPT 商业版特有功能。它允许你对知识库中的数据集合添加标签进行分类,更高效地管理知识库数据。 diff --git a/docSite/content/zh-cn/docs/course/fileInput.md b/docSite/content/zh-cn/docs/course/fileInput.md new file mode 100644 index 000000000..c672aca8d --- /dev/null +++ b/docSite/content/zh-cn/docs/course/fileInput.md @@ -0,0 +1,132 @@ +--- +title: '文件输入功能介绍' +description: 'FastGPT 文件输入功能介绍' +icon: 'description' +draft: false +toc: true +weight: 110 +--- + +从 4.8.9 版本起,FastGPT 支持在`简易模式`和`工作流`中,配置用户上传文件、图片功能。下面先简单介绍下如何使用文件输入功能,最后是介绍下文件解析的工作原理。 + + +## 简易模式中使用 + +简易模式打开文件上传后,会使用工具调用模式,也就是由模型自行决策,是否需要读取文件内容。 + +可以找到左侧文件上传的配置项,点击其右侧的`开启`/`关闭`按键,即可打开配置弹窗。 + +![打开文件上传](/imgs/fileinpu-1.png) + +随后,你的调试对话框中,就会出现一个文件选择的 icon,可以点击文件选择 icon,选择你需要上传的文件。 + +由于采用的是工具调用模式,所以在提问时候,可能需要加上适当的引导,让模型知道,你需要读取`文档`。 + +![打开文件上传](/imgs/fileinpu-2.png) + +## 工作流中使用 + +工作流中,可以在系统配置中,找到`文件输入`配置项,点击其右侧的`开启`/`关闭`按键,即可打开配置弹窗。 + +![打开文件上传](/imgs/fileinpu-4.jpg) + +在工作流中,使用文件的方式很多,最简单的就是类似下图中,直接通过工具调用接入文档解析,实现和简易模式一样的效果。 + +![打开文件上传](/imgs/fileinpu-3.jpg) + +也可以更简单点,强制每轮对话都携带上文档内容进行回答,这样就不需要调用两次 AI 才能读取文档内容了。 + +![打开文件上传](/imgs/fileinpu-5.jpg) + +当然,你也可以在工作流中,对文档进行内容提取、内容分析等,然后将分析的结果传递给 HTTP 或者其他模块,从而实现文件处理的 SOP。不过目前版本,`插件`中并未支持文件处理,所以在构建 SOP 的话可能还是有一些麻烦。 + + +## 文档解析工作原理 + +不同于图片识别,LLM 模型目前没有支持直接解析文档的能力,所有的文档“理解”都是通过文档转文字后拼接 prompt 实现。这里通过几个 FAQ 来解释文档解析的工作原理,理解文档解析的原理,可以更好的在工作流中使用文档解析功能。 + +### 上传的文件如何存储在数据库中 + +FastGPT 的对话记录存储结构中,role=user 的消息,value 值会按以下结构存储: + +```ts +type UserChatItemValueItemType = { + type: 'text' | 'file' + text?: { + content: string; + }; + file?: { + type: 'img' | 'doc' + name?: string; + url: string; + }; +}; +``` + +也就是说,上传的图片和文档,都会以 URL 的形式存储在库中,并不会存储`解析后的文档内容`。 + +### 图片如何处理 + +文档解析节点不会处理图片,图片链接会被过滤,图片识别请直接使用支持图片识别的 LLM 模型。 + +### 文档解析节点如何工作 + +文档解析依赖文档解析节点,这个节点会接收一个`array`类型的输入,对应的是文件输入的 URL;输出的是一个`string`,对应的是文档解析后的内容。 + +![打开文件上传](/imgs/fileinpu-6.jpg) + +* 在文档解析节点中,只会解析`文档`类型的 URL,它是通过文件 URL 解析出来的`文名件后缀`去判断的。如果你同时选择了文档和图片,图片会被忽略。 +* 文档解析节点,除了解析本轮工作流接收的文件外,还会把历史记录中的文档 URL 进行解析。最终会解析至多 n 个文档,n 取决于你配置文件上传时,允许的最大文件数量。 + +{{% alert icon="🤖" context="success" %}} +举例: + +配置了最多允许 5 个文件上传 + +1. 第一轮对话,上传 3 个文档和 1 个图片:文档解析节点,返回 3 个文档内容。 +2. 第二轮对话,不上传任何文件:文档解析节点,返回 3 个文档内容。 +3. 第三轮对话,上传 2 个文档:文档解析节点,返回 5 个文档内容。 +4. 第四轮对话,上传 1 个文档:文档解析节点,返回 5 个文档内容,第一轮对话中的第三个文档会被过滤掉。 + +{{% /alert %}} + +* 多个文档内容如何拼接的 + +按下列的模板,对多个文件进行拼接,即文件名+文件内容的形式组成一个字符串,不同文档之间通过分隔符:`\n******\n` 进行分割。 + +``` +File: ${filename} + +${content} + +``` + +### 工具调用如何使用文档解析 + +在工具调用中,文档解析节点的调用提示词为:`解析对话中所有上传的文档,并返回对应文档内容`。 + +作为工具被执行后,文档解析节点会返回解析后的文档内容作为工具响应。 + +### AI对话中如何使用文档解析 + +在 AI 对话节点中,新增了一个文档引用的输入,可以直接引用文档解析节点的输出,从而实现文档内容的引用。 + +它接收一个`string`类型的输入,除了可以引用文档解析结果外,还可以实现自定义内容引用,最终会进行提示词拼接,放置在 role=system 的消息中。提示词模板如下: + +``` +将 中的内容作为你的知识: + +{{quote}} + +``` + +quote 为引用的内容。 + +![打开文件上传](/imgs/fileinpu-7.jpg) + +## 文件输入后续更新 + +* 插件支持配置文件输入。 +* 子应用和插件调用,支持传递文件输入。 +* 文档解析,结构化解析结果。 +* 更多的文件类型输入以及解析器。 \ No newline at end of file diff --git a/docSite/content/zh-cn/docs/course/kb.md b/docSite/content/zh-cn/docs/course/kb.md deleted file mode 100644 index 081de09ef..000000000 --- a/docSite/content/zh-cn/docs/course/kb.md +++ /dev/null @@ -1,133 +0,0 @@ ---- -title: " 打造高质量 AI 知识库(过期)" -description: " 利用 FastGPT 打造高质量 AI 知识库" -icon: "school" -draft: false -toc: true -weight: 300 ---- - -## 前言 - -自从去年 12 月 ChatGPT 发布后,带动了新的一轮应用交互革命。尤其是 GPT-3.5 接口全面放开后,LLM 应用雨后春笋般快速涌现,但因为 GPT 的可控性、随机性和合规性等问题,很多应用场景都没法落地。 - -3 月时候,在 Twitter 上刷到一个老哥使用 GPT 训练自己的博客记录,并且成本非常低(比起 FT)。他给出了一个完整的流程图: - -![向量搜索 GPT 流程图](/imgs/1.png) - -看到这个推文后,我灵机一动,应用场景就十分清晰了。直接上手开干,在经过不到 1 个月时间,FastGPT 在原来多助手管理基础上,加入了向量搜索。于是便有了最早的一期视频: - -{{< bilibili BV1Wo4y1p7i1 >}} - -3 个月过去了,FastGPT 延续着早期的思路去完善和扩展,目前在向量搜索 + LLM 线性问答方面的功能基本上完成了。不过我们始终没有出一期关于如何构建知识库的教程,趁着 V4 在开发中,我们计划介绍一期《如何在 FastGPT 上构建高质量知识库》,以便大家更好的使用。 - -## FastGPT 知识库完整逻辑 - -在正式构建知识库前,我们先来了解下 FastGPT 是如何进行知识库检索的。首先了解几个基本概念: - -1. 向量:将人类直观的语言(文字、图片、视频等)转成计算机可识别的语言(数组)。 -2. 向量相似度:两个向量之间可以进行计算,得到一个相似度,即代表:两个语言相似的程度。 -3. 语言大模型的一些特点:上下文理解、总结和推理。 - -结合上述 3 个概念,便有了 “向量搜索 + 大模型 = 知识库问答” 的公式。下图是 FastGPT V3 中知识库问答功能的完整逻辑: - -![向量搜索 GPT 流程图](/imgs/2.png) - -与大部分其他知识库问答产品不一样的是, FastGPT 采用了 QA 问答对进行存储,而不是仅进行 chunk(文本分块)处理。目的是为了减少向量化内容的长度,让向量能更好的表达文本的含义,从而提高搜索精准度。 -此外 FastGPT 还提供了搜索测试和对话测试两种途径对数据进行调整,从而方便用户调整自己的数据。根据上述流程和方式,我们以构建一个 FastGPT 常见问题机器人为例,展示如何构建一个高质量的 AI 知识库。 - -## 构建知识库应用 - -首先,先创建一个 FastGPT 常见问题知识库 - -![创建知识库应用](/imgs/3.png) - -### 通过 QA 拆分,获取基础知识 - -我们先直接把 FastGPT Git 上一些已有文档,进行 QA 拆分,从而获取一些 FastGPT 基础的知识。下面是 README 例子。 - -![QA 拆分示意图](/imgs/4.png) - -![](/imgs/5.png) - -### 修正 QA - -通过 README 我们一共得到了 11 组数据,整体的质量还是不错的,图片和链接都提取出来了。不过最后一个知识点出现了一些截断,我们需要手动的修正一下。 - -此外,我们观察到第一列第三个知识点。这个知识点是介绍了 FastGPT 一些资源链接,但是 QA 拆分将答案放置在了 A 中,但通常来说用户的提问并不会直接问“有哪些链接”,通常会问:“部署教程”,“问题文档”之类的。因此,我们需要将这个知识点进行简单的一个处理,如下图: - -![手动修改知识库数据](/imgs/6.png) - -我们先来创建一个应用,看看效果如何。 首先需要去创建一个应用,并且在知识库中关联相关的知识库。另外还需要在配置页的提示词中,告诉 GPT:“知识库的范围”。 - -![](/imgs/7.png) - -![README QA 拆分后效果](/imgs/8.png) - -整体的效果还是不错的,链接和对应的图片都可以顺利的展示。 - -### 录入社区常见问题 - -接着,我们再把 FastGPT 常见问题的文档导入,由于平时整理不当,我们只能手动的录入对应的问答。 - -![手动录入知识库结果](/imgs/9.png) - -导入结果如上图。可以看到,我们均采用的是问答对的格式,而不是粗略的直接导入。目的就是为了模拟用户问题,进一步的提高向量搜索的匹配效果。可以为同一个问题设置多种问法,效果更佳。 -FastGPT 还提供了 openapi 功能,你可以在本地对特殊格式的文件进行处理后,再上传到 FastGPT,具体可以参考:[FastGPT Api Docs](https://doc.fastgpt.in/docs/development/openapi) - -## 知识库微调和参数调整 - -FastGPT 提供了搜索测试和对话测试两种途径对知识库进行微调,我们先来使用搜索测试对知识库进行调整。我们建议你提前收集一些用户问题进行测试,根据预期效果进行跳转。可以先进行搜索测试调整,判断知识点是否合理。 - -### 搜索测试 - -![搜索测试作用](/imgs/10.png) - -你可能会遇到下面这种情况,由于“知识库”这个关键词导致一些无关内容的相似度也被搜索进去,此时就需要给第四条记录也增加一个“知识库”关键词,从而去提高它的相似度。 - -![搜索测试结果](/imgs/11.png) - -![优化后的搜索测试结果](/imgs/12.png) - -### 提示词设置 - -提示词的作用是引导模型对话的方向。在设置提示词时,遵守 2 个原则: - -1. 告诉 Gpt 回答什么方面内容。 -2. 给知识库一个基本描述,从而让 Gpt 更好的判断用户的问题是否属于知识库范围。 - -![提示词设置](/imgs/13.png) - -### 更好的限定模型聊天范围 - -首先,你可以通过调整知识库搜索时的相似度和最大搜索数量,实现从知识库层面限制聊天范围。通常我们可以设置相似度为 0.82,并设置空搜索回复内容。这意味着,如果用户的问题无法在知识库中匹配时,会直接回复预设的内容。 - -![搜索参数设置](/imgs/14.png) - -![空搜索控制效果](/imgs/15.png) - -由于 openai 向量模型并不是针对中文,所以当问题中有一些知识库内容的关键词时,相似度 -会较高,此时无法从知识库层面进行限定。需要通过限定词进行调整,例如: - -> 我的问题如果不是关于 FastGPT 的,请直接回复:“我不确定”。你仅需要回答知识库中的内容,不在其中的内容,不需要回答。 - -效果如下: - -![限定词效果](/imgs/16.png) - -当然,gpt35 在一定情况下依然是不可控的。 - -### 通过对话调整知识库 - -与搜索测试类似,你可以直接在对话页里,点击“引用”,来随时修改知识库内容。 - -![查看答案引用](/imgs/17.png) - -## 总结 - -1. 向量搜索是一种可以比较文本相似度的技术。 -2. 大模型具有总结和推理能力,可以从给定的文本中回答问题。 -3. 最有效的知识库构建方式是 QA 和手动构建。 -4. Q 的长度不宜过长。 -5. 需要调整提示词,来引导模型回答知识库内容。 -6. 可以通过调整搜索相似度、最大搜索数量和限定词来控制模型回复的范围。 \ No newline at end of file