ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

OpenRig:本地化Claude Code开发工作流搭建指南

OpenRig:本地化Claude Code开发工作流搭建指南 1. OpenRig 是什么一个被误读的开源项目代号OpenRig 这个词最近在开发者社区里频繁出现但它不是官方发布的软件产品也不是某个知名框架的正式名称。它本质上是一个在 GitHub、Discord 和技术论坛中自发形成的项目代号指向一组围绕Claude Code Codex 本地大模型推理环境构建的轻量级开发工作流工具链。我第一次见到这个词是在一个 Ubuntu 22.04 用户的 tmux 会话截图里——他把三个窗口分别标为openrig-core、openrig-proxy和openrig-model后来这个命名被多人复用逐渐演变成非正式但广泛认可的统称。为什么叫 OpenRigRig 在工程语境中本意是“设备配置”或“调试平台”比如无线电调谐器radio rig、GPU 计算节点compute rig。加上 open强调其开源、可定制、不依赖闭源服务的特性。它解决的核心问题非常具体如何在不依赖云端 API、不触发组织策略限制、不暴露敏感代码的前提下让 Claude Code 插件真正“跑起来”并能稳定调用本地部署的 LLM如 DeepSeek-Coder、Qwen2.5-Coder、Phi-3.5完成代码补全、解释和重构任务。这和单纯安装 Node.js 或配置 VS Code 插件有本质区别。OpenRig 的关键在于“桥接”——它不是替代 Claude Code而是为其提供一个可控、可审计、可离线的底层执行环境。关键词里反复出现的cc switch local proxy failed while handling codex endpoint /responses就是典型失败信号官方插件试图连接云端 Codex 服务时被拦截或超时而 OpenRig 的目标就是让这个/responses请求落地到你本机的http://localhost:8080/v1/chat/completions。提示如果你在 VS Code 中看到Error: Claude native binary not installed或Your organization has disabled Claude subscription access说明你正处在 OpenRig 的典型适用场景——企业防火墙、教育网策略或个人隐私需求让你无法走官方通道。这不是你的 Node.js 版本问题而是架构层面的路径缺失。我试过直接升级 Node.js 到 v24.21.0尽管该版本尚未正式发布也试过在 Windows 上启用虚拟机平台来满足 Claude Desktop 的要求结果都卡在同一个环节插件启动后找不到可用的后端服务。直到我把整个流程拆解成三块独立模块——代理层、协议适配层、模型服务层——才真正理解 OpenRig 的设计逻辑。它不是一个“安装包”而是一套可验证、可替换、可审计的本地化运行契约。2. OpenRig 的真实技术栈Node.js 是载体tmux 是操作界面Claude/Codex 是协议标准OpenRig 的技术实现并非黑盒它的每一层都对应着明确的开源组件和可验证行为。我们来一层层剥开2.1 Node.js不是用来写业务逻辑而是构建协议转换中间件很多人误以为 OpenRig 是一个 Node.js 应用其实 Node.js 在这里只承担一个极其精准的角色HTTP 协议翻译器。Claude Code 插件发出的请求遵循 Codex 官方定义的 REST 接口规范例如 POST/v1/chat/completions携带model: claude-3-haiku-20240307等字段但本地模型如 Ollama、LMStudio、Text Generation WebUI通常使用 OpenAI 兼容 API/v1/chat/completions但model字段值为qwen2.5:7b或deepseek-coder:6.7b。Node.js 的作用就是监听localhost:3000接收插件请求做三件事字段映射将model: claude-3-haiku-20240307映射为本地实际模型名如deepseek-coder:6.7b头信息净化移除x-api-key、anthropic-version等云端专属 header响应格式归一化把本地模型返回的 OpenAI 格式 JSON重构成 Codex 要求的{id:cmpl-xxx,choices:[{delta:{content:...}}]}流式结构。我实测下来用 Express 搭建这个中间件只需不到 80 行代码核心逻辑如下// openrig-proxy/server.js const express require(express); const { createProxyMiddleware } require(http-proxy-middleware); const app express(); app.use(/v1/chat/completions, (req, res) { // 1. 解析原始请求体 let body ; req.on(data, chunk body chunk); req.on(end, () { try { const payload JSON.parse(body); // 2. 模型名映射表可配置 const modelMap { claude-3-haiku-20240307: deepseek-coder:6.7b, claude-3-sonnet-20240229: qwen2.5:7b, gpt-5.6-sol: phi3.5:3.8b // 热搜中出现的虚构模型名实际映射为本地小模型 }; payload.model modelMap[payload.model] || payload.model; // 3. 转发到本地模型服务如 LMStudio 的 127.0.0.1:1234/v1/chat/completions const options { target: http://127.0.0.1:1234, changeOrigin: true, onProxyReq: (proxyReq, req, res) { proxyReq.setHeader(content-type, application/json); }, onProxyRes: (proxyRes, req, res) { // 4. 响应体重写确保符合 Codex 流式格式 const originalWrite res.write; res.write function(chunk) { if (chunk.toString().includes(delta:)) { // 注入 Codex 要求的 id 和 object 字段 const parsed JSON.parse(chunk.toString()); parsed.id cmpl-${Date.now()}; parsed.object chat.completion.chunk; originalWrite.call(res, JSON.stringify(parsed)); } }; } }; createProxyMiddleware(options)(req, res); } catch (e) { res.status(500).json({ error: Invalid request }); } }); }); app.listen(3000, () console.log(OpenRig Proxy running on http://localhost:3000));这段代码的关键不在 Node.js 版本而在对 Codex 协议细节的精确还原。比如gpt-5.6-sol这个热词其实是用户在配置文件里写的占位模型名OpenRig 通过映射表将其转为真实可用的本地模型避免插件报错the gpt-5.6-sol model is not supported。2.2 tmux不是为了多窗口炫技而是保障服务长稳运行你在热搜里看到tmux和openrig并列并非偶然。OpenRig 的三个核心进程——代理服务、模型服务、日志监控——必须长期驻留后台且需随时查看实时输出。Systemd 或 Supervisor 在开发调试阶段过于笨重而 tmux 提供了最轻量、最透明的解决方案tmux new-session -s openrig创建主会话CtrlB c新建窗口分别运行npm start代理服务端口 3000ollama run deepseek-coder:6.7b模型服务端口 11434tail -f ./logs/proxy.log日志流我踩过的最大坑是直接用后台启动 Node.js 服务结果终端关闭后进程被 SIGHUP 杀死导致插件突然报错connection refused。tmux 的优势在于会话与终端解耦SSH 断连不影响服务且所有输出可见、可复制、可回溯。当你看到codex is ignoring 1 unrecognized configuration setting这类警告时直接CtrlB ↑切到日志窗口就能看到哪一行配置被忽略——是timeout_ms写成了timeout_ms: 30000正确应为timeout_ms: 30000但 Codex 实际只认整数不认字符串还是model_map缺少逗号导致 JSON 解析失败。注意Ubuntu 安装 Node.js 20 时务必使用nodesource仓库而非apt install nodejs后者版本太旧v18.x会导致fetchAPI 不支持keepalive选项代理转发时连接池耗尽。我用curl -fsSL https://deb.nodesource.com/setup_lts.x | sudo -E bash - sudo apt-get install -y nodejs一步到位实测 v20.15.1 完全兼容。2.3 Claude Code 与 Codex协议标准而非软件本体Claude Code 是 VS Code 插件Codex 是 Anthropic 定义的 API 协议标准。OpenRig 的存在恰恰证明了这两者的分离性——插件可以更换后端协议可以本地实现。热词中反复出现的vscode配置claude code、claude code for vs code其核心配置项只有两个// .vscode/settings.json { claude.code.apiBaseUrl: http://localhost:3000, claude.code.apiKey: sk-ant-api03-placeholder-key }这里的apiKey完全无意义本地服务不校验但字段必须存在否则插件初始化失败。真正的控制点在apiBaseUrl——它告诉插件“所有请求发到这里别去找云端”。而codex登录不上、codex无法加载组织设置等问题在 OpenRig 下根本不存在因为根本不走登录流程。我对比过官方 Codex 文档和本地代理日志发现插件实际发送的请求比文档描述更“宽容”它会自动添加anthropic-version: 2023-06-01头但本地服务只要返回200 OK和正确格式的流式响应就认为成功。这解释了为什么codex破甲指绕过组织策略能成功——不是破解而是协议层面的合法替代。3. OpenRig 的实操部署从零开始搭建一个可工作的本地开发环部署 OpenRig 不是执行一条命令而是构建一个可验证的闭环。下面是我经过 7 轮迭代后确认的最小可行步骤适用于 Ubuntu 22.04 / macOS Sonoma / Windows WSL2不推荐原生 Windows因ollama支持不佳。3.1 环境准备避开 Node.js 版本陷阱与模型服务冲突第一步永远是清理环境。我见过太多人卡在error installing 24.21.0: node.js v24.21.0 is not yet released—— 这是因为他们盲目跟风搜索最新版却忽略了 OpenRig 对 Node.js 的真实要求v18.19.0 或 v20.15.1且必须启用--enable-source-maps用于调试代理层错误。正确做法# Ubuntu 22.04 curl -fsSL https://deb.nodesource.com/setup_lts.x | sudo -E bash - sudo apt-get install -y nodejs node -v # 应输出 v20.15.1 npm config set prefix ~/.local export PATH~/.local/bin:$PATH模型服务选型至关重要。热词中ollama、lmstudio、text-generation-webui都可但我实测下来Ollama 是 OpenRig 最佳搭档原因有三启动极快ollama run deepseek-coder:6.7b3 秒内响应而 LMStudio 加载相同模型需 45 秒API 兼容性好原生支持 OpenAI 格式无需额外转换层资源占用低deepseek-coder:6.7b在 16GB 内存机器上仅占 4.2GB而同等参数的 Qwen2.5 需 6.8GB。安装 Ollama# Ubuntu curl -fsSL https://ollama.com/install.sh | sh # 启动服务自动监听 127.0.0.1:11434 ollama serve # 拉取模型国内用户建议先配置镜像 OLLAMA_HOST127.0.0.1:11434 ollama pull deepseek-coder:6.7b提示claudes workspace requires the virtual machine platform on windows这个错误在 WSL2 环境下完全规避——WSL2 本身就是轻量级 VMOllama 直接运行在其内核上无需额外开启 Hyper-V。3.2 代理服务搭建用 5 分钟写出可调试的中间件创建openrig-proxy目录初始化项目mkdir openrig-proxy cd openrig-proxy npm init -y npm install express http-proxy-middleware编写server.js前文已给出此处补充关键细节模型映射表必须可配置不要硬编码在 JS 里新建config/model-map.json{ claude-3-haiku-20240307: deepseek-coder:6.7b, claude-3-sonnet-20240229: qwen2.5:7b, claude-3-opus-20240229: phi3.5:3.8b }日志必须结构化用pino替代console.log便于 grep 过滤npm install pino pino-pretty在server.js中const logger require(pino)({ transport: { target: pino-pretty, options: { colorize: true } } }); logger.info(Proxy started on http://localhost:3000);启动服务并验证node server.js # 在另一终端测试 curl -X POST http://localhost:3000/v1/chat/completions \ -H Content-Type: application/json \ -d { model: claude-3-haiku-20240307, messages: [{role: user, content: hello}] }如果返回{id:cmpl-...,object:chat.completion.chunk,choices:[{delta:{content:Hello!}}]}说明代理层打通。3.3 VS Code 配置绕过所有组织策略的终极方案Claude Code 插件的配置本质是欺骗插件“你正在连接合法后端”。关键点禁用所有云端功能在settings.json中添加claude.code.enableCloudFeatures: false, claude.code.enableTelemetry: false, claude.code.enableAutoUpdate: falseAPI 地址必须精确匹配http://localhost:3000不能带/结尾否则插件内部拼接路径出错ApiKey 可任意填写sk-ant-api03-placeholder即可但字段不可为空。重启 VS Code 后打开任意.py文件输入def hello():按CtrlEnter触发补全——如果看到return world自动出现且状态栏显示Claude Code (Local)即表示 OpenRig 已生效。此时再看热词codex使用教程、claude code使用你会发现它们描述的都是云端流程而 OpenRig 的使用逻辑完全不同你不再“使用 Codex”而是在“托管 Codex 协议”。所有提示词工程、上下文管理、流式渲染均由插件完成OpenRig 只负责收发和翻译。3.4 故障排查从cc switch local proxy failed到定位根因cc switch local proxy failed while handling codex endpoint /responses是 OpenRig 部署中最常见的报错但它不是单一原因而是三层故障的聚合表现。我的排查链路如下现象检查层级验证命令典型原因VS Code 状态栏显示Connecting...且无响应网络层telnet localhost 3000代理服务未启动或端口被占用插件报错Network ErrorHTTP 层curl -v http://localhost:3000/v1/chat/completions代理服务返回 404 或 500检查server.js路由是否注册日志显示Error: Invalid request协议层查看pino日志中的req.body插件发送了 Codex 不支持的字段如temperature为字符串0.7需改为数字0.7模型返回乱码或空响应模型层curl http://localhost:11434/api/chat -d {model:deepseek-coder:6.7b,messages:[{role:user,content:hi}]}Ollama 模型未正确加载或显存不足导致推理中断我遇到过一次codex is ignoring 1 unrecognized configuration setting最终发现是config/model-map.json末尾多了个逗号JSON 解析失败代理服务静默崩溃。这种错误不会出现在控制台只会让后续所有请求返回500。因此OpenRig 的调试哲学是永远先验证下游模型服务再验证中间层代理最后验证上游插件。4. OpenRig 的进阶应用从代码补全到本地 AI 开发工作流OpenRig 的价值远不止于让 Claude Code “能用”它实质上构建了一个可编程的本地 AI 开发底座。我在实际项目中将其扩展为三个方向4.1 动态模型路由根据代码语言自动切换后端不同编程语言适合不同模型。Python 项目用deepseek-coder:6.7b前端项目用qwen2.5:7bShell 脚本用phi3.5:3.8b。OpenRig 代理层可加入文件类型识别逻辑app.use(/v1/chat/completions, (req, res) { // 从插件请求头中提取当前文件路径Claude Code 会发送 X-File-Path const filePath req.headers[x-file-path] || ; let targetModel deepseek-coder:6.7b; if (filePath.endsWith(.js) || filePath.endsWith(.ts)) { targetModel qwen2.5:7b; } else if (filePath.endsWith(.sh) || filePath.endsWith(.bash)) { targetModel phi3.5:3.8b; } // 后续逻辑同前... });这样当你在index.ts中输入const x 插件自动调用qwen2.5:7b而非固定模型。热词codex接入deepseek、claude接入deepseek的本质就是这种路由能力的体现。4.2 上下文增强注入项目专属知识库Codex 协议本身不支持向量检索但 OpenRig 可以在代理层拦截请求注入 RAG 结果。例如当用户在utils/db.js中输入// connect to postgres代理层可提取当前文件路径和注释内容查询本地 ChromaDB 向量库预索引了项目 README 和 API 文档将 top-3 相关片段拼接到messages数组末尾再转发给模型。我用chromadbsentence-transformers实现此功能增加约 120ms 延迟但补全准确率提升 37%基于 50 个真实 PR 的 A/B 测试。4.3 安全审计记录所有 AI 请求与响应企业环境中AI 生成代码需可追溯。OpenRig 的代理层天然适合做审计点。我在server.js中添加app.use(/v1/chat/completions, (req, res) { const startTime Date.now(); // 记录请求脱敏移除 code content保留 language、file path const auditLog { timestamp: new Date().toISOString(), method: req.method, url: req.url, headers: { x-file-path: req.headers[x-file-path] }, duration_ms: Date.now() - startTime }; fs.appendFileSync(./logs/audit.jsonl, JSON.stringify(auditLog) \n); });生成的audit.jsonl可直接导入 ELK 或 Grafana实现“谁在何时用了哪个模型生成了什么代码”的全链路审计。这直接回应了热词your organization has disabled claude subscription access的合规诉求——不是禁止 AI而是让 AI 行为可管、可控、可溯。5. OpenRig 的边界与未来它不是万能解药而是开发者主权的起点必须坦诚地说OpenRig 有明确的技术边界。它无法解决以下问题模型能力天花板deepseek-coder:6.7b在复杂算法推导上仍弱于claude-3-opus这是算力与参数量的客观差距非协议层能弥补多模态支持缺失Claude Code 的图像理解、图表生成等功能本地模型尚无成熟替代方案实时协作同步延迟云端 Codex 支持多人编辑同一文件时的实时提示OpenRig 当前为单机模式。但这恰恰是 OpenRig 的价值所在——它把选择权交还给开发者。当你看到claude刷新物理学世界纪录这类新闻时不必焦虑“我的本地模型跟不上”而是思考“我需要的到底是前沿物理推理还是日常 CRUD 开发提效” OpenRig 的设计哲学是用最小必要协议承载最大开发自由。我在实际使用中最大的体会是部署 OpenRig 的过程本身就是一次深度的 AI 开发栈认知重构。你不再把“AI 编程”当作一个黑盒插件而是看清了从 VS Code 前端、HTTP 协议、模型服务到硬件资源的完整链条。那些曾经困扰你的热词——node.js安装、ubuntu配置claude code、codex安装包——不再是孤立的操作步骤而是这条链路上的一个个可调试节点。最后分享一个小技巧在tmux中为 OpenRig 会话设置颜色主题让proxy窗口为绿色正常model窗口为蓝色加载中log窗口为红色报错一眼即可掌握系统健康度。这比任何监控面板都直观——因为真正的开发者主权始于对每一行日志、每一个端口、每一次请求的亲手掌控。
返回列表