SkillOpt 在 AI Agent 中的硬核落地:如何让 Agent 自己长记性?

自从上次凌晨三点那场差点提桶跑路的事故后,我给系统上了物理护栏。但这不够,护栏只能防守,我需要 Agent 学会自己长记性。

所以,我盯上了微软开源的 SkillOpt

做过自动化运维的人都懂,把生产环境交给 LLM,就像把拉满弦的弓交给一个随时会犯困的射手。你写了几千字的 System Prompt,告诉它”不能干什么”,但只要上下文一长,它照样会给你输出一段带有”作为AI助手”的废话,然后顺手把一个非法的命令丢进终端。

问题是,我绝不会把核心主机的”自我修改权”交给一个黑盒。为了把 SkillOpt 的精华压榨出来,又不丢掉主权,我给它做了一场”开胸手术”。

提示词是软的,代码是硬的。 不要指望用自然语言去约束一个会幻觉的大脑,必须用物理机制去卡死它。

下面是这场手术的核心刀法。

1. 记忆不是用来读的,是用来防坑的

SkillOpt 的第一招叫”经验回放”。它把过去的失败案例拿出来重新跑,找到坑在哪里。

但在我的系统里,这招被改造为了纪律级的 FTS5 事故卷宗回溯。我给 Agent 立了一个死规矩:

在执行任何修改配置或处理故障前,必须强制调用底层的 session_search(query="<报错特征词>", limit=3)

这是什么概念?这就好比在排雷前,先强制调阅过去一年这个阵地所有的地雷分布图。前段时间因为 mDNS 陷阱和网络路由冲突,服务器掉线。现在,只要遇到类似的网络配置变更,Agent 必须先读卷宗。不再盲目试错,新方案绝对不能踩进旧坑。

2. 把”软约束”换成”硬护栏”

SkillOpt 的第二招是”验证门”,跑分更高才允许更新技能。

我把它落地成了物理实装的 guardrail.py 脚本,并直接嵌进了夜间的自动化引擎。这是一个无情的双重拦截机制:

  • 主权拦截:正则暴戾扫描。只要出现”作为AI”、”风险提示”、”温馨提示”等废话,直接打回重写。绝不把这些污染传递给下游解析器。
  • 语法拦截:所有生成的 Python、Bash 脚本或 YAML 配置,必须先过 ast.parsedry-run

如果引擎在夜间生成了垃圾,内部自动熔断并重试,最高 3 次。通过这种硬约束,实现了零污染 180 天的稳定运行。

不要用 AI 写作。AI 写作就是”说什么都对,但读完啥也没记住”。这条规律同样适用于 AI 写的 Agent 规则——必须用代码来验证,而非再加一句”请你遵守”。

3. 把方向盘锁死在手里

最后,如何让这些新技能生效?SkillOpt 喜欢全自动合并,但这里不行。

对基因进化引擎做了一次阻断改造:

  • 所有提炼出的新规则(XML),全部打入 .proposed/ 暂存区。
  • 系统自动推送通知,把旧坑和新规则列清。

没有人工的显式确认,任何基因都不会生效。 这是底线。

通过这次改造,这套 Agent 不仅有了自我迭代的”免疫抗体”,还被死死戴上了”物理项圈”。它越进化,反而越安全。

如果你也被大模型的幻觉折磨过,把这套护栏加进去,今晚睡个好觉。

你现在的 Agent 系统有没有类似的护栏?评论区聊聊你踩过的坑 ❄️