上一篇里,树先生教大家利用 ChatGLM-6B + langchain 实现个人专属知识库,实际运行下来,发现2个问题:

1、购买的 16G 显存的 GPU 云服务,在 FP16 精度下,多轮对话到第二轮,显存就爆了,无奈只能上 INT4 量化;

2、GPU 云服务也是一笔不小的开销啊,普通个人玩家也耗费不起~

那么有没有其他解决方案呢?

今天,树先生教大家一种使用远端模型(OpenAI)构建个人知识库的解决方案—— Quivr。

Quivr 介绍

Quivr 是一款使用生成 AI 技术来存储和检索非结构化信息的“第二大脑”,可以将其视为 Obsidian 的增强版,并且具备更强的人工智能功能。

Quivr 可以处理几乎所有类型的数据,包括文本、图像、代码片段等。它采用先进的人工智能技术来帮助您生成和检索信息。同时,它还专注于速度和效率,确保您可以快速访问数据。您的数据安全由您掌控,Quivr 支持多个文件格式,包括文本、Markdown、PDF、PowerPoint、Excel、Word、音频、视频等。

从介绍上来看,支持的文件格式还算比较丰富,毕竟自诩为“第二大脑”呢!

再来看一段官方放出的 Demo 视频:

Quivr Demo

看起来还不错,是骡子是马,拉出来溜溜,开干!

实战

Quivr 和我们之前介绍的其他知识库方案一样,本质上都是基于 Prompt 与大模型交互来的,Quivr 用到的主要技术有:

  • LLM:GPT3.5 / GPT 4

  • Embedding:OpenAI embedding

  • 向量知识库:Supabase

准备工作

  • 海外节点云服务(项目需要与 OpenAI 交互,但交互的地址是不可配置的,这块如果想用国内节点云服务走代理那一套,需要自行改造代码)
  • Supabase 账号
  • OpenAI API Key

Supabase 创建项目

点击 New project 创建一个新项目,填写必要信息,密码那边选择自动生成就行。

项目创建完成,会来到一个欢迎页面,这里主要关注下面这两个配置参数就行,后面会用到。

其他流程我就不介绍了,这里提一点,云服务器需要放行 30005050 端口,分别对应Quivr的前后端。

项目部署

环境准备好了以后,就可以开始项目部署工作了。

下载源码

git clone https://github.com/StanGirard/quivr.git && cd quivr
# 切换到 v0.0.4分支
git checkout v0.0.4
git checkout -b v0.0.4

设置环境变量

cp .backend_env.example backend/.env
cp .frontend_env.example frontend/.env

首先修改 frontend 目录下的环境变量,还记得之前 Supabase 那边的2个配置么?拷贝到这里。其他的按实际情况修改。

然后修改 backend 目录下的环境变量,还是上面 Supabase 的配置,拷贝到这里。因为我们用的是 OpenAI 提供的服务,所以这里我们填上 OPENAI_API_KEY,ANTHROPIC_API_KEY 是选择 Claude 的配置,我们可以删了。

接下来是 JWT_SECRET_KEY,这个可以在 Supabase 这里获取。

执行 SQL

配置完了,接下来要初始化数据库了。打开 Supabase 面板,按下图点击。

将下面的 3 个 SQL 语句依次复制进去执行。

