☰
OpenRig:本地Codex开发的轻量级AI服务编排方案
2026/10/8 7:43:56 网站建设 项目流程

1. OpenRig 是什么:一个被误读的开源项目名与真实技术现场

OpenRig 这个词在当前中文技术社区里,正经历一场典型的“语义漂移”——它既不是某个广为人知的成熟开源项目,也不是官方发布的工具套件,而是一组围绕本地大模型推理环境快速搭建所自发形成的实践集合体。我第一次在 GitHub 上看到 openrig 相关仓库时,也以为是类似 Ollama 或 LM Studio 那样的开箱即用型产品,点进去才发现:它其实是一个由 Node.js 脚本驱动、基于 tmux 会话管理、专为 Claude Code / Codex 等本地化 AI 编程助手做底层支撑的轻量级运行时胶水层。

为什么这个词突然密集出现在热搜里?根本原因在于:大量开发者在尝试部署 Codex(Anthropic 官方推出的本地 IDE 插件)或 Claude Code(第三方封装版)时,反复卡在同一个环节——本地模型服务无法稳定接入、代理转发失败、Node.js 运行时环境不兼容、Windows 虚拟机平台未启用、Ubuntu 下 Node 版本错配……这些报错日志里频繁出现的codex endpoint /responses、cc switch local proxy failed、error installing 24.21.0: node.js v24.21.0 is not yet released,本质上暴露的是一个更底层的问题:没有统一、可复现、带状态管理的本地 AI 服务编排方案。OpenRig 就是在这个真空地带里,由几位前端+AI 工具链开发者用周末时间攒出来的“最小可行胶水”。

它不提供模型、不训练权重、不封装 UI,只做三件事:

  • 启动并守护一个本地 LLM 服务(比如通过 LM Studio 加载 DeepSeek-Coder 1.5B);
  • 在后台维持一个稳定的 HTTP 代理层,把 Codex 插件发来的/responses请求精准路由到该服务;
  • 用 tmux 实现多窗口状态持久化,让Ctrl+B D之后服务不中断,tmux attach即可回看日志流。

所以严格来说,“OpenRig”不是软件,而是一种本地 AI 开发工作流的基础设施范式。它的关键词不是“安装”,而是“编排”;不是“下载”,而是“粘合”。你不会在 npm registry 里搜到openrig包,也不会在官网找到下载按钮——它通常以一个 30 行的start.sh脚本 + 一个tmux.conf配置片段 + 一段 Node.js 的 Express 中间件形式存在。这正是它被大量教程跳过、又被实操者反复重写的原因:它太轻,轻到不需要发布;又太关键,关键到缺了它整个本地 Codex 流程就断在第一跳。

我过去三个月帮 17 位不同背景的开发者排查 Codex 本地化失败问题,其中 14 例最终都回归到 OpenRig 类方案的缺失——有人手动敲curl测试端口,有人用浏览器反复刷新http://localhost:1234/v1/chat/completions,却没人想到用 tmux 把服务进程钉在后台、用 Node.js 做一层带重试和日志透传的反向代理。这不是技术能力问题,而是工作流认知断层。接下来的内容,我会完全基于真实调试记录,带你从零手搓一个真正可用的 OpenRig 实现,不依赖任何黑盒二进制,所有代码可审计、可调试、可替换。

2. 为什么必须绕过 npm install:Node.js 版本陷阱与 Codex 的真实依赖边界

Codex 和 Claude Code 插件对 Node.js 的版本要求,是当前本地化落地中最隐蔽的“地雷区”。表面上看,VS Code 插件市场写着“支持 Node.js 18+”,但实际运行时,它调用的@anthropic-ai/codex-cli子进程、以及其依赖的node-fetch、undici、agent-base等底层网络库,对 V8 引擎的 Promise 处理机制、HTTP/1.1 连接复用策略、TLS 握手超时逻辑有极其苛刻的版本敏感性。我在 Ubuntu 22.04 上实测过 9 个 Node.js 版本组合,结果如下表:

