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

LangChain4j概述与基本使用

LangChain4j概述与基本使用

LangChain4j等价于LangChain For java,即为你的java应用赋能大模型能力

1

LangChain4j概述

LangChain4j的目标是简化LLM集成到Java应用程序中的过程

LangChain4j简化LLM集成到java的方式

  1. 统一API: LLM提供商和嵌入(向量)存储使用专有API。LangChain4j提供统一的API,避免了学习和实现每个特定API的需求。
  2. 全面的工具箱: 社区一直在构建众多LLM驱动应用程序,识别常见的抽象、模式、技术。LangChain4j将这些提炼成一个即用依赖包。工具箱(依赖包)包含从低级提示模版、聊天记忆管理和函数调用到高级模式如代理和RAG工具。
  3. 丰富的示例: 官方文档中展示了如何开始创建各种LLM驱动的应用程序,提供灵感并使你快速开始构建。

LangChain4j技术引入后对java框架的影响

相较于之前java微服务框架与大模型框架是相对独立的,java调用大模型应用需要编写很多粘合代码,LangChain4j和SpringAI的出现降低了java集成大模型的开发成本,提供了统一的API

2.LangChain4j技术引入Java框架的变化

大语言模型(LLM)应用技术架构

大语言言模型应用技术架构分为4层

  • 应用层(Application Layer): 直接面向用户的产品形态,将前三层的能力包装成解决实际问题的具体应用
  • 框架与工具层(Framework&Tool Layer): 连接"大脑"和"手脚"的神经系统,负责编排、增强、控制模型的能力,使其能完成复杂任务。
  • 模型层(Model Layer): 提供核心智能的"大脑本身",包括各种大模型及其服务形式
  • 基础设施层(Infrastructure Layer): 整个技术栈的基石,提供大模型和应用所需的底层计算、存储和网络资源

3.LLM应用技术框架

自上而下是"调用"关系,自下而上是"支撑"关系,大多数应用开发者和创业者主要聚焦在最上面两层,利用下层提供的强大能力,结合垂直领域的数据和场景,构建创新的AI应用。

LangChain4j的功能

具体功能详情参见官网,这里只列出功能点

  • 集成15+个LLM提供商

  • 集成20+个嵌入(向量)存储

  • 集成15+个嵌入模型

  • 集成5个图像生成模型

  • 集成2个评分(重排序)模型

  • 集成一个审核模型(OpenAI)

  • 支持文本和图像作为输入(多模态)

  • AI服务(高阶LLM API)

  • 提示模版

  • 实现持久化和内容中的聊天记忆算法: 消息窗口和令牌窗口

  • 从LLM流式传输响应

  • 用于常见Java类型和自定义POJO的输出解析器

  • 工具(函数调用)

  • 动态工具(执行动态生成的LLM代码)

  • RAG(检索增强生成)

    • 提取:
      • 从多个来源导入各种类型的文档
      • 使用多种分割算法将文档分割成更小的段落
      • 文档和短路的后处理
      • 使用嵌入模型嵌入段落
      • 在嵌入(向量)存储中存储嵌入
    • 检索:
      • 查询转换
      • 查询路由
      • 从向量存储或任意自定义源检索
      • 重排序
      • 倒数排名融合
      • 自定义RAG流程中的每个步骤
  • 文本分类

  • 用于分词和估算token数的工具

  • Kotlin扩展: 使用Kotlin的协程功能异步非阻塞处理聊天交换

LangChain4j的两个抽象层次

  • 低层次(基础层次): 在这个层次上,开发者拥有最大的自由度和访问所有低级(基础)组件的权限。如ChatLanguageModel、UserMessage、AIMessage、EmbeddingStore、Embedding等。这些是LLM驱动应用程序的"原语"。开发者可以完全控制如何组合,但需要编写更多的粘合代码
  • 高层次: 在这个层次上,开发者使用高级API(如API服务)与LLM交互,它隐藏了所有复杂性和样板代码。开发者仍然可以灵活性地调整和微调,但是需要以声明式方式完成

4

LangChain4j的使用场景

  • 自定义的AI驱动的聊天机器人,访问自身数据并按照预期行事。eg:客户支持聊天机器人,教育类助手
  • 从非结构化数据(文件、网页)中提取结构化信息。eg:从客户评论和支持聊天历史中提取见解,从竞争对手的网址提取有趣信息,从求职者简历中提取见解
  • 生成信息。eg:为每个用户定制电子邮件,为网站生成内容
  • 转换信息。eg:总结、校对和重写、翻译

LangChain4j的基本使用

基本使用主要以代码示例为主,演示LangChain4j原生整合与Langchain4j与springboot集成两种整合方式,分成两个模块

使用前提

大模型选择与配置API-KEY环境变量

由于需要大模型的能力,因此需要选择模型并设置API-KEY,这里以阿里云百炼平台、DeepSeek开发平台为例

