FastGPT:利用大模型重新定义传统知识库

news2024/9/20 18:36:19

引言

传统知识库的痛点

传统知识库广泛应用于企业文档管理、客户支持等场景,但随着信息量和复杂度的增加,存在以下显著问题:

  • 数据难整合: 结构化与非结构化数据分散,更新维护成本高。
  • 检索不精准: 依赖关键词匹配,难以理解语义,导致检索结果不相关或无效。
  • 用户体验差: 操作繁琐、学习曲线陡峭,缺乏智能和个性化支持。

AI时代对知识库需求

在信息爆炸和数字化转型背景下,企业需要更加智能的知识库。结合AI大模型的知识库具备以下优势:

  • 语义级检索: 通过语义理解,提供精准的查询结果。
  • 智能交互: 支持自然语言对话,用户体验更佳。
  • 自动化维护: 实现数据的自动整合与更新,降低维护成本。

在大模型的加持下,让以上问题有了新的解法,今天我们来介绍FastGPT如何利用AI大模型重新定义传统知识库。

01.

FastGPT知识库工作原理

01 FastGPT简介

FastGPT是一个基于大语言模型(LLM)的智能化平台,擅长理解和处理自然语言。它通过深度学习技术,可以从各种数据源中自动提取和整合信息,生成语义丰富的知识库,并实现智能化的响应和检索。

02 FastGPT知识库工作原理

图片

  1. 数据预处理:将文本拆分成更小的片段,比如:句子、段落。

  2. 文本向量化:利用大模型生成语义高维向量。

  3. 索引构建:将生成的语义向量构建成索引,通常包括向量索引和倒排索引。索引有助于快速检索相关片段,提高响应速度。

  4. 检索与匹配:当用户查询时,查询内容也会被向量化,并在索引中匹配相关的语义向量

  5. AI对话:利用大模型的上下文理解能力,理解用户需求,生成自然回答。

02.

搭建FastGPT知识库步骤

我们先来看一张FastGPT的部署架构图,主要包括FastGPT、MongoDB、PostgreSQL、OneAPI:

图片

FastGPT有多个版本,分别为PgVector、Milvus、zilliz cloud,分别对应不同的配置要求,如下图:

图片

文本仅作演示,因此选择PgVector版本

前置工作

Step1 确保网络环境

如果使用OpenAI等国外模型接口,请确保可以正常访问,否则会报错:Connection error

Step2 准备 Docker 环境

# 安装 Docker
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
systemctl enable --now docker
# 安装 docker-compose
curl -L https://github.com/docker/compose/releases/download/v2.20.3/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
# 验证安装
docker -v
docker-compose -v
# 如失效,自行百度~

开始部署

Step1 下载 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

# pgvector 版本(测试推荐,简单快捷)
curl -o docker-compose.yml https://raw.githubusercontent.com/labring/FastGPT/main/files/docker/docker-compose-pgvector.yml
# milvus 版本
# 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

Step2 启动容器

在 docker-compose.yml 同级目录下执行。请确保docker-compose版本最好在2.17以上,否则可能无法执行自动化命令。

# 启动容器
docker-compose up -d
# 等待10s,OneAPI第一次总是要重启几次才能连上Mysql
sleep 10
# 重启一次oneapi(由于OneAPI的默认Key有点问题,不重启的话会提示找不到渠道,临时手动重启一次解决,等待作者修复)
docker restart oneapi

Step3 打开 OneAPI 添加模型

简单说明一下OneAPI的作用和原理,这里可以把OneAPI当作一个接口网关:

  • 默认情况下,FastGPT 只配置了 GPT 的模型,如果你需要接入其他模型,需要进行一些额外配置。
  • One API 是一个 OpenAI 接口管理 & 分发系统,可以通过标准的 OpenAI API 格式访问所有的大模型,开箱即用。
  • FastGPT 可以通过接入 One API 来实现对不同大模型的支持

通过 ip:3001 访问OneAPI,默认账号为 root 密码为 123456

在oneapi中添加合适的AI模型渠道,如果搭建服务器可以访问openai,则可以跳过此步骤.

图片

如果想使用国内大模型或者本地部署的模型,*下文会涉及*

Step4 访问 FastGPT

目前可以通过 ip:3000 直接访问(注意防火墙)。登录用户名为 root,密码为docker-compose.yml环境变量里设置的 DEFAULT_ROOT_PSW

图片

02.

接入国产大模型

