IT评测·应用市场-qidao123.com技术社区

标题: 【微服务】SpringBoot整合LangChain4j 操作AI大模子实战详解 [打印本页]

作者: 钜形不锈钢水箱    时间: 2025-4-14 04:33
标题: 【微服务】SpringBoot整合LangChain4j 操作AI大模子实战详解
【微服务】SpringBoot整合LangChain4j 操作AI大模子实战详解

一、前言

随着人工智能技术的飞速发展,AI大模子已经在众多范畴展现出强大的本领,为业务拓展和商业价值提升带来了新的机会。SpringBoot作为一款广受接待的Java微服务框架,以其简洁、高效的特点深受开发者喜爱。而LangChain4j作为一款专注于AI大模子集成的开源库,为Java开发者提供了一种简单且高效的方式来接入和利用各种AI大模子。本文将详细介绍如何在SpringBoot中整合LangChain4j,实现对AI大模子的操作,资助读者快速上手并应用到实际项目中。
二、LangChain4j概述

(一)LangChain4j介绍

LangChain4j是一款基于Java的轻量级框架,专为Java开发者设计,旨在简化大型语言模子(LLMs)在Java应用中的集成。它借鉴了Python版LangChain的设计理念,提供了丰富的工具和组件,资助开发者快速构建基于LLMs的应用程序,如聊天机器人、问答体系、文本生成等。
(二)主要特点

(三)焦点组件

LangChain4j的焦点组件包括语言模子(Language Model)、记忆(Memory)、工具(Tool)等。此中,语言模子是焦点,负责生成文本;记忆用于存储对话历史,以便模子可以或许进行上下文相关的回答;工具则可以扩展模子的本领,例如进行搜索、调用API等。
(四)焦点优势

(五)焦点应用场景

LangChain4j适用于多种场景,包括但不限于:

三、SpringBoot整合LangChain4j

(一)前置预备

(二)对话本领利用

1. Low Level API利用

  1. import dev.langchain4j.model.chat.ChatLanguageModel;
  2. import dev.langchain4j.model.openai.OpenAiChatModel;
  3. @Service
  4. public class ChatService {
  5.     private final ChatLanguageModel chatModel;
  6.     public ChatService() {
  7.         this.chatModel = new OpenAiChatModel();
  8.     }
  9.     public String chat(String userMessage) {
  10.         return chatModel.generate(userMessage);
  11.     }
  12. }
复制代码
2. High Level API利用

  1. import dev.langchain4j.chain.ConversationalRetrievalChain;
  2. import dev.langchain4j.model.chat.ChatLanguageModel;
  3. import dev.langchain4j.model.openai.OpenAiChatModel;
  4. import org.springframework.stereotype.Service;
  5. @Service
  6. public class ChatService {
  7.     private final ChatLanguageModel model;
  8.     public ChatService() {
  9.         model = new OpenAiChatModel();
  10.     }
  11.     public String chat(String userMessage) {
  12.         ConversationalRetrievalChain chain = ConversationalRetrievalChain.builder()
  13.                 .chatLanguageModel(model)
  14.                 .build();
  15.         return chain.execute(userMessage);
  16.     }
  17. }
复制代码
3. 设置角色

  1. import dev.langchain4j.template.PromptTemplate;
  2. import org.springframework.stereotype.Service;
  3. @Service
  4. public class PromptService {
  5.     private final PromptTemplate promptTemplate = PromptTemplate.from(
  6.             "你是一个{{role}},请用专业的角度回答:{{question}}");
  7.     private final ChatLanguageModel chatModel;
  8.     public PromptService(ChatLanguageModel chatModel) {
  9.         this.chatModel = chatModel;
  10.     }
  11.     public String getResponse(String role, String question) {
  12.         String prompt = promptTemplate.apply(Parameters.from(
  13.                 "role", role,
  14.                 "question", question));
  15.         return chatModel.generate(prompt);
  16.     }
  17. }
复制代码
(三)会话记忆

