简介

LocalAI是一种直接替代REST API,和本地推理的OpenAI API规范兼容。它允许使用消费级硬件在本地或本地运行 LLM(不仅如此),支持与 ggml 格式兼容的多个模型系列。他不需要GPU(使用消费级设备的cpu计算)。

  • 本地 OpenAI 替代 REST API。
  • 无需GPU(使用cpu计算)。也不需要互联网接入。
    • 可选,GPU 加速可在llama.cpp兼容的 LLM 中使用。另请参阅构建部分
  • 支持多种型号
  • 🏃第一次加载后,它会将模型加载到内存中以加快推理速度
  • ⚡不进行 shell-out,而是使用 C++ 绑定来实现更快的推理和更好的性能。

功能特点

本地安装LocalAI

安装docker和docker-compose环境以及git环境

1
2
3
4
5
6
7
8
9
# 安装docker
$ curl https://www.putianhui.cn/package/script/install_docker.sh | bash

# 安装docker-compose
$ wget https://github.com/docker/compose/releases/download/v2.20.3/docker-compose-linux-x86_64
$ chmod +x docker-compose-linux-x86_64 && mv docker-compose-linux-x86_64 /usr/bin/docker-compose

# 安装git
$ yum install -y git

克隆LocalAI项目到本地或者下载release中对应版本的源码包到本地解压

1
2
3
4
5
6
7
# 方式一:使用git克隆项目
$ git clone https://github.com/go-skynet/LocalAI
$ cd LocalAI

# 方式二:下载release中对应版本的源码包到本地解压(推荐)
$ wget https://github.com/go-skynet/LocalAI/archive/refs/tags/v1.24.1.tar.gz && tar xzvf LocalAI-1.24.1.tar.gz && mv LocalAI-1.24.1 LocalAI
$ cd LocalAI

启动服务

1
2
3
4
5
6
7
8
9
# 切换到项目目录
$ cd LocalAI

# docker-compose启动服务,镜像有点大等的时间可能稍长
$ docker-compose up -d

# 启动成功后可以使用下面接口查看加载的模型,后面介绍各个模型的配置
$ curl http://localhost:8080/v1/models
{"object":"list","data":[{"id":"your-model.bin","object":"model"}]}

文本转语音(TTS)模型配置

下载并安装中文语音模型

1
2
3
4
5
6
# 下载中文语音模型
$ wget https://github.com/rhasspy/piper/releases/download/v0.0.2/voice-zh_CN-huayan-medium.tar.gz

# 解压模型压缩包,将模型文件和json移动到LocalAI的项目models目录下
$ tar xzvf voice-zh_CN-huayan-medium.tar.gz
$ mv zh_CN-huayan-medium* LocalAI/models

使用docker-compose重启LocalAI服务使其重新加载中文语音模型

1
2
$ cd LocalAI
$ docker-compose restart

查看中文语音模型是否加载成功

1
2
$ curl http://localhost:8080/v1/models
{"object":"list","data":[{"id":"zh_CN-huayan-medium.onnx","object":"model"}]}

使用其他客户端调用tts文本转语音接口,测试文本生成语音是否ok

1
$ curl http://192.168.1.52:8080/tts -H "Content-Type: application/json" -d '{"model":"zh_CN-huayan-medium.onnx","input": "测试一下文本生成语音是否正常"}'  --output ~/Desktop/test.mp3
  • 192.168.1.52:8080 为你部署LocalAI的主机ip地址
  • zh_CN-huayan-medium.onnx 为刚刚加载的中文语音模型名称
  • 测试一下文本生成语音是否正常 为要转成语音的文本内容
  • ~/Desktop/test.mp3 为生成的语音mp3文件存储目录和名称

使用播放器播放~/Desktop/test.mp3这个生成的音频文件,即可听到效果。

语音转文字模型配置

这里下载模型文件,最好下载small以上基本的模型(等级越高文件越大效果越好),我这里下载ggml-small.bin(ggml-small.en.bin)文件名带en的话就是英语的模型文件。

1
2
3
4
5
6
7
8
9
10
11
12
# 下载模型文件
$ wget https://huggingface.co/ggerganov/whisper.cpp/blob/main/ggml-small.bin

# 将模型文件放到LocalAI项目的models目录下
$ mv ggml-small.bin models/

# 创建ggml-small.bin模型文件的yaml配置文件
$ vim models/ggml-small.bin.yaml
name: whisper-1
backend: whisper
parameters:
model: ggml-small.bin

进入LocalAI的docker容器中安装ffmpeg这个软件,语音转文字时需要用到,不然接口会报错

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 进入容器
$ docker exec -it localai-1241-api-1 bash

