最近DeepSeek如火如荼,由于目前我也有自己搭建个人知识库的需求,因此结合最新的一些技术搭建了一下。主要是包括:
- AnythingLLM平台
- SillconFlow提供免费的大模型API支持
- 私有部署的Milvus向量数据库供多个人使用
源代码:
- https://github.com/JasonkayZK/docker-repo/blob/master/anything-llm.sh
- https://github.com/JasonkayZK/docker-repo/tree/milvus-standalone
使用AnythingLLM+SillconFlow+Milvus快速搭建个人云端知识库
环境搭建部分完全使用 Docker:
首先部署 Milvus、然后部署 AnythingLLM 平台,最后注册 SillconFlow 并对平台进行配置。
部署Milvus
部署
向量数据库 milvus 的部署比较简单,直接通过 docker-compose 部署即可:
1 | version: '3.5' |
镜像使用的是我在阿里云上的,国内也可以直接使用;
使用:
1 | docker-compose up -d |
部署即可;
配置密码
部署成功后,Milvus 的默认账号、密码为:
1 | root |
可以通过在部署的时候提供配置文件来配置账号密码,也可以部署后通过 Python 脚本部署;
例如:
1 | from pymilvus import MilvusClient |
参考:
备注
在启动 standalone 类型的服务后, Web 界面会有 etcd unhealthy 的报错。
这个是正常现象,忽略即可;
参考:
注册SiliconFlow
SiliconFlow 提供了各种大模型的 API,甚至有许多免费的版本;
可以通过下面的链接注册:
链接包含我的邀请码,注册后可额外获得 2000w 的 token 额度。
注册成功后,可以在 API密钥 生成密钥;
保存,后面会用到!
部署AnythingLLM
部署
可以通过 Docker 直接部署 AnythingLLM:
1 | export STORAGE_LOCATION=$HOME/workspace/anythingllm && \ |
这里需要注意:
Docker挂载目录需要给权限 0777,否则可能会报错无权限(尤其是root用户操作):
配置
在配置 LLM 提供商 时,需要选择:Generic OpenAI 才能使用我们在 SiliconFlow 中的模型,随后配置:
- Base URL:https://api.siliconflow.cn
- API Key:你上面生成的API密钥
- Chat Model Name:可在 https://cloud.siliconflow.cn/models 查找免费的模型(例如:
Qwen/Qwen2.5-7B-Instruct)
在配置向量数据库时,可以直接使用 AnythingLLM 中内嵌的 LanceDB,此时无需配置;
当然,也可以使用我们上面已经部署好的 Milvus 数据库;
此时,只需要配置:
- Milvus DB Address:http://172.17.0.1 (可以使用 Docker 的gateway,也可以用其他的)
- Username、Password:使用你配置的或者默认的即可!
加载模型
上面配置完成后,即可正常使用对话功能;
但是,如果想要通过上传文档、图片等形成个人知识库,则还需要对数据进行向量化等操作,此时需要加载模型;
在没有挂梯子的情况下,在上传文档时会报错:fetch-failed-on-upload:
- https://docs.anythingllm.com/fetch-failed-on-upload#windows-visual-c-redistributable
- https://github.com/Mintplex-Labs/anything-llm/issues/821#issuecomment-1968382359
此时大概率是一位模型无法下载;
可以通过手动下载并加载的方式来解决:
参考:
首先,在 <your-anythingllm-path>/models/ 目录下创建 Xenova 目录;
随后下载模型压缩包,并上传到这个目录下:
最后解压缩即可:
1 | unzip all-MiniLM-L6-v2.zip |
解压缩完成后效果:
1 | root@VM-12-16-debian:~/workspace/anythingllm/models/Xenova# tree . |
功能测试
全部部署完成后,可以创建新的工作区,并且在工作区中创建 thread 进行新的对话;
同时在工作区中也可以上传文档,在对话时,AnythingLLM 会首先根据你的问题,在向量数据库中匹配,随后发给大模型作为 prompt 来生成对应回答!
结语
除了使用 Docker 来部署 AnythingLLM 之外,也提供了桌面的版本;
Desktop 版本和 Web 版的配置非常类似,这里不再赘述!
附录
源代码:
- https://github.com/JasonkayZK/docker-repo/blob/master/anything-llm.sh
- https://github.com/JasonkayZK/docker-repo/tree/milvus-standalone