从 0 到 1,用 FastGPT 搭建专属私有化知识库与超智能 AI 助理

server/2025/1/11 7:00:42/

田园课堂私有化知识库搭建流程与总结

引言

在当今数字化时代,知识管理与智能交互对于教育领域的创新发展至关重要。FastGPT作为一款高效的AI流程构建可视化开源工具,为田园课堂实现私有化知识库的快速搭建提供了有力支持。本文将详细阐述使用FastGPT搭建田园课堂私有化知识库的流程,并分享相关经验总结。

同时,我们引入laf这一开源云开发平台。它提供了云函数、云数据库、云存储等一系列开箱即用的应用资源,使开发者能够专注于业务逻辑的开发,无需在服务器配置等繁琐事务上耗费精力,从而快速将创意转化为实际应用。

特别说明:本文重点聚焦于利用FastGPT的“高级编排”功能构建专属AI助理。对于FastGPT的部署、oneAPI工具部署、知识库的创建以及自然语言大模型的选择等内容,将不再详细阐述。如需了解这些方面的信息,可参考上一篇文章:私有化知识库本地部署打造专属ai助理(FastGpt本地部署全过程及相关模型部署训练) 。

搭建使用工具及模型

模型选用

  1. GLM-3-turbo:作为强大的LLM大模型,主要负责自然语言处理任务,能够理解和生成高质量的文本回复,为AI对话提供核心的语言处理能力。
  2. m3e-large:该模型作为数据索引向量模型,在知识库的检索过程中发挥关键作用,能够高效地对文本数据进行向量化处理,以便快速准确地找到与用户问题相关的知识内容 。

云函数插件扩展

通过laf构建云函数,为个人助理功能的拓展提供了便利。例如,通过爬虫技术接入bing搜索,极大地丰富了AI获取信息的渠道,提升了其回答问题的全面性和准确性。

高级编排工具

  1. 问题分类:能够对用户输入的问题进行智能分类,依据分类结果执行不同的后续操作。尽管在某些模糊场景下,分类效果可能不尽如人意,但在整体流程中,它为后续的针对性处理奠定了基础。
  2. 工具调用:工具的范畴广泛,既可以是系统内部的模块,如AI对话、知识库搜索、HTTP模块等,也可以是外部插件。通过灵活调用这些工具,LLM能够实现动态决策,告别固定流程的束缚,更好地适应多样化的用户需求。
  3. 知识库搜索:支持从一个或多个使用相同向量模型的知识库中进行向量搜索,确保能够精准定位到与问题匹配的知识内容,为准确回答用户问题提供有力支撑。
  4. 判断器:可对任意变量进行IF条件判断。当满足设定条件时,执行IF分支;若不满足,则执行ELSE分支。这种灵活的判断机制,使得整个流程能够根据不同的情况进行智能化的流程走向选择。
  5. 获取当前时间(内置插件):能够获取当前用户所在时区的准确时间,为涉及时间相关的问题提供精准解答。
  6. 文本内容提取:可以根据文本的具体内容,提取出关键信息(如搜索关键字),帮助后续的搜索和处理流程更加精准高效。
  7. 文本加工(内置插件):对输入文本进行预设的固定加工处理。入参仅支持字符串和数字格式,并以变量形式应用在文本编辑区域,以满足特定的文本处理需求。
  8. HTTP请求(接入网络):该模块类似于Postman和ApiFox等工具,能够向指定地址发送HTTP请求,实现与外部网络资源的交互,为获取更多信息提供途径。
  9. AI对话:负责与用户进行自然流畅的对话交互,利用LLM模型生成合理的回复内容。

搭建流程

创建知识库

在创建知识库时,建议优先使用docx、csv或txt格式的文件。由于ppt等包含图片的文件在内容索引方面表现欠佳,可能无法达到预期的检索效果。若存在ppt、pptx等文件,可借助wps将其转换为docx文件后再进行导入。

image-20240607150642357

创建应用

