ai开发-langchain4j入门-基础功能-01

📅 2026/8/14 13:23:12
ai开发-langchain4j入门-基础功能-01
1、父工程引入依赖properties project.build.sourceEncodingUTF-8/project.build.sourceEncoding project.reporting.outputEncodingUTF-8/project.reporting.outputEncoding java.version17/java.version maven.compiler.source17/maven.compiler.source maven.compiler.target17/maven.compiler.target !-- Spring Boot -- spring-boot.version3.5.0/spring-boot.version !-- Spring AI -- spring-ai.version1.0.0/spring-ai.version !-- Spring AI Alibaba -- spring-ai-alibaba.version1.0.0-M6.1/spring-ai-alibaba.version !-- langchain4j -- langchain4j.version1.0.1/langchain4j.version !--langchain4j-community 引入阿里云百炼平台依赖管理清单-- langchain4j-community.version1.0.1-beta6/langchain4j-community.version !-- maven plugin -- maven-deploy-plugin.version3.1.1/maven-deploy-plugin.version flatten-maven-plugin.version1.3.0/flatten-maven-plugin.version maven-compiler-plugin.version3.8.1/maven-compiler-plugin.version /properties dependencyManagement dependencies !-- Spring Boot -- dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-dependencies/artifactId version${spring-boot.version}/version typepom/type scopeimport/scope /dependency !-- Spring AI -- dependency groupIdorg.springframework.ai/groupId artifactIdspring-ai-bom/artifactId version${spring-ai.version}/version typepom/type scopeimport/scope /dependency !-- Spring AI Alibaba -- dependency groupIdcom.alibaba.cloud.ai/groupId artifactIdspring-ai-alibaba-starter/artifactId version${spring-ai-alibaba.version}/version /dependency !--langchain4j的依赖清单加载BOM后所有langchain4j版本号可以被统一管理起来 https://docs.langchain4j.dev/get-started -- dependency groupIddev.langchain4j/groupId artifactIdlangchain4j-bom/artifactId version${langchain4j.version}/version typepom/type scopeimport/scope /dependency !--引入阿里云百炼平台依赖管理清单 https://docs.langchain4j.dev/integrations/language-models/dashscope -- dependency groupIddev.langchain4j/groupId artifactIdlangchain4j-community-bom/artifactId version${langchain4j-community.version}/version typepom/type scopeimport/scope /dependency /dependencies /dependencyManagement build plugins plugin groupIdorg.springframework.boot/groupId artifactIdspring-boot-maven-plugin/artifactId version${spring-boot.version}/version /plugin plugin groupIdorg.apache.maven.plugins/groupId artifactIdmaven-deploy-plugin/artifactId version${maven-deploy-plugin.version}/version configuration skiptrue/skip /configuration /plugin plugin groupIdorg.apache.maven.plugins/groupId artifactIdmaven-compiler-plugin/artifactId version${maven-compiler-plugin.version}/version configuration release${java.version}/release compilerArgs compilerArg-parameters/compilerArg /compilerArgs /configuration /plugin plugin groupIdorg.codehaus.mojo/groupId artifactIdflatten-maven-plugin/artifactId version${flatten-maven-plugin.version}/version inheritedtrue/inherited executions execution idflatten/id phaseprocess-resources/phase goals goalflatten/goal /goals configuration updatePomFiletrue/updatePomFile flattenModeossrh/flattenMode pomElements distributionManagementremove/distributionManagement dependencyManagementremove/dependencyManagement repositoriesremove/repositories scmkeep/scm urlkeep/url organizationresolve/organization /pomElements /configuration /execution execution idflatten.clean/id phaseclean/phase goals goalclean/goal /goals /execution /executions /plugin /plugins /build repositories repository idspring-milestones/id nameSpring Milestones/name urlhttps://repo.spring.io/milestone/url snapshots enabledfalse/enabled /snapshots /repository repository idspring-snapshots/id nameSpring Snapshots/name urlhttps://repo.spring.io/snapshot/url releases enabledfalse/enabled /releases /repository repository idaliyunmaven/id namealiyun/name urlhttps://maven.aliyun.com/repository/public/url /repository /repositories pluginRepositories pluginRepository idpublic/id namealiyun nexus/name urlhttps://maven.aliyun.com/repository/public/url releases enabledtrue/enabled /releases snapshots enabledfalse/enabled /snapshots /pluginRepository /pluginRepositoriesConfiguration public class LLMConfig { Value(${llm.config.apiKey}) private String apiKey; Value(${llm.config.modelName}) private String modelName; Value(${llm.config.url}) private String url; Bean public ChatModel chatModelQwen() { return OpenAiChatModel.builder() .apiKey(apiKey) .modelName(modelName) .baseUrl(url) .build(); } }properties maven.compiler.source17/maven.compiler.source maven.compiler.target17/maven.compiler.target project.build.sourceEncodingUTF-8/project.build.sourceEncoding /properties dependencies dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-web/artifactId /dependency !--langchain4j-open-ai 基础-- !--所有调用均基于 OpenAI 协议标准实现一致的接口设计与规范LangChain4j 提供与许多 LLM 提供商的集成 从最简单的开始方式是从 OpenAI 集成开始https://docs.langchain4j.dev/get-started -- dependency groupIddev.langchain4j/groupId artifactIdlangchain4j-open-ai/artifactId /dependency !--langchain4j 高阶-- dependency groupIddev.langchain4j/groupId artifactIdlangchain4j/artifactId /dependency !--lombok-- dependency groupIdorg.projectlombok/groupId artifactIdlombok/artifactId optionaltrue/optional /dependency !--test-- dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-test/artifactId scopetest/scope /dependency /dependencies build plugins plugin groupIdorg.springframework.boot/groupId artifactIdspring-boot-maven-plugin/artifactId /plugin /plugins /build子工程依赖properties maven.compiler.source17/maven.compiler.source maven.compiler.target17/maven.compiler.target project.build.sourceEncodingUTF-8/project.build.sourceEncoding /properties dependencies dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-web/artifactId /dependency !--langchain4j-open-ai 基础-- !--所有调用均基于 OpenAI 协议标准实现一致的接口设计与规范LangChain4j 提供与许多 LLM 提供商的集成 从最简单的开始方式是从 OpenAI 集成开始https://docs.langchain4j.dev/get-started -- dependency groupIddev.langchain4j/groupId artifactIdlangchain4j-open-ai/artifactId /dependency !--langchain4j 高阶-- dependency groupIddev.langchain4j/groupId artifactIdlangchain4j/artifactId /dependency !--lombok-- dependency groupIdorg.projectlombok/groupId artifactIdlombok/artifactId optionaltrue/optional /dependency !--test-- dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-test/artifactId scopetest/scope /dependency /dependencies build plugins plugin groupIdorg.springframework.boot/groupId artifactIdspring-boot-maven-plugin/artifactId /plugin /plugins /build2、配置阿里云百炼创建 ChatModel配置类Configuration public class LLMConfig { Value(${llm.config.apiKey}) private String apiKey; Value(${llm.config.modelName}) private String modelName; Value(${llm.config.url}) private String url; Bean public ChatModel chatModelQwen() { return OpenAiChatModel.builder() .apiKey(apiKey) .modelName(modelName) .baseUrl(url) .build(); } }配置阿里云百炼llm.config.apiKey........... llm.config.modelNameqwen-plus llm.config.urlhttps://dashscope.aliyuncs.com/compatible-mode/v1测试案例// http://localhost:9001/langchain4j/hello?question如何学习java Resource private ChatModel chatModel; GetMapping(value /langchain4j/hello) public String hello(RequestParam(value question, defaultValue 你是谁) String question) { String result chatModel.chat(question); System.out.println(调用大模型回复: result); return result; }3、配置deepseek大模型配置类Value(${llm.config.deepseekApiKey}) private String deepseekApiKey; Value(${llm.config.deepseekModelName}) private String deepseekModelName; Value(${llm.config.deepseekUrl}) private String deepseekUrl; /** * Description: 知识出处https://api-docs.deepseek.com/zh-cn/ */ Bean(name deepseek) public ChatModel chatModelDeepSeek() { return OpenAiChatModel.builder() .apiKey(deepseekApiKey) .modelName(deepseekModelName) .baseUrl(deepseekUrl) .build(); }配置信息llm.config.deepseekApiKeysk-2b5............... llm.config.deepseekModelNamedeepseek-v4-pro llm.config.deepseekUrlhttps://api.deepseek.com/v1controll测试// 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; }4、整合springboot引入依赖!--1 LangChain4j 整合boot底层支持-- !-- https://docs.langchain4j.dev/tutorials/spring-boot-integration -- dependency groupIddev.langchain4j/groupId artifactIdlangchain4j-open-ai-spring-boot-starter/artifactId /dependency !--2 LangChain4j 整合boot高阶支持-- dependency groupIddev.langchain4j/groupId artifactIdlangchain4j-spring-boot-starter/artifactId /dependency配置文件 application.propertieslangchain4j.open-ai.chat-model.api-keysk-c9fae53................ langchain4j.open-ai.chat-model.model-nameqwen3.7-plus langchain4j.open-ai.chat-model.base-urlhttps://dashscope.aliyuncs.com/compatible-mode/v1自定义services大模型接口import dev.langchain4j.service.spring.AiService; /** * auther xulk * Date 2026-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); }controller测试package com.langchain.study.controller; import com.langchain.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 xulk * Date 2026-06-18 15:43 * Description: */ RestController public class DeclarativeAIServiceController { Resource private 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); } }5、用量计算的底层api演示配置类package com.langchain.study.config; import com.langchain.study.service.ChatAssistant; import dev.langchain4j.model.chat.ChatModel; import dev.langchain4j.model.openai.OpenAiChatModel; import dev.langchain4j.service.AiServices; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; /** * auther xulk * Date 2026-06-27 22:04 * Description: 知识出处 https://docs.langchain4j.dev/get-started */ Configuration public class LLMConfig { Value(${llm.config.aliQwenApiKey}) private String aliQwenApiKey; Value(${llm.config.aliQwenModelName}) private String aliQwenModelName; Value(${llm.config.aliQwenUrl}) private String aliQwenUrl; Bean(name qwen) public ChatModel chatModelQwen() { return OpenAiChatModel.builder() .apiKey(aliQwenApiKey) .modelName(aliQwenModelName) .baseUrl(aliQwenUrl) .build(); } Value(${llm.config.deepseekApiKey}) private String deepseekApiKey; Value(${llm.config.deepseekModelName}) private String deepseekModelName; Value(${llm.config.deepseekUrl}) private String deepseekUrl; /** * Description: 知识出处https://api-docs.deepseek.com/zh-cn/ */ Bean(name deepseek) public ChatModel chatModelDeepSeek() { return OpenAiChatModel.builder() .apiKey(deepseekApiKey) .modelName(deepseekModelName) .baseUrl(deepseekUrl) .build(); } // High-Api https://docs.langchain4j.dev/tutorials/ai-services#simplest-ai-service Bean public ChatAssistant chatAssistant(Qualifier(qwen) ChatModel chatModelQwen) { return AiServices.create(ChatAssistant.class, chatModelQwen); } }配置文件langchain4j.open-ai.chat-model.api-keysk-........... langchain4j.open-ai.chat-model.model-namedeepseek-v4-pro langchain4j.open-ai.chat-model.base-urlhttps://api.deepseek.com/v1 llm.config.aliQwenApiKeysk-.................... llm.config.aliQwenModelNameqwen3.7-plus llm.config.aliQwenUrlhttps://dashscope.aliyuncs.com/compatible-mode/v1 llm.config.deepseekApiKeysk-.............................. llm.config.deepseekModelNamedeepseek-v4-pro llm.config.deepseekUrlhttps://api.deepseek.com/v1controller 测试// http://localhost:9004/lowapi/api02 /** * Description: Token 用量计算的底层api演示验证案例 * Auther: xulk */ GetMapping(value /lowapi/api02) public String api02(RequestParam(value prompt, defaultValue 你是谁) String prompt) { ChatResponse chatResponse chatModelDeepSeek.chat(UserMessage.from(prompt)); String result chatResponse.aiMessage().text(); System.out.println(通过调用大模型返回结果 result); // Token 用量计算的底层api TokenUsage tokenUsage chatResponse.tokenUsage(); System.out.println(本次调用消耗的token tokenUsage); result result \t\n tokenUsage; return result; }6、自定义service 接口和实现类接口package com.langchain.study.service; /** * auther xulk * Date 2026-06-28 17:28 * Description: 我们知道按照Java开发一般习惯有接口就要有实现类 * 比如接口ChatAssistant就会有实现类ChatAssistantImpl * 现在用高阶api-AIServics不用你自己写impl实现类交给langchain4j给你搞定 * p * 本次配置用的是langchain4j原生整合没有引入sprinboot不需要接口头上配置AiService注解标签 */ public interface ChatAssistant { String chat(String prompt); }实现类 chatAssistantpackage com.langchain.study.config; import com.langchain.study.service.ChatAssistant; import dev.langchain4j.model.chat.ChatModel; import dev.langchain4j.model.openai.OpenAiChatModel; import dev.langchain4j.service.AiServices; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; /** * auther xulk * Date 2026-06-27 22:04 * Description: 知识出处 https://docs.langchain4j.dev/get-started */ Configuration public class LLMConfig { Value(${llm.config.aliQwenApiKey}) private String aliQwenApiKey; Value(${llm.config.aliQwenModelName}) private String aliQwenModelName; Value(${llm.config.aliQwenUrl}) private String aliQwenUrl; Bean(name qwen) public ChatModel chatModelQwen() { return OpenAiChatModel.builder() .apiKey(aliQwenApiKey) .modelName(aliQwenModelName) .baseUrl(aliQwenUrl) .build(); } Value(${llm.config.deepseekApiKey}) private String deepseekApiKey; Value(${llm.config.deepseekModelName}) private String deepseekModelName; Value(${llm.config.deepseekUrl}) private String deepseekUrl; /** * Description: 知识出处https://api-docs.deepseek.com/zh-cn/ */ Bean(name deepseek) public ChatModel chatModelDeepSeek() { return OpenAiChatModel.builder() .apiKey(deepseekApiKey) .modelName(deepseekModelName) .baseUrl(deepseekUrl) .build(); } // High-Api https://docs.langchain4j.dev/tutorials/ai-services#simplest-ai-service Bean public ChatAssistant chatAssistant(Qualifier(qwen) ChatModel chatModelQwen) { return AiServices.create(ChatAssistant.class, chatModelQwen); } }controller 测试package com.langchain.study.controller; import com.langchain.study.service.ChatAssistant; 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 xulk * Date 2026-06-28 17:32 * Description: TODO */ RestController Slf4j public class HighApiController { Resource private ChatAssistant chatAssistant; GetMapping(value /highapi/highapi) public String highApi(RequestParam(value prompt, defaultValue 你是谁) String prompt) { return chatAssistant.chat(prompt); } }