
joshxt/ezlocalai ezlocalai start # 使用特定模型启动 ezlocalai start --model unsloth/gemma-3-4b-it-GGUF # 使用自定义选项启动 ezlocalai start --model unsloth/Qwen3-VL-4B-Instruct-GGUF \ --uri http://localhost:8091 \ --api-key my-secret-key \ --*** <your-***-token> # 其他命令 ezlocalai stop # 停止容器 ezlocalai restart # 重启容器 ezlocalai status # 检查运行状态并显示配置 ezlocalai logs # 显示容器日志(使用-f参数实时跟踪) ezlocalai update # 拉取/重建最新镜像 # 直接从CLI发送提示 ezlocalai prompt "Hello, world!" ezlocalai prompt "这张图片里有什么?" -image ./photo.jpg ezlocalai prompt "解释量子计算" -m unsloth/Qwen3-VL-4B-Instruct-GGUF -temp 0.7
| 选项 | 默认值 | 描述 |
|---|---|---|
--model, -m | unsloth/Qwen3-VL-4B-Instruct-GGUF | HuggingFace GGUF模型,逗号分隔 |
--uri | http://localhost:8091 | 服务器URL |
--api-key | 无 | 认证API密钥 |
--*** | 无 | ***令牌,用于生成公网URL |
| 选项 | 默认值 | 描述 |
|---|---|---|
-m, --model | 自动检测 | 用于提示的模型 |
-temp, --temperature | 模型默认值 | 响应生成温度(0.0-2.0) |
-tp, --top-p | 模型默认值 | Top-p(核)采样参数(0.0-1.0) |
-image, --image | 无 | 本地图像文件路径或URL |
-stats, --stats | 关闭 | 响应后显示统计信息(令牌数、速度、时间) |
对于其他选项(如Whisper、图像模型等),编辑~/.ezlocalai/.env文件。
所有数据存储在~/.ezlocalai/目录:
| 目录 | 内容 |
|---|---|
~/.ezlocalai/data/models/ | 下载的GGUF模型文件 |
~/.ezlocalai/data/hf/ | HuggingFace缓存 |
~/.ezlocalai/data/voices/ | 语音克隆样本 |
~/.ezlocalai/data/outputs/ | 生成的图像/音频 |
~/.ezlocalai/.env | 配置文件 |
模型在容器更新时会保留,更新CLI或重建CUDA镜像时无需重新下载。
在Intel i9-***KS + RTX 4090 (24GB)上的性能测试:
| 模型 | 大小 | 速度 | 说明 |
|---|---|---|---|
| Qwen3-VL-4B | 4B | ~210 tok/s | 支持视觉,适合聊天 |
| Qwen3-Coder-30B | 30B (MoE) | ~65 tok/s | 编码模型,支持热切换 |
两个模型均在启动时预校准,热切换时间约1秒。
ezlocalai支持分布式fallback系统,当本地资源(VRAM/RAM)耗尽时,多个实例可相互fallback,或fallback到任何OpenAI兼容API。这实现了:
在.env文件中设置以下环境变量或传递给容器:
bash# Fallback服务器URL - 可以是另一个ezlocalai实例或任何OpenAI兼容API FALLBACK_SERVER=[***] # 另一个ezlocalai实例 # 或使用云服务提供商: # FALLBACK_SERVER=[***] # Fallback服务器认证 FALLBACK_API_KEY=your-api-key # 可选:覆盖OpenAI兼容fallback的模型(默认传递原始请求模型) # 如果未设置,原始请求的模型将传递给fallback服务器 # FALLBACK_MODEL=gpt-4o-mini # 组合内存阈值(VRAM + RAM),单位GB - 低于此值时触发fallback # 模型可卸载到系统RAM,因此组合内存比单独VRAM更准确 FALLBACK_MEMORY_THRESHOLD=8.0
系统通过检查/v1/resources端点自动检测FALLBACK_SERVER是另一个ezlocalai实例还是OpenAI兼容API。若是ezlocalai服务器,使用完整端点转发(保留原始请求);否则fallback到标准OpenAI API调用,传递原始请求模型(或使用FALLBACK_MODEL覆盖)。
机器A(带RTX 4090的主服务器):
bashEZLOCALAI_URL=[***] EZLOCALAI_API_KEY=shared-key FALLBACK_SERVER=[***] FALLBACK_API_KEY=shared-key
机器B(带RTX 3080的fallback服务器):
bashEZLOCALAI_URL=[***] EZLOCALAI_API_KEY=shared-key FALLBACK_SERVER=[***] FALLBACK_API_KEY=shared-key
两台机器相互fallback,形成弹性双节点集群。
运行本地ezlocalai并以OpenAI为fallback:
bashEZLOCALAI_URL=[***] FALLBACK_SERVER=[***] FALLBACK_API_KEY=sk-your-openai-key FALLBACK_MODEL=gpt-4o-mini
通过API检查fallback状态:
bash# 获取资源状态,包括fallback信息 curl http://localhost:8091/v1/resources # 检查fallback可用性和模型 curl http://localhost:8091/v1/fallback/status
当fallback到另一个ezlocalai实例时,自动转发以下端点:
/v1/chat/completions - 聊天补全(包括流式传输)/v1/completions - 文本补全/v1/embeddings - 文本嵌入/v1/audio/transcriptions - 语音转文本/v1/audio/speech - 文本转语音/v1/images/generations - 图像生成对于OpenAI兼容API,仅转发聊天补全和嵌入。
ezlocalai支持将TTS(文本转语音)和STT(语音转文本)处理卸载到专用语音服务器。这在以下场景特别有用:
设置VOICE_SERVER环境变量:
bash# 选项1:指向另一台ezlocalai服务器进行语音处理 VOICE_SERVER=[***] VOICE_SERVER_API_KEY=your-api-key # 可选,未设置时使用EZLOCALAI_API_KEY # 选项2:将此服务器设为语音服务器(保持TTS/STT加载) VOICE_SERVER=true
VOICE_SERVER=true)设为true时,服务器成为专用语音服务器:
VOICE_SERVER=<url>)设为URL时,语音请求转发到该服务器:
机器A(带RTX 4090的主LLM服务器):
bashDEFAULT_MODEL=unsloth/Qwen3-Coder-30B-GGUF VOICE_SERVER=[***] VOICE_SERVER_API_KEY=shared-key
机器B(带RTX 3090的语音服务器):
bashDEFAULT_MODEL=unsloth/Qwen3-4B-Instruct-GGUF # 用于基本任务的小型LLM VOICE_SERVER=true # 保持语音模型加载
机器A处理LLM推理,机器B处理所有语音处理,模型始终就绪。
ezlocalai包含完整的唤醒词训练和推理系统,支持AI助手的自定义语音激活。当VOICE_SERVER=true时,唤醒词端点启用。
ezlocalai使用TTS生成样本训练唤醒词模型,并导出多种格式用于跨平台部署:
mermaidgraph LR A[用户选择唤醒词] --> B[ezlocalai训练模型] B --> C[导出: PyTorch .pt] B --> D[导出: ONNX .onnx] B --> E[导出: ESPDL .espdl] C --> F[服务器推理] D --> G[移动应用<br/>ONNX Runtime Mobile] E --> H[ESP32-S3<br/>ESP-DL Framework]
| 格式 | 扩展名 | 大小 | 目标平台 | 框架 |
|---|---|---|---|---|
| PyTorch | .pt | ~1.7MB | 服务器 | PyTorch |
| ONNX | .onnx | ~1.7MB | 移动设备 | ONNX Runtime Mobile |
| ESPDL | .espdl | ~460KB | ESP32-S3 | ESP-DL v2.0+ |
ESPDL格式量化为int8,用于微控制器上的高效推理,模型大小减少约75%同时保持准确性。
bash# 训练新唤醒词模型 curl -X POST "http://localhost:8091/v1/wakeword/train" \ -H "Authorization: Bearer your-api-key" \ -H "Content-Type: application/json" \ -d '{"word": "hey jarvis"}' # 检查训练状态 curl "http://localhost:8091/v1/wakeword/jobs/{job_id}" \ -H "Authorization: Bearer your-api-key" # 列出可用模型 curl "http://localhost:8091/v1/wakeword/models" \ -H "Authorization: Bearer your-api-key" # 下载移动模型(ONNX格式) curl "http://localhost:8091/v1/wakeword/models/hey%20jarvis?format=onnx" \ -H "Authorization: Bearer your-api-key" \ -o hey_jarvis_model.onnx # 下载ESP32-S3模型(ESPDL格式) curl "http://localhost:8091/v1/wakeword/models/hey%20jarvis?format=espdl" \ -H "Authorization: Bearer your-api-key" \ -o hey_jarvis_model.espdl # 下载服务器端推理的PyTorch模型 curl "http://localhost:8091/v1/wakeword/models/hey%20jarvis?format=pytorch" \ -H "Authorization: Bearer your-api-key" \ -o hey_jarvis_model.pt
移动应用(Flutter/Dart):
dart// 从ezlocalai下载模型 final response = await http.get( Uri.parse('$serverUrl/v1/wakeword/models/$wakeWord?format=onnx'), headers: {'Authorization': 'Bearer $apiKey'}, ); // 使用ONNX Runtime Mobile保存和加载 final session = await OrtSession.create(modelPath);
ESP32-S3(C with ESP-DL):
c#include "custom_wakeword.h" // 初始化自定义唤醒词系统 custom_wakeword_init(); // 从服务器下载模型(存储在NVS中) custom_wakeword_download_model( "[***]




manifest unknown 错误
TLS 证书验证失败
DNS 解析超时
410 错误:版本过低
402 错误:流量耗尽
身份认证失败错误
429 限流错误
凭证保存错误
来自真实用户的反馈,见证轩辕镜像的优质服务