10分钟构建本地知识库,让 ChatGPT 更加懂你

news2024/11/26 17:43:18

大家好,本文将从零开始构建本地知识库,从而辅助 ChatGPT 基于知识库内容生成回答。

这里再重复下部分核心观点:

  1. 向量:将人类的语言(文字、图片、视频等)转换为计算机可识别的语言(数组)。

  2. 向量相似度:计算两个向量之间的相似度,表示两种语言的相似程度。

  3. 语言大模型的特性:上下文理解、总结和推理。

这三个概念结合起来,就构成了 “向量搜索 + 大模型 = 知识库问答” 的公式。

技术交流群

建了技术答疑、交流群!想要进交流群、资料的同学,可以直接加微信号:mlc2060。加的时候备注一下:研究方向 +学校/公司+CSDN,即可。然后就可以拉你进群了。

前沿技术资讯、算法交流、求职内推、算法竞赛、面试交流(校招、社招、实习)等、与 10000+来自港科大、北大、清华、中科院、CMU、腾讯、百度等名校名企开发者互动交流~

方式①、添加微信号:mlc2060,备注:技术交流
方式②、微信搜索公众号:机器学习社区,后台回复:技术交流

在这里插入图片描述

一、FastGPT 部署

1.介绍

FastGPT 是目前 Prompt 串接做的最好的项目,知识库核心流程图如下:
在这里插入图片描述

从官方简介也可以看出很牛逼:

FastGPT 是一个基于 LLM 大语言模型的知识库问答系统,提供开箱即用的数据处理、模型调用等能力。同时可以通过 Flow 可视化进行工作流编排,从而实现复杂的问答场景!

2. 安装 Docker

话不多说直接开干,首选需要我们安装 Docker 应用,这里以 Windows 安装为例(其他系统可自行百度解决)。

Docker 官网 :https://www.docker.com/get-started/

进入官网双击下载的 Docker for Windows Installer 安装文件,一路 Next,点击 Finish 完成安装。

安装完成后,Docker 会自动启动。通知栏上会出现个小鲸鱼的图标,这表示 Docker 正在运行。

我装的 docker-desktop 自带了 docker-compose,如果未安装可以去官网进行下载。

Docker-Compose 官网:https://docs.docker.com/desktop/install/windows-install/

安装 Docker 还是比较简单,如果遇到大家可直接百度解决,网上这类文章很多。

3. 配置文件

先创建一个文件夹

# 创建文件夹
mkdir fastgpt

# 进入文件夹
cd fastgpt

创建 config.json,内容如下:

{
  "FeConfig": {
    "show_emptyChat": false,
    "show_contact": false,
    "show_git": false,
    "show_doc": true,
    "systemTitle": "个人知识库",
    "limit": {
      "exportLimitMinutes": 0
    },
    "scripts": []
  },
  "SystemParams": {
    "vectorMaxProcess": 15,
    "qaMaxProcess": 15,
    "pgIvfflatProbe": 20
  },
  "ChatModels": [
    {
      "model": "gpt-3.5-turbo",
      "name": "GPT35-4k",
      "contextMaxToken": 4000,
      "quoteMaxToken": 2000,
      "maxTemperature": 1.2,
      "price": 0,
      "defaultSystem": ""
    },
    {
      "model": "gpt-3.5-turbo-16k",
      "name": "GPT35-16k",
      "contextMaxToken": 16000,
      "quoteMaxToken": 8000,
      "maxTemperature": 1.2,
      "price": 0,
      "defaultSystem": ""
    },
    {
      "model": "gpt-4",
      "name": "GPT4-8k",
      "contextMaxToken": 8000,
      "quoteMaxToken": 4000,
      "maxTemperature": 1.2,
      "price": 0,
      "defaultSystem": ""
    }
  ],
  "VectorModels": [
    {
      "model": "text-embedding-ada-002",
      "name": "Embedding-2",
      "price": 0,
      "defaultToken": 500,
      "maxToken": 3000
    }
  ],
  "QAModel": {
    "model": "gpt-3.5-turbo-16k",
    "name": "GPT35-16k",
    "maxToken": 16000,
    "price": 0
  },
  "ExtractModel": {
    "model": "gpt-3.5-turbo-16k",
    "functionCall": true,
    "name": "GPT35-16k",
    "maxToken": 16000,
    "price": 0,
    "prompt": ""
  },
  "CQModel": {
    "model": "gpt-3.5-turbo-16k",
    "functionCall": true,
    "name": "GPT35-16k",
    "maxToken": 16000,
    "price": 0,
    "prompt": ""
  },
  "QGModel": {
    "model": "gpt-3.5-turbo",
    "name": "GPT35-4k",
    "maxToken": 4000,
    "price": 0,
    "prompt": "",
    "functionCall": false
  }
}

