使用 Spring AI OpenAI Starter 快速集成指南

使用 Spring AI OpenAI Starter 快速集成指南

Spring AI 的 spring-ai-openai-spring-boot-starter 提供了与 OpenAI 模型(如 GPT-3.5、GPT-4)开箱即用的集成能力。以下是完整的配置与实战步骤:


1. 添加依赖

如果找不到对应版本可以查看 对应ai版本,一定要认准groupId,版本比较多,另外一版本mvnrepository 我们用的是第一个
pom.xml 中添加 Spring AI OpenAI Starter:

<dependency>
    <groupId>io.springboot.ai</groupId>
    <artifactId>spring-ai-openai-spring-boot-starter</artifactId>
    <version>1.0.0</version> <!-- 使用最新版本 -->
</dependency>

2. 配置 OpenAI API 密钥

application.yml 中配置 OpenAI 的 API 密钥和模型参数:

spring:
  ai:
    openai:
      api-key: "sk-your-openai-api-key-here"  # 替换为你的 OpenAI API 密钥
      base-url: "https://api.openai.com/v1"    # 默认值,通常无需修改
      chat:
        options:
          model: "deepseek-r1:671b"                # 默认模型
          temperature: 0.7                       # 生成文本的随机性控制
          max-tokens: 500

3. 核心代码实现
3.1 注入 ChatClient

Spring AI 会自动配置 ChatClient 实例,直接注入即可使用:

import org.springframework.ai.chat.ChatClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/ai")
public class AIController {

    private final ChatClient chatClient;

    @Autowired
    public AIController(ChatClient chatClient) {
        this.chatClient = chatClient;
    }

   @PostMapping("/chat")
    public String generateText(@RequestBody String prompt) {
        return chatClient.call(prompt);
    }
}
3.2 高级参数控制

通过 ChatOptions 动态调整请求参数:

import org.springframework.ai.chat.prompt.Prompt;
import org.springframework.ai.openai.OpenAiChatOptions;

@PostMapping("/chat/advanced")
public String advancedChat(@RequestBody String prompt) {
    // 自定义参数
    OpenAiChatOptions options = OpenAiChatOptions.builder()
        .withModel("gpt-4")
        .withTemperature(0.3)
        .withMaxTokens(1000)
        .build();

    // 构建 Prompt
    Prompt request = new Prompt(prompt, options);
    return chatClient.generate(request).getOutput().getContent();
}

4. 流式响应(Server-Sent Events)

实现实时流式输出:

import org.springframework.ai.chat.StreamingChatClient;
import reactor.core.publisher.Flux;

@Autowired
private StreamingChatClient streamingChatClient;

  public Flux<String> streamChat(@RequestParam String prompt) {
    return streamingChatClient.stream(prompt);
  }


5. 异常处理

全局捕获 OpenAI 相关异常:

import org.springframework.ai.openai.api.OpenAiApiException;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;

@RestControllerAdvice
public class AIExceptionHandler {

    @ExceptionHandler(OpenAiApiException.class)
    public ResponseEntity<String> handleOpenAiException(OpenAiApiException ex) {
        return ResponseEntity.status(ex.getStatusCode())
            .body("OpenAI 服务错误: " + ex.getMessage());
    }
}

6. 高级功能
6.1 多模态支持(图片生成)
import org.springframework.ai.openai.OpenAiImageClient;
import org.springframework.ai.openai.api.OpenAiImageApi;

@Autowired
private OpenAiImageClient imageClient;

  @PostMapping("/generate-image")
  public String generateImage(@RequestParam String prompt) {
    ImageResponse call = imageClient.call(
      new ImagePrompt(prompt)
    );
    return call.getResult().getOutput().getUrl();
  }
6.2 嵌入向量(Embeddings)
import org.springframework.ai.embedding.EmbeddingClient;

@Autowired
private EmbeddingClient embeddingClient;

@PostMapping("/embed")
public List<Double> getEmbedding(@RequestBody String text) {
    return embeddingClient.embed(text);
}

