【LangChain4j】LangChain4J开发AI项目——chatModel(一)
·
创建项目


ChatModel
负责和AI大模型进行交互
LangChain4j 是 Java 生态的大模型开发框架,阿里大模型(通义千问)是它支持的众多模型之一
引入AI大模型的依赖(阿里云,提供了和Springboot项目整合依赖包)
https://docs.langchain4j.info/integrations/language-models/dashscope
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-community-dashscope-spring-boot-starter</artifactId>
<version>1.1.0-beta7</version>
</dependency>
在阿里百炼平台创建APIKEY后,配置在项目中
langchain4j:
community:
dashscope:
model: qwen-max
api-key: xxxxxxxx
当前官方文档中也提供了代码的方式
ChatLanguageModel qwenModel = QwenChatModel.builder()
.apiKey("您的 API 密钥")
.modelName("qwen-max")
.enableSearch(true)
.temperature(0.7)
.maxTokens(4096)
.stops(List.of("Hello"))
.build();
代码追踪是qwen的,为什么是qwen的?怎么做到的?
1. 先看清楚:ChatModel 是什么?
你导入的 dev.langchain4j.model.chat.ChatModel 是一个接口(或者抽象父类),它定义了聊天模型的通用行为(比如发送消息、接收回复),但它本身没有具体实现,就像一个 “标准契约”。
2. 为什么引入通义千问(Qwen)依赖后,就变成了 Qwen 的实现?
这背后是两个关键机制在起作用:
① QwenChatModel 实现了 ChatModel 接口
当你引入 langchain4j-community-dashscope(通义千问的 LangChain4j 适配依赖)后,依赖里会自带一个实现类 QwenChatModel,它会实现 ChatModel 接口,完成通义千问 API 的具体调用逻辑。
用代码类比就是:
// 这是你导入的通用接口
public interface ChatModel {
ChatResponse chat(UserMessage message);
}
// 这是Qwen依赖提供的实现类
public class QwenChatModel implements ChatModel {
@Override
public ChatResponse chat(UserMessage message) {
// 这里是通义千问API的具体调用逻辑
return callQwenApi(message);
}
}
② Spring Boot 自动配置 + 依赖注入
当你引入 Qwen 的依赖后,它的 spring-boot-autoconfigure 模块会自动生效:
- 会根据你
application.yml里配置的通义千问 API 密钥、模型名称,自动创建一个QwenChatModel的实例 - 并把这个实例注册到 Spring 容器中,Bean 的名称通常是
qwenChatModel(和你代码里写的变量名一致)
而你代码里:
@Resource
private ChatModel qwenChatModel;
这里的 @Resource 会按名称 qwenChatModel 去 Spring 容器中找对应的 Bean,注入的实际对象就是 QwenChatModel,但因为它实现了 ChatModel 接口,所以你依然可以用 ChatModel 这个接口类型来声明变量,这就是 Java 的多态特性。
如果遇到lombok报错

更多推荐


所有评论(0)