实战记录:在 M4 Mac mini 上用 Ollama + Codex CLI 搭建本地 AI 编程 Agent(附踩坑与性能数据)

起因:本地 AI 编程 Agent 终于能用了

2026年5月,OpenAI Codex CLI 全面免费,Ollama 0.24 正式适配 Codex App。这意味着你本地跑的大模型可以直接变成 AI 编程 Agent——全程离线、零 Token 消耗。

作为一个在 M4 Mac mini 16GB 上跑本地模型的人,我之前尝试过用 Continue + Ollama 做本地代码补全,体验还算能用。但让本地模型做完整的 Agent 任务(分析项目→修改代码→自动测试),之前基本不现实。工具调用成功率太低,多轮对话很快就偏了。

这次决定认真测一下 Codex + Ollama 到底到了什么水平。

先搞清楚 Codex CLI 是什么

Codex CLI 是 OpenAI 今年开源的终端 AI 编程 Agent,Apache 2.0 协议,GitHub 87k+ stars。它跟 ChatGPT 网页版里的代码解释不同——这是一个真正的Agent 框架

  • Rust 重写的 CLI:性能远好于 Python 系 Agent 工具
  • 原生沙箱:macOS 走 Seatbelt 框架,Linux 走 bubblewrap,Windows 走 Windows Sandbox。不是 Docker 那种重量级隔离,而是 OS 级轻量沙箱
  • 三层安全模式:read-only / workspace-write / danger-full-access,可按项目配置
  • Hooks 系统:6 种事件钩子(SessionStart / PreToolUse / PostToolUse / PermissionRequest / SubagentStart 等),可以拦截和修改工具调用
  • Subagent 并行架构:支持多子代理并行处理任务
  • 审批策略:untrusted / on-request / never 三种,还有 Auto-review 自动审批

跟 Claude Code、Aider、Cursor Agent 相比,Codex CLI 最独特的是它的沙箱和 Hooks 系统——其他工具基本没有这层防护。

macOS 部署实战

1. 安装 Codex CLI

# macOS 三种方式任选
brew install codex
# 或
curl -fsSL https://openai.com/codex/install.sh | sh
# 或直接下载二进制
# https://openai.com/zh-Hans-CN/codex/

2. 升级 Ollama 到 0.24+

这一步必须做。只有 0.24 版本才完全适配 Codex App(2026年5月14日发布)。旧版的 ollama launch codex-app 会报错或行为异常。

brew upgrade ollama
# 确认版本
ollama --version  # 应显示 0.24 或更高

3. 选模型

这是最关键的一步。我测试了三个模型的实际表现:

模型 参数量 工具调用成功率 代码质量 内存占用
Qwen3.6:27b-mlx 27B ⭐⭐⭐⭐ ⭐⭐⭐⭐ ~16GB
Gemma4:26b-mlx 26B (3.8B活跃MoE) ⭐⭐⭐⭐ ⭐⭐⭐⭐⭐ ~12GB
gpt-oss:20b 20B ⭐⭐⭐ ⭐⭐⭐ ~14GB

我最终选择了 Gemma4:26b-mlx。理由:

  • LiveCodeBench v6 得分 77.1(Qwen3.6 27B 无公开可比数据,但实际体感 Gemma 4 在代码补全一致性上略好)
  • Codeforces ELO 1718,已经达到人类竞赛选手水平
  • MoE 架构:26B 总参数但每次推理只激活 3.8B,12GB 就能跑,M4 16GB 绰绰有余
  • 原生 function-calling 支持,对 Agent 场景优化过

macOS Apple Silicon 用户记得选 -mlx 后缀版本,MLX 加速在 M4 上的 token 生成速度比 llama.cpp 后端快 30-50%。

4. 启动

ollama launch codex-app --model gemma4:26b-mlx

然后 Codex App 桌面窗口就出来了。注意 --restore 参数可以恢复之前用过的模型配置,不需要每次都重新指定。

实测:三个任务看真实能力

任务一:让它读一个陌生的开源项目

我给它一个我之前没看过代码的 Rust CLI 工具(~3000 行代码),让它:

  1. 分析项目结构
  2. 找出所有 CLI 子命令和参数
  3. 画调用流程图
  4. 找出可能的性能瓶颈

结果:前3步完成得很好——项目结构分析准确,子命令识别完整,Mermaid 流程图可以直接用。第4步比较水,给了几个泛泛的建议(”考虑用 async IO” 之类),没有真正定位到具体代码行。这暴露了本地模型的典型局限:分析性任务还行,深度优化建议仍需大模型

任务二:从零写一个 p5.js 交互可视化