create extension vector;-- Create a table to store your documents
create table if not exists documents (
id bigserial primary key,
content text, -- corresponds to Document.pageContent
metadata jsonb, -- corresponds to Document.metadata
embedding vector(1536) -- 1536 works for OpenAI embeddings, change if needed
);CREATE FUNCTION match_documents(query_embedding vector(1536), match_count int)RETURNS TABLE(id bigint,content text,metadata jsonb,-- we return matched vectors to enable maximal marginal relevance searchesembedding vector(1536),similarity float)LANGUAGE plpgsqlAS $$# variable_conflict use_column
BEGINRETURN querySELECTid,content,metadata,embedding,1 -(documents.embedding <=> query_embedding) AS similarityFROMdocumentsORDER BYdocuments.embedding <=> query_embeddingLIMIT match_count;
END;
$$;
create tablestats (-- A column called "time" with data type "timestamp"time timestamp,-- A column called "details" with data type "text"chat boolean,embedding boolean,details text,metadata jsonb,-- An "integer" primary key column called "id" that is generated always as identityid integer primary key generated always as identity);
-- Create a table to store your summaries
create table if not exists summaries (id bigserial primary key,document_id bigint references documents(id),content text, -- corresponds to the summarized contentmetadata jsonb, -- corresponds to Document.metadataembedding vector(1536) -- 1536 works for OpenAI embeddings, change if needed
);CREATE OR REPLACE FUNCTION match_summaries(query_embedding vector(1536), match_count int, match_threshold float)RETURNS TABLE(id bigint,document_id bigint,content text,metadata jsonb,-- we return matched vectors to enable maximal marginal relevance searchesembedding vector(1536),similarity float)LANGUAGE plpgsqlAS $$# variable_conflict use_column
BEGINRETURN querySELECTid,document_id,content,metadata,embedding,1 -(summaries.embedding <=> query_embedding) AS similarityFROMsummariesWHERE 1 - (summaries.embedding <=> query_embedding) > match_thresholdORDER BYsummaries.embedding <=> query_embeddingLIMIT match_count;
END;
$$;

执行完成后,会产生 3 个数据表。

Docker 版本更新(可选)

这一步不是必须的,因为我买的云服务器 docker 版本比较低,所以需要升级一下,具体如何安装可以在 docker 官网上找到,这里就以 CentOS 7.6 下安装 docker 为例。

# Uninstall old versions
sudo yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engine# Set up the repository
sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo# Install Docker Engine
sudo yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin# Start Docker
sudo systemctl start docker

项目启动

docker compose build && docker compose up

这个过程还比较耗时。。。

项目展示

用户认证

上传知识库

知识库问答

问知识库里的问题

原始资料里内容

知识库查看

问题与改进

  • 体验过 Quivr 的朋友应该有所体会,Quivr 默认会以英文进行回复,这个其实很好解决,找到项目里的内置 prompt 改成中文就行,之前就说过,目前市面上这一套外挂知识库的开源方案,基本都是基于 prompt 来的。

  • 网页响应慢的问题,主要我们使用的都是海外节点云服务,高延时导致网页资源加载慢,之所以要用海外节点云服务,无非是因为用到了 OpenAI 的大模型与 Embedding 服务,那么有没有在国内节点上去访问 OpenAI 的方式呢?网上解决方案有很多,云函数就是其中一种解决方案,如果大家感兴趣,请点赞收藏,我会根据大家的反馈来综合考虑出一期教程。有了云函数后,替换代码里访问 openai 的地址就可以,不过 Quivr 这个项目用的是官方的 openai 组件包,改动还是比较大的,这块树先生还在研究中。
  • 出现下面这种报错的主要原因是 OpenAI 限制了普通账户的请求速率,解决办法是为你的 OpenAI 账户增加支付方式。

好了,就到这里,总的来说,使用远端模型或本地模型各有优缺点,感兴趣的朋友自行搭建体验吧,喜欢朋友别忘了点赞、转发、收藏哟~

