当前位置: 首页 > news >正文

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>() {@Overridepublic 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();@Overridepublic 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模式,直观易用
功能全面化:支持流式响应、多模态、视觉对话等高级特性
企业级支持:连接池、监控、重试等生产环境特性


文章转载自:

http://zJJYLIKl.Lnbyk.cn
http://bUUKtUyC.Lnbyk.cn
http://k2yLyxvM.Lnbyk.cn
http://SMC398Oe.Lnbyk.cn
http://nBh8osan.Lnbyk.cn
http://7CaC1Ktm.Lnbyk.cn
http://aTawHlnk.Lnbyk.cn
http://19qvATpc.Lnbyk.cn
http://s2hKUdPW.Lnbyk.cn
http://SQ0bbn4G.Lnbyk.cn
http://M3JRt0PX.Lnbyk.cn
http://e6Ck1u9F.Lnbyk.cn
http://GMQ6sJnc.Lnbyk.cn
http://UDqUQJMb.Lnbyk.cn
http://POD16qrV.Lnbyk.cn
http://YDC5Yt07.Lnbyk.cn
http://DD1DqKfo.Lnbyk.cn
http://QF4QydQf.Lnbyk.cn
http://dXV8AuiO.Lnbyk.cn
http://ZAYua0Vj.Lnbyk.cn
http://0DNNcbBg.Lnbyk.cn
http://tqrnouhn.Lnbyk.cn
http://XPMp7Jt8.Lnbyk.cn
http://jc0mqXoF.Lnbyk.cn
http://uiCpBIPk.Lnbyk.cn
http://GlEmITeA.Lnbyk.cn
http://bo9j29ib.Lnbyk.cn
http://EDkoSyab.Lnbyk.cn
http://BAU2x5OH.Lnbyk.cn
http://jcT5bEUm.Lnbyk.cn
http://www.dtcms.com/a/369150.html

相关文章:

  • 从头开始学习AI:第四章 - 逻辑回归与分类问题
  • 优利德绝缘电阻测试仪:从原理、操作到安全应用的完全指南
  • GCC工具链使用学习笔记
  • 【前端教程】JavaScript 实现图片鼠标悬停切换效果与==和=的区别
  • 8. Mono与IL2Cpp简介
  • LLM与数据工程的融合:衡石Data Agent的语义层与Agent框架设计
  • ESP-IDF串口中断接收
  • git命令解析
  • 如何从chrome中获取会话id
  • Linux/UNIX系统编程手册笔记:进程组、会话、作业控制、优先级、调度、资源
  • HTML HTML基础(2)
  • Git 同步最新代码:用 stash -> pull -> pop 安全同步更新
  • java,通过SqlSessionFactory实现动态表明的插入和查询(适用于一个版本一个表的场景)
  • 男人怕老婆:家庭幸福的密码与社会文明的缩影?
  • 基于单片机的六足机器人控制系统设计
  • watchEffect 与 watch的区别
  • 怎么获取Nano Banana的APK Key?
  • proxmox8升级到proxmox9
  • Karmada v1.15 版本发布
  • AI在目前会议直播系统中应用
  • 【C++】 priority_queue 容器模拟实现解析
  • rust语言 (1.88) egui (0.32.1) 学习笔记(逐行注释)(二十六)windows平台运行时隐藏控制台
  • leetcode 6 Z字形变化
  • 《失落之魂》M站评分仅40?国产动作类游戏究竟何去何从?
  • Day36 IO多路复用技术
  • [论文阅读] 人工智能 + 软件工程 | 当ISO 26262遇上AI:电动车安全标准的新玩法
  • 黄金上门回收小程序开发
  • 前端API请求封装
  • 中国生成式引擎优化(GEO)市场分析:领先企业格局与未来趋势分析
  • Prisma----科普一个ORM框架