在这里插入图片描述
整合大模型,你还在手写OkHttp吗?

我见过太多项目,调用大模型的代码是这样的:手动拼JSON请求体,手动解析JSON响应,手动处理异常,手动写重试,一个简单的对话接口写了两百行样板代码。更要命的是,每个项目都复制一遍,改个API Key就上线,出了问题排查半天。

SpringBoot生态早就有成熟的starter了,引入依赖、写两行配置,直接注入Bean就能用。今天整理5个最实用的starter,覆盖大模型调用、Agent框架、向量检索、流式输出、配置管理,pom.xml直接复制,少写几百行样板代码。

本文属于Java+AI Agent落地系列,之前讲了多Agent协作框架,这些starter是快速搭建Agent项目的基础工具。

一、5个starter依赖总览

序号Starter用途适用场景
1spring-ai-openai-spring-boot-starter大模型调用(OpenAI兼容接口)通用大模型对话、Function Calling
2langchain4j-spring-boot-starterAgent框架(RAG/Agent/记忆/工具)完整Agent应用开发
3milvus-sdk-java + spring-boot-starter向量数据库RAG知识库、长期记忆
4spring-boot-starter-webflux流式输出(SSE)大模型流式响应
5spring-boot-configuration-processor配置管理大模型参数配置化

下面逐个讲,每个都给完整的pom依赖+配置+使用代码。

二、Starter 1:Spring AI(大模型调用)

Spring AI是Spring官方推出的AI集成框架,支持OpenAI兼容接口(通义千问、DeepSeek、智谱AI都能用),自动处理HTTP调用、JSON解析、异常重试,比手写OkHttp简洁10倍。

<!-- pom.xml -->
<dependency>
    <groupId>org.springframework.ai</groupId>
    <artifactId>spring-ai-openai-spring-boot-starter</artifactId>
    <version>1.0.0</version>
</dependency>
# application.yml
spring:
  ai:
    openai:
      api-key: your-dashscope-api-key
      base-url: https://dashscope.aliyuncs.com/compatible-mode/v1
      chat:
        options:
          model: qwen-turbo
          temperature: 0.3
// 使用:直接注入ChatClient,一行代码调用大模型
@Service
public class ChatService {

    private final ChatClient chatClient;

    public ChatService(ChatClient.Builder builder) {
        this.chatClient = builder.build();
    }

    public String chat(String question) {
        return chatClient.prompt()
                .user(question)
                .call()
                .content();
    }

    // Function Calling 也支持
    public String chatWithFunction(String question) {
        return chatClient.prompt()
                .user(question)
                .functions("getWeather")  // 注册工具函数
                .call()
                .content();
    }
}

避坑提醒:Spring AI 1.0.0要求SpringBoot 3.2+,如果你还在用SpringBoot 2.7,用langchain4j更合适。

三、Starter 2:LangChain4j(Agent框架)

LangChain4j是Java生态最成熟的Agent框架,支持RAG、Agent、记忆系统、工具调用、流式输出,功能最全。之前Agent系列的记忆、工具调用、工作流都可以基于LangChain4j快速实现。

<!-- pom.xml -->
<dependency>
    <groupId>dev.langchain4j</groupId>
    <artifactId>langchain4j-spring-boot-starter</artifactId>
    <version>0.35.0</version>
</dependency>
<!-- 通义千问模型支持 -->
<dependency>
    <groupId>dev.langchain4j</groupId>
    <artifactId>langchain4j-dashscope-spring-boot-starter</artifactId>
    <version>0.35.0</version>
</dependency>
# application.yml
langchain4j:
  dashscope:
    chat-model:
      api-key: your-dashscope-api-key
      model-name: qwen-turbo
      temperature: 0.3
// 使用:定义Agent接口,一行注解搞定
@AiService
public interface CustomerSupportAgent {

    @SystemMessage("你是企业智能客服,仅基于参考文档回答问题。")
    String chat(@UserMessage String userMessage);
}

// 注入直接用
@Service
public class ChatService {
    @Resource
    private CustomerSupportAgent agent;

    public String chat(String question) {
        return agent.chat(question);
    }
}

核心优势:LangChain4j的@AiService注解太香了,定义接口+注解,框架自动生成实现,RAG、记忆、工具调用都通过配置注入,不用写样板代码。SpringBoot 2.7也能用。

四、Starter 3:Milvus SDK(向量检索)

RAG和Agent长期记忆都需要向量数据库,Milvus是Java生态支持最好的向量数据库,官方SDK完善,有SpringBoot starter。

<!-- pom.xml -->
<dependency>
    <groupId>io.milvus</groupId>
    <artifactId>milvus-sdk-java</artifactId>
    <version>2.4.4</version>
</dependency>
# application.yml(自定义配置,Milvus没有官方starter,用配置类封装)
milvus:
  host: localhost
  port: 19530
// 配置类:封装Milvus客户端为Spring Bean
@Configuration
@ConfigurationProperties(prefix = "milvus")
@Data
public class MilvusConfig {
    private String host;
    private int port;

    @Bean
    public MilvusServiceClient milvusServiceClient() {
        return new MilvusServiceClient(ConnectParam.newBuilder()
                .withHost(host)
                .withPort(port)
                .build());
    }
}

// 使用:直接注入MilvusServiceClient
@Service
public class VectorSearchService {
    @Resource
    private MilvusServiceClient milvusClient;

