新技术前沿-2024-构建个人知识库和小语言模型

Ollama+WebUI+AnythingLLM,构建安全可靠的个人/企业知识库

1 技术路线一

1.1 搭建本地大模型Ollama

1.2 搭建用户界面open WebUI

使用Docker Desktop
Open-webui。它可以快速基于Ollama构筑本地UI。
如果没有科学上网,很可能会拉不动,可以试试 docker 代理网站:https://dockerproxy.com/,按步骤依次执行以下命令:

# 如果拉不动的话加个代理
docker pull ghcr.dockerproxy.com/open-webui/open-webui:main
# 重命名镜像(如果是通过代理下载的)
docker tag ghcr.dockerproxy.com/open-webui/open-webui:main ghcr.io/open-webui/open-webui:main
# 删除代理镜像(如果是通过代理下载的)
docker rmi ghcr.dockerproxy.com/open-webui/open-webui:main

下载镜像完成后,就可以启动容器

docker run -d -p 3000:8080 --add-host=host.docker.internal:host-gateway -v open-webui:/app/backend/data --name open-webui --restart always ghcr.io/open-webui/open-webui:main

然后就可以通过3000端口访问页面。
首次启动,注册账号和密码以后,修改Ollama的服务地址链接。

1.3 与知识库相连AnythingLLM

AnythingLLM的官网地址

这是一个可以基于大模型的知识库交互软件,可以应用本地大模型,或调用公域大模型API。知识库也同样可以使用本地的,而且几乎不占用很大的资源。
(1)下载安装AnythingLLMDesktop.exe。
(2)完成安装后,先会要求配置大模型。这里可以选择Ollama的本地模型,选择Llama3。
在这里插入图片描述

(3)然后会让你选择嵌入模式和向量数据库,我们选择默认的即可,或者接入外部API。
在这里插入图片描述
(4)配置完成后,再为你的工作空间起个名字,即可进入AnythingLLM中。
(5)在正式使用前,你需要上传你的知识文档,支持多种形式,但图片形式PDF不可读取。
在这里插入图片描述

(6)最后,你就可以在对话框中,和你的知识进行对话交流了。

1.3.1 问答增加个人文档