再创建 docker-compose.yml 文件,内容如下:

# 非 host 版本, 不使用本机代理
version: '3.3'

services:
  pg:
    # 使用阿里云的 pgvector 镜像
    image: registry.cn-hangzhou.aliyuncs.com/fastgpt/pgvector:v0.4.2
    container_name: pg
    restart: always
    # 生产环境建议不要暴露端口
    ports:
      - "5432:5432"
    networks:
      - fastgpt
    # 环境变量配置,首次运行生效,修改后需删除持久化数据再重启
    environment:
      - POSTGRES_USER=username
      - POSTGRES_PASSWORD=password
      - POSTGRES_DB=fastgpt
    # 卷挂载,包括初始化脚本和数据持久化
    volumes:
      - ./pg/init.sql:/docker-entrypoint-initdb.d/init.sh
      - ./pg/data:/var/lib/postgresql/data

  mongo:
    # 使用阿里云的 mongo 镜像
    image: registry.cn-hangzhou.aliyuncs.com/fastgpt/mongo:5.0.18
    container_name: mongo
    restart: always
    # 生产环境建议不要暴露端口
    ports:
      - "27017:27017"
    networks:
      - fastgpt
    # 环境变量配置,首次运行生效,修改后需删除持久化数据再重启
    environment:
      - MONGO_INITDB_ROOT_USERNAME=username
      - MONGO_INITDB_ROOT_PASSWORD=password
    # 卷挂载,包括数据和日志
    volumes:
      - ./mongo/data:/data/db
      - ./mongo/logs:/var/log/mongodb

  fastgpt:
    container_name: fastgpt
    # 使用阿里云的 fastgpt 镜像
    image: registry.cn-hangzhou.aliyuncs.com/david_wang/fastgpt:latest
    ports:
      - "3000:3000"
    networks:
      - fastgpt
    # 确保在 mongo 和 pg 服务启动后再启动 fastgpt
    depends_on:
      - mongo
      - pg
    restart: always
    # 可配置的环境变量
    environment:
      - DEFAULT_ROOT_PSW=123456
      - OPENAI_BASE_URL=https://api.openai.com/v1
      - CHAT_API_KEY=sk-*****
      - DB_MAX_LINK=5
      - TOKEN_KEY=wenwenai
      - ROOT_KEY=wenwenai
      - FILE_TOKEN_KEY=filetoken
      - MONGODB_URI=mongodb://username:password@mongo:27017/fastgpt?authSource=admin
      - PG_URL=postgresql://username:password@pg:5432/fastgpt
    # 配置文件的卷挂载
    volumes:
      - ./config.json:/app/data/config.json

# 定义使用的网络
networks:
  fastgpt:

注意修改 docker-compose.yml 中的 CHAT_API_KEY 为你的 OpenAI Key 即可。

4. 启动

执行命令启动本地知识库:

# 在 docker-compose.yml 同级目录下执行
docker-compose pull
docker-compose up -d

执行完成后就可以在浏览器上通过 http://localhost:3000/ 网址来访问个人知识库了。

二、构建知识库

基于上述操作我们已经成功访问到个人知识库页面,接下来带大家创建导入个人数据进行访问。

登录用户名为 root,密码为 docker-compose.yml 环境变量里设置的 DEFAULT_ROOT_PSW。

在这里插入图片描述

1. 创建知识库

成功登录后,新建一个知识库,这里将我的个人经历导入,所以取名为知白个人经历

在这里插入图片描述

通过文件将个人经历导入到知识库中。

在这里插入图片描述

