LangChain4j实战-Java AI应用开源框架之LangChain4j和Spring AI

今天这篇文章我来分享LangChain4j实战-Java AI应用开源框架之LangChain4j和Spring AI。

在贝恩聊架构AI专栏中通过学习如何使用Java相关AI应用开源框架,到后续开发企业级Java AI应用,将大型语言模型和AI工具集成到现有系统中。我们将重点介绍如何使用Spring AI和LangChain4J等开源框架,在Java企业级应用程序中构建高度定制化的AI应用。

随着人工智能(AI)技术的飞速发展,越来越多的开发者开始将目光投向AI应用的开发。然而,目前市场上大多数AI框架如LangChain、PyTorch等主要支持Python,而AI不仅仅是Python开发者所独有的,在Java企业级应用市场一定会涌现出很多基于企业级应用的AI产品,所以对Java AI应用开发框架的掌握是Java开发者将大模型(LLM)和业务系统集成关键的知识点。

AI专栏软件环境

  • IntelliJ IDEA 2024.3.5
  • LangChain4j 0.36.2
  • Spring Boot 3.4.4
  • Spring 6.2.5
  • OpenAI
  • JDK 17.0.13

我们先看本篇文章对应的项目结构,请看下图

接下来我来介绍Java AI技术栈主流的两款开源框架LangChain4j和Spring AI

LangChain4j:docs.langchain4j.dev/

Spring AI:spring.io/projects/sp...

完整代码在文章最后,如果觉得本篇文章对你有用,记得点赞、关注、收藏哦。你的支持是我持续更新的动力!

1 Java AI应用开发框架

1.1 LangChain4j

LangChain4j 是一个专为 Java 开发者设计的开源库,旨在简化将大型语言模型(LLM)集成到 Java 应用程序中的过程。下图为LangChain4j核心组件:

1.1.1 核心组件

  • 基础组件

    • Language Models:模型组件,包含各种类型的模型和模型集成。
    • Prompt Templates:提示模板,负责提示管理、优化和序列化。
    • Output Parsers:输出解析器,将 LLM 的输出解析为更结构化的格式。
    • Memory:记忆组件,用于保存和模型交互时的上下文状态。
  • 高级组件

    • Chains:链,是一系列对各种组件的调用。
    • AI Services:AI 服务,将与 LLMs 和其他组件交互的复杂性隐藏在简单的 API 后面。
    • RAG(检索增强生成) :包含文档加载器、文本切割器、向量模型、向量数据库等组件。

1.1.2 核心功能

  • 统一 API:能方便地接入 15 + 个主流的 LLM 提供商和 20 + 个向量嵌入存储。
  • 综合工具箱:从低级的提示模板、聊天记忆管理到高级的 AI 服务和 RAG 等一应俱全。
  • 多模态支持:支持文本和图像作为输入,能够处理更复杂的应用场景。
  • 模块化设计:不同功能可以独立使用,便于扩展和维护。
  • 高层次抽象:提供低级和高级 api,开发者可按需选择。
  • 良好的集成支持:与 springboot 等流行框架集成良好。
  • 支持流式响应:支持从 LLMs 流式获取响应,允许实时获取模型的输出。

1.1.3 应用场景

  • 企业级应用:在数字化和AI的发展进程中千行百业的应用需要与大模型进行集成。
  • 聊天机器人:可用于构建聊天机器人,实现接受、更改、取消订单等功能
  • 信息提取:能处理大量非结构化数据,如文件、网页等,并从中提取结构化信息,比如从客户评论和支持聊天记录中提取见解。
  • 内容生成与转换:可用于生成应用或网站的内容,还能对信息进行转换。
  • 文本分类与标注:使用内置的模型或者自有模型进行文本分类和标签分配。
  • 机器翻译:整合现有神经网络模型,实现文本间的自动转换。

1.2 Spring AI

Spring AI 是 Spring 生态系统中用于人工智能和机器学习集成的应用程序框架。以下是关于Spring AI详细介绍:

1.2.1 核心功能

  • 简化集成:提供统一且简化的 API,让开发者能轻松将 AI 和机器学习模型集成到 Spring 应用中,无需处理复杂的底层细节。
  • 丰富的生态支持:依托 Spring 强大的生态,可与 Spring Boot、Spring Cloud 等无缝集成,便于构建现代化的 AI 驱动的微服务和分布式系统。
  • 模型管理便捷:支持 OpenAI、Azure OpenAI、Hugging Face、DeepSeek 等多种主流 AI 模型,方便开发者管理和部署。
  • 数据处理优势:借助 Spring Data 等模块,能高效进行数据访问、预处理和后处理,为 AI 模型训练和推理提供优质数据支持1。
  • 集成多种大模型功能:涵盖自然语言处理、机器学习集成、图像处理与计算机视觉、检索增强生成、函数调用、向量数据库集成等。
  • 支持多种接入方式:支持同步 API 和流 API,开发者可以根据自己的需求选择适合的接入方式,以实现更高效的 AI 交互。