1. Low Level API的实现

  1. import dev.langchain4j.memory.chat.MessageWindowChatMemory;
  2. import dev.langchain4j.model.chat.ChatLanguageModel;
  3. import dev.langchain4j.model.openai.OpenAiChatModel;
  4. @Service
  5. public class ChatService {
  6.     private final ChatLanguageModel chatModel;
  7.     private final MessageWindowChatMemory memory;
  8.     public ChatService() {
  9.         this.chatModel = new OpenAiChatModel();
  10.         this.memory = MessageWindowChatMemory.builder()
  11.                 .maxMessages(50)
  12.                 .build();
  13.     }
  14.     public String chat(String userMessage) {
  15.         memory.add(UserMessage.from(userMessage));
  16.         String response = chatModel.generate(memory.messages());
  17.         memory.add(AiMessage.from(response));
  18.         return response;
  19.     }
  20. }
复制代码
2. High Level API的实现

  1. import dev.langchain4j.chain.ConversationalRetrievalChain;
  2. import dev.langchain4j.model.chat.ChatLanguageModel;
  3. import dev.langchain4j.model.openai.OpenAiChatModel;
  4. import dev.langchain4j.memory.chat.MessageWindowChatMemory;
  5. @Service
  6. public class ChatService {
  7.     private final ChatLanguageModel model;
  8.     private final MessageWindowChatMemory memory;
  9.     public ChatService() {
  10.         model = new OpenAiChatModel();
  11.         memory = MessageWindowChatMemory.builder()
  12.                 .maxMessages(50)
  13.                 .build();
  14.     }
  15.     public String chat(String userMessage) {
  16.         ConversationalRetrievalChain chain = ConversationalRetrievalChain.builder()
  17.                 .chatLanguageModel(model)
  18.                 .chatMemory(memory)
  19.                 .build();
  20.         return chain.execute(userMessage);
  21.     }
  22. }
复制代码
(四)Function Calling

1. 焦点概念

Function Calling允许模子调用外部函数来获取数据或执行操作。例如,模子可以调用一个搜索API来获取最新的信息。
2. 应用场景


3. 案例代码

  1. import dev.langchain4j.agent.Agent;
  2. import dev.langchain4j.agent.AgentToolCall;
  3. import dev.langchain4j.agent.AgentToolCallResult;
  4. import dev.langchain4j.agent.ToolCall;
  5. import dev.langchain4j.agent.ToolCallResult;
  6. import dev.langchain4j.agent.tool.Tool;
  7. import dev.langchain4j.agent.tool.ToolRegistry;
  8. import dev.langchain4j.model.chat.ChatLanguageModel;
  9. import dev.langchain4j.model.openai.OpenAiChatModel;
  10. import org.springframework.stereotype.Service;
  11. @Service
  12. public class FunctionCallingService {
  13.     private final ChatLanguageModel model;
  14.     private final ToolRegistry toolRegistry;
  15.     public FunctionCallingService() {
  16.         model = new OpenAiChatModel();
  17.         toolRegistry = new ToolRegistry();
  18.     }
  19.     public String execute(String userMessage) {
  20.         Agent agent = Agent.builder()
  21.                 .chatLanguageModel(model)
  22.                 .toolRegistry(toolRegistry)
  23.                 .build();
  24.         return agent.execute(userMessage);
  25.     }
  26.     @Tool(name = "search", description = "搜索信息")
  27.     public String search(String query) {
  28.         // 实现搜索逻辑,例如调用外部搜索API
  29.         return "搜索结果:" + query;
  30.     }
  31.     @Tool(name = "weather", description = "获取天气信息")
  32.     public String getWeather(String location) {
  33.         // 实现获取天气信息的逻辑
  34.         return "天气信息:" + location;
  35.     }
  36. }
复制代码
(五)RAG(Retrieval-Augmented Generation)

1. 焦点概念

RAG是一种结合检索和生成的技术,通过检索相关文档来加强模子的生成本领。
2. 应用场景