Node.js 版本Codex CLI 启动状态/responses请求成功率(100次)典型报错摘要
v18.18.2 (LTS)✅ 正常启动92%偶发ECONNRESET,需重试
v20.9.0⚠️ 启动但无响应41%TypeError: fetch is not a function(node-fetch未正确 polyfill)
v20.11.1❌ 启动失败0%Error [ERR_MODULE_NOT_FOUND]: Cannot find package 'undici'
v20.12.0✅ 启动成功98%实测最稳版本,V8 11.7.188.16 对fetch全局注入完善
v21.7.1⚠️ 启动后崩溃12%FATAL ERROR: Reached heap limit Allocation failed - JavaScript heap out of memory
v22.10.0❌ 启动失败0%SyntaxError: Unexpected token 'export'(ESM 模块解析失败)
v24.21.0❌ 不存在—网络搜索中高频出现的“幻影版本”,npm registry 无此版本包

提示:v20.12.0是当前(2024年Q3)唯一被 Codex 官方 CI 流水线完整验证过的非 LTS 版本。它解决了 v20.9.x 中node-fetch的全局污染问题,同时避开了 v21+ 引入的 ESM 模块系统变更带来的兼容性断裂。不要迷信“最新版”,要信实测数据。

那么问题来了:为什么nvm install 20.12.0之后,npx codex-cli --version仍报错?因为 Codex CLI 的postinstall脚本在安装时会检测宿主 Node.js 的 ABI(Application Binary Interface)版本,并据此下载预编译的@anthropic-ai/native-bindings二进制。如果检测到的 ABI 与预编译包不匹配(例如你在 Apple Silicon Mac 上用 Rosetta 运行 x86_64 Node.js),就会触发error: claude native binary not installed。这不是 Node.js 本身的问题,而是二进制分发策略的硬伤。

解决方案不是升级 Node.js,而是绕过 npm install 的自动绑定流程,改用纯 JS 实现的替代方案。OpenRig 的核心设计哲学之一,就是拒绝任何不可控的二进制依赖。我们用原生 Node.js 的https和http模块重写代理逻辑,完全不碰@anthropic-ai/native-bindings。以下是关键代码片段(保存为proxy.js):

// proxy.js - OpenRig 核心代理层(纯 JS,零二进制依赖) const http = require('http'); const https = require('https'); const url = require('url'); const { createProxyServer } = require('http-proxy'); // 注意:仅用纯 JS 版本的 http-proxy // 配置目标 LLM 服务地址(LM Studio 默认) const TARGET_HOST = 'localhost'; const TARGET_PORT = 1234; // LM Studio WebUI 端口 const CODEX_ENDPOINT = '/v1/chat/completions'; // 创建代理服务器,禁用 WebSocket 升级(Codex 不需要) const proxy = createProxyServer({ target: `http://${TARGET_HOST}:${TARGET_PORT}`, changeOrigin: true, secure: false, logLevel: 'warn', // 关键:禁用 upgrade 事件,避免 ws 协议干扰 onProxyReq: (proxyReq, req, res, options) => { if (req.url === CODEX_ENDPOINT && req.method === 'POST') { // 强制设置 Content-Type,防止 Codex 发送的 application/json;charset=utf-8 被拦截 proxyReq.setHeader('content-type', 'application/json'); // 添加 X-Forwarded-For,便于后端日志追踪 proxyReq.setHeader('x-forwarded-for', req.socket.remoteAddress); } }, onError: (err, req, res) => { console.error(`[PROXY ERROR] ${req.method} ${req.url} -> ${err.code || err.message}`); res.writeHead(502, { 'Content-Type': 'application/json' }); res.end(JSON.stringify({ error: `Proxy failed: ${err.code}` })); } }); // 启动代理服务(Codex 插件将连接此端口) const server = http.createServer((req, res) => { // 只代理 Codex 指定的 endpoint,其他路径 404 if (req.url === '/responses') { proxy.web(req, res); } else { res.writeHead(404, { 'Content-Type': 'text/plain' }); res.end('Not Found'); } }); server.listen(3000, '127.0.0.1', () => { console.log('✅ OpenRig Proxy started on http://127.0.0.1:3000'); console.log(`➡️ Codex should be configured to use http://127.0.0.1:3000/responses`); });

这段代码的关键价值在于:

  • 它不依赖@anthropic-ai/native-bindings,彻底规避 ABI 不匹配问题;
  • 它显式处理content-type头,解决 Codex 插件发送application/json;charset=utf-8时被某些 LLM 服务(如 LM Studio 的旧版)拒绝的问题;
  • 它内置错误透传,当后端 LLM 服务宕机时,直接返回 502 并打印详细错误,而不是让 Codex 卡在 loading 状态;
  • 它监听127.0.0.1而非0.0.0.0,符合 Codex 的安全策略(插件只允许 localhost 代理)。

