目 录CONTENT

文章目录

Spring AI 的特性

冰点
2025-06-18 / 0 评论 / 0 点赞 / 34 阅读 / 14653 字

Spring AI:Java开发者的AI集成利器

在LLM大火之后,Spring 也发布了AI相关组件,我通过官网(https://spring.io/ai)也了解到以下信息,总结以下和大家一起学习。如何高效地将AI功能集成到Spring应用程序中,成为了提升应用竞争力的关键。Spring AI应运而生,它作为Spring生态系统中的重要一员,为Java开发者提供了便捷、强大的AI集成解决方案。终于在【Spring AI 1.0.0 正式版本预计在 2025 年 1 月发布】。出道即巅峰,随即在Java生态中炸开了锅,我们之前用的lanchain4j都转战SpringAI毕竟,阿里已经快速跟进了。并且对于Spring生态的企业也算是无缝集成。

Spring AI 自 2023 年启动,于 2024 年 2 月 23 日发布首个版本 0.8.0 ,从启动到发布第一个版本大约经历了一年时间。

  • 2024 年 5 月 30 日:发布 1.0.0 M1 版本,带来诸多新功能与改进,后续计划对 API 进行全面设计审查、扩大 AI 模型类型覆盖范围等工作。

  • 2024 年 8 月 23 日:发布 1.0.0 M2 版本,对亚马逊 Bedrock 的运行时版本进行了更新。

  • 2024 年 11 月 20 日:发布 1.0.0 M4 版本,修复大量报告的错误,支持亚马逊 Bedrock 的 Converse API ,新增和优化了检索、增强等组件,升级了 Azure OpenAI SDK 版本,改进了文档内容。后续计划在 2024 年 12 月发布 1.0.0 M5 版本,聚焦设计问题;2025 年 1 月发布 1.0.0 RC1 版本,之后很快发布 1.0.0 GA 正式版本。

一、Spring AI是什么?

Spring AI是一个致力于简化人工智能和机器学习技术在Spring应用程序中集成的框架。其设计理念秉承了Spring框架一贯的宗旨,即让开发者能够专注于业务逻辑的实现,而无需过多关注复杂的底层技术细节。通过提供一套统一且抽象的API,Spring AI使得与各种AI服务和模型的对接变得直观且易于操作。这意味着Java开发者即使没有深厚的AI专业背景,也能借助Spring AI快速为自己的应用赋予智能特性。

二、Spring AI的核心组件与功能模块

(一)AI模型集成模块

这是Spring AI的核心模块之一,它赋予了开发者在Spring应用中轻松使用先进AI功能的能力,支持多种流行的大型语言模型服务:

  1. OpenAI:对ChatGPT和DALL-E提供支持,让开发者可以在应用中集成强大的自然语言处理和图像生成能力。

  2. Azure OpenAI:微软的OpenAI服务版本,具备增强功能,为企业级应用提供更多选择。

  3. Anthropic Claude:支持Anthropic的Claude模型,丰富了语言模型的多样性。

  4. Mistral AI:开源可移植的生成式AI模型,为开发者提供了更灵活的部署和定制选项。

  5. Ollama:允许在本地运行各种LLM模型,对于一些对数据隐私和网络依赖有严格要求的场景非常适用。

  6. Vertex AI Gemini:提供对谷歌Gemini聊天模型的支持,借助谷歌的AI技术提升应用的智能交互水平。

  7. 嵌入模型:将文本或多模态内容转换为向量表示,是实现语义搜索、推荐系统等功能的基础,例如Vertex AI Embeddings(Google的文本和多模态嵌入模型)、Amazon Bedrock(亚马逊的Cohere和Titan嵌入模型)、PostgresML(PostgreSQL的文本嵌入模型)以及Transformers (ONNX)(预训练转换器模型,序列化为ONNX格式)等。

  8. 图像生成模型:如Stability AI(支持Stability AI的文本到图像生成模型)和OpenAI DALL-E(OpenAI提供的图像生成模型),能够根据文本描述生成对应的图像,为应用增添丰富的视觉内容生成能力。

  9. 模型上下文协议(MCP)支持:包括Model Context Protocol Server和Model Context Protocol Client,为模型之间的交互和上下文管理提供了支持。

(二)向量数据库支持模块

向量数据库在AI应用中起着存储和检索嵌入向量的关键作用。Spring AI提供了丰富的向量数据库集成选项:

  1. SQL数据库向量支持:

    • PGvector:PostgreSQL的向量扩展,利用PostgreSQL强大的数据库功能和生态系统,为向量存储和检索提供支持。

    • MariaDB Vector Database:为MariaDB提供向量存储支持,适合使用MariaDB的开发者。

    • Oracle Vector Database:针对Oracle数据库的向量嵌入支持,满足企业级用户对Oracle数据库的使用需求。

  2. NoSQL数据库向量支持:

    • MongoDB Atlas Vector Database:在MongoDB Atlas中提供向量数据库功能,结合MongoDB的灵活文档存储和分布式特性。

    • Elasticsearch Vector Database:使Elasticsearch具备向量搜索能力,利用其强大的搜索和分析功能。

    • Redis Search and Query:Redis的向量搜索功能,借助Redis的高性能和内存存储优势。

    • Neo4j Vector Database:Neo4j的向量搜索,结合其图形数据库的特性,为具有复杂关系数据的AI应用提供支持。

    • Apache Cassandra Vector Database:为Cassandra提供向量数据库支持,适用于大规模分布式数据存储场景。

  3. 专用向量数据库:

    • Pinecone:云原生向量数据库,专为AI应用设计,提供高效的向量存储和检索服务。

    • Weaviate:开源向量数据库,具有灵活的架构和丰富的功能,便于开发者定制和扩展。

    • Qdrant:高性能向量搜索引擎,专注于快速的向量相似性搜索。

    • Milvus:开源向量数据库,在大规模向量数据处理方面表现出色。

    • Chroma:开源嵌入数据库,为管理嵌入向量提供了便捷的方式。

    • Typesense:提供向量搜索支持,具备高性能和可扩展性。

  4. 云服务向量数据库:

    • Azure AI Search:微软的AI搜索平台,集成了向量搜索功能,与Azure云服务生态紧密结合。

    • Azure Cosmos DB Vector Store:在Azure Cosmos DB中提供向量存储,利用其全球分布式和多模型支持的特性。

(三)文档处理模块

Spring AI提供了多种文档读取和处理工具,能够从不同格式的文档中提取文本并转换为Spring AI Document对象:

  1. Markdown Document Reader:专门用于读取和处理Markdown文档,对于以Markdown格式记录的技术文档、知识笔记等的处理非常方便。

  2. PDF Document Reader:基于Apache PdfBox实现对PDF文档的读取,能够准确提取PDF中的文本内容,方便进行文本分析和处理。

  3. Tika Document Reader:使用Apache Tika提取多种文档格式的文本,支持的文档格式广泛,包括但不限于Word、Excel、PowerPoint等常见办公文档格式,极大地扩展了文档处理的范围。

(四)对话记忆存储模块

该模块提供了存储和管理聊天历史的功能,对于构建具有上下文感知能力的对话应用至关重要:

  1. JDBC Chat Memory Repository:基于JDBC的聊天记忆存储,利用关系型数据库的稳定性和成熟的事务处理能力,存储聊天历史记录。

  2. Cassandra Chat Memory Repository:基于Cassandra的聊天记忆存储,适合大规模分布式存储聊天数据的场景,具有高扩展性和容错性。

  3. Neo4j Chat Memory Repository:基于Neo4j的聊天记忆存储,借助Neo4j图形数据库的特性,能够更好地处理对话中的关系和上下文信息。

(五)优化求解模块

Spring AI集成了Timefold Solver,这是一个AI求解器,可用于优化操作和调度问题。在诸如生产调度、资源分配、物流路径规划等场景中,Timefold Solver能够帮助应用找到最优解或近似最优解,提高系统的运行效率和资源利用率。

三、Spring AI的架构与工作流程

Spring AI的架构设计旨在实现高效、灵活的AI集成。在典型的工作流程中,首先通过AI模型集成模块选择合适的AI模型,并进行配置和初始化。例如,开发者可以选择OpenAI的ChatGPT模型,并配置好API Key和相关参数。然后,文档处理模块会对输入的文档数据进行处理,提取文本并转换为适合模型处理的格式。如果应用涉及对话功能,对话记忆存储模块会记录和管理对话历史,以便模型能够根据上下文进行更准确的回复。向量数据库支持模块则负责存储和检索与文本相关的向量数据,为语义搜索和推荐等功能提供支持。在整个过程中,优化求解模块可以根据具体的业务需求,对资源分配、任务调度等进行优化。当用户发起请求时,请求会经过一系列的处理流程,最终由选定的AI模型进行处理,并返回结果给用户。

四、实际应用场景

(一)智能客服系统

利用Spring AI的LLM(大型语言模型)和对话记忆库,能够构建具有上下文感知能力的智能客服系统。当用户咨询问题时,系统可以根据对话历史理解用户意图,提供更准确、更个性化的回答。例如,在电商客服场景中,智能客服可以根据用户之前的咨询记录和购买历史,快速解决用户关于产品信息、订单状态等方面的问题,提高客户满意度和服务效率。

(二)文档智能搜索

通过结合文档处理器、嵌入模型和向量数据库,Spring AI可以实现语义搜索功能。在企业文档管理系统中,员工可以通过输入自然语言查询,快速找到与之相关的文档。例如,输入“关于去年财务报告的文档”,系统能够根据文档内容的语义进行匹配,而不仅仅是关键词匹配,大大提高了搜索的准确性和效率,帮助员工快速获取所需信息。

(三)内容生成

借助LLM或图像生成模型,Spring AI可以应用于内容生成领域。例如,在媒体和出版行业,利用语言模型生成新闻稿件、文章摘要等;在广告设计领域,使用图像生成模型根据文案描述生成创意图片,为内容创作提供了新的思路和工具,提高了内容创作的效率和多样性。

(四)知识管理系统

将企业的各类文档转化为可查询的知识库是Spring AI的又一重要应用场景。通过文档处理模块将文档转化为结构化数据,再利用向量数据库进行存储和索引,结合LLM实现智能问答功能。员工可以通过提问的方式获取知识库中的相关知识,促进企业知识的共享和利用,提升企业的整体运营效率。

(五)智能调度系统

在制造业、物流等行业,资源分配和任务调度是关键问题。Spring AI集成的Timefold Solver可以根据各种约束条件和目标函数,对生产任务、车辆配送、人员排班等进行优化调度。例如,在物流配送中,根据车辆的载重、行驶路线、配送时间要求等因素,合理安排车辆的配送任务,提高物流效率,降低成本。

五、Spring AI与Spring生态系统的集成

Spring AI无缝集成到Spring生态系统中,能够与其他Spring项目协同工作,发挥更大的优势。例如,与Spring Boot的集成使得AI应用的快速开发和部署成为可能。通过Spring Boot的自动配置和依赖管理,开发者可以轻松引入Spring AI相关依赖,并进行简单的配置,即可快速搭建起一个具有AI功能的Spring应用。与Spring Cloud的集成则为分布式AI应用的开发提供了支持,能够实现AI服务的注册与发现、负载均衡、容错处理等功能,满足企业级分布式应用的需求。此外,Spring AI还可以与Spring Data等项目结合,更好地处理和存储与AI相关的数据,实现数据驱动的AI应用开发。

六、入门示例:使用Ollama本地运行LLM模型

如何使用Spring AI结合Ollama在本地运行LLM模型:

  1. 引入依赖:在项目的pom.xml文件中添加Spring AI和Ollama相关的依赖:

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.ai</groupId>
            <artifactId>spring-ai-bom</artifactId>
            <version>1.0.0-M6</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>
<dependencies>
    <!--Springai依赖-->
    <dependency>
        <groupId>org.springframework.ai</groupId>
        <artifactId>spring-ai-ollama-spring-boot-starter</artifactId>
    </dependency>
</dependencies>
  1. 配置文件:在application.yml文件中进行Ollama的相关配置:

ai:
    ollama:
        language: zh
        response-language: zh
        chat:
            options:
                model: qwen2:7b
        embedding:
            enabled: true
            model: bge-m3
        base-url: http://172.21.198.208:11434/

这里配置了Ollama的服务地址、默认使用的模型(qwen2:7b)以及用于向量化的模型(bge-m3)。 3. 创建控制器:编写一个简单的控制器来调用Ollama模型进行对话:

import org.springframework.ai.ollama.OllamaChatModel;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.util.Map;

@RestController
public class ChatController {
    private final OllamaChatModel chatModel;

    @Autowired
    public ChatController(OllamaChatModel chatModel) {
        this.chatModel = chatModel;
    }

    @GetMapping("/ai/generate")
    public Map<String, String> generate(@RequestParam(value = "message", defaultValue = "讲个程序员的笑话") String message) {
        return Map.of("generation", this.chatModel.call(message));
    }
}

通过注入OllamaChatModel,在控制器的generate方法中调用call方法,传入用户的问题,即可获取模型生成的回答。

七、总结

Spring AI为Java开发者打开了一扇通往AI集成的大门,通过其丰富的功能模块、灵活的架构设计以及与Spring生态系统的紧密集成,使得在Spring应用中添加AI功能变得前所未有的简单。无论是构建智能客服、文档搜索、内容生成还是其他AI驱动的应用,Spring AI都提供了强大的工具和支持。随着AI技术的不断发展和应用场景的不断拓展,Spring AI必将在Java开发领域发挥越来越重要的作用,帮助开发者创造出更具创新性和竞争力的应用程序。希望本文能够帮助你对Spring AI有一个全面的了解,并激发你在实际项目中应用Spring AI的兴趣和热情。

0

评论区