今晚,我再一次被 Codex 震惊到了

现在时间是晚上的9点29分,依然跑步上地铁的我带着一身汗臭来记录今晚由Codex带给我的震惊了。

上周,老板让我参与一个面向客户的Agent搭建,这个Agent存在的基座,是我们前面两个月完全使用Codex新搭建出来的系统。

Agent的具体细节不阐述,只简要说一下它的框架:它的初始设计,有很多的条条框框;它的结果生成,依赖于许多的模型调用。它的大体运行流程,首先是一轮并发的模型调用筛选出来合适的信息,再基于这些筛选结果调一次大模型生成草稿,最后一轮模型调用是对草稿的检查。草稿不合规就走兜底,绝对不乱出它不知道的信息。

对草稿的检查,又是一整套的规则,这些规则当中某一部分,是各种限制(判断)条件之间的优先级关系:A跑了B就不能跑,B跑了C必须也跟着跑,DEF可以是同一分组,DEF都成立才能执行G,HIJ当中某一条成立就能执行K……

(到换乘站了,我冲上两段扶梯,地铁刚到站,今晚10点,应该不用绕路五分钟就能回家。)

总之是,这优先级关系,搞得我整个人懵懵的。

我们的功能一周一周往系统加,这周上线功能之一,就是这优先级关系。

我新搭建的Agent,老板说很多规则写得太长不够优雅,于是改进方向是将这优先级关系用上,让关系把Agent变得优雅。

好的,6点半系统上线,我那Agent开始工作了,当我让它回答一个问题之后,一个很神奇现象发生:整个系统都凉凉,打到我服务上的所有请求,都毫无反应,只能安静等待180秒的超时。

怎么办呢?

系统在线上,log也只有卡死之前的那些,我不能像接入langfuse一样,让Codex直接分析trace得出结论。

我首先做的,是让它分析一下卡死之前的log(从线上拷贝下来的),它的方向跑歪,想着将锅甩给另一个服务。

“不对,这个和其它服务没关系。现在问题是pod还活着,但是接口打不进去,连一点点log都没看到的。”

(9点59分下地铁,再往前冲一截,真的赶在门关之前出站,是又一次的心想事成啦!)

它让我执行一批Linux指令查看系统状态。

“不行,这些命令都没有的,咱们这是一个很小pod嘛,无关的命令都没有的。”

它给出的下一个方案让我开始有一点惊讶,我将惊讶分享于阿力,阿力便也跟我一起看全程。Codex给出的方案是:既然Linux指令都没有,那接下来我们的操作,都用Python代码写吧。

好在pip还能用,装一个py-spy之后,接下来的指令都顺畅无比。

首先看看端口占用。(此时我有一个“可能是同步代码执行太多导致async的event loop一直卡住”思路,但并不给Codex说,我不忍心打断它的排查思路。)

然后看看CPU与内存状态。(此时它已经定位到我们服务的CPU只有0.4核,并且看到是CPU被吃满了。)

它再让我执行一段Python代码(我依然不能记住具体代码,只记得大概方向是定位当前逻辑停在哪里),拿到结果的它成功定位到问题。问题是关系当中存在环,你调用我来我调用你,喋喋不休停不下来。

我将Agent详情给到它,让它继续排查。(中间来回对话不止上面几轮,阿力昨天分享于我的可在手机上同步使用Codex的方法,我还没来得及弄好。明天必须得先弄好,这样就可以在手机上发指令,在手机上看历史记录了。)

此时我和阿力开始激动:“这个真牛逼啊,要是没有AI,不知道多久才能排查出来问题。”

“我觉得排查不出来,现在这系统太复杂了。我记得一年半之前碰到过一个相似问题,就上面那个event loop卡住的,也是服务启动一段时间之后就接不到新的请求了,然后健康监测把它重启。当时那问题我好像至少看了两三天才有一些眉目。

“整个定位过程,应该是可以再有些优化空间的,现在定位问题的顿点,是我将指令复制粘贴到pod中执行,再将结果复制粘贴出来告诉Codex。

“而优化的点正是减少我的手动操作,我可以在本地构建一模一样的运行环境,如果能够一模一样,便可一键复现,Codex便能直接读本地环境,它需要的指令我可以随便装,或许一个半小时的排障,可以缩短到半小时不到。”

Codex还在继续跑,阿力已经走掉又掉头回来跟我说:“我觉得今晚这个你应该记录一下啊。”

于是我将它记录下来,Codex,可真牛啊! 原文链接,更新于2026-07-07。)