1.2.2 核心组件

  • Spring AI Core:核心模块,提供基本的抽象和工具,如模型加载、预测执行等功能,是与各种 AI 框架交互的基础。
  • Spring AI Integrations:集成模块,包含与具体 AI 框架的集成实现,使 Spring 应用能与不同框架的模型进行交互。
  • Spring AI CLI:命令行界面工具,方便开发者通过命令行快速进行模型管理、训练和推理等操作,提高开发效率。

1.2.3 应用场景

  • 企业级应用:在数字化和AI的发展进程中千行百业的应用需要与大模型进行集成。
  • 自然语言处理领域:可构建智能客服系统,集成自然语言处理模型,理解和处理用户输入的文本,实现自动回复。还能进行文本生成、情感分析等任务。
  • 图像识别领域:在图像管理系统中,使用 Spring AI 集成图像识别模型,对上传的图片进行自动分类和标注,也可用于目标检测、图像分割等。
  • 预测分析领域:在金融风险预测等应用里,借助 Spring AI 集成机器学习模型,对金融数据进行分析和预测,帮助企业做出决策。在电商领域,可根据用户行为数据进行购买预测,优化推荐系统。
  • 语音处理领域:支持语音识别和合成技术,使得智能音箱、语音助手等设备能够更好地理解和回应用户的指令。
  • 智能办公领域:可以实现文档内容的自动提取、分类和总结,提高办公效率。

2 LangChain4j和Spring AI

2.1 技术架构

  • LangChain4j:提供从底层的提示模板、聊天记忆管理、输出解析到高级模式(如 AI 服务和检索增强生成 RAG)的工具。有底层和高级两个抽象层次,底层可直接访问核心组件,高级提供更高层次 API 隐藏复杂性。
  • Spring AI:基于 Spring 框架的核心设计理念,提供强大且灵活平台。采用模块化架构,比如支持 RAG 通过提供模块库来构建 RAG 流。

2.2 集成能力

  • LangChain4j:可以与 Spring Boot 等主流 Java 框架无缝集成,还与 Quarkus 集成,支持 20 多个向量嵌入存储。
  • Spring AI:与 Spring Boot、Spring Data、Spring Security 等 Spring 项目无缝集成,利用 Spring 生态优势。

2.3 兼容性

  • LangChain4j:从 0.36 版本开始需要 Java 17 及以上版本,之前兼容 Java 8+。
  • Spring AI:要求 Java 17 + 和 Spring Boot 3。

2.4 社区支持

  • LangChain4j:社区活跃,反馈迅速,能快速整合最新 AI 技术。
  • Spring AI:项目处于成长期,API 变动相对较大

3 LangChain4j实战

3.1 LangChain4j支持的LLMs

供应商 流式调用 函数 JSON 多模态 观测
Amazon Bedrock text
Anthropic text, image
Azure OpenAI text, image
ChatGLM text
DashScope text, image, audio
GitHub Models text
Google AI Gemini text, image, audio, video, PDF
Google Vertex AI Gemini text, image, audio, video, PDF
Google Vertex AI PaLM 2 text
Hugging Face text
Jlama text
LocalAI text
Mistral AI text
Ollama text, image
OpenAI text, image
Qianfan text
Cloudflare Workers AI text
Zhipu AI text, image

3.2 模型(LLM)选择