模型类型说明
  1. 简易模板:直接运用LLM自然语言处理模型,类似于市面上常见的通义千问、文心一言等,缺乏额外的处理逻辑,适用于简单的语言交互场景。
  2. 对话引导 + 变量:此模板通常用于在对话起始阶段,引导使用者输入或选择一些数据,并将这些数据存储下来,以便后续流程使用。例如在搭建角色扮演AI、小说生成AI时,可用于在开头收集性别、姓名等信息 。
  3. 知识库 + 对话引导:能够搭建较为基础的AI,对于需求相对简单的AI助理场景基本能够满足。不过,其缺点在于每次消息交互都需要进行知识库搜索,可能会在一定程度上影响效率。
  4. 问题分类 + 知识库:每次接收到信息后,首先对问题进行分类,然后依据分类结果有选择地执行后续的交互逻辑。本次搭建私有化知识库,便是以此模板为基础展开。

image-20240607152218982

创建完成的基础模板如下:

image-20240607153504866

编排问题分类

针对可能被询问的各类问题,进行分类编排,并设置当前模型的背景知识以及聊天记录。

具体设置说明
  1. 聊天记录设置:除身份询问相关的聊天记录设置为3(数值过大可能导致身份信息泄露,过小则关联度不足)外,其他均设置为25,这样的设置有助于提升消息之间的关联度。
  2. 分类流向:分类1和分类2接入知识库搜索,同时接入网络请求;分类3(时间相关)接入工具调用;分类4和分类6共同接入一个AI对话;分类5(询问身份)单独接入一个AI对话。
分类逻辑阐述
  1. 分类1和2接入知识库搜索:这两类问题获取的对话内容需要优先从知识库中寻找答案。如此分类便于后续对流程和知识库进行维护、扩展与修改。同时接入网络请求,以便在知识库无法提供满意答案时,从网络获取更多信息。
  2. 分类3(时间)单独分类:鉴于各类LLM大模型在时间回答上容易出现错误,接入工具调用能够确保时间信息的准确性。
  3. 分类4和6接入AI对话:该AI用于在前面的AI或其他分类已经做出正确回答的基础上,进行补充回答。这样不仅可以提升问题回答的关联信息丰富度,还能避免AI模型因过度请求而造成资源浪费。
  4. 分类5(询问身份)单独接入AI对话:通过这种方式,能够有效避免在询问身份等敏感信息时出现错误回答。

image-20240607153924191

分类1和2接入知识库搜索

  1. 知识库搜索优化:对知识库搜索进行了问题优化设置,将问题最低相关度设定为0.82。该数值代表询问问题与知识库中问题及内容的相关程度,0.82这一数值较为适中,能够在一定程度上避免回复错误答案。
  2. 判断器设置:通过判断器判断该问题在知识库中是否存在,若结果为null,则表示在知识库中完全不存在相关内容。

image-20240607155543995

知识库存在类似问题的处理流程

当知识库中存在与用户问题类似的问题时,执行以下流程:

image-20240607160042548

知识库不存在相关问题的处理流程
  1. 提取问题关键词进行网络搜索:由AI大模型负责提取问题关键词。为防止关键词提取失败的情况发生,加入判断器对提取结果进行判断。若提取成功,则直接使用提取的关键词进行搜索;若提取失败,则依据用户的原始问题进行bing搜索。

image-20240607160227629

  1. Laf部署书写bing爬虫:具体部署书写流程可参考官方文档:laf 概览 | Laf 开发文档 。以下是实现代码:
import cloud from '@lafjs/cloud'
const jsdom = require("jsdom");
const { JSDOM } = jsdom;export default async function (keyword) {const url = `https://cn.bing.com/search?q=${keyword.query.keyword}`let data = ""const res = await fetch(url, {method: 'POST',headers: {'Cookie': "MUIDB=04572BEF4814644E033F3F9049A8650D" // 可通过浏览器开发者工具进行查看你的用户MUIDB}})const html = await res.text()const dom = new JSDOM(html).window.document;// 获取搜索结果const searchInfo = dom.querySelector("#b_results")// 获取答案元素const answer = searchInfo.querySelector(".b_ans")if (answer) {data += answer.textContent.replace(/[a-zA-Z]/g, "") + "\n"}// 获取相关答案元素const algo = searchInfo.querySelectorAll(".b_algo")algo.forEach(item => {const an = item.querySelector("p")if (!an) return// 去除网页2020年11月21日const b = an.textContent.replace(/网页.*年.*月.*日/g, "").replace("·", "").replace("网页", "")data += b + "\n"})return {code : 0, data: data}
}
  1. 接入http请求bing爬虫:通过以下设置,将bing爬虫功能接入到整体流程中。

image-20240607160657277

  1. 爬虫结果进行文本加工对话:对爬虫获取的结果进行文本加工处理,使其更符合对话输出的要求。

image-20240607161448730

  1. 完整流程图:上分支为IF逻辑,下分支为ELSE逻辑。

image-20240607161545254

分类3时间处理流程

对于分类3(时间相关问题),设置如下流程:

image-20240607161739223

分类4和6AI对话设置

针对分类4和6,接入AI对话模块,具体设置如下:

image-20240607161901206

分类5询问身份AI对话设置

对于分类5(询问身份相关问题),单独接入AI对话,并进行如下设置:

image-20240607161938582

通过以上详细的流程步骤,我们成功利用FastGPT搭建了田园课堂的私有化知识库,并借助laf平台实现了功能的扩展与优化,为田园课堂的智能化知识管理与交互提供了有力的技术支持。


http://www.ppmy.cn/server/157395.html

相关文章

【C++/控制台】2048小游戏

源代码&#xff1a; #include <iostream> #include <windows.h> #include <stdio.h> #include <math.h> #include <stdlib.h> #include <conio.h> #include <time.h>// #define KEY_DOWN(VK_NONAME) ((GetAsyncKeyState(VK_NONAME)…

【C++】揭开C++类与对象的神秘面纱(首卷)(类的基础操作详解、实例化艺术及this指针的深究)

文章目录 一、类的定义1.类定义格式2.类访问限定符3.类域 二、类的实例化1.实例化概念2.对象的大小 三、隐藏的this指针与相关练习1.this指针的引入与介绍练习1练习2练习3 一、类的定义 1.类定义格式 在讲解类的作用之前&#xff0c;我们来看看类是如何定义的&#xff0c;在C中…

HarmonyOS开发:ArkTS初识

ArkTS基本语法 ArkTS语言简介 ArkTS是鸿蒙生态的应用开发语言。基本语法风格与TypeScript&#xff08;简称TS&#xff09;相似&#xff0c;在TS的生态基础上进一步扩展&#xff0c;继承了TS的所有特性&#xff0c;是TS的超集。 基本语法概述 扩展能力 基础语法&#xff1a…

系统架构设计师考点—计算机网络

一、备考指南 计算机网络知识主要考查的是网络体系结构、网络协议、IP地址、网络规划设计等&#xff0c;同时也是重点考点&#xff0c;在系统架构设计师的考试中只会在选择题里考查&#xff0c;占3~5分。 二、计算机按分布范围分类 三、传输介质 1、双绞线 双绞线将多根铜线按…

【GIt原理与使用】Git远程仓库

一、理解分布式版本控制系统 我们目前所说的所有内容&#xff08;工作区&#xff0c;暂存区&#xff0c;版本库等等&#xff09;&#xff0c;都是在本地&#xff01;也就是在你的笔记本或者计算机上。而我们的 Git 其实是分布式版本控制系统&#xff01;什么意思呢&#xff1f…

micro-app【微前端系列教程】禁用样式隔离

全局禁用样式隔离 所有应用的样式隔离都会停止 import microApp from micro-zoe/micro-appmicroApp.start({disableScopecss: true, // 默认值false })指定子应用取消禁用样式隔离 <micro-app namexx urlxx disableScopecssfalse></micro-app>指定子应用禁用样式…

Spring Boot3 配合ProxySQL实现对 MySQL 主从同步的读写分离和负载均衡

将 ProxySQL 配合 Spring Boot 使用&#xff0c;主要的目的是在 Spring Boot 应用程序中实现对 MySQL 主从同步的读写分离和负载均衡。这样&#xff0c;你可以利用 ProxySQL 自动将写操作路由到主库&#xff0c;而将读操作路由到从库。 1. 准备工作 确保你的 MySQL 主从同步环…

PHP民宿酒店预订系统小程序源码

&#x1f3e1;民宿酒店预订系统 基于ThinkPHPuniappuView框架精心构建的多门店民宿酒店预订管理系统&#xff0c;能够迅速为您搭建起专属的、功能全面且操作便捷的民宿酒店预订小程序。 该系统不仅涵盖了预订、退房、WIFI连接、用户反馈、周边信息展示等核心功能&#xff0c;更…