大模型平台网址

这里提供阿里云百炼平台与DeepSeek开发平台的网址,自行进行用户开通与API-KEY的构建

阿里云百炼平台:https://bailian.console.aliyun.com/

DeepSeek开发平台:https://platform.deepseek.com/

环境变量中添加API-KEY

由于API-KEY属于敏感信息不应该出现在代码中,因此配置到环境变量中

此电脑右键属性->高级系统设置->环境变量

在系统变量中新建一个API-KEY变量,用于后需java程序读环境变量进行API-KEY值获取

5

引入物料清单

在父项目中引入物料清单,用于子模块中引入相关依赖时的版本号识别,避免两个依赖因版本问题导致不兼容的问题

    <properties><maven.compiler.source>21</maven.compiler.source><maven.compiler.target>21</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><java.version>21</java.version><!--Spring Boot--><spring-boot.version>3.5.3</spring-boot.version><!--LangChain4J--><langchain4j.version>1.0.0-beta3</langchain4j.version></properties><!--    <dependencyManagement> 是一个声明和集中管理依赖版本和配置的机制(物料清单)。它本身并不引入实际的依赖,而是为依赖提供一个“模板”或“蓝图”--><dependencyManagement><dependencies><!--Spring Boot--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>${spring-boot.version}</version><type>pom</type><scope>import</scope></dependency><!--LangChain4J--><dependency><groupId>dev.langchain4j</groupId><artifactId>langchain4j-bom</artifactId><version>${langchain4j.version}</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement>

LangChain4j原生整合的基本使用

提供两种抽象层次的API调用即高低阶调用API,高阶API调用需要声明AI服务

引用依赖

    <properties><maven.compiler.source>21</maven.compiler.source><maven.compiler.target>21</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><dependencies><!--快速构建一个基于 Spring MVC 的 Web 应用程序而预置的一组依赖项的集合--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!--LangChain4J openAI集成依赖--><dependency><groupId>dev.langchain4j</groupId><artifactId>langchain4j-open-ai</artifactId></dependency><!--LangChain4J 高级AI服务API依赖--><dependency><groupId>dev.langchain4j</groupId><artifactId>langchain4j</artifactId></dependency><!--一个通过注解在编译时自动生成 Java 样板代码的库--><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency><!--对 Spring Boot 应用程序进行全面测试而预置的一组测试相关依赖项的集合--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build>

配置类

import com.shen.langchain4j.service.ChatAssistant;
import dev.langchain4j.model.chat.ChatLanguageModel;
import dev.langchain4j.model.openai.OpenAiChatModel;
import dev.langchain4j.service.AiServices;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;/*** 大模型配置类*/@Configuration
public class LLMConfig {@Bean(value = "qwen")public ChatLanguageModel chatLanguageModelQwen() {return OpenAiChatModel.builder().apiKey(System.getenv("aliyunQwen-apiKey")).modelName("qwen-plus-2025-04-28").baseUrl("https://dashscope.aliyuncs.com/compatible-mode/v1").build();}@Bean(value = "deepseek")public ChatLanguageModel chatLanguageModelDeepseek() {return OpenAiChatModel.builder().apiKey(System.getenv("DeepSeek-apiKey")).modelName("deepseek-chat").baseUrl("https://api.deepseek.com/v1").build();}@Beanpublic ChatAssistant chatAssistant(@Qualifier(value = "qwen") ChatLanguageModel chatLanguageModel) {return AiServices.create(ChatAssistant.class, chatLanguageModel);}}

低阶API控制层接口

/*** 低价API使用控制层接口*/
@Slf4j
@RestController
@RequestMapping(value = "/lowApi")
public class LowApiController {@Autowired@Qualifier(value = "qwen")private ChatLanguageModel qwenModel;@Autowired@Qualifier(value = "deepseek")private ChatLanguageModel deepseekModel;/*** 常规提问大模型** @param prompt 提示词* @return 大模型回答*/@GetMapping(value = "/one")public String lowApiOne(@RequestParam(value = "prompt", defaultValue = "你是谁") String prompt) {return qwenModel.chat(prompt);}/*** 返回token消耗量** @param prompt 提示词* @return token销毁*/@GetMapping(value = "/two")public String lowApiTwo(@RequestParam(value = "prompt", defaultValue = "你是谁") String prompt) {ChatResponse chatResponse = qwenModel.chat(UserMessage.from(prompt));log.info("大模型输出结果为: {}", chatResponse.aiMessage().text());return chatResponse.metadata().tokenUsage().toString();}
}

声明式AI(高阶API)服务接口

/*** 声明式AI服务业务接口*/
public interface ChatAssistant {String chat(String prompt);
}

高阶API(声明式AI)控制层接口