如果无法科学上网,或者想接入国产大模型,甚至知识库可能设置一些敏感数据,想接入本地大模型的,可以参考本章节,这里以接入国产大模型为例,接入本地大模型类似。

FastGPT可以统一接入不同模型的核心原理,是借助了另一个开源项目的能力:oneapi

项目地址:https://github.com/songquanpeng/one-api

Step1 打开oneapi,添加渠道

图片

因为这里只是做演示用途,我们可以使用阿里灵积提供的免费开源大模型

模型列表:https://help.aliyun.com/zh/model-studio/getting-started/models

我们这里使用 qwen1.5-1.8b-chat 作为文本处理模型,text-embedding-v2 作为索引模型(文本向量)

密钥获取地址:https://dashscope.console.aliyun.com/apiKey

图片

Step2 测试渠道

图片

添加 text-embedding-v2 渠道方法同理

Step3 修改FastGPT配置文件

测试通过后,我们需要修改FastGPT的配置文件,然后重启FastGPT

打开 fastgpt/config.json,在llmModels下添加 qwen1.5-1.8b-chat 的配置,注意 datasetProcess 需要设置为 true,如下图所示:

图片
在这里插入图片描述

在 vectorModels 标签下添加 text-embedding-v2

图片
在这里插入图片描述

重启FastGPT

docker-compose down
docker-compose up -d

Step4 创建知识库

打开FastGPT,点击左侧“知识库”,右上角点击 “创建”

图片

选择“通用知识库

图片

文本处理模型选择刚刚配置好的 qwen1.5-1.8b-chat,索引模型选择 text-embedding-v2

图片

创建完成后,进入知识库,点击创建/导入,这里以导入文本数据集为例

图片

这里准备了一个docx文本数据,这里描述了发生故障的时间和根因。实际操作中,可以使用企业内部沉淀的学习资料,故障复盘等、操作手册等

图片

导入时,选择“本地文件

图片

图片

数据处理方式

图片

关于训练模式的选择:

  • 直接分段:将文本按一定的规则进行分段处理后,转成可进行语义搜索的格式,适合绝大多数场景。不需要调用模型额外处理,成本低。
  • 增强处理(实验):通过子索引以及调用模型生成相关问题与摘要,来增加数据块的语义丰富度,更利于检索。需要消耗更多的存储空间和增加 AI 调用次数。
  • 问答拆分:根据一定规则,将文本拆成一段较大的段落,调用AI 为该段落生成问答对。有非常高的检索精度,但是会丢失很多内容细节。

上传数据

图片

图片

创建应用

点击工作台,创建“简易应用”

图片

填写应用名字,选择“知识库+对话引导”

图片

创建成功后,进入应用,修改AI模型:qwen1.5-1.8b-chat

图片

选择AI模型

可以根据需要调整模型温度、回复上限、和聊天记录数量

图片

关联知识库

图片

选择刚刚创建的知识库

图片

图片

发布应用

图片

问答测试

选择我们刚刚创建好的应用,就可以开始聊天了

图片

我们尝试提问某天发生了什么故障,以及根因是什么?

图片

可以看出,FastGPT根据知识库给出了准确答案,根据AI进行了扩展,问答下方有标注答案应用的出处

图片

点击回答下方的查看详情,可以看到知识库的工作流程。

首先,FastGPT会根据将用户提问的问题交给向量模型做向量化,然后匹配本地知识库索引

图片

结合上下文发送给AI大模型,生成自然语言的回答。

图片

这里再简单说明下使用文本向量作为索引模型的原因:

文本向量的原理

  1. 什么是文本向量:可以把文本向量想象成一个由数字组成的“坐标”,用来表示一句话或一段文字。比如,假设我们把每句话都放在一张巨大的地图上,这些数字就是地图上表示它们的位置。
  2. 为什么要这样做:当两句话的意思很相似时,它们的“坐标”会在地图上靠得很近;如果意思差很多,坐标就会离得远。这种方式能帮助计算机理解哪些句子在说同一件事。
  3. 如何生成这种“坐标”:生成这些坐标的方法有很多,比如通过机器学习,让计算机“读”大量的文本,学会用数字来表达语义信息。这样一来,计算机就能理解一些复杂的语言含义,而不仅仅是词语的表面意思。

