拥有自己的本地聊天机器人(不需要ChatGPT、笔记本就行)
概述
Windows下,架构是使用开源项目来搭建起来的。因为苦于ChatGPT需要Key,觉得很麻烦,且还有一些数据隐私的考虑,所以一直在寻找有没有可行的完全本地化的方法,最终还是找到了一个可行的方案。
最低的资源要求也不是很高,笔记本就行,如果拥有更好的硬件资源的话(Nvidia显卡),那输出会快很多哦。
感觉可以做更多有趣的事情。
架构基本上如下:
PS:关于网络难访问问题,可以通过gitclone.com辅助或者其它镜像站等等帮忙。
模型(chinese-alpaca-2-7b)
需要选择一个模型来作为核心,这里就选择了chinese-alpaca-2-7b,选择它的原因是模型支持中文,且还是基于llama2模型调整的,效果应该会比较好,它还有13b、13b-64k等版本。当然了,模型挺大的,需要通过llama.cpp压缩才能跑起来。
项目地址:https://github.com/ymcui/Chinese-LLaMA-Alpaca-2
仓库的README中的完整模型下载
说明了模型的下载方式,选择适合自己的即可,网络不给力也可以使用其中提供的百度网盘,感恩作者。
llama.cpp
核心就是server程序提供了类似ChatGPT的API,这使得其能够对接上比较热门的ChatGPT的web ui,在实际的测试过程中,有些UI不是很兼容,使用起来比较正常的就是chatgpt-next-web了。
项目地址:https://github.com/ggerganov/llama.cpp
就直接release中提供的预编译好的包就行,自己在windows环境下实操了一段时间,没有搞成功。。
解释一下release中的版本有什么区别:
这里会涉及到CPU的指令集(加快计算的部分),可以通过CPUZ这个软件查看,或者在网上查对应的型号支持的指令集。
比如:https://github.com/ggerganov/llama.cpp/releases/tag/b1961
文件名 | 说明 |
---|---|
cudart-llama-bin-win-cu11.7.1-x64.zip | cuda有区分版本,这里是11 |
cudart-llama-bin-win-cu12.2.0-x64.zip | cuda版本12 |
llama-b1961-bin-win-avx-x64.zip | CPU支持AVX指令集的 |
llama-b1961-bin-win-avx2-x64.zip | CPU支持AVX2指令集的,是AVX的改进版,我的笔记本支持这个就用它了 |
llama-b1961-bin-win-avx512-x64.zip | CPU支持AVX512指令集的,是AVX2的改进版 |
llama-b1961-bin-win-clblast-x64.zip | |
llama-b1961-bin-win-cublas-cu11.7.1-x64.zip | 没用过 |
llama-b1961-bin-win-cublas-cu12.2.0-x64.zip | 没用过 |
llama-b1961-bin-win-noavx-x64.zip | 单纯CPU计算,没有AVX的版本 |
llama-b1961-bin-win-openblas-x64.zip | 没用过 |
接下来把模型进行转换,使其能通过llama.cpp来运行,脚本是python的,这里使用anaconda来方便切换python版本,python版本使用3.11
# 在当前目录创建虚拟环境
conda create --prefix .\py311 python=3.11
# 激活
conda activate .\py311
# 仓库切换到b1961版本
cd llama.cpp
git checkout b1961
# 用清华源网速快点,安装依赖包
python -m pip install -r llama.cpp\requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple/
# 将模型转化成过度阶段的float16版本,转化的过程比较慢,最终是要变成4bit的版本
python llama.cpp\convert.py .\chinese-alpaca-2-7b\
# 将生成的ggml-model-f16.gguf转成4bit,也就不到4G的大小,普通机器的内存都能运行。当然,还有更小的版本,像q2_k、q3_k,不过没必要。
.\llama-b1961-bin-win-avx2-x64\quantize.exe .\chinese-alpaca-2-7b\ggml-model-f16.gguf .\chinese-alpaca-2-7b\ggml-model-q4_0.gguf q4_0
# 现在试一下使用server程序加载模型
.\llama-b1961-bin-win-avx2-x64\server.exe -m .\chinese-alpaca-2-7b\ggml-model-q4_0.gguf
# 运行起来后,这一部分就完成了,server提供了一个简洁的web ui在8080端口,同时兼容ChatGPT的API也在里面
...
llama server listening at http://127.0.0.1:8080
...
chatgpt-next-web
项目地址:https://github.com/ChatGPTNextWeb/ChatGPT-Next-Web
这个前端UI需要nodejs及其包管理工具yarn,需要预先安装。
# 切换仓库版本
git chekout v2.10.1
# 复制环境变量文件,然后编辑
cp .env.template .env
# 修改.env文件
#配置参数BASE_URL=http://127.0.0.1:8080
#配置参数OPENAI_API_KEY=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(随便找的一个,占位用,没有其它作用)
# 通过npm来使用yarn安装依赖
npm exec yarn install
# 运行
npm exec yarn dev
...
- ready started server on 0.0.0.0:3000, url: http://localhost:3000
...
体验
通过访问http://localhost:3000可以进入到界面,如果提示需要设置key,按提示,随便找个key填进去即可,比如上面的那个。或者修改文件app\components\chat.tsx
,注释下面的判断代码
// if (!accessStore.isAuthorized()) {
// copiedHello.content = Locale.Error.Unauthorized;
// }
总体的感觉是不及ChatGPT3.5的,输出也慢,但也是一个不错的开始,至少拥有了个人的低级AI,还有许多可以优化的地方,慢慢学习吧。
关于头像如果无法展示,是因为项目是通过在线头像获取的,网络不通的话,可以试着将文件app\components\emoji.tsx
中的cdn.jsdelivr.net
换成fastly.jsdelivr.net
关于角色问题,也就是UI中的面具,这个挺好使的,输入/
即可选择,看起来内置了很多角色提示词,参考仓库https://github.com/PlexPt/awesome-chatgpt-prompts-zh
关于可能会报错error uncaughtException: Error: aborted
,性能上笔记本纯CPU还是不怎么够用,经常会超时,可以修改文件app\constant.ts
中的export const REQUEST_TIMEOUT_MS = 300000
关于性能提升,因为笔记本上有UHD、AMD RX550所以搜索了一下资料,可以知道编译了clblast的版本可以使用AMD的GPU,详见:https://github.com/ggerganov/llama.cpp?tab=readme-ov-file#running-llama-with-clblast,通过命令clinfo -l
知道自己的AMD显卡编号是2,于是设置环境变量来使用set GGML_OPENCL_DEVICE=2 & .\llama-b1961-bin-win-clblast-x64\server.exe -m .\chinese-alpaca-2-7b\ggml-model-q4_0.gguf
,如果没找到AMD的显卡,可能需要装下AMD的驱动软件。
关于加强对前文的记忆理解,可以加入上下文参数-c
来加大,默认只有512,如此能够记忆前面的内容会更多。考虑实际使用的模型支持的上下文有:4k(下载的是这个)、16k、64k不同版本,于是使用-c 4096
。也可以在启动的输出信息中看到相关信息。然后要注意的是加大这个会导致内存占用也变大,速度也会减慢,调整到适合自己的即可。
...
llama_model_loader: - kv 2: llama.context_length u32 = 4096
...
关于显卡RX 550,只有2G的运存,模型可分配给它的layer不多,实际体验中,没办法发挥性能,反而比UHD 620慢,放弃吧。
关于UHD,不需要特意将layer分配给它,这样反而更慢,因为其本来就是使用内存来作为运存。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全网最简单!3分钟用满血DeepSeek R1开发一款AI智能客服,零代码轻松接入微信、公众号、小程
· .NET 10 首个预览版发布,跨平台开发与性能全面提升
· 《HelloGitHub》第 107 期
· 全程使用 AI 从 0 到 1 写了个小工具
· 从文本到图像:SSE 如何助力 AI 内容实时呈现?(Typescript篇)