import com.shen.langchain4j.service.ChatAssistant;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;/*** 高阶API使用控制层接口*/
@Slf4j
@RestController
@RequestMapping(value = "/highApi")
public class HighApiController {@Autowiredprivate ChatAssistant chatAssistant;@GetMapping("/one")public String highApiOne(@RequestParam(value = "prompt", defaultValue = "你是谁") String prompt) {return chatAssistant.chat(prompt);}
}

LangChain4j与springboot集成的基本使用

springboot启动器通过属性配置帮助创建和配置语言模型、嵌入模型、嵌入存储和其他LangChain4j核心组件,相比原生整合的配置类,使用配置文件的方式更具便捷性

引用依赖

    <properties><maven.compiler.source>21</maven.compiler.source><maven.compiler.target>21</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><dependencies><!--快速构建一个基于 Spring MVC 的 Web 应用程序而预置的一组依赖项的集合--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!--一个通过注解在编译时自动生成 Java 样板代码的库--><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency><!--对 Spring Boot 应用程序进行全面测试而预置的一组测试相关依赖项的集合--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId></dependency><!--LangChain4J 与springboot集成依赖 流行的集成(低阶依赖)--><dependency><groupId>dev.langchain4j</groupId><artifactId>langchain4j-open-ai-spring-boot-starter</artifactId></dependency><!--LangChain4J 与springboot集成依赖 声明式AI服务(高阶依赖)--><dependency><groupId>dev.langchain4j</groupId><artifactId>langchain4j-spring-boot-starter</artifactId></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build>

配置文件

# 不必新增配置类,直接在配置文件中添加参数
langchain4j:open-ai:chat-model:api-key: ${aliyunQwen-apiKey}model-name: qwen-plus-2025-04-28base-url: https://dashscope.aliyuncs.com/compatible-mode/v1

低阶API控制层接口

import dev.langchain4j.model.chat.ChatLanguageModel;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;/*** 与springboot集成,流行集成的控制层接口*/
@Slf4j
@RestController
@RequestMapping(value = "/popular")
public class PopularIntegrationsController {@Autowiredprivate ChatLanguageModel chatLanguageModel;@GetMapping("/chat")public String chatModel(@RequestParam(value = "prompt", defaultValue = "你是谁") String prompt) {return chatLanguageModel.chat(prompt);}
}

声明式AI(高阶API)服务接口

import dev.langchain4j.service.spring.AiService;/*** 声明式AI服务业务接口*/
@AiService
public interface ChatAssistant {String chat(String prompt);
}

高阶API(声明式AI)控制层接口

import com.shen.langchain4j.service.ChatAssistant;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;/*** 与springboot集成,声明式AI服务的控制层接口*/
@Slf4j
@RestController
@RequestMapping("/declarative")
public class DeclarativeAIServicesController {@Autowiredprivate ChatAssistant chatAssistant;@GetMapping("/chat")public String chatModel(@RequestParam(value = "prompt", defaultValue = "你是谁") String prompt) {return chatAssistant.chat(prompt);}
}

参考资料

https://docs.langchain4j.dev/

https://docs.langchain4j.info/

http://www.sczhlp.com/news/53444/

相关文章:

  • 函数是向量,Jacobian是这个向量的线性变换,只不过是局部的
  • day04method-Fight
  • 2222
  • day04supplemet-Love
  • 襄阳网站建设营销跳蚤市场网站开发背景
  • 如何做增加网站留存的营销活动桐庐住房和城乡建设局网站
  • 睢县房产网站建设九江专业网站建设定制
  • 怎样凡科建设网站石家庄net网站开发
  • 网站排名高权重低外贸电商网站制作
  • 台州网站制作案例镇江网页设计哪家好
  • 昆山做网站哪家好创意设计图片大全
  • iis网站目录权限品牌型网站建设哪家
  • php网站开发需要学什么软件网站建设叁金手指花总1
  • 网站开发费用计入科目项目网络的关键路径
  • 网站开发工作标准网页传奇游戏排行榜比亚迪
  • 网站优化内容谷歌网站推广方案
  • 告状书放网站上怎么做帝国cms小说网站模板
  • 网站的总体风格包括手机网站建站视频教程
  • 建设网站要服务器吗wordpress twenty twelve数字
  • 深圳网站建设价格是多少钱微商货源网下载
  • 做兼职的网站都有哪些工作内容抖音代运营的资源
  • 昆明软件开发公司做门户网站的免费的推广网站
  • 移动网可以上的网站是什么样子的淘宝优惠券私人查券网站怎么做
  • 11111
  • mysql数据库备份与恢复(Xtrabackup物理备份数据工具)
  • 广州seo网站推广费用网站建设与规划学的心得体会
  • 建立网站要多少钱网站框架布局
  • 怎么做网站文章伪原创官方网站建设滞后
  • 马鞍山建设网站灰色行业关键词推广
  • 网站安全性要求广州天河区房价多少钱一平方