前端进阶之旅前端进阶之旅
基础篇
进阶篇
高频篇
精选篇
手写篇
原理篇
面经篇
AI 面试
自检篇
每日一题
  • 综合
    • 综合题型
    • 其他问题
    • 设计模式
    • 思维导图
    • 学习路线
  • 前端基础
    • HTTP
    • 浏览器
    • 计算机基础
  • 进阶学习
    • NPM工作流
    • Docker
    • Canvas
    • Node学习指南
    • 前端综合文章
  • 其他
    • Handbook
    • 职场话题
    • CSS可视化
小程序题库
公众号动态
博客动态
AI 热点
开发者导航
基础篇
进阶篇
高频篇
精选篇
手写篇
原理篇
面经篇
AI 面试
自检篇
每日一题
  • 综合
    • 综合题型
    • 其他问题
    • 设计模式
    • 思维导图
    • 学习路线
  • 前端基础
    • HTTP
    • 浏览器
    • 计算机基础
  • 进阶学习
    • NPM工作流
    • Docker
    • Canvas
    • Node学习指南
    • 前端综合文章
  • 其他
    • Handbook
    • 职场话题
    • CSS可视化
小程序题库
公众号动态
博客动态
AI 热点
开发者导航
返回 AI 情报前线
All News · 全部资讯5405
  • GPT-5.6推理token按输出计费:成本估算可能偏差4倍
  • 开源模型评测工具:上线前用测试用例验证便宜模型
  • Anthropic缓存命中率低:实际节省分析
  • 多模态 LLM 生产级成本优化:视觉输入压缩与路由策略
  • SpaceX 60亿美元收购 Anysphere:Origin git平台才是真正的标的
  • DeepSeek 峰谷定价实战:Spring Boot 调度模式压榨成本
  • 昇腾 0 Day 适配小红书 dots3-note:全模态+投机解码
  • LabLLM:Mac 原生 App 从零训练小型语言模型
  • CLI-Anything:用标准接口让所有软件获得AI Agent原生支持
  • 长上下文没有杀死RAG:成本、延迟、可靠性三大陷阱
  • 一条YAML微调8B模型:4GB显存本地即可
  • 上下文已成平台能力:内部平台团队的新责任
  • 别信"完成了":强制AI Agent在报告前重新拉取真实状态
  • AI通过律师资格考试却不会比大小:理解AI的「参差不齐前沿」
  • Codex自动化研究:CUDA内核232倍加速实战
  • MCP令牌压缩91%:JSON Schema优化实践
  • Anthropic红队:多Agent冲突可升级为对抗行为
  • AI内容检测工具本质是玄学:连美国宪法都被误判为机器生成
  • Agent权限设计:批准前应展示被拒绝的替代方案
  • 新手用 Node.js 做内置聊天机器人:OpenAI 兼容接口是更优起点
  • 免费AI模型的危险命令如何通过许可证机制化险为夷
  • AI模型路由:为何单一LLM无法应对所有工作负载
  • 利用32k上下文窗口进行全仓库代码审查
  • MCP 协议 16 个月增长 970 倍:AI 应用的 USB-C 时刻来临
  • 2026 年开发者调研:Claude Code 登顶最受喜爱 AI 编程工具,Copilot 失势
  • ToolJet 开源版:拖拽构建内部工具/仪表盘/AI Agent
  • Cursor vs Copilot 2026:独立开发者选哪个更值
  • 2026年8月AI编程工具定价横评:14款工具日更比价
  • AI 时代瓶颈转移:理解代码比生成代码更难
  • Claude Code 2.1.233: Linux Bash 进程内存上限功能上线
  • TypeScript 多 Agent 系统实战:Orchestrator 与 Pipeline 模式解析
  • AI Agent 缺的不是记忆,而是执行收据
  • 用 LLM 构建 SLO 燃烧率告警处理 Agent
  • Anthropic披露Claude生成内容水印技术细节
  • 中国廉价LLM API背后的GPU数学:为何$0.35/M成为可能
  • Windows MSYS2 幽灵路径 Bug:文件悄悄写入 C:\c\ 目录
  • Meta开源Muse Glimmer:300亿参数本地运行
  • SpaceX正式收购AI编程IDE Cursor
  • 两位 Java 老兵用 Claude Code 从零实现完整 Jakarta EE 运行时
  • AI 编程 Agent 的护栏机制比更强模型更有效
  • 免费模型标签的隐蔽陷阱:生产环境C++漂移账本实战
  • 从0到1构建完整AI产品:RAG/Agent/安全/多Agent/评估串联实战
  • 关键工程不变量:Fail-Closed、崩溃一致性、持久Latch的Python实现
  • NVIDIA 开源 30 参数 MoE 模型 Nemotron,速度提升 4 倍
  • Yi模型上下文窗口与许可证条款深度解读
  • 跨模型家族prompt格式迁移:XML标签的代价
  • 抽象层设计:隔离LLM Provider特定代码的架构实践
  • Prompt本地化原则:区分指令与样本,按功能选择语言
  • Provider迁移后重试逻辑失效的诊断与修复
  • Cloudflare Workers AI 的正确用法:围绕产品边缘做轻量推理
  • 语音助手延迟问题:一次迁移如何破坏用户体验
  • 已加载 51 / 5405
8.0
热点
AI SCORE
编程提效2026-08-16 10:07

免费AI模型的危险命令如何通过许可证机制化险为夷

dev.to · AI#AI安全#LLM工程#许可机制
Editor brief · 编辑速览

团队用免费AI修复内存耗尽问题时,AI给出的rm -rf命令理论上能解决问题但也可能破坏构建可重现性,于是团队让其扮演提议者角色,命令需通过C++许可对象验证才可执行。

