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

LangChain4j多模型共存+整合SpringBoot

目录

    • 介绍
    • 核心功能
    • ApiKey配置
    • 多模型共存
    • 整合SpringBoot
      • 两种整合方式
      • LangChain4j整合SpringBoot示例
    • 大模型ApiKey不可以明文配置,如何解决?
    • 总结

在这里插入图片描述

介绍


LangChain4j 是一个专为 Java 开发者设计的开源框架,旨在简化大型语言模型 (LLM) 与 Java 应用程序的集成,帮助开发者快速构建基于 LLM 的智能应用。

核心功能


1. 支持多种 LLM 提供商

LangChain4j 支持与主流 LLM (如 OpenAI、阿里云通义千问、智谱 AI 等) 的集成,开发者可以通过统一的 API 接口无缝切换不同的模型,无需修改底层代码。

2. 模块化设计

  • 模型集成: 支持文本生成、聊天对话、嵌入向量生成等。
  • 工具集成: 允许调用外部工具 (如数据库查询、API 调用等),扩展 LLM 的能力。
  • 记忆管理: 支持对话历史记录、上下文管理等,提升多轮对话的连贯性。
  • 检索增强生成 (RAG): 支持从外部知识库检索信息,增强 LLM 的回答准确性。

3. 灵活的抽象层次

  • 低级别 API: 提供对 LLM 的细粒度控制,适合需要高度定制化的场景。
  • 高级别 API: 通过封装复杂的逻辑,简化开发流程,适合快速原型开发。

4. 与 Spring Boot 集成

LangChain4j 提供了与 Spring Boot 的无缝集成,开发者可以轻松地将 LLM 功能嵌入到现有的 Java 企业级应用中。

5. 丰富的工具箱

  • 提示词模板: 支持动态生成提示词,优化与 LLM 的交互。
  • 输出解析: 将 LLM 的输出解析为结构化数据 (如 JSON、XML 等)。
  • 多模态支持: 支持文本和图像输入,适用于更复杂的应用场景。

ApiKey配置


1. 注册Apikey (阿里云百炼、DeekSeek 等)

2. ApiKey配置进环境变量

在这里插入图片描述

3. 重启IDEA

多模型共存


1. 引入依赖

<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- LangChain4j Open AI 基础 --><dependency><groupId>dev.langchain4j</groupId><artifactId>langchain4j-open-ai</artifactId></dependency><!-- LangChain4j 高阶 --><dependency><groupId>dev.langchain4j</groupId><artifactId>langchain4j</artifactId></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency>
</dependencies>

2. yml配置

server:port: 9001spring:application:name: langchain4j-demo

3. 主启动类

@SpringBootApplication
public class DemoLangChain4jApp {public static void main(String[] args) {SpringApplication.run(DemoLangChain4jApp.class, args);}
}

4. 配置类 LLMConfig

@Configuration
public class LLMConfig {@Bean(name = "qwen")public ChatModel chatModelQwen() {return OpenAiChatModel.builder().apiKey(System.getenv("ALIYUN_KEY")).modelName("qwen-plus").baseUrl("https://dashscope.aliyuncs.com/compatible-mode/v1").build();}@Bean(name = "deepseek")public ChatModel chatModelDeepSeek() {return OpenAiChatModel.builder().apiKey(System.getenv("DEEPSEEK_KEY")).modelName("deepseek-chat").baseUrl("https://api.deepseek.com/v1").build();}
}

5. 控制类 DemoLangChain4jController

@RestController
@RequestMapping("/ai")
public class DemoLangChain4jController {@Resource(name = "qwen")private ChatModel chatModelQwen;@Resource(name = "deepseek")private ChatModel chatModelDeepSeek;// http://localhost:9001/ai/qwen/chat?msg=如何学习java@GetMapping(value = "/qwen/chat")public String qwenChat(@RequestParam(value = "msg", defaultValue = "你是谁") String msg) {return chatModelQwen.chat(msg);}// http://localhost:9001/ai/deepseek/chat?msg=如何学习java@GetMapping(value = "/deepseek/chat")public String deepseekChat(@RequestParam(value = "msg", defaultValue = "你是谁") String msg) {return chatModelDeepSeek.chat(msg);}
}

6. 测试

  • 访问 http://localhost:9001/ai/qwen/chat
    在这里插入图片描述
  • 访问 http://localhost:9001/ai/deepseek/chat
    在这里插入图片描述

整合SpringBoot


两种整合方式

1. LangChain4j原生整合

<!-- LangChain4j原生 基础-->
<dependency><groupId>dev.langchain4j</groupId><artifactId>langchain4j-open-ai</artifactId>
</dependency>
<!-- LangChain4j原生 高阶-->
<dependency><groupId>dev.langchain4j</groupId><artifactId>langchain4j</artifactId>
</dependency>

2. LangChain4j-Boot整合

