本教程带领大家使用 Ollama + Qwen(通义千问大语言模型)+ AnythingLLM 搭建本地知识库,实现手搓 AI+专家系统。今天给自己安排一位全能知识助手,领导再也不用担心我一问三不知了,升职加薪不是梦!
大语言模型的发展真的是一日千里。在前面的教程中,我为各位观众老爷演示了如何利用清华大学出品的ChatGLM3搭建本地的大语言模型,并通过API实现自动化写作。
随着ChatGLM4改为闭源发布,ChatGLM模型的热度一泻千里。新的大模型不断涌现,新的部署工具也层出不穷。阿里巴巴出品的通义千问迭代到1.5版本,性能基本超越ChatGLM3,成为我们新的选择。
今天,我们就要带领大家使用通义千问和LangChain搭建本地知识库,让电脑变成我们信息小助理。
在前面的教程中,我们自己配置了Python环境用来运行ChatGLM模型。现在,我们有了更加方便的工具,可以一条指令运行本地LLM模型,那就是Ollama。
访问Ollama.com下载安装包。Ollama目前支持Linux、Windows和MacOS操作系统。并且支持CPU、NVIDIA GPU和AMD GPU。这意味着,如果你的电脑配有显卡,将会优先使用显卡进行推理(这样速度更快),如果没有显卡,将调用CPU进行推理(即使办公笔记本也可以运行,当然,推理速度会有点慢)。
我们先下载最熟悉的Windows安装包。根据默认设置安装。
安装完成后,打开一个CMD窗口,输入
ollama pull qwen:4b
这将帮你下载通义千问1.5_4B模型。模型的大小约2.3GB,无需魔法上网即可下载。
我这边下载了大概20分钟,下载完成后,可以使用Ollama默认的界面运行通义千问1.5_4B模型。
打开一个CMD窗口,输入
ollama run qwen:4b
然后,你就可以在CMD界面提出问题了。输入 `/bye` 可以退出聊天。
当然,这个界面只能做简单测试,我们后面将接入更加方便的图形界面(包括我们的老朋友Chatbox)进行本地对话。
Ollama支持流行的开源大语言模型,包括llama2和它的众多衍生品(包括vicuna、codellama),以及其他一些热点模型,例如Mistral、Dolphin、Falcon等。
访问https://ollama.com/library可以浏览Ollama提供的所有模型。
下面我们将需要使用Ollama安装向量模型。向量模型比较小,大约230MB,很快就可以下载好
ollama pull nomic-embed-text
这将会帮助我们下载nomic-embed-text:latest。其中latest表示最新版。
向量模型是用来将Word和PDF文档转化成向量数据库的工具。通过向量模型转换之后,我们的大语言模型就可以更高效得理解文档内容。
向量模型无法单独使用。
Langchain是一套利用大语言模型处理向量数据的工具。以前,搭建LLM+Langchain的运行环境比较复杂。现在我们使用AnythingLLM可以非常方便的完成这个过程,因为AnythingLLM已经内置了Langchain组件。
AnythingLLM是一个集成度非常高的大语言模型整合包。它包括了图形化对话界面、内置大语言模型、内置语音识别模型、内置向量模型、内置向量数据库、内置图形分析库。
可惜的是,AnythingLLM目前的易用性和稳定性仍有所欠缺。因此,在本教程中,我们仅使用AnythingLLM的向量数据库和对话界面。LLM模型和向量模型仍然委托给Ollama来管理。
AnythingLLM本身对Ollama的支持也非常完善。只需要通过图形界面,点击几下鼠标,我们就可以轻松完成配置。
第一步,打开AnythingLLM左下角的配置界面
第二步、配置LLM
在LLM Preference选项卡中,选择Ollama作为后端。依次填写
URL:http://127.0.0.1:11434Chat Model:选择 qwen:4b
Token:8192
点击窗口上方的“Save changes”保存生效。
第三步、配置embedding模型
在Embedding Model选项卡中,选择Ollama作为后端。依次填写
URL:http://127.0.0.1:11434Chat Model:选择 nomic-embed-text:latest
Max embedding chunk length:512
💡
注意:这个Max embedding chunk length数值会影响文档回答的质量,推荐设置成128-512中的某个数值。从512往下逐级降低,测试效果。太低也不好,对电脑性能消耗大。
点击窗口上方的“Save changes”保存生效。
第四步、选择LanceDB向量数据库
在Vector Database选项卡中,选择LanceDB作为后端。这是一个内置的向量数据库。
如果你熟悉Pinecone等云端数据库,也可以配置相关的数据库,这样可以实现资料库漫游。
我们简单介绍一下整个工作流程。
第一步、创建向量数据库
文档→AnythingLLM→Ollama(Nomic Embedding)→向量数据→AnythingLLM(LanceDB)
问题→AnythingLLM→Ollama(Qwen 4b)→AnythingLLM→答案
下面,我们开始进入AnythingLLM,配置Workspace以开始基于文档的对话。
点击 New Workspace,创建一个名为Chat的工作空间。无需进行任何设置,就可以直接开始与通义千问进行对话。
再次点击 New Workspace,重新创建一个名为Test的工作空间。我们将在这个空间内上传一些文档。
点击上传图标,拖拽你的资料文档到下面这个大大的按钮上(你也可以单击它!)
AnythingLLM几乎支持所有包含文字的文档格式:txt、doc(word文档)、csv、xls(excel表格)、pdf等等。
我推荐你上传word文档或pdf文档。注意:扫描图片制作的PDF暂时无法支持,你需要使用OCR软件将这种PDF转换成word文档上传。
上传完成后,选中相应的文档,并点击 Move to Workspcae。
然后点击Save and Embed。
AnythingLLM便开始调用Nomic Embed模型处理你的文件。使用CPU处理一个文件大约需要5~10分钟。我上传的这份《2023中国网络文学产业研究报告》,全文有2万字(去掉了图片),处理了大约七八分钟。完成后,关闭上传窗口。
点击齿轮图标,打开Test空间的设置选项。
选择Chat Settings,将对话模式更改为Query(默认是Chat)
Query模式能够确保仅采用上传文档中的信息进行回答(而不会采用大模型本身的信息)。
点击Update Workspace,保存设置。点击返回按钮,返回主界面。
下面,是没有开启文档对话(Chat模式、未上传任何文档)的回答效果。明显的泛泛而谈。
现在我们来试试基于文档对话(Query模式、上传1篇文档)的效果吧。
点击Show CItations,可以查看引用的数据。
你可以对一个话题上传多份文档,以提高回答质量。文档的相关性越高,回答的质量更好。如果你对回答不太满意,也可以尝试重新组织一下问题的文字,或者更换体量更大的本地大模型处理。
我们的老朋友ChatBox也可以很容易的集成Ollama。将ChatBox升级到1.2.2以上,即可配置Ollama作为后端,方便的使用通义千问大模型进行聊天了。
你需要在ChatBox的设置界面中进行选择Ollama作为后端。
在模型选项卡选择 Ollama 作为AI模型提供方。
API域名填写 http://127.0.0.1:11434
模型选择 qwen:4b
保存后即可进行对话。
下面是我使用Ollama运行Mistral 7B进行对话的示例。
ChatBox可以很方便的切换Ollama管理的大语言模型。
通过今天的教程,我们已经可以不需要进行繁琐的Python环境搭建,就能够方便的在本地运行大语言模型。
Ollama和AnythingLLM方便的将我们需要的大语言模型运行环境,打包成Windows的通用图形界面,降低了大语言模型本地运行的门槛。同时Ollama可以根据我们的硬件配置自动选择使用显卡(GPU)或者CPU来运行量化好的模型。
在我们之前的教程中,只能使用CPU来运行量化后的 ChatGLM3模型。使得拥有GPU显卡的用户运行效率偏慢。Ollama很好的解决了这个问题。Ollama使用16位的GGUF量化模型,相对于之前我们介绍的GGML(Int4)量化模型格式,所保存数据精度更高。
此外,Ollama还支持uncensored llama2模型,可以应用的场景更加广泛。
目前,Ollama对中文模型的支持还相对有限。除了通义千问,Ollama没有其他更多可用的中文大语言模型。鉴于ChatGLM4更改发布模式为闭源,Ollama短期似乎也不会添加对 ChatGLM模型的支持。
尽管有一些不足。但是Ollama和AnythingLLM还是帮助我们更加方便的在本地运行属于自己的大语言模型,使得LLM应用对于普通人来说更加触手可及。