# 将容器Debian镜像源变更到阿里云的镜像源
$ cat > /etc/apt/sources.list <<EOF
deb https://mirrors.aliyun.com/debian/ bullseye main non-free contrib
deb-src https://mirrors.aliyun.com/debian/ bullseye main non-free contrib
deb https://mirrors.aliyun.com/debian-security/ bullseye-security main
deb-src https://mirrors.aliyun.com/debian-security/ bullseye-security main
deb https://mirrors.aliyun.com/debian/ bullseye-updates main non-free contrib
deb-src https://mirrors.aliyun.com/debian/ bullseye-updates main non-free contrib
deb https://mirrors.aliyun.com/debian/ bullseye-backports main non-free contrib
deb-src https://mirrors.aliyun.com/debian/ bullseye-backports main non-free contrib
EOF

# 更新镜像源
$ apt-get update

# 安装ffmpeg
$ apt-get install -y ffmpeg

退出容器使用docker-compose重启容器服务使其重新加载ggml-small.bin新添加的模型。

1
$ docker-compose restart

查看ggml-small.bin模型是否加载成功

1
2
3
$ curl http://localhost:8080/v1/models
# 这里的 whisper-1 就是刚刚模型配置文件里面定义的加载模型后的自定义模型名称
{"object":"list","data":[{"id":"whisper-1","object":"model"},{"id":"zh_CN-huayan-medium.onnx","object":"model"}]}

使用其他客户端调用语音转文本接口,测试是否ok

1
2
3
4
5
6
7
8
# 下载测试用的ogg音频文件(mp3、mp4也可以的)
$ wget https://upload.wikimedia.org/wikipedia/commons/1/1f/George_W_Bush_Columbia_FINAL.ogg

# 通过接口上传音视频文件,测试语音转文字是否ok,这里的测试语音文件有3分钟,转换时间可能稍微长一点。
$ curl http://192.168.1.52:8080/v1/audio/transcriptions -H "Content-Type: multipart/form-data" -F file="@$PWD/George_W_Bush_Columbia_FINAL.ogg" -F model="whisper-1"

# 以下结果为示例返回结果
{"segments":[{"id":0,"start":0,"end":2240000000,"text":"它绝对是2023年度最佳美剧","tokens":[50364,11284,10115,251,8713,1541,2009,9356,5157,13127,8661,1593,111,9175,5935,100,50476]},{"id":1,"start":2240000000,"end":3600000000,"text":"仅仅播出15天","tokens":[1550,227,1550,227,49993,7781,5211,6135,50544]},{"id":2,"start":3600000000,"end":5120000000,"text":"就获得了8.9的高分","tokens":[3111,31127,115,5916,2289,23,13,24,1546,12979,6627,50620]}],"text":"它绝对是2023年度最佳美剧仅仅播出15天就获得了8.9的高分"}
  • 192.168.1.52:8080 为你部署LocalAI的主机ip地址
  • $PWD/George_W_Bush_Columbia_FINAL.ogg 取你音频文件的路径,$PWD代表音频文件在当前目录下。
  • whisper-1 为使用的模型名称

文本生成模型配置

下载GPT4ALL-J模型,(也可以使用其他语言模型,配置方法和这个类似)

1
2
3
4
# 切换到项目目录下,下载语言模型到models目录中,复制模板文件到models目录下
$ cd LocalAI
$ wget https://gpt4all.io/models/ggml-gpt4all-j.bin -O models/ggml-gpt4all-j
$ cp -rf prompt-templates/ggml-gpt4all-j.tmpl models/

使用docker-compose重启容器服务使其加载新增的语言模型

1
$ docker-compose restart

查看ggml-small.bin模型是否加载成功

1
2
3
$ curl http://localhost:8080/v1/models
# 这里的 ggml-gpt4all-j 就是新增的模型
{"object":"list","data":[{"id":"whisper-1","object":"model"},{"id":"ggml-gpt4all-j","object":"model"},{"id":"zh_CN-huayan-medium.onnx","object":"model"}]}

使用其他客户端调用生成接口,测试是否ok

1
2
3
4
$ curl http://192.168.1.52:8080/v1/chat/completions -H "Content-Type: application/json" -d '{"model": "ggml-gpt4all-j","messages": [{"role": "user", "content": "How are you?"}],"temperature": 0.9 }'

# 以下是生成的内容回复
{"object":"chat.completion","model":"ggml-gpt4all-j","choices":[{"index":0,"finish_reason":"stop","message":{"role":"assistant","content":"I'm doing well. Thank you for asking! How about yourself?"}}],"usage":{"prompt_tokens":0,"completion_tokens":0,"total_tokens":0}}