    public List<String> search(List<Float> queryVector, int topK) {
        SearchParam searchParam = SearchParam.newBuilder()
                .withCollectionName("kb_document")
                .withVectorFieldName("vector")
                .withVectors(Collections.singletonList(queryVector))
                .withTopK(topK)
                .build();
        // 解析结果...
        return Collections.emptyList();
    }
}

避坑提醒:Milvus没有官方SpringBoot starter,需要自己写配置类封装。但也不复杂,十几行代码搞定。如果用LangChain4j,它内置了Milvus集成,连配置类都不用写。

五、Starter 4:WebFlux(流式输出SSE)

大模型流式输出是刚需,用户等十几秒看完整回答体验太差。SpringBoot的WebFlux提供了原生SSE支持,配合大模型流式接口,几行代码就能实现真正的流式输出。

<!-- pom.xml -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-webflux</artifactId>
</dependency>
// 使用:返回Flux<String>,自动SSE流式输出
@RestController
@RequestMapping("/api/chat")
public class ChatController {

    @GetMapping(value = "/stream", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
    public Flux<String> streamChat(@RequestParam String question) {
        // 调用大模型流式接口,把每个delta转成Flux
        return Flux.create(sink -> {
            // 模拟大模型流式返回,实际用OkHttp异步读取
            String[] tokens = question.split("");
            for (String token : tokens) {
                sink.next(token);
                try { Thread.sleep(50); } catch (InterruptedException e) { break; }
            }
            sink.complete();
        });
    }
}

注意:用WebFlux的SseEmitter或Flux都可以实现流式输出。如果项目已经用了SpringMVC,用SseEmitter就行,不用整个切换到WebFlux。

六、Starter 5:Configuration Processor(配置管理)

大模型的参数(API Key、模型名、温度、超时时间)应该配置化,不要硬编码在代码里。spring-boot-configuration-processor让配置类有自动提示,写配置时IDE会补全,不容易写错。

<!-- pom.xml -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-configuration-processor</artifactId>
    <optional>true</optional>
</dependency>
// 大模型配置类
@Configuration
@ConfigurationProperties(prefix = "llm")
@Data
public class LlmConfig {
    private String apiKey;
    private String baseUrl = "https://dashscope.aliyuncs.com/compatible-mode/v1";
    private String model = "qwen-turbo";
    private double temperature = 0.3;
    private int timeout = 60;
    private int maxRetries = 3;
}
# application.yml(IDE会自动提示配置项)
llm:
  api-key: your-api-key
  model: qwen-turbo
  temperature: 0.3
  timeout: 60
  max-retries: 3

这个starter虽然不直接提供AI能力,但它是工程化的基础。所有大模型参数配置化,换模型、换API Key不用改代码,改配置重启就行。生产环境必须用。

七、完整pom.xml(5个starter整合版,直接复制)

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>3.2.5</version>
    </parent>

    <groupId>com.example</groupId>
    <artifactId>springboot-ai-starter</artifactId>
    <version>1.0.0</version>

    <properties>
        <java.version>17</java.version>
        <langchain4j.version>0.35.0</langchain4j.version>
        <milvus.version>2.4.4</milvus.version>
    </properties>

    <dependencies>
        <!-- 1. Spring AI:大模型调用 -->
        <dependency>
            <groupId>org.springframework.ai</groupId>
            <artifactId>spring-ai-openai-spring-boot-starter</artifactId>
            <version>1.0.0</version>
        </dependency>

        <!-- 2. LangChain4j:Agent框架(和Spring AI二选一,或都用) -->
        <dependency>
            <groupId>dev.langchain4j</groupId>
            <artifactId>langchain4j-spring-boot-starter</artifactId>
            <version>${langchain4j.version}</version>
        </dependency>
        <dependency>
            <groupId>dev.langchain4j</groupId>
            <artifactId>langchain4j-dashscope-spring-boot-starter</artifactId>
            <version>${langchain4j.version}</version>
        </dependency>

        <!-- 3. Milvus:向量数据库 -->
        <dependency>
            <groupId>io.milvus</groupId>
            <artifactId>milvus-sdk-java</artifactId>
            <version>${milvus.version}</version>
        </dependency>

        <!-- 4. WebFlux:流式输出 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-webflux</artifactId>
        </dependency>

        <!-- 5. 配置管理 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
            <optional>true</optional>
        </dependency>

        <!-- Web -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <!-- Lombok -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
    </dependencies>
</project>

完整SpringBoot+大模型整合工程,包含5个starter的配置类、使用示例、完整pom.xml,后台回复【ai工具包】领取。


📦 落地资源推荐

跑SpringBoot+大模型项目,推荐阿里云轻量应用服务器,新用户价格友好再加上通过推广渠道的9折优惠券跌破低价,开发调试足够用,有部署需求点击文末「阅读原文」了解阿里云开发者特惠,无需求直接忽略。

💡 领取完整源码

在这里插入图片描述
关注图片上水印即Java-AI工程师,完整 SpringBoot + 大模型整合工程,包含 5 个 starter 的配置类、使用示例、完整 pom.xml,打出【agents】领取。

下期预告

RAG和Agent分开做都不难,但合在一起就各种问题——检索结果怎么传给Agent?Agent怎么决定要不要检索?多轮对话怎么保持检索上下文?今天给你一个完整可运行的知识库检索Agent,从检索到生成到记忆,全链路Java实现。下一篇讲:RAG+Agent合体:知识库检索Agent的完整Java实现(可写进简历)

本文属于「Java AI Agent实战」合集

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