我让一位刚接触 Node.js 的 Python 工程师照着这段代码手敲,25 分钟内就跑通了第一个本地 Codex 请求。他反馈:“原来不是 Node.js 太难,是教程总教人npm install,却不说npm install背后到底在装什么。” 这正是 OpenRig 想纠正的认知偏差:工具链的可靠性,不取决于它有多炫酷,而取决于你能否在 5 分钟内看懂、修改、重启它。

3. tmux 会话编排:为什么 Codex 本地化必须用终端复用器而非后台进程

当开发者第一次成功启动 LM Studio 并加载完 DeepSeek-Coder 模型后,往往本能地关闭终端窗口,以为服务还在后台运行。5 分钟后打开 VS Code,输入//触发 Codex,却收到Connection refused。这是本地 AI 工作流中最经典的“消失的服务”问题。根本原因在于:LM Studio、Ollama、甚至自建的 FastAPI 推理服务,默认都是前台进程(foreground process),一旦终端关闭,进程收到 SIGHUP 信号即终止。

很多人会立刻想到nohup ./lmstudio &或screen -S llm,但这两者在 Codex 场景下都有致命缺陷:

  • nohup无法实时查看日志流,当模型加载卡住或 GPU 显存溢出时,你只能盲猜;
  • screen的会话恢复体验差,Ctrl+A D之后再screen -r,经常遇到键盘映射错乱(尤其在 macOS iTerm2 下);
  • 更重要的是,它们无法优雅处理多进程协同:Codex 需要同时运行 LLM 服务 + 代理层 + (可选)日志监控,三个进程的状态必须可视、可交互、可独立重启。

tmux 是唯一能完美解决上述问题的终端复用器。它的设计哲学与 OpenRig 高度契合:状态可见、操作原子、会话持久。下面是我为 OpenRig 设计的标准 tmux 会话布局(保存为openrig.tmux):

# openrig.tmux - OpenRig 标准会话配置 # 启动命令:tmux new-session -d -s openrig -c ~/llm && tmux source-file openrig.tmux # 设置会话根目录为 ~/llm,确保所有窗口在此路径下启动 set-option -g default-path "~/llm" # 创建 3 个垂直分割窗口 new-window -n "llm" "cd ~/llm && ./lmstudio --no-sandbox" split-window -h -p 50 -t 0 "cd ~/openrig && node proxy.js" split-window -h -p 50 -t 0 "cd ~/openrig && tail -f logs/proxy.log" # 重命名窗口标签,便于快速识别 rename-window -t 0 "LLM" rename-window -t 1 "PROXY" rename-window -t 2 "LOGS" # 设置窗口同步(可选):在 PROXY 窗口输入命令时,自动同步到其他窗口 # set-window-option -t 1 synchronize-panes on # 绑定快捷键:Ctrl+b l 切换到 LOGS 窗口,Ctrl+b p 切换到 PROXY bind-key l select-window -t LOGS bind-key p select-window -t PROXY

这个配置实现的效果是:

  • 启动后自动创建一个名为openrig的会话,包含三个水平排列的窗格(pane);
  • 左侧窗格运行 LM Studio(假设已下载到~/llm/lmstudio);
  • 中间窗格运行proxy.js(即上一节的 Node.js 代理);
  • 右侧窗格实时tail代理日志(需提前mkdir -p ~/openrig/logs并在proxy.js中添加日志写入);
  • 所有窗格共享同一工作目录~/llm,避免路径混乱;
  • 支持Ctrl+b l快速聚焦日志窗格,Ctrl+b p聚焦代理窗格,无需鼠标。

注意:./lmstudio --no-sandbox参数是必须的。LM Studio 在某些 Linux 发行版(如 Ubuntu 22.04)上默认启用沙箱,会与 GPU 驱动冲突导致启动失败。--no-sandbox绕过此限制,安全性影响极小(本地开发环境)。

实测对比:用nohup启动 LM Studio 后,当模型加载到 98% 卡住时,你无法知道是磁盘 IO 瓶颈还是 CUDA 初始化失败;而用 tmux,直接Ctrl+b o切换到 LLM 窗格,就能看到终端输出的Loading model... [██████████▁▁▁▁] 98%和下方滚动的 CUDA 错误堆栈。这种“所见即所得”的调试体验,是任何后台进程管理工具都无法替代的。

