TL;DR:别先吵“谁更聪明”。我现在判断一个 AI 编程 Agent 值不值得上,第一句话只问:它在哪儿执行? 在本地终端里,还是在云端沙箱里。
最近你要是也在折腾 AI 编程 Agent,大概率会遇到两派:
- 终端派:工具就在你项目里跑,读你文件、跑你测试,像结对。
- 云端派:你把任务丢给它,它在云里干活,最后给你一个 PR。
很多争论都在“模型谁更强”。但我踩过几次坑后发现:
真正决定体验的,是执行架构。
因为它直接影响:
- 失败时你怎么 debug
- 安全边界怎么画
- 环境一致性是不是稳定
下面我用一张表 + 三个可直接用的脚本,把这个事讲透。
先把概念说死:什么叫 AI 编程 Agent?
我这里的定义很简单:
AI 编程 Agent = 能读代码、能改代码、能执行命令/测试、并根据结果继续迭代的执行体。
它不是“给建议的聊天机器人”,它是真会动手。
所以核心问题不是“写不写得出某个函数”,而是:
它动手的时候,处在你的哪条安全边界内。
两种执行架构:云端沙箱 vs 本地终端
云端沙箱 / 异步执行(Codex 类)
典型流程:
- 你描述任务
- 它把 repo 拉到云端隔离环境
- 在云里改代码、跑测试、迭代
- 给你 patch / PR
优点:异步,适合“派活”。隔离边界清晰。
缺点:最容易踩“环境漂移”。你本地能跑,云端未必能跑。
本地终端 / 交互式执行(Claude Code 类)
典型流程:
- 你在终端下指令
- 它直接读你磁盘文件
- 在你机器上跑命令
- 你随时打断、追问、改需求
优点:环境一致、debug 直接。
缺点:权限一旦放开,它就等于“拿到你整台电脑的手”。
一张决策表:你属于哪种人
| 维度 | 云端沙箱(Codex 类) | 本地终端(Claude Code 类) | 你该怎么选 |
|---|---|---|---|
| 环境一致性 | ⚠️ 可能不一致(依赖/系统库/内网) | ✅ 和你本地一致 | 依赖“本地魔法”越多 → 越选本地终端 |
| 安全隔离 | ✅ 天然隔离 | ⚠️ 取决于你怎么限权 | 有客户代码/敏感内网 → 云端更省心 |
| 任务方式 | ✅ 异步派活 | ✅ 交互结对 | 你更像 PM 派活还是工程师结对 |
| Debug 成本 | ⚠️ 要把日志拉回来 | ✅ 直接看终端输出 | 经常要调试环境 → 本地终端 |
| 审计/回滚 | ✅ PR/patch 天然可审计 | ⚠️ 需要你自己做日志 | 团队流程重审计 → 云端更舒服 |
我个人的结论很粗暴:
- 你是“复杂本地环境 + 快速迭代”的工程师 → 本地终端
- 你是“标准化工程底座 + 任务并行派发”的团队 → 云端沙箱
本地终端 agent:我推荐的 3 个最小权限防线(可直接抄)
下面三段脚本,我自己在项目里就是这么用的。
1) 环境变量白名单:把 Key 从 shell 里拔掉
# ./scripts/run-agent-safe.sh
set -euo pipefail
# 清空环境变量,再白名单注入
env -i \
PATH="$PATH" \
HOME="$HOME" \
LANG="${LANG:-zh_CN.UTF-8}" \
AI_GATEWAY_TOKEN="${AI_GATEWAY_TOKEN:?missing}" \
\
claude-code "$@"
核心点是 env -i。别小看这招,它能把很多“你以为 agent 看不到”的东西直接切断。
2) 命令 allowlist:别靠“口头约束”
# ./scripts/allowlist.sh
set -euo pipefail
cmd="$1"; shift || true
case "$cmd" in
"pnpm"|"npm"|"yarn") exec "$cmd" "$@";;
"pytest"|"python") exec "$cmd" "$@";;
"git")
if [[ "${1:-}" == "push" ]] || [[ "${1:-}" == "remote" ]]; then
echo "blocked git subcommand: $1" >&2
exit 2
fi
exec git "$@";;
*)
echo "blocked command: $cmd" >&2
exit 2;;
esac
你会发现它会被挡住很多操作,但这正是最现实的安全方式。
3) 会话可回放:出事能举证
# ./scripts/agent-session.sh
set -euo pipefail
ts=$(date +"%Y%m%d-%H%M%S")
mkdir -p .agent-logs
script -q ".agent-logs/session-$ts.log" \
./scripts/run-agent-safe.sh "$@"
git diff > ".agent-logs/diff-$ts.patch" || true
这三层做完,本地 agent 的风险就从“它能搞穿我电脑”降到“它最多把活干砸”。
云端沙箱 agent:最大的坑是环境漂移
云端执行最常见的失败,不是模型不行,是:
- 私有 registry 装不上
- 系统库缺失(ffmpeg/libvips 之类)
- 访问不了内网 staging
解决也很工程:
- 把环境写进 repo(Dockerfile / devcontainer / nix)
- secret 管理标准化(别靠本地
.env) - 网络访问要可配置
工程底座越标准化,云端 agent 的优势越大。
我自己的“混搭用法”:两种架构都用
我现在的经验是:
- 快速改模块 + 跑测试 + 反复迭代 → 本地终端
- 写重构方案 / 生成 PR / 整理文档 → 云端异步
(只提一次)怎么做到“换模型只改一个字符串”
我自己会把不同模型的调用统一到一个 OpenAI 兼容接口上,base_url 指向你自己的网关地址(占位符)。
from openai import OpenAI
client = OpenAI(
base_url="https://your-api-gateway.com/v1",
api_key="YOUR_GATEWAY_TOKEN",
)
resp = client.chat.completions.create(
model="deepseek/deepseek-chat", # 掘金版本:用国产模型 ID
messages=[{"role": "user", "content": "把这个模块重构一下并补测试"}],
)
print(resp.choices[0].message.content)
常见问题(FAQ)
Q:云端沙箱是不是一定更安全?
A:隔离边界更清晰,但你还是要关心:repo、日志、报错、依赖下载,会不会把不该出去的信息带出去。
Q:本地终端 agent 会不会误操作?
A:会。最小三层:环境白名单、命令 allowlist、会话可回放。别偷懒。
Q:到底怎么选?
A:一句话:先选执行架构,再谈模型好坏。