用多模型 AI 辅助排查接口超时:从日志分析到测试用例补全

📅 2026/6/22 18:26:39
用多模型 AI 辅助排查接口超时:从日志分析到测试用例补全
线上接口偶发超时是后端开发和测试同学都很头疼的问题。它不像语法错误那样稳定复现也不像接口 500 那样容易定位。很多时候问题只表现为“某个时间段变慢”“个别用户请求超时”“压测时 P95 突然升高”。这类问题很适合用 ChatGPT、Claude、Gemini、DeepSeek 等 AI 大模型辅助分析但前提是不要把 AI 当成自动修 Bug 的工具而是把它当成“日志整理、排查路径生成、测试补全”的助手。本文以一个 Java 后端接口超时案例为例演示如何用多模型 AI 辅助完成日志分析、慢查询判断、代码 Review、测试用例补全和复盘文档整理。一、案例背景订单详情接口偶发超时假设有一个订单详情接口httpGET /api/orders/{orderId}线上监控显示平均响应时间120msP95 响应时间900ms偶发请求超过 3s超时集中在每天 10:00 到 11:00接口本身没有明显报错。简化后的代码如下javapublic OrderDetailVO getOrderDetail(Long orderId) { Order order orderMapper.selectById(orderId); ListOrderItem items orderItemMapper.selectByOrderId(orderId); ListPaymentRecord payments paymentMapper.selectByOrderId(orderId); ListAfterSaleRecord afterSales afterSaleMapper.selectByOrderId(orderId); return OrderDetailVO.from(order, items, payments, afterSales);}从代码看逻辑并不复杂。但接口慢可能来自多个方向SQL 没走索引某张关联表数据量过大数据库连接池等待上游服务调用阻塞高峰期缓存穿透单个订单关联明细过多日志打印或序列化成本过高。这时直接让 AI “帮我修复接口超时”并不靠谱。更好的方式是先让它帮助我们整理排查路径。二、第一步用 AI 整理排查清单可以先准备脱敏后的信息text接口GET /api/orders/{orderId}现象P95 约 900ms偶发超过 3s时间每天 10:00 - 11:00 较明显依赖MySQL、Redis无外部 HTTP 调用相关表orders、order_items、payment_records、after_sale_records现有代码分别查询订单、明细、支付记录、售后记录后组装返回Prompt 示例text你是一名 Java 后端性能排查助手。 请根据下面的接口现象和代码信息整理接口超时的排查路径。 要求1. 按数据库、缓存、代码逻辑、并发流量、数据分布、监控指标分类2. 每类给出需要收集的证据3. 不要直接下结论4. 输出 Markdown 表格比较好的输出应该是这种结构分类可能方向需要收集的证据数据库某些 SQL 未命中索引慢查询日志、执行计划、索引信息数据分布单个订单明细数量过多订单明细数量分布、最大值、P95并发流量高峰期数据库连接等待连接池活跃数、等待数、线程堆栈缓存热点订单或缓存失效Redis 命中率、key 过期时间代码逻辑多次串行查询累积耗时每段查询耗时埋点序列化返回对象过大响应体大小、字段数量这一步的目标不是让 AI 直接定位问题而是让排查不遗漏方向。三、第二步把日志喂给模型前先脱敏不要把完整生产日志、用户 ID、手机号、地址、Token 直接提交给 AI。可以先整理成脱敏摘要。原始日志可能是这样text2026-06-18 10:23:11 traceIdabc123 userId987654 orderId202606180001 cost3210mssql1select * from orders where id?sql2select * from order_items where order_id?sql3select * from payment_records where order_id?sql4select * from after_sale_records where order_id?整理成texttraceIdA接口总耗时3210msorders 查询12msorder_items 查询2860mspayment_records 查询18msafter_sale_records 查询25msorder_items 返回行数1842时间段10:23再使用 Prompttext请分析下面的接口耗时摘要。 要求1. 判断最值得优先排查的方向2. 说明还需要补充哪些数据3. 给出下一步验证动作4. 不要编造数据库结构 日志摘要【粘贴脱敏后的耗时信息】AI 可能会指出order_items查询耗时占比过高需要优先查看执行计划、索引和单订单明细数量分布。四、第三步让 AI 辅助分析 SQL 和索引假设当前 SQL 是sqlSELECT *FROM order_itemsWHERE order_id ?ORDER BY created_at DESC;表结构简化如下sqlCREATE TABLE order_items ( id BIGINT PRIMARY KEY, order_id BIGINT NOT NULL, sku_id BIGINT NOT NULL, quantity INT NOT NULL, created_at DATETIME NOT NULL);可以继续让 AI 分析text请审阅下面的 SQL 和表结构。 要求1. 判断该查询可能需要什么索引2. 说明原因3. 给出验证方式4. 不要直接假设数据量需说明依赖哪些统计信息 SQL【粘贴 SQL】 表结构【粘贴 DDL】可能得到的建议sqlCREATE INDEX idx_order_items_order_id_created_atON order_items(order_id, created_at);但这里要注意AI 给出的索引只能作为建议不能直接上线。还需要用真实环境验证sqlEXPLAINSELECT *FROM order_itemsWHERE order_id 202606180001ORDER BY created_at DESC;需要重点看type是否从ALL变成更合理的访问方式key是否命中目标索引rows预估扫描行数是否下降是否出现Using filesort写入频率是否会因新增索引明显受影响。五、第四步让不同模型承担不同任务多模型对比不是为了选一个“永远正确”的答案而是为了发现盲点。实际使用中可以这样分工模型更适合的任务在本案例中的用法ChatGPT通用问题拆解、代码草稿、排查步骤生成接口超时排查清单Claude长日志归纳、复盘文档、上下文一致性检查整理多条 trace 的共同特征Gemini表格化整理、多源资料摘要汇总慢查询、监控指标、压测结果DeepSeek中文技术解释、SQL 思路、代码可读性检查解释执行计划和索引设计思路例如同一份脱敏日志可以让两个模型分别分析text请基于这些接口耗时记录找出共同特征。要求1. 输出可能原因排序2. 每个原因给出证据3. 标记证据不足的地方4. 不要给出未经验证的结论如果两个模型都指出order_items查询异常就说明这个方向值得优先验证。如果一个模型关注索引另一个模型提醒“单订单明细数量异常”也能帮助我们避免只盯着 SQL。六、第五步补充代码层面的防护假设验证后发现部分订单确实存在大量明细且详情页并不需要一次返回全部字段。可以考虑明细分页只返回必要字段对历史大订单做特殊展示增加查询耗时埋点对异常大订单记录监控事件。示例伪代码javapublic OrderDetailVO getOrderDetail(Long orderId) { Timer timer Timer.start(); Order order orderMapper.selectById(orderId); ListOrderItem items orderItemMapper.selectSimpleItemsByOrderId(orderId); if (items.size() 500) { log.warn(large_order_items orderId{}, itemCount{}, orderId, items.size()); } metrics.record(order.detail.query.cost, timer.stop()); return OrderDetailVO.from(order, items);}同时SQL 不建议继续使用SELECT *sqlSELECT id, order_id, sku_id, quantity, created_atFROM order_itemsWHERE order_id ?ORDER BY created_at DESC;AI 可以帮助发现这些“可读性和可维护性问题”但是否调整接口返回结构需要和产品、前端、测试共同确认。七、第六步让 AI 生成回归测试用例性能问题修复后不能只看一次请求变快还需要补测试。可以让 AI 根据问题背景生成用例清单。Prompt 示例text请根据订单详情接口超时问题生成回归测试用例。 要求1. 覆盖正常订单、大明细订单、无明细订单、历史订单2. 包含性能观察指标3. 区分接口功能测试和性能验证4. 输出 Markdown 表格示例结果用例输入条件预期结果观察指标普通订单查询订单包含 3 条明细返回订单详情响应时间稳定大明细订单查询订单包含 1000 条明细接口不超时或按设计分页P95、响应体大小无明细订单查询订单存在但无明细返回空明细列表无异常历史订单查询查询一年前订单返回正确数据SQL 耗时并发查询高峰流量模拟无大量连接等待连接池等待数这些用例需要测试同学结合真实业务数据调整不应直接照搬。八、AI 输出结果怎么验证1. 用监控数据验证关注接口平均耗时、P95、P99、错误率、数据库连接池等待数而不是只看单次请求。2. 用执行计划验证索引建议必须经过EXPLAIN或实际压测验证不能只因为 AI 说“应该加索引”就上线。3. 用灰度观察验证性能优化最好先灰度观察慢查询数量、数据库 CPU、写入延迟和接口耗时变化。4. 用测试用例验证功能测试、边界测试、性能测试都要补齐尤其是大数据量场景。5. 用代码 Review 验证AI 生成的代码或 SQL 必须经过团队 Review重点看兼容性、可维护性和安全边界。九、多模型工具的判断标准选择多模型工具时可以从研发流程出发而不是只看模型数量是否方便复用同一份 Prompt是否支持 Markdown、表格、代码块输出是否便于比较多个模型对同一日志的分析差异是否适合保存常用排查模板是否方便把结果复制到 Issue、Wiki、测试报告是否支持较长上下文便于处理日志摘要和复盘材料是否能融入团队已有的研发流程。真正有价值的是“同一问题多角度分析再人工验证”而不是简单追求模型越多越好。十、风险边界哪些内容不要直接交给 AI在 Debug 和日志分析场景中尤其要注意不提交真实用户手机号、地址、身份证、邮箱不提交生产 Token、密钥、数据库连接串不提交未脱敏的完整生产日志不提交公司内部敏感业务规则不让 AI 直接决定线上变更方案不直接上线 AI 生成的 SQL、索引或代码不把 AI 输出当成事故复盘最终结论。推荐做法是提交脱敏后的日志摘要、表结构片段、执行计划、监控指标和最小代码片段。十一、FAQ常见误区1. AI 能直接定位线上 Bug 吗不能保证。AI 更适合帮助整理线索、生成排查路径、补充可能原因最终定位仍然依赖日志、监控、执行计划和真实复现。2. AI 生成的 SQL 索引可以直接上线吗不建议。索引会影响查询和写入需要结合数据量、查询频率、执行计划、压测结果综合判断。3. 单一模型够不够普通问题通常够用。涉及线上性能、复杂日志、重要接口时多模型交叉验证可以帮助发现遗漏点。4. Prompt 怎么写更稳定要给清楚背景、现象、代码、日志摘要和输出格式并明确要求“不要编造结论”“证据不足请标记”。5. 公司日志能不能直接发给 AI不建议。应先脱敏和摘要化只保留排查所需的技术信息去掉用户隐私、账号、密钥和内部敏感数据。总结把 AI 用进接口超时排查流程比较稳妥的方式是先选一个具体问题例如慢接口、异常堆栈或慢查询再用清晰 Prompt 让模型整理排查路径随后通过监控、执行计划、压测和代码 Review 验证结果。ChatGPT、Claude、Gemini、DeepSeek 各有侧重点重要任务可以做多模型交叉验证。但无论模型输出多完整最终判断都应该回到真实数据、团队评审和测试验证。AI 适合提高排查效率不适合替代工程判断。