确认后就开始将当前数据转化为向量数据。
在这里插入图片描述

全文大约2300多字,大概3~5分钟就导入完成了。由于文本限制问题,按照固定字数拆分为了8个数据集。

在这里插入图片描述

至此,我们的个人知识库已经建好了。我们尝试进行问答,这里的 0.7881 就是向量相似度,相似度越高的越靠前。

在这里插入图片描述

2. 使用知识库

创建一个应用来使用知识库。

在这里插入图片描述

这里简单设置了一下开场白,选择并绑定对应知识库。

在这里插入图片描述

开始对话,效果展示如下:

在这里插入图片描述

三、总结

我们从零到一完成了本地个人知识库的搭建,整体花费时间也较短,刨除安装 Docker 的时间预计在10分钟左右。

后续对召回内容从多方面进行详细分析,从而使回答内容更加符合我们的预期。

关注我 一起做AI时代的弄潮儿!

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

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

相关文章

ios开发 之 网络通信

第一节:URL、http 简介 运营商提供的DNS服务器(有可能挂,所以有时候通过ip可以打开,通过域名不可以访问)逐级递增请求,解析域名 google 提供的dns服务器8.8.8.8 编码怎么来的: 最开始是ASCII码…

【Web】/proc利用相关例题wp

先贴一篇文章一起学习一下 [CTF]proc目录的应用 - CodeAntenna ①[HDCTF 2023]YamiYami 点击Read somethings直接跳转到了百度 从url中发现存在任意文件读取,因为不知道flag在哪,所以考虑读环境变量 payload: ?urlfile:///proc/1/environ 拿到fla…

系列十七、各种各样的bean

一、Spring bean 1.1、概述 一句话,被Spring容器管理的bean就是Spring bean。 二、Java bean VS Spring bean 2.1、概述 Java bean是程序员自己new 出来的,Spring bean是Spring工厂创建出来的。 三、配置bean的方式 3.1、概述 所谓配置bean&#xff0…

【精选必读】MyBatis关联查询及注解开发

文章目录 MyBatis关联查询MyBatis一对一关联查询创建持久层接口创建映射文件配置文件注册映射文件测试一对一关联查询 MyBatis一对多关联查询创建持久层接口创建映射文件测试一对多关联查询 MyBatis多对多关联查询创建持久层接口创建映射文件测试多对多关联查询 MyBatis分解式查…

性能测试必看系列之Jmeter:硬件性能监控指标

硬件性能监控指标 一、性能监控初步介绍 性能测试的主要目标 1.在当前的服务器配置情况,最大的用户数 2.平均响应时间ART,找出时间较长的业务 3.每秒事务数TPS,服务器的处理能力 性能测试涉及的内容 1.客户端性能测试:web前…

一. BEV感知算法介绍

目录 前言1. BEV感知算法的概念2. BEV感知算法数据形式3. BEV开源数据集介绍3.1 KITTI数据集3.2 nuScenes数据集 4. BEV感知方法分类4.1 纯点云方案4.2 纯视觉方案4.3 多模态方案 5. BEV感知算法的优劣6. BEV感知算法的应用介绍7. 课程框架介绍与配置总结下载链接参考 前言 自动…

Nginx常见的中间件漏洞

目录 1、Nginx文件名逻辑漏洞 2、Nginx解析漏洞 3、Nginx越权读取缓存漏洞 这里需要的漏洞环境可以看:Nginx 配置错误导致的漏洞-CSDN博客 1、Nginx文件名逻辑漏洞 该漏洞利用条件有两个: Nginx 0.8.41 ~ 1.4.3 / 1.5.0 ~ 1.5.7 php-fpm.conf中的s…

由于找不到vcruntime140.dll无法继续执行代码-提供5个修复方法分你对比

摘要:本文将介绍vcruntime140.dll文件的作用及其在程序运行中的重要性,并提供五个解决vcruntime140.dll无法继续执行的方法。 一、vcruntime140.dll文件介绍 vcruntime140.dll是Windows操作系统中的一项重要文件,它是由Microsoft Visual C提…

交换技术-电路交换-报文交换-分组交换