(1)打开anythingllm,点击要用的工作区上的按钮(上传文件,支持多种文件类型(PDF,TXT,DOC等)。
(2)点击Click to upload or drag and drop,选择要引用的文档。
(3)点击Move to Workspace,加载文档。
(4)点击Save and Embed。
(5)等待加载,提示Workspace updated successfully的时候说明加载完了。
(6)加载完成后就可以使用了,直接对话即可,回答的信息里面同时还可以显示引用文本(文件删除并不影响使用)。

可以设置chat或query模式。

2 技术路线二

Llama 3的微调、量化、知识库接入及部署
用通俗易懂的方式讲解大模型:一个强大的 LLM 微调工具 LLaMA Factory

2.1 微调LLaMA-Factory

使用中文得到更好的支持需要进行微调,最简单的方法之一是使用Llama Factory。

它几乎不需要任何编程基础,直接使用即可微调出一个适用于您的模型。

2.2 量化Llama.Cpp

微调出来的这个模型有点太大了,推理的时候速度比较慢,占用显存比较多,这时需要量化。

大模型量化主要是为了减小模型的体积和提高运算速度,让模型在资源有限的设备上也能高效运行。同时,量化还能降低能耗和成本,让模型部署更加经济实用。

那量化的时候有没好用的框架呢?

最常见的就是直接用Llama.Cpp。可以快速的帮我们把这个模型给它量化的比较小。

2.3 本地知识库接入Phidata

Phidata:快速构建一个智能 AI 助手【附代码示例】
官网基于phidata使用本地Ollama模型
安装依赖包

pip install -U phidata
pip install ollama

简单示例如下:

from phi.assistant import Assistant
from phi.llm.ollama import Ollama

assistant = Assistant(
    llm=Ollama(model="llama3",host='localhost'),
    description="旅游博主",
)
assistant.print_response("使用中文推荐一下上海好玩的地方,不超过20字", markdown=True)

在这里插入图片描述

3 小语言模型SLM

参考AI届的新宠:小语言模型(SLM)?

3.1 背景介绍

大语言模型(LLM)在过去几年产生了巨大影响,特别是随着OpenAI的ChatGPT的出现,各种大语言模型如雨后春笋般出现,国内如KimiChat、通义千问、文心一言和智谱清言等。

然而,大语言模型通常拥有庞大的参数,从数十亿到数千亿,甚至到数万亿。比如通义千问发布的开源模型就包含了70亿、140亿和720亿等多个规模的版本;而最近发布的Llama3大模型则是有80亿和700亿两个版本;而广为人知的ChatGPT3最大的一个模型参数则达到了1750亿!

大模型的参数越多,一般意味着它能够捕捉和处理更丰富的信息和更复杂的模式,也就是回答的效果会更好,但是它们对于个人电脑、智能手机和其他智能设备等设备来说计算量却太大(尽管出现了量化等技术)。由于上述原因,人们对小语言模型(SLM)的兴趣日益浓厚,而下面就是最近几款比较火的小语言模型。

3.2 安装ollama框架

参考ollama的GitCode地址
参考ollama官网

下载这个OllamaSetup.exe即可,双击后自动安装到C盘。
安装目录为C:\Users\user\AppData\Local\Programs\Ollama。

(1)设置外网可以访问
Ollama的默认配置是只有本地才可以访问,需要配置一下,
Ollama 默认提供 OpenAI 的兼容 API,默认端口是 11434,默认只可以通过 localhost 进行访问,如果想公开访问的话,可以通过设置 OLLAMA_HOST 进行修改。
在环境变量-系统变量中新增OLLAMA_HOST,值填入0.0.0.0。重新运行OLLAMA后,就可以通过本机IP访问。

(2)更改AI模型下载位置。
打开环境变量,在系统变量中新增OLLAMA_MODELS变量,值填入想要存放模型的路径D:\OllamaCache。
在这里插入图片描述
退出交互的方式:交互Ollama按下Ctrl + D 可以退出终端交互,但此时模型并不会退出,仍旧可以正常通过 Api 接口交互。
查看已经安装了哪些模型。
在这里插入图片描述

3.3 小语言模型

3.3.1 Phi-3模型

Phi-3是微软最近发布的一系列开放式 AI 模型,并且也是现有功能最强大、最具成本效益的小语言模型。

目前只提供了mini版本,即Phi-3-mini ,这个版本拥有38亿个参数(也就是3.8B),经过3.3 万亿 token 的训练,并且被优化至可部署在手机上。如果想体验的话,可以在Microsoft Azure AI Studio、Hugging Face[2],或者Ollama上使用。

Phi-3-mini一共支持两种上下文,分别是4K和128K,其中128K的上下文长度是同类产品第一个支持的,并且对质量影响很小。而且 Phi-3-mini 是经过指令微调的,这意味着它可以开箱即用!

虽然Phi-3 mini 参数很小,但是它表现良好,能够与Mixtral 8x7B 和 GPT-3.5 等模型相媲美!

CMD>ollama run phi3
按下Ctrl + D 可以退出终端交互。

在这里插入图片描述

3.3.2 Gemma模型

Gemma 由 Google DeepMind 和 Google 的其他团队开发,灵感来自 Gemini,其名称反映了拉丁语gemma,意思是“宝石”。

Google一共发布了两种尺寸的模型,分别是Gemma 2B 和 Gemma 7B[3],每个尺寸都发布了经过预训练和指令调整的变体,并且能够直接在开发人员笔记本电脑或台式电脑上运行。

值得注意的是,Gemma还有两个变体,分别是CodeGemma和RecurrentGemma。

(1)CodeGemma注重的是编码功能,它也有几个不同的版本:一个7B的预训练变体,专门用于代码补全和代码生成任务;一个7B的指令调整变体,用于代码聊天和指令执行;还有一个2B的预训练变体,适用于快速代码补全,并且可以安装在你的本地计算机上。
(2)RecurrentGemma 注重的是推理能力,与其他模型不同的是,它并没有采用目前LLM的Transformer 架构,而是基于Google新的Griffin 架构。

ollama run gemma:2b

在这里插入图片描述

3.3.3 OpenELM模型

OpenELM是Apple团队最近发布的模型,这是一个旨在在手机和笔记本电脑上运行的开源小语言模型 (SLM) 系列。

这个系列一共包含了2.7亿、4.5亿、11亿和30亿四个参数版本(有预训练和指令微调版本,一共8个型号)。

OpenELM 模型的突出特点是其内存和计算效率。它们建立在一系列最新的优化技术之上,这些技术减少了语言模型的内存和计算占用量。

根据Apple团队的描述,OpenELM 还使用了分层缩放策略,即以非均匀的方式将参数分配给注意力层和前馈层,这与经典的 Transformer 模型相反,经典的 Transformer 模型在所有层上具有统一的结构。

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-06-10 14:54:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-06-10 14:54:03       102 阅读
  3. 在Django里面运行非项目文件

    2024-06-10 14:54:03       83 阅读
  4. Python语言-面向对象

    2024-06-10 14:54:03       92 阅读

热门阅读

  1. Linux磁盘与文件系统管理

    2024-06-10 14:54:03       28 阅读
  2. 需求记录(共享元素)

    2024-06-10 14:54:03       51 阅读
  3. Vue3 组合式 API:依赖注入(四)

    2024-06-10 14:54:03       28 阅读
  4. 贪心算法03(leetcode1005,134,135)

    2024-06-10 14:54:03       37 阅读
  5. web前端三大主流框架

    2024-06-10 14:54:03       30 阅读
  6. C++中的if constexpr

    2024-06-10 14:54:03       31 阅读
  7. 驱动开发MISC 杂项驱动

    2024-06-10 14:54:03       41 阅读
  8. 自建 Docker 镜像

    2024-06-10 14:54:03       34 阅读
  9. Linux常见命令

    2024-06-10 14:54:03       27 阅读
  10. C++——时间复杂度

    2024-06-10 14:54:03       34 阅读
  11. 为何数据仓库需要“分层次”?

    2024-06-10 14:54:03       28 阅读
  12. tensorRT 自定义算子plugin的实现

    2024-06-10 14:54:03       30 阅读
  13. 使用git stash暂存改动,并备注改动内容

    2024-06-10 14:54:03       43 阅读