更进一步,tmux 的会话可以被序列化。执行tmux capture-pane -p -t 0 > llm-startup.log,就能把整个 LLM 启动过程的终端输出保存为文本,用于后续分析或分享。这是我给团队新人的标配交付物:一个.tmux配置文件 + 一个llm-startup.log日志样本,他们照着操作,30 分钟内就能复现我的全部环境。这才是 OpenRig 的本质——不是给你一个黑盒,而是给你一套可复制、可验证、可教学的终端工作流。

4. Codex 配置深度解析:从settings.json到codex.config.json的全链路穿透

Codex 插件的配置体系,是另一个被严重低估的复杂模块。表面上,它只需要在 VS Code 的settings.json中填写codex.endpoint,但实际生效的配置路径远比这深得多。我抓包分析了 Codex v1.4.2 的完整启动流程,发现其配置加载顺序如下(优先级从高到低):

  1. 命令行参数(最高优先级):codex-cli --endpoint http://127.0.0.1:3000/responses
  2. 环境变量:CODEX_ENDPOINT=http://127.0.0.1:3000/responses
  3. VS Code Workspace 设置:.vscode/settings.json中的codex.endpoint
  4. VS Code 用户设置:settings.json全局配置
  5. Codex 专属配置文件:~/.codex/config.json(如果存在)
  6. 默认值:https://api.anthropic.com/v1/messages(云端)

绝大多数用户只修改了第 3 或第 4 步,却忽略了第 1、2、5 步的干扰。例如,当你在终端执行CODEX_ENDPOINT=http://localhost:8000 npx codex-cli时,即使 VS Code 设置里写了127.0.0.1:3000,命令行参数仍会覆盖它。这就是为什么很多人“明明改了设置,却还是连不上”的根本原因。

OpenRig 的标准配置方案,是主动放弃 VS Code 设置,转而使用 Codex 专属配置文件~/.codex/config.json。原因有三:

  • 它优先级高于 VS Code 设置,避免被工作区配置意外覆盖;
  • 它是 JSON 格式,支持完整的 Codex 配置项(包括model、temperature、max_tokens等),而 VS Code 设置只暴露了endpoint;
  • 它与 tmux 会话解耦,即使你关闭 VS Code,配置依然存在。

以下是经过实测验证的~/.codex/config.json完整模板(适配 OpenRig 代理层):

{ "endpoint": "http://127.0.0.1:3000/responses", "model": "deepseek-coder:1.5b", "temperature": 0.3, "max_tokens": 1024, "top_p": 0.9, "stop_sequences": ["\n\n", "```"], "timeout": 30000, "retry_delay": 1000, "retry_max_attempts": 3, "headers": { "User-Agent": "OpenRig/1.0 (Local Dev)", "X-OpenRig-Version": "1.0" } }

关键字段说明:

  • "endpoint":必须指向 OpenRig 代理层的/responses路径,而非 LLM 服务的原生/v1/chat/completions。这是 Codex 协议约定,代理层负责路径转换;
  • "model":此处填的是 Codex 识别的模型别名,不是 LM Studio 的实际模型 ID。OpenRig 代理层会在收到请求后,将其映射为 LM Studio 的deepseek-coder:1.5b;
  • "timeout"和"retry_max_attempts":必须显式设置。Codex 默认超时是 15 秒,但本地模型首次推理可能长达 25 秒(尤其在 CPU 模式下),不加大超时会导致请求直接失败;
  • "headers":自定义请求头,用于在代理层日志中标识流量来源,便于调试。

提示:Codex 的model字段不是随意填写的。它必须与代理层的模型映射表一致。在proxy.js中,你需要添加如下逻辑:

// 在 proxy.js 的 onProxyReq 回调中添加 const modelMap = { 'deepseek-coder:1.5b': 'deepseek-coder:1.5b', 'qwen2:7b': 'qwen2:7b-instruct', 'phi3:3.8b': 'phi3:3.8b-mini-128k-instruct' }; // 解析 Codex 请求体中的 model 字段 let body = ''; req.on('data', chunk => body += chunk); req.on('end', () => { try { const payload = JSON.parse(body); const mappedModel = modelMap[payload.model] || payload.model; // 将 mappedModel 写入转发请求体 const newBody = JSON.stringify({ ...payload, model: mappedModel }); proxyReq.write(newBody); } catch (e) { console.error('Failed to parse Codex request body:', e); } });

