使用 FastGPT 构建高质量 AI 知识库

作者:余金隆。FastGPT 项目作者,Sealos 项目前端负责人,前 Shopee 前端开发工程师

FastGPT 项目地址:https://github.com/labring/FastGPT/

引言

自从去年 12 月 ChatGPT 发布以来,带动了一轮新的交互应用革命。尤其在 GPT-3.5 接口全面开放后,大量的 LLM 应用如雨后春笋般涌现。然而,由于 GPT 的可控性、随机性和合规性等问题,很多应用场景都没法落地。

起源

3 月份,我在 Twitter 上刷到一个老哥使用 GPT 训练他自己的博客记录,成本极低(相比于 Fine-tuning)。他提供了一个完整的流程图:

向量搜索 GPT 流程图

看到这个推文后,我灵机一动,应用场景就十分清晰了。直接上手开干,不到一个月的时间,我在原有的助手管理基础上,为 FastGPT 加入了向量搜索功能。于是就有了最早的一期视频:https://www.bilibili.com/video/BV1Wo4y1p7i1/

初步发展

三个月过去了,FastGPT 依然延续着早期的思路去完善和扩展。目前,其在向量搜索 + LLM 线性问答方面的功能基本已完成。然而,我们始终没有发布关于如何构建知识库的教程。因此,我们打算在 V4 版本开发过程中,写一篇文章来介绍《如何在 FastGPT 上构建高质量知识库》。

FastGPT 的知识库逻辑

在正式开始构建知识库之前,我们需要了解 FastGPT 的知识库检索机制。首先,我们需要了解几个基本概念:

基础概念

  1. 向量:将人类的语言(文字、图片、视频等)转换为计算机可识别的语言(数组)。
  2. 向量相似度:计算两个向量之间的相似度,表示两种语言的相似程度。
  3. 语言大模型的特性:上下文理解、总结和推理。

这三个概念结合起来,就构成了 "向量搜索 + 大模型 = 知识库问答" 的公式。以下是 FastGPT V3 中知识库问答功能的完整逻辑:

向量搜索 GPT 流程图

FastGPT 与大多数其他知识库问答产品不同的地方在于,它采用了 QA 问答对进行存储,而不仅是 chunk(文本分块)处理。这样做是为了减少向量化内容的长度,使向量能更好地表达文本的含义,从而提高搜索的精度。

此外 FastGPT 还提供了搜索测试和对话测试两种途径对数据进行调整,从而方便用户调整自己的数据。

根据上述流程和方式,我们以构建一个 FastGPT 常见问题机器人为例,展示如何构建一个高质量的 AI 知识库。

FastGPT 仓库地址:https://github.com/labring/FastGPT

创建知识库应用

首先,我们创建一个 FastGPT 常见问题知识库。

创建知识库应用

基础知识获取

我们先直接把 FastGPT GitHub 仓库上一些已有文档,进行 QA 拆分,从而获取一些 FastGPT 的基础知识。下面以 README 为例。

QA 拆分示意图

示例

QA 修正

我们从 README 中获取了 11 组数据,整体质量还是不错的,图片和链接都提取出来了。然而,最后一个知识点出现了一些截断,我们需要手动修正一下。

此外,我们注意到第一列第三个知识点,该知识点介绍了 FastGPT 的一些资源链接,但 QA 拆分将答案放在了 A 中。然而,用户的问题通常不会直接问“有哪些链接”,他们更可能会问:“部署教程”,“问题文档”等。因此,我们需要对此知识点进行简单处理,如下图所示:

手动修改知识库数据

接下来,我们可以创建一个应用,看看效果如何。首先创建一个应用,并在知识库中关联相关的知识库。另外,还需要在配置页面的提示词中,告诉 GPT:“知识库的范围”。

应用创建

README QA 拆分后效果

导入社区常见问题

接着,我们把 FastGPT 常见问题的文档导入。由于之前的整理不到位,我们只能手动录入对应的问答。

手动录入知识库结果

导入结果如上图。可以看到,我们均采用的是问答对的格式,而不是粗略的直接导入。目的就是为了模拟用户问题,进一步的提高向量搜索的匹配效果。可以为同一个问题设置多种问法,效果更佳。

FastGPT 还提供了 OpenAPI 功能,你可以在本地对特殊格式的文件进行处理后,再上传到 FastGPT,具体可以参考:FastGPT Api Docs

知识库微调和参数调整

FastGPT 提供了搜索测试和对话测试两个功能,我们可以通过这两个功能来进行知识库微调和参数调整。

我们建议你提前收集一些用户问题进行测试,根据预期效果进行跳转。可以先进行搜索测试调整,判断知识点是否合理。

搜索测试

通过搜索测试,我们可以输入问题,查看返回的知识库数据,来测试知识库的查询效果。下面是搜索测试的界面:

搜索测试界面

我们可以看到,系统返回了与之相关的问答数据。

你可能会遇到下面这种情况,由于“知识库”这个关键词导致一些无关内容的相似度也被搜索进去,此时就需要给第四条记录也增加一个“知识库”关键词,从而去提高它的相似度。

提示词设置

提示词的作用是引导模型对话的方向。在设置提示词时,遵守 2 个原则:

  1. 告诉 GPT 回答什么方面内容。
  2. 给知识库一个基本描述,从而让 GPT 更好的判断用户的问题是否属于知识库范围。

提示词设置

更好的限定模型聊天范围

首先,你可以通过调整知识库搜索时的相似度和最大搜索数量,实现从知识库层面限制聊天范围。通常我们可以设置相似度为 0.82,并设置空搜索回复内容。这意味着,如果用户的问题无法在知识库中匹配时,会直接回复预设的内容。

搜索参数设置

空搜索控制效果

由于 OpenAI 向量模型并不是针对中文,所以当问题中有一些知识库内容的关键词时,相似度 会较高,此时无法从知识库层面进行限定。需要通过限定词进行调整,例如:

我的问题如果不是关于 FastGPT 的,请直接回复:“我不确定”。你仅需要回答知识库中的内容,不在其中的内容,不需要回答。

效果如下:

限定词效果

当然,GPT-3.5 在一定情况下依然是不可控的。

通过对话调整知识库

与搜索测试类似,你可以直接在对话页里,点击“引用”,来随时修改知识库内容。

查看答案引用

结语

  1. 向量搜索是一种可以比较文本相似度的技术。
  2. 大模型具有总结和推理能力,可以从给定的文本中回答问题。
  3. 最有效的知识库构建方式是 QA 和手动构建。
  4. Q 的长度不宜过长。
  5. 需要调整提示词,来引导模型回答知识库内容。
  6. 可以通过调整搜索相似度、最大搜索数量和限定词来控制模型回复的范围。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/58547.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

安卓:BottomNavigationBar——底部导航栏控件

目录 一、BottomNavigationBar介绍 二、BottomNavigationBar的常用方法及其常用类 (一)、常用方法 1. 添加菜单项 2. 移除菜单项 3. 设置选中监听器 4. 设置当前选中项 5. 设置徽章 6. 样式和颜色定制 7. 动画效果 8. 隐藏底部导航栏。 9、设…

windows物理机 上安装centos ,ubuntu,等多个操作系统的要点

一、摘要 一般情况下,我们的笔记本或工作电脑都默认安装windows 分几个区,当下是win7 win8 win 10 win11 等,突然我们有需求需要安装个centos ,后面我们应当怎么做,要点是什么?一定要根据网上的贴子一步步来…

【Golang 接口自动化00】为什么要用Golang做自动化?

目录 为什么使用Golang做自动化 最终想实现的效果 怎么做? 写在后面 资料获取方法 为什么使用Golang做自动化 顺应公司的趋势学习了Golang之后,因为没有太多时间和项目来实践,怕止步于此、步Java缺少练习遗忘殆尽的后尘,决定…

【iOS】json数据解析以及简单的网络数据请求

文章目录 前言一、json数据解析二、简单的网络数据请求三、实现访问API得到网络数据总结 前言 近期写完了暑假最后一个任务——天气预报,在里面用到了简单的网络数据请求以及json数据的解析,特此记录博客总结 一、json数据解析 JSON是一种轻量级的数据…

vulnhub靶机Empire_LupinOne

下载地址:https://www.vulnhub.com/entry/empire-lupinone,750/ 主机发现 arp-scan -l nmap --min-rate 10000 -p- 192.168.21.137 nmap -sV -sT -O -p22,80 192.168.21.137 nmap --scriptvuln -p22,80 192.168.21.137 先看一下网页 啥也没有 先看一下nmap扫出来的…

10.物联网操作系统之低功耗管理

一。低功耗管理概念及其应用 1.STM32低功耗设计详解 STM32的电源管理系统主要分为: 备份域 调压器供电电路 ADC电源电路 2.低功耗模式 1.运行模式 2.睡眠模式 3.停机模式 4.待机模式 (1)睡眠模式 在睡眠模式中,仅关闭了内核时钟&…

带你简单认识淘宝 API 接口,API接口适用场景和业务类型

淘宝 API 接口是为开发电商类应用程序而设计的一套完整的、跨浏览器、跨平台的接口规范。通过开放接口,开发者可以不改变现有系统,直接在原有系统上实现新功能。该规范于 2007 年发布,是目前业界唯一完整覆盖电商系统各相关业务领域的接口标准…

Flutter运行app时向logcat输出当前打开的界面路径且点击可跳转