基于 Quivr 搭建个人专属知识库相关推荐

  1. 基于CentOS 搭建 Seafile 专属网盘

    系统要求:CentOS 7.2 64 位操作系统 安装 Seafile 安装依赖环境 使用 yum 安装 Python 及 MySQL: yum install python python-setup ...

  2. 基于宝塔面板使用 Leanote 搭建自己专属的云笔记

    Leanote 是一款开源的云笔记程序,使用 golang + mongodb 开发,支持 markdown.代码高亮.免打扰"写作模式",以及将内容发布为博客等.今天为大家分享一 ...

  3. 人效提高350%,基于KICP搭建的营销套电客服机器人,让欧派家居赢在起点

    当前,90后甚至部分00后成为了家居消费的主力军.生活节奏一再加快,使人们获取信息的习惯发生了转变,更多的消费者不再直奔家居建材城咨询选购,而是选择在购买家居产品之前,通过线上渠道先行了解. 消费者的 ...

  4. 基于特征融合的中文知识库问答方法

    基于特征融合的中文知识库问答方法 汪洲 侯依宁 汪美玲 李长亮 * AI Lab, KingSoft Corp, Beijing, China {wangzhou1, houyining, wangm ...

  5. iKcamp|基于Koa2搭建Node.js实战(含视频)☞ 处理静态资源

    视频地址:www.cctalk.com/v/151149238- 处理静态资源 无非花开花落,静静. 指定静态资源目录 这里我们使用第三方中间件: koa-static 安装并使用 安装 koa-st ...

  6. iKcamp|基于Koa2搭建Node.js实战(含视频)☞ 路由koa-router

    路由koa-router--MVC 中重要的环节:Url 处理器 ?? iKcamp 制作团队 原创作者:大哼.阿干.三三.小虎.胖子.小哈.DDU.可木.晃晃 文案校对:李益.大力萌.Au.DDU. ...

  7. python系统-基于Python搭建Django后台管理系统

    一个好的项目数据库管理后台是必须的,今天代码君教大家搭建Django网站后台,当然做网站后台的前提是需要有Python以及Django的开发环境,至于如何搭建这些开发环境,请查看我的上一篇文章 Mac ...

  8. 基于Keras搭建cifar10数据集训练预测Pipeline

    基于Keras搭建cifar10数据集训练预测Pipeline 钢笔先生关注 0.5412019.01.17 22:52:05字数 227阅读 500 Pipeline 本次训练模型的数据直接使用Ke ...

  9. Python IDE之Pydev: 基于Eclipse搭建python的编译环境(Eclipse+pydev)简介、安装、使用的详细攻略

    Python IDE之Pydev: 基于Eclipse搭建python的编译环境(Eclipse+pydev)简介.安装.使用的详细攻略 目录 pydev简介 PyDev 安装和配置 1.安装MyEc ...

最新文章

  1. mybatis简化实现思路
  2. 【HTML5游戏开发】简单的《找不同汉字版》,来考考你的眼力吧
  3. 【原创】parseInt大改造
  4. 在arm linux mini2440上移植ntp服务,RTEMS 4.9.5 在 QEMU MINI2440 上的移植发布啦……
  5. 地贝扫地机器人维修_扫地机器人常见故障及维修方法
  6. Apache孵化器主席Justin Mclean:如何成为Apache顶级开源项目
  7. 工程linux下创建svn仓库目录结构
  8. 用windows命令开启远程桌面
  9. Web浏览器测试,怎么提取测试点 - web测试方法总结
  10. error PRJ0003 : 生成“C:\WINDOWS\system32\cmd.exe”时出错
  11. mysql索引失效的情况
  12. Computer:编程入门的简介相关的一些概念解释之详细攻略
  13. 使用kubeadm搭建k8s高可用集群
  14. BERT代码的解读1---数据处理部分
  15. 为何沃比帕克模式无法复制?
  16. 南大通用GBase XDM支持的操作平台
  17. 三、项目进度管理(输入/工具与技术/输出)
  18. Java 中各种空(''、\u0000、null)的区别?
  19. 歌唱大赛选手成绩计算
  20. java 代码生成nc 格式的文件,并且读取出nc格式里面的数据(已提供代码)

热门文章

  1. OceanBase 第六期技术征文活动|小鱼还能“更快”吗?你来试试
  2. php indexdb,浏览器端数据库存储方案的整理 -- indexDB 和 localStorage
  3. Class not found: “com.parkManagement.dao.DaoTest 测试找不到测试类
  4. oracle中提示12514,【ORACLE】提示ORA-12514错误处理
  5. uni-app:商品详情
  6. class 人开枪射击子弹
  7. 编辑距离与字符错误率CER
  8. Linux系统操作汇总(包含Linux中软件操作)
  9. 插入排序与希尔排序(数据结构)
  10. 三款笔记本盘点,快上车带你看看轻薄本推荐