当前位置: 首页 > news >正文

LangChain4j低阶+高阶Api+日志配置+监听器+重试机制+超时机制

目录

    • 大模型中的token与Web开发中的token
    • 环境准备
    • 低阶Api
    • 高阶Api
    • 常用配置
      • 日志配置
      • 监听器
      • 重试机制
      • 超时机制
    • 总结

在这里插入图片描述

大模型中的token与Web开发中的token


1. 大模型中的token

在大模型中,token 是模型用来表示自然语言文本的基本单位,用于将自然语言拆解为模型可理解的数字序列。

2. Web开发中的token

在 Web 开发中,token 是用于身份验证和授权的一种加密字符串,通常作为请求的凭证或加密数据载体。

3. 两者有什么区别

  • 目的不同: 大模型中的token是为了将文本分割成可处理的单元,便于进行计算。而Web开发中的token主要用于安全传递用户身份信息。
  • 生成方式不同: 大模型中的token通过特定的算法对文本进行分割得到。而Web开发中的token通常是使用加密算法生成唯一字符串。
  • 应用场景不同: 大模型中的token应用于文本分析、机器翻译等任务。而Web开发中的token通常用于用户登录、API调用等领域。

环境准备


1. 引入依赖

<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- LangChain4j原生 基础--><dependency><groupId>dev.langchain4j</groupId><artifactId>langchain4j-open-ai</artifactId></dependency><!-- LangChain4j原生 高阶--><dependency><groupId>dev.langchain4j</groupId><artifactId>langchain4j</artifactId></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency>
</dependencies>

2. yml配置

server:port: 9003spring:application:name: langchain4j-low-high-api

3. 主启动类

@SpringBootApplication
public class LowHighApiLangChain4jApp {public static void main(String[] args) {SpringApplication.run(LowHighApiLangChain4jApp.class, args);}
}

低阶Api


1. 配置类 LLMConfig

@Configuration
public class LLMConfig {@Bean(name = "qwen")public ChatModel chatModelQwen() {return OpenAiChatModel.builder().apiKey(System.getenv("ALIYUN_KEY")).modelName("qwen-plus").baseUrl("https://dashscope.aliyuncs.com/compatible-mode/v1").build();}@Bean(name = "deepseek")public ChatModel chatModelDeepSeek() {return OpenAiChatModel.builder().apiKey(System.getenv("DEEPSEEK_KEY")).modelName("deepseek-chat").baseUrl("https://api.deepseek.com/v1").build();}
}

2. 控制类 LowApiLangChain4jController

@RestController
@RequestMapping("/lowapi")
public class LowApiLangChain4jController {@Resource(name = "qwen")private ChatModel chatModelQwen;@Resource(name = "deepseek")private ChatModel chatModelDeepSeek;// 低阶api基本使用// http://localhost:9003/lowapi/qwen/chat?msg=如何学习java@GetMapping(value = "/qwen/chat")public String qwenChat(@RequestParam(value = "msg", defaultValue = "你是谁") String msg) {return chatModelQwen.chat(msg);}// http://localhost:9003/lowapi/deepseek/chat?msg=如何学习java@GetMapping(value = "/deepseek/chat")public String deepseekChat(@RequestParam(value = "msg", defaultValue = "你是谁") String msg) {return chatModelDeepSeek.chat(msg);}// token用量的底层api示例// http://localhost:9003/lowapi/qwen/test@GetMapping(value = "/qwen/test")public String QwenTest(@RequestParam(value = "msg", defaultValue = "你是谁") String msg) {ChatResponse chatResponse = chatModelQwen.chat(UserMessage.from(msg));String result = chatResponse.aiMessage().text();// token用量计算的底层apiTokenUsage tokenUsage = chatResponse.tokenUsage();return result + "\n" + tokenUsage;}
}

3. 测试

  • 访问 http://localhost:9003/lowapi/qwen/test
    在这里插入图片描述

高阶Api


本次使用LangChain4j与SpringBoot的原生整合方式,不需要标注@AiService注解。

1. 自定义高阶 ChatAssistant 接口

public interface ChatAssistant {String chat(String msg);
}

2. 配置类 LLMConfig

@Configuration
public class LLMConfig {@Bean(name = "qwen")public ChatModel chatModelQwen() {return OpenAiChatModel.builder().apiKey(System.getenv("ALIYUN_KEY")).modelName("qwen-plus").baseUrl("https://dashscope.aliyuncs.com/compatible-mode/v1").build();}@Bean(name = "deepseek")public ChatModel chatModelDeepSeek() {return OpenAiChatModel.builder().apiKey(System.getenv("DEEPSEEK_KEY")).modelName("deepseek-chat").baseUrl("https://api.deepseek.com/v1").build();}// 高阶api@Beanpublic ChatAssistant chatAssistant(@Qualifier("deepseek") ChatModel chatModelDeepSeek) {return AiServices.create(ChatAssistant.class, chatModelDeepSeek);}
}

3. 控制类 HighApiLangChain4jController