3. 案例代码

  1. import dev.langchain4j.chain.RetrievalAugmentedGenerationChain;
  2. import dev.langchain4j.data.document.Document;
  3. import dev.langchain4j.data.document.DocumentLoader;
  4. import dev.langchain4j.data.document.FileDocumentLoader;
  5. import dev.langchain4j.data.segment.TextSegmenter;
  6. import dev.langchain4j.data.segment.TextSegmenterFactory;
  7. import dev.langchain4j.model.chat.ChatLanguageModel;
  8. import dev.langchain4j.model.openai.OpenAiChatModel;
  9. import dev.langchain4j.retrieval.Retriever;
  10. import dev.langchain4j.retrieval.vectorstore.VectorStoreRetriever;
  11. import dev.langchain4j.vectorstore.VectorStore;
  12. import dev.langchain4j.vectorstore.VectorStoreFactory;
  13. @Service
  14. public class RagService {
  15.     private final ChatLanguageModel model;
  16.     private final Retriever retriever;
  17.     public RagService() {
  18.         model = new OpenAiChatModel();
  19.         VectorStore vectorStore = VectorStoreFactory.create();
  20.         retriever = new VectorStoreRetriever(vectorStore);
  21.     }
  22.     public String rag(String userMessage) {
  23.         RetrievalAugmentedGenerationChain chain = RetrievalAugmentedGenerationChain.builder()
  24.                 .chatLanguageModel(model)
  25.                 .retriever(retriever)
  26.                 .build();
  27.         return chain.execute(userMessage);
  28.     }
  29.     public void loadDocuments() {
  30.         DocumentLoader documentLoader = new FileDocumentLoader("path/to/documents");
  31.         List<Document> documents = documentLoader.load();
  32.         TextSegmenter segmenter = TextSegmenterFactory.create();
  33.         List<TextSegment> segments = segmenter.segment(documents);
  34.         retriever.add(segments);
  35.     }
  36. }
复制代码
(六)工具调用

1. 焦点概念

工具调用允许模子调用外部工具来完成任务,例如调用API、执行下令等。
2. 应用场景


3. 案例代码

  1. import dev.langchain4j.agent.Agent;
  2. import dev.langchain4j.agent.AgentToolCall;
  3. import dev.langchain4j.agent.AgentToolCallResult;
  4. import dev.langchain4j.agent.ToolCall;
  5. import dev.langchain4j.agent.ToolCallResult;
  6. import dev.langchain4j.agent.tool.Tool;
  7. import dev.langchain4j.agent.tool.ToolRegistry;
  8. import dev.langchain4j.model.chat.ChatLanguageModel;
  9. import dev.langchain4j.model.openai.OpenAiChatModel;
  10. import org.springframework.stereotype.Service;
  11. @Service
  12. public class ToolCallingService {
  13.     private final ChatLanguageModel model;
  14.     private final ToolRegistry toolRegistry;
  15.     public ToolCallingService() {
  16.         model = new OpenAiChatModel();
  17.         toolRegistry = new ToolRegistry();
  18.     }
  19.     public String execute(String userMessage) {
  20.         Agent agent = Agent.builder()
  21.                 .chatLanguageModel(model)
  22.                 .toolRegistry(toolRegistry)
  23.                 .build();
  24.         return agent.execute(userMessage);
  25.     }
  26.     @Tool(name = "search", description = "搜索信息")
  27.     public String search(String query) {
  28.         // 实现搜索逻辑,例如调用外部搜索API
  29.         return "搜索结果:" + query;
  30.     }
  31.     @Tool(name = "weather", description = "获取天气信息")
  32.     public String getWeather(String location) {
  33.         // 实现获取天气信息的逻辑
  34.         return "天气信息:" + location;
  35.     }
  36. }
复制代码
(七)自界说模子

1. 焦点概念

自界说模子允许开发者根据需求实现自己的语言模子,例如利用当地模子或自界说逻辑。
2. 应用场景


3. 案例代码

  1. import dev.langchain4j.model.chat.ChatLanguageModel;
  2. import dev.langchain4j.model.chat.ChatMessage;
  3. import dev.langchain4j.model.chat.ChatResponse;
  4. import org.springframework.stereotype.Service;
  5. @Service
  6. public class CustomModelService {
  7.     private final ChatLanguageModel customModel;
  8.     public CustomModelService() {
  9.         customModel = new CustomChatModel();
  10.     }
  11.     public String generate(String prompt) {
  12.         return customModel.generate(prompt);
  13.     }
  14.     public static class CustomChatModel implements ChatLanguageModel {
  15.         @Override
  16.         public ChatResponse generate(List<ChatMessage> messages) {
  17.             // 实现自定义逻辑
  18.             String response = "自定义模型生成的响应";
  19.             return ChatResponse.builder()
  20.                     .message(AiMessage.from(response))
  21.                     .build();
  22.         }
  23.     }
  24. }