模型供应商 主要特点 优势 备注
OpenAI GPT系列(如GPT-4),具备强大的文本生成与理解能力 灵活性高,适用于多种应用场景。大模型界的事实标准 暂停对国服的API服务,需要通过 Azure 接入
DeepSeek 开源大模型,支持多语言 推理与编码任务表现优异,社区活跃,支持多样化应用 性价比高,输入价格(缓存命中): 缓存未命中):1元/百万
阿里百炼 提供多种大模型服务(如通义千问和各种开源、商用模型) 性能接近GPT-4,API价格较低,支持企业迁移方案 主要面向企业用户 所有新用户可获得超过5000万Tokens的免费额度及4500张图片生成额度,以鼓励更多企业使用
智谱清言 基于GLM架构,支持多轮对话与复杂指令处理 指令理解能力强,支持多场景下的定制化解决方案 模型全面;不定期有大型优惠活动
讯飞星火 强大的生态支持,较全面的商业化场景 高效的推理速度和广泛的应用场景 讯飞星火大模型具有强大的自然语言处理能力、丰富的预训练数据、高效的推理速度
Ollama 支持本地部署,集成多种开源模型,隐私保护优先 强调用户隐私和自主性 需要较高的硬件配置以支持本地部署
硅基流动 专注于AI基础设施,提供SiliconCloud平台 高效推理,多模态支持,降低使用门槛,提升开发效率 主要面向技术开发者。提供了一系列开源大模型的API服务,其中多个开源大模型如Qwen2、GLM4和Yi1.5均为永久免费,这使得开发者可以自由使用这些模型进行应用开发,而无需承担费用
零一万物 开源模型 Yi Model 系列 API 具备较快的推理速度,这不仅缩短了回复延迟,同时也保持了出色的模型效果 零一万物 API 与 OpenAI API 完全兼容,你只需修改少量代码,即可平滑迁移

3.3 项目搭建

3.3.1 pom依赖

xml 复制代码
<?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>cn.itbeien.ai</groupId>
        <artifactId>langchain4j-labs</artifactId>
        <version>1.0-SNAPSHOT</version>
    </parent>
​
    <artifactId>lab01</artifactId>
​
    <dependencies>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
        </dependency>
        <dependency>
            <groupId>dev.langchain4j</groupId>
            <artifactId>langchain4j-spring-boot-starter</artifactId>
        </dependency>
​
        <dependency>
            <groupId>dev.langchain4j</groupId>
            <artifactId>langchain4j-open-ai-spring-boot-starter</artifactId>
        </dependency>
    </dependencies>
​
</project>

3.3.2 代码实现

3.3.2.1 实现简单对话
java 复制代码
 package cn.itbeien.langchain4j.ai.controller;
    ​
    import dev.langchain4j.model.chat.ChatLanguageModel;
    import jakarta.annotation.Resource;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    ​
    /**
     * @author itbeien
     * 项目网站:https://www.itbeien.cn
     * 公众号:贝恩聊架构
     * 全网同名,欢迎小伙伴们关注
     * Java/AI学习社群
     * Copyright© 2025 itbeien
     */
    @RestController
    @RequestMapping("/openai")
    public class OpenAIController {
        @Resource
        private ChatLanguageModel chatLanguageModel;
    ​
        /*@Value("${langchain4j.open-ai.chat-model.api-key}")
        private String apiKey;
    ​
        @Value("${langchain4j.open-ai.chat-model.model-name}")
        private String modelName;*/
    ​
       /* @Bean
        public ChatLanguageModel chatLanguageModel() {
            return OpenAiChatModel.builder()
                    .apiKey(this.apiKey)
                    .modelName(this.modelName)
                    .build();
        }*/
    ​
        @GetMapping("/hello")
        public String helloAI() {
            return chatLanguageModel.generate("你是哪家公司开发的");
        }
    }

3.3.3 代码测试

运行 cn.itbeien.langchain4j.ai.test.LangChain4jLab01Test进行单元测试

4 源码地址

贝恩聊架构-AI专栏,SpringBoot3专栏系列文章、资料和源代码会同步到以下地址,代码和资料每周都会同步更新

该仓库地址主要用于存放贝恩聊架构-贝恩聊架构-AI专栏、SpringBoot3专栏、基于企业级支付系统学习微服务整体技术栈所有资料和源码

Gitee gitee.com/itbeien/pro...

Github github.com/itbeien/pro...

相关推荐
Hanson Huang1 小时前
【数据结构】堆排序详细图解
java·数据结构·排序算法·堆排序
路在脚下@2 小时前
Redis实现分布式定时任务
java·redis
xrkhy2 小时前
idea的快捷键使用以及相关设置
java·ide·intellij-idea
巨龙之路2 小时前
Lua中的元表
java·开发语言·lua
花花鱼3 小时前
itext7 html2pdf 将html文本转为pdf
java·pdf
小丁爱养花3 小时前
驾驭 Linux 云: JavaWeb 项目安全部署
java·linux·运维·服务器·spring boot·后端·spring
我爱拉臭臭3 小时前
kotlin音乐app之自定义点击缩放组件Shrink Layout
android·java·kotlin
一个小白14 小时前
C++ 用红黑树封装map/set
java·数据库·c++
嘵奇4 小时前
Java单例模式:实现全局唯一对象的艺术
java·开发语言·单例模式
eternal__day4 小时前
第二期:[特殊字符] 深入理解MyBatis[特殊字符]MyBatis基础CRUD操作详解[特殊字符]
java·spring·java-ee·maven·mybatis