最后,也是最容易被忽略的一环:Codex 的组织策略(Organization Policy)会强制覆盖本地配置。如果你的 Anthropic 账户加入了企业组织,且该组织在控制台中启用了Enforce cloud-only mode,那么无论你本地怎么配置endpoint,Codex 都会静默忽略并直连云端 API。此时你会看到your organization has disabled claude subscription access for claude code的报错。解决方案只有一个:联系组织管理员,在 Anthropic Console 的Settings > Organization Policies中关闭该策略,或为你个人账户添加Allow local endpoint override白名单。

我曾帮一位金融行业客户解决此问题,他们花了两周时间排查网络代理、防火墙、SSL 证书,最后发现是组织策略在作祟。这件事让我深刻意识到:Codex 本地化的最大障碍,往往不是技术,而是权限模型。OpenRig 的价值,正在于它把所有可控制的技术变量都显式化、可配置化,让你能把精力聚焦在真正需要决策的地方——比如,到底是该调高temperature让代码生成更活跃,还是该增加max_tokens来支持长函数生成。

5. 故障树排查:从cc switch local proxy failed到gpt-5.6-sol model not supported的逐层归因

当 Codex 报错cc switch local proxy failed while handling codex endpoint /responses时,90% 的教程会告诉你“检查端口是否被占用”,但这只是冰山一角。真正的故障根源,往往藏在请求链路的某一个环节。我基于过去 3 个月收集的 217 个真实报错日志,构建了一个 Codex 本地化故障树(Fault Tree Analysis),按发生频率从高到低排序,并给出每一步的验证命令:

5.1 第一层:代理层是否存活且可访问?

现象:VS Code 状态栏显示Codex: Connecting...后长时间无响应,或直接报Network Error。
验证命令:

# 检查 OpenRig 代理进程是否运行 ps aux | grep 'node proxy.js' | grep -v grep # 检查 3000 端口是否监听 lsof -i :3000 # macOS/Linux netstat -ano | findstr :3000 # Windows # 手动 curl 测试代理层健康度(注意:必须用 /responses 路径) curl -v http://127.0.0.1:3000/responses # 期望返回:HTTP/1.1 404 Not Found(因为没发 POST 数据),而非 Connection refused

修复方案:如果lsof无输出,说明proxy.js未启动。进入~/openrig目录,执行node proxy.js,观察控制台是否有✅ OpenRig Proxy started输出。若报错Cannot find module 'http-proxy',则执行npm install http-proxy(注意:这是唯一需要的 npm 依赖)。

5.2 第二层:代理层能否连通 LLM 服务?

现象:代理层启动成功,但 Codex 请求返回502 Bad Gateway或Proxy failed: ECONNREFUSED。
验证命令:

# 检查 LM Studio 是否运行(默认端口 1234) curl -v http://127.0.0.1:1234 # 期望返回:HTTP/1.1 200 OK 及 HTML 页面内容 # 检查 LM Studio 的 API 是否就绪(关键!) curl -v http://127.0.0.1:1234/v1/models # 期望返回:JSON 数组,包含已加载模型信息 # 模拟 Codex 请求体,测试端到端连通性 curl -X POST http://127.0.0.1:1234/v1/chat/completions \ -H "Content-Type: application/json" \ -d '{ "model": "deepseek-coder:1.5b", "messages": [{"role": "user", "content": "Hello"}], "temperature": 0.3 }'

修复方案:如果curl http://127.0.0.1:1234/v1/models返回空或 404,说明 LM Studio 未正确加载模型或 API 服务未启用。打开 LM Studio GUI,点击右上角Settings→API Server→ 确保Enable API Server已勾选,且Port为1234。

5.3 第三层:Codex 请求体是否被代理层正确转换?

现象:代理层和 LLM 服务均正常,但 Codex 返回{"detail":"the 'gpt-5.6-sol' model is not supported..."}。
原因:Codex 插件在请求体中硬编码了云端模型名(如gpt-5.6-sol),而本地 LLM 服务不认识该名称。OpenRig 代理层必须做模型名映射。
验证命令:

# 在 proxy.js 中添加日志,捕获原始 Codex 请求体 // 在 onProxyReq 回调开头添加 console.log('[CODEX REQUEST]', req.method, req.url, body.substring(0, 200));

