Hello 大家好,我是鹿先森,最近在研究AI,如果你对AI感兴趣可以关注我,一起探索,点击下方链查看更多优质文章~ ,免费领取最新AI前沿资料!!!

全球前十AI应用,国产占半壁江山,夸克、豆包、DeepSeek、元宝、Talkie 新五小龙崛起

随着人工智能技术的迅猛发展,将大型语言模型(LLM)集成到现有应用程序中已成为现代软件开发的重要趋势。SpringBoot作为Java后端开发中最流行的框架之一,其与大模型的集成变得尤为重要。本教程旨在为Java初学者提供一个全面的指南,详细介绍如何在SpringBoot项目中接入大型语言模型,包括Spring AI和LangChain4j这两种主流解决方案。

一、什么是大型语言模型?

大型语言模型(Large Language Model, LLM)是一种利用机器学习技术来理解和生成人类语言的人工智能模型。它们在海量文本数据上进行训练,能够执行文本分析、情绪分析、语言翻译和语音识别等任务。常见的大型语言模型包括OpenAI的GPT系列、Meta开发的LLaMA系列、Google的BERT等。

二、SpringBoot与AI集成概述

SpringBoot是一个开源的Java框架,旨在简化Spring应用程序的初始搭建和开发过程。它通过自动配置和开箱即用的特性,让开发者能够更专注于业务逻辑的实现。将SpringBoot与AI技术结合,可以快速构建具有智能交互能力的应用程序。

目前,Spring生态系统提供了多种方式来实现与大型语言模型的集成,主要包括:

  1. 使用Spring AI(官方提供的解决方案)
  2. 使用LangChain4j(专为Java开发者设计的开源框架)
  3. 直接集成特定的大模型API(如OpenAI、阿里云百炼等)

三、Spring AI入门

什么是Spring AI?

Spring AI是一个专为AI工程设计的应用框架,旨在将企业的数据和API与AI模型连接起来。它的设计理念是将Spring生态系统的设计原则应用到AI领域。

Spring AI的核心功能包括:

  • 提供跨AI提供商的便携API,支持聊天、文本到图像和嵌入模型
  • 支持多种AI模型提供商,如Anthropic、OpenAI、Microsoft、Amazon、Google等
  • 提供聊天客户端API和顾问API
  • 支持向量数据库和检索增强生成(RAG)
  • 提供工具调用/函数调用功能
  • 提供可观察性功能和文档摄入ETL框架

版本配置

Spring AI有多个版本,包括正式版本和快照版本(SNAPSHOT)。使用快照版本需要在项目的构建文件中添加相应的仓库配置。

对于Maven项目,可以在pom.xml中添加以下仓库定义:

<repositories>
    <repository>
        <id>spring-milestones</id>
        <name>Spring Milestones</name>
        <url>https://repo.spring.io/milestone</url>
        <snapshots>
            <enabled>false</enabled>
        </snapshots>
    </repository>
    <repository>
        <id>spring-snapshots</id>
        <name>Spring Snapshots</name>
        <url>https://repo.spring.io/snapshot</url>
        <snapshots>
            <enabled>true</enabled>
        </snapshots>
    </repository>
</repositories>

项目默认使用0.8.1的版本,也可以通过修改pom.xml中的版本号来使用其他版本。

四、使用Spring AI集成大模型

创建SpringBoot项目

首先,我们需要创建一个基础的SpringBoot项目。如果已经有一个SpringBoot项目,可以直接在现有项目上进行集成。

使用Spring Initializr创建项目:

  1. 访问Spring Initializr
  2. 选择项目配置:Project: Maven, Language: Java, Spring Boot: 3.2.4或更高版本
  3. 添加依赖:Spring Web
  4. 下载项目并导入到IDE中

添加Spring AI依赖

在项目的pom.xml文件中添加Spring AI的依赖。根据不同的AI服务提供商,需要添加相应的starter依赖。

例如,集成OpenAI的依赖配置如下:

<dependencies>
    <!-- Spring Boot 依赖 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    
    <!-- Spring AI OpenAI 依赖 -->
    <dependency>
        <groupId>com.spring.ai</groupId>
        <artifactId>spring-ai-open-ai-starter</artifactId>
        <version>1.0.0-SNAPSHOT</version>
    </dependency>
</dependencies>

注意:使用SNAPSHOT版本时,需要确保项目配置了快照仓库。

