找回密码
 立即注册
首页 业界区 业界 Langchain4j-0-基本概念与依赖导入

Langchain4j-0-基本概念与依赖导入

吉娅寿 2025-8-17 16:42:56
模型开发和常规开发层级对比


  • Prompt:好比UI层,进行用户交互
  • Langchain4j, Spring AI:好比Controller,调用AI大模型
  • 各类AI大模型:好比Service,提供人工智能服务
  • 向量数据库:好比Mapper,进行数据存储
    1.png

大模型调用三件套

2.png

导入依赖

导入 Lanchain4j 依赖

导入 BOM 包管理版本

参考文档: 快速开始
  1. <properties>  
  2.       
  3.     <langchain4j.version>1.0.1</langchain4j.version>  
  4. </properties>
  5. <dependencyManagement>  
  6.         <dependencies>
  7.                
  8.         <dependency>  
  9.             <groupId>dev.langchain4j</groupId>  
  10.             langchain4j-bom</artifactId>  
  11.             <version>${langchain4j.version}</version>  
  12.             <type>pom</type>  
  13.             <scope>import</scope>  
  14.                 </dependency>
  15.         <dependencies>
  16. </dependencyManagement>
复制代码
导入原生依赖包


  • 导入 Low-Level API 和 High-Level API 的依赖包
  1.   
  2. <dependency>  
  3.     <groupId>dev.langchain4j</groupId>  
  4.     langchain4j-open-ai</artifactId>  
  5. </dependency>  
  6.   
  7. <dependency>  
  8.     <groupId>dev.langchain4j</groupId>  
  9.     langchain4j</artifactId>  
  10. </dependency>
复制代码
导入SpringBoot 集成依赖包

参考文档: SprintBoot 集成

  • 导入和 SpringBoot 的整合包
  1. <dependency>
  2.     <groupId>dev.langchain4j</groupId>
  3.     langchain4j-open-ai-spring-boot-starter</artifactId>
  4.     <version>1.0.0-beta3</version>
  5. </dependency>
  6. <dependency>
  7.     <groupId>dev.langchain4j</groupId>
  8.     langchain4j-spring-boot-starter</artifactId>
  9.     <version>1.0.0-beta3</version>
  10. </dependency>
复制代码
第三方集成 (通义千问为例)

参考文档:通义千问
导入 BOM 包管理版本
  1. <properties>  
  2.       
  3.     <langchain4j-community.version>1.0.1-beta6</langchain4j-community.version>  
  4. </properties>
  5. <dependencyManagement>  
  6.         <dependencies>
  7.                   
  8.                  <dependency>  
  9.                          <groupId>dev.langchain4j</groupId>  
  10.                          langchain4j-community-bom</artifactId>  
  11.                          <version>${langchain4j-community.version}</version>  
  12.                          <type>pom</type>  
  13.                          <scope>import</scope>  
  14.                  </dependency>
  15.         </dependencies>  
  16. </dependencyManagement>
复制代码
导入 SpringBoot 集成依赖包
  1. <dependency>  
  2.         <groupId>dev.langchain4j</groupId>  
  3.         langchain4j-community-dashscope-spring-boot-starter</artifactId>  
  4. </dependency>
复制代码
创建 ChatModel

APIKey 要从环境变量中获取。 设置方法:百炼平台文档
  1. @Bean  
  2. public ChatModel chatModelQwen()  
  3. {  
  4.     System.out.println("ALIQWEN_API: "+System.getenv("ALIQWEN_API"));  
  5.     return OpenAiChatModel.builder()  
  6.                     .apiKey(System.getenv("ALIQWEN_API"))  
  7.                     .modelName("qwen-plus")  
  8.                     .baseUrl("https://dashscope.aliyuncs.com/compatible-mode/v1")  
  9.             .build();  
  10. }
复制代码
创建 AI Service

原生整合:手动创建 AI Service
  1. // ChatAssistant.java
  2. public interface ChatAssistant  
  3. {  
  4.     String chat(String prompt);  
  5. }
  6. // Config.java
  7. @Bean  
  8. public ChatAssistant chatAssistant(@Qualifier("qwen") ChatModel chatModelQwen)  
  9. {  
  10.     return AiServices.create(ChatAssistant.class, chatModelQwen);  
  11. }
  12. // Controller.java
  13. @RestController  
  14. @Slf4j  
  15. public class HighApiController  
  16. {  
  17.     @Resource  
  18.     private ChatAssistant chatAssistant;  
  19.   
  20.     @GetMapping(value = "/highapi/highapi")  
  21.     public String highApi(@RequestParam(value = "prompt", defaultValue = "你是谁") String prompt)  
  22.     {  
  23.         return chatAssistant.chat(prompt);  
  24.     }  
  25. }
复制代码

  • 和 SpringBoot 整合:声明式创建 AI Service
  1. // ChatAssiatant.java
  2. @AiService  
  3. public interface ChatAssistant  
  4. {  
  5.     String chat(String prompt);  
  6. }
  7. // Controller.java
  8. @RestController  
  9. public class DeclarativeAIServiceController  
  10. {  
  11.     @Resource  
  12.     private ChatAssistant chatAssistant;   
  13.   
  14.     @GetMapping(value = "/lc4j/boot/chatAssistant")  
  15.     public String deepseekAI(@RequestParam(value = "prompt", defaultValue = "你是谁") String prompt)  
  16.     {  
  17.         return chatAssistant.chat(prompt);   
  18.     }  
  19.   
  20. }
