
直接把一段报错交给AI它很容易根据局部日志猜测原因。本文提供一套Evidence Pack工作流将版本、环境、配置差异、时间线和关键日志整理成证据包再让AI按照“事实—假设—验证命令”完成第一轮故障分析。线上服务报错后很多人的第一反应是复制最后几十行日志然后问AI这是什么问题应该怎么修AI通常很快就能给出答案连接池耗尽、数据库超时、线程阻塞、配置错误……问题在于这些判断可能只是根据某个错误关键词作出的猜测。同一条Connection refused既可能是目标服务没有启动也可能是端口配置错误、网络策略变更、容器尚未就绪或者程序连接了错误的环境。日志片段只描述了“发生了什么”未必足以解释“为什么发生”。我现在更倾向于先制作一个Evidence Pack也就是故障证据包再让AI参与分析。一、Evidence Pack里放什么一个最小证据包建议包含以下文件evidence-pack/ ├── 01-incident.md ├── 02-environment.txt ├── 03-version.txt ├── 04-log-window.txt ├── 05-config-diff.txt └── 06-actions.md这些文件分别解决不同的问题。1. 故障时间线01-incident.md只记录已经确认的事实# Incident - 首次异常时间2026-07-04 09:42 - 影响服务order-service - 影响范围部分创建订单请求失败 - 首个告警HTTP 5xx比例升高 - 最近一次发布2026-07-04 09:30 - 回滚后是否恢复是 - 当前状态已恢复原因待确认这里不要提前写“数据库连接池导致故障”。一旦在材料中先写结论AI后面的分析很容易围绕这个结论寻找证据而不是检查其他可能性。故障时间线只回答三个问题什么时候开始异常异常前发生过什么变化采取操作后出现了什么结果至于根因是什么应该留到证据收集完成后再判断。2. 环境信息02-environment.txt记录程序实际运行的环境date-Isecondsuname-ajava-versiondockerversiondockerps--formattable {{.Names}}\t{{.Image}}\t{{.Status}}根据自己的技术栈选择命令不需要为了显得完整而收集与故障无关的全部系统信息。如果服务运行在Kubernetes中可以补充kubectl get pod-nproduction-owide kubectl describe pod order-service-xxx-nproduction kubectl get events-nproduction --sort-by.lastTimestamp执行前需要替换命名空间和Pod名称。环境信息的价值在于排除“本地可以、线上不行”背后的差异例如Java版本不同容器镜像不同环境变量缺失Pod发生过重启节点资源不足依赖服务地址不同。3. 程序版本03-version.txt用于确认线上运行的究竟是哪一版代码gitrev-parse HEADgitlog-1--onelinegitstatus--short如果使用容器部署还应该记录镜像名称、标签和镜像摘要。很多“代码明明已经修复”的问题最后发现线上运行的并不是预期版本。只告诉AI“今天刚发布过一次”还不够。它需要知道发布前后的提交版本实际运行的镜像发布过程中是否出现异常是否存在部分实例未更新回滚是否覆盖了所有实例。版本信息越明确AI越不容易根据错误日志进行无边界猜测。4. 完整日志窗口不要只复制异常最后一行。应该以故障发生时间为中心保留前后几分钟的日志sed-n/2026-07-04 09:38/,/2026-07-04 09:47/papplication.log\evidence-pack/04-log-window.txt具体命令需要根据日志的时间格式调整。为什么需要保留异常之前的日志因为真正的原因可能发生在错误出现之前。例如配置中心推送了新配置服务开始频繁重试线程池逐渐占满请求最终大量失败。如果只给AI看第4步它就可能把“线程池耗尽”当成根因。但从完整时间线看线程池耗尽可能只是配置变化和持续重试造成的结果。日志中还应尽量保留第一条异常同一请求的Trace ID上下游服务响应重试记录超时信息资源告警发布和配置变更记录。提交日志前必须删除Token、Cookie、密码、私钥、连接凭证和用户隐私数据。5. 配置和发布差异05-config-diff.txt记录故障前后的变化。如果配置保存在代码仓库中可以执行gitdiffprevious_commitcurrent_commit--\src/main/resources/还可以记录环境变量变更配置中心修改记录数据库结构变更容器镜像变化依赖版本变化网络策略变化权限配置变化。线上故障排查中一个很实用的经验是先看最近发生了什么变化再看错误信息像什么问题。错误日志可能同时对应十几种原因但故障前的实际变化通常只有少数几个。二、不要直接让AI“给答案”证据包准备好以后我不会直接问AI“根因是什么”而是要求它分阶段输出。可以使用下面的提示词你正在协助分析一次线上故障。 请严格依据我提供的Evidence Pack不要补充不存在的事实。 按以下结构输出 1. 已确认事实 2. 仍然缺失的信息 3. 根因假设最多3个 4. 每个假设对应的支持证据 5. 每个假设对应的反证 6. 下一步只读验证命令 7. 验证完成前禁止执行的修改操作 要求 - 区分“日志直接证明”与“根据现象推断” - 无法确认时明确写无法确认 - 不要直接建议重启、删除数据或修改生产配置 - 优先给出风险最低的只读检查这种提问方式有两个作用。第一它会主动暴露缺失信息。第二它要求每个判断绑定证据减少看到一个错误关键词就直接给出结论的情况。如果AI认为数据库不可用就应该指出是哪条日志、哪个监控信号或哪个检查结果支持这个判断。如果没有直接证据它只能把这个判断标记为假设。三、先执行只读验证AI给出验证建议后还需要人工检查命令是否安全。适合第一轮执行的通常是只读命令例如gitdiffgitlogdockerinspect kubectl describe kubectl logs ss-lntpdf-hfree-m涉及以下操作时应该暂停删除文件 清空缓存 重启服务 修改数据库 回滚版本 修改生产配置 扩大权限 终止进程这些操作并不是永远不能执行而是不应该在根因尚未确认时由AI的一句话直接触发。更稳妥的处理顺序是收集证据 ↓ 形成假设 ↓ 只读验证 ↓ 确认根因 ↓ 评估修复风险 ↓ 执行变更 ↓ 验证与复盘AI可以协助提出检查方法但生产环境中的实际操作仍然需要由熟悉系统的人审核。四、给证据设置等级为了避免AI把弱相关信息当成直接证据可以给材料增加证据等级。A系统直接记录的事实 B多个信号共同支持的判断 C尚未验证的合理假设 D仅由错误关键词产生的猜测例如- A09:30完成新版本部署 - A09:42开始出现5xx - A回滚后错误率恢复 - B故障与本次发布高度相关 - C新版本连接池参数可能配置错误 - D数据库服务器本身发生故障这里可以确认“故障与发布高度相关”但仍然不能直接断言是哪一行代码或哪个参数导致。证据等级可以帮助AI和参与排查的人保持同一套判断标准。五、把验证结果继续写回Evidence Pack每执行一次检查就将结果记录到06-actions.md## 验证记录 ### 10:20 检查数据库端口 命令 ss -lntp 结果 目标端口正常监听。 结论 “数据库服务未启动”假设被排除。 ### 10:28 对比连接池配置 结果 新版本最大连接数由50改为5。 结论 需要结合连接池监控和请求并发继续验证。记录验证过程有三个好处避免团队成员重复检查防止已排除的假设再次出现更换同事或AI对话后仍能继续分析。Evidence Pack本质上不是给某个AI工具准备的提示词而是一份可以交接、复查和审计的故障上下文。六、这套方法解决的不是“AI不够聪明”AI分析线上故障时经常跑偏未必是模型能力不足更常见的原因是输入中缺少明确的时间范围实际运行版本完整日志窗口配置和发布记录已验证与未验证的边界可安全执行的检查范围。当输入只有一段错误日志时AI只能扩大猜测范围。当输入变成结构化证据包时它更适合承担以下工作整理异常时间线提取日志之间的关联对比多个根因假设生成只读检查清单协助形成复盘初稿。最终要不要修改配置、回滚版本、重启服务或操作数据库仍然应该由了解系统的人决定。七、把Evidence Pack做成团队模板如果团队经常使用AI参与故障排查可以在代码仓库中保留一份模板docs/ └── incident-template/ ├── 01-incident.md ├── 02-environment.txt ├── 03-version.txt ├── 04-log-window.txt ├── 05-config-diff.txt └── 06-actions.md发生故障时复制一份再按实际情况填写。模板不需要做得很复杂。它的核心作用是提醒排查人员不要只看最后一条报错不要把推断写成事实不要在验证前执行高风险操作不要让关键上下文只存在于某个人的聊天记录中。当证据格式固定以后无论使用哪一种AI工具分析质量通常都会更加稳定。结语让AI参与线上故障排查最危险的不是它明确说“不知道”而是它在证据不足时给出一个听起来很合理的答案。与其不断追问“你再仔细想想”不如先准备一份Evidence Pack。先固定事实再形成假设先只读验证再修改系统。这比直接把报错复制给AI多花几分钟却可能少走几个小时的弯路。如果你已经确认AI工具适合自己的开发工作流只是在会员订阅或支付环节遇到问题可以了解gpt108.com提供的第三方AI会员充值服务。平台覆盖Cursor、Claude等多种AI工具的会员充值需求但不提供模型能力也不是相关产品的官方网站或授权合作方。使用前请核对适用账号、服务范围、售后条款及相关风险。