突发奇想,打算在本机部署chat大语言模型,同时部署embedding模型将文档等数据转化成向量,实现知识库。

Ollama本地部署模型

Ollama 是一个用于本地部署和运行大型语言模型(LLM)的平台,旨在让开发者和研究人员能够在本地计算机上高效、低延迟地运行和使用人工智能模型。它支持多种预训练的语言模型,并提供了一个简单易用的界面和 API,帮助用户在无需云端依赖的情况下进行自然语言处理、对话生成、文本分析等任务。

Ollama相关指令

Ollama 提供了一些常用的命令行操作指令来帮助用户管理模型、启动服务、加载模型等。以下是一些常见的 Ollama 操作指令:

1. ollama pull <model-name>

  • 作用:下载并安装指定的模型。
  • 示例
    1
    ollama pull llama-7b
    该命令会下载名为 llama-7b 的模型到本地。

2. ollama list

  • 作用:列出当前本地已安装的所有模型。
  • 示例
    1
    ollama list
    该命令会列出你已经下载并安装在本地的模型列表。

3. ollama run <model-name>

  • 作用:直接运行并与指定模型进行交互。
  • 示例
    1
    ollama run llama-7b
    该命令会启动一个交互式会话,并与指定的模型进行对话。

4. ollama rm <model-name>

  • 作用:删除指定的本地模型。
  • 示例
    1
    ollama rm llama-7b
    该命令会删除名为 llama-7b 的模型,释放本地存储空间。

5. ollama serve

  • 作用:启动 Ollama 的本地服务,通常用于为外部应用提供 API 接口。
  • 示例
    1
    ollama serve
    启动服务后,Ollama 会在本地启动一个服务器,默认端口可能为 500011434,你可以通过访问 http://localhost:<port> 与模型进行交互。

6. ollama show <model-name>

  • 作用:查看已安装模型的详细信息,包括模型的版本、参数等。
  • 示例
    1
    ollama show llama-7b
    该命令会显示 llama-7b 模型的详细信息。

其他命令选项

  • **ollama help**:查看所有可用的 Ollama 命令。
    1
    ollama help
    该命令会列出所有可用的命令和参数,并显示简要的使用说明。

Ollama模型推荐

个人电脑如果配备较好的个人显卡可以尝试7b~32b的模型,70b的模型虽然较为智能But速度会非常慢,且需要至少32GB 的显存,不是非常推荐。笔记本用户如果想尝试可以使用llama3.2,其主攻轻量化的场景有1b3b两个版本可供选择。如果有40系显卡的加持可以尝试7b以上70b以下的模型。

本人安装模型如下

1
2
3
4
5
6
NAME                              ID              SIZE      MODIFIED
qwen2.5:14b 7cdf5a0187d5 9.0 GB 6 minutes ago
qwen2.5:32b 9f13ba1299af 19 GB 21 minutes ago
nomic-embed-text:latest 0a109f422b47 274 MB 55 minutes ago
llama3.1:8b 46e0c10c039e 4.9 GB 55 minutes ago
shaw/dmeta-embedding-zh:latest 55960d8a3a42 408 MB 18 hours ago

其中nomic-embed-text:latestshaw/dmeta-embedding-zh:latest为Embedding嵌入模型,其余为Chat模型。
Embedding(嵌入)模型是自然语言处理(NLP)和机器学习中的一个重要概念,它将高维的离散数据(如单词、句子、图片等)转换为低维的、连续的向量表示。通过这种方式,嵌入模型能够将复杂的输入数据转化为机器学习算法可以处理的数值格式,同时保持数据的语义关系和结构。

Embedding模型的作用

  • 将离散数据转换为连续向量:许多机器学习模型(如神经网络)不能直接处理离散的非数值数据(如文本、类别标签等)。Embedding 模型通过将这些离散的对象(例如单词、句子或图像)映射到一个连续的向量空间,使它们变得适合于计算机处理。

  • 保留语义和上下文信息:嵌入模型的一个重要特点是能够将语义相似的对象映射到相似的向量位置。举例来说,Word2VecGloVe 这样的词嵌入模型会使得“猫”和“狗”在向量空间中的位置靠得很近,因为它们在许多上下文中具有相似的意义。这种特性对于许多下游任务(如语义分析、情感分析等)非常有用。

  • 降低维度:通过将数据从高维空间映射到低维空间,Embedding 模型不仅能减少计算量,还能减少噪声和冗余信息。这对于提高模型的性能和训练效率至关重要,尤其是在处理大规模数据时。

  • 提升模型泛化能力:通过使用嵌入向量,模型可以捕获到更丰富的特征表示,从而提高其泛化能力。例如,通过词嵌入,模型能够理解“跑步”和“运动”之间的关系,而不仅仅是将它们视为完全不同的单词。

Embedding模型的常见类型

  • Word Embeddings(词嵌入)

    • Word2Vec:基于上下文的词嵌入模型,分为两种架构——CBOW(Continuous Bag of Words)和 Skip-gram。
    • GloVe:通过矩阵分解技术生成的词嵌入模型,注重捕捉全局统计信息。
    • FastText:在 Word2Vec 的基础上进一步考虑了词内的子词信息,能够更好地处理未知词汇。
  • Sentence Embeddings(句子嵌入)

    • Doc2Vec:是 Word2Vec 的扩展,能够为整个文档(句子、段落等)生成一个固定的向量表示。
    • **Universal Sentence Encoder (USE)**:一种用于生成句子嵌入的模型,能够生成固定长度的句子向量表示,适用于各种句子级别的任务。
  • Contextual Embeddings(上下文嵌入)

    • BERT:通过 Transformer 架构生成上下文相关的嵌入表示,可以为每个单词生成不同的嵌入向量,依赖于单词的上下文。
    • GPT:基于自回归模型生成的嵌入,能够生成连贯的文本和语境感知的嵌入表示。
  • Multimodal Embeddings(多模态嵌入)

    • CLIP:结合图像和文本信息的多模态嵌入模型,通过学习图像和文本之间的关联,能够进行跨模态检索和图像-文本匹配。

总而言之,言而总之。Embedding模型可以将用户提供的数据识别制作成库,为Chat模型提供知识基础,安装Embedding模型是构建个人知识库的必要一步。

基于RAGflow搭建本地知识库

RAGflow 是一个基于 LLM 的开源知识库构建工具,它提供了一系列的组件,包括数据源、数据处理、模型、评估等,使得用户可以轻松地搭建知识库。开源地址:https://github.com/infiniflow/ragflow

RAGflow搭建步骤

由于开源仓库中有详细的使用教程,这里简单描述,突出易错关键步骤。

1.安装Docker

可以阅读文章Windows 安装docker(详细图解)

2.git拉取仓库

通过git clone命令拉取仓库。

1
git clone https://github.com/infiniflow/ragflow.git

3.拉取Docker文件

1
2
$ cd ragflow
$ docker compose -f docker/docker-compose.yml up -d

注意执行该命令时要启动Docker,有条件使用科学上网,最好以管理员权限运行CMD
Docker服务运行成功如图:

4.添加本地大模型

我的Ollama和RAGflow都是部署在同一台机器上的,但是RAGflow在Docker中,所以基础URL填写如下:

1
http://host.docker.internal:11434

RAGflow中Ollama添加模型如图:

至此搭建工作完成,可以访问http://localhost/knowledge,使用RAGflow提供的服务进行知识库问答。