Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >基于 Quivr 搭建个人专属知识库

基于 Quivr 搭建个人专属知识库

原创
作者头像
程序员树先生
发布于 2023-06-01 06:51:47
发布于 2023-06-01 06:51:47
2.3K00
代码可运行
举报
文章被收录于专栏:程序员树先生程序员树先生
运行总次数:0
代码可运行

上一篇里,树先生教大家利用 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 创建一个新项目,填写必要信息,密码那边选择自动生成就行。

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

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

项目部署

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

下载源码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
git clone https://github.com/StanGirard/quivr.git && cd quivr
# 切换到 v0.0.4分支
git checkout v0.0.4
git checkout -b v0.0.4

设置环境变量

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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 语句依次复制进去执行。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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;
$$;
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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
  );
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
-- 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 为例。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 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

项目启动

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
docker compose build && docker compose up

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

项目展示

用户认证

上传知识库

知识库问答

问知识库里的问题

原始资料里内容

知识库查看

问题与改进

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

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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
如何用低代码搭建训练一个专业知识库问答GPT机器人
距离上篇文章《低代码xChatGPT,五步搭建AI聊天机器人》已经过去3个多月,收到了很多小伙伴的关注和反馈,也帮助很多朋友快速低成本搭建了ChatGPT聊天应用,未曾想这一段时间GPT热度只增不减,加上最近国内外各种LLM、文生图多模态模型密集发布,开发者们也有了更高的要求。比如如何训练一个自己的GPT应用,如何结合GPT和所在的专业领域知识来搭建AI应用,像心理咨询助手、个人知识库助手等,看目前网上这方面资料还不多,今天我们就来抛个砖试试。
漫话开发者
2023/03/27
8.1K3
如何用低代码搭建训练一个专业知识库问答GPT机器人
3分钟!教会你用Doris+DeepSeek搭建RAG知识库(喂饭级教程)
❝清晨,我泡上一杯98年的咖啡,打开电脑,收到一条来自Doris用户的消息: "请问有 将doris数据库数据作为deepseek大模型的知识库的方法吗" "好滴,安排!" 于是,和这位Doris用户聊了聊,发现这类需求随着DeepSeek的爆火被无限放大了,但也确实是一个‌引申的机遇与挑战。 也罢,今天就来一探究竟,一起学习学习如何基于Doris+DeepSeek打造你的专属AI助手!
一臻数据
2025/02/26
1K1
3分钟!教会你用Doris+DeepSeek搭建RAG知识库(喂饭级教程)
使用open-webui+deepseek构建本地AI知识库
在设置 --> 管理员设置 --> 联网搜索 --> 启用,然后下拉选择,这里选择tavily,可以去https://app.tavily.com/注册然后获取api key,最后点击保存就可以了
code4it
2025/02/18
3.5K1
使用open-webui+deepseek构建本地AI知识库
构建私人知识库的5个基本步骤
今天,这篇咱们先看看,如何构建一个AI私人知识库,把我们工作的历史数据构建为知识库,这样直接提问它,获取专业服务于个人的答案,效率直接起飞。
double
2024/05/10
9700
构建私人知识库的5个基本步骤
大模型开发实战:(二)使用 LangChain 构建本地知识库应用
检索增强生成(Retrieval-Augmented Generation,RAG)是一种优化大型语言模型输出的方法,允许模型在生成回答前,从外部知识库中检索相关信息,而非仅依赖模型内部训练的知识。通过引用外部知识库的信息来生成更准确、实时且可靠的内容,并解决知识过时和幻觉的问题。下面将介绍使用 LangChain 和 Ollama 实现一个本地知识库应用。
张高兴
2025/05/21
7340
大模型开发实战:(二)使用 LangChain 构建本地知识库应用
通过大模型 API 优化复杂工作流构建知识库的实践与突破
在当今信息爆炸的时代,知识库的构建与管理成为了企业和组织高效运作的关键。传统的知识库构建方法往往依赖人工整理和分类,效率低下且难以应对海量数据。随着人工智能技术的快速发展,尤其是大模型(如 OpenAI 的 GPT 系列)的出现,知识库的构建与优化迎来了全新的可能性。
flyskyocean
2025/03/21
1860
RAG中的3个高级检索技巧
RAG系统检索的文档可能并不总是与用户的查询保持一致,这是一个常见的现象。当文档可能缺乏查询的完整答案或者包含冗余信息或包含不相关的细节,或者文档的顺序可能与用户的意图不一致时,就会经常出现这种情况。
deephub
2024/01/23
8500
RAG中的3个高级检索技巧
【RAG入门教程02】Langchian的Embedding介绍与使用
词向量是 NLP 中的一种表示形式,其中词汇表中的单词或短语被映射到实数向量。它们用于捕获高维空间中单词之间的语义和句法相似性。
致Great
2024/06/10
4840
【RAG入门教程02】Langchian的Embedding介绍与使用
使用​​langchain​​搭建自己的本地知识库系统
RAG 是retrieval-augmented-generation的缩写,翻译为中文的意思就检索增强,以基于最新,最准确的数据建立LLM 的语料知识库。
用户1418987
2024/09/06
8160
使用​​langchain​​搭建自己的本地知识库系统
【RAG最新研究】优化RAG系统的最佳实践与深度解析
这篇论文主要关注的是检索增强型生成(RAG)系统中的一个核心问题:不同的组件和配置如何影响系统的性能。
致Great
2025/01/16
5280
【RAG最新研究】优化RAG系统的最佳实践与深度解析
RAG 实战|用 StarRocks + DeepSeek 构建智能问答与企业知识库
RAG(Retrieval-Augmented Generation,检索增强生成)是一种结合外部知识检索与 AI 生成的技术,弥补了传统大模型知识静态、易编造信息的缺陷,使回答更加准确且基于实时信息。
StarRocks
2025/04/19
2960
RAG 实战|用 StarRocks + DeepSeek 构建智能问答与企业知识库
RAG技术全解析:打造下一代智能问答系统
大型语言模型(LLM)已经取得了显著的成功,尽管它们仍然面临重大的限制,特别是在特定领域或知识密集型任务中,尤其是在处理超出其训练数据或需要当前信息的查询时,常会产生“幻觉”现象。为了克服这些挑战,检索增强生成(RAG)通过从外部知识库检索相关文档chunk并进行语义相似度计算,增强了LLM的功能。通过引用外部知识,RAG有效地减少了生成事实不正确内容的问题。RAG目前是基于LLM系统中最受欢迎的架构,有许多产品基于RAG构建,使RAG成为推动聊天机器人发展和增强LLM在现实世界应用适用性的关键技术。
用户9177072
2024/05/08
6160
RAG实操教程langchain+Milvus向量数据库创建你的本地知识库
RAG 是retrieval-augmented-generation的缩写,翻译为中文的意思就检索增强,以基于最新,最准确的数据建立LLM 的语料知识库。
用户1418987
2024/09/06
1.8K0
RAG实操教程langchain+Milvus向量数据库创建你的本地知识库
向量数据库Chroma极简教程
向量数据库其实最早在传统的人工智能和机器学习场景中就有所应用。在大模型兴起后,由于目前大模型的token数限制,很多开发者倾向于将数据量庞大的知识、新闻、文献、语料等先通过嵌入(embedding)算法转变为向量数据,然后存储在Chroma等向量数据库中。当用户在大模型输入问题后,将问题本身也embedding,转化为向量,在向量数据库中查找与之最匹配的相关知识,组成大模型的上下文,将其输入给大模型,最终返回大模型处理后的文本给用户,这种方式不仅降低大模型的计算量,提高响应速度,也降低成本,并避免了大模型的tokens限制,是一种简单高效的处理手段。此外,向量数据库还在大模型记忆存储等领域发挥其不可替代的作用。
Rude3Knife的公众号
2023/11/08
2.2K0
向量数据库Chroma极简教程
如何构建Embedding?如何构建一个智能文档查询助手?
嵌入(embedding)是指将高维数据映射为低维表示的过程。在机器学习和自然语言处理中,嵌入通常用于将离散的符号或对象表示为连续的向量空间中的点。
山行AI
2023/08/10
1.1K0
如何构建Embedding?如何构建一个智能文档查询助手?
基于 AutoFlow 快速搭建基于 TiDB 向量搜索的本地知识库问答机器人
本文将详细介绍如何通过 PingCAP 开源项目 AutoFlow 实现快速搭建基于 TiDB 的本地知识库问答机器人。如果提前准备好 Docker、TiDB 环境,整个搭建过程估计在 10 分钟左右即可完成,无须开发任何代码。
PingCAP
2024/12/05
1690
基于 AutoFlow 快速搭建基于 TiDB 向量搜索的本地知识库问答机器人
使用LOTR合并检索提高RAG性能
RAG结合了两个关键元素:检索和生成。它首先使用语义搜索等高级技术来浏览大量数据,包括文本、图像、音频和视频。RAG的本质在于它能够检索相关信息,然后作为下一阶段的基础。生成组件利用大型语言模型的能力,解释这些数据块,制作连贯的、类似人类的响应。与传统的生成模型相比,这个过程确保RAG系统可以提供更细致和准确的输出。
deephub
2024/01/04
4500
使用LOTR合并检索提高RAG性能
大模型结合知识库问答应用第一次实践(上)
记录一次用大模型LLM和向量数据库,搭建垂直领域的知识库问答实践。采用的LangChain框架,Qdrant向量数据库、Qwen大语言模型。本文介绍如何把文本转换成向量,存储到向量数据库中,为后续的大模型+知识库问答应用做知识库数据准备。
用户9295575
2024/09/10
3140
OpenAI 上线新功能力捧 RAG,开发者真的不需要向量数据库了?
近期, OpenAI 的开发者大会迅速成为各大媒体及开发者的热议焦点,有人甚至发出疑问“向量数据库是不是失宠了?”
Zilliz RDS
2023/11/16
1.4K0
OpenAI 上线新功能力捧 RAG,开发者真的不需要向量数据库了?
【玩转 GPU】搭建本地知识库--chatGLM+langchain(尝鲜篇)
有一天发现,在腾讯文档中想搜索之前写的东西需要收费了。这钱非花不可吗?好像不用。我们可以利用langchain+chatGLM在本地搭建自己的知识库,除了能搜索到文档这个功能,还能基于知识库内容和你进行对话问答~
languageX
2023/07/03
10.8K0
推荐阅读
相关推荐
如何用低代码搭建训练一个专业知识库问答GPT机器人
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验