一、LangChain4j介绍
LangChain4j 是一个给大语言模型(LLMs)用的 Java 开发框架。
它诞生在 2023 年初 ChatGPT 掀起的大模型热潮里。那时候,Python 和 JavaScript 的生态系统中已经有好多特别棒的 LLM 库和框架了,可 Java 这边在这方面却有点跟不上。
为了补上这个空缺,LangChain4j 就出现了。它的目的是把 Java 应用程序和 LLMs 的集成过程变得简单些,让 Java 开发者能更轻松地用上大语言模型的强大能力,做出各种各样的智能应用。
二、核心特点
统一的 API 接口:提供标准化 API,方便接入 15 多个主流 LLM 提供商(如 OpenAI、Google、阿里、智谱等)和 15 多个向量嵌入存储(如 Qdrant、Pinecone、Milvus 等)。开发者无需了解每个 API 细节,可轻松切换不同模型和存储,无需重写代码。
综合工具箱:包含多种工具,从低级的提示模板、聊天记忆管理到高级模式(如 AI 服务和检索增强生成 RAG)。能帮助开发者构建从聊天机器人到完整的数据检索管道等多种应用。
多模态支持:支持文本和图像作为输入,可处理更复杂的应用场景。
模块化设计:采用模块化结构,不同功能可独立使用,便于扩展和维护。
高层次抽象:框架在两个抽象层次上运行,开发者可根据需要选择低级或高级 API 进行开发,提高了灵活性和可用性。
集成支持:与 Quarkus 和 Spring Boot 等流行框架集成,让在现有 Java 项目中引入 LLM 变得更加简单。
支持流式响应:支持从 LLMs 流式获取响应,允许实时获取模型的输出。
丰富示例:提供大量使用示例,帮助开发者快速上手和构建各种 LLM 驱动的应用。
三、Spring Boot 项目集成
1.环境准备
版本SpringBoot 版本3.4.2 + JDK 17 + LangChain4j 1.0.0
2.依赖引入
不在springboot项目中使用,直接使用java引入以下依赖
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-open-ai</artifactId>
<version>1.0.0-beta2</version>
</dependency>
在springboot项目中使用,引入以下依赖
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-open-ai-spring-boot-starter</artifactId>
<version>1.0.0-beta2</version>
</dependency>
3.配置application.properties
1.deepseek配置
申请key
地址:https://platform.deepseek.com/api_keys
添加配置
langchain4j.open-ai.chat-model.api-key=sk-9dxxxxxx(替换成自己的apikey)
langchain4j.open-ai.chat-model.model-name=deepseek-chat
langchain4j.open-ai.chat-model.base-url=https://api.deepseek.com/v1
langchain4j.open-ai.chat-model.max-tokens=4096
2.硅基流动配置
申请key
地址:https://cloud.siliconflow.cn/i/PVVMFCle
添加配置
langchain4j.open-ai.chat-model.api-key=sk-9dxxxxxx(替换成自己的apikey)
langchain4j.open-ai.chat-model.model-name=Qwen/QwQ-32B
langchain4j.open-ai.chat-model.base-url=https://api.siliconflow.cn/v1
langchain4j.open-ai.chat-model.max-tokens=4096
4.调用deepseek大模型api
①.同步调用
@Autowiredprivate ChatLanguageModel chatLanguageModel;
@GetMapping("/model")public String model(@RequestParam(value = "message", defaultValue = "Hello") String message) {
return chatLanguageModel.chat(message);
}
不在springboot项目中,使用java直接调用
OpenAiChatModel deepseekmodel = OpenAiChatModel.builder()
.apiKey("sk-9d5xxxxx")
.modelName("deepseek-chat")
.baseUrl("https://api.deepseek.com/v1")
.maxTokens(4096)
.build();
String chatResult = deepseekmodel.chat("介绍一下南京");
System.out.println(chatResult);
②.给模型设置角色
@GetMapping("/model1")
public String model1(@RequestParam(value = "message", defaultValue = "Hello") String message) {
List<ChatMessage> messages = new ArrayList<>();
ChatMessage systemMessage = new SystemMessage("你现在是一个小学老师,当我跟你说早上好的时候,你要说同学们早上好");
ChatMessage userMessage = new UserMessage(message);
messages.add(userMessage);
messages.add(systemMessage);
ChatResponse chat = chatLanguageModel.chat(messages);
return chat.aiMessage().text();
}
结果:
同学们早上好!今天又是一个充满希望和机会的新一天。希望大家都能以积极的态度迎接今天的每一节课,保持好奇心,勇敢提问,互相帮助。记得,无论遇到什么困难,老师都会在这里支持你们。让我们一起努力,让今天成为美好的一天吧!
③.流式调用
@GetMapping(value = "/model3", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
public Flux<String> model3(@RequestParam(value = "message", defaultValue = "Hello") String message, HttpServletResponse response) {
response.setCharacterEncoding("UTF-8");
return Flux.create(stringFluxSink -> {openAiStreamingChatModel.chat(message, new StreamingChatResponseHandler() {
@Override
public void onPartialResponse(String s) {
stringFluxSink.next(s);
}
@Override
public void onCompleteResponse(ChatResponse chatResponse) {
stringFluxSink.complete();
}
@Override
public void onError(Throwable throwable) {
stringFluxSink.error(throwable);
}
});
});
}
通过本文的介绍,我们深入了解了 LangChain4j 在 Spring Boot 项目中的集成与应用。LangChain4j 凭借其统一的 API、全面的工具箱以及强大的集成能力,为 Spring Boot 开发者提供了便捷高效的大语言模型集成方案 。
当然了LangChain4j,还有非常多的功能,比如多模型,让模型记住上下文设置等,大家不妨尝试将 LangChain4j 引入到你的项目中,探索一下其他方法。