首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >如何在Spring Boot中无缝集成LangChain4j,玩转AI大模型!

如何在Spring Boot中无缝集成LangChain4j,玩转AI大模型!

原创
作者头像
JavaEdge
修改于 2025-06-26 06:14:17
修改于 2025-06-26 06:14:17
10.2K0
举报
文章被收录于专栏:AIGC大模型应用AIGC大模型应用

本文已收录在Github关注我,紧跟本系列专栏文章,咱们下篇再续!

  • 🚀 魔都架构师 | 全网30W技术追随者
  • 🔧 大厂分布式系统/数据中台实战专家
  • 🏆 主导交易系统百万级流量调优 & 车联网平台架构
  • 🧠 AIGC应用开发先行者 | 区块链落地实践者
  • 🌍 以技术驱动创新,我们的征途是改变世界!
  • 👉 实战干货:编程严选网

0 前言

LangChain4j 提供了用于以下功能的 Spring Boot 启动器

1 常用集成的 Spring Boot starters

Spring Boot 启动器帮助通过属性创建和配置 语言模型嵌入模型嵌入存储 和其他核心 LangChain4j 组件。

要使用 Spring Boot 启动器,请导入相应依赖包。

Spring Boot 启动器依赖包的命名规范:langchain4j-{integration-name}-spring-boot-starter

如对于 OpenAI(langchain4j-open-ai),依赖包名称为 langchain4j-open-ai-spring-boot-starter

代码语言:xml
AI代码解释
复制
<dependency>
    <groupId>dev.langchain4j</groupId>
    <artifactId>langchain4j-open-ai-spring-boot-starter</artifactId>
    <version>0.34.0</version>
</dependency>

然后,可在 application.properties 文件中配置模型参数:

代码语言:java
AI代码解释
复制
langchain4j.open-ai.chat-model.api-key=${OPENAI_API_KEY}
langchain4j.open-ai.chat-model.model-name=gpt-4o
langchain4j.open-ai.chat-model.log-requests=true
langchain4j.open-ai.chat-model.log-responses=true
...

此时,将自动创建一个 OpenAiChatModel 实例(ChatLanguageModel 的实现)

并且可通过自动注入在需要的地方使用它:

代码语言:java
AI代码解释
复制
@RestController
public class ChatController {

    ChatLanguageModel chatLanguageModel;

    public ChatController(ChatLanguageModel chatLanguageModel) {
        this.chatLanguageModel = chatLanguageModel;
    }

    @GetMapping("/chat")
    public String model(@RequestParam(value = "message", defaultValue = "Hello") String message) {
        return chatLanguageModel.generate(message);
    }
}

如需一个 StreamingChatLanguageModel 实例,使用 streaming-chat-model 代替 chat-model 属性:

代码语言:java
AI代码解释
复制
langchain4j.open-ai.streaming-chat-model.api-key=${OPENAI_API_KEY}
...

2 声明式 AI 服务的 Spring Boot starter

LangChain4j 提供一个 Spring Boot starter,用于自动配置 AI 服务RAG工具 等功能。

假设已导入某已集成的starters(见上文),然后导入 langchain4j-spring-boot-starter

代码语言:xml
AI代码解释
复制
<dependency>
    <groupId>dev.langchain4j</groupId>
    <artifactId>langchain4j-spring-boot-starter</artifactId>
    <version>0.34.0</version>
</dependency>

定义 AI 服务接口,并用 @AiService

代码语言:java
AI代码解释
复制
@AiService
interface Assistant {

    @SystemMessage("You are a polite assistant")
    String chat(String userMessage);
}

可把它看作标准 Spring Boot的 @Service,但带有 AI 功能。

当应用程序启动时,LangChain4j 启动器将扫描类路径并找到所有带有 @AiService 注解的接口。对于每个找到的 AI 服务,它将使用应用程序上下文中的所有 LangChain4j 组件创建此接口的实现,并将其注册为一个 bean,因此您可以在需要的地方进行自动注入:

代码语言:java
AI代码解释
复制
@RestController
class AssistantController {

    @Autowired
    Assistant assistant;

    @GetMapping("/chat")
    public String chat(String message) {
        return assistant.chat(message);
    }
}

更多细节请见 这里

3 支持的版本

LangChain4j 的 Spring Boot 集成需要 Java 17 和 Spring Boot 3.2。

4 示例

4.1 使用 Spring Boot 的客户支持代理示例

从官网拉下代码后,直接修改配置文件中的 api-key 如下(仅做本地演示用):

