美文网首页
通过Ollama+AnythingLLM搭建本地私人知识库

通过Ollama+AnythingLLM搭建本地私人知识库

作者: just_RL | 来源:发表于2024-07-07 01:50 被阅读0次

💡这两天捣鼓了一下本地知识库的搭建,对于个人日常信息的处理来说非常有必要,很多场景都可以满足我的要求,尤其是基于一些文档的问答情况下,AI可以帮我很好地回顾、梳理、总结。

所以也想简单地记录一下这个过程,希望可以帮到有同样需求的朋友~

一、开始搭建本地知识库前,先想清楚几个问题

为什么要用AI知识库?

简单来说就是用来管理信息的一个库,在传统的数据管理方式中,我们通常是用「关键字」来查找内容,这样的方式在AI面前则显得过于机械。现如今的AI对信息的阅读理解、总结输出能力,已经无限接近于受过良好教育的成人。所以如果通过AI方式来管理信息,那么我们管理的过程也会更自然,更接近于和人的互动。如果把某个领域的专业内容上传到知识库中,那么后续的交互则更像是和一个小助手对话,而不是感觉像在翻书一样查找内容。

为什么要搭建一个本地的知识库?

(1)免费:首先肯定是因为“免费”,现在市场上所有云端AI服务基本都对免费用户有一定请求限制,本地知识库则可以永久免费使用。

(2)隐私保护:我们在管理信息时很多时候信息都比较隐私敏感,尤其是在管理商业公司内部信息时,这些数据如果通过闭源云端大模型处理,难免会有信息泄露的风险。并且本地知识库还可以脱机工作,不需要联网即可进行信息检索,这对于很多安全要求较高的公司来说也很适用。

(3)灵活性高:用户可基于实际使用的场景来选择合适的开源模型搭建知识库,恰当的选择和配置,可提高整体的用户体验。

本地知识库有什么限制?

模型越大往往理解、推理、表达能力都更强,所以如果跑在本地的话,我们选择模型时需要考虑电脑的配置,一般也只能选择比较小的模型来跑。不过在知识库应用的场景下,小模型的处理能力也基本满足要求。

如何避免大模型的「幻觉」?

大模型经常会出现一本正经的胡说八道的「幻觉」现象,这使得很多存在客观标准、专业严肃的查询无法通过AI问答获得很好的服务,比如医疗、金融等领域。那么通过搭建知识库则可以有效避免这种情况,上传一些专业的内容文档,并要求AI从圈定的信息范围内进行查询,且在Prompt中明确说明只能通过知识库内容进行问答。那么一般来说我们则可以完成与AI的沟通基于知识库内容,在设定的范围内输出有效内容。

什么是RAG?

在搭建知识库的学习过程中,我了解到了一个很重要的概念「RAG」。那么下面就让ChatGPT来详细介绍一下什么是RAG吧O(∩_∩)O


什么是 RAG(Retrieval-Augmented Generation)?

RAG(检索增强生成)是一种结合了信息检索(Retrieval)和生成(Generation)技术的自然语言处理方法,用于创建更准确和信息丰富的回答或内容。

基本概念

-知识库(Knowledge Base):这是存储大量信息和数据的地方。知识库可以包含各种文档、文章、书籍等。

-嵌入(Embedding):嵌入是一种将文本数据转换为向量(数字数组)的技术。通过嵌入,系统可以将复杂的文本转换为可以在数学空间中处理的形式。这有助于系统理解和比较不同文本的相似度。

-检索(Retrieval):系统从知识库中查找相关信息。这个过程通常通过比较用户提问的嵌入向量和知识库中文档的嵌入向量的相似度来实现。

-生成(Generation):结合检索到的信息,系统生成一个完整且有意义的回答。这一步通常使用生成模型(如GPT-3)来完成。

RAG 是怎么工作的?

-提问(用户输入):用户提出问题,比如“什么是 RAG?”。

-生成嵌入(Embedding Generation):系统将用户的问题转换为嵌入向量。这一步通过预训练的语言模型(如BERT或GPT)来完成。

-检索相关信息(Information Retrieval):系统在知识库中查找与问题嵌入向量相似的文档。具体做法是将知识库中的文档也转换为嵌入向量,然后计算这些向量与问题向量的相似度,选择相似度最高的几个文档。

-生成答案(Answer Generation):系统将检索到的文档内容与用户的问题结合起来,通过生成模型生成一个完整的回答。生成模型会综合考虑问题和检索到的信息,以确保回答准确且相关。

举个例子:

假设你问一个智能助手:“最近的天气怎么样?”

-提问:你提出了问题。

-生成嵌入:系统将你的问题转换为嵌入向量。

-检索信息:系统在知识库中查找与问题相关的天气预报信息。知识库中的天气预报数据也被转换为嵌入向量,系统通过计算相似度找到最相关的数据。

-生成答案:系统将检索到的天气预报数据和你的问题结合起来,通过生成模型生成一个答案:“今天的天气是晴天,温度在25到30度之间。”

为什么 RAG 很重要?

-更准确:利用最新的、相关的外部信息,而不仅仅依赖已有的知识库。

-更全面:结合多种信息来源,可以生成更丰富的答案。

-灵活性:适应不同类型的提问和信息需求,提供动态的、个性化的回答。


