LocalAI 一键部署本地 AI
一句话概述
LocalAI 是一个免费、开源的 AI 引擎,兼容 OpenAI/Anthropic API,可以在消费级硬件上(不需要 GPU)运行 LLM 文本生成、图像生成、语音转文字、文字转语音等 36+ 种 AI 能力,真正做到"AI 不出门,数据不上云"。
核心知识点表格
| 知识点 | 说明 |
|---|
| 项目地址 | https://github.com/mudler/LocalAI |
| 最新版本 | v3.11.0(2026年) |
| 核心特点 | 不需要 GPU、兼容 OpenAI API、一键 Docker 部署 |
| API 兼容 | OpenAI、Anthropic、ElevenLabs |
| 支持后端 | llama.cpp、vLLM、transformers、whisper、diffusers、MLX 等 36+ |
| 支持功能 | 文本生成、图像生成、TTS、STT、嵌入、视觉、视频 |
| 硬件要求 | 最低 8GB 内存(CPU 即可运行) |
| 许可证 | MIT |
| GPU 支持 | NVIDIA CUDA、AMD ROCm、Intel SYCL、Apple Metal、Vulkan |
安装与配置
方式一:Docker 一键启动(最简单)
# 最简单的启动方式,一行命令搞定
docker run -ti \
--name local-ai \ # 容器名称
-p 8080:8080 \ # 映射端口(本机 8080 → 容器 8080)
localai/localai:latest # 使用最新版镜像
# 带 GPU 加速(NVIDIA)
docker run -ti \
--name local-ai \
--gpus all \ # 挂载所有 NVIDIA GPU
-p 8080:8080 \
localai/localai:latest-gpu-nvidia-cuda-12 # CUDA 12 版镜像
# AIO(All-in-One)版本:自带预装模型,开箱即用
docker run -ti \
--name local-ai \
-p 8080:8080 \
localai/localai:latest-aio-cpu # CPU 版 AIO 镜像
# AIO + GPU 版本
docker run -ti \
--name local-ai \
--gpus all \
-p 8080:8080 \
localai/localai:latest-aio-gpu-nvidia-cuda-12 # GPU 版 AIO
方式二:macOS 安装
# macOS 用户可以下载 DMG 安装包
# 从 GitHub Releases 页面下载:
# https://github.com/mudler/LocalAI/releases
# 安装后需要解除 macOS 安全限制
sudo xattr -d com.apple.quarantine /Applications/LocalAI.app # 移除隔离标记
方式三:Docker Compose(生产环境推荐)
# docker-compose.yml
version: '3.8'
services:
localai:
image: localai/localai:latest-aio-gpu-nvidia-cuda-12 # GPU AIO 版
ports:
- "8080:8080" # API 端口
volumes:
- ./models:/build/models # 模型目录持久化
environment:
- THREADS=8 # CPU 线程数
- CONTEXT_SIZE=4096 # 上下文窗口大小
- DEBUG=false # 关闭调试模式
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: all # 使用所有 GPU
capabilities: [gpu]
restart: unless-stopped # 崩溃后自动重启
docker compose up -d # 后台启动
基本使用
安装模型(通过 Web UI)
# 启动后打开浏览器访问 http://localhost:8080
# 在 Web UI 的模型库中可以一键安装各种模型
# 或者通过 API 安装模型
curl http://localhost:8080/models/apply \
-H "Content-Type: application/json" \
-d '{
"url": "github:go-skynet/model-gallery/llama3.1-8b-instruct.yaml"
}'
# url 指定模型库中的模型定义文件
文本对话(兼容 OpenAI API)
import openai # 直接使用 OpenAI 官方 SDK
# 把 API 地址指向本地 LocalAI
client = openai.Client(
base_url="http://localhost:8080/v1", # LocalAI 地址
api_key="not-needed" # 不需要 API Key
)
# 发送对话请求(和 OpenAI 用法完全一样)
response = client.chat.completions.create(
model="llama-3.1-8b-instruct", # 已安装的模型名
messages=[
{"role": "system", "content": "你是一个有帮助的AI助手。"},
{"role": "user", "content": "什么是微生物组学?"}
],
temperature=0.7 # 控制回答的随机性
)
print(response.choices[0].message.content) # 输出回答
生成文本嵌入(用于 RAG)
# 生成文本向量(embedding),用于语义搜索
response = client.embeddings.create(
model="text-embedding-ada-002", # 嵌入模型名
input="宏基因组学是研究环境样本中所有微生物基因组的学科" # 要编码的文本
)
embedding = response.data[0].embedding # 获取向量
print(f"向量维度: {len(embedding)}") # 打印维度数
图像生成
# 生成图像(需要先安装 Stable Diffusion 模型)
response = client.images.generate(
model="stablediffusion", # 图像生成模型
prompt="a cute cat sitting on a laptop, digital art", # 描述
size="512x512", # 图像尺寸
n=1 # 生成 1 张
)
print(response.data[0].url) # 获取生成图像的 URL
语音转文字(STT)
# 语音转文字(需要 whisper 模型)
with open("audio.wav", "rb") as audio_file: # 打开音频文件
transcript = client.audio.transcriptions.create(
model="whisper-1", # Whisper 语音识别模型
file=audio_file, # 音频文件
language="zh" # 指定中文
)
print(transcript.text) # 输出识别结果
高级用法
Function Calling(函数调用)
import json # JSON 处理
# 定义可调用的工具/函数
tools = [
{
"type": "function",
"function": {
"name": "get_gene_info", # 函数名
"description": "查询基因信息", # 描述
"parameters": {
"type": "object",
"properties": {
"gene_name": {
"type": "string",
"description": "基因名称,如 BRCA1"
}
},
"required": ["gene_name"] # 必填参数
}
}
}
]
# 发送带工具的请求
response = client.chat.completions.create(
model="llama-3.1-8b-instruct",
messages=[{"role": "user", "content": "查一下 TP53 基因的信息"}],
tools=tools, # 传入工具定义
tool_choice="auto" # 让模型自动决定是否调用
)
# 检查模型是否调用了函数
if response.choices[0].message.tool_calls:
call = response.choices[0].message.tool_calls[0]
print(f"模型调用了: {call.function.name}") # 函数名
print(f"参数: {json.loads(call.function.arguments)}") # 参数
多节点分布式推理
# LocalAI 支持 P2P 联邦模式,多台机器组成集群
# 节点 1(主节点)
docker run -ti \
-p 8080:8080 \
-e LOCALAI_P2P=true \ # 启用 P2P 模式
-e LOCALAI_P2P_TOKEN=my-token \ # 集群令牌(所有节点必须相同)
localai/localai:latest
# 节点 2(工作节点,在另一台机器上)
docker run -ti \
-p 8080:8080 \
-e LOCALAI_P2P=true \
-e LOCALAI_P2P_TOKEN=my-token \ # 与主节点相同的令牌
localai/localai:latest
# 集群会自动发现对方,智能路由请求
MCP 支持(Agent 能力)
# LocalAI v3.10.0+ 支持 MCP 协议
# 让 AI Agent 可以调用外部工具
# 在配置文件中启用 MCP
# models/my-agent.yaml
# name: my-agent
# backend: llama-cpp
# parameters:
# mcp:
# - tool: web_search
# endpoint: http://searxng:8080
常见报错与解决
| 报错信息 | 原因 | 解决方法 |
|---|
model not found | 模型未安装或名称错误 | 在 Web UI 安装模型,或检查模型名是否正确 |
out of memory | 内存/显存不足 | 使用更小的模型或增加内存/显存 |
connection refused at 8080 | 服务未启动 | 检查 Docker 容器是否在运行:docker ps |
slow inference | CPU 模式速度慢 | 正常现象,建议使用 GPU 加速或量化模型 |
macOS 无法打开 | 苹果安全限制 | 运行 sudo xattr -d com.apple.quarantine /Applications/LocalAI.app |
GPU not detected | Docker 未配置 GPU | 确保安装了 nvidia-container-toolkit 并使用 --gpus all |
速查表
# === LocalAI 常用命令速查 ===
# Docker 一键启动(CPU)
docker run -p 8080:8080 localai/localai:latest
# Docker 启动(GPU)
docker run --gpus all -p 8080:8080 localai/localai:latest-gpu-nvidia-cuda-12
# AIO 预装模型版
docker run -p 8080:8080 localai/localai:latest-aio-cpu
# 查看已安装模型
curl http://localhost:8080/v1/models
# 对话 API
curl http://localhost:8080/v1/chat/completions \
-d '{"model":"llama-3.1-8b-instruct","messages":[{"role":"user","content":"Hello"}]}'
# 嵌入 API
curl http://localhost:8080/v1/embeddings \
-d '{"model":"text-embedding-ada-002","input":"hello world"}'
# 安装模型
curl http://localhost:8080/models/apply \
-d '{"url":"github:go-skynet/model-gallery/llama3.1-8b-instruct.yaml"}'
# Web UI
# 浏览器打开 http://localhost:8080
与同类工具对比
| 特性 | LocalAI | Ollama | LM Studio | vLLM |
|---|
| 核心定位 | 全能 AI 引擎 | 轻量 LLM 运行器 | 桌面 LLM 应用 | 高性能推理服务 |
| API 兼容 | OpenAI + Anthropic + ElevenLabs | OpenAI | OpenAI | OpenAI |
| 多模态 | 文本+图像+语音+视频 | 文本+图像 | 文本+图像 | 文本 |
| GPU 要求 | 不需要 | 不需要 | 不需要 | 推荐 |
| 分布式 | P2P 联邦 | 不支持 | 不支持 | 支持 |
| 图像生成 | 支持(Stable Diffusion) | 不支持 | 不支持 | 不支持 |
| TTS/STT | 支持 | 不支持 | 不支持 | 不支持 |
| 上手难度 | 中等 | 非常简单 | 非常简单 | 较难 |
选择建议:如果你只需要跑 LLM 聊天,Ollama 最简单。如果你需要文本+图像+语音的全能方案,LocalAI 是唯一选择。生产环境高并发推荐 vLLM 或 SGLang。