搭建个人知识库

上周从 语雀迁移到了 Obsidian 的过程中拿到了个人的所有文档,发现也写了不少东西,但很多笔记实际上都没什么印象了,没有利用起来,想起前段时间非常火的基于 LLM + 外挂知识库的知识库问答系统,于是想尝试搭建一个个人知识库,通过 LLM 的推理和归纳能力,将这些吃灰的笔记回收利用 。

外挂知识库是什么

在介绍外挂知识库前,我们先来看看 ChatGPT 的特点:

  1. 可以生成高质量的文本,并且语义连贯、流畅度高。
  2. 可以根据输入的上下文信息,推理和归纳,针对问题生成更相关的回答。

我们希望 ChatGPT 的回答能根据自己本地的文档,或者其他的一些数据源来回答,但 ChatGPT 回答的数据来自于训练时的数据(比如现在是截止到 2022 的数据),不能使用其他的数据。那我们可以将数据和问题一起输入,比如给出这样的 prompt

text复制代码【这里是某些数据源...】
请根据上面的信息,回答我的问题,如果上面的信息得不出答案,请回答:”没有足够的信息“,那么我的问题是:xxxxx

这样的方案是可行的,但前提是数据源的数据不能太多,ChatGPT 携带的上下文有限,假设我们希望将一本书的内容作为上下文,然后让其根据书中的内容来回答是不行,ChatGPT 一次能支持输入的长度有限。而且每次提问将一大段内容贴进去,也不现实。

那么是否可以只将和问题相关的内容提取出来作为上下文输入呢?这样既可以减少数据源,还能让 ChatGPT 根据这些内容取分析总结出想要的回答。

那么问题就变成了如何根据想要问的问题,从书中检索出相关的内容,这其实就是搜索引擎做的事情。具体的做法就是将这本书的内容通过某些格式保存到数据库中,然后每次提问的时候,先取数据库检索相关的内容,然后将内容和问题按照类似上面的 prompt 提交给 ChatGPT,经过 ChatGPT 来生成高质量的回答。而这个保存了书内容的数据库就是外挂知识库

其中保存到数据库的过程是对原文本进行 Tokenizer(分词) + Embedding(向量化),数据库则称为 Vector Store (向量数据库)

整个过程如下: image.png

名词解释:

  • 分词(Tokenizer): 将文本拆分成单个单词或词语,结构化为计算机可以处理的结构化形式,,比如 我每天六点下班 可以拆分为 “我”,“每天”,“六点下班”,常见的分词器有 markdown 分词器 MarkdownTextSplitter
  • 向量化(Embedding):将文本数据转换为向量的过程。计算机无法直接处理文本,因此需要将文本转换为数学向量形式,以便算法能够理解和处理。文本和数学向量之间互相映射,但数学向量更便于计算机运算。对中文比较友好的向量模型库有 shibing624/text2vec-base-chinese
  • 向量数据库(Vector Store): 存储和管理向量化后的文本数据的数据库,能快速检索相似文本或进行文本相似性比较。 比如 FAISS 这个库

方案选择

目前已经有许多开源的方案,也有许多商业化的方案&#x

### 使用 DeepSeek 搭建个人知识库 #### 安装 Ollama 为了使用 DeepSeek 构建本地智能知识库,首先需要安装 Ollama。这一步骤确保了后续操作可以在本地环境中顺利执行[^1]。 #### 准备文件 选择要加入知识库的文档,支持多种常见格式,包括但不限于 pdf、docx、pptx、xlsx、txt 和 md 文件。这些文件包含了希望被索引和查询的信息[^2]。 #### 导入数据到 DeepSeek 通过指定路径加载选定的文件至 DeepSeek 平台。此过程会解析并处理上传的内容以便于之后检索和分析。对于每种类型的文件,DeepSeek 都有相应的解析器来提取有用信息。 #### 整合 AnythingLLM 工具 利用 AnythingLLM 提供的功能增强 DeepSeek 的能力,使得创建的知识库不仅限于简单的文本存储,而是能够理解上下文关系,提供更智能化的服务。AnythingLLM 可以为用户提供更加自然的语言交互体验,帮助更好地管理和应用积累下来的数据资源。 #### 测试与优化 完成上述配置后,可以尝试向新建立起来的个人知识库提问,验证其功能是否正常工作。根据实际效果调整参数设置或增加更多训练材料以提高性能表现。 ```python from deepseek import KnowledgeBase, DocumentLoader from anythingllm import LLMEnhancer # 初始化组件实例 kb = KnowledgeBase() loader = DocumentLoader(supported_formats=['pdf', 'docx']) enhancer = LLMEnhancer() # 加载文档进入知识库 documents_path = '/path/to/your/documents' loaded_docs = loader.load_from_directory(documents_path) for doc in loaded_docs: kb.add_document(doc) # 应用 LLM 增强特性 enhanced_kb = enhancer.enhance(knowledge_base=kb) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值