上一篇里,树先生教咱们利用 ChatGLM-6B + langchain 完结个人专属常识库,实际运行下来,发现2个问题:
1、购买的 16G 显存的 GPU 云服务,在 FP16 精度下,多轮对话到第二轮,显存就爆了,无奈只能上 INT4 量化;
2、GPU 云服务也是一笔不小的开支啊,普通个人玩家也耗费不起~
那么有没有其他处理计划呢?
今天,树先生教咱们一种运用远端模型(OpenAI)构建个人常识库的处理计划—— Quivr。
Quivr 介绍
Quivr 是一款运用生成 AI 技术来存储和检索非结构化信息的“第二大脑”,能够将其视为 Obsidian 的增强版,而且具有更强的人工智能功能。
Quivr 能够处理几乎所有类型的数据,包括文本、图画、代码片段等。它选用先进的人工智能技术来帮助您生成和检索信息。一起,它还专注于速度和功率,确保您能够快速拜访数据。您的数据安全由您掌控,Quivr 支撑多个文件格局,包括文本、Markdown、PDF、PowerPoint、Excel、Word、音频、视频等。
从介绍上来看,支撑的文件格局还算比较丰富,究竟自诩为“第二大脑”呢!
实战
Quivr 和咱们之前介绍的其他常识库计划一样,本质上都是基于 Prompt 与大模型交互来的,Quivr 用到的首要技术有:
-
LLM:GPT3.5 / GPT 4
-
Embedding:OpenAI embedding
-
向量常识库:Supabase
预备工作
- 海外节点云服务(项目需求与 OpenAI 交互,但交互的地址是不行装备的,这块如果想用国内节点云服务走署理那一套,需求自行改造代码)
- Supabase 账号
- OpenAI API Key
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
这个进程还比较耗时。。。
项目展现
用户认证
上传常识库
常识库问答
问常识库里的问题
原始材料里内容
常识库检查
问题与改善
- 体会过 Quivr 的朋友应该有所体会,Quivr 默许会以英文进行回复,这个其实很好处理,找到项目里的内置 prompt 改成中文就行,之前就说过,现在市面上这一套外挂常识库的开源计划,基本都是基于 prompt 来的。
- 网页响应慢的问题,首要咱们运用的都是海外节点云服务,高延时导致网页资源加载慢,之所以要用海外节点云服务,无非是由于用到了 OpenAI 的大模型与 Embedding 服务,那么有没有在国内节点上去拜访 OpenAI 的方式呢?网上处理计划有许多,云函数就是其间一种处理计划,如果咱们感兴趣,请点赞保藏,我会根据咱们的反馈来综合考虑出一期教程。有了云函数后,替换代码里拜访 openai 的地址就能够,不过 Quivr 这个项目用的是官方的 openai 组件包,改动仍是比较大的,这块树先生还在研讨中。
- 呈现下面这种报错的首要原因是 OpenAI 约束了普通账户的恳求速率,处理办法是为你的 OpenAI 账户添加付出方式。
好了,就到这儿,总的来说,运用远端模型或本地模型各有优缺点,感兴趣的朋友自行建立体会吧,喜欢朋友别忘了点赞、转发、保藏哟~