LocalAI 是什么
LocalAI 是用 Go 编写的本地推理服务,对外暴露与 OpenAI 兼容的 REST 接口(模型列表、对话补全、嵌入、语音转写等),内部可挂载 llama.cpp、transformers、diffusers 等多种后端。定位是轻量自托管:一个进程同时提供文本、图像、语音能力,消费级硬件甚至纯 CPU 也能跑小模型,业务侧沿用官方 SDK 即可接入。默认监听 8080 端口。
基本信息
| 实现语言 | Go(单二进制/单容器分发) |
|---|---|
| 默认端口 | 8080 |
| 接口风格 | OpenAI 兼容(/v1/...) |
| 内置后端 | llama.cpp、transformers、diffusers 等 |
| 模型目录 | 容器内 /models,按目录约定放置 |
| 镜像 | localai/localai:latest(另有 GPU 变体) |
| 硬件门槛 | CPU 可跑小模型,GPU 非必需 |
典型使用场景
- 本地开发联调:业务代码先指向本地兼容接口,把模型服务换成真机时只改 base_url
- 数据不出内网:文档摘要、客服草稿、内部知识问答在自有机器上推理
- 多模态小工具:同一进程里同时要文本生成、图像生成与语音转写
- 模型横向对比:同一套 OpenAI 客户端代码换模型只改 model 字段
- 无 GPU 环境:开发笔记本或迷你主机上跑量化小模型做功能验证
容器快速启动
容器快速启动
docker run -d --name localai -p 8080:8080 \
-v $PWD/models:/models \
localai/localai:latest # 把宿主模型目录挂进容器
docker logs -f localai # 启动失败先看日志里的模型加载报错
curl http://127.0.0.1:8080/v1/models # 确认服务在跑且模型已加载
curl -s http://127.0.0.1:8080/readyz # 就绪探针:200 才代表可以接流量OpenAI 客户端直连
OpenAI 客户端直连
from openai import OpenAI # 官方 SDK 即可,无需专用客户端
c = OpenAI(base_url="http://127.0.0.1:8080/v1", api_key="local") # 本地一般不校验 key
r = c.chat.completions.create(
model="<模型名>", # 取值必须与 /v1/models 返回的名字一致
messages=[{"role": "user", "content": "你好"}],
)
print(r.choices[0].message.content) # 拿到文本即链路通常用端点对照
| 端点 | 用途 | 注意事项 |
|---|---|---|
| /v1/models | 列出已加载模型 | 模型没配好时这里为空 |
| /v1/chat/completions | 对话补全 | 绝大多数业务的入口 |
| /v1/embeddings | 文本向量 | 需要另行放置嵌入模型 |
| /v1/audio/transcriptions | 语音转写 | 需要 whisper 类模型 |
| /readyz | 就绪探针 | 给容器探针与负载均衡用 |
模型不是丢进 /models 就能用:官方 gallery 采用「模型文件 + 同名 YAML 配置」的目录结构,配置里写清后端类型与参数;只放一个裸 GGUF 常见的结果是进程正常起来但模型列表为空。
与同类工具的定位差别:Ollama 偏单机命令行体验,vLLM 偏 GPU 高并发吞吐,LocalAI 的卖点是「一个服务挂多后端 + 兼容接口 + 可跑 CPU」,适合做功能验证与轻量自建,不建议直接当高并发生产网关。