复制代码
(八)自界说工具

1. 焦点概念

自界说工具允许开发者根据需求实现自己的工具,例如调用外部API或执行特定操作。
2. 应用场景


3. 案例代码

  1. import dev.langchain4j.agent.Agent;
  2. import dev.langchain4j.agent.AgentToolCall;
  3. import dev.langchain4j.agent.AgentToolCallResult;
  4. import dev.langchain4j.agent.ToolCall;
  5. import dev.langchain4j.agent.ToolCallResult;
  6. import dev.langchain4j.agent.tool.Tool;
  7. import dev.langchain4j.agent.tool.ToolRegistry;
  8. import dev.langchain4j.model.chat.ChatLanguageModel;
  9. import dev.langchain4j.model.openai.OpenAiChatModel;
  10. import org.springframework.stereotype.Service;
  11. @Service
  12. public class CustomToolService {
  13.     private final ChatLanguageModel model;
  14.     private final ToolRegistry toolRegistry;
  15.     public CustomToolService() {
  16.         model = new OpenAiChatModel();
  17.         toolRegistry = new ToolRegistry();
  18.     }
  19.     public String execute(String userMessage) {
  20.         Agent agent = Agent.builder()
  21.                 .chatLanguageModel(model)
  22.                 .toolRegistry(toolRegistry)
  23.                 .build();
  24.         return agent.execute(userMessage);
  25.     }
  26.     @Tool(name = "customTool", description = "自定义工具")
  27.     public String customTool(String input) {
  28.         // 实现自定义逻辑
  29.         return "自定义工具的响应:" + input;
  30.     }
  31. }
复制代码
(九)自界说链

1. 焦点概念

自界说链允许开发者根据需求实现自己的链,例如将多个任务串联起来。
2. 应用场景


3. 案例代码

  1. import dev.langchain4j.chain.Chain;
  2. import dev.langchain4j.model.chat.ChatLanguageModel;
  3. import dev.langchain4j.model.openai.OpenAiChatModel;
  4. import org.springframework.stereotype.Service;
  5. @Service
  6. public class CustomChainService {
  7.     private final ChatLanguageModel model;
  8.     public CustomChainService() {
  9.         model = new OpenAiChatModel();
  10.     }
  11.     public String execute(String userMessage) {
  12.         CustomChain chain = new CustomChain(model);
  13.         return chain.execute(userMessage);
  14.     }
  15.     public static class CustomChain implements Chain {
  16.         private final ChatLanguageModel model;
  17.         public CustomChain(ChatLanguageModel model) {
  18.             this.model = model;
  19.         }
  20.         @Override
  21.         public String execute(String input) {
  22.             // 实现自定义逻辑
  23.             String response = model.generate(input);
  24.             // 进行后续处理
  25.             return response;
  26.         }
  27.     }
  28. }
复制代码
四、实战案例

(一)案例背景

假设我们正在开发一个智能客服体系,需要实现以下功能:
(二)项目结构

  1. src/main/java/com/example/aiassist
  2. ├── controller
  3. │   ├── AiController.java
  4. ├── service
  5. │   ├── ChatService.java
  6. │   ├── FunctionCallingService.java
  7. │   ├── RagService.java
  8. │   ├── ToolCallingService.java
  9. ├── model
  10. │   ├── CustomChatModel.java
  11. │   ├── CustomTool.java
  12. ├── config
  13. │   ├── AppConfig.java
复制代码
(三)代码实现

