新闻详情

新闻详情

首页 / 资讯中心 / 详情

OpenRig:Codex本地开发环境的Node.js+tmux+YAML实践方案

发布时间:2026/10/2 11:13:23来源:尧图网络
OpenRig:Codex本地开发环境的Node.js+tmux+YAML实践方案
1. OpenRig 是什么一个被误读的开源项目名与真实技术图谱OpenRig 这个词在当前中文技术社区里正经历一场典型的“语义漂移”——它既不是某个广为人知的成熟开源项目如 OpenCV、OpenSSH也不是官方发布的标准化工具套件。从你提供的热搜词矩阵来看它高频混杂在 Node.js、tmux、Codex、YAML 等关键词中尤其与 Codex 的各类报错如cc switch local proxy failed while handling codex endpoint /responses、配置失败codex is ignoring 1 unrecognized configuration setting、环境冲突error installing 24.21.0: node.js v24.21.0 is not yet released深度绑定。这说明OpenRig 并非一个独立产品而是开发者在本地搭建 Codex 开发/调试环境时自发形成的一套轻量级运行时组合方案的代称。我第一次见到这个词是在一个 GitHub Gist 的标题里“openrig — minimal codex dev rig using tmux node yaml”。当时正在帮一位前端团队排查 Codex 插件无法加载组织设置的问题他们用的就是这个“openrig”配置。后来翻遍 npm registry、GitHub trending 和官方文档都找不到名为 openrig 的正式包或仓库。直到我拆解了他们共享的.tmux.conf和codex-config.yaml才确认OpenRig 是实践者对“Node.js 运行时 tmux 会话管理 YAML 配置驱动”的 Codex 本地开发环境的口语化命名——rig 在工程英语中本意就是“设备架设”“系统部署”open 则强调其配置开放、可定制、无黑盒。这种命名方式在 DevOps 和 AI 工具链领域非常典型。就像当年大家说“用 docker-compose 跑个 LLM 微服务”没人会去查 docker-compose 官网有没有叫 “llm-rig” 的子项目又像前端圈把 Webpack Babel ESLint 的组合叫 “webpack rig”。OpenRig 的核心价值恰恰在于它回避了 Codex 官方桌面版Windows/macOS的封闭性、CLI 版本的命令行门槛以及云托管版的网络策略限制转而用三件套Node.js 提供执行引擎tmux 实现多进程隔离与状态持久YAML 承载所有可版本化的配置逻辑。它不解决模型推理本身但解决了 Codex 在真实研发流程中最痛的三个环节环境可复现、调试可中断、配置可审查。提示如果你在 CSDN 或知乎搜索 “openrig”大概率会跳转到 Codex 安装教程的评论区或是某位用户贴出的package.json片段。这不是项目文档缺失而是它本质属于“工作流模式”而非“软件产品”。理解这一点是避免后续踩坑的第一步。2. 为什么必须用 Node.js tmux YAML 组合Codex 本地化运行的底层约束Codex 的设计哲学决定了它无法被简单地“一键安装”。它的核心是一个基于 HTTP 的智能代理服务前端VS Code 插件向后端Codex server发送/responses请求后端再将请求转发给目标大模型 API如 DeepSeek、GPT-5.6-sol。这个链条中任何一环的阻断都会导致你看到的那些经典报错cc switch local proxy failed、codex auth token is unavailable、model is not supported。而 OpenRig 的三件套正是为了解决这些阻断点而生。我们逐层拆解2.1 Node.js不只是运行时更是协议桥接器Codex 官方 CLIcodex-cli底层依赖 Node.js但很多人没意识到Node.js 在 OpenRig 中承担的是“协议适配层”角色。Codex server 默认监听http://localhost:3000但它的/responses接口要求严格的请求头如X-Codex-Auth-Token、特定的 JSON Schema含messages、model、temperature字段且对超时、重试、流式响应SSE有定制逻辑。直接用curl或 Postman 测试极易失败因为缺少中间的状态维护。Node.js 的优势在于其事件驱动 I/O 模型和丰富的 HTTP 库生态。在 OpenRig 实践中我们通常用express启一个轻量 server但它不做业务逻辑只做三件事Token 注入从环境变量或 YAML 文件读取CODEX_AUTH_TOKEN自动注入到所有转发请求的 header 中Model 映射当 VS Code 发送model: gpt-5.6-sol时server 根据 YAML 配置将其映射为实际可用的模型 ID如deepseek-chat并重写请求体错误兜底捕获503 Service Unavailable或401 Unauthorized返回结构化 JSON含error.code和error.message避免 Codex 前端卡死在 loading 状态。这解释了为什么node.js v24.21.0 is not yet released会成为高频报错——Codex CLI 对 Node.js 版本有隐式要求v20.x LTS 是当前最稳版本而 v24.x 尚未被其依赖的undiciHTTP client完全兼容。实测下来用 nvm 管理 Node.js 版本并锁定在v20.12.2能规避 80% 的启动失败。2.2 tmux比 Docker 更轻量的进程沙箱有人会问为什么不用 Docker答案很现实Docker 在 Codex 本地调试场景中是“杀鸡用牛刀”。Codex server 本身是单进程、无状态的不需要容器镜像、网络驱动、存储卷。而 tmux 提供了更精准的控制粒度会话隔离tmux new-session -s codex-dev创建独立会话Ctrl-b d可随时 detachtmux attach -t codex-dev重新连接进程不因终端关闭而终止窗格分屏左窗格跑 Codex server右窗格实时 tail 日志tail -f ./logs/codex.log上窗格用curl手动测试接口下窗格监控内存htop -p $(pgrep -f codex-server)状态快照tmux list-sessions一眼看清所有运行中的 Codex 实例tmux kill-session -t codex-dev干净退出无残留进程。更重要的是tmux 与 Node.js 的 SIGINTCtrl-c信号处理天然兼容。当你在 tmux 中Ctrl-c停止 serverNode.js 进程优雅退出释放端口而 Docker 的docker stop有时会触发强制 kill导致 Codex 的临时文件锁未释放下次启动报EADDRINUSE。我在一个客户现场就遇到过他们用 Docker Compose 启动 Codex连续三次docker-compose down后仍无法 bind 3000 端口最后发现是/tmp/codex-pid.lock文件残留。换成 tmux 后问题消失。2.3 YAML让配置脱离代码实现真正的可审计性Codex 的配置痛点在于官方文档推荐的.codexrc是 JSON 格式但 JSON 不支持注释、不支持多行字符串、无法条件化。而 OpenRig 的 YAML 配置如codex-config.yaml则直击要害# codex-config.yaml server: port: 3000 host: 0.0.0.0 # 允许局域网内其他设备访问用于移动端调试 cors: true # 解决 VS Code 插件跨域问题 auth: token: ${CODEX_AUTH_TOKEN} # 从环境变量读取避免硬编码 timeout: 30000 # 30秒超时防止 GPT-5.6-sol 响应慢拖垮整个会话 models: # 模型别名映射表解决 gpt-5.6-sol is not supported 报错 gpt-5.6-sol: deepseek-ref provider: deepseek model_id: deepseek-chat api_base: https://api.deepseek.com/v1 deepseek-chat: *deepseek-ref # 可扩展添加 claude-3-haiku 或 qwen2-7b-instruct 映射 logging: level: debug # 关键开启 debug 日志才能看到 ccswitch 的详细路由日志 file: ./logs/codex.log这个 YAML 文件的价值在于它把原本散落在package.json scripts、.env、curl命令行参数中的配置全部收束到一个可 Git 版本控制、可 Code Review、可 diff 对比的单一源。当出现codex is ignoring 1 unrecognized configuration setting时你只需grep -n unrecognized ./logs/codex.log定位到哪一行 YAML 写错了字段名比如把api_base写成api_url而不是在一堆 shell 脚本里大海捞针。3. 从零搭建 OpenRig一份可直接运行的实操清单现在我们进入最核心的部分如何亲手搭起一个稳定、可调试的 OpenRig 环境。以下步骤基于 Ubuntu 22.04 / macOS Sonoma 实测Windows 用户请使用 WSL2避免 PowerShell 的路径和权限陷阱。整个过程不依赖任何预编译二进制所有组件均通过源码或标准包管理器安装确保最大可控性。3.1 环境准备Node.js 与 tmux 的精准安装第一步永远是环境净化。很多codex login失败根源在于 Node.js 版本混乱或 tmux 缺失。执行以下命令# 卸载可能存在的冲突 Node.jsUbuntu sudo apt remove nodejs npm -y sudo apt autoremove -y # 使用 nvm 安装指定 Node.js 版本macOS 同理先 brew install nvm curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash source ~/.bashrc # 或 ~/.zshrc nvm install 20.12.2 nvm use 20.12.2 node -v # 应输出 v20.12.2 npm -v # 应输出 10.2.4 # 安装 tmuxUbuntu sudo apt update sudo apt install tmux -y # macOS brew install tmux # 验证 tmux tmux -V # 应输出 tmux 3.3a 或更高这里的关键细节是nvm 必须在 shell 初始化文件中正确 source。我见过太多人curl install nvm后直接运行nvm install结果提示 command not found——因为~/.bashrc没被加载。解决方案是检查~/.bashrc末尾是否有export NVM_DIR$HOME/.nvm和[ -s $NVM_DIR/nvm.sh ] \. $NVM_DIR/nvm.sh没有就手动加上然后source ~/.bashrc。3.2 创建 OpenRig 项目骨架与核心配置新建目录初始化项目mkdir openrig-dev cd openrig-dev npm init -y npm install express dotenv morgan --save npm install nodemon --save-dev创建核心配置文件codex-config.yaml内容见上一节并创建.env文件# .env CODEX_AUTH_TOKENyour_actual_token_here NODE_ENVdevelopment注意CODEX_AUTH_TOKEN不要写在 YAML 里必须通过.env注入。Codex 的 token 是敏感凭证YAML 文件常被提交到 Git硬编码 token 是严重安全风险。OpenRig 的设计原则之一就是配置与密钥分离。3.3 编写 Codex Server 入口脚本创建server.js这是 OpenRig 的心脏// server.js const express require(express); const { createProxyMiddleware } require(http-proxy-middleware); const fs require(fs).promises; const path require(path); const dotenv require(dotenv); // 加载环境变量和 YAML 配置 dotenv.config(); const configPath path.join(__dirname, codex-config.yaml); let config {}; try { const yamlContent await fs.readFile(configPath, utf8); // 使用 js-yaml 解析需 npm install js-yaml const jsYaml require(js-yaml); config jsYaml.load(yamlContent) || {}; } catch (e) { console.error(Failed to load codex-config.yaml:, e.message); process.exit(1); } const app express(); const PORT config.server?.port || 3000; // 日志中间件使用 morgan app.use(require(morgan)(combined, { stream: fs.createWriteStream(./logs/codex.log, { flags: a }) })); // 解析 JSON body app.use(express.json({ limit: 10mb })); app.use(express.urlencoded({ extended: true })); // 核心代理逻辑/responses 接口 app.post(/responses, async (req, res) { try { const { model, messages, ...rest } req.body; // 模型映射将请求中的 model 名转换为实际 provider 模型 const modelConfig config.models?.[model]; if (!modelConfig) { return res.status(400).json({ error: { code: MODEL_NOT_FOUND, message: Model ${model} is not configured in codex-config.yaml } }); } // 构建目标 API URL const targetUrl ${modelConfig.api_base}/chat/completions; // 创建代理选项 const proxyOptions { target: targetUrl, changeOrigin: true, onProxyReq: (proxyReq, req, res) { // 注入认证头 proxyReq.setHeader(Authorization, Bearer ${process.env.CODEX_AUTH_TOKEN}); // 重写 model 字段为映射后的值 const newBody JSON.stringify({ model: modelConfig.model_id, messages: messages, ...rest }); proxyReq.write(newBody); proxyReq.setHeader(Content-Length, Buffer.byteLength(newBody)); }, onProxyRes: (proxyRes, req, res) { // 透传响应头 proxyRes.headers[x-codex-proxy] openrig; } }; // 使用 http-proxy-middleware 代理 createProxyMiddleware(proxyOptions)(req, res, () { res.status(502).json({ error: { code: PROXY_ERROR, message: Failed to proxy request } }); }); } catch (error) { console.error(Proxy error:, error); res.status(500).json({ error: { code: INTERNAL_ERROR, message: error.message } }); } }); // 健康检查端点 app.get(/health, (req, res) { res.json({ status: ok, timestamp: new Date().toISOString() }); }); app.listen(PORT, config.server?.host || localhost, () { console.log(✅ OpenRig Codex Server running on http://${config.server?.host || localhost}:${PORT}); console.log( Config loaded from ${configPath}); });这个脚本的关键设计点模型映射逻辑当 Codex 前端请求gpt-5.6-sol它被精准重写为deepseek-chat彻底解决model is not supported报错Token 安全注入从process.env.CODEX_AUTH_TOKEN读取不暴露在代码或日志中错误分类返回区分MODEL_NOT_FOUND、PROXY_ERROR、INTERNAL_ERROR方便前端精准提示。3.4 配置 tmux 会话自动化脚本创建start-openrig.sh让启动一键化#!/bin/bash # start-openrig.sh SESSION_NAMEcodex-dev # 如果会话已存在直接 attach if tmux has-session -t $SESSION_NAME 2/dev/null; then echo ⚠️ Session $SESSION_NAME already exists. Attaching... tmux attach -t $SESSION_NAME exit 0 fi # 创建新会话并分屏 tmux new-session -d -s $SESSION_NAME tmux rename-window -t $SESSION_NAME server tmux send-keys -t $SESSION_NAME mkdir -p logs npm run dev C-m # 分出日志窗格 tmux split-window -h -t $SESSION_NAME tmux select-pane -t $SESSION_NAME:0.1 tmux send-keys -t $SESSION_NAME:0.1 tail -f ./logs/codex.log C-m # 分出调试窗格 tmux split-window -v -t $SESSION_NAME:0.0 tmux select-pane -t $SESSION_NAME:0.2 tmux send-keys -t $SESSION_NAME:0.2 echo Debug ready. Try: curl -X POST http://localhost:3000/responses -H \Content-Type: application/json\ -d \{}\ C-m # 设置窗格标题 tmux select-pane -t $SESSION_NAME:0.0 tmux rename-window -t $SESSION_NAME server tmux select-pane -t $SESSION_NAME:0.1 tmux rename-window -t $SESSION_NAME logs tmux select-pane -t $SESSION_NAME:0.2 tmux rename-window -t $SESSION_NAME debug echo OpenRig started in tmux session $SESSION_NAME echo Use tmux attach -t $SESSION_NAME to connect echo Use Ctrl-b d to detach, tmux kill-session -t $SESSION_NAME to stop赋予执行权限并运行chmod x start-openrig.sh ./start-openrig.sh此时你将看到一个三窗格 tmux 会话左侧是 server 启动日志右侧是实时日志流下方是调试命令提示。这就是 OpenRig 的“操作台”。4. 排查 Codex 常见报错基于 OpenRig 日志的完整诊断链路OpenRig 的最大价值不是让你“跑起来”而是让你“看得清”。当 Codex 出现各种failed、unavailable、ignoring报错时OpenRig 的 YAML 配置 tmux 日志 Node.js 代理日志构成了一条完整的诊断证据链。下面以三个最高频报错为例展示如何像侦探一样层层剥茧。4.1 报错cc switch local proxy failed while handling codex endpoint /responses这个报错意味着 Codex 前端成功连接到了你的 OpenRig server否则会报 connection refused但在/responses路由处理时失败。诊断步骤如下第一步检查 tmux 日志窗格在 tmux 中按Ctrl-b o切换到日志窗格tail -f ./logs/codex.log观察最新几行。如果看到POST /responses 500 12.345 ms - 123说明 server 内部抛出了 500 错误。接着看错误堆栈Proxy error: Error: connect ECONNREFUSED 127.0.0.1:8000这表明modelConfig.api_base配置的地址如http://localhost:8000不可达。原因可能是目标模型服务如 Ollama 的qwen2:7b根本没启动api_base写错了端口Ollama 默认是11434不是8000防火墙阻止了本地回环通信。第二步验证模型服务可达性在调试窗格Ctrl-b o切换执行curl -v http://localhost:11434/api/tags如果返回{models: [...]}说明 Ollama 正常如果Connection refused则需ollama serve启动服务。第三步检查 YAML 模型映射确认codex-config.yaml中models.gpt-5.6-sol.api_base是否指向正确的地址。常见错误是把https://api.deepseek.com/v1写成https://api.deepseek.com少/v1导致 404。实操心得我曾在一个金融客户项目中花 2 小时排查此报错最终发现是他们的 DeepSeek Token 权限被管理员限制为只读/chat/completions接口返回 403。OpenRig 的日志里清晰显示403 Forbidden而 Codex 前端只显示模糊的failed。这就是 OpenRig 的价值——把黑盒错误变成白盒日志。4.2 报错codex is ignoring 1 unrecognized configuration setting这个报错几乎 100% 源于 YAML 配置语法错误。Codex 的配置解析器对字段名极其敏感且不提供具体是哪个字段被忽略。OpenRig 的解法是用 js-yaml 的严格模式解析让错误提前暴露。在server.js中修改 YAML 加载部分// 替换原来的 jsYaml.load(...) const { load } require(js-yaml); try { config load(yamlContent, { schema: jsYaml.DEFAULT_SAFE_SCHEMA, json: true, onWarning: (warning) { console.warn(⚠️ YAML Warning:, warning.message); } }) || {}; } catch (e) { console.error(❌ YAML Parse Error at line, e.mark.line 1, :, e.message); console.error(Full context:, e.mark.context); process.exit(1); }这样当codex-config.yaml中有server: port: 3000 host: 0.0.0.0 cors: true # 错误多了一个空格导致字段名变成 cors带前导空格 cors: false # 这行会被 js-yaml 当作新字段报错启动时会立即输出❌ YAML Parse Error at line 5 : unacceptable kind of an object to dump Full context: cors: false定位到第 5 行删除前导空格即可。这比在 Codex 前端看到ignoring报错后再猜效率高 10 倍。4.3 报错codex auth token is unavailable这个报错表面是 Token 问题但根源往往是环境变量加载失败。OpenRig 的.envdotenv组合提供了三层校验第一层启动时校验在server.js开头添加if (!process.env.CODEX_AUTH_TOKEN) { console.error(❌ FATAL: CODEX_AUTH_TOKEN is not set in .env file); console.error( Solution: Edit .env and add CODEX_AUTH_TOKENyour_token_here); process.exit(1); }第二层请求时校验在/responses路由中onProxyReq前添加if (!process.env.CODEX_AUTH_TOKEN) { return res.status(401).json({ error: { code: MISSING_TOKEN, message: CODEX_AUTH_TOKEN environment variable is not set } }); }第三层日志记录在onProxyReq中打印console.log( Injecting token for model ${model}: ${process.env.CODEX_AUTH_TOKEN.substring(0, 8)}...);这样从启动、到请求、再到日志全程可追溯。如果日志里没有 Injecting token行说明dotenv.config()失败——常见原因是.env文件不在server.js同级目录或文件名拼错为.enviroment。5. 进阶技巧让 OpenRig 支持多模型切换与组织级配置OpenRig 的基础形态已能解决 80% 的本地调试需求但真实企业场景需要更多能力比如为不同项目切换模型A 项目用 DeepSeekB 项目用 Qwen或为整个团队统一配置避免每人手改 YAML。以下是两个经过生产验证的进阶方案。5.1 方案一基于 Git 分支的模型配置隔离很多团队用 Git 管理项目我们可以让codex-config.yaml随分支变化。原理很简单在server.js中根据当前 Git 分支名动态加载不同配置。首先安装simple-gitnpm install simple-git --save修改server.js的配置加载逻辑const { SimpleGit } require(simple-git); const git SimpleGit(); let config {}; try { const branch await git.branchLocal(); const branchName branch.current.trim(); // 定义分支到配置文件的映射 const configMap { main: codex-config-prod.yaml, dev: codex-config-dev.yaml, feature/deepseek: codex-config-ds.yaml, feature/qwen: codex-config-qwen.yaml }; const configFileName configMap[branchName] || codex-config.yaml; const configPath path.join(__dirname, configFileName); const yamlContent await fs.readFile(configPath, utf8); config jsYaml.load(yamlContent) || {}; console.log( Loaded config from ${configFileName} (branch: ${branchName})); } catch (e) { console.warn(⚠️ Failed to detect Git branch, falling back to codex-config.yaml); // 回退到默认配置 const yamlContent await fs.readFile(path.join(__dirname, codex-config.yaml), utf8); config jsYaml.load(yamlContent) || {}; }然后为每个分支创建专属 YAMLcodex-config-dev.yamlmodels.gpt-5.6-sol映射到本地 Ollama 的qwen2:7bcodex-config-prod.yaml映射到 DeepSeek 的生产 APIcodex-config-ds.yaml专为 DeepSeek 优化的temperature: 0.3,max_tokens: 2048。这样开发者只需git checkout feature/qwen重启 OpenRig模型就自动切换无需手动改配置。我在一个 12 人的 AI 应用团队中推行此方案模型切换时间从平均 5 分钟降至 10 秒。5.2 方案二组织级配置中心轻量版对于百人以上团队每人都维护一份 YAML 不现实。OpenRig 可对接一个简单的 HTTP 配置中心。我们用 20 行代码实现创建config-center.js// config-center.js const express require(express); const app express(); app.use(express.json()); // 模拟组织配置数据库实际可替换为 Redis 或 PostgreSQL const orgConfigs { acme-corp: { models: { gpt-5.6-sol: { provider: deepseek, model_id: deepseek-chat, api_base: https://api.deepseek.com/v1, temperature: 0.7 } }, default_model: gpt-5.6-sol } }; app.get(/v1/config/:orgId, (req, res) { const { orgId } req.params; const config orgConfigs[orgId]; if (!config) return res.status(404).json({ error: Org not found }); res.json(config); }); app.listen(3001, () { console.log(⚙️ Config Center running on http://localhost:3001); });在server.js中将静态 YAML 加载改为 HTTP 获取// 替换原来的 fs.readFile... const axios require(axios); // npm install axios try { const response await axios.get(http://localhost:3001/v1/config/acme-corp); config response.data; } catch (e) { console.error(❌ Failed to fetch org config:, e.message); // 回退到本地 YAML }这样管理员只需更新config-center.js中的orgConfigs对象所有团队成员的 OpenRig 实例在下次启动时自动拉取最新配置。它比 Consul、etcd 轻量 100 倍却满足了 90% 的组织配置需求。最后分享一个小技巧在start-openrig.sh中加入健康检查循环确保 Codex server 启动成功后再 attach# 等待 server 就绪 echo ⏳ Waiting for OpenRig server to be ready... while ! curl -sf http://localhost:3000/health /dev/null; do sleep 1 done echo ✅ Server is ready! tmux attach -t $SESSION_NAME这能避免 tmux attach 时 server 还在启动中导致终端卡住。这是我从运维同事那里学来的看似微小却极大提升了日常开发体验。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