7. 配置项详解
配置项说明
spring.ai.openai.api-keyOpenAI API 密钥(必填)
spring.ai.openai.base-urlAPI 端点地址(默认 https://api.openai.com/v1
spring.ai.openai.chat.options.model聊天模型(如 gpt-4-turbogpt-3.5-turbo
spring.ai.openai.chat.options.temperature生成文本的随机性控制)
spring.ai.openai.chat.options.portmax-tokens最大token

8. 测试验证
8.1 使用 CURL 测试
curl -X POST -H "Content-Type: application/json" \
-d '"请写一首关于春天的诗"' \
http://localhost:8080/ai/chat
8.2 单元测试
@SpringBootTest
public class AIControllerTest {

    @Autowired
    private ChatClient chatClient;

    @Test
    void testChat() {
        String response = chatClient.generate("你好");
        assertNotNull(response);
        System.out.println("AI 回复: " + response);
    }
}

9. 安全与优化建议
  1. 密钥管理

    • 使用环境变量或 Vault 注入 api-key
      spring:
        ai:
          openai:
            api-key: ${OPENAI_API_KEY}
      
    • 禁止在代码中硬编码密钥
  2. 性能调优

    spring:
      ai:
        openai:
          connect-timeout: 5000   # 连接超时(毫秒)
          read-timeout: 30000    # 读取超时(长文本生成场景)
    
  3. 限流与熔断

    // Resilience4j 熔断器配置
    @Bean
    public CircuitBreakerConfig circuitBreakerConfig() {
        return CircuitBreakerConfig.custom()
            .failureRateThreshold(50)  # 失败率阈值
            .waitDurationInOpenState(Duration.ofSeconds(30))
            .build();
    }
    

10. 常见问题

Q1:如何解决 401 Unauthorized 错误?

  • 检查 api-key 是否正确
  • 确认 API 密钥是否有访问目标模型的权限

Q2:如何处理 429 Too Many Requests

  • 降低请求频率
  • 配置 Resilience4j 限流器:
    @RateLimiter(name = "openaiRateLimit", fallbackMethod = "rateLimitFallback")
    public String rateLimitedGenerate(String prompt) {
        return chatClient.generate(prompt);
    }
    

Q3:如何切换为 Azure OpenAI?
修改配置即可无缝切换:

spring:
  ai:
    openai:
      base-url: "https://{your-resource-name}.openai.azure.com/openai/deployments/{deployment-name}"
      api-key: "Azure API Key"
      headers:
        "api-key": "${spring.ai.openai.api-key}"  # Azure 需要 header 传参

通过以上步骤,您已快速实现 Spring Boot 与 OpenAI 的深度集成。如需扩展其他 AI 服务(如 DeepSeek),可参考 Spring AI 的 ChatClient 接口自定义实现。

附录

下篇文章介绍如何无缝接入DeepSeek

为了实现Google Gmail注册功能,通常不会直接提供完整的源代码示例来创建Gmail账户。这是因为用户账户管理涉及敏感操作,应由官方服务处理以确保安全性和合规性。 然而,在开发与Gmail交互的应用程序时,可以利用OAuth 2.0协议授权流程来进行身份验证和访问控制[^3]。这允许第三方应用请求特定权限范围内的数据访问而无需知晓用户的密码。 对于希望集成Google登录或与其他Google服务互动的应用开发者来说,建议按照官方指南设置项目并启用必要的API接口: - 创建新的Google应用程序需前往Google API Console页面[^1]。 ```python import os from google_auth_oauthlib.flow import InstalledAppFlow from googleapiclient.discovery import build SCOPES = ['https://www.googleapis.com/auth/gmail.readonly'] def main(): """Shows basic usage of the Gmail API. Lists the user's Gmail labels. """ creds = None flow = InstalledAppFlow.from_client_secrets_file( 'credentials.json', SCOPES) creds = flow.run_local_server(port=0) service = build('gmail', 'v1', credentials=creds) results = service.users().labels().list(userId='me').execute() labels = results.get('labels', []) if not labels: print('No labels found.') else: print('Labels:') for label in labels: print(label['name']) if __name__ == '__main__': main() ``` 此Python脚本展示了如何通过OAuth 2.0认证过程连接到Gmail API,并列出当前用户的标签列表作为简单演示。请注意,实际部署前还需要考虑更多细节配置以及错误处理机制等问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

danny-IT技术博客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值