目录
前言:LangChain4j 的简介
“LangChain4j 是一个让Java开发者轻松玩转大模型的工具包,像搭积木一样组合各种AI功能!这篇教你5分钟搞定接入“ |
LangChain4j的背景
LangChain4j(LangChain for java) 的目标是简化将大语言模型(LLM - Large Language Model)集成到 Java 应用程序中的过程。
官网: https://docs.langchain4j.dev
2022 年10月,Harrison Chase 发布了基于 Python 的 LangChain。随后同时包含了 Python 版和 JavaScript(LangChain.js)版的LangChain 也发布了。
2023 年 11 月,Quarkus 发布了 LangChain4j 的 0.1 版本,2025 年 2 月发布了 1.0 - Beta1 版本,4 月发布了1.0 - Beta3(公测) 版本
主要功能
-
与大型语言模型和向量数据库的便捷交互:通过统一的应用程序编程接口(API),可以轻松访问所有主要的商业和开源大型语言模型以及向量数据库,使你能够构建聊天机器人、智能助手等应用。
-
专为 Java 打造:借助Spring Boot 集成,能够将大模型集成到ava 应用程序中。大型语言模型与 Java 之间实现了双向集成:你可以从 Java 中调用大型语言模型,同时也允许大型语言模型反过来调用你的 Java 代码
-
智能代理、工具、检索增强生成(RAG):为常见的大语言模型操作提供了广泛的工具,涵盖从底层的提示词模板创建、聊天记忆管理和输出解析,到智能代理和检索增强生成等高级模式。
应用场景
-
你想要实现一个自定义的由人工智能驱动的聊天机器人,它可以访问你的数据,并按照你期望的方式运行:
-
客户支持聊天机器人
-
处理 / 更改 / 取消订单
-
教育助手
-
解释不清楚的部分
-
-
你想要处理大量的非结构化数据(文件、网页等),并从中提取结构化信息
-
从客户评价和支持聊天记录中提取有效评价
-
从竞争对手的网站上提取有趣的信息
-
从求职者的简历中提取有效信息
-
-
你想要生成信息
-
为你的每个客户量身定制的电子邮件
-
为你的应用程序 / 网站生成内容
-
-
你想要转换信息
-
校对和改写
-
总结/翻译
-
一、MessageWindowChatMemory
1.1 构建 AiService
接口类定义方法:通过注解进行指定 memoryId
public interface ChatMemoryService {
Flux<String> chat(@MemoryId String memoryId,@UserMessage String message);
}
1.2 配置 AiService
import dev.langchain4j.memory.chat.MessageWindowChatMemory;
import dev.langchain4j.memory.chat.TokenWindowChatMemory;
import dev.langchain4j.model.chat.StreamingChatLanguageModel;
import dev.langchain4j.model.openai.OpenAiTokenizer;
import dev.langchain4j.service.AiServices;
import org.example.langchain4jdemo3.service.ChatMemoryService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class ChatMemoryConfig {
@Bean
public ChatMemoryService chatMemoryService(StreamingChatLanguageModel qwenStreamingChatModel) {
return AiServices.builder(ChatMemoryService.class)
.streamingChatLanguageModel(qwenStreamingChatModel)
// 连续对话
.chatMemoryProvider( memoryId ->
MessageWindowChatMemory.builder()
.maxMessages(10)
.build()
)
.build();
}
}
1.3 编写调用代码
@RestController
@RequestMapping("/chatMemory")
public class ChatMemoryController {
@Autowired
private ChatMemoryService chatMemoryService;
@RequestMapping("/chat")
public Flux<String> chat(String memoryId, String question) {
return chatMemoryService.chat(memoryId, question);
}
}