当一个项目大了目录文件多了,我们往往会为了找到一个文件花费大量的时间和精力,为了快捷方便的调试我们的项目,我们往往需要在打开app运行的时候需要知道当前打开的界面的文件在哪儿,我们这个代码就能快捷的知道我们app正在打开的…

iTOP-RK3568开发板Windows 安装 RKTool 驱动

在烧写镜像之前首先需要安装 RKTool 驱动。 RKTool 驱动在网盘资料“iTOP-3568 开发板\01_【iTOP-RK3568 开发板】基础资料 \02_iTOP-RK3568 开发板烧写工具及驱动”路径下。 驱动如下图所示: 解压缩后,进入文件夹,如下图所示:…

电缆故障综合测试仪

一、电缆故障查找仪产品简介 本产品用于地埋电缆故障点的快速、企业产品免费信息发布平台定位、电缆埋设路径及埋设深度的电子商务测(在故障点处获取深度)。 主要特点 1、用特殊结构的声波振动传感器及低噪声专用器件作前置放大,提高了仪器定…

性价比高的学生用台灯 盘点性价比高的学生护眼台灯

护眼台灯在这些年来已经逐渐淘汰掉了传统的灯泡台灯,和大部分普通台灯,成为现在许多孩子学习桌上的一员。但仍然有不少人对护眼台灯提出质疑,也有不少人仍在观望。原因当然不是被价格劝退,而是听闻了市面上的护眼台灯伤眼的案例&a…

SAN共享存储架构

SAN共享存储架构 概述 近年在高性能专用存储网络需求的驱使下,许多SAN存储系统应用于高性能计算网络系统、大型网站系统、非线性编辑系统等网络系统中,存储设备与计算机主机系统之间一对一的关系,被可供多个计算机主机共享读写同一个存储设…

Nacos 抽取公共配置

文章目录 创建一个公共配置文件其他配置文件引用springboot配置文件 创建一个公共配置文件 其他配置文件引用 ${变量} springboot配置文件 spring:cloud:nacos:discovery:server-addr: current.ip:8848namespace: word_register_proconfig:server-addr: current.ip:8848auto-r…

【2023 华数杯全国大学生数学建模竞赛】 C题 母亲身心健康对婴儿成长的影响 Python代码实现

【2023 华数杯全国大学生数学建模竞赛】 C题 母亲身心健康对婴儿成长的影响 1 题目 母亲是婴儿生命中最重要的人之一,她不仅为婴儿提供营养物质和身体保护, 还为婴儿提供情感支持和安全感。母亲心理健康状态的不良状况,如抑郁、焦虑、压力等…

算法通过村第二关-链表白银笔记|指定区间反转

文章目录 前言链表反转|指定区间内头插法:穿针引线法: 总结 前言 提示:人啊,果然跟花一样,开花前的等待无比漫长,绽放的魅力却转瞬即逝。 链表反转|指定区间内 参考题目:92. 反转链表 II - 力…

【Apollo学习笔记】—— 相机仿真

文章目录 前言相关代码整理 测试实践文件目录包管理BUILD文件以及cyberfile.xml文件源程序BUILD运行结果其他参考CameraOutput channels启动camera驱动启动camera video compression驱动 前言 本文是对Cyber RT的学习记录,文章可能存在不严谨、不完善、有缺漏的部分&#xff0…

Redis 6.0的新特性:多线程、客户端缓存与安全

2020年5月份,6.0版本。 面向网络处理的多IO线程可以提高网络请求处理的速度,而客户端缓存可以让应用直接在客户端本地读取数据,这两个特性可以提升Redis的性能。 细粒度权限控制让Redis可以按照命令粒度控制不同用户的访问权限,…

云服务器SVN仓库搭建(以阿里云为例)

远程连接阿里云服务器 安装svn(注意需要root权限使用命令sudo su) yum install subversion 安装成功后查看svn版本 svnserve --version 创建版本库的根目录 mkdir /var/svn 创建代码仓库 svnadmin create /var/svn/test 当前生成的目录结构 此处为svn的配置文件 创建用户名…

【Kubernetes】Kubernetes的部署

kubernetes 一、Kubernetes 的安装部署1. 常见的安装部署方式1.1 Minikube1.2 Kubeadm1.3 二进制安装部署2. K8S 部署 二进制与高可用的区别2.1 二进制部署2.2 kubeadm 部署二、Kubernetes 二进制部署过程1. 服务器相关设置以及架构2. 操作系统初始化配置3. 部署 etcd 集群4. 部…

数据结构【第3章】——线性表

线性表的定义 线性表:零个或多个数据元素的有限序列。 1)线性表是一个序列。即元素之间是有顺序的,若元素存在多个,则第一个元素无前驱,最后一个元素无后继,其他每个元素都有且只有一个前驱和后继。 2&a…