@RestController
@RequestMapping("/highapi")
public class HighApiLangChain4jController {@Resourceprivate ChatAssistant chatAssistant;// 高阶api基本使用// http://localhost:9003/highapi/chat?msg=如何学习java@GetMapping(value = "/chat")public String chat(@RequestParam(value = "msg", defaultValue = "你是谁") String msg) {return chatAssistant.chat(msg);}
}

4. 测试

  • 访问 http://localhost:9003/highapi/chat?msg=如何学习java
    在这里插入图片描述

常用配置


日志配置

只有日志级别为DEBUG,同时配置上langchain4j的日志输出开关才有效

logging:level:dev:langchain4j: DEBUG
@Configuration
public class LLMConfig {@Bean(name = "qwen")public ChatModel chatModelQwen() {return OpenAiChatModel.builder().apiKey(System.getenv("ALIYUN_KEY")).modelName("qwen-plus").baseUrl("https://dashscope.aliyuncs.com/compatible-mode/v1").logRequests(true)   // 日志级别设置为DEBUG才有效.logResponses(true)  // 日志级别设置为DEBUG才有效.build();}
}

监听器

@Slf4j
public class MyChatModelListener implements ChatModelListener {@Overridepublic void onRequest(ChatModelRequestContext requestContext) {String uuid = UUID.randomUUID().toString();requestContext.attributes().put("uuid", uuid);log.info("请求参数requestContext: " + requestContext + "\t" + uuid);}@Overridepublic void onResponse(ChatModelResponseContext responseContext) {Object uuid = responseContext.attributes().get("uuid");log.info("返回结果responseContext: " + responseContext + "\t" + uuid);}@Overridepublic void onError(ChatModelErrorContext errorContext) {log.info("请求异常errorContext: " + errorContext);}
}
@Configuration
public class LLMConfig {@Bean(name = "qwen")public ChatModel chatModelQwen() {return OpenAiChatModel.builder().apiKey(System.getenv("ALIYUN_KEY")).modelName("qwen-plus").baseUrl("https://dashscope.aliyuncs.com/compatible-mode/v1").listeners(List.of(new MyChatModelListener()))  // 监听器.build();}
}

重试机制

默认重试3次

@Configuration
public class LLMConfig {@Bean(name = "qwen")public ChatModel chatModelQwen() {return OpenAiChatModel.builder().apiKey(System.getenv("ALIYUN_KEY")).modelName("qwen-plus").baseUrl("https://dashscope.aliyuncs.com/compatible-mode/v1").maxRetries(2)  // 重试机制.build();}
}

超时机制

@Configuration
public class LLMConfig {@Bean(name = "qwen")public ChatModel chatModelQwen() {return OpenAiChatModel.builder().apiKey(System.getenv("ALIYUN_KEY")).modelName("qwen-plus").baseUrl("https://dashscope.aliyuncs.com/compatible-mode/v1").timeout(Duration.ofSeconds(5))  // 向大模型发送请求时,如在指定时间内没有收到响应,该请求将被中断并报request timed out.build();}
}

总结


以上主要介绍了 LangChain4j 低阶和高阶Api、日志配置、监听器、重试机制、超时机制相关知识,想了解更多 LangChain4j 知识的小伙伴请参考 LangChain4j 官网 进行学习,学习更多 LangChain4j 实战实用技巧的小伙伴,请关注后期发布的文章,认真看完一定能让你有所收获。

http://www.lryc.cn/news/600691.html

相关文章:

  • 【LeetCode 热题 100】131. 分割回文串——回溯
  • 算法竞赛阶段二-数据结构(35)数据结构单链表模拟实现
  • Android-广播详解
  • golang实现一个定时引擎,功能包括按照corntab的时间任务实时增加、修改、删除定时任务
  • 常见sql深入优化( 二)
  • 一文学会c++list
  • 激光雷达-相机标定工具:支持普通相机和鱼眼相机的交互式标定
  • 二叉搜索树(Binary Search Tree)详解与java实现
  • Linux 如何统计系统上各个用户登录(或者登出)记录出现的次数?
  • Android-三种持久化方式详解
  • 摘录-打造第二大脑
  • J2EE模式---表现层集成模式
  • C++ TAP(基于任务的异步编程模式)
  • Web后端进阶:springboot原理(面试多问)
  • React入门学习——指北指南(第五节)
  • JavaScript手录06-函数
  • 【RK3568 PWM 子系统(SG90)驱动开发详解】
  • 数据赋能(336)——技术平台——智能化运营
  • Java动态调试技术原理
  • 【RocketMQ】一分钟了解RocketMQ
  • 告别复杂配置!Spring Boot优雅集成百度OCR的终极方案
  • Windows 平台源码部署 Dify教程(不依赖 Docker)
  • 《C++ list 完全指南:从基础到高效使用》
  • Linux——线程同步
  • InvokeRepeating避免嵌套调用
  • C++编程学习(第16天)
  • 7月26日京东秋招第一场第一题
  • 【第二章-数据的表示和运算】
  • 基于java的在线教育平台管理系统、在线学习系统的设计与实现
  • 【机器学习-2】 | 决策树算法基础/信息熵