跳到主内容

AI 编程怎么利用运行时信息:把堆栈、日志与性能数据喂给模型的定位闭环

100%
AI 编程怎么利用运行时信息:把堆栈、日志与性能数据喂给模型的定位闭环

AI 编程定位 bug 的准确率,取决于你喂进去的是「代码」还是「证据」。只贴一行报错,模型只能猜;把堆栈、关联日志和性能数据按时间轴拼成一条证据链,模型才能给出按可能性排序的根因清单。下面这套流程把「翻日志、猜原因」从人肉劳动,变成可复用的三步闭环。

三类运行时信号,各自解决不同的问题

很多人的做法是复制最后一行报错丢给模型,这等于只给了结论不给过程。运行时信号至少要分三类收集:

信号类型回答的问题典型来源喂给模型前要做什么
堆栈(stack trace)代码在哪一层断的应用日志、 CI 失败输出、前端 Sentry保留最内层 20 行 + 最外层 5 行,中间大段框架调用删掉
关联日志断之前发生了什么Nginx access log 、业务日志、慢查询日志按 request_id / trace_id 对齐时间轴,只留错误前后 60 秒
性能数据为什么只有部分请求会断Profiling 采样、 APM 、数据库慢查询取 P50/P95/P99 三个分位,不要贴原始火焰图

三类信号缺一类,模型的推理就会出现系统性偏差:只有堆栈,它会把偶发问题当成必现逻辑错误;只有日志,它找不到出错代码行;没有性能数据,它对「高并发才复现」这类条件完全无解。

第一步:把日志裁成证据链,而不是整段粘贴

生产日志一屏几十行,直接全贴有两个坏处:噪声淹没关键行,以及很快把上下文窗口撑满。正确做法是先做裁剪:

  1. 按 trace 对齐:同一个 request_id 的请求日志、依赖调用、 DB 查询拼成一段。
  2. 按时间截断:只保留异常发生前 30 秒到后 30 秒。
  3. 脱敏:token 、手机号、身份证、内网 IP 一律替换成占位符,这既是合规要求,也能避免模型把注意力放在无关字段上。
  4. 标注已知事实:在日志上方写一句「这个接口昨天上线过一次改动,改动内容是 xxx 」,把人类已知的上下文显式补上。
裁剪后的日志控制在 80 行以内是经验值。超过这个量级,模型对关键行的注意力会明显下降,不如先让它自己读日志文件(终端里直接让它 grep),再由人来框定范围。

第二步:先要失败模式清单,再要排序根因

一次提问就想要「正确答案」是最常见的错误用法。 Anthropic 官方给出的调试路径是两段式:先让模型枚举可能触发该错误的失败模式,再让它对根因按可能性排序。

下面是 checkout 接口在 10:23–10:31 的错误日志与堆栈(已脱敏,trace_id 已对齐)。
已知事实:该接口昨天上线过一次改动,改动内容是 session 过期时间从 24h 改为 15m 。

请分两步回答:
1. 列出所有可能触发该错误的失败模式(含超时、限流、字段缺失、竞态等);
2. 给出 probable root causes ranked by likelihood,每条注明对应的代码路径与验证方法。

这样问的价值在于:第一步把搜索空间摊开,避免模型一头扎进最显眼的那条线索;第二步的排序把「去查 API 故障」这种泛泛结论,变成「去查 auth 服务的限流配置」这种可执行动作。

第三步:让模型自己写复现测试,而不是人肉搭环境

生产问题往往依赖真实负载、第三方行为和真实数据,本地复现成本极高。更省事的做法是把复现转化成测试:

  • Write a test that reproduces this bug —— 让模型根据堆栈写出最小复现用例。
  • Run the test suite and show me what changed —— 验证修复有没有波及周边行为。
  • 确认修复后再让它提交 PR:Commit these changes and open a PR。
为什么不建议先加日志再部署等复现
传统调试第四步是「加日志 → 部署 → 等复现」,这一轮下来通常要几小时到几天,而且高流量站点加 debug 日志本身就有性能代价。把已有日志交给模型做根因排序、再让它生成复现测试,能直接跳过这个循环。只有在日志确实缺失关键字段时,才值得走插桩这条路。

四条裁剪规则,防止上下文被撑爆

  1. 大文件按行区间喂:让它读 src/order/service.ts:120-260 而不是整个文件。
  2. 大输出移进子智能体:把日志分析这种高 token 任务丢给子智能体,只回传结论。
  3. 定期压缩:终端里跑 /compact,重点保留 plan 和 diff 。
  4. 分阶段开新会话:定位阶段和修复阶段分开,定位结论写成一段摘要带过去。

  1. 收集三类信号:堆栈、同 trace 的关联日志、 P50/P95/P99 性能分位。

  2. 裁剪与脱敏:按 trace_id 对齐、按时间截断到 60 秒、替换敏感字段、标注已知改动。

  3. 两段式提问:先要失败模式清单,再要按可能性排序的根因与验证方法。

  4. 让模型写最小复现测试并跑全量测试,确认修复没有波及周边。

  5. 把结论沉淀成一份调试笔记,下次同类问题直接检索复用。

什么情况下别用这套流程

  • 涉及资金、权限、删除操作的修复:模型可以定位,但不要让它直接改,人工复核不可省。
  • 日志本身可能不可信:如果日志采集链路有问题,喂进去的证据链就是错的,先修采集。
  • 错误信息来自第三方 SDK 且无源码:此时模型只能猜,优先去查官方 issue 与版本变更。

顺带一提,如果你想系统性地防止模型在定位过程中「编造」代码路径,可以配合一份验证清单来收口,参考 AI 编程幻觉怎么防:四类高频幻觉与验证清单;代码检索环节则建议先看 AI 编程的代码检索怎么做。拿到修复补丁后,别急着合并,按 AI 代码评审清单 过一遍更稳妥。


只贴报错信息不贴代码,模型能定位吗?
能给出方向但不能定位到行。报错只说明症状,模型必须看到出错代码路径才能判断是逻辑错误、边界条件还是依赖问题。至少要把堆栈最内层涉及的业务代码文件一起喂进去。

日志有几万行,怎么交给模型?
不要整段粘贴。先用终端命令按 trace_id 或时间窗口过滤,把范围缩到几十行;如果过滤后仍然很大,就让模型自己执行 grep/awk 命令读文件,你只负责框定范围。

性能类问题也能用这套方法吗?
可以,但喂的数据要换成分位数而不是原始火焰图。给出 P50/P95/P99 和对应的慢查询 Top 5,模型通常能判断是索引缺失、 N+1 查询还是连接池打满。

模型给的根因排序不准怎么办?
把「验证方法」这一项强制要求出来,用人能执行的检查动作替代结论本身。排序不准时,按清单逐条验证的成本仍低于从零排查。

查看 Claude Code 官方故障排查文档
这篇有帮助吗?
云上的幻象
云上的幻象查看主页

七彩云博客,分享 WordPress 建站实战与 AI 工具测评,覆盖服务器运维、站长工具、软件资源与电商运营干货,专注原创实用的主题插件、网站加速与安全优化教程。

958文章4评论

相关文章

评论 (0)

欢迎你,新朋友,感谢参与互动!文明发言,理性交流 · 首次评论将在审核后展示