配置API密钥

大语言模型的调用通常需要API密钥。我们需要在application.properties或application.yml文件中配置API密钥。

spring.ai.open-ai.api-key=your_api_key_here

将"your_api_key_here"替换为实际的大模型API密钥。

创建服务类

接下来,我们需要创建一个服务类,封装大模型的调用逻辑。

import com.spring.ai.chat.Chat;
import com.spring.ai.chat.ChatCompletionRequest;
import com.spring.ai.chat.ChatCompletionResponse;
import org.springframework.stereotype.Service;

@Service
public class AIModelService {
    
    private final Chat chat;
    
    public AIModelService() {
        this.chat = Chat.create();
    }
    
    public String generateText(String prompt) {
        ChatCompletionRequest request = new ChatCompletionRequest();
        request.setPrompt(prompt);
        ChatCompletionResponse response = chat.complete(request);
        return response.getText();
    }
}

创建控制器

为了将模型调用暴露为API,创建一个SpringBoot控制器,用户可以通过HTTP请求来与AI模型交互。

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class AIController {
    
    private final AIModelService aiModelService;
    
    public AIController(AIModelService aiModelService) {
        this.aiModelService = aiModelService;
    }
    
    @GetMapping("/ai/generate")
    public String generate(@RequestParam String prompt) {
        return aiModelService.generateText(prompt);
    }
}

测试集成效果

完成上述步骤后,启动SpringBoot应用程序,并通过浏览器或Postman访问以下URL进行测试:

http://localhost:8080/ai/generate?prompt=Hello AI

你将会看到AI模型根据输入的提示语"Hello AI"返回生成的文本结果。

处理多轮对话

Spring AI也支持处理多轮对话,通过维护上下文状态,我们可以实现连续的自然语言对话。

import com.spring.ai.chat.Chat;
import com.spring.ai.chat.ChatCompletionRequest;
import com.spring.ai.chat.ChatCompletionResponse;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;

@Service
public class AIConversationService {
    
    private final Chat chat;
    private final List<String> conversationHistory;
    
    public AIConversationService() {
        this.chat = Chat.create();
        this.conversationHistory = new ArrayList<>();
    }
    
    public String haveConversation(String prompt) {
        conversationHistory.add(prompt);
        ChatCompletionRequest request = new ChatCompletionRequest(conversationHistory);
        ChatCompletionResponse response = chat.complete(request);
        conversationHistory.add(response.getText());
        return response.getText();
    }
}

五、LangChain4j集成大模型

除了Spring AI,LangChain4j也是另一个适合在SpringBoot中集成大模型的框架。LangChain4j是一个专为Java开发者设计的框架,帮助开发者轻松接入各类大模型并进行自然语言处理。

环境准备

在开始集成之前,确保已经具备以下开发环境:

  • JDK 1.8+
  • Maven或Gradle项目管理工具
  • SpringBoot 2.5.0+

创建SpringBoot项目

如果还没有现有的SpringBoot项目,可以使用Spring Initializer快速生成一个新项目:

  1. 访问Spring Initializer
  2. 选择配置:Project: Maven, Language: Java, Spring Boot: 2.5.0或更新版本, Dependencies: Spring Web
  3. 点击Generate按钮,下载项目压缩包,并解压后导入到IDE中

添加LangChain4j依赖

在项目的pom.xml文件中添加LangChain4j的依赖:

<dependencies>
    <!-- Spring Boot 依赖 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    
    <!-- LangChain4j 依赖 -->
    <dependency>
        <groupId>io.langchain4j</groupId>
        <artifactId>langchain4j-core</artifactId>
        <version>0.1.0</version>
    </dependency>
</dependencies>

配置API密钥

大语言模型的调用通常需要API密钥。在application.properties或application.yml文件中配置API密钥。

langchain4j.api.key=your_api_key_here

将"your_api_key_here"替换为实际的大模型API密钥。

创建服务类

创建一个服务类,封装大模型的调用逻辑:

import io.langchain4j.core.LangChain;
import io.langchain4j.model.CompletionRequest;
import io.langchain4j.model.CompletionResponse;
import org.springframework.stereotype.Service;

@Service
public class AIModelService {
    
    private final LangChain langChain;
    
    public AIModelService() {
        this.langChain = LangChain.create("your_api_key_here");
    }
    