不知道你看懂没,简单来说可以理解 RAG 是一个在问答过程中的框架,知识库以及用户输入的内容先经过RAG框架,再与大模型交互。RAG负责处理信息的嵌入、检索、整合,之后再将内容传给大模型,大模型再将这些输出整理成自然语言输出给用户查阅。

而RAG在处理信息的过程中,第一步也是最重要的一步是「Embedding」(嵌入),是一种将复杂、高维度的数据,例如文本或图像,转换成低维度向量空间中的向量,从而使机器学习算法能够对这些向量进行处理和分析。

问答知识库架构

二、动手搭建本地知识库

由前面「RAG」这个概念的解释,我们知道要基于一些给定信息来进行AI交互,我们需要两个基本的工具:大模型、RAG。那么我们应该去哪里找这些工具,并通过何种方式将他们用起来呢?

1.安装ollama

ollama是一款管理本地大模型的工具,非常适合小白,有手就会。官网:https://ollama.com/

进入官网后,下载适合自己电脑的版本即可。

ollama官网

2.通过ollama下载模型

ollama只是用来管理模型的工具,但是没有页面交互,所以我们需要通过终端来操作。

先进入「Models」页面,选择适合的模型。

ollama模型页面

点击相应的模型进入详情页,可看到用于终端运行该模型的命令语句,点击复制然后去终端粘贴即可。

模型详情页

在终端运行该模型后,我们就可以直接在终端与相应模型进行对话了。

ollama终端交互效果演示

3.安装AnythingLLM

在终端虽然可以和大模型交互,但是终归是不太方便的。AnythingLLM则提供了可以和大模型交互的页面,同时它也是一个全栈应用程序,提供了多种功能,旨在为用户打造属于个人的AI智能助手。官网:https://useanything.com/

同样选择适合自己的版本下载即可。

AnythingLLM官网

4.AnythingLLM基本配置

首先配置好大模型,这里我们选择自己在ollama下载的模型即可。

AnythingLLM 配置页面(1)

另外两个配置我都使用的AnythingLLM默认的配置

AnythingLLM 配置页面(2)

5.创建Workspace,并上传知识库内容

AnythingLLM的会话,分不同的Workspace,每个Workspace可以单独根据需要进行一些基础设置。

创建好后可以直接上传知识库内容。

Workspace的创建和知识库内容上传

可以看到这里支持上传文档,也支持网页内容,并且支持多个文档内容上传。

知识库内容上传

上传后还需要选择哪些文档在当前Workspace中嵌入,嵌入成功后即可基于知识库内容和大模型进行交流。

开始前要把当天聊天区设置成「查询」模式,这样问答就默认基于上传内容展开。

Workspace设置

6.问答效果

我是在汽车流通协会上找了一篇文章,复制文字保存成PDF上传的(txt应该也可以,可惜Mac不好创建就搞的麻烦了一点),可以看到问答效果还算挺好的。这里我用的是qwen2 7b那个大模型,0.5的试了一下,完全答非所问😂。

问答效果

总结:

这只是本地搭建知识库的基本入门版,跑下来发现,要想效果好,还是得电脑配置高啊,我这个丐版电脑跑着有点难受了😭。如果不是企业级隐私的知识库,也可以考虑用一些免费的云端大模型API。我在AnythingLLM中配置了Groq的API key,试用了一下速度非常快。不过免费的对短时间内请求的次数还是有些限制的,好在Groq可以几个模型来回切换用,一般情况下我感觉是够用的。

相关文章

  • 一些智能问答方案

    索引库(FAISS)+知识库(DB)搭建智能客服系统博客[1]基于索引库(FAISS)+知识库(DB)搭建了智能客...

  • 个体赋能第四部分 方法

    1.通过以下四步: 一.理清楚,理清楚新工作的内容。 二.搭框架,搭建新工作的个人知识库 三.主动填,主动往知识库...

  • 通过rsync 搭建本地源

    通过rsync 搭建本地源 脚本: Centos.repo 把域名换成你自己的,IP也可以, 7和6一样,把目录改...

  • 运行第一个Kubernetes应用

    本文中的Kubernetes集群是通过minikube在本地搭建的,这也是本地使用Kubernetes进行实验的最...

  • 如何mock数据

    mock数据有搭建本地服务器mock和通过线上网站mock数据两种方法:1.搭建本地服务器安装node.js,使用...

  • 前端快速创建本地服务器

    搭建本地服务器,是为了在同一个局域网下可以通过ip访问到本地网址。在前端项目中搭建本地服务器可以实现局域网内个多个...

  • 使用docker搭建kafka集群

    通过docker可以很方便的搭建kafka集群作为本地测试环境使用使用docker-compose进行搭建,包含z...

  • 为什么读经典书?

    一、读经典可以实现: ①通过读经典,使我们更独立、更自由 ②知识工作者,应该拥有自己知识库、搭建自己知识体系,拥有...

  • 企业如何通过知识库加强知识管理,降低客服成本开启降本增效新局面!

    知识库搭建和使用对企业客服工作有重要的意义。那么什么是知识库系统?小编为大家详细介绍知识库系统在企业客服工作中的定...

  • 通过nodejs搭建http本地服务

    nodejs是什么? 他是一个基于Chrome V8引擎的JavaScript运行环境(它不是语言,也不是框架),...

网友评论

      本文标题:通过Ollama+AnythingLLM搭建本地私人知识库

      本文链接:https://www.haomeiwen.com/subject/cazgcjtx.html