复制代码
@AIService(wiringMode = EXPLICIT, chatModel = "chatModelQwen") 可以指定改 AI Service 使用的是 chatModelQwen 模型。
模型参数
  1. // Config.java
  2. @Configuration  
  3. public class LLMConfig  
  4. {  
  5.     @Bean(name = "qwen")  
  6.     public ChatModel chatModelQwen()  
  7.     {  
  8.         return OpenAiChatModel.builder()  
  9.                     .apiKey(System.getenv("ALIQWEN_API"))  
  10.                     .modelName("qwen-plus")  
  11.                     .baseUrl("https://dashscope.aliyuncs.com/compatible-mode/v1")  
  12.                 .logRequests(true) // 日志级别设置为debug才有效  
  13.                 .logResponses(true)// 日志级别设置为debug才有效  
  14.                 .listeners(List.of(new TestChatModelListener()))  // 事件监听
  15.                 .maxRetries(2) // 最大重试次数
  16.                 .timeout(Duration.ofSeconds(5)) // 请求大模型的超时时间
  17.                 .build();  
  18.     }  
  19. }
  20. // Linstener.java
  21. @Slf4j  
  22. public class TestChatModelListener implements ChatModelListener  
  23. {  
  24.     @Override  
  25.     public void onRequest(ChatModelRequestContext requestContext)  
  26.     {  
  27.   
  28.         // onRequest配置的k:v键值对,在onResponse阶段可以获得,上下文传递参数好用  
  29.         String uuidValue = IdUtil.simpleUUID();  
  30.         requestContext.attributes().put("TraceID",uuidValue);  
  31.         log.info("请求参数requestContext:{}", requestContext+"\t"+uuidValue);  
  32.     }  
  33.   
  34.     @Override  
  35.     public void onResponse(ChatModelResponseContext responseContext)  
  36.     {  
  37.         Object object = responseContext.attributes().get("TraceID");  
  38.   
  39.         log.info("返回结果responseContext:{}", object);  
  40.     }  
  41.   
  42.     @Override  
  43.     public void onError(ChatModelErrorContext errorContext)  
  44.     {  
  45.         log.error("请求异常ChatModelErrorContext:{}", errorContext);  
  46.     }  
  47. }
复制代码
图片生产模型

使用 qwen-vl-max 模型
  1. // Config.java
  2. @Configuration  
  3. public class LLMConfig  
  4. {  
  5.     @Bean  
  6.     public ChatModel ImageModel() {  
  7.         return OpenAiChatModel.builder()  
  8.                 .apiKey(System.getenv("ALIQWEN_API"))  
  9.                 //qwen-vl-max 是一个多模态大模型,支持图片和文本的结合输入,适用于视觉-语言任务。  
  10.                 .modelName("qwen-vl-max")  
  11.                 .baseUrl("https://dashscope.aliyuncs.com/compatible-mode/v1")  
  12.                 .build();  
  13.     }
  14. }
复制代码
发送用户消息:

  • 图片转 Base 64 编码
  • 构造请求消息 UserMessage :包含文字和转码后的图片
  • 调用 .chat 接口
  • 打印请求结果
  1. // ImageModeController.java
  2. @RestController  
  3. @Slf4j  
  4. public class ImageModelController  
  5. {  
  6.     @Autowired  
  7.     private ChatModel chatModel;  
  8.   
  9.     @Value("classpath:static/images/mi.jpg")  
  10.     private Resource resource;//import org.springframework.core.io.Resource;  
  11.   
  12.     /**  
  13.     * @Description: 通过Base64编码将图片转化为字符串  
  14.      *              结合ImageContent和TextContent形成UserMessage一起发送到模型进行处理。  
  15.     * @Auther: zzyybs@126.com  
  16.      *     *测试地址:http://localhost:9006/image/call  
  17.     */    @GetMapping(value = "/image/call")  
  18.     public String readImageContent() throws IOException  
  19.     {  
  20.         String result = null;  
  21.   
  22.         //第一步,图片转码:通过Base64编码将图片转化为字符串  
  23.         byte[] byteArray = resource.getContentAsByteArray();  
  24.         String base64Data = Base64.getEncoder().encodeToString(byteArray);  
  25.   
  26.         //第二步,提示词指定:结合ImageContent和TextContent一起发送到模型进行处理。  
  27.         UserMessage userMessage = UserMessage.from(  
  28.                 TextContent.from("从下面图片种获取来源网站名称,股价走势和5月30号股价"),  
  29.                 ImageContent.from(base64Data, "image/jpg")  
  30.         );  
  31.         //第三步,API调用:使用OpenAiChatModel来构建请求,并通过chat()方法调用模型。  
  32.         //请求内容包括文本提示和图片,模型会根据输入返回分析结果。  
  33.         ChatResponse chatResponse = chatModel.chat(userMessage);  
  34.   
  35.         //第四步,解析与输出:从ChatResponse中获取AI大模型的回复,打印出处理后的结果。  
  36.         result = chatResponse.aiMessage().text();  
  37.   
  38.         //后台打印  
  39.         System.out.println(result);  
  40.   
  41.         //返回前台  
  42.         return result;  
  43.     }  
  44. }
复制代码
来源:豆瓜网用户自行投稿发布,如果侵权,请联系站长删除

相关推荐

您需要登录后才可以回帖 登录 | 立即注册