测试与调试
大约 2 分钟
第十六章:测试与调试
16.1 单元测试:把不确定性隔离在边界
AI 输出天然不确定,因此测试策略要反过来做:
- 核心业务逻辑尽量做成确定性:参数校验、路由选择、工具调用结果拼装、缓存策略、限流策略
- 不确定性集中在边界:真正的模型调用
单元测试的目标不是“断言模型输出的每个字”,而是断言:
- 你给模型的输入是否符合预期(prompt 结构、工具列表、约束)
- 你对模型输出的解析是否健壮(结构化解析、兜底策略)
- 出错时是否走了正确的重试/降级路径
16.2 集成测试:Mock 供应商响应
集成测试建议覆盖两类路径:
- 正常路径:返回结构符合预期
- 异常路径:429/5xx/超时,验证重试与降级
如果你的 Spring AI 版本允许自定义底层 HTTP 客户端,常用做法是用 MockWebServer 来伪造供应商 API;如果不方便,也可以在测试 Profile 下替换 ChatClient Bean。
16.2.1 用 Test Profile 替换 ChatClient(思路)
package com.example.testing;
import org.springframework.ai.chat.client.ChatClient;
import org.springframework.boot.test.context.TestConfiguration;
import org.springframework.context.annotation.Bean;
@TestConfiguration
public class FakeAiConfig {
@Bean
public ChatClient chatClient() {
return new FakeChatClient();
}
}FakeChatClient 里返回固定输出,这样 Service 层测试就稳定了。
16.3 Mock测试:推荐测“你自己的逻辑”
建议优先写以下单测(命名风格:should_xxx_when_xxx):
- should_returnCachedResponse_when_samePromptProvided
- should_throwValidationError_when_toolArgsInvalid
- should_fallback_when_providerRateLimited
- should_routeToReasoningModel_when_taskTypeIsReasoning
16.4 调试技巧:让问题可复现
调试 AI 应用的第一原则:让问题可复现。
实用技巧:
- 把关键请求参数(模型名、温度、maxTokens、消息条数、prompt 长度)记录到日志(脱敏)
- 为每次 AI 调用生成 requestId,串联日志与指标
- 对异常输出保留“原始响应片段”(脱敏后),便于定位解析失败
当你做到“可复现”,AI 应用的调试难度会迅速下降。 点击这里👇🏻获取:100万QPS短链系统、复杂的商城微服务系统、智能翻译助手AI Agent、SaaS点餐系统、刷题吧小程序、商城系统、秒杀系统、AI项目、代码生成神器、苏三demo项目、智能天气播报AI Agent、智能代码审查AI Agent等 10 个项目的:项目源代码、开发教程和技术答疑