交换技术是指主机之间、通信设备之间或主机与通信设备之间为交换信息所采用的数据格式和交换装置的方式。按交换技术可分为:电路交换、报文交换和分组交换。 电路交换 交换(switching),就是按照某种方式动态地分配传输线路的资源。 电路交换是在源结点…

Scrapy爬虫异步框架之持久化存储(一篇文章齐全)

1、Scrapy框架初识(点击前往查阅) 2、Scrapy框架持久化存储(点击前往查阅) 3、Scrapy框架内置管道(点击前往查阅) 4、Scrapy框架中间件(点击前往查阅) Scrapy 是一个开源的、基于…

如何在Ubuntu系统上安装MongoDB

简单介绍 MongoDB是由C语言编写的,是一个基于分布式文件存储的开源数据库系统。在高负载的情况下,添加更多的节点,可以保证服务器性能。MongoDB旨在为WEB应用提供可扩展的高性能数据存储解决方案。MongoDB将数据存储为一个文档,数…

openGauss学习笔记-132 openGauss 数据库运维-查看openGauss状态

文章目录 openGauss学习笔记-132 openGauss 数据库运维-查看openGauss状态132.1 背景信息132.2 前提条件132.3 操作步骤132.4 参数说明132.5 示例 openGauss学习笔记-132 openGauss 数据库运维-查看openGauss状态 132.1 背景信息 openGauss支持查看整个openGauss的状态&#…

【从亮机卡开始的云炼丹】环境配置记录debug

要更改Anaconda环境的默认路径到D盘 可以按照以下步骤操作: 1. 打开Anaconda Prompt(或者命令行窗口)。 2. 输入以下命令更改Anaconda环境的默认路径到D盘: conda config --set envs_dirs D:\Anaconda\envs 这将把Anaconda环境…

【挑战业余一周拿证】二、在云中计算 - 第 2 节 - Amazon EC2 实例类型

第 2 节 - Amazon EC2 实例类型 如果我们想让企业尽可能高效地运作,那就一定要确保员工的技能组合适合他们的角色,就 像我们的咖啡店有不同类型的员工一样,亚马逊云科技也有不同类型的 EC2 实例。每种实例类型 都归属于一个实例系列&#x…

jQuery_08 each函数的使用

each函数的使用 可以循环数组,json,dom对象数组 1.$.each(要循环的内容,function(index,element){处理函数}) 要循环的内容可以是数组,json对象,dom数组 function:循环的处理函数 每个成员都会执行这个函数一次 index&…

Rust语言入门教程(七) - 所有权系统

所有权系统是Rust敢于声称自己为一门内存安全语言的底气来源,也是让Rust成为一门与众不同的语言的所在之处。也正是因为这个特别的所有权系统,才使得编译器能够提前暴露代码中的错误,并给出我们必要且精准的错误提示。 所有权系统的三个规则…

【Linux】Linux项目自动化构建工具 --- make / makefile

👦个人主页:Weraphael ✍🏻作者简介:目前正在学习c和Linux还有算法 ✈️专栏:Linux 🐋 希望大家多多支持,咱一起进步!😁 如果文章有啥瑕疵,希望大佬指点一二 …

tidyverse数据特征学习

目录 特征缩放 1,标准化-scale 2,归一化-rescale 3,行规范化 4,数据平滑 特征变换 1. 非线性特征 2. 正态性变换 3. 连续变量离散 特征降维 特征缩放 不同数值型特征的数据量纲可能相差多个数量级,这对很多…

ZGC 垃圾回收过程

ZGC(Z Garbage Collector)是Java平台上的一种垃圾收集器,它是由Oracle开发的,旨在解决大堆的低延迟垃圾收集问题。ZGC是一种并发的分代垃圾收集器,它主要针对具有大内存需求和低停顿时间要求的应用程序 ZGC的核心概念及…

人力资源管理后台 === 首页+部署

目录 1.首页-echarts图表的应用 2.首页-echarts图表的按需导入 3.路由模式-将路由改成history模式 4. 打包分析-分析 5.CDN加速 6.项目打包-安装nginx 7.mac/windows环境下nginx部署启动项目 8.nginx解决history的404问题 9.nginx配置代理解决生产环境跨域问题 1.首页-…