SpringBoot项目5分钟集成ChatGPT API实战指南

9次阅读
没有评论

共计 2815 个字符,预计需要花费 8 分钟才能阅读完成。

背景与痛点

在当前的 AI 浪潮中,快速集成 ChatGPT API 成为了提升开发效率的关键需求。然而,开发者在实际集成过程中常常会遇到以下痛点:

  • API 认证流程复杂,需要处理 token 生成和刷新
  • 响应结构嵌套深,解析困难
  • 缺乏统一的异常处理机制
  • 性能瓶颈难以预估
  • 生产环境的安全隐患

技术选型

目前主流的集成方式有三种:

  1. 直接调用 OpenAI 官方 SDK
  2. 使用第三方封装库
  3. 原生 HTTP 请求

我们选择原生 HTTP 请求方案,因为:

  • 避免 SDK 版本锁定
  • 更灵活的参数控制
  • 便于后续自定义扩展

核心实现

1. 依赖配置

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <optional>true</optional>
</dependency>
<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger2</artifactId>
    <version>3.0.0</version>
</dependency>

2. API 认证配置

@Configuration
public class ChatGPTConfig {@Value("${openai.api.key}")
    private String apiKey;

    @Bean
    public RestTemplate chatGPTRestTemplate() {RestTemplate restTemplate = new RestTemplate();
        restTemplate.getInterceptors().add((request, body, execution) -> {request.getHeaders().add("Authorization", "Bearer" + apiKey);
            return execution.execute(request, body);
        });
        return restTemplate;
    }
}

3. 服务层封装

@Service
@RequiredArgsConstructor
public class ChatGPTService {

    private final RestTemplate restTemplate;

    private static final String API_URL = "https://api.openai.com/v1/chat/completions";

    public String getChatResponse(String prompt) {HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.APPLICATION_JSON);

        Map<String, Object> request = new HashMap<>();
        request.put("model", "gpt-3.5-turbo");
        request.put("messages", List.of(Map.of("role", "user", "content", prompt)));

        HttpEntity<Map<String, Object>> entity = new HttpEntity<>(request, headers);

        try {
            ResponseEntity<String> response = restTemplate.postForEntity(API_URL, entity, String.class);
            return parseResponse(response.getBody());
        } catch (RestClientException e) {throw new ChatGPTException("API 调用失败", e);
        }
    }

    private String parseResponse(String jsonResponse) {
        // 使用 Jackson 或 Gson 解析 JSON
        return jsonResponse; // 简化示例
    }
}

4. 异常处理

@RestControllerAdvice
public class GlobalExceptionHandler {@ExceptionHandler(ChatGPTException.class)
    public ResponseEntity<ErrorResponse> handleChatGPTException(ChatGPTException ex) {return ResponseEntity.status(HttpStatus.BAD_GATEWAY)
            .body(new ErrorResponse(ex.getMessage()));
    }
}

完整代码示例

Controller 层

@RestController
@RequiredArgsConstructor
@RequestMapping("/api/chat")
@Api(tags = "ChatGPT API 接口")
public class ChatGPTController {

    private final ChatGPTService chatGPTService;

    @PostMapping
    @ApiOperation("获取 AI 回复")
    public ResponseEntity<String> chat(@RequestBody String prompt) {return ResponseEntity.ok(chatGPTService.getChatResponse(prompt));
    }
}

性能考量

  1. 请求限流 :实现 RateLimiter 控制 QPS
  2. 缓存策略 :对常见问题答案缓存 24 小时
  3. 异步处理 :使用 @Async 注解实现非阻塞调用
@Async
public CompletableFuture<String> getChatResponseAsync(String prompt) {return CompletableFuture.completedFuture(getChatResponse(prompt));
}

安全建议

  1. API 密钥通过 Vault 或 KMS 管理
  2. 用户输入进行 XSS 过滤
  3. AI 输出内容审核

避坑指南

  1. 429 错误 :添加指数退避重试机制
  2. 模型版本过时 :定期检查 API 文档
  3. 长响应超时 :合理设置 connectTimeout

总结与延伸

通过这套方案,我们实现了:

  • 5 分钟快速集成
  • 生产级异常处理
  • 可扩展的架构设计

未来可扩展方向:

  1. 响应式编程改造
  2. 多模型支持
  3. 对话上下文管理

完整项目代码已上传 GitHub,欢迎 Star 和贡献。在实际使用中遇到任何问题,可以在评论区留言讨论。

正文完
 0
评论(没有评论)