FastGPT知识库使用文本向量的原因

  1. 更聪明的搜索:传统的搜索只能匹配关键词,如果用户的提问和知识库中的表达方式不完全一样,可能找不到正确的答案。而用文本向量,系统可以理解提问的真正意思,即使用词不同,也能找到相关的答案。
  2. 应对不同的说法:人们表达同一个意思的方式可能千差万别。文本向量能让系统识别这些不同的表达,从而更好地理解用户的问题。
  3. 更灵活:随着知识库中的信息增加,文本向量可以帮助系统更容易地找到新知识,保持回答的准确性,而不需要频繁更新或手动调整。

总的来说,FastGPT之所以用文本向量作为索引方式,是因为它可以更智能、更灵活地理解和处理用户的提问,让系统在搜索和回答问题时更加精准。

总结

本篇文章详细介绍了如何使用FastGPT搭建向量知识库。FastGPT充分利用了大模型的自然语言处理和对话能力,大幅提高了知识搜索的精确度,同时优化了用户的使用体验。

此外,文章还阐述了FastGPT知识库的工作原理。通过将文本转换为向量来建立索引,并借助大模型的上下文理解能力,系统能够为用户生成准确且符合语境的回答。

这种方法不仅提升了信息检索的效率,还显著改善了用户与知识库的交互方式。

如何学习AI大模型?

作为一名热心肠的互联网老兵,我决定把宝贵的AI知识分享给大家。 至于能学习到多少就看你的学习毅力和能力了 。我已将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

一、全套AGI大模型学习路线

AI大模型时代的学习之旅:从基础到前沿,掌握人工智能的核心技能!

img

二、640套AI大模型报告合集

这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。

img

三、AI大模型经典PDF籍

随着人工智能技术的飞速发展,AI大模型已经成为了当今科技领域的一大热点。这些大型预训练模型,如GPT-3、BERT、XLNet等,以其强大的语言理解和生成能力,正在改变我们对人工智能的认识。 那以下这些PDF籍就是非常不错的学习资源。

img

四、AI大模型商业化落地方案

img

作为普通人,入局大模型时代需要持续学习和实践,不断提高自己的技能和认知水平,同时也需要有责任感和伦理意识,为人工智能的健康发展贡献力量。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

day03-面向对象-内部类泛型常用API

一、内部类 内部类是类中的五大成分之一(成员变量、方法、构造器、代码块、内部类) 如果一个类定义在另一个类的内部,这个类就是内部类。 场景:当一个类的内部,包含了一个完整的事物,且这个事物没有必要单…

Go发布自定义包

1、初始化go.mod go mod init github.com/xumeng03/images2、编写包内容 这里只是一个简单的压缩jpg/jpeg图片例子,代码参考 https://github.com/disintegration/imaging 2.1、fs.go package imagesimport ("image""io""os""p…

利用通义灵码实现我的第一次开源贡献

作者:重庆邮电大学计算机学院李逸雄 结缘开源 最早了解开源是从学校的兴趣组织开始的。2023 年 10 月 21 日,openSUSE 亚洲峰会在我们学校召开,这次会议汇聚了许多来自 openSUSE 社区贡献者以及对开源感兴趣的爱好者们。我第一次知道有这么…

postman使用记录

输入密码,地址 然后输入格式为json 在 body里写入传参 然后点击发送即可

裸机:SD卡启动详解

