JavaAI01-LangChain4j
【代码】JavaAI01-LangChain4j。
·
LangChain4j是什么
LangChain4j能做什么?
- 先看官网的描述
- 统一 API: LLM 提供商(如 OpenAI 或 Google Vertex AI)和嵌入(向量)存储(如 Pinecone 或 Milvus) 使用专有 API。LangChain4j 提供统一的 API,避免了学习和实现每个特定 API 的需求。 要尝试不同的 LLM 或嵌入存储,您可以在它们之间轻松切换,无需重写代码。 LangChain4j 目前支持 15+ 个流行的 LLM 提供商 和 20+ 个嵌入存储。
- 全面的工具箱: 自 2023 年初以来,社区一直在构建众多 LLM 驱动的应用程序, 识别常见的抽象、模式和技术。LangChain4j 将这些提炼成一个即用型包。 我们的工具箱包含从低级提示模板、聊天记忆管理和函数调用 到高级模式如代理和 RAG 的工具。 对于每个抽象,我们提供一个接口以及基于常见技术的多个即用型实现。 无论您是在构建聊天机器人还是开发包含从数据摄取到检索完整管道的 RAG, LangChain4j 都提供多种选择。
- 丰富的示例: 这些示例展示了如何开始创建各种 LLM 驱动的应用程序, 提供灵感并使您能够快速开始构建。
- 可以简单总结
- 降低学习成本,LangChain4j内部对接了多个服务提供商。所以只需要学习LangChain4j的API即可实现多个服务商之间的切换。
- 封装的方法很多,开箱即用,不用自己从投稿。
- 有很多案例,可以参考
- 目前支持的大模型很多,例如:OpenAI、DashScope、Ollama。
- DeepSeek和OpenAI是同一套标准
- 目前支持的向量数据库(嵌入存储比较表)也很多,例如:Oracle、Redis
与相同功能框架的对比
- 实现相同功能的框架,还有Spring AI
- Spring AI 对 Spring 生态强依赖,不可单独使用;但LangChain4j无框架依赖,只要是java即可,可独立使用
- Spring AI适合SpringBoot应用快速接入单模型;但LangChain4j适合多模型(动态模型)平台
体验OpenAI
- jdk版本:v0.35.0可以在jdk1.8, v0.36.0+迁移到jdk17 , 所以最新版本必须jdk17+
- 本文使用jdk17
- 首先,创建一个maven应用

