赞
踩
上一篇里,树先生教大家利用 ChatGLM-6B + langchain 实现个人专属知识库,实际运行下来,发现2个问题:
1、购买的 16G 显存的 GPU 云服务,在 FP16 精度下,多轮对话到第二轮,显存就爆了,无奈只能上 INT4 量化;
2、GPU 云服务也是一笔不小的开销啊,普通个人玩家也耗费不起~
那么有没有其他解决方案呢?
今天,树先生教大家一种使用远端模型(OpenAI)构建个人知识库的解决方案—— 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
Supabase 创建项目
点击 New project 创建一个新项目,填写必要信息,密码那边选择自动生成就行。
项目创建完成,会来到一个欢迎页面,这里主要关注下面这两个配置参数就行,后面会用到。
其他流程我就不介绍了,这里提一点,云服务器需要放行 3000 和 5050 端口,分别对应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 searches embedding vector(1536), similarity float) LANGUAGE plpgsql AS $$ # variable_conflict use_column BEGIN RETURN query SELECT id, content, metadata, embedding, 1 -(documents.embedding <=> query_embedding) AS similarity FROM documents ORDER BY documents.embedding <=> query_embedding LIMIT match_count; END; $$;
create table
stats (
-- 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 identity
id 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 content metadata jsonb, -- corresponds to Document.metadata embedding 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 searches embedding vector(1536), similarity float) LANGUAGE plpgsql AS $$ # variable_conflict use_column BEGIN RETURN query SELECT id, document_id, content, metadata, embedding, 1 -(summaries.embedding <=> query_embedding) AS similarity FROM summaries WHERE 1 - (summaries.embedding <=> query_embedding) > match_threshold ORDER BY summaries.embedding <=> query_embedding LIMIT 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
这个过程还比较耗时。。。
用户认证
上传知识库
知识库问答
问知识库里的问题
原始资料里内容
知识库查看
好了,就到这里,总的来说,使用远端模型或本地模型各有优缺点,感兴趣的朋友自行搭建体验吧,喜欢朋友别忘了点赞、转发、收藏哟~
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。