ChatModel
是LangChain4j中用于与聊天模型进行交互的核心接口。它抽象了发送消息、接收响应以及处理流式输出等操作。
一、ChatModel 核心特性
- 消息交互:支持
UserMessage
、SystemMessage
、AiMessage
等消息类型,模拟真实对话流程。 - 流式响应:通过
StreamingChatLanguageModel
支持实时接收模型输出,提升用户体验。 - 灵活配置:可设置温度(temperature)、最大生成 token 数(maxTokens)等参数。
- 多平台支持:通过不同实现类无缝切换后端模型(如 Qwen、GPT、LLaMA 等)。
二、为什么选择阿里云通义千问?
由于 OpenAI 在国内访问受限,我们选择国产优秀大模型——阿里云通义千问(Qwen)。它具备强大的中文理解与生成能力,且通过阿里云百炼平台提供稳定 API 接口,非常适合国内开发者使用。
三、项目搭建步骤
第一步:创建 Spring Boot 项目
打开 IntelliJ IDEA,选择 New Project。
选择 Spring Initializr,填写项目名称、路径。
技术栈选择:
- 构建工具:Maven
- Java 版本:17 或以上(推荐)
- Spring Boot 版本:3.5.5(兼容性良好)
添加依赖:
- Spring Web
- Lombok
点击“Create”完成项目创建。
第二步:配置文件格式化(.properties → .yml)
为便于管理复杂配置,建议将默认的 application.properties
改为 YAML 格式:
- 删除
src/main/resources/application.properties
- 新建
application.yml
第三步:引入 LangChain4j 与阿里云 DashScope 依赖
在 pom.xml
中添加以下依赖:
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-community-dashscope-spring-boot-starter</artifactId>
<version>1.1.0-beta7</version>
</dependency>
第四步:获取阿里云 API Key
- 访问 阿里云百炼平台
- 注册并登录账号
- 进入「模型广场」,选择 通义千问系列模型(如 qwen-max)
- 获取您的专属 API Key(请妥善保管,勿泄露)
第五步:配置 application.yml
在 application.yml
中添加 LangChain4j 配置:
langchain4j:
community:
dashscope:
chat-model:
model-name: qwen-max
api-key: <Your-API-Key-Here> # 替换为实际密钥
注:配置完成后,Spring Boot 会自动注入
ChatModel
实例,无需手动初始化。
第六步:编写 AI 助手服务类
创建包 com.example.ai
,并在其中新建 AIHelper.java
:
package com.example.ai;
import dev.langchain4j.model.chat.ChatModel;
import dev.langchain4j.model.chat.UserMessage;
import dev.langchain4j.model.chat.response.ChatResponse;
import dev.langchain4j.model.chat.message.AiMessage;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.beans.factory.annotation.Resource;
@Service
@Slf4j
public class AIHelper {
@Resource
private ChatModel chatModel;
/**
* 与 AI 进行对话
* @param message 用户输入的消息
* @return AI 返回的文本
*/
public String aiChat(String message) {
// 构造用户消息
UserMessage userMessage = UserMessage.from(message);
// 发起请求并获取响应
ChatResponse chatResponse = chatModel.chat(userMessage);
// 提取 AI 回复内容
AiMessage aiMessage = chatResponse.aiMessage();
// 输出日志(便于调试)
log.info("AI 输出:{}", aiMessage.text());
return aiMessage.text();
}
}
注解说明:
@Service
:将此类注册为 Spring 容器中的服务 Bean@Slf4j
:使用 Lombok 自动生成日志对象log
@Resource
:自动注入 LangChain4j 提供的ChatModel
第七步:编写单元测试
- 在
src/test/java
下创建测试类AIHelperTest
- 使用 IDEA 快捷键 Alt + Enter 在
aiChat
方法上生成测试
package com.example.ai;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import static org.junit.jupiter.api.Assertions.assertNotNull;
@SpringBootTest
class AIHelperTest {
@Autowired
private AIHelper aiHelper;
@Test
void chat() {
String response = aiHelper.aiChat("你好,请介绍一下你自己,以及你能做什么?");
assertNotNull(response);
System.out.println("AI 回应:\n" + response);
}
}
运行测试,效果如下图所示:
四、常见问题与解决方案
问题 | 原因 | 解决方案 |
---|---|---|
中文乱码 | JVM 编码与控制台不一致 | 添加 VM 参数:-Dfile.encoding=UTF-8 |
找不到 log 符号 |
Lombok 未启用 | 安装 Lombok 插件,开启注解处理器 |
TypeTag.UNKNOWN 错误 |
JDK 24 不兼容旧版 Lombok | 降级至 JDK 17 或升级 Lombok 到 1.18.30+ |
API 调用失败 | 密钥错误或网络不通 | 检查 API Key 是否正确,确认网络可达 |