【免费下载链接】jev
jevos: an open-source alternative to Jev and Microsoft-Decision-1. Yes/no decisions, choices and scores with probabilities, on your laptop's CPU.
jevOS(jev)是一个可以跑在笔记本 CPU 上的开源是非判断模型,通过jev serve命令即可自托管部署为本地 HTTP 决策服务。本教程手把手教你用JEV_API_KEY环境变量开启 API 密钥鉴权、保留127.0.0.1默认绑定地址,并加一层 TLS 反向代理,完成自托管部署的安全加固,让服务既快又安全。
自托管部署长什么样:一个二进制 + 一个模型文件夹
在谈安全之前,先了解 jevOS 的部署形态,它比你想的简单得多:
- 一个预编译二进制(
jev)+ OpenVINO 运行库,无需 Python、无需 GPU; - 一个模型文件夹(
jev/model),INT8 量化模型,加载后约占 1 GB 内存; - 一个本地服务:
jev serve默认监听127.0.0.1:8017,只接受本机访问。
正因为"自托管"意味着服务由你负责运维,安全加固就成了必答题:没有密钥时,只要能访问该端口的任何人都能调用模型。下面按顺序完成三步加固。
第一步:一行环境变量开启 API 密钥鉴权
🔐 启动jev serve前设置JEV_API_KEY环境变量,此后除健康检查外的所有接口都要求请求携带Authorization: Bearer <key>头:
export JEV_API_KEY="$(openssl rand -hex 32)" ./jev serve启动时 stderr 的日志会告诉你当前处于哪种模式:
| 启动日志结尾 | 含义 |
|---|---|
(Bearer auth) | 已启用 API 密钥鉴权 |
(no auth) | 未启用,任何请求都放行 |
提示:每次部署变更后都看一眼这行日志,它是发现服务管理器没有把环境变量传进去的最快方式。空字符串会被视为"没有密钥"。
客户端在每个请求中带上密钥即可正常调用:
curl http://127.0.0.1:8017/v1/models -H "Authorization: Bearer $JEV_API_KEY"缺少或错误的密钥会得到401响应,带WWW-Authenticate: Bearer头,错误信息为Missing or invalid API key。这套 Bearer 方案与托管版 Jev API 完全一致,原本对接 Jev SDK 的客户端代码可以不改直接用。相关实现可以在 src/main.cpp(读取密钥并打印模式)和 src/server.cpp(请求级鉴权)中找到。
第二步:搞清哪些接口仍然开放
开启密钥后,各接口的鉴权情况如下:
| 接口 | 需要密钥 | 暴露的内容 |
|---|---|---|
POST /v1/systemone | ✅ 需要 | 决策结果 |
GET /v1/models | ✅ 需要 | 模型名称与jev-latest别名 |
GET /health | ❌ 设计上免密钥 | 就绪状态与模型名称(含模型文件 SHA-256) |
/health保持开放是有意为之:负载均衡器和进程守护进程需要无密钥就能做就绪检查,且它只告诉你"跑的是哪个模型",不会泄露你问了什么、得到了什么答案。如果你的网络环境中连这点信息都不能公开,可以在反向代理层直接拦截该路径。
第三步:绑定地址 + 反向代理 TLS,完成完整加固
⚠️jev serve本身只说纯 HTTP,没有证书选项。绑定地址(--host,默认127.0.0.1;--port,默认8017)决定谁能摸到服务:
- 客户端与服务器同机(本机脚本、n8n、Home Assistant 等):保持默认
127.0.0.1即可,其他机器无论如何都访问不到,这是最安全的配置; - 必须被其他机器访问(典型如容器内客户端):同时做三件事——设置
JEV_API_KEY、用防火墙把端口限制到需要的机器、加 TLS。
TLS 交给反向代理终结,jev 继续留在127.0.0.1后面。以 Caddy 为例,两行配置即可自动签发 HTTPS:
decisions.example.com reverse_proxy 127.0.0.1:8017代理层同时也是补齐 jev 自身没有的能力的地方:限流、IP 白名单、访问日志。
自托管部署上线检查清单
✅ 加固完成后,对照这份清单确认服务达到"可生产"状态:
- 启动日志显示
(Bearer auth); curl /health能返回{"status": "ready", ...},并核对其中fingerprint(模型文件哈希),确认回答你问题的是预期模型;- 服务管理器(systemd 等)配置了崩溃自动重启,并在
/health就绪前不放流量; - 若跨机器访问:密钥 + 防火墙 + TLS 三件套齐备;
- 请求日志记录模型指纹,便于日后审计"当时是哪个模型做的决策"。
自托管换来的不只是安全——上图显示在参考笔记本上,短请求延迟仅 28 ms,而文本始终不出你的机器。
清醒认识:API 密钥保护不了什么
最后明确一下单一密钥的能力边界,避免过度自信:
- 一个密钥、一个角色:没有用户、权限范围或按客户端区分的密钥。任何持有密钥的人可以问任何问题;换密钥意味着用新值重启服务(见 src/server.hpp 中密钥只有一份的设计);
- 没有限流:请求本身有上限(state 256 KB、单次至多 1024 个问题、默认 8192 token 上下文),但请求数量没有,单个客户端的突发流量会让所有请求排队;
- 不是数据策略:密钥只控制"谁能调用服务器",不控制"谁能读你的日志和存储的文本";
- 绝不进浏览器:前端代码里的密钥等于公开,务必从后端调用服务。
总结
jevOS 自托管部署的安全加固路径非常清晰:同机使用就守住127.0.0.1默认值;跨机器就"密钥 + 防火墙 + 反向代理 TLS"三件套一步到位。更多细节可阅读官方 wiki 的API 密钥加固文档和自托管 AI 决策指南。
【免费下载链接】jev
jevos: an open-source alternative to Jev and Microsoft-Decision-1. Yes/no decisions, choices and scores with probabilities, on your laptop's CPU.
相关推荐
如何10分钟用Docker部署Yuvomi:面向新手的完整自托管指南(含NAS应用商店安装)
如何10分钟用Docker部署Yuvomi:面向新手的完整自托管指南(含NAS应用商店安装) Yuvomi 是一个自托管的家庭计划器(self hosted f
如何快速部署Cloudpods:面向新手的完整使用教程
如何快速部署Cloudpods:面向新手的完整使用教程 Cloudpods作为一款开源的云原生多云管理平台,正在重新定义企业如何统一管理多个公有云和私有云资源。
后端云原生运维虚拟化人工智能AI 应用5分钟跑通离线多语言翻译:Argos Translate 上手指南
5分钟跑通离线多语言翻译:Argos Translate 上手指南 Argos Translate 是一个用 Python 写的开源离线翻译库:它把机器翻译模型
人工智能NLP本地部署
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考