一个地址,调用本地 AI
聊天、模型发现和语音转写统一经过同一网关。服务管理页负责启动、停止和切换;API 请求不会自动加载模型。
入口与认证
| 用途 | 地址 | 认证 |
|---|---|---|
| 聊天网页 | qwen.vincentz.dev | 当前 Arch 配置免登录 |
| API 基础地址 | https://qwen.vincentz.dev/v1 | Bearer API Key |
| 服务管理 / 转写网页 | /admin · /asr | 独立管理员账号 |
| 公开状态 | /status.json | 免登录,仅显示服务状态 |
本机使用 http://127.0.0.1:18000。API key 从当前系统用户目录 ~/.config/qwen/api-keys.txt 读取。管理员账号保存在 ~/.config/local-ai/admin.json,与 API key 分开。
聊天 API
兼容 OpenAI Chat Completions。模型 ID:bonsai-27b-ternary、qwen3.8-27b。先在管理页启动目标模型,再在聊天页或客户端选择相同的模型。
export LOCAL_AI_KEY='替换为你的 API key'
curl https://qwen.vincentz.dev/v1/chat/completions \
-H "Authorization: Bearer $LOCAL_AI_KEY" \
-H 'Content-Type: application/json' \
-d '{"model":"bonsai-27b-ternary","messages":[{"role":"user","content":"你好"}],"stream":true}'
模型发现:GET /v1/models。公网长请求使用 stream: true。图片、思考档位与客户端配置见网关详细文档。
语音转写 API
先启动 ASR,检查 GET /v1/asr/health 的 model_state 为 ready。提交可直接下载的公网音频或视频文件链接,支持语言提示,不执行翻译。
curl https://qwen.vincentz.dev/v1/asr/jobs \
-H "Authorization: Bearer $LOCAL_AI_KEY" \
-H 'Content-Type: application/json' \
-d '{"url":"https://example.com/video.mp4","language":"auto"}'
示例地址需要替换。返回任务 id 后,每 2 秒查询 GET /v1/asr/jobs/{id},带同一个 Bearer key。仅 status=completed 表示成功,文字在 result.text,分段在 result.segments;error 或 cancelled 时停止轮询。
任务与结果保存在内存,重启 ASR 后不可查询;请及时保存结果。最多 2 个未完成任务,识别串行处理。直链仅支持公网 HTTP/HTTPS 的 80/443 端口,不能访问本机或内网。文件限制与分段长度见 health 的 limits。
切换与状态灯
Bonsai、Qwen 和 ASR 轮流使用显卡,切换会先停止冲突服务再加载目标服务;聊天网页与网关始终独立运行。加载完成才显示绿色“已就绪”。有推理请求或受影响的转写任务时,管理操作返回 409;等待任务结束后重试。
绿色:已就绪;黄色:加载中或停止中;红色:服务异常;灰色:未启动或无法取得状态。Pages 每 15 秒检查一次;电脑关机、Tunnel 离线或检查超时时显示“无法连接”。Pages 本身仍可阅读文档,服务控制需要本机网关在线。
常见响应
401:认证失败;409:正在处理请求或切换服务;429:ASR 队列已满;503:服务未启动或模型尚未就绪。管理页的错误提示与本机服务日志用于定位加载失败。