LangChain4j 初体验

0 阅读2分钟

介绍

LangChain4j 的目标是简化将 LLMs 集成到 Java 应用中。

LangChain4j 支持很多大语言模型:docs.langchain4j.dev/integration…

最低版本支持:JDK 17

快速入门(调用阿里百炼)

【1】准备依赖

以调用 Qwen(阿里-通义千问)模型为例,引入 LangChain4j 的 OpenAI 依赖。(Low-level API 级别)

 <dependency>
     <groupId>dev.langchain4j</groupId>
     <artifactId>langchain4j-open-ai</artifactId>
     <version>1.11.0</version>
 </dependency>

为什么调用 Qwen 模型却要引入 OpenAI 依赖?这貌似看起来好像没什么关系。

答案:因为 Qwen 兼容了 OpenAI 的 API,因此可以使用 OpenAI 依赖。

image-20260214173959128

如果你想使用 High-level API 可以引入下面的依赖

 <dependency>
     <groupId>dev.langchain4j</groupId>
     <artifactId>langchain4j</artifactId>
     <version>1.11.0</version>
 </dependency>

如果你不想管理版本号,那么可以在父工程配置如下依赖

 <dependencyManagement>
     <dependencies>
         <dependency>
             <groupId>dev.langchain4j</groupId>
             <artifactId>langchain4j-bom</artifactId>
             <version>1.11.0</version>
             <type>pom</type>
             <scope>import</scope>
         </dependency>
     </dependencies>
 </dependencyManagement>

【2】登录百炼平台,获取 API_KEY

image-20260214173110987

在本地环境配置好 API_KEY 之后,Java 中通过如下方式获取:

 String apiKey = System.getenv("ALI_QWEN_API_KEY");

【3】获取模型信息

获取你要调用的模型名称,如 qwen-plus 就是这个模型的名称:

image-20260214173337989

往下滑可以看到代码示例,其中有一个 base_url,这就是你的请求地址。

image-20260214173528061

【4】配置模型信息

配置模型至少需要知道三个信息

  • API_KEY 调用 API 的凭证
  • model_name 模型名称
  • base_url 调用模型的地址
 @Configuration
 public class LLMConfig {
     @Bean
     public ChatModel chatModelQwen() {
         return OpenAiChatModel.builder()
                 .apiKey(System.getenv("ALI_QWEN_API_KEY"))
                 .modelName("qwen-plus")
                 .baseUrl("https://dashscope.aliyuncs.com/compatible-mode/v1")
                 .build();
     }
 }

【5】调用模型

 @RestController
 public class DemoController {
     @Resource
     private ChatModel chatModel;
 
     @GetMapping("/langchain4j/hello")
     public String hello(@RequestParam(value = "question", defaultValue = "你是谁?") String question) {
         String result = chatModel.chat(question);
         return result;
     }
 }

【了解】第三方 AI 平台整合

LangChain4j 集成了很多 LLM 提供商:docs.langchain4j.dev/integration…

阿里百炼平台(DashScope)便在其中:docs.langchain4j.dev/integration…

普通

 <dependency>
     <groupId>dev.langchain4j</groupId>
     <artifactId>langchain4j-community-dashscope</artifactId>
     <version>${latest version here}</version>
 </dependency>

整合 SpringBoot

 <dependency>
     <groupId>dev.langchain4j</groupId>
     <artifactId>langchain4j-community-dashscope-spring-boot-starter</artifactId>
     <version>${latest version here}</version>
 </dependency>

BOM 统一管理

如果你不想自己管理版本号,在父工程配置 BOM 依赖即可:

 <dependencyManagement>
     <dependency>
         <groupId>dev.langchain4j</groupId>
         <artifactId>langchain4j-community-bom</artifactId>
         <version>${latest version here}</version>
         <type>pom</type>
         <scope>import</scope>
     </dependency>
 </dependencyManagement>

模型参数设置

日志、监控、重试机制、超时机制

 @Configuration
 public class LLMConfig {
     @Bean("qwen")
     public ChatModel chatModelQwen() {
         return OpenAiChatModel.builder()
                 .apiKey(System.getenv("ALI_QWEN_API_KEY"))
                 .modelName("qwen-plus")
                 .baseUrl("https://dashscope.aliyuncs.com/compatible-mode/v1")
                 .logRequests(true) // request 日志
                 .logResponses(true) // response 日志
                 .listeners(List.of(new TestChatModelListener()))
                 .timeout(Duration.ofSeconds(2)) // 超时时间
                 .maxRetries(2) // 超时次数
                 .build();
     }
 }

 @Slf4j
 public class TestChatModelListener implements ChatModelListener {
     @Override
     public void onRequest(ChatModelRequestContext requestContext) {
         String uuid = UUID.randomUUID().toString();
         requestContext.attributes().put("TraceId", uuid);
         log.info("请求 ID: {}", uuid);
         log.info("requestContext: {}", requestContext);
     }
     
     @Override
     public void onResponse(ChatModelResponseContext responseContext) {
         String traceId = responseContext.attributes().get("TraceId").toString();
         log.info("请求 ID: {}", traceId);
         log.info("响应结果: {}", responseContext);
     }
     
     @Override
     public void onError(ChatModelErrorContext errorContext) {
         log.error("{}", errorContext);
     }
 }