介绍
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 依赖。
如果你想使用 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
在本地环境配置好 API_KEY 之后,Java 中通过如下方式获取:
String apiKey = System.getenv("ALI_QWEN_API_KEY");
【3】获取模型信息
获取你要调用的模型名称,如 qwen-plus 就是这个模型的名称:
往下滑可以看到代码示例,其中有一个 base_url,这就是你的请求地址。
【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);
}
}