基于 Quivr 搭建个人知识库

news/2024/7/7 19:21:46

目录

Quivr介绍

Quivr特性

Quivr演示

        Demo with GPT3.5:

        Demo of the new version:

Quivr实战

Quiv 使用的主要技术

Quiv 实践依赖

创建Supabase项目

部署Quiv项目

        第一步:现在源码

        第二步:设置环境变量

        第三步:执行sql

        第四步:启动应用

        第五步:效果演示

                用户登陆:

                上传知识库:

                 修改问答prompt进行问答


        今天咱们尝试使用开源的框架Quivr搭建一个自己的知识库。官网自诩Quivr为你的第二个大脑,利用生成人工智能的力量来存储和检索非结构化信息。你可以把它想象成带有人工智能功能黑曜石。看官网的介绍图案也是黑曜石里生长出智慧之树,果然寓意很牛逼。

Quivr介绍

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

Quivr特性

  •  Universal Data Acceptance:Quivr几乎可以处理你扔给它的任何类型的数据。包括文本、Markdown、PDF、PowerPoint、Excel、Word、音频、视频等等。
  • Generative AI:Quivr采用先进的人工智能来帮助你生成和检索信息。
  • Fast and Efficient:因为设计是以速度和效率为核心,Quivr确保快速访问数据。
  • Secure:任何场景任何时间,你的数据由你自己控制。
  • Open Source:开源、免费。

Quivr演示

Demo with GPT3.5:

        下面的视频是基于ChatGPT3.5的一个demo演示,其中演示了构建知识库并进行多轮对话问答。https://user-images.githubusercontent.com/19614572/238774100-80721777-2313-468f-b75e-09379f694653.mp4

Demo of the new version:

        下面的视频是5月下旬上线的最新的版本的演示视频,新的版本替换了操作UI,接下来我们尝试使用新版搭建自己的知识库。https://user-images.githubusercontent.com/19614572/239713902-a6463b73-76c7-4bc0-978d-70562dca71f5.mp4

Quivr实战

Quiv 使用的主要技术

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

  • LLM:GPT3.5 / GPT 4
  • Embedding:OpenAI embedding
  • 向量知识库:Supabase
  • Docker:Docker Compose

Quiv 实践依赖

        前面咱们已经提到过Quivr 采用的是Supabase向量数据库,所以在此之前咱们需要先创建一个Supabase的账号,获取到Supabase Project API key、Supabase Project URL,并且生成几个必要的表。

创建Supabase项目

        Supabase的官网地址是:Dashboard | Supabase如果有github账号的话可以直接使用GitHub 账号登陆,要是没有的话就用其他的方式注册也可以。创建项目比较简单,创建的时候有付费的和免费的,咱们练习直接白嫖就可以,果断选择免费方式。新建完毕项目之后会出现项目的相关配置,咱们需要的就是第二张图里标记的,如果后面向要重新找这几个信息可以通过这个地址:API Settings | Supabase,或者选择项目进入到设置里查询。

部署Quiv项目

        前置环境准备完毕咱们开始部署Quiv项目。

第一步:现在源码

        

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

第二步:设置环境变量

        需要修改 frontend、backend两个目录下的环境变量,先拷贝到这里。下面的图里是我本地按照创建的项目里的配置替换的,需要注意的是backend目录下的ANTHROPIC_API_KEY 是选择 Claude 的配置,我们可以删了。

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

第三步:执行sql

        配置完完毕,接下来要初始化数据库了。打开 Supabase 面板,按下图点击创建一个sql执行框将下面的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;
$$;

第四步:启动应用

        前面几步的准备工作做完了,现在就可以启动应用了。需要注意的是如果docker的版本过低的话会提示错误,需要更新docker。大家按照自己的时机情况更新到何时的版本即可。这一步启动时间比较长,因为要打包镜像并启动应用。

docker compose build && docker compose up

第五步:效果演示

用户登陆:

上传知识库:

 修改问答prompt进行问答

        接下来就可以进行知识库的问答了,目前源码还是支持英文的问答,咱们想要使用中文的话修改问答模版即可(作者很有意思为了防止模型胡乱问答模版提示词里特意提醒不要胡编乱造答案,哈哈哈),文件路径如下:


http://lihuaxi.xjx100.cn/news/1230345.html

相关文章

如何使用Vue的异步更新机制?

首先&#xff0c;让我们来了解一下Vue的异步更新机制是什么。简单来说&#xff0c;当Vue的数据发生变化时&#xff0c;它并不会立即更新页面&#xff0c;而是将更新操作放在一个队列中&#xff0c;等到浏览器空闲时再批量执行这些更新操作。这样做的好处是&#xff0c;可以减少…

MySQL数据库,从入门到精通:第四篇——MySQL中常用的运算符及其用法

MySQl学习&#xff08;MySQL数据库&#xff0c;从入门到精通&#xff1a;第四篇——MySQL中常用的运算符及其用法 第四篇_MySQL中常用的运算符及其用法运算符1. 算术运算符1&#xff0e;加法与减法运算符2&#xff0e;乘法与除法运算符3&#xff0e;求模&#xff08;求余&#…

老话新谈之缓存一致性

前言 缓存一致性常见的更新策略也比较多&#xff0c;如先更新数据库再更新缓存&#xff0c;先删缓存再更新数据库等等&#xff0c;我在理解的时候有些混乱&#xff0c;所以这个文章提供了一些理解上的技巧去理解缓存一致性。 为什么会有缓存一致性的问题 缓存与数据库是两套…

UniApp组件封装

什么是UniApp组件&#xff1f; UniApp是一个跨平台的开发框架&#xff0c;允许开发者使用Vue.js编写一次代码&#xff0c;然后将其发布到多个平台&#xff0c;包括iOS、Android和Web。在UniApp中&#xff0c;组件是构建用户界面的基本单元&#xff0c;它们可以重复使用&#x…

Vcpkg介绍及使用

Vcpkg用于在Windows、Linux、Mac上管理C和C库&#xff0c;极大简化了第三方库的安装&#xff0c;它由微软开源&#xff0c;源码地址&#xff1a;https://github.com/Microsoft/vcpkg&#xff0c;最新发布版本为2023.04.15 Release&#xff0c;它的license为MIT。 在windows上安…

Docker部署开源项目Django-CMS企业内容管理系统

Docker部署开源项目Django-CMS企业内容管理系统 一、Django-CMS介绍1.1 Django-CMS简介1.2 Django-CMS特点 二、本地环境介绍2.1 本地环境规划2.2 本次实践介绍 三、本地环境检查3.1 检查Docker服务状态3.2 检查Docker版本3.3 检查docker compose 版本 四、下载django-cms-quic…

YOLOv5使用自定义数据集实验

上一篇博文中介绍了YOLOv7训练自定义数据集&#xff0c;在这篇文章中&#xff0c;我们主要记录YOLOv5模型的实验过程&#xff0c;用于对比实验。 YOLOv5与YOLOv7毕竟一母同胞&#xff0c;因此部署起来也是极为类似。 数据集 数据集使用的与YOLOv7的实验数据集一样&#xff0c;…

使用 Pycharm 调试远程代码

文章目录 背景同步远程代码Interpreter注意点 背景 工作机是一台 Windows 电脑&#xff0c;而很多时候需要在 Mac 电脑上编码、配合 iPhone 模拟器&#xff0c;所以我以前是用 VNC 或者向日葵来远程 Mac 来编程&#xff0c;其实还能接受&#xff0c;但是最让我不舒服的是快捷键…