1. 控制器

  1. import org.springframework.beans.factory.annotation.Autowired;
  2. import org.springframework.web.bind.annotation.*;
  3. @RestController
  4. @RequestMapping("/api/ai")
  5. public class AiController {
  6.     private final ChatService chatService;
  7.     private final FunctionCallingService functionCallingService;
  8.     private final RagService ragService;
  9.     private final ToolCallingService toolCallingService;
  10.     @Autowired
  11.     public AiController(ChatService chatService, FunctionCallingService functionCallingService, RagService ragService, ToolCallingService toolCallingService) {
  12.         this.chatService = chatService;
  13.         this.functionCallingService = functionCallingService;
  14.         this.ragService = ragService;
  15.         this.toolCallingService = toolCallingService;
  16.     }
  17.     @PostMapping("/chat")
  18.     public String chat(@RequestBody String userMessage) {
  19.         return chatService.chat(userMessage);
  20.     }
  21.     @PostMapping("/function-calling")
  22.     public String functionCalling(@RequestBody String userMessage) {
  23.         return functionCallingService.execute(userMessage);
  24.     }
  25.     @PostMapping("/rag")
  26.     public String rag(@RequestBody String userMessage) {
  27.         return ragService.rag(userMessage);
  28.     }
  29.     @PostMapping("/tool-calling")
  30.     public String toolCalling(@RequestBody String userMessage) {
  31.         return toolCallingService.execute(userMessage);
  32.     }
  33. }
复制代码
2. 服务层

  1. import dev.langchain4j.agent.Agent;
  2. import dev.langchain4j.agent.AgentToolCall;
  3. import dev.langchain4j.agent.AgentToolCallResult;
  4. import dev.langchain4j.agent.ToolCall;
  5. import dev.langchain4j.agent.ToolCallResult;
  6. import dev.langchain4j.agent.tool.Tool;
  7. import dev.langchain4j.agent.tool.ToolRegistry;
  8. import dev.langchain4j.chain.ConversationalRetrievalChain;
  9. import dev.langchain4j.chain.RetrievalAugmentedGenerationChain;
  10. import dev.langchain4j.data.document.Document;
  11. import dev.langchain4j.data.document.DocumentLoader;
  12. import dev.langchain4j.data.document.FileDocumentLoader;
  13. import dev.langchain4j.data.segment.TextSegmenter;
  14. import dev.langchain4j.data.segment.TextSegmenterFactory;
  15. import dev.langchain4j.model.chat.ChatLanguageModel;
  16. import dev.langchain4j.model.openai.OpenAiChatModel;
  17. import dev.langchain4j.retrieval.Retriever;
  18. import dev.langchain4j.retrieval.vectorstore.VectorStoreRetriever;
  19. import dev.langchain4j.vectorstore.VectorStore;
  20. import dev.langchain4j.vectorstore.VectorStoreFactory;
  21. import org.springframework.stereotype.Service;
  22. @Service
  23. public class ChatService {
  24.     private final ChatLanguageModel model;
  25.     private final ToolRegistry toolRegistry;
  26.     private final Retriever retriever;
  27.     public ChatService() {
  28.         model = new OpenAiChatModel();
  29.         toolRegistry = new ToolRegistry();
  30.         VectorStore vectorStore = VectorStoreFactory.create();
  31.         retriever = new VectorStoreRetriever(vectorStore);
  32.     }
  33.     public String chat(String userMessage) {
  34.         ConversationalRetrievalChain chain = ConversationalRetrievalChain.builder()
  35.                 .chatLanguageModel(model)
  36.                 .toolRegistry(toolRegistry)
  37.                 .retriever(retriever)
  38.                 .build();
  39.         return chain.execute(userMessage);
  40.     }
  41.     public String functionCalling(String userMessage) {
  42.         Agent agent = Agent.builder()
  43.                 .chatLanguageModel(model)
  44.                 .toolRegistry(toolRegistry)
  45.                 .build();
  46.         return agent.execute(userMessage);
  47.     }
  48.     public String rag(String userMessage) {
  49.         RetrievalAugmentedGenerationChain chain = RetrievalAugmentedGenerationChain.builder()
  50.                 .chatLanguageModel(model)
  51.                 .retriever(retriever)
  52.                 .build();
  53.         return chain.execute(userMessage);
  54.     }
  55.     public String toolCalling(String userMessage) {
  56.         Agent agent = Agent.builder()
  57.                 .chatLanguageModel(model)
  58.                 .toolRegistry(toolRegistry)
  59.                 .build();
  60.         return agent.execute(userMessage);
  61.     }
  62.     @Tool(name = "search", description = "搜索信息")
  63.     public String search(String query) {
  64.         // 实现搜索逻辑
  65.         return "搜索结果:" + query;
  66.     }
  67.     @Tool(name = "weather", description = "获取天气信息")
  68.     public String getWeather(String location) {
  69.         // 实现获取天气信息的逻辑
  70.         return "天气信息:" + location;
  71.     }
  72.     public void loadDocuments() {
  73.         DocumentLoader documentLoader = new FileDocumentLoader("path/to/documents");
  74.         List<Document> documents = documentLoader.load();
  75.         TextSegmenter segmenter = TextSegmenterFactory.create();
  76.         List<TextSegment> segments = segmenter.segment(documents);
  77.         retriever.add(segments);
  78.     }
  79. }
