You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring AI 1.0.0-M6与Spring Cloud 4.2.1兼容问题:OpenAI客户端JSON解析错误

问题分析

你遇到的是Spring AI 1.0.0-M6与Spring Cloud 4.2.1(Eureka Client/Config Client)的兼容问题,核心原因是Spring Cloud的自动配置会修改HTTP客户端的行为,比如添加服务发现拦截器、负载均衡拦截器等,这些拦截器会干扰Spring AI调用OpenAI的HTTP请求,导致响应被截断或无法正常解析,最终抛出JsonEOFException(JSON输入意外结束)。

解决方案

以下是几种可行的修复/规避方案:

1. 手动构建Spring AI的OpenAiApi客户端

绕过Spring Cloud对HTTP客户端的自动配置,手动创建不受干扰的RestClient实例来初始化OpenAiApi:

import org.springframework.ai.openai.api.OpenAiApi;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.web.client.RestClient;

@Configuration
public class OpenAiConfig {

    @Bean
    public OpenAiApi openAiApi(@Value("${spring.ai.openai.api-key}") String apiKey) {
        // 手动构建RestClient,不依赖Spring Cloud的自动配置
        RestClient restClient = RestClient.builder()
                .baseUrl("https://api.openai.com/v1")
                .defaultHeader(HttpHeaders.AUTHORIZATION, "Bearer " + apiKey)
                .defaultHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE)
                .build();
        return new OpenAiApi(restClient);
    }
}

此方法直接隔离了Spring Cloud对OpenAI请求的影响,确保调用OpenAI时使用独立的HTTP客户端实例。

2. 配置Spring Cloud忽略外部服务

通过配置让Spring Cloud的负载均衡拦截器跳过对OpenAI域名的请求,在application.yml或application.properties中添加:

spring:
  cloud:
    loadbalancer:
      ignored-services: "api.openai.com"

该配置告诉Spring Cloud负载均衡组件不要处理针对api.openai.com的请求,避免拦截器干扰OpenAI响应的解析。

3. 排除特定Spring Cloud自动配置类

如果需要保留Spring Cloud核心功能,但要移除干扰HTTP客户端的配置,可以在启动类上排除相关自动配置:

@SpringBootApplication(exclude = {
        org.springframework.cloud.client.loadbalancer.LoadBalancerAutoConfiguration.class,
        org.springframework.cloud.loadbalancer.config.LoadBalancerAutoConfiguration.class
})
public class YourApplication {
    public static void main(String[] args) {
        SpringApplication.run(YourApplication.class, args);
    }
}

注意:此方法可能影响Spring Cloud内部服务的负载均衡功能,仅在不需要内部服务负载均衡时使用。

验证方法

实现任一方案后,重启项目并调用OpenAI聊天接口:

  • 若错误消失,说明问题已解决
  • 若仍存在异常,可增加日志打印HTTP请求/响应的完整内容,排查是否有其他组件(如链路追踪)的拦截器干扰。

内容的提问来源于stack exchange,提问作者Zuzzuz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 14:39:54