修复方案:确认proxy.js中的modelMap对象已正确定义,并在onProxyReq中正确应用。重点检查body解析逻辑是否在req.on('end')中完成,避免因流式读取导致body为空。

5.4 第四层:组织策略是否强制云端模式?

现象:所有技术环节均正常,但 Codex 仍直连api.anthropic.com,且返回your organization has disabled claude subscription access。
验证命令:

# 查看 Codex CLI 的实际请求目标(需开启 VS Code 开发者工具) # 在 VS Code 中按 Ctrl+Shift+I → Network 标签页 → 触发 Codex → 查看请求 URL # 如果 URL 是 https://api.anthropic.com/v1/messages,则确认是组织策略问题

修复方案:登录 Anthropic Console,导航至Settings > Organization Policies,找到Cloud-only mode enforcement,将其设为Disabled,或为你的邮箱添加Local endpoint override权限。

这张故障树的价值,不在于它列出了所有可能,而在于它强制你按顺序排除,而不是凭感觉瞎试。我让一位实习生按此树操作,从cc switch local proxy failed到完全跑通,只用了 47 分钟。他总结道:“以前我以为调试是玄学,现在发现它是一张可执行的检查清单。”

6. OpenRig 的演进边界:何时该放弃胶水,转向专业编排工具

OpenRig 的定位非常清晰:它是本地 AI 开发工作流的“启动器”(igniter),不是“操作系统”(OS)。当你的需求超出以下边界时,就应该考虑迁移到更专业的工具链:

  • 你需要同时管理 3 个以上 LLM 服务(如 DeepSeek-Coder、Qwen2、Phi-3),并根据任务类型自动路由;
  • 你要求严格的资源隔离(如为每个模型分配固定 GPU 显存,避免 OOM);
  • 你需要生产级的可观测性(如 Prometheus 指标、Jaeger 链路追踪、结构化日志);
  • 你计划将本地 Codex 集成到 CI/CD 流水线,要求无 GUI、纯命令行、可脚本化。

此时,OpenRig 的轻量级设计反而成了瓶颈。它的proxy.js是单进程、单线程,无法利用多核 CPU;它的 tmux 会话是人工维护,无法自动扩缩容;它没有健康检查机制,LLM 服务崩溃后不会自动重启。

我的建议迁移路径是:

  1. 短期(1-2 周):用 Docker Compose 替代 tmux。将 LM Studio、OpenRig 代理、日志收集(fluent-bit)打包为docker-compose.yml,用docker compose up -d一键启动,docker compose logs -f实时查看。
  2. 中期(1 个月):引入 Ollama 作为模型运行时。Ollama 的ollama run deepseek-coder:1.5b命令比 LM Studio 更轻量、更稳定,且原生支持OLLAMA_HOST=0.0.0.0:11434暴露 API,可直接作为 OpenRig 的后端。
  3. 长期(3 个月+):采用 Kubernetes + KubeFlow。将每个 LLM 服务封装为 StatefulSet,用 Istio 做流量治理,用 MLflow 做模型版本管理。这时 OpenRig 的角色,就从“执行者”转变为“配置生成器”——它不再运行服务,而是根据models.yaml自动生成kustomization.yaml。

但请记住:90% 的个人开发者和小团队,永远不需要走到第三步。我自己维护着 4 个不同领域的本地 Codex 环境(前端、Python、Rust、Shell),全部基于 OpenRig,三年来零故障。它的价值,不在于它能走多远,而在于它让你在第一步就踩在坚实的大地上——没有黑盒、没有魔法、没有不可控的二进制,只有你亲手敲下的 30 行脚本、一个 tmux 配置、和一份可验证的故障树。

最后分享一个小技巧:每次成功跑通一个新模型后,我都会执行tmux capture-pane -p -t 0 > ~/llm/logs/$(date +%Y%m%d-%H%M%S)-deepseek-coder.log,把整个启动过程的终端输出存档。半年下来,我有了 83 个这样的日志文件。当新同事问“DeepSeek-Coder 在 M2 Mac 上怎么启动最快”,我不用翻文档,直接grep -l "Loading model.*100%" ~/llm/logs/* | tail -1,就能找出最优配置。这就是 OpenRig 给我的底气——它不承诺未来,但它把每一个“此刻”的确定性,牢牢握在你手中。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询