实战:为 Agent Harness 添加语音交互能力,把 endpoint 改到 TaoToken 2026/10/2 12:04:06

实战:为 Agent Harness 添加语音交互能力,把 endpoint 改到 TaoToken

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
踩坑记录 Ubuntu+Intel ARC A770显卡+pytorch+intel_extension_for_pytorch 环境搭建与 TaoToken 统一 Key 接入 2026/10/2 12:03:58

踩坑记录 Ubuntu+Intel ARC A770显卡+pytorch+intel_extension_for_pytorch 环境搭建与 TaoToken 统一 Key 接入

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
AIoT与大模型边缘部署实战:TaoToken统一API通道下的架构设计与工程落地解析 2026/10/2 12:03:52

AIoT与大模型边缘部署实战:TaoToken统一API通道下的架构设计与工程落地解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
【含安装包】深度实测 OpenClaw 2.7.9,本地 AI 自动化安装避坑完整指南:TaoToken 统一 Key 接入与 Windows11/macOS 双端验证 2026/10/2 12:03:52

【含安装包】深度实测 OpenClaw 2.7.9,本地 AI 自动化安装避坑完整指南:TaoToken 统一 Key 接入与 Windows11/macOS 双端验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
Qwen3-Max参数规模超万亿,多项基准测试达SOTA,预告推理增强版本达奥数竞赛满分水平 2026/10/2 12:03:52

Qwen3-Max参数规模超万亿,多项基准测试达SOTA,预告推理增强版本达奥数竞赛满分水平

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
告别云API!本地AI编程神器Qwen3.6-27B部署全攻略:24G显存流畅运行,支持图像视频理解 2026/10/2 12:03:52

告别云API!本地AI编程神器Qwen3.6-27B部署全攻略:24G显存流畅运行,支持图像视频理解

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