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 Ollamaassistant = 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 模型在所有层上具有统一的结构。