启动CustomerSupportAgentApplication应用后,直接在控制台交互:

我开始提问:How can I cancel my booking?

为啥 AI 会要求提供信息呢?因为注册了一个工具:

代码语言:java
AI代码解释
复制
@Component
public class BookingTools {

    @Autowired
    private BookingService bookingService;

    @Tool
    public void cancelBooking(String bookingNumber, String customerName, String customerSurname) {
        System.out.printf("[Tool]: Cancelling booking %s for %s %s...%n", bookingNumber, customerName, customerSurname);
        bookingService.cancelBooking(bookingNumber, customerName, customerSurname);
    }
}

那我就按他的要求提供信息:

AI 还是会问我要名字。那我就随便回答,然后就报错了:

注意这是个后端自定义的业务异常,即没有找到对应名字的预订。但请注意最后 AI 还是会提醒你输入正确信息:

那就放过他吧,我输入后端存储的真实信息:

4.2 HelloWorld

代码语言:java
AI代码解释
复制
import dev.langchain4j.model.chat.ChatLanguageModel;
import dev.langchain4j.model.openai.OpenAiChatModel;

import static dev.langchain4j.model.openai.OpenAiChatModelName.GPT_4_O_MINI;

public class _00_HelloWorld {

    public static void main(String[] args) {

        ChatLanguageModel model = OpenAiChatModel.builder()
                .apiKey(ApiKeys.OPENAI_API_KEY)
                .modelName(GPT_4_O_MINI)
                .build();

        String answer = model.generate("Say Hello World");

        System.out.println(answer);
    }
}

响应:

代码语言:bash
AI代码解释
复制
Hello, World!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【HarmonyOS Next】鸿蒙监听手机按键
应用开发中我们会遇到监听用户实体按键,或者扩展按键的需求。亦或者是在某些场景下,禁止用户按下某些按键的业务需求。
GeorgeGcs
2025/03/24
3161
笔记60 | Android控制音量与音频播放的学习
控制音量与音频播放 编写:kesenhoo 良好的用户体验应该是可预期且可控的。如果我们的应用可以播放音频,那么显然我们需要做到能够通过硬件按钮,软件按钮,蓝牙耳麦等来控制音量。 同样地,我们需要能够对应用的音频流进行播放(Play),停止(Stop),暂停(Pause),跳过(Skip),以及回放(Previous)等动作,并且并确保其正确性。 鉴别使用的是哪个音频流(Identify Which Audio Stream to Use) 为了创建一个良好的音频体验,我们首先需要知道应用会使用到哪些音频流
项勇
2018/06/19
2.2K0
Android 修改系统音量及监听
还调用了setStreamVolume方法,这里就涉及到setStreamVolume和adjustStreamVolume的区别:
yechaoa
2022/06/10
2.5K0
Android 修改系统音量及监听
HarmonyOS 5.1.1 Release 正式发布:多维度能力升级助力开发者高效创新
HarmonyOS 5.1.1 Release 在 ArkUI 组件能力、地图服务、性能分析工具等维度实现关键突破,同步更新开发者套件配套工具,为应用开发与优化提供更强支撑。
徐建国
2025/07/03
2630
HarmonyOS 5.1.1 Release 正式发布:多维度能力升级助力开发者高效创新
使用JS监听键盘按下事件
altKey、ctrlKey、shiftKey:当组合按下(如ctrl+c)时,ctrlKey会变为true
超级小的大杯柠檬水
2023/05/06
12.5K0
使用JS监听键盘按下事件
Android 听筒扬声器切换 并且监听音量变化
audioManager.setMode(int mode) mode 类型参照表:
103style
2022/12/19
1.8K0
【SWT】常用代码(二)
很多桌面应用程序与用户的交互都是通过事件机制来实现的,如鼠标键或键盘被按下或 者释放。事件通过监听器通知应用程序哪个部件发生了什么动作,然后作出相应的反应。 org.eclipse.swt.events 包中包含了所有的 SWT 专用的事件类和监听器的接口。本章主要介绍 了如何使用基本类型和无类型的事件,并通过两个典型的事件键盘事件、鼠标按键事件作进 一步说明。
为了伟大的房产事业
2024/03/15
2720
【SWT】常用代码(二)
Appium自动化(13) - 详解 Keyboard 类里的方法和源码分析
https://www.cnblogs.com/poloyy/category/1693896.html
小菠萝测试笔记
2020/06/09
1.2K0
Appium自动化(13) - 详解 Keyboard 类里的方法和源码分析
【Android】自制静音App,解决他人手机外放问题
看到一个粉丝留言,吐槽舍友深夜手机外放,打扰别人休息,想设计一款软件阻止舍友行径。于是我就来简单设计一下。
zstar
2022/11/02
1.6K0
【Android】自制静音App,解决他人手机外放问题
『App自动化测试之Appium应用篇』| Appium常用API及操作
虫无涯
2024/01/02
1.3K0
【愚公系列】2023年12月 HarmonyOS教学课程 036-ArkUI事件(键鼠事件)
键鼠事件是指在计算机操作中,用户通过键盘和鼠标来与计算机进行交互的行为。常见的键鼠事件包括按下键盘上的键、移动鼠标、点击鼠标左键或右键等等。键鼠事件可以触发许多不同的操作,比如在文本编辑器中输入文字、在游戏中移动角色、在网页上点击链接等等。计算机操作系统和应用程序可以通过监听键鼠事件来响应用户的操作,并进行相应的处理。
愚公搬代码
2025/06/02
1290
【愚公系列】2023年12月 HarmonyOS教学课程 036-ArkUI事件(键鼠事件)
JS实现键盘监听
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
奋飛
2019/08/15
8.1K0
react 监听键盘事件 hook
import { useCallback, useEffect, MutableRefObject } from "react"; type keyType = KeyboardEvent["keyCode"] | KeyboardEvent["key"]; type keyFilter = keyType | Array<keyType>; type EventHandler = (event: KeyboardEvent) => void; type keyEvent = "keydown" | "k
小鑫
2022/04/25
2.3K0
自动化-Appium-常用API(Python版)
driver.remove_app('com.example.android.apis')
wangmcn
2022/07/25
1.7K0
自动化-Appium-常用API(Java版)
本章节讲解默认使用Appium Clients为java-client-6.1.0.jar包,对应的Selenium使用selenium-server-standalone-3.12.0.jar包。
wangmcn
2022/07/25
2.1K0
自动化-Appium-常用API(Java版)
从门外汉到开发出TV应用,我只用了三天
在这之前,本人一直从事Android手机应用层的开发。从没有接触过Android TV端的开发工作。当领导问能否在一周内做出一个TV端Demo时,自己心里还很是比较虚的。但是实际上,从开始调研到动手做到最后将Demo给领导演示出来,花了不超过3天的时间。当然这三天,每天都是做到晚上11点以后的(大部分时间是解决一些细节问题)。功能相当于是KEEP训练跟练的TV版,业务交互还是有一些难点的。当领导对你的Demo表示认可后,接下来等产品和设计师完整的出了TV端产品的整个UI和设计,我们就开始正式的进入TV端产品的搭建过程。
吴延宝
2019/07/24
3.8K0
速读原著-Android应用开发入门教程(键盘事件的响应)
在应用的程序的控制方面,更多的使用的是屏幕上的控件,但是有的时候也需要直接对键盘事件来进行响应。键盘是 Android 中主要的输入设备,对按键的响应的处理是响应之间在程序中使用键盘的核心内容。
cwl_java
2020/01/15
5970
Android getevent,sendevent,input keyevent
getevent和sendevent是Android系统自带的获取设备的收发事件和模拟设备事件进行自动话测试。而input keyevent也在自动话测试中有很大的作用,用于模拟常用按键等。接下来就一一是实践角度分析此三个工具的使用方法。
DragonKingZhu
2020/03/24
2.2K0
Android  getevent,sendevent,input keyevent
android 回车键事件编程
在 Android 中处理回车键(Enter键)的事件,可以通过监听 EditText 的键盘输入事件来实现。回车键的行为通常会触发一个 OnKeyListener 或 EditorActionListener,并且可以自定义行为,如提交表单、清除输入框等。
用户3672714
2025/07/28
1300
是时候为各式设备适配完善的输入支持了
随着技术进步以及跨平台应用的普及,您的 Android 应用已经不再局限于在直板触屏设备运行了。更丰富的交互方式使得用户能够以更复杂的输入方式使用您的应用。所以作为开发者,是时候考虑为各种各样的设备提供强大的输入支持了。本文为您准备了关于更广泛、强大的输入支持的分享,欢迎您阅读。
Android 开发者
2022/03/28
1.4K0
是时候为各式设备适配完善的输入支持了
推荐阅读
相关推荐
【HarmonyOS Next】鸿蒙监听手机按键
更多 >
LV.4
GitCode深圳公司总经理
作者相关精选
交个朋友
加入腾讯云官网粉丝站
蹲全网底价单品 享第一手活动信息
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档