让它写一个带粒子效果的音乐可视化页面。Agent 自动创建了 HTML + JS,能跑。粒子运动轨迹正确,颜色渐变也对。

但处理音频输入时直接用了 Web Audio API 的默认 FFT 设置,没有做频率加权——如果你给专业音频工程师看,会觉得太简陋。这就是本地 Agent 和 Claude 这种大模型的质量差距:功能能跑,但细节打磨不够

任务三:给这个博客写一个 Python 脚本,自动备份 WordPress 到本地

这是我故意设的陷阱题——它需要:理解 WordPress 文件结构、写 mysqldump 命令、处理密码安全、加错误处理。

Agent 写了 80 行 Python,逻辑正确,mysqldump 命令也对。但它把数据库密码硬编码在脚本里了(我故意没在 prompt 里提醒安全问题)。这再次说明:让本地 Agent 写生产级代码,安全审查不能省略

踩过的坑

在用 Ollama + Codex 的过程中,遇到了几个值得一提的问题:

  • 模型 metadata 缺失:Gemma4:26b-mlx 的模型元数据不完整,Codex 有时会降级到 fallback metadata,导致工具调用格式不匹配。重启 Ollama 服务可以临时缓解
  • 上下文窗口膨胀:长会话中 Agent 会忽略 num_ctx 设置,生成过大的 context_window,导致 M4 16GB 内存压力爆增。建议长任务分多次会话
  • MCP 工具不兼容:Codex 包装 MCP tools 为 namespace 格式,本地模型后端经常解析不了。目前 MCP + Ollama 的组合还不稳定
  • 无限循环:遇到过 1 次 Agent 陷入修补→报错→修补的死循环。按 Esc 中断后手动引导可以恢复

建议关注 openai/codex issuesollama/ollama issues 跟踪最新兼容性状态。这个生态还在快速迭代中。

本地 Agent 的能力边界

根据我这几天的测试和 GitHub issues 的反馈,可以总结出当前的能力边界

任务类型 本地 20-30B 模型 云端 GPT-5/Claude
简单 CRUD 代码生成 ✅ 够用 ✅ 完美
项目结构分析 ✅ 靠谱 ✅ 靠谱
Bug 定位(有明确报错) ✅ 基本够用 ✅ 更准确
架构设计建议 ⚠️ 泛泛而谈 ✅ 有深度
安全审计 ❌ 不可靠 ⚠️ 需人审
复杂多文件重构 ❌ 容易偏 ✅ 相对稳定
从零建项目 ⚠️ 能跑但不精致 ✅ 质量高

简单说:20B 级别的本地模型,能做 70% 的日常编程辅助任务,但剩下 30% 的复杂场景还是需要云端大模型。这不是贬低本地 AI——恰恰相反,能靠一台 M4 Mac mini 完成 70% 的任务,而且零成本、断网可用,这已经很惊人了。

Ollama 正在成为本地 AI Agent 的操作系统

Ollama 0.24 的一个关键变化是 ollama launch 命令的扩展。以前它只是一个模型加载器,现在它正在变成本地 Agent 的统一入口

# 目前支持的 Agent 工具
ollama launch codex-app    # OpenAI Codex 桌面版
ollama launch claude       # Claude Code 对接
ollama launch codex        # Codex CLI
ollama launch opencode     # OpenCode
ollama launch openclaw     # OpenClaw
ollama launch hermes       # Hermes Agent

这意味着模型和 Agent 工具的绑定关系正在被解耦——你可以在同一个模型上切换不同的 Agent 前端,也可以在不同模型之间切换同一个 Agent。5月28日刚发布的 OpenJarvis v1.0(Stanford 出品)也是这个趋势的代表:local-first 的个人 AI Agent 框架,直接内置 Ollama 支持。

总结

如果把 AI 编程工具的发展分成三个阶段:

  1. 代码补全(Copilot 时代)—— AI 帮你写下一行
  2. 对话式编程(ChatGPT/Claude 时代)—— AI 回答你的问题
  3. Agent 执行(现在)—— AI 真正开始干活

我们现在正处在 2→3 的过渡期。Ollama + Codex 的组合让这个过渡可以在本地免费离线地发生。虽然还有很多粗糙的地方,但这已经是普通人用一台普通电脑就能跑起来的 AI Agent 了。

下一步我会持续测试:llama.cpp 直接对接 Codex(绕过 Ollama)、越狱版模型在 Agent 场景的表现、以及能不能把 Codex Agent 接入我的博客自动发布流程。如果有什么新发现,会继续记录在这里。

参考

发表评论