当前位置: 首页 > news >正文

【LangChain4j】大模型实战-SpringBoot(阿里云百炼控制台)

一、介绍

LangChain4j 是一个专为 Java 和 Kotlin 开发者设计的开源 AI 框架,旨在简化和加速基于大语言模型(LLM)的应用程序开发。它是广受欢迎的 Python 库 LangChain 的官方 Java 实现,致力于将 LangChain 的强大功能与设计理念完整地带入 JVM 生态系统。它是一个模块化的 AI 开发工具包,提供了一套完整的组件和 API,帮助开发者快速构建智能应用。

通过 LangChain4j,Java 开发者可以轻松地将大语言模型集成到企业级应用中,无需从零构建复杂的底层逻辑。

二、简单对话调用实现步骤

1. 引入LangChain4j依赖

   <!-- https://mvnrepository.com/artifact/dev.langchain4j/langchain4j-open-ai --><!--LangChain4j依赖 --><dependency><groupId>dev.langchain4j</groupId><artifactId>langchain4j-open-ai</artifactId><version>1.1.0</version></dependency>

2. 获取Api Key 和 Base url

阿里云百炼平台访问地址:https://bailian.console.aliyun.com

配置环境变量:

到模型广场找想使用的大模型的base url:

3. 构建OpenAiChatModel对象,调用chat方法

@SpringBootTest
class Langchain4jDemoApplicationTests {public static void main(String[] args) {// 创建OpenAiChatModel模型对象OpenAiChatModel model = OpenAiChatModel.builder().baseUrl("https://dashscope.aliyuncs.com/compatible-mode/v1")  // 模型地址.apiKey(System.getenv("API-KEY"))  // 获取系统环境变量的API-KEY.modelName("qwen-plus")  // 模型名称.build();  // 构建模型对象// 调用模型对象chat方法,获取模型结果System.out.println(model.chat("你好"));}
}

注意:设置完环境变量后要重启编辑器

运行获取输出结果:

添加请求和响应信息打印:

 .logRequests(true)   // 打印请求信息.logResponses(true)  // 打印响应信息

三、完整会话功能实现步骤

1. 会话功能

Springboot项目勾选spring web起步依赖,添加下方LangChain4j起步依赖


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

配置application.yaml文件

langchain4j:open-ai:chat-model:base-url: https://dashscope.aliyuncs.com/compatible-mode/v1api-key: ${API-KEY}model-name: qwen-plus

创建Controller类

@RestController
@RequestMapping("/api")
public class ChatController {@Autowiredprivate OpenAiChatModel model;@GetMapping("/chat")public String chat(String message) {return model.chat(message);}
}

@RestController=@Controller + @ResponseBody 

标明控制器,并表示所有方法的返回值都为HTTP响应体,通常为Json或文本格式

使用@Autowired注解,自动从容器中获取OpenAiChatModel类型的实例并注入到该变量中(OpenAiChatModel起步依赖已由springboot接管并自动配置)

@GetMapping("/chat"):表示该方法处理 HTTP GET 请求,完整访问路径为/api/chat

方法参数String message:Spring 会自动从请求参数中获取名为message的参数值并传入

调用OpenAiChatModelchat方法,将接收的message作为输入发送给 OpenAI 模型,然后将模型返回的结果直接作为 HTTP 响应返回

测试效果:

2. 日志功能

修改application.yaml配置文件

langchain4j:open-ai:chat-model:base-url: https://dashscope.aliyuncs.com/compatible-mode/v1api-key: ${API-KEY}model-name: qwen-pluslog-requests: truelog-responses: truelogging:level:dev.langchain4j: DEBUG

重新启动,进行测试:

日志输出如下:

四、AiServices工具类使用

(1)继续引入AiServices依赖

 <!--AiServices依赖-->
<dependency><groupId>dev.langchain4j</groupId><artifactId>langchain4j-spring-boot-starter</artifactId><version>1.0.1-beta6</version>
</dependency>

(2)声明接口

package com.breeze.langchain4jdemo.service;public interface ConsultantService {// 用于聊天的方法public String chat(String message);
}

(3)使用AiServices为接口创建代理对象

@Configuration
public class CommonConfig {@Autowiredprivate OpenAiChatModel model;@Beanpublic ConsultantService consultantService(){ConsultantService consultantService = AiServices.builder(ConsultantService.class).chatModel( model).build();return consultantService;}
}
  • @Configuration:标识该类是一个 Spring 配置类,用于定义 Bean(组件)并交给 Spring 容器管理。Spring 会扫描并加载该类中的配置,将其中定义的 Bean 注册到容器中。

@Autowired:自动从 Spring 容器中注入OpenAiChatModel类型的实例。OpenAiChatModel是 LangChain4J 提供的 OpenAI 聊天模型封装类,负责与 OpenAI API 交互。

