Skip to content

故障排除

常见错误处理

API 错误

  1. API 密钥错误

    • 检查 API 密钥是否正确
    • 确保 API 密钥有足够的权限
    java
    try {
        OpenAiChatModel model = OpenAiChatModel.builder()
                .apiKey(System.getenv("OPENAI_API_KEY"))
                .build();
    } catch (Exception e) {
        System.err.println("API 密钥错误: " + e.getMessage());
        // 处理错误
    }
  2. API 速率限制

    • 实现请求限流
    • 处理速率限制错误
    java
    try {
        String response = model.generate(prompt);
    } catch (RateLimitException e) {
        System.err.println("速率限制错误: " + e.getMessage());
        // 等待后重试
        Thread.sleep(1000);
        // 重试
    }
  3. API 超时

    • 设置合理的超时时间
    • 实现重试机制
    java
    OpenAiChatModel model = OpenAiChatModel.builder()
            .apiKey(System.getenv("OPENAI_API_KEY"))
            .timeoutMs(30000) // 30秒超时
            .build();

模型错误

  1. 模型输出错误

    • 检查提示词格式
    • 调整模型参数
    java
    try {
        String response = model.generate(prompt);
    } catch (ModelOutputException e) {
        System.err.println("模型输出错误: " + e.getMessage());
        // 调整提示词或参数
    }
  2. 模型响应不完整

    • 检查最大令牌数设置
    • 分段处理长文本
    java
    OpenAiChatModel model = OpenAiChatModel.builder()
            .apiKey(System.getenv("OPENAI_API_KEY"))
            .maxTokens(2000) // 增加最大令牌数
            .build();
  3. 模型幻觉

    • 提供更明确的提示词
    • 添加事实检查
    java
    String prompt = "请根据提供的信息回答,不要添加未提及的内容:" + originalPrompt;

调试技巧

日志记录

  1. 详细日志

    • 记录请求和响应
    • 记录错误信息
    java
    // 记录请求
    logger.info("发送请求: {}", prompt);
    
    // 记录响应
    logger.info("收到响应: {}", response);
    
    // 记录错误
    logger.error("错误: {}", e.getMessage());
  2. 结构化日志

    • 使用结构化日志格式
    • 便于分析和查询
    java
    // 结构化日志
    logger.info("请求处理", 
            "prompt", prompt,
            "model", modelName,
            "timestamp", System.currentTimeMillis());
  3. 性能日志

    • 记录响应时间
    • 识别性能瓶颈
    java
    long startTime = System.currentTimeMillis();
    String response = model.generate(prompt);
    long endTime = System.currentTimeMillis();
    logger.info("响应时间: {}ms", endTime - startTime);

调试工具

  1. 调试模式

    • 启用调试模式
    • 查看详细信息
    java
    // 启用调试模式
    System.setProperty("org.slf4j.simpleLogger.defaultLogLevel", "debug");
  2. 断点调试

    • 使用 IDE 断点调试
    • 检查变量状态
  3. 模拟响应

    • 使用模拟数据进行调试
    • 隔离问题
    java
    // 模拟响应
    String mockResponse = "模拟响应";
    // 使用模拟响应进行调试

性能瓶颈分析

识别瓶颈

  1. 性能分析

    • 使用性能分析工具
    • 识别耗时操作
    java
    // 使用性能分析器
    Profiler profiler = new Profiler();
    profiler.start();
    
    // 执行操作
    String response = model.generate(prompt);
    
    profiler.stop();
    System.out.println(profiler.getResults());
  2. 资源使用监控

    • 监控 CPU、内存使用
    • 识别资源瓶颈
    java
    // 监控内存使用
    Runtime runtime = Runtime.getRuntime();
    long usedMemory = runtime.totalMemory() - runtime.freeMemory();
    System.out.println("内存使用: " + usedMemory / 1024 / 1024 + "MB");
  3. 网络分析

    • 分析网络请求
    • 识别网络瓶颈
    java
    // 网络请求分析
    long startTime = System.currentTimeMillis();
    HttpResponse response = httpClient.send(request, HttpResponse.BodyHandlers.ofString());
    long endTime = System.currentTimeMillis();
    System.out.println("网络请求时间: " + (endTime - startTime) + "ms");

解决瓶颈

  1. 优化代码

    • 优化算法和数据结构
    • 减少不必要的计算
    java
    // 优化前
    for (int i = 0; i < list.size(); i++) {
        // 重复计算
    }
    
    // 优化后
    int size = list.size();
    for (int i = 0; i < size; i++) {
        // 避免重复计算
    }
  2. 并行处理

    • 使用并行处理提高性能
    • 合理使用线程池
    java
    // 并行处理
    List<String> responses = prompts.parallelStream()
            .map(prompt -> model.generate(prompt))
            .collect(Collectors.toList());
  3. 缓存策略

    • 使用缓存减少重复计算
    • 提高响应速度
    java
    // 缓存结果
    Map<String, String> cache = new ConcurrentHashMap<>();
    
    String getResponse(String prompt) {
        return cache.computeIfAbsent(prompt, key -> model.generate(key));
    }

最佳实践

  1. 错误处理

    • 实现全面的错误处理
    • 提供清晰的错误消息
  2. 日志管理

    • 配置适当的日志级别
    • 定期清理日志
  3. 监控系统

    • 实现实时监控
    • 设置告警机制
  4. 性能优化

    • 定期进行性能分析
    • 持续优化系统
  5. 测试策略

    • 编写单元测试
    • 进行集成测试
  6. 文档记录

    • 记录常见错误和解决方案
    • 维护故障排除指南
  7. 持续改进

    • 收集和分析错误数据
    • 持续改进系统稳定性