LangChain系列之LangChain4j集成Spring Bot
<<< 书接上文
2. 代码示例
以下是一个集成 LangChain4j API 的 Spring Boot 应用示例。
2.1 创建 Spring Boot 项目
你可以使用SpringInitializr
(https://start.spring.io/)来创建一个 Spring Boot 项目。选择 Maven 项目、Java 语言以及合适的 Spring Boot 版本。为了将 LangChain4j 集成到 Spring Boot 中,我们需要先在项目的 pom.xml
文件中添加相应的依赖:
<dependency><groupId>com.example</groupId><artifactId>langchain4j-open-ai</artifactId><version>your_jar_version</version>
</dependency>
2.2 创建配置类
在你的Spring Boot应用中创建一个配置类,用于配置 LangChain4j API。
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import com.example.langchain4j.openai.OpenAiClient;@Configuration
public class LangChainConfig {@Beanpublic OpenAiClient openAiClient() {return new OpenAiClient("YOUR_API_KEY");}
}
这个配置类定义了一个使用@Configuration
注解的
LangChainConfig
类,标识它为Spring
容器中的配置类。openAiClient()方法使用
@Bean
注解,创建并返回一个带有你的 API 密钥的 OpenAiClient
实例。这个 Bean 随后可以注入到 Spring Boot 应用的其他组件中使用。
2.3 初始化 ChatModel
在配置好 Spring Boot 应用后,我们可以初始化一个 ChatModel,用于与语言模型进行交互。
import com.example.langchain4j.openai.ChatModel;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;@Service
public class ChatService {private final ChatModel chatModel;@Autowiredpublic ChatService(OpenAiClient openAiClient) {this.chatModel = openAiClient.createChatModel();}public String chat(String userPrompt) {return chatModel.sendUserPrompt(userPrompt).getResponse();}
}
在这个服务类中,我们定义了一个使用 @Service
注解的 ChatService
,将其标识为Spring的服务组件。构造函数使用@Autowired
注解注入 OpenAiClient
实例。然后通过 OpenAiClient
的
createChatModel()
方法初始化chatModel
。chat()
方法用于向聊天模型发送用户输入的提示,并返回模型的响应。
2.4 第一次调用 LLM
服务准备好后,我们可以对语言模型的调用。下面创建一个简单的控制器来测试这个功能:
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;@RestController
public class ChatController {private final ChatService chatService;@Autowiredpublic ChatController(ChatService chatService) {this.chatService = chatService;}@GetMapping("/chat")public String chat(@RequestParam String prompt) {return chatService.chat(prompt);}
}
这个ChatController
类使用
@RestController注解,标识为一个RESTful Web服务控制器。它定义了一个/chat
的GET接口,接受一个名为 prompt
的参数。chat()
方法调用了 ChatService
中的 chat()
方法,并将响应结果返回给客户端。
2.5 运行你的应用
现在,你可以启动 Spring Boot 应用,并通过带有提示语(prompt)的请求访问 /chat
接口:
http://localhost:8080/chat?prompt=Hello
响应信息如下:
Hello! How can I assist you today?
3. 发送系统和用户提示
LangChain4j 支持向语言模型发送系统提示和用户提示。系统提示是由系统提供的指令或上下文,用于引导模型的行为和回答方向;用户提示则是用户输入的内容或问题,用来请求信息或执行任务。
下面是如何发送这两种提示的示例:
import com.example.langchain4j.openai.ChatModel;
import com.example.langchain4j.openai.ChatPrompt;public class ChatService {private final ChatModel chatModel;@Autowiredpublic ChatService(OpenAiClient openAiClient) {this.chatModel = openAiClient.createChatModel();}public String chatWithSystemPrompt(String systemPrompt, String userPrompt) {ChatPrompt prompt = new ChatPrompt();prompt.addSystemPrompt(systemPrompt);prompt.addUserPrompt(userPrompt);return chatModel.sendPrompt(prompt).getResponse();}
}
在这个更新后的ChatService
类中,我们定义了一个新方法chatWithSystemPrompt()
,用于创建一个ChatPrompt
对象。通过 addSystemPrompt()
方法添加系统提示,再通过addUserPrompt() 方法添加用户提示。最后,将组合后的提示发送给聊天模型,并返回模型的响应结果。
System prompt: "You are a helpful assistant."
User prompt: "What is the capital of France?"
Response: "The capital of France is Paris."
4. 结论
将 LangChain4j 集成到 Spring Boot 中,为与语言模型的交互提供了强大且稳定的框架。通过本文介绍的步骤,你可以搭建起使用 LangChain4j 的 Spring Boot应用,初始化ChatModel,并向语言模型发送提示以获取响应。此集成使你能够高效地在 Java 应用中利用语言模型的强大能力。
相关文章:
LangChain系列之LangChain4j集成Spring Bot
<<< 书接上文 2. 代码示例 以下是一个集成 LangChain4j API 的 Spring Boot 应用示例。 2.1 创建 Spring Boot 项目 你可以使用SpringInitializr (https://start.spring.io/)来创建一个 Spring Boot 项目。选择 Maven 项目、Java 语言以及合适的 Spring Boot 版本…...

Python爬虫解析动态网页:从渲染到数据提取
一、动态网页与静态网页的区别 在开始之前,我们需要理解动态网页与静态网页的区别。静态网页的内容在服务器端是固定的,每次请求都会返回相同的结果,通常以HTML文件的形式存储。而动态网页则不同,其内容是通过JavaScript在客户端…...

LLMs之MCP:如何使用 Gradio 构建 MCP 服务器
LLMs之MCP:如何使用 Gradio 构建 MCP 服务器 导读:本文详细介绍了如何使用Gradio构建MCP服务器,包括前提条件、构建方法、关键特性和相关资源。通过一个简单的字母计数示例,演示了如何将Gradio应用转换为LLM可以使用的工具。Gradi…...

VBA模拟进度条
在上一章中我跟大家介绍了ProgressBar控件的使用方法,但由于该控件无法在64位版本的Office中运行,为此我们可以采用Lable控件来模拟进度条的变化,以解决在64位版本的Office中无进度条控件的问题。 一、设计思路 添加两个重叠的Lable标签控件…...

MySQL强化关键_019_索引优化
目 录 一、最左前缀原则 1.完全使用索引 2.部分使用索引 3.不使用索引 4.效率折损 (1)使用范围查找 (2)索引断开 二、索引失效场景 1. 索引列参与运算 2.索引列模糊查询以“%”开始 3.索引列是字符串类型,查…...
高性能MCU的MPU与Cache优化详解
概述 在现代高性能单片机(如ARM Cortex-M7、Cortex-A系列在MCU中的应用)中,Memory Protection Unit (MPU) 和Cache系统的协同工作对系统性能有着决定性影响。本文将深入分析MPU配置如何影响Cache命中率,多主设备对RAM访问的竞争问…...

关于list集合排序的常见方法
目录 1、list.sort() 2、Collections.sort() 3、Stream.sorted() 4、进阶排序技巧 4.1 空值安全处理 4.2 多字段组合排序 4.3. 逆序 5、性能优化建议 5.1 并行流加速 5.2 原地排序 6、最佳实践 7、注意事项 前言 Java中对于集合的排序操作,分别为list.s…...

不动产登记区块链系统(Vue3 + Go + Gin + Hyperledger Fabric)
好久没有介绍过新项目的制作了,之前做的一直都是Fisco Bcos的项目,没有介绍过Hyperledger Fabric的项目,这次来给大家分享下。 系统概述 不动产登记与交易平台是一个基于Hyperledger Fabric的综合性管理系统,旨在实现不动产登记…...

从 GPT 的发展看大模型的演进
这是一个技术爆炸的时代。一起来看看 GPT 诞生后,与BERT 的角逐。 BERT 和 GPT 是基于 Transformer 模型架构的两种不同类型的预训练语言模型。它们之间的角逐可以从 Transformer 的编码解码结构角度来分析。 BERT(Bidirectional Encoder Representatio…...
基于大模型的短暂性脑缺血发作(TIA)全流程预测与诊疗辅助系统详细技术方案
目录 系统整体架构系统部署拓扑图核心模块详细技术方案1. 术前风险预测模块算法实现伪代码:数据处理流程:2. 手术方案智能生成系统手术方案决策伪代码:手术方案生成流程:3. 麻醉智能决策系统麻醉方案伪代码:4. 术后监护与复发预测实时监测流程:5. 并发症预测系统双通道风…...
JSCH使用SFTP详细教程
文章目录 1. JSCH和SFTP基础概念1.1 什么是JSCH?1.2 SFTP协议特点1.3 JSCH的优势1.4 常用场景 2. 环境配置和依赖管理2.1 Maven依赖配置2.2 Gradle依赖配置2.3 基础配置类2.4 配置文件示例 3. SFTP连接管理3.1 基础连接类3.2 连接池管理3.3 连接测试工具 4. 文件上传…...
Trae CN IDE 中 PHP 开发的具体流程和配置指南
以下是 Trae CN IDE 中 PHP 开发的具体流程和配置指南,结合知识库内容和实际开发需求整理,并附实例说明: 一、安装与初始配置 下载与安装 Trae IDE 访问 Trae 官网 下载 macOS 或 Windows 版本。安装完成后,启动 Trae,首次运行会进入初始化向导。初始设置 主题与语言:选择…...

【Qt】构建目录设置
问题 ProjectRoot/├── src/ # 源代码│ ├── project1│ └── project2├── build/ # 构建目录│ ├── build-PCIeDemoApp-Desktop_Qt_5_9_7_MSVC2015_64bit-Debug/│ └── build-PCIeDemoApp-Desktop_Qt_5_9_7_MSVC2015_64bit-Rele…...
【仿生机器人】极具前瞻性的架构——认知-情感-记忆“三位一体的仿生机器人系统架构
基于您的深度需求分析,我将为您设计一个全新的"认知-情感-记忆"三位一体的仿生机器人系统架构。以下是经过深度优化的解决方案: 一、核心架构升级(三体认知架构) 采用量子纠缠式架构设计: 认知三角…...

Web后端快速入门(Maven)
Maven是apche旗下的一个开源项目,是一款用于管理和构建java项目的工具。 开源项目:Welcome to The Apache Software Foundation. Maven的作用: 依赖管理(方便快捷的管理项目依赖的资源,避免版本冲突问题)…...

机器学习算法:逻辑回归
1. 基础概念 定义: 逻辑回归(Logistic Regression)是一种用于解决二分类问题的监督学习算法,通过概率预测样本属于某一类别的可能性。 核心特点:输出是概率值(0~1),通过阈值&#…...
企业展示型网站模板HTML5网站模板下载指南
在当今数字化浪潮中,企业网站已成为企业展示形象、推广产品和服务的重要窗口。一个设计精美、功能完善的企业展示型网站,不仅能提升企业的品牌形象,还能吸引潜在客户,促进业务增长。而HTML5网站模板,凭借其跨平台兼容性…...
ArrayList和LinkedList(深入源码加扩展)
ArrayList 和 LinkedList 是 Java 集合框架中两种常用的列表实现,它们在底层数据结构、性能特点和适用场景上有显著的区别。以下是它们的详细对比以及 ArrayList 的扩容机制。 1. ArrayList 和 LinkedList 的底层区别 (1) 底层数据结构 ArrayList: 基于动态数组(Dynamic Ar…...
Unity UI 性能优化--Sprite 篇
🎯 Unity UI 性能优化终极指南 — Sprite篇 🧩 Sprite 是什么?—— 渲染的基石与性能的源头 在Unity的2D渲染管线中,Sprite 扮演着至关重要的角色。它不仅仅是2D图像资源本身,更是GPU进行渲染批处理(Batch…...

AI健康小屋+微高压氧舱:科技如何重构我们的健康防线?
目前,随着科技和社会的不断发展,人们的生活水平和方式有了翻天覆地的变化。 从吃饱穿暖到吃好喝好再到健康生活,观念也在逐渐发生改变。 尤其是在21世纪,大家对健康越来越重视,这就不得不提AI健康小屋和氧舱。 一、A…...
OpenCV C++ 学习笔记(五):颜色空间转换、数值类型转换、图像混合、图像缩放
文章目录 颜色空间转换cvtColor通道分离split通道合并merge数值类型转换convertTo图片混合addWeighted图片缩放resize 颜色空间转换cvtColor cvtColor 是 OpenCV 中用于将图像从一种色彩空间转换为另一种色彩空间的函数。它非常适用于各种图像处理任务,如灰度化、颜…...

如何做接口测试?
🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快 01、通用的项目架构 02、什么是接口 接口:服务端程序对外提供的一种统一的访问方式,通常采用HTTP协议,通过不同的urlÿ…...

【JMeter】性能测试知识和工具
目录 何为系统性能 何为性能测试 性能测试分类 性能测试指标 性能测试流程 性能测试工具:JMeter(主测web应用) jmeter文件目录 启动方式 基本元件:元件内有很多组件 jmeter参数化 jmeter关联 自动录制脚本 直连数据库…...

SOC-ESP32S3部分:25-HTTP请求
飞书文档https://x509p6c8to.feishu.cn/wiki/KL4RwxUQdipzCSkpB2lcBd03nvK HTTP(Hyper Text Transfer Protocol) 超文本传输协议,是一种建立在 TCP 上的无状态连接,整个基本的工作流程是客户端发送一个 HTTP 请求,说明…...

字符编码全解析:ASCII、GBK、Unicode、UTF-8与ANSI
UTF - 8(全球字符能被唯一标识)、GBK、Unicode、ANSI 区别与关联 qwen模型分词器文件 1. ASCII(基础铺垫,理解编码起源) 作用:最早期为处理英文文本设计,是字符编码的基础,后演变成其他编码兼容的一部分 。范围:共 128 个字符(0 - 127),包含英文大小写字母、数字…...
《前端面试题:HTML5、CSS3、ES6新特性》
现代前端开发中,HTML5、CSS3和JavaScript ES6共同构成了三大核心技术支柱。这些技术不仅显著提升了用户体验和性能表现,更大幅提高了开发效率。本文将从技术演进、核心特性到最佳实践,系统性地介绍这三大技术的应用之道。 我们将首先探讨HTM…...

MaxCompute开发UDF和UDTF案例
文章目录 一、Java开发UDF1、创建Maven项目2、创建UDF类3、打包上传资源4、创建函数MyUDF5、SQL验证 二、Java开发UDTF1、创建Maven项目2、创建UDTF类3、打包上传更新资源4、创建函数MyUDTF5、SQL验证 三、常见问题1、发布函数报错 一、Java开发UDF 1、创建Maven项目 创建Mav…...

49套夏日小清新计划总结日系卡通ppt模板
绿色小清新PPT模版,日系小清新PPT模版,粉红色PPT模版,蓝色PPT模版,草青色PPT模版,日系卡通PPT模版 49套夏日小清新计划总结日系卡通ppt模板:夏日小清新日系卡通PPT模版https://pan.quark.cn/s/9e4270d390fa…...

告别硬编码!用工厂模式优雅构建可扩展的 Spring Boot 应用 [特殊字符]
嗨,各位技术伙伴们!👋 在日常的软件开发中,我们经常面临需求变更的挑战。如何构建一个既能满足当前需求,又能轻松应对未来变化的系统呢?答案往往藏在那些经典的设计模式中。 今天,我们就来聊聊…...

Express教程【006】:使用Express写接口
文章目录 8、使用Express写接口8.1 创建API路由模块8.2 编写GET接口8.3 编写POST接口 8、使用Express写接口 8.1 创建API路由模块 1️⃣新建routes/apiRouter.js路由模块: /*** 路由模块*/ // 1-导入express const express require(express); // 2-创建路由对象…...