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

0 前言

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

  • 常用集成
  • 声明式 AI 服务

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

复制

<dependency><groupId>dev.langchain4j</groupId><artifactId>langchain4j-open-ai-spring-boot-starter</artifactId><version>0.34.0</version>
</dependency>

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

代码语言:java

复制

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

复制

@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

复制

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

复制

<dependency><groupId>dev.langchain4j</groupId><artifactId>langchain4j-spring-boot-starter</artifactId><version>0.34.0</version>
</dependency>

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

代码语言:java

复制

@AiService
interface Assistant {@SystemMessage("You are a polite assistant")String chat(String userMessage);
}

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

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

代码语言:java

复制

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

3 支持的版本

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

4 示例

  • 低级 Spring Boot 示例 使用 ChatLanguageModel API
  • 高级 Spring Boot 示例 使用 AI 服务
4.1 使用 Spring Boot 的客户支持代理示例

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

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

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

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

代码语言:java

复制

@Component
public class BookingTools {@Autowiredprivate BookingService bookingService;@Toolpublic 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

复制

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

复制

Hello, World!

如何学习AI大模型?

作为一名热心肠的互联网老兵,我决定把宝贵的AI知识分享给大家。 至于能学习到多少就看你的学习毅力和能力了 。我已将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

一、全套AGI大模型学习路线

AI大模型时代的学习之旅:从基础到前沿,掌握人工智能的核心技能!

img

二、640套AI大模型报告合集

这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。

img

三、AI大模型经典PDF籍

随着人工智能技术的飞速发展,AI大模型已经成为了当今科技领域的一大热点。这些大型预训练模型,如GPT-3、BERT、XLNet等,以其强大的语言理解和生成能力,正在改变我们对人工智能的认识。 那以下这些PDF籍就是非常不错的学习资源。

img

四、AI大模型商业化落地方案

img

作为普通人,入局大模型时代需要持续学习和实践,不断提高自己的技能和认知水平,同时也需要有责任感和伦理意识,为人工智能的健康发展贡献力量。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/145766.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

基于MATLAB的虫害检测系统

课题背景介绍 中国为农业大国&#xff0c;因此在农业病虫害防治等方面积累了丰富的经验&#xff0c;但在实际工作过程中也存在许多问题。如过于依赖传统经验&#xff0c;对突如而来的新型病虫害问题研究不够到位&#xff0c;如由于判断者主观上面的一些模糊&#xff0c;而带来…

从零实现循环神经网络(二)

#本篇博客代码是基于上一篇《从零实现循环神经网络&#xff08;一&#xff09;》 上一篇网址&#xff1a;从零实现循环神经网络&#xff08;一&#xff09;-CSDN博客 1.初始化时返回隐藏层状态 def init_rnn_state(batch_size, num_hiddens, device):"""bat…

大神用一幅动态的风景画:让天气预报变得更生动

你有没有想过,有一天你可以不看那些冰冷的天气图表,而是通过一幅美丽的风景画就能知道明天的天气?想象一下,清晨醒来,打开手机,看到的不是一堆晦涩的数字,而是一幅阳光洒满草原的画,告诉你今天是个好天气。这就是现在逐渐兴起的一种新方式——通过风景图像来可视化天气…

【网络】高级IO——LT和ET

在上一篇的学习中&#xff0c;我们已经简单的使用了epoll的三个接口&#xff0c;但是仅仅了解那些东西是完全不够的&#xff01;&#xff01;接下来我们将更深入的学习epoll 1.epoll的两种工作模式——LT和ET 下面来举一个例子帮助大家理解ET和LT模式的区别&#xff08;送快递…

内存:生成式AI带来全新挑战与机遇

之前小编也写过多篇AI存储相关的文章&#xff0c;包括AI背景与分层存储的分析&#xff0c;以及AI存储重点从训练转向推理等内容。具体参考&#xff1a; 深度剖析&#xff1a;AI存储架构的挑战与解决方案 存储正式迈入超大容量SSD时代&#xff01; 这可能是最清晰的AI存储数据…

stack和queue(一)

接下来讲解一些stack栈和queue的简单使用 stack的概念 stack是一种容器适配器&#xff0c;专门用在具有后进先出操作的上下文环境中&#xff0c;其删除只能从容器的一端进行 元素的插入与提取操作。 特性是先进先出 后进后出 构造一个栈堆 int main() {deque<int>…

vue项目加载cdn失败解决方法

注释index.html文件中 找到vue.config.js文件注释、

Spring IDEA 2024 自动生成get和set以及toString方法

1.简介 在IDEA中使用自带功能可以自动生成get和set以及toString方法 2.步骤 在目标类中右键&#xff0c;选择生成 选择Getter和Setter就可以生成每个属性对应的set和get方法&#xff0c; 选择toString就可以生成类的toString方法&#xff0c;

快速响应:提升前端页面加载速度技巧的必知策略方案

在本文中&#xff0c;我们将深入探讨导致页面加载缓慢的常见原因&#xff0c;并分享一系列切实可行的优化策略&#xff0c;无论你是刚入门的新手&#xff0c;还是经验丰富的开发者&#xff0c;这些技巧都将帮助你提升网页性能&#xff0c;让你的用户体验畅快无阻。 相信作为前端…

网页与微信小程序:一场轻量化应用的博弈

网页与微信小程序&#xff1a;一场轻量化应用的博弈 在如今的信息时代&#xff0c;移动互联网已然成为主流&#xff0c;而在这一趋势的驱动下&#xff0c;应用形态也在不断演变。微信小程序与传统网页&#xff0c;作为两种不同的应用形态&#xff0c;正如两条并行却又交织的道…

PY+MySQL(等先完成mysql的学习)

第一章&#xff1a;准备工作&#xff08;重点关于mysql&#xff09; win安装 下载&#xff1a; 网址&#xff1a;MySQL :: Download MySQL Community Server版本&#xff1a;我的是8.0&#xff0c;但是建议5.7 下载&#xff1a;安装&#xff0c;因为是zip文件所以直接解压就好了…

2024/9/21 leetcode 21.合并两个有序链表 2.两数相加

目录 21.合并两个有序链表 题目描述 题目链接 解题思路与代码 2.两数相加 题目描述 题目链接 解题思路与代码 --------------------------------------------------------------------------- 21.合并两个有序链表 题目描述 将两个升序链表合并为一个新的 升序 链表并返…

模版结构体没有可用成员(C3203)

没有typedef模版结构体而导致。 并且_tables[index]无法访问HashData内部的成员。

任务管理与守护进程【Linux】

文章目录 进程组前台进程&后台进程守护进程daemon 进程组 组长是多个进程的第一个&#xff0c;组长进程的标识是&#xff0c;其进程组ID等于其进程ID 前台进程&后台进程 前台进程&#xff1a;能获取键盘输入&#xff0c;即拥有键盘文件 后台进程&#xff1a;不能获取…

无人机之激光避障篇

无人机的激光避障技术是通过激光传感器来感知和避开周围障碍物的一种高级技术。以下是关于无人机激光避障技术的详细解析&#xff1a; 一、技术原理 激光避障技术利用激光束的直线传播和反射特性&#xff0c;通过发送激光束并接收反射回来的信号&#xff0c;来检测和计算周围障…

Unity数据持久化4——2进制

概述 基础知识 各类型数据转字节数据 文件操作相关 文件相关 文件流相关 文件夹相关 练习题 using System; using System.Collections; using System.Collections.Generic; using System.IO; using System.Text; using UnityEngine;public class Exercises1 : MonoBehaviour {/…

Java项目实战II基于Java+Spring Boot+MySQL的车辆管理系统(开发文档+源码+数据库)

目录 一、前言 二、技术介绍 三、系统实现 四、论文参考 五、核心代码 六、源码获取 全栈码农以及毕业设计实战开发&#xff0c;CSDN平台Java领域新星创作者&#xff0c;专注于大学生项目实战开发、讲解和毕业答疑辅导。获取源码联系方式请查看文末 一、前言 "随着…

【d45】【Java】【力扣】203.移除链表元素

思路 由于删除操作&#xff0c;需要&#xff1a;pre.nextcur.next 但是单链表无法获得 前面节点&#xff0c; 所以&#xff1a;定义指针 cur 指向当前节点&#xff0c;判断cur.next 的val值&#xff0c;是否等于传入的val值 cur &#xff1a;从head 到倒数第二个 最后单独…

【大屏方案】可视化综合展示系统解决方案(Word原件2024)

2.系统架构设计 2.1.系统架构图 2.2.关键技术 2.3.接口及要求 3.系统功能设计 3.1.功能清单列表 3.2.数据源管理 3.3.数据集管理 3.4.视图管理 3.5.仪表盘管理 3.6.移动端设计 3.1.系统权限设计 3.2.数据查询过程设计 软件资料清单列表部分文档清单&#xff1a;工作安排任务书&…

理解JAVA中的Native内存追踪(NMT)机制

JVM 具有多个内部内存区域。本机内存(native)跟踪 (NMT) 通过提供每个内存区域的详细信息&#xff0c;帮助 Java 开发人员识别这些内部内存区域上的内存泄漏、内存过度使用和其他相关问题。在本文中&#xff0c;让我们学习如何使用 NMT 来解决与 JVM 内存相关的问题。 什么是本…