Chatbot UI集成LocalAI实现自托管的ChatGPT

本文比惯例提前了一天发,因为明天一早,老苏就踏上回乡的路了,三年没回老家,这次专门请了 2 天的假

难得回家,打算多陪陪家人,和多年不见的朋友聚聚,当然如果有网络条件,还是会正常发文的

在这个中秋和国庆双节即将到来之际,老苏提前预祝大家度过一个愉快的假期,中秋和国庆快乐~


什么是 Chatbot UI ?

Chatbot UI是一个非常实用的聊天机器人 UI 组件库,是 OpenAIChatGPT UI 的开源克隆。可以帮助开发者快速构建个性化的聊天机器人界面,该组件库支持多种聊天机器人平台。可以自定义提示词,支持数据导入导出,还支持谷歌搜索插件,支持最新的 GPT-4模型。

LocalAI 一文中,我们提到了 2 种调用 LocalAI 的方法,而今天要介绍的则是第 3 种,将 Chatbot UI 作为前端,通过一个类似聊天的界面,用于与 AI 模型进行交互。您可以以对话方式输入文本并接收模型的响应,将 LocalAI 打造成一款聊天机器人

能够用来做前端的还有个项目:https://github.com/Dhruvgera/LocalAI-frontend,只是颜值差了点,直接被老苏 pass 掉了

安装

在群晖上以 Docker 方式安装。

镜像下载

镜像没有在 docker hub 上发布,而是发布到了 ghcr.io

SSH 客户端登录到群晖后,执行下面的命令

1
2
# 拉取镜像
docker pull ghcr.io/mckaywrigley/chatbot-ui:main

如果拉不动,也可以试试 docker 代理网站:https://dockerproxy.com/,但是会多几个步骤

1
2
3
4
5
6
7
8
# 如果拉不动的话加个代理
docker pull ghcr.dockerproxy.com/mckaywrigley/chatbot-ui:main

# 重命名镜像(如果是通过代理下载的)
docker tag ghcr.dockerproxy.com/mckaywrigley/chatbot-ui:main ghcr.io/mckaywrigley/chatbot-ui:main

# 删除代理镜像(如果是通过代理下载的)
docker rmi ghcr.dockerproxy.com/mckaywrigley/chatbot-ui:main

下载完成后,可以在 映像 中找到

如果你还没有下载 LocalAI 的镜像,可以看看前文

文章传送门:搭建本地人工智能框架LocalAI

docker-compose 安装

如果你之前已经安装过 LocalAI,建议用下面合并后的 docker-compose.yml 文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
version: '3.6'

services:
api:
image: quay.io/go-skynet/local-ai:latest
container_name: localai-api
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8080/readyz"]
interval: 1m
timeout: 20m
retries: 20
ports:
- 8668:8080
volumes:
- ./models:/models:cached
environment:
- MODELS_PATH=/models
- DEBUG=true
- 'PRELOAD_MODELS=[{"url": "github:go-skynet/model-gallery/gpt4all-j.yaml", "name": "gpt-3.5-turbo"}]'
command: ["/usr/bin/local-ai" ]

chatgpt:
image: ghcr.io/mckaywrigley/chatbot-ui:main
container_name: localai-web
ports:
- 8669:3000
environment:
- 'OPENAI_API_KEY=sk-XXXXXXXXXXXXXXXXXXXX'
- 'OPENAI_API_HOST=http://api:8080'
depends_on:
api:
condition: service_healthy
  • PRELOAD_MODELS:启动期间预加载模型。为了允许 API 在首次启动时启动所有需要的模型;
  • OPENAI_API_KEY :用于 OpenAI 身份验证的默认 API 密钥。但我们用的是本地搭建的 LocalAI,所以这里并不需要真正的 OpenAI API Key,因此不需要修改,直接照抄即可;
  • OPENAI_API_HOST:指向 LocalAI的地址,也不需要修改;

更多的环境变量,请参考官方文档:https://github.com/mckaywrigley/chatbot-ui#configuration

然后执行下面的命令

1
2
3
4
5
6
7
# 进入 localai 目录
cd /volume1/docker/localai

# 更新目录下原来的 docker-compose.yml 文件

# 一键启动
docker-compose up -d

原来的 models 目录会多出 4 个文件,时间取决于你的网络情况

  • bin:是模型文件;
  • yaml: 是设置文件;
  • tmpl:是模板文件;

如果你网络下载遇到了问题,建议直接下载老苏分享到阿里云盘的文件:https://www.aliyundrive.com/s/XEc19L766Lz

运行

在浏览器中输入 http://群晖IP:8669 就能看到主界面

生成温度老苏还是设置为了 0.7,然后就可以开始提问了,这回老苏换了个问题

再问个中文的问题,居然回答是英文的

上难度

有没有发现一个问题?每次都会把之前的回复又输出一遍?不知道是 bug 还是模板设置问题

每次提问时,从 Finalshell 看日志, 发现 CPU 都是满负荷在工作

当然这都不是关键,关键是怎么才能把它真正搞成生产力工具呢?欢迎大家一起交流

参考文档

LocalAI/examples/chatbot-ui/docker-compose.yaml at master · go-skynet/LocalAI
地址:https://github.com/go-skynet/LocalAI/blob/master/examples/chatbot-ui/docker-compose.yaml

mckaywrigley/chatbot-ui: An open source ChatGPT UI.
地址:https://github.com/mckaywrigley/chatbot-ui

Chatbot UI
地址:https://www.chatbotui.com

Chatbot UI does not seems to be working · Issue #165 · go-skynet/LocalAI
地址:https://github.com/go-skynet/LocalAI/issues/165