    public String generateText(String prompt) {
        CompletionRequest request = new CompletionRequest();
        request.setPrompt(prompt);
        CompletionResponse response = langChain.complete(request);
        return response.getText();
    }
}

创建控制器

创建一个SpringBoot控制器,暴露API供用户调用:

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class AIController {
    
    private final AIModelService aiModelService;
    
    public AIController(AIModelService aiModelService) {
        this.aiModelService = aiModelService;
    }
    
    @GetMapping("/ai/generate")
    public String generate(@RequestParam String prompt) {
        return aiModelService.generateText(prompt);
    }
}

测试集成效果

启动SpringBoot应用程序,通过浏览器或Postman访问以下URL进行测试:

http://localhost:8080/ai/generate?prompt=Hello AI

你将会看到AI模型根据输入的提示语"Hello AI"返回生成的文本结果。

处理多轮对话

LangChain4j也支持处理多轮对话,通过维护上下文状态,我们可以实现连续的自然语言对话。

import io.langchain4j.core.LangChain;
import io.langchain4j.model.ConversationRequest;
import io.langchain4j.model.ConversationResponse;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;

@Service
public class AIConversationService {
    
    private final LangChain langChain;
    private final List<String> conversationHistory;
    
    public AIConversationService() {
        this.langChain = LangChain.create("your_api_key_here");
        this.conversationHistory = new ArrayList<>();
    }
    
    public String haveConversation(String prompt) {
        conversationHistory.add(prompt);
        ConversationRequest request = new ConversationRequest(conversationHistory);
        ConversationResponse response = langChain.converse(request);
        conversationHistory.add(response.getText());
        return response.getText();
    }
}

六、常见的大模型API集成

除了OpenAI,还有许多其他的大模型API可以集成到SpringBoot应用中。以下是几种常见的大模型API集成方法:

1. 阿里云百炼大模型

使用Spring AI Alibaba集成

Spring AI Alibaba是Spring AI的一个扩展,专门用于集成阿里云的大模型服务。

步骤:
  1. 确认Spring Boot版本为3.3.x或以上
  2. 申请API Key并配置到环境变量
  3. 在项目中添加Spring AI Alibaba的依赖
  4. 配置必要的属性

集成阿里云百炼大模型需要遵循以下步骤来设置开发环境和编写代码。

2. 腾讯混元大模型

将腾讯的混元大模型集成到Spring AI项目中需要遵循一系列步骤,从环境准备到最终实现。博客园的文章详细介绍了这个过程。

3. Ollama大模型

SpringBoot可以集成Ollama大模型,并支持流式传输。

Spring AI的高级功能

除了基本的AI模型调用,Spring AI还提供了许多高级功能,可以帮助开发者构建更复杂、更智能的应用程序。

检索增强生成(RAG)

RAG(Retrieval Augmented Generation)是一种技术,通过结合外部知识库和大型语言模型,可以生成更准确、更相关的回答。

Spring AI提供了对RAG的支持,允许开发者将文档存储在向量数据库中,并使用大型语言模型来生成基于这些文档的回答。

工具调用/函数调用

Spring AI支持工具调用/函数调用功能,允许模型请求执行客户端工具和函数,从而访问必要的实时信息和采取行动。

可观察性

Spring AI提供了可观察性功能,提供了与AI相关的操作的洞察,帮助开发者监控和调试AI应用。

性能考虑和最佳实践

在将大模型集成到SpringBoot应用时,需要考虑以下性能问题和最佳实践:

性能优化

  1. 缓存:缓存频繁访问的模型结果,减少API调用次数
  2. 异步处理:对于耗时的模型调用,使用异步处理
  3. 限流:限制并发的模型调用,避免API限制

安全考虑

  1. API密钥管理:确保API密钥安全存储,不要硬编码在代码中
  2. 输入验证:验证用户输入,防止恶意攻击
  3. 访问控制:实施适当的访问控制,限制谁可以使用AI功能

结论

将大型语言模型集成到SpringBoot应用中可以为应用程序添加智能交互能力,提升用户体验。本教程介绍了两种主要的集成方式:使用Spring AI和使用LangChain4j。无论是哪种方式,都需要配置正确的依赖和API密钥,并遵循最佳实践来确保应用的性能和安全性。

随着AI技术的不断发展,Spring AI和LangChain4j也在不断更新和完善。开发者应该关注它们的最新版本和特性,以便构建更强大、更智能的应用程序。

Logo

火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。

更多推荐