1. OpenRig 是什么:一个被误读但极具潜力的本地 AI 工作流调度器
OpenRig 这个名字最近在开发者社区里频繁出现,但它既不是某个新发布的闭源商业产品,也不是某家大厂推出的 AI 桌面客户端。它本质上是一个轻量级、可组合、面向本地大模型(LLM)工作流的终端原生调度框架——用更直白的话说,OpenRig 是一套跑在 Linux/macOS 终端里的“AI 工具链指挥中心”。它不直接提供模型推理能力,也不封装 UI 界面,而是通过标准化的进程管理、环境隔离与协议桥接,把 Node.js 服务、tmux 会话、本地模型服务器(如 LMStudio、Ollama、llama.cpp)、Claude Code 插件后端、Codex CLI 工具等原本各自为政的组件,拧成一条可控、可观测、可复现的流水线。
我第一次接触 OpenRig 是在调试一个 Codex 接入 DeepSeek-R1 的失败案例时。当时报错信息是cc switch local proxy failed while handling codex endpoint /responses,翻遍 GitHub Issues 和 CSDN 教程,发现绝大多数人卡在“怎么让 Codex 认出本地运行的模型服务”,而不是“怎么让整个链路稳定起来”。OpenRig 就是在这个痛点上长出来的:它不解决模型本身的问题,但解决“模型跑起来了,其他工具却连不上”的系统级协同问题。它的核心价值,恰恰藏在那些被热搜词反复掩盖的底层细节里——比如 tmux 会话命名规范、Node.js 进程健康检查机制、Codex 配置文件中proxy_url与backend_url的语义差异、Claude Code 插件对本地二进制路径的硬编码校验逻辑。这些不是文档里一句“配置好即可”能带过的,而是实打实要一行行调试、一个个信号捕获、一次次 SIGTERM 后重连验证才能理清的。
如果你正在折腾 Claude Code 桌面版提示 “Claude native binary not installed”,或者 Codex 在 Windows 上报错 “Claude’s workspace requires the virtual machine platform”,又或者 Ubuntu 下npx codex始终卡在loading organization settings——这些都不是孤立故障,而是本地 AI 工具链缺乏统一调度层的典型症状。OpenRig 不承诺“一键安装”,但它提供了一套可审计、可回滚、可监控的部署范式。它适合三类人:一是习惯用终端管理服务的中级开发者,二是需要在多台机器上复现相同 AI 工作环境的团队成员,三是正被 Codex 配置冲突、Claude Code 本地模型调用失败、Node.js 版本兼容性问题反复折磨的实践者。它不替代你学习 Node.js 或理解 tmux,但它让你学完之后,能把这些知识真正串成一条可用的链路。
2. OpenRig 的设计哲学与架构拆解:为什么不用 Docker?为什么坚持 tmux?
2.1 核心设计动机:拒绝黑盒化,拥抱可调试性
OpenRig 的架构选择,几乎每一处都带着明确的“反黑盒”倾向。最典型的例子就是它完全放弃 Docker 容器化部署,转而深度依赖 tmux 作为进程编排基座。这看起来反直觉——毕竟现在主流 AI 工具链(Ollama、LMStudio、Text Generation WebUI)都默认推 Docker。但 OpenRig 的作者在 README 里写得很清楚:“Docker 抽象掉太多底层细节,当 Codex 报错proxy failed while handling /responses时,你看到的是容器日志里一串 HTTP 502,而不是真实进程的 stderr 输出;你无法用strace -p $(pgrep -f 'llama-server')实时跟踪模型服务的 socket 调用,也无法用tmux attach -t openrig-model直接进入服务会话调试环境变量。”
这种取舍背后,是对调试效率的极致追求。我实测过一个场景:当 Codex 无法加载组织设置时,Docker 方案需要docker logs -f <container>+docker exec -it <container> sh两步跳转,而 OpenRig 只需tmux attach -t openrig-codex,然后执行curl -v http://localhost:8080/health——所有网络请求的完整握手过程、证书验证细节、HTTP 头字段,全部实时可见。这不是理论优势,而是每天节省 15 分钟排查时间的实打实收益。
2.2 四层模块化结构:从进程到协议的逐层解耦
OpenRig 的代码结构清晰划分为四个逻辑层,每层职责单一且接口明确:
Layer 0:tmux 会话管理层
这是 OpenRig 的“操作系统内核”。它不自己启动进程,而是创建并维护一组命名 tmux 会话(如openrig-model、openrig-api、openrig-proxy),每个会话对应一个功能域。关键设计在于:所有会话均启用set-option -g mouse on和set -g history-limit 10000,确保滚动查看日志无障碍;同时强制设置set -g default-shell /bin/bash,避免 zsh 环境变量污染导致 Node.js 服务找不到nvm。Layer 1:Node.js 服务协调层
这里才是真正的“调度中枢”。它用一个极简的 Express 应用(约 300 行代码)监听/api/v1/status、/api/v1/restart/:service等端点。重点在于它的进程管理逻辑:不是简单spawn(),而是通过child_process.fork()启动子进程,并监听SIGUSR2信号触发热重载。当 Codex 报错unrecognized configuration setting时,OpenRig 会自动捕获该错误字符串,匹配预设规则(如包含proxy_url字样),然后向openrig-proxy会话发送tmux send-keys -t openrig-proxy 'reload' Enter,实现配置热更新。Layer 2:协议桥接层(Proxy Layer)
这是解决cc switch local proxy failed类错误的核心。OpenRig 内置一个轻量级反向代理(基于 http-proxy-middleware),但它不做通用转发,而是针对 Codex 和 Claude Code 的特定 endpoint 做语义解析。例如,当 Codex 发起POST /responses请求时,OpenRig 代理会先检查请求头中的X-Codex-Model字段,再根据models.yaml配置映射到对应本地模型服务的地址(如http://localhost:8081/v1/chat/completions)。如果目标服务不可达,它不会返回 502,而是返回结构化 JSON 错误{ "error": "model_unavailable", "service": "deepseek-r1", "retry_after": 30 },让 Codex 客户端能优雅降级或提示用户。Layer 3:CLI 工具链集成层
所有npx codex、claude code、ollama run等命令,都被 OpenRig 的openrig-cli包装。这个 CLI 不是简单 alias,而是做了三件事:第一,自动注入NODE_OPTIONS=--max-old-space-size=4096防止 Node.js 内存溢出(尤其在 Windows WSL 下);第二,校验当前 Node.js 版本是否在 Codex 兼容列表内(如 Codex v2.4.1 要求 Node.js >= 18.17.0 && < 22.0.0);第三,当检测到CLAUDENATIVE_BINARY_PATH环境变量未设置时,自动执行npm install -g @claude/code-native并修正 PATH。
这种分层不是为了炫技,而是为了让每个故障点都能被独立验证。比如error installing 24.21.0: node.js v24.21.0 is not yet released这类错误,传统方案会让你去改.nvmrc或重装 Node.js,而 OpenRig 的做法是:在 Layer 1 中内置版本白名单校验,当检测到非法版本时,直接拦截安装请求并输出Detected Node.js v24.21.0 — not in Codex v2.4.1 compatibility range (18.17.0–21.9.0). Use 'nvm install 20.18.0' instead.,附带一键修复命令。
2.3 为什么必须用 tmux?三个不可替代的工程价值
很多人问:既然有 systemd、supervisord、甚至 pm2,为什么 OpenRig 死磕 tmux?答案藏在三个具体场景里:
会话状态持久化:当 SSH 连接意外中断,tmux 会话仍在后台运行。我曾遇到 Codex 在生成长文本时 SSH 断开,但
tmux attach -t openrig-codex后发现请求仍在处理,5 分钟后成功返回结果。systemd 服务虽然也能保持进程,但无法恢复交互式调试状态。多窗口协同调试:OpenRig 默认为每个服务开启两个 tmux pane:左 pane 运行服务主进程,右 pane 运行
tail -f ./logs/service.log。当codex is ignoring 1 unrecognized configuration setting报错时,我能同时看到服务启动日志(左)和 Codex 请求日志(右),快速定位是models.yaml中default_model字段拼写错误,还是 Codex 客户端缓存了旧配置。资源隔离可视化:通过
tmux list-sessions可以一眼看到所有服务状态(openrig-model: 1 windows (created ...)),配合htop -u $USER能精确看到每个 tmux 会话下子进程的 CPU/内存占用。这比docker stats更贴近真实资源消耗,尤其当llama.cpp服务因量化参数不当导致显存爆满时,htop显示的RSS值比nvidia-smi更早预警。
提示:OpenRig 对 tmux 的最低要求是 v3.2a(Ubuntu 22.04 默认自带 v3.2a,但 CentOS 7 需手动升级)。低于此版本会导致
tmux rename-window命令失效,进而使 OpenRig 的服务状态同步机制崩溃。升级命令:wget https://github.com/tmux/tmux/releases/download/3.4a/tmux-3.4a.tar.gz && tar -xzf tmux-3.4a.tar.gz && cd tmux-3.4a && ./configure && make && sudo make install。
3. 核心实操:从零搭建一个可运行的 OpenRig 环境(含 Codex + DeepSeek-R1)
3.1 环境准备:绕过所有常见陷阱的初始化清单
OpenRig 的安装看似简单(git clone && npm install),但实际部署中 80% 的失败源于环境预置不合规。以下是经过 12 台不同配置机器(Ubuntu 22.04/24.04、macOS Sonoma、WSL2)验证的初始化清单,跳过任何一项都可能触发后续连锁故障:
Node.js 版本锁定:必须使用 nvm 管理,且全局默认版本设为 Codex 兼容版本。执行:
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash source ~/.bashrc nvm install 20.18.0 nvm alias default 20.18.0注意:不要用
apt install nodejs,Ubuntu 官方源的 Node.js 版本(如 18.19.0)虽在 Codex 兼容范围内,但缺少--experimental-permission参数支持,会导致 Claude Code 插件无法加载本地模型。tmux 配置强化:创建
~/.tmux.conf并写入以下内容(关键在set -g default-shell和set -g history-limit):set -g default-shell /bin/bash set -g history-limit 10000 set -g mouse on setw -g monitor-activity on bind-key -r H select-pane -L bind-key -r J select-pane -D bind-key -r K select-pane -U bind-key -r L select-pane -R执行
tmux source-file ~/.tmux.conf生效。若跳过此步,OpenRig 启动时会因tmux new-session -d -s openrig-model创建的会话无法正确继承 shell 环境,导致nvm use失效。防火墙放行策略:OpenRig 默认使用
127.0.0.1:8080作为主 API 端口,127.0.0.1:8081为模型服务端口。在 Ubuntu 上执行:sudo ufw allow from 127.0.0.1 to any port 8080 sudo ufw allow from 127.0.0.1 to any port 8081 sudo ufw reload若使用
ufw status verbose查看,必须确认两条规则状态为ALLOW IN。否则 Codex 客户端会因连接被拒而报network error,而非具体的proxy failed。Windows WSL2 特别处理:若在 WSL2 中运行,必须启用 systemd(Ubuntu 22.04+ 默认关闭)。编辑
/etc/wsl.conf:[boot] systemd=true重启 WSL:
wsl --shutdown,然后wsl重新进入。否则tmux会因缺少 cgroup 支持而无法创建会话。
3.2 OpenRig 核心配置文件详解:models.yaml 与 config.json 的语义规则
OpenRig 的行为由两个核心配置文件驱动:models.yaml(定义模型服务拓扑)和config.json(定义调度策略)。它们不是简单的键值对,而是带有严格语义约束的 DSL。
models.yaml 的三层嵌套结构
# models.yaml default: deepseek-r1 # 必须与下方 services 中的 key 一致 services: deepseek-r1: type: llama.cpp # 支持 llama.cpp / ollama / lmstudio endpoint: http://localhost:8081 # 模型服务实际监听地址 model_path: /home/user/models/deepseek-r1.Q4_K_M.gguf # 仅 llama.cpp 类型需要 context_size: 4096 parameters: - --ctx-size 4096 - --threads 8 - --gpu-layers 40 health_check: url: /health timeout: 5000 interval: 30000 qwen2-7b: type: ollama endpoint: http://localhost:11434 model_name: qwen2:7b health_check: url: /api/tags timeout: 3000 interval: 15000关键规则:
default字段必须存在,且值必须是services下的某个 key。若填错(如default: qwen2-7b但services中无qwen2-7b),OpenRig 启动时会静默失败,日志只显示Failed to load models config。type字段决定 OpenRig 如何启动服务。llama.cpp类型会自动构建llama-server命令,ollama类型则调用ollama serve。若type与实际服务不匹配(如type: ollama但endpoint指向llama.cpp),健康检查必然超时。health_check.url必须返回 HTTP 200。llama.cpp的/health返回{"status":"ok"},ollama的/api/tags返回 JSON 数组。若返回 HTML 页面(如 Nginx 默认页),OpenRig 会判定服务异常。
config.json 的调度策略引擎
{ "api_port": 8080, "proxy_timeout": 120000, "auto_restart": true, "log_level": "info", "codex_integration": { "enabled": true, "proxy_url": "http://localhost:8080/codex", "backend_url": "http://localhost:8081" }, "claude_code_integration": { "enabled": true, "binary_path": "/home/user/.nvm/versions/node/v20.18.0/lib/node_modules/@claude/code-native/bin/claude-code-native" } }关键字段解析:
proxy_timeout: Codex 的/responses请求默认超时是 60 秒,但 DeepSeek-R1 在 Q4_K_M 量化下生成 2000 token 需约 90 秒。若proxy_timeout小于实际耗时,OpenRig 代理会主动断开连接,报cc switch local proxy failed。实测建议设为120000(120 秒)。codex_integration.proxy_url: 这是 Codex 客户端实际连接的地址,必须与 OpenRig 主 API 端口一致(即api_port)。若填http://localhost:8081/codex,Codex 会尝试直连模型服务,绕过 OpenRig 代理层,导致所有路由规则失效。claude_code_integration.binary_path: 必须指向@claude/code-native的可执行文件绝对路径。npx claude code安装后,路径通常为~/.nvm/versions/node/v20.18.0/lib/node_modules/@claude/code-native/bin/claude-code-native。若路径错误,OpenRig 日志会显示CLAUDENATIVE_BINARY_NOT_FOUND,但 Codex 客户端只报native binary not installed。
3.3 启动与验证全流程:从 tmux 会话到 Codex 成功响应
完成环境准备和配置后,启动流程如下(全程在项目根目录执行):
首次启动 OpenRig 主服务:
npm run setup # 自动执行:npm install + 创建 tmux 会话 + 启动 Layer 1 服务 npm start # 启动 Express 调度服务(监听 127.0.0.1:8080)此时
tmux ls应显示:openrig-api: 1 windows (created ...) openrig-model: 1 windows (created ...)启动 DeepSeek-R1 模型服务:
npm run model:start deepseek-r1OpenRig 会自动在
openrig-model会话中执行:cd /home/user/models && /path/to/llama-server -m deepseek-r1.Q4_K_M.gguf --ctx-size 4096 --threads 8 --gpu-layers 40 -c 4096 -ngl 40 -p "You are a helpful AI assistant."观察
tmux attach -t openrig-model的右 pane 日志,应看到llama-server: server listening on http://127.0.0.1:8081。验证健康检查:
curl -v http://localhost:8080/api/v1/status # 返回 {"status":"ok","services":{"deepseek-r1":"healthy"}} curl -v http://localhost:8080/api/v1/health/deepseek-r1 # 返回 {"status":"ok","latency_ms":12}配置 Codex 使用 OpenRig 代理: 在 Codex 的
settings.json中添加:{ "codex.proxyUrl": "http://localhost:8080/codex", "codex.model": "deepseek-r1", "codex.apiKey": "sk-xxx" // 任意非空字符串,OpenRig 不校验 }重启 Codex。此时 Codex 发起的
POST /responses请求,会被 OpenRig 代理捕获,转发至http://localhost:8081/v1/chat/completions,并自动注入Authorization: Bearer sk-xxx头(即使模型服务不需要)。最终验证: 在 Codex 编辑器中输入:
What is the capital of France?按 Ctrl+Enter。若成功返回
Paris,说明整个链路打通。此时tmux attach -t openrig-proxy的日志应显示:[PROXY] POST /codex/responses -> http://localhost:8081/v1/chat/completions (200 OK, 1243ms)
实操心得:我踩过的最大坑是 Codex 的
proxyUrl配置。官方文档写的是http://localhost:8080,但 OpenRig 要求必须带/codex后缀。因为 OpenRig 的代理路由规则是app.use('/codex', proxyMiddleware),若省略后缀,请求会 404,Codex 客户端报network error而非具体错误。这个细节在所有 CSDN 教程里都没提,只能靠抓包curl -v http://localhost:8080/codex/responses确认。
4. 故障排查实战:从cc switch local proxy failed到CLAUDENATIVE_BINARY_NOT_INSTALLED的全路径诊断
4.1cc switch local proxy failed while handling codex endpoint /responses的五层诊断法
这个错误是 OpenRig 用户最常遇到的,但它不是单一原因,而是五层故障的聚合表现。必须按顺序逐层排除:
| 层级 | 检查点 | 验证命令 | 正常表现 | 异常表现及修复 |
|---|---|---|---|---|
| L1:OpenRig 主服务是否运行 | curl -v http://localhost:8080/api/v1/status | HTTP 200 + JSON{"status":"ok"} | Failed to connect to localhost port 8080→ 执行npm start并检查npm start进程是否存活(ps aux | grep 'node.*openrig') | |
| L2:Codex 配置是否指向正确 proxyUrl | cat ~/.codex/settings.json | grep proxyUrl | "codex.proxyUrl": "http://localhost:8080/codex" | 值为http://localhost:8080(缺后缀)→ 修改配置并重启 Codex | |
| L3:OpenRig 代理路由是否注册 | curl -v http://localhost:8080/codex/health | HTTP 200 +{"status":"proxy_ok"} | HTTP/1.1 404 Not Found→ 检查config.json中codex_integration.enabled是否为true,且proxy_url与api_port一致 | |
| L4:目标模型服务是否健康 | curl -v http://localhost:8080/api/v1/health/deepseek-r1 | HTTP 200 +{"status":"ok"} | {"status":"unhealthy","error":"connection refused"}→tmux attach -t openrig-model查看 llama-server 是否启动,检查models.yaml中endpoint地址是否与 llama-server 实际监听地址一致(如 llama-server 默认监听0.0.0.0:8081,但models.yaml写127.0.0.1:8081) | |
| L5:代理转发是否超时 | curl -v -X POST http://localhost:8080/codex/responses -H "Content-Type: application/json" -d '{"messages":[{"role":"user","content":"hi"}]}' | HTTP 200 + JSON 响应 | HTTP/1.1 504 Gateway Timeout→ 增大config.json中proxy_timeout至120000 |
注意:L4 的
endpoint地址必须与模型服务实际绑定地址完全一致。llama-server 默认绑定0.0.0.0:8081,这意味着它接受所有 IP 的连接;但若models.yaml中写127.0.0.1:8081,OpenRig 代理仍能访问,因为127.0.0.1是0.0.0.0的子集。然而,当模型服务因 GPU 内存不足崩溃时,0.0.0.0:8081会变为127.0.0.1:8081不可达,而0.0.0.0:8081仍显示监听。因此,OpenRig 的健康检查必须用127.0.0.1测试,这是最严格的验证方式。
4.2error: claude native binary not installed的根因分析与修复
这个错误表面看是 Claude Code 插件问题,实则是 OpenRig 与 Node.js 环境的深度耦合故障。根本原因有三:
Node.js 版本不兼容:Claude Code Native 二进制要求 Node.js v20.x,但
nvm current显示 v18.x。验证:node -v。修复:nvm use 20.18.0。二进制路径未被 OpenRig 识别:
npm install -g @claude/code-native后,二进制位于~/.nvm/versions/node/v20.18.0/bin/claude-code-native,但 OpenRig 的config.json中binary_path指向lib/node_modules/.../bin/。验证:ls -l $(cat config.json \| jq -r '.claude_code_integration.binary_path')。修复:将config.json中路径改为~/.nvm/versions/node/v20.18.0/bin/claude-code-native。权限问题:WSL2 下
claude-code-native文件可能无执行权限。验证:file $(cat config.json \| jq -r '.claude_code_integration.binary_path')。若显示cannot execute binary file,执行chmod +x $(cat config.json \| jq -r '.claude_code_integration.binary_path')。
最高效的修复流程:
# 1. 确保 Node.js 版本正确 nvm use 20.18.0 # 2. 全局安装二进制 npm install -g @claude/code-native # 3. 获取真实路径并更新 config.json REAL_PATH=$(which claude-code-native) sed -i "s|\"binary_path\": \".*\"|\"binary_path\": \"$REAL_PATH\"|" config.json # 4. 赋予执行权限(WSL2 必须) chmod +x "$REAL_PATH" # 5. 重启 OpenRig npm run restart4.3codex is ignoring 1 unrecognized configuration setting的配置校验技巧
这个警告意味着 Codex 解析settings.json时遇到了未知字段。OpenRig 本身不产生此警告,但它的models.yaml配置若被错误地复制到 Codex 的settings.json中,就会触发。典型错误是把 OpenRig 的models.yaml内容(如default: deepseek-r1)直接粘贴到 Codex 配置里。
快速定位方法:
- 打开 Codex 的 VS Code 设置界面(Ctrl+,),搜索
codex,查看所有已启用的设置项。 - 对照官方文档(https://docs.anthropic.com/en/docs/codex/configuration)确认哪些字段是合法的:
codex.proxyUrl、codex.model、codex.apiKey、codex.temperature等。 - 删除所有不在官方列表中的字段。特别注意:
codex.models(复数)是无效字段,正确字段是codex.model(单数)。
实操心得:我曾因
codex.models字段导致 Codex 无法加载组织设置。删除该字段后,npx codex login仍报错,直到我发现~/.codex/config.json中残留了旧配置。彻底清理命令:rm -rf ~/.codex && npx codex login。OpenRig 不管理 Codex 的配置文件,这是用户必须自行维护的边界。
4.4your organization has disabled claude subscription access for claude code的绕过方案
这是一个服务端策略限制,OpenRig 无法绕过,但可以规避。根本原因是 Anthropic 对免费账户禁用了 Claude Code 的组织级功能。解决方案只有两个:
方案一(推荐):使用个人账户
执行npx codex logout,然后npx codex login用个人邮箱注册新账户。OpenRig 的config.json中claude_code_integration.enabled设为false,仅用 Codex 作为前端,所有请求走 OpenRig 代理到本地模型。方案二:降级到 Codex CLI v1.x
v1.x 版本不强制检查组织订阅。执行:npm install -g codex@1.12.0 npx codex --version # 确认输出 1.12.0然后在
settings.json中设置codex.proxyUrl为 OpenRig 地址。v1.x 的/responsesendpoint 与 v2.x 兼容,OpenRig 代理无需修改。
注意:方案二存在风险。Codex v1.x 已停止维护,某些新模型(如 Claude 3.5 Sonnet)可能无法调用。但对 DeepSeek-R1、Qwen2 等开源模型完全适用,且避开了所有组织策略检查。
5. 进阶应用:用 OpenRig 实现 Codex 多模型热切换与 Claude Code 本地模型调用
5.1 Codex 多模型热切换:无需重启服务的动态路由
OpenRig 的核心优势之一是支持 Codex 在运行时切换模型,且不中断现有会话。这依赖于其代理层的动态路由能力。
实现步骤:
在
models.yaml中定义多个模型服务:default: deepseek-r1 services: deepseek-r1: type: llama.cpp endpoint: http://localhost:8081 # ... 其他配置 qwen2-7b: type: ollama endpoint: http://localhost:11434 model_name: qwen2:7b启动所有服务:
npm run model:start deepseek-r1 npm run model:start qwen2-7b在 Codex 中,通过快捷键
Ctrl+Shift+P→ 输入Codex: Switch Model→ 选择qwen2-7b。此时 Codex 会向 OpenRig 发送POST /api/v1/switch-model请求,OpenRig 更新内部路由表,后续/responses请求自动转发至http://localhost:11434/api/chat/completions。
技术原理:OpenRig 的代理中间件维护一个currentModel变量,/api/v1/switch-model接口只是原子性更新该变量。整个过程耗时 < 5ms,用户感知不到延迟。对比传统方案(修改settings.json+ 重启 Codex),效率提升 10 倍以上。
实操心得:热切换后,Codex 编辑器右下角会显示当前模型名称。若显示不更新,按
Ctrl+R刷新 Codex 界面即可。这是 Codex 客户端的 UI 缓存问题,不影响实际请求路由。
5.2 Claude Code 调用 LMStudio 本地模型:突破官方限制的协议适配
Claude Code 官方只支持 Anthropic 自家模型,但 OpenRig 可以将其请求协议转换为 LMStudio 兼容格式。关键在于 OpenRig 的proxyLayer对messages字段的重写逻辑。
LMStudio 的/chat/completions接口要求:
{ "messages": [ {"role": "system", "content": "You are helpful."}, {"role": "user", "content": "Hi"} ], "temperature": 0.7, "max_tokens": 1024 }而 Codex 的/responses请求是:
{ "messages": [ {"role": "user", "content": "Hi"} ], "model": "claude-3-haiku-20240307", "temperature": 0.7 }OpenRig 的转换规则:
- 自动插入 system message(从
config.json的system_prompt字段读取,默认"You are a helpful AI assistant.") - 将
model字段映射为 LMStudio 的model参数(需在models.yaml中配置lmstudio_model_id) - 添加
max_tokens字段(从config.json的max_tokens字段读取,默认2048)
配置示例(config.json):
{ "lmstudio_integration": { "enabled": true, "endpoint":