- 引入maven依赖
<dependencies> <dependency> <groupId>dev.langchain4j</groupId> <artifactId>langchain4j-open-ai</artifactId> <version>1.0.0-beta3</version> </dependency> </dependencies>- 如果拉不下来,可以使用阿里云仓库
<repositories> <repository> <id>maven-ali</id> <url>https://maven.aliyun.com/mvn/view</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>true</enabled> <updatePolicy>always</updatePolicy> <checksumPolicy>fail</checksumPolicy> </snapshots> </repository> </repositories>
- 如果拉不下来,可以使用阿里云仓库
- 直接创建一个类,在main方法中编辑
import dev.langchain4j.model.chat.ChatLanguageModel; import dev.langchain4j.model.openai.OpenAiChatModel; public class Main { public static void main(String[] args) { ChatLanguageModel model = OpenAiChatModel .builder() //langchain4j的1.0.0-beta3版本需要手动指定访问的官网 .baseUrl("http://langchain4j.dev/demo/openai/v1") .apiKey("demo") .modelName("gpt-4o-mini") .build(); String answer = model.chat("你好,你是谁?"); System.out.println(answer); } }- 因为自己没有opeAi的apiKey,所以只能借用LangChain4j的测试apiKey(即demo)
- 用了langchain4j的测试apiKey,所以要由langchain4j官网帮我们转发。
- 且这个测试apiKey只支持gpt-4o-mini
- 查看控制台结果

接入DeepSeek
创建DeepSeek的apiKey
- DeepSeek官网
- 需要注意,apiKey只在创建的时候能看到,之后就看不到了,所以要妥善保存


LangChain4j接入DeepSeek
- 官方文档位置

- 文档中提到了访问官网的地址(https://api.deepseek.com),以及模型名称(deepseek-reasoner)

- DeepSeek和openAi用的一样的标准,所以maven是相同的,不需要更换
- java代码
import dev.langchain4j.model.chat.ChatLanguageModel; import dev.langchain4j.model.openai.OpenAiChatModel; public class Main { public static void main(String[] args) { ChatLanguageModel model = OpenAiChatModel .builder() .baseUrl("https://api.deepseek.com") .apiKey("***********************") .modelName("deepseek-reasoner") .build(); String answer = model.chat("你好,你是谁?"); System.out.println(answer); } } - 查看控制台(执行前记得充一块钱,现在新用户已经不送余额了)

其他模型也是一样的
- maven依赖在官网中都提供了,想用哪个直接点击

- 之后就可以看到具体的maven依赖

阿里云百炼(DashScope)
- 官网
- 这是阿里的模型广场,其中收集了几乎全部通义千问(qwen)的版本
- 还收集了市面上很多的AI模型,比如DeepSeek等,都可以通过阿里云百炼平台接入

接入通义千问3-MAX
- 获取apiKey,创建一个apiKey

- 查看实例api

- 可以看到,通义千问3-MAX也是和openAI同样的标准,这意味着不需要导入新的依赖。
- java代码
import com.qi.code.ApiKey; import dev.langchain4j.model.chat.ChatLanguageModel; import dev.langchain4j.model.openai.OpenAiChatModel; public class Main { public static void main(String[] args) { ChatLanguageModel model = OpenAiChatModel .builder() .baseUrl("https://dashscope.aliyuncs.com/compatible-mode/v1") .apiKey(ApiKey.QWEN) .modelName("qwen-plus") .build(); String answer = model.chat("你好,你是谁?"); System.out.println(answer); } } - 控制台

整合SpringBoot
创建一个SpringBoot3应用
- 可以直接在idea中一键创建,会自动配置相应的包
- 也可以选择手动创建:手动创建SpringBoot项目
接入阿里云百炼平台
- maven
<!-- SpringBoot 核心包 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <!-- SpringBoot Web容器 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- 阿里云百炼 --> <dependency> <groupId>dev.langchain4j</groupId> <artifactId>langchain4j-community-dashscope-spring-boot-starter</artifactId> <version>1.0.0-beta3</version> </dependency> - 在配置文件application.yml中,配置apiKey以及模型名称
langchain4j: community: dashscope: chatModel: api-key: "sk-xxxxxxxxxxxxxxxxxx" model-name: qwen-plus - 在SpringBoot的启动类同级目录下,创建 QwenController
package com.qi.controller; import dev.langchain4j.model.chat.ChatLanguageModel; 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.RestController; @RequestMapping("/Qwen") @RestController public class QwenController { @Autowired ChatLanguageModel qwenChatModel; @GetMapping("/whoAreYou") public String whoAreYou(){ String chat = qwenChatModel.chat("你是谁?"); return chat; } } - 浏览器访问 http://127.0.0.1:8080/Qwen/whoAreYou

文生图-通义千问-qwen-image-plus(未使用Spring框架的Bean)
- Controller代码
@RequestMapping("/Qwen") @RestController public class QwenController { @Value("${langchain4j.community.dashscope.chatModel.api-key}") private String apiKey; @GetMapping("/imgerDemo") public String imgerDemo(){ String prompt = "一副典雅庄重的对联悬挂于厅堂之中,房间是个安静古典的中式布置,桌子上放着一些青花瓷,对联上左书“义本生知人机同道善思新”,右书“通云赋智乾坤启数高志远”, 横批“智启通义”,字体飘逸,在中间挂着一幅中国风的画作,内容是岳阳楼。"; Map<String, Object> parameters = new HashMap<>(); parameters.put("prompt_extend", true); parameters.put("watermark", false); ImageSynthesisParam param = ImageSynthesisParam.builder() .apiKey(apiKey) .model("qwen-image-plus") .prompt(prompt) .n(1) .size("1328*1328") .parameters(parameters) .build(); ImageSynthesis imageSynthesis = new ImageSynthesis(); ImageSynthesisResult result = null; try { System.out.println("---同步调用,请等待任务执行----"); result = imageSynthesis.call(param); } catch (ApiException | NoApiKeyException e){ throw new RuntimeException(e.getMessage()); } System.out.println(JsonUtils.toJson(result)); return result.toString(); } } - 浏览器访问 http://127.0.0.1:8080/Qwen/imgerDemo
- 返回的 url=https://dashscope-result-wlcb-acdr-1.oss-cn-wula… 就是图片的访问下载地址
文生图-通义万相2.1-Turbo模型(未使用Spring框架的Bean)
WanxImageModel wanxImageModel = WanxImageModel.builder()
.apiKey(apiKey)
.modelName("wanx2.1-t2i-turbo")
.build();
Response<Image> response = wanxImageModel.generate("美女");
System.out.println(response.content().url());
return response.content().url().toString();
文生语音-cosyvoice-v1(未使用Spring框架的Bean)
SpeechSynthesisParam param =
SpeechSynthesisParam.builder()
.apiKey(apiKey)
.model("cosyvoice-v1")
.voice("longxiaochun")
.build();
SpeechSynthesizer synthesizer = new SpeechSynthesizer(param, null);
ByteBuffer audio = synthesizer.call("大家好,这是一个测试文生语音?");
File file = new File("D:/output.mp3");
try (FileOutputStream fos = new FileOutputStream(file)) {
fos.write(audio.array());
} catch (IOException e) {
throw new RuntimeException(e);
更多推荐

所有评论(0)