Hutool AI模块已经上线
Hutool AI:Java生态的AI集成新范式随着大模型技术的普及,Hutool在5.8.x版本中新增了hutool-ai模块,为开发者提供了简单易用的AI能力集成方案。核心优势多模型支持: 一套API调用多种AI服务,目前支持DeepSeek、豆包等主流大模型开箱即用: 简单的Maven依赖引入即可使用,无需复杂配置企业级支持: 源自Hutool生态,有稳定的社区维护和版本迭代初始化AI客户端
<!-- 引入AI模块 -->
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-ai</artifactId>
<version>5.8.40</version>
</dependency>
Hutool AI:Java生态的AI集成新范式
随着大模型技术的普及,Hutool在5.8.x版本中新增了hutool-ai模块,为开发者提供了简单易用的AI能力集成方案。
核心优势
多模型支持: 一套API调用多种AI服务,目前支持DeepSeek、豆包等主流大模型
开箱即用: 简单的Maven依赖引入即可使用,无需复杂配置
企业级支持: 源自Hutool生态,有稳定的社区维护和版本迭代
初始化AI客户端
/ 配置API密钥
AIConfig config = new BaseConfig();
config.setApiKey("你的API密钥");
config.setApiUrl("https://api.deepseek.com/v1");
config.setModel("deepseek-reasoner");
// 创建DeepSeek客户端
DeepSeekServiceImpl deepSeekService = new DeepSeekServiceImpl(config);
Hutool AI核心功能详解
文本生成功能
DeepSeekService是Hutool AI模块中专门对接DeepSeek大模型服务的接口,在基础AIService功能基础上扩展了DeepSeek特有的功能。
// 普通对话
String content = deepSeekService.chat("写一个疯狂星期五广告词");
System.out.println(content);
// 流式对话(适合长内容实时输出)
deepSeekService.chat("写一篇关于AI的短文", new Consumer<String>() {
@Override
public void accept(String chunk) {
// 每次接收到部分响应时调用
System.out.print(chunk);
}
});
多模态能力(图片理解)
DoubaoService支持豆包特有的多模态功能,允许开发者进行图片理解等高级操作。
// 图片理解示例
String base64Image = "图片的Base64编码内容";
String answer = doubaoService.chatVision("图片上有些什么?", Arrays.asList(base64Image));
System.out.println(answer);
实用辅助功能
除了核心的AI能力,Hutool AI还提供了一些实用方法:
// 查询模型列表
String models = deepSeekService.models();
// 查询账户余额
String balance = deepSeekService.balance();
实战案例:传统HTTP调用 vs Hutool AI
为了更好理解Hutool AI的价值,我们对比下传统HTTP调用和Hutool AI的差异。
传统HTTP调用方式(使用Apache HttpClient)
// 繁琐的HTTP客户端配置和处理
HttpClient client = HttpClients.createDefault();
HttpPost post = new HttpPost(url);
post.setHeader("Content-Type", "application/json");
post.setHeader("Authorization", "Bearer " + apiKey);
// 手动构建请求体
String json = "{\"question\": \"hello\"}";
StringEntity entity = new StringEntity(json);
post.setEntity(entity);
HttpResponse res = client.execute(post);
String responseStr = EntityUtils.toString(res.getEntity(), "UTF-8");
使用Hutool AI后
// 一行代码完成AI对话
String answer = AIUtil.chat(config, "你的问题");
初始化 AI 客户端(以豆包为例):
// 配置API密钥
AIConfig config = new BaseConfig();
config.setApiKey("sk-");
config.setApiUrl("https://api.deepseek.com/v1");
config.setModel("deepseek-reasoner");
// 创建deepseekAI客户端
DeepSeekServiceImpl baseAIService = new DeepSeekServiceImpl(config);
文本生成功能
DeepSeekService 是 Hutool AI 模块中专门对接 DeepSeek 大模型服务的接口,在基础 AIService 功能基础上扩展了 DeepSeek 特有的功能。
// 配置API密钥
AIConfig config = new BaseConfig();
config.setApiKey("sk-");
config.setApiUrl("https://api.deepseek.com/v1");
config.setModel("deepseek-reasoner");
// 创建deepseekAI客户端
DeepSeekServiceImpl baseAIService = new DeepSeekServiceImpl(config);
// 普通对话
String content = baseAIService.chat("写一个疯狂星期五广告词");
// 流式对话
baseAIService.chat("写一个疯狂星期五广告词", s -> {
System.out.println(s);
});
// 查询模型列表
String models = baseAIService.models();
// 查询账户余额
String balance = baseAIService.balance();
图片理解
DoubaoService 是 Hutool AI 模块中对接豆包大模型服务的扩展接口,在基础 AIService 功能基础上提供了豆包特有的多模态和高级功能支持。
// 配置API密钥
AIConfig config = new BaseConfig();
config.setApiKey("sk-");
config.setApiUrl("https://api.deepseek.com/v1");
config.setModel("deepseek-reasoner");
// 创建deepseekAI客户端
DoubaoServiceImpl baseAIService = new DoubaoServiceImpl(config);
String base64 = "xxx"; // 图片base64内容
String chatVision = baseAIService.chatVision("图片上有些什么?", Arrays.asList(base64));
视频生成
// 配置API密钥
AIConfig config = new BaseConfig();
config.setApiKey("sk-");
config.setApiUrl("https://api.deepseek.com/v1");
config.setModel("deepseek-reasoner");
// 创建deepseekAI客户端
DoubaoServiceImpl baseAIService = new DoubaoServiceImpl(config);
String videoTasks = baseAIService.videoTasks("生成一段动画视频,主角是神厨小福贵,一个厨艺精湛的小男孩。", "https://img2.baidu.com/xxxx");
//查询视频生成任务信息
String videoTasksInfo = baseAIService.getVideoTasksInfo("任务id");
最简单的对话
// 配置DeepSeek模型
var config = new AIConfigBuilder(ModelName.DEEPSEEK.getValue())
.setApiKey("your-api-key")
.setModel("deepseek-chat") // 可选,设置具体模型
.build();
// 发起对话
String response = AIUtil.chat(config, "用Java写一个冒泡排序"方法);
System.out.println("AI回复: " + response);
多轮对话实践
var config = new AIConfigBuilder(ModelName.OPENAI.getValue())
.setApiKey("your-openai-key")
.build();
// 构建多轮对话消息
List<Message> messages = new ArrayList<>();
messages.add(new Message("system", "你是一个专业的Java开发助手"));
messages.add(new Message("user", "如何优化Spring Boot应用的查询速度?"));
messages.add(new Message("assistant", "可以通过配置优化"));
messages.add(new Message("user", "说一下怎么优化,加缓存的方式"));
String response = AIUtil.chat(config, messages);
System.out.println("优化建议: " + response);
高级功能深度解析(流式响应处理)
var config = new AIConfigBuilder(ModelName.DEEPSEEK.getValue())
.setApiKey("your-key")
.build();
// 获取具体服务实例进行流式调用
var deepSeekService = AIUtil.getDeepSeekService(config);
deepSeekService.chat("解释Java虚拟机的内存模型", new Consumer<String>() {
private final StringBuilder fullResponse = new StringBuilder();
@Override
public void accept(String chunk) {
System.out.print(chunk); // 实时输出
fullResponse.append(chunk);
if (chunk.contains("。") || chunk.contains("\n")) {
System.out.flush();
}
}
});
// 等待流式响应完成
try { Thread.sleep(5000); } catch (InterruptedException e) {}
视觉对话与多模态支持
var config = new AIConfigBuilder(ModelName.OPENAI.getValue())
.setApiKey("your-openai-key")
.build();
OpenaiService openaiService = AIUtil.getOpenAIService(config);
// 视觉对话示例
String response = openaiService.chatVision(
"描述这张图片中的内容",
Arrays.asList("https://example.com/image.jpg"),
"high" // 细节程度: high/low
);
System.out.println("图片描述: " + response);
智能客服系统集成(企业级配置管理)
private final AIService aiService;
private final Setting config;
public CustomerServiceAI() {
// 从配置文件加载配置
config = new Setting("ai-config.setting");
this.aiService = AIUtil.getAIService(
new AIConfigBuilder(config.get("model"))
.setApiKey(config.get("apiKey"))
.setApiUrl(config.get("apiUrl"))
.setTimeout(config.getInt("timeout", 30))
.setReadTimeout(config.getInt("readTimeout", 60))
.putAdditionalConfig("temperature", 0.7)
.putAdditionalConfig("max_tokens", 1000)
.build()
);
}
public String handleCustomerQuery(String query, String context) {
String systemPrompt = "你是一个专业的客服助手,负责处理用户咨询。"
+ "当前服务上下文: " + context
+ "\n请用友好、专业的态度回应用户。";
return aiService.chat(systemPrompt + "\n用户问题: " + query);
}
// 批量处理查询
public void processBatchQueries(List<String> queries) {
queries.parallelStream().forEach(query -> {
try {
String response = handleCustomerQuery(query, "常规咨询");
System.out.println("Q: " + query + "\nA: " + response + "\n");
} catch (Exception e) {
System.err.println("处理查询失败: " + query + ", 错误: " + e.getMessage());
}
});
}
配置示例(ai-config.setting)
# AI服务配置
model = deepseek
apiKey = sk-your-deepseek-key-here
apiUrl = https://api.deepseek.com/v1/chat/completions
timeout = 30
readTimeout = 60
# 高级参数
temperature = 0.7
max_tokens = 1000
top_p = 0.9
性能优化与最佳实践
public class OptimizedAIClient {
private static final Map<String, AIService> servicePool = new ConcurrentHashMap<>();
public static AIService getCachedService(String modelName, String apiKey) {
String cacheKey = modelName + ":" + apiKey;
return servicePool.computeIfAbsent(cacheKey, key -> {
return AIUtil.getAIService(
new AIConfigBuilder(modelName)
.setApiKey(apiKey)
.setTimeout(15) // 连接超时15秒
.setReadTimeout(30) // 读取超时30秒
.build()
);
});
}
// 带重试机制的调用
public static String callWithRetry(String prompt, int maxRetries) {
for (int i = 0; i < maxRetries; i++) {
try {
AIService service = getCachedService(ModelName.DEEPSEEK.getValue(), "your-key");
return service.chat(prompt);
} catch (Exception e) {
if (i == maxRetries - 1) throw e;
try { Thread.sleep(1000 * (i + 1)); } catch (InterruptedException ie) {}
}
}
throw new RuntimeException("所有重试尝试都失败了");
}
}
错误处理与监控
import cn.hutool.ai.core.AIException;
import io.micrometer.core.instrument.Metrics;
import java.util.concurrent.TimeUnit;
public class MonitoredAIService {
private final AIService delegate;
public MonitoredAIService(AIService delegate) {
this.delegate = delegate;
}
public String chat(String prompt) {
long startTime = System.nanoTime();
try {
String response = delegate.chat(prompt);
long duration = System.nanoTime() - startTime;
// 记录成功指标
Metrics.timer("ai.request.duration")
.record(duration, TimeUnit.NANOSECONDS);
Metrics.counter("ai.request.success").increment();
return response;
} catch (AIException e) {
// 记录失败指标
Metrics.counter("ai.request.failure").increment();
Metrics.counter("ai.error." + e.getClass().getSimpleName()).increment();
throw e;
}
}
}
Hutool AI模块通过统一接口设计,极大简化了多AI厂商的集成复杂度。关键优势包括:
接口统一化:一套API兼容主流AI服务
配置简单化:链式配置Builder模式,直观易用
功能全面化:支持流式响应、多模态、视觉对话等高级特性
企业级支持:连接池、监控、重试等生产环境特性
更多推荐
所有评论(0)