文章思维导图
Knowledge map
拖拽缩放
Full translation

完整中文译文

凌晨 02:14,构建机器报了一条与磁盘无关的错误。

ninja: error: fork: Cannot allocate memory

这条消息是个谎言。真正的问题是 inode 耗尽。df -i 显示 .cache 分区使用率达到了 100%。该目录容纳了 412,000 个小型依赖文件。构建速度已经慢了好几个星期,最简单的清理方式也伴随着最大风险——因为缓存目录是唯一还记得哪些对象文件仍然有效的地方。

一位构建工程师把原始的错误信息发给了一个免费模型端点。MonkeyCode 的免费模型访问通道提供了几个候选修复方案。披露:本文是 MonkeyCode 产品推广的一部分。模型用一行输出作答:

{"candidate":"rm -rf .cache && cmake --build .","reason":"cache exhaustion blocks fork","expected_paths":["build",".cache"],"rollback":"git clean -qfd .cache","confidence":0.92}

这一行命令很可能修复构建问题,但也可能抹掉一整天的可重现工作。团队没有直接拒绝模型,而是把它降级为提议者角色。免费模型生成的任何内容都必须获得执行许可后才能碰真实的代码树。

这个许可是一个小小的 C++ 对象。

#include <string>
#include <vector>

struct CommandPermit {
  std::string id;
  std::string candidate;          // exact command submitted by the model
  std::string reason;             // model's claimed reason
  std::vector<std::string> expected_paths; // paths expected to change
  std::string rollback;           // safe command to undo a failed run
  int timeout_seconds = 20;
  int risk = 1;                   // 1 read-only, 3 mutates generated files, 5 destructive
  bool dry_run_required = true;
};

许可的目的不是让模型看起来更安全,而是把一条建议转化为可审计的状态机。C++ 辅助程序对每个字段做哈希,并将结果追加到只增不减的账本中。

// sha256 is a local digest helper. It prevents a changed command from reusing an old record.
std::string toLedgerLine(const CommandPermit& p, const std::string& state) {
  std::string all = p.id + "|" + p.candidate + "|" + p.reason + "|" +
                    p.rollback + "|" + std::to_string(p.risk) + "|" + state;
  return "{\"record\":\"" + all + "\",\"sha\":\"" + sha256(all) + "\"}";
}

预演(dry run)不在真实代码树上运行,而是在一份拷贝的快照中进行。任何需要写权限的命令都必须先在那里证明自己的效果。

sandbox="$(mktemp -d)"
cp -a "$PROJECT"/. "$sandbox"

before="$(find "$sandbox" -type f -print0 | sort -z | xargs -0 sha256sum | sha256sum)"
( cd "$sandbox" && timeout "$PERMIT_TIMEOUT" bash -lc "$PERMIT_CANDIDATE" ) > dry_run.out 2> dry_run.err
rc=$?
after="$(find "$sandbox" -type f -print0 | sort -z | xargs -0 sha256sum | sha256sum)"

[ "$rc" -ne 0 ] && ledger_state="DRY_RUN_FAILED"
[ "$before" = "$after" ] && ledger_state="NO_EFFECT"

如果退出码不为零,记录状态为 DRY_RUN_FAILED。如果文件清单没有变化,记录状态为 NO_EFFECT。如果声明的预期路径缺失,记录状态为 EXPECTED_PATH_MISSING。只有 DRY_RUN_OK 才能进入下一个状态。

风险等级决定了需要多少验证才能放行。

C++ 封装层在离开提议状态之前会查询风险字段。

if (permit.risk >= 4 && !maintainer_approved) {
  appendLedger(fd, toLedgerLine(permit, "REJECTED_WITHOUT_APPROVAL"));
  return;
}

只有在预演匹配了预期路径之后,真实命令才会在超时限制内执行。

if [ "$ledger_state" = "DRY_RUN_OK" ] && [ "$risk" -le 3 ]; then
  timeout "$PERMIT_TIMEOUT" bash -lc "$PERMIT_CANDIDATE" > execute.out 2> execute.err
  if [ $? -ne 0 ]; then
    timeout 30 bash -lc "$PERMIT_ROLLBACK"
    ledger_state="ROLLED_BACK"
  fi
fi

账本不需要存在于构建主机内部。团队把它指向 MonkeyCode 免费服务器选项上的一个小只增文件。一旦构建器崩溃或擦除了本地元数据,也无法重写远端记录——那份记录记载了这条命令为何被允许运行。

这个设计有用,但它不是魔法。

它记录了被提议的内容,而不是模型为什么是对的。

它把执行范围收窄到了预期路径,而不是全部副作用。

预演快照不是安全边界。逃逸出快照或使用网络的命令需要更严格的沙箱。

回滚对生成的产物和 Git 可清理的路径有效。它不能覆盖数据库、凭证或挂载卷。

免费模型仍然会幻化出理由、置信度值,甚至回滚命令。许可让失败可被审查,但并不能让失败不可能发生。

拥有公共多租户 CI 运行器或生产数据库的团队,不应该仅仅依靠这个机制来路由模型生成的 shell 命令。这道门槛适用于受控的、可重建的工作空间,并且需要有回滚方案。

如果免费模型已经在构建器中写命令,把它的提议通过一个许可对象转发,在它们接触真实状态之前。用一个临时 VM 试这个流程,在那上面 rm -rf .cache 的撤销成本很低,然后把账本与实际发生的变化做对比。

Original source

本文由 AI 翻译整理自 dev.to · AI,原文版权归原作者所有。

阅读英文原文
上一篇
新手用 Node.js 做内置聊天机器人:OpenAI 兼容接口是更优起点
下一篇
AI模型路由:为何单一LLM无法应对所有工作负载