<!-- LangChain4j 整合boot底层支持 -->
<dependency><groupId>dev.langchain4j</groupId><artifactId>langchain4j-open-ai-spring-boot-starter</artifactId>
</dependency>
<!-- LangChain4j 整合boot高阶支持 -->
<dependency><groupId>dev.langchain4j</groupId><artifactId>langchain4j-spring-boot-starter</artifactId>
</dependency>

LangChain4j整合SpringBoot示例

1. 引入依赖

<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- LangChain4j原生 基础--><dependency><groupId>dev.langchain4j</groupId><artifactId>langchain4j-open-ai</artifactId></dependency><!-- LangChain4j原生 高阶--><dependency><groupId>dev.langchain4j</groupId><artifactId>langchain4j</artifactId></dependency><!-- LangChain4j 整合boot底层支持 --><dependency><groupId>dev.langchain4j</groupId><artifactId>langchain4j-open-ai-spring-boot-starter</artifactId></dependency><!-- LangChain4j 整合boot高阶支持 --><dependency><groupId>dev.langchain4j</groupId><artifactId>langchain4j-spring-boot-starter</artifactId></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency>
</dependencies>

2. yml配置

server:port: 9002spring:application:name: langchain4j-bootlangchain4j:open-ai:chat-model:api-key: ${ALIYUN_KEY}model-name: qwen-plusbase-url: https://dashscope.aliyuncs.com/compatible-mode/v1

3. 主启动类

@SpringBootApplication
public class BootLangChain4jApp {public static void main(String[] args) {SpringApplication.run(BootLangChain4jApp.class, args);}
}

4. 自定义高阶 AiService 接口 ChatAssistant

@AiService
public interface ChatAssistant {String chat(String msg);
}

5. 控制类 BootLangChain4jController

@RestController
@RequestMapping("boot")
public class BootLangChain4jController {// 低阶@Resourceprivate ChatModel chatModel;// 高阶@Resourceprivate ChatAssistant chatAssistant;// http://localhost:9002/boot/lowChat?msg=如何学习java@GetMapping(value = "/lowChat")public String lowChat(@RequestParam(value = "msg", defaultValue = "你是谁") String msg) {return chatModel.chat(msg);}// http://localhost:9002/boot/highChat?msg=如何学习java@GetMapping(value = "/highChat")public String highChat(@RequestParam(value = "msg", defaultValue = "你是谁") String msg) {return chatAssistant.chat(msg);}
}

6. 测试

  • 访问 http://localhost:9002/boot/lowChat
    在这里插入图片描述
  • 访问 http://localhost:9002/boot/highChat?msg=如何学习java
    在这里插入图片描述

大模型ApiKey不可以明文配置,如何解决?


1. yml配置:使用 ${ALIYUN_KEY} 从环境变量中获取

2. config配置类:使用 System.getenv(“ALIYUN_KEY”) 从环境变量中获取

总结


以上主要介绍了 LangChain4j 多模型共存、整合 SpringBoot 的相关知识,想了解更多 LangChain4j 知识的小伙伴请参考 LangChain4j 官网 进行学习,学习更多 LangChain4j 实战实用技巧的小伙伴,请关注后期发布的文章,认真看完一定能让你有所收获。

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

相关文章:

  • springboot websocket 自动重启方案
  • SpringBoot3集成MapstructPlus
  • 抓包工具使用教程
  • 网安-文件上传-upload-labs
  • Laravel 原子锁概念讲解
  • jdk各个版本特性
  • Linux 基础文件IO操作
  • 零基础学习性能测试第一章:核心性能指标-并发量
  • Node.js 中基于请求 ID 实现简单队列(即时阻止策略/排队等待策略)
  • DMZ网络
  • (1)Windows环境下安装Oracle
  • Vue3 Proxy 数据劫持为什么比Object.defineProperty() Vue2数据劫持的性能更好
  • 人工智能训练师三级实操题第一部分数据处理
  • shell 脚本基础学习
  • Java中的intern()方法
  • 全新安装Proxmox VE启动时卡在Loading initial ramdisk
  • RAII机制以及在ROS的NodeHandler中的实现
  • 【c++】200*200 01灰度矩阵求所有的连通区域坐标集合
  • 鸿蒙开发中 渲染范围的控制
  • 飞腾D2000的BIOS编译
  • 在服务器无网络的环境下安装 VS Code Remote-SSH 组件
  • 【Python练习】053. 编写一个函数,实现简单的文件加密和解密功能
  • C++string类(3)
  • 基于单片机的火灾报警系统设计
  • SaTokenException: 未能获取对应StpLogic 问题解决
  • c#转python第四天:生态系统与常用库
  • 新版Acrobat Pro DC 2025 PDF编辑器下载与保姆级安装教程!!
  • Mermaid 语法
  • 突破select瓶颈:深入理解poll I/O复用技术
  • 让黑窗口变彩色:C++控制台颜色修改指南