半夜三点线上崩了,AI替我背了锅——用AI排错,五分钟定位三年老bug

凌晨三点,手机狂震。用户说"下单就报错",群里产品、测试、后端轮番@我。我爬起来开电脑,翻日志、复现、打断点,眼看天要亮了,还没找到原因。第二天又被老板骂"效率低"。我一怒之下,让AI帮我盯着错误日志。现在线上崩了,AI先替我查一遍,直接告诉我:"第87行,变量拼写错误。" 我只需要回个"好的",翻身继续睡。

前言

程序员最怕什么?不是需求变更,不是产品经理,是线上bug自己找不到 。尤其那种偶发、只在特定环境出现、本地死活复现不了的幽灵bug。你只能靠加日志、猜、靠经验。有时候花几个小时,最后发现是少了个 ? 或者多打了个空格。

AI 来了之后,我发现它特别适合干这种事:读错误堆栈、理解上下文、推测原因、甚至给出修复代码。今天我就用真实案例,带你用 AI 当"线上排错助手",让机器替你熬夜。

一、为什么 AI 比人更适合排错?

  • 读得快:几千行日志,AI 几秒读完,人得滚半天。
  • 记得全:它记得你之前犯过的类似错误,人不一定。
  • 不困:凌晨三点,人眼瞎,AI 照样清醒。
  • 有联想 :报错 TypeError: Cannot read property 'map' of undefined,它能猜出"上游数据可能为空,建议加可选链"。

缺点:它不知道业务上下文(比如这个字段就是不该为空),但能帮你缩小范围。

二、实战:用 ChatGPT / Copilot Chat 分析线上错误

假设你的 Node 后端报了这个错误:

bash 复制代码
TypeError: Cannot read property 'userId' of undefined
    at /app/order.js:42:23
    at processTicksAndRejections (internal/process/task_queues.js:95:5)

你直接把堆栈、相关代码段、甚至几行上下文贴给 AI:

这段代码报错,说 userId 是 undefined,但理论上 req.user 应该由鉴权中间件注入。帮我分析可能的原因。

AI 可能给出几种猜测:

  1. 鉴权中间件没有正确挂载或被跳过。
  2. 某些请求(如 OPTIONS 预检)没有经过中间件。
  3. 异步错误导致 req.user 被清空。

它会顺带问你要不要看中间件代码。你贴给它,它可能一眼看出:app.use('/order', authMiddleware) 写在了 app.use(express.json()) 之前,导致 body 没解析,authMiddleware 拿不到 token。这破事,人可能看一小时,AI 十秒。

三、进阶:用自动化工具做实时错误分析

光靠手动贴代码不够快。你可以用 Sentry + AI 集成 或者写个脚本,每次错误产生,自动把堆栈发给 AI,然后把分析结果发到钉钉/飞书。

这里给出一个简化版脚本(Node.js + OpenAI):

js 复制代码
import { OpenAI } from 'openai';

const openai = new OpenAI({ apiKey: process.env.OPENAI_KEY });

async function analyzeError(errorMessage, stackTrace, codeSnippet) {
  const prompt = `
    线上报错:
    ${errorMessage}
    堆栈:
    ${stackTrace}
    相关代码:
    ${codeSnippet}
    请分析可能的原因,并按优先级列出修复建议。最多3条。
  `;
  const response = await openai.chat.completions.create({
    model: 'gpt-4',
    messages: [{ role: 'user', content: prompt }],
  });
  return response.choices[0].message.content;
}

// 假设你从日志系统拿到错误信息
const report = await analyzeError(
  "TypeError: Cannot read property 'userId' of undefined",
  "at /app/order.js:42",
  "const userId = req.user.userId; // 上一行没有判断 req.user"
);
console.log('AI 分析结果:', report);
// 然后通过 webhook 发到钉钉

你甚至可以把它挂在 CI 上,或者让错误日志系统自动调用。以后半夜报错,AI 先帮你分析一轮,你把结果往群里一贴,说"已定位,明天修",继续睡。

四、真实故事:AI 帮我找出三年前埋的坑

有一次,一个功能偶尔报 ECONNRESET,只在生产环境、高峰期出现。我看了两天,以为网络问题。后来我把完整的错误日志和相关代码(十几个文件)打包发给 GPT-4,问它:"什么情况下会频繁连接重置?" 它看了一会儿,指出:"你的 http.Agent 没有设置 maxSockets,默认无穷,但某些第三方服务限制了单个 IP 的连接数。高峰期超过限制,直接掐断连接。"

我查了文档,果然。加了一行 maxSockets: 10,问题消失。这个 bug 躺了三年,AI 十分钟破案。

五、让 AI 更懂你的业务:提供上下文

AI 排错的准确率取决于你给的上下文。你可以先把项目的大致架构、常见错误、已知边界条件写成一段"项目 profile",然后每次排错时让 AI 参考。例如:

我的项目是一个 Next.js + Prisma 的电商网站,用户登录后 session.user.id 一定存在,除非 session 过期。过期时中间件会重定向到登录页,不会执行到下单逻辑。请基于这个背景分析下面的错误。

这样 AI 就不会瞎猜"也许用户没登录",而是直接去检查 session 是否在某个环节被意外清除。

六、局限性:AI 也会翻车

  • 幻觉:它可能编造一个不存在的函数或字段。
  • 过度自信:明明不确定,却说"这就是原因"。
  • 环境依赖:它不知道你服务器上的特殊配置。

所以我的策略:AI 给建议,我来验证。它说"可能是 X",我就去查 X;它给修复代码,我先在测试环境跑一遍。永远不要让 AI 直接往生产发代码。

七、总结:AI 排错是"辅助驾驶",不是"自动驾驶"

  • 用 AI 快速分析错误堆栈、推测原因、提供修复方向。
  • 结合自动化工具,让 AI 在线上错误发生时第一时间介入。
  • 提供足够的上下文(架构、已知问题),提升准确率。
  • 人做最终决策,AI 负责熬夜。

自从我用上这套流程,半夜被叫醒的次数减少了 80%。现在报警来了,我先看 AI 的分析,十有八九直接点出问题。我可以回一句"知道了,明天处理",然后关灯继续睡。第二天到公司,五分钟修好。老板还夸我"反应快"。


评论区聊聊:你被线上 bug 折腾过最久的一次是多久?后来怎么发现的?

相关推荐
人月神话-Lee1 小时前
【图像处理】亮度与对比度——图像的线性变换
图像处理·人工智能·ios·ai编程·swift
kyriewen1 小时前
我让 AI 当了 24 小时全年无休的“毒舌考官”
前端·ci/cd·ai编程
hexu_blog1 小时前
vue+java实现图片批量压缩
java·前端·vue.js
IT_陈寒2 小时前
为什么你应该学习JavaScript?
前端·人工智能·后端
lifejump2 小时前
Empire(帝国)CMS 7.5 XSS注入
前端·安全·xss
无风听海2 小时前
OAuth 2.0 前端通道与后端通道深入剖析
前端·oauth
sakiko_2 小时前
UIKit学习笔记8-发送照片、拍摄照片并发送
前端·swift·uikit
ZengLiangYi2 小时前
Claude Code 对话自动导入完全指南
ai编程