  • @Bean:标识该方法会创建一个 Bean,并将其注册到 Spring 容器中。其他组件可以通过@Autowired自动注入ConsultantService实例使用。
  • AiServices.builder(...):LangChain4J 提供的工具类,用于创建 “AI 增强的服务”。它可以将一个普通的接口(ConsultantService)与 AI 模型(如 OpenAI)绑定,让接口方法具备调用 AI 的能力。
    • ConsultantService.class:传入一个接口类,LangChain4J 会为该接口生成实现类,实现类的方法会自动调用 AI 模型处理逻辑。
    • .chatModel(model):指定使用注入的OpenAiChatModel作为底层 AI 模型,即接口方法的逻辑会通过该模型与 OpenAI 交互。
    • .build():构建并返回ConsultantService的实例。

(4)控制器部分

@RestController
@RequestMapping("/api")
public class ChatController {@Autowiredprivate ConsultantService consultantService;@GetMapping("/chat")public String chat(String message) {return consultantService.chat(message);}
}
  • @Autowired从 Spring 容器中自动获取ConsultantService类型的实例并注入到该变量中。
  • ConsultantService一个自定义的服务接口(由AiServices生成实现类,结合了 AI 模型能力),用于处理聊天逻辑并与 AI 模型交互。

仍然正常响应:

方法二:使用声明式注解

去掉config配置类,直接使用@AiServices注解即可

@AiService
public interface ConsultantService {// 用于聊天的方法public String chat(String message);
}

其他部分不变,成功运行

五、流式调用

(1)引入依赖

       <!--流式调用依赖·--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-webflux</artifactId></dependency><dependency><groupId>dev.langchain4j</groupId><artifactId>langchain4j-reactor</artifactId><version>1.0.1-beta6</version></dependency>

(2)配置流式模型对象

langchain4j:open-ai:chat-model:base-url: https://dashscope.aliyuncs.com/compatible-mode/v1api-key: ${API-KEY}model-name: qwen-pluslog-requests: truelog-responses: truestreaming-chat-model:base-url: https://dashscope.aliyuncs.com/compatible-mode/v1api-key: ${API-KEY}model-name: qwen-pluslog-requests: truelog-responses: truelogging:level:dev.langchain4j: DEBUG

(3)切换接口中方法的返回值类型

@AiService(wiringMode = AiServiceWiringMode.EXPLICIT,chatModel = "openAiChatModel",streamingChatModel = "openAiStreamingChatModel"
)
public interface ConsultantService {// 用于聊天的方法public Flux<String> chat(String message);
}

(4)修改Controller

返回值修改为Flux<String> ,produces = "text/html;charset=utf-8"防止乱码

@RestController
@RequestMapping("/api")
public class ChatController {@Autowiredprivate ConsultantService consultantService;@GetMapping(value = "/chat",produces = "text/html;charset=utf-8")public Flux<String> chat(String message) {return consultantService.chat(message);}

流式输出实现效果:

六、消息注解

@SystemMessage

在业务层方法上添加@SystemMessage注解实现系统角色设定:

public interface ConsultantService {// 用于聊天的方法@SystemMessage("你是一个吉他手,很擅长弹吉他")public Flux<String> chat(String message);
}

测试效果:

--------配置文件形式--------

在resources下创建配置文件 .txt   文件内容按照实际需求写

业务类方法注解给出文件路径

public interface ConsultantService {// 用于聊天的方法@SystemMessage(fromResource = "system.txt")public Flux<String> chat(String message);
}

测试效果:

由此可见,大模型已经完全按照预设的格式输出内容,对于不相关的问题拒绝回答。

@UserMessage

在业务层方法上添加@UserMessage注解实现用户角色设定:

public interface ConsultantService {// @SystemMessage(fromResource = "system.txt")@UserMessage("你是一位厨师,{{it}}")public Flux<String> chat(String message);
}

实现效果:

使用@V注解修改占位词

后续--> 会话记忆+RAG+Tools 即将出炉,期待下一篇文章!

http://www.dtcms.com/a/395958.html

相关文章:

  • Spring Security / Authorization Server 核心类中英文对照表
  • SqlHelper自定义的Sql工具类
  • 每周读书与学习->初识JMeter 元件(二)
  • 西门子 S7-200 SMART PLC 实操案例:中断程序的灵活应用定时中断实现模拟量滤波(上)
  • 测试分类(1)
  • 广州创科——湖北房县汪家河水库除险加固信息化工程(续集)
  • QT(5)
  • 仓颉语言宏(Cangjie Macros)全面解析:从基础到实战
  • linux RAID存储技术
  • 【每日一问】交流电和直流电有什么区别?
  • Postman使用指南
  • 软件架构面试题及答案
  • 【STM32】基于串口的bootloader
  • 【STM32】中断
  • how many penguins in ur linux你有几只企鹅呢?
  • windows1122h2怎么升级24h2
  • ansible-playbook的使用
  • Zabbix7 监控USG6300E 并发IPv4会话数
  • Qt中使用多线程的范式
  • c语言10:指针加减指针的那些事儿
  • 数据库成为突破口:勒索软件攻击始于暴露的Oracle服务器
  • PT100铂电阻高精度原理图设计,已量产(温度传感器)
  • 推荐 6 个本周 yyds 的 GitHub 项目。
  • 内存释放机制以及栈和堆(c++)
  • PCL基础:点云体积计算,若需更精确的体积估算,可采用 Alpha Shape 或 Marching Cubes 等方法重建表面后再进行积分计算。
  • OSPF实验-20250922
  • Python控制流概述
  • 【LLM学习】【Ollama】四、MCP
  • 5G RedCap模组:轻量化5G技术的商业化实现
  • 深入探索卷积神经网络:从基础到高级架构(二)