内存和外存的区别 内存和外存在计算机系统中扮演着不同的角色,它们之间存在显著的差异。以下是内存和外存之间几个主要方面的区别: 存储特性与易失性 内存(Memory):通常指的是随机存取存储器(RAM&#x…

Java面试题·区别题·JavaSE部分

系列文章目录 总章 Java区别题 文章目录 系列文章目录前言private/默认/protected/public权限修饰符的区别&和&&区别和联系,I和II区别和联系if和switch的不同之处和equals的区别和联系数组做形参和可变参数做形参联系和区别接口和抽象类的异同之处面向…

Android设备如何异地访问本地部署的code-server随时随地远程开发

文章目录 前言1.Ubuntu本地安装code-server2. 安装cpolar内网穿透3. 创建隧道映射本地端口4. 安卓平板测试访问5.固定域名公网地址6.结语 前言 本文主要介绍如何在Linux Ubuntu系统安装code-server,并结合cpolar内网穿透工具配置公网地址,轻松实现使用安…

企业级开发——Git使用

一 Git介绍 1 什么是版本控制 版本控制是指对软件开发过程中各种程序代码、配置文件及说明文档等文件变更的管理,是软件配置管理的核心思想之一。 2 为什么使用版本控制 采用手动复制的方式管理版本,会造成版本管理混乱,而通过版本控制管…

测试使用开源异构迁移工具dbswitch

dbswitch: 异构数据库迁移同步(搬家)工具 (base) rootnode13:~# cat /etc/issue Ubuntu 20.04.5 LTS \n \l (base) rootnode13:~# curl -k -sSL https://gitee.com/dromara/dbswitch/attach_files/1878800/download > /tmp/dbswitch_install.sh && bash /tmp/dbsw…

地级市地理相邻矩阵(地级市名称版、行政区划代码版)

地级市地理相邻矩阵(地级市名称版、行政区划代码版) 范围:294个地级市 格式:地级市名称版、行政区划代码版 说明:数据为同省下城市之间的相邻矩阵,表示同一省份内各个城市相互之间邻近关系。如果同一省份…

VTK+Qt+Cmake+VS的环境搭建

VTKQtCmakeVS的环境搭建 一、准备工作二、VTK源码安装过程三、错误排查四、Cmake中引用VTK五、代码示例 本文的主要内容:简单介绍如何使用Cmake编译安装VTK源代码;如何配置VTK在Qt中的使用环境;如何以VS作为IDE在C下使用QtVTK。 哪些人适合阅…

android studio .android和.gradle迁移到其他盘

操作 可以看到gradle和android占用不小 .android 将C盘的.android迁移到D盘 切换到.android下面的avd目录,修改ini文件 .gradle 将.gradle复制到D盘 在Android studio的文件夹下面新建一个文件夹,我这里命名androidcache。接着在Android studio的…

「bug」nvitop ERROR: Failed to initialize curses

nvitop 作为一个优秀个 Nvidia显卡查询库,简单易用且显示信息十分丰富,相比 Nvidia-smi 更方便,简直是每个 开发人员必备的库,安装也十分方便,直接采用 pip install nvitop 即可,调用的时候也是直接在 Term…

51单片机波特率的计算方法

通过51单片机的波特率,来计算定时器的初始值。 定时器的溢出率公式 : 1 / ov 1/f * 12 *(256 - init) (ov为溢出率,溢出频率; init 为初始值; f为时钟频率, 比如12M或者11.0592M等&#xff09…

自己开发完整项目一、登录注册功能-01

一、创建spingboot项目框架 1.首先创建一个空的项目作为父项目,之后的所有都在此基础上创建模块进行开发。 2.创建负责登录注册功能模块 二、启动项目 1.出现如下错误,代表着端口号被占用,这个时候,我们可以进行端口号的修改。 …

如何从笔记本电脑或台式电脑恢复丢失的照片和视频

意外删除或丢失笔记本电脑或 PC 上的照片和视频是一个常见问题。不用担心,在此博客中,我们解释了从笔记本电脑或 PC 恢复丢失的照片和视频的各种方法。专业的数据恢复软件,例如奇客 数据恢复工具,可以帮助用户找回丢失的文件。 提…

微信小程序uni :class不支持xxx语法

问题代码&#xff1a; <view class"cellTop"><view>{{list.payTime}}</view><view :class"payStatusClass${list.payStatus}">{{payStatusDe[list.payStatus]}}</view></view> .payStatusClass1{color: rgb(246, 122,…

传输层协议-UDP数据报

UDP协议的特点 面向数据报&#xff0c;无连接&#xff0c;不可靠&#xff0c;全双工 面向数据报&#xff1a;是指该协议在传输数据的时候使用的是数据报&#xff1b; 无连接&#xff1a;指的是发送数据不需要两个进程连接在一起&#xff0c;类似生活中我们发送短信&#xff0…

代码随想录跟练第九天——LeetCode 232.用栈实现队列、225. 用队列实现栈、20. 有效的括号、1047. 删除字符串中的所有相邻重复项

拔了智齿后&#xff0c;好久没有总结了&#xff0c;先补一点 232.用栈实现队列 力扣题目链接(opens new window) 使用栈实现队列的下列操作&#xff1a; push(x) -- 将一个元素放入队列的尾部。 pop() -- 从队列首部移除元素。 peek() -- 返回队列首部的元素。 empty() -- …

解锁App推广新姿势,Xinstall带你玩转投放查看

在移动互联网时代&#xff0c;App推广和运营成为了各大企业和开发者关注的焦点。然而&#xff0c;在这个过程中&#xff0c;推广者常常面临一些痛点&#xff0c;比如无法实时查看投放效果、数据不透明、难以精准定位目标用户等。这些问题不仅影响了推广效果&#xff0c;还可能导…