LangChain4J实战,高效速通
文章目录
- 1.LangChain4J理论概述
- 介绍
- 大模型能干什么
- LLM应用技术架构
- 大模型开发分类
- 2.LangChain4J之HelloWorld
- LangChain4J支持的大语言模型
- 接入阿里云百炼
- 获得Api-key
- 创建工程
- 创建Module
- 如果保证多种大模型在系统里共存
- DeepSeek
- 创建Module
- 3.LangChain4J整合Springboot
- SpringBoot整合低阶API
- SpringBoot整合高阶API
- LangChain4J原生整合
- LangChain4J-Boot整合
- 总结
- 开发
1.LangChain4J理论概述
随着人工智能(AI)技术的迅猛发展,越来越多的开发者开始将目光投向AI应用的开发。然而,目前市场上大多数AI框架和工具如LangChain、PyTorch等主要支持Python,而Java开发者常常面临工具缺乏和学习门槛较高的问题,但是不用担心,谁让Java/Spring群体强大那?,O(∩_∩)O
任何一个框架/XXX云服务器,想要大面积推广,应该不会忘记庞大的Spring社区和Java程序员
https://docs.langchain4j.dev
介绍
大模型能干什么
LLM应用技术架构
https://docs.langchain4j.dev/get-started
大模型开发分类
2.LangChain4J之HelloWorld
LangChain4J支持的大语言模型
https://docs.langchain4j.dev/category/language-models
接入阿里云百炼
https://bailian.console.aliyun.com/
获得Api-key
创建工程
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.atguigu.stduy</groupId><artifactId>langchain4j-atguiguV5</artifactId><version>1.0-SNAPSHOT</version><packaging>pom</packaging><name>langchain4j-atguiguV5-Maven父工程POM配置</name><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><java.version>17</java.version><maven.compiler.source>17</maven.compiler.source><maven.compiler.target>17</maven.compiler.target><!-- Spring Boot --><spring-boot.version>3.5.0</spring-boot.version><!-- Spring AI --><spring-ai.version>1.0.0</spring-ai.version><!-- Spring AI Alibaba --><spring-ai-alibaba.version>1.0.0-M6.1</spring-ai-alibaba.version><!-- langchain4j --><langchain4j.version>1.0.1</langchain4j.version><!--langchain4j-community 引入阿里云百炼平台依赖管理清单--><langchain4j-community.version>1.0.1-beta6</langchain4j-community.version><!-- maven plugin --><maven-deploy-plugin.version>3.1.1</maven-deploy-plugin.version><flatten-maven-plugin.version>1.3.0</flatten-maven-plugin.version><maven-compiler-plugin.version>3.8.1</maven-compiler-plugin.version></properties><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><!-- Spring AI --><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-bom</artifactId><version>${spring-ai.version}</version><type>pom</type><scope>import</scope></dependency><!-- Spring AI Alibaba --><dependency><groupId>com.alibaba.cloud.ai</groupId><artifactId>spring-ai-alibaba-starter</artifactId><version>${spring-ai-alibaba.version}</version></dependency><!--langchain4j的依赖清单,加载BOM后所有langchain4j版本号可以被统一管理起来https://docs.langchain4j.dev/get-started--><dependency><groupId>dev.langchain4j</groupId><artifactId>langchain4j-bom</artifactId><version>${langchain4j.version}</version><type>pom</type><scope>import</scope></dependency><!--引入阿里云百炼平台依赖管理清单https://docs.langchain4j.dev/integrations/language-models/dashscope--><dependency><groupId>dev.langchain4j</groupId><artifactId>langchain4j-community-bom</artifactId><version>${langchain4j-community.version}</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><version>${spring-boot.version}</version></plugin><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-deploy-plugin</artifactId><version>${maven-deploy-plugin.version}</version><configuration><skip>true</skip></configuration></plugin><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>${maven-compiler-plugin.version}</version><configuration><release>${java.version}</release><compilerArgs><compilerArg>-parameters</compilerArg></compilerArgs></configuration></plugin><plugin><groupId>org.codehaus.mojo</groupId><artifactId>flatten-maven-plugin</artifactId><version>${flatten-maven-plugin.version}</version><inherited>true</inherited><executions><execution><id>flatten</id><phase>process-resources</phase><goals><goal>flatten</goal></goals><configuration><updatePomFile>true</updatePomFile><flattenMode>ossrh</flattenMode><pomElements><distributionManagement>remove</distributionManagement><dependencyManagement>remove</dependencyManagement><repositories>remove</repositories><scm>keep</scm><url>keep</url><organization>resolve</organization></pomElements></configuration></execution><execution><id>flatten.clean</id><phase>clean</phase><goals><goal>clean</goal></goals></execution></executions></plugin></plugins></build><repositories><repository><id>spring-milestones</id><name>Spring Milestones</name><url>https://repo.spring.io/milestone</url><snapshots><enabled>false</enabled></snapshots></repository><repository><id>spring-snapshots</id><name>Spring Snapshots</name><url>https://repo.spring.io/snapshot</url><releases><enabled>false</enabled></releases></repository><repository><id>aliyunmaven</id><name>aliyun</name><url>https://maven.aliyun.com/repository/public</url></repository></repositories><pluginRepositories><pluginRepository><id>public</id><name>aliyun nexus</name><url>https://maven.aliyun.com/repository/public</url><releases><enabled>true</enabled></releases><snapshots><enabled>false</enabled></snapshots></pluginRepository></pluginRepositories></project>
创建Module
引入pom
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>com.atguigu.stduy</groupId><artifactId>langchain4j-atguiguV5</artifactId><version>1.0-SNAPSHOT</version></parent><artifactId>langchain4j-01helloworld</artifactId><name>langchain4j-01helloworld入门案例</name><properties><maven.compiler.source>17</maven.compiler.source><maven.compiler.target>17</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!--langchain4j-open-ai 基础--><!--所有调用均基于 OpenAI 协议标准,实现一致的接口设计与规范LangChain4j 提供与许多 LLM 提供商的集成从最简单的开始方式是从 OpenAI 集成开始https://docs.langchain4j.dev/get-started --><dependency><groupId>dev.langchain4j</groupId><artifactId>langchain4j-open-ai</artifactId></dependency><!--langchain4j 高阶--><dependency><groupId>dev.langchain4j</groupId><artifactId>langchain4j</artifactId></dependency><!--lombok--><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><!--test--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>
server.port=9001spring.application.name=langchain4j-01helloworld
package com.atguigu.study.config;import dev.langchain4j.model.chat.ChatModel;
import dev.langchain4j.model.openai.OpenAiChatModel;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;/*** @auther zzyybs@126.com* @Date 2025-05-27 22:04* @Description: 知识出处 https://docs.langchain4j.dev/get-started*/
@Configuration
public class LLMConfig {@Beanpublic ChatModel chatModelQwen(){return OpenAiChatModel.builder().apiKey(System.getenv("aliQwen-api")) // 注意:这里api-key放在本地环境变量中.modelName("qwen-plus").baseUrl("https://dashscope.aliyuncs.com/compatible-mode/v1").build();}}
package com.atguigu.study.controller;import dev.langchain4j.model.chat.ChatModel;
import dev.langchain4j.model.openai.OpenAiChatModel;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;/*** @auther zzyybs@126.com* @Date 2025-05-27 21:43* @Description: TODO*/
@RestController
@Slf4j
public class HelloLangChain4JController
{@Resourceprivate ChatModel chatModelQwen;// http://localhost:9001/langchain4j/hello?prompt=如何学习java@GetMapping(value = "/langchain4j/hello")public String hello(@RequestParam(value = "prompt", defaultValue = "你是谁") String prompt){String result = chatModelQwen.chat(prompt);System.out.println("通过langchain4j调用模型返回结果:\n"+result);return result;}
}
测试:
http://localhost:9001/langchain4j/hello?question=如何学习mysql
如果保证多种大模型在系统里共存
DeepSeek
https://platform.deepseek.com/usage
API文档
https://api-docs.deepseek.com/zh-cn/
创建Module
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>com.atguigu.stduy</groupId><artifactId>langchain4j-atguiguV5</artifactId><version>1.0-SNAPSHOT</version></parent><artifactId>langchain4j-02multi-model-together</artifactId><name>langchain4j-02multi-model-together多模型共存</name><properties><maven.compiler.source>17</maven.compiler.source><maven.compiler.target>17</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!--langchain4j-open-ai 基础--><!--所有调用均基于 OpenAI 协议标准,实现一致的接口设计与规范LangChain4j 提供与许多 LLM 提供商的集成从最简单的开始方式是从 OpenAI 集成开始https://docs.langchain4j.dev/get-started --><dependency><groupId>dev.langchain4j</groupId><artifactId>langchain4j-open-ai</artifactId></dependency><!--langchain4j 高阶--><dependency><groupId>dev.langchain4j</groupId><artifactId>langchain4j</artifactId></dependency><!--lombok--><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><!--test--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>
配置类
package com.atguigu.study.config;import dev.langchain4j.model.chat.ChatModel;
import dev.langchain4j.model.openai.OpenAiChatModel;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;/*** @auther zzyybs@126.com* @Date 2025-05-27 22:04* @Description: 知识出处 https://docs.langchain4j.dev/get-started*/
@Configuration
public class LLMConfig
{@Bean(name = "qwen")public ChatModel chatModelQwen(){return OpenAiChatModel.builder().apiKey(System.getenv("aliQwen-api")).modelName("qwen-plus").baseUrl("https://dashscope.aliyuncs.com/compatible-mode/v1").build();}/*** @Description: 知识出处,https://api-docs.deepseek.com/zh-cn/* @Auther: zzyybs@126.com*/@Bean(name = "deepseek")public ChatModel chatModelDeepSeek(){return OpenAiChatModel.builder().apiKey(System.getenv("deepseek-api")).modelName("deepseek-chat")//.modelName("deepseek-reasoner").baseUrl("https://api.deepseek.com/v1").build();}
}
package com.atguigu.study.controller;import dev.langchain4j.model.chat.ChatModel;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;/*** @auther zzyybs@126.com* @Date 2025-05-28 11:27* @Description: TODO*/
@RestController
@Slf4j
public class MultiModelController
{@Resource(name = "qwen")private ChatModel chatModelQwen;@Resource(name = "deepseek")private ChatModel chatModelDeepSeek;// http://localhost:9002/multimodel/qwen@GetMapping(value = "/multimodel/qwen")public String qwenCall(@RequestParam(value = "prompt", defaultValue = "你是谁") String prompt){String result = chatModelQwen.chat(prompt);System.out.println("通过langchain4j调用模型返回结果:\n"+result);return result;}// http://localhost:9002/multimodel/deepseek@GetMapping(value = "/multimodel/deepseek")public String deepseekCall(@RequestParam(value = "prompt", defaultValue = "你是谁") String prompt){String result = chatModelDeepSeek.chat(prompt);System.out.println("通过langchain4j调用模型返回结果:\n"+result);return result;}
}
3.LangChain4J整合Springboot
https://docs.langchain4j.dev/tutorials/spring-boot-integration
SpringBoot整合低阶API
SpringBoot整合高阶API
LangChain4J原生整合
LangChain4J-Boot整合
总结
开发
创建Module
langchain4j-03boot-integration
pom
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>com.atguigu.stduy</groupId><artifactId>langchain4j-atguiguV5</artifactId><version>1.0-SNAPSHOT</version></parent><artifactId>langchain4j-03boot-integration</artifactId><properties><maven.compiler.source>17</maven.compiler.source><maven.compiler.target>17</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><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><!--1 LangChain4j 整合boot底层支持--><!-- https://docs.langchain4j.dev/tutorials/spring-boot-integration --><dependency><groupId>dev.langchain4j</groupId><artifactId>langchain4j-open-ai-spring-boot-starter</artifactId></dependency><!--2 LangChain4j 整合boot高阶支持--><dependency><groupId>dev.langchain4j</groupId><artifactId>langchain4j-spring-boot-starter</artifactId></dependency><!--lombok--><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><!--test--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>
配置
server.port=9003spring.application.name=langchain4j-12boot-integration# https://docs.langchain4j.dev/tutorials/spring-boot-integration
langchain4j.open-ai.chat-model.api-key=${aliQwen-api}
langchain4j.open-ai.chat-model.model-name=qwen-plus
langchain4j.open-ai.chat-model.base-url=https://dashscope.aliyuncs.com/compatible-mode/v1
低阶API
package com.atguigu.study.controller;import dev.langchain4j.model.chat.ChatModel;
import jakarta.annotation.Resource;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;/*** @auther zzyybs@126.com* @Date 2025-06-18 15:43* @Description: TODO*/
@RestController
public class PopularIntegrationController
{@Resourceprivate ChatModel chatModel;// http://localhost:9003/lc4j/boot/chat@GetMapping(value = "/lc4j/boot/chat")public String chat(@RequestParam(value = "prompt", defaultValue = "你是谁") String prompt){return chatModel.chat(prompt);}
}
高阶API
自定义一个接口并添加注解@AiService
package com.atguigu.study.service;import dev.langchain4j.service.spring.AiService;/*** @auther zzyybs@126.com* @Date 2025-06-18 15:40* @Description: 知识出处,https://docs.langchain4j.dev/tutorials/spring-boot-integration/#spring-boot-starter-for-declarative-ai-services*/
@AiService
public interface ChatAssistant
{String chat(String prompt);
}
package com.atguigu.study.controller;import com.atguigu.study.service.ChatAssistant;
import jakarta.annotation.Resource;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;/*** @auther zzyybs@126.com* @Date 2025-06-18 15:43* @Description: TODO*/
@RestController
public class DeclarativeAIServiceController
{@Resourceprivate ChatAssistant chatAssistantQwen;// http://localhost:9003/lc4j/boot/declarative@GetMapping(value = "/lc4j/boot/declarative")public String declarative(@RequestParam(value = "prompt", defaultValue = "你是谁") String prompt){return chatAssistantQwen.chat(prompt);}
}