复制代码
3. 自界说模子

  1. import dev.langchain4j.model.chat.ChatLanguageModel;
  2. import dev.langchain4j.model.chat.ChatMessage;
  3. import dev.langchain4j.model.chat.ChatResponse;
  4. import org.springframework.stereotype.Service;
  5. @Service
  6. public class CustomChatModelService {
  7.     private final ChatLanguageModel customModel;
  8.     public CustomChatModelService() {
  9.         customModel = new CustomChatModel();
  10.     }
  11.     public String generate(String prompt) {
  12.         return customModel.generate(prompt);
  13.     }
  14.     public static class CustomChatModel implements ChatLanguageModel {
  15.         @Override
  16.         public ChatResponse generate(List<ChatMessage> messages) {
  17.             // 实现自定义逻辑
  18.             String response = "自定义模型生成的响应";
  19.             return ChatResponse.builder()
  20.                     .message(AiMessage.from(response))
  21.                     .build();
  22.         }
  23.     }
  24. }
复制代码
4. 自界说工具

  1. import dev.langchain4j.agent.Agent;
  2. import dev.langchain4j.agent.AgentToolCall;
  3. import dev.langchain4j.agent.AgentToolCallResult;
  4. import dev.langchain4j.agent.ToolCall;
  5. import dev.langchain4j.agent.ToolCallResult;
  6. import dev.langchain4j.agent.tool.Tool;
  7. import dev.langchain4j.agent.tool.ToolRegistry;
  8. import dev.langchain4j.model.chat.ChatLanguageModel;
  9. import dev.langchain4j.model.openai.OpenAiChatModel;
  10. import org.springframework.stereotype.Service;
  11. @Service
  12. public class CustomToolService {
  13.     private final ChatLanguageModel model;
  14.     private final ToolRegistry toolRegistry;
  15.     public CustomToolService() {
  16.         model = new OpenAiChatModel();
  17.         toolRegistry = new ToolRegistry();
  18.     }
  19.     public String execute(String userMessage) {
  20.         Agent agent = Agent.builder()
  21.                 .chatLanguageModel(model)
  22.                 .toolRegistry(toolRegistry)
  23.                 .build();
  24.         return agent.execute(userMessage);
  25.     }
  26.     @Tool(name = "customTool", description = "自定义工具")
  27.     public String customTool(String input) {
  28.         // 实现自定义逻辑
  29.         return "自定义工具的响应:" + input;
  30.     }
  31. }
复制代码
五、总结

通过本文的详细介绍,我们已经完成了在SpringBoot中整合LangChain4j的全过程。从基础的对话本领、会话记忆,到高级的Function Calling、RAG、工具调用和自界说功能,LangChain4j为Java开发者提供了一个强大且灵活的框架来构建基于AI大模子的应用程序。通过实战案例,我们展示了如何将这些功能应用到实际项目中,资助读者更好地理解和掌握。
在实际开发中,开发者可以根据详细需求灵活选择和组合LangChain4j提供的功能,充实发挥AI大模子的本领,为用户提供更加智能和高效的解决方案。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 IT评测·应用市场-qidao123.com技术社区 (https://dis.qidao123.com/) Powered by Discuz! X3.4