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

使用springboot开发-AI智能体平台管理系统,统一管理各个平台的智能体并让智能体和AI语音设备通信,做一个属于自己的小艾同学~

最近一直在研究各种AI智能体,接触了百度的智能体、字节的扣子、腾讯的元器。然后我灵感一动,做了一个简单的智能体管理平台,把这些不同平台的智能体集中在一个系统里管理。最近也在琢磨智能体能不能和硬件进行互动,结果就买了个语音设备,试着通过程序让智能体通过语音设备“说话”。感觉有点像小艾同学,玩起来挺有意思的。
语音设备演示

AI智能体集成语音设备!

先给大家介绍一下我使用的技术:
后端技术:
Java 8:作为项目的核心编程语言,稳定高效。
Spring Boot 2.7:提供快速开发的框架,适合构建微服务和集成AI模块。
前端技术:
Vue.js 2:流行的前端框架,适合构建响应式网页应用,提供良好的用户体验。
Node.js:
Node.js 16版本:确保项目在前后端交互时的高效性。
AI技术集成:
百度云智能体:为系统提供智能体管理功能。
YUMOU AI-VOICE-Z01/ESP32-S3设备:智能硬件设备,结合语音交互功能,通信协议websocket。
火山引擎:提供高效的语音识别与语音合成功能,支持“一句话识别”和音频生成。

给大家看一下页面效果把。
前台比较简单 就做了一个首页
在这里插入图片描述
在这里插入图片描述
后台页面展示
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
语音硬件设备:
在这里插入图片描述
对于前台的智能体展示 使用 这些逻辑我就不介绍了。
注意:系统接入百度智能体,前台仅提供跳转到对应智能体平台进行问答交互,不提供AI在线聊天功能。
主要介绍一下 语音硬件和软件怎么交互的
实现逻辑:语音硬件接收声音-> java接收到声音后进行解码->把声音发给语音识别的第三方接口->拿到文字后把文字发送给 智能体->智能体回答后把结果在转成音频-> 语音设备进行播放。

这个AI智能体平台管理系统 主要是用来学习和实践AI和软硬件结合的练习项目,不适合商用~,如果对这个项目有兴趣的小伙伴可以拿去学习使用。
源码已经整理好拉:
https://www.wwwoop.com/home/Index/projectInfo?goodsId=109&typeParam=1&subKey=-1
因为代码量还是非常大的,下面就简单的介绍一下 源码
在这里插入图片描述
在这里插入图片描述

package com.agentai.base.yumou;import com.agentai.base.aiAgent.IAiAgentModelService;
import com.agentai.base.aiAgent.baidu.BaiDuAgent;
import com.agentai.base.utils.AppContextUtil;/**** User: Json* Date: 2025/5/9**/
public class AiAgentFactory {private static final String baiduAgent="baidu-agent";  //百度智能体private static final String baiduErnie45="baidu-ernie-4-5"; //文心大模型4.5public static IAiAgentModelService getITtsClientService(String type) {switch (type.toLowerCase()) {case baiduAgent:return AppContextUtil.getBean(BaiDuAgent.class);default:return AppContextUtil.getBean(BaiDuAgent.class);}}
}
package com.agentai.base.aiAgent.baidu;import com.agentai.base.aiAgent.IAiAgentModelService;
import com.agentai.base.request.BaiDuConversationRequest;
import com.agentai.base.utils.RedisUtils;
import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;import java.util.List;/**** User: Json* Date: 2025/5/4* 百度智能体**/
@Service
@Slf4j
public class BaiDuAgent implements IAiAgentModelService {@AutowiredBaiDuApi baiDuApi;public String getAccessToken(String clientId, String clientSecret) {if (RedisUtils.hasKey(clientSecret + "_" + clientSecret)) {return RedisUtils.getString(clientSecret + "_" + clientSecret, String.class);}String clientCredentials = baiDuApi.getAccessToken("client_credentials", clientId, clientSecret);if (StringUtils.isEmpty(clientCredentials)) {log.error("百度智能体token 获取失败" + clientCredentials);return "";}JSONObject jsonObject = JSONObject.parseObject(clientCredentials);if (StringUtils.isEmpty(jsonObject.getString("access_token"))) {log.error("百度智能体token 获取失败" + clientCredentials);return "";}RedisUtils.setString(clientSecret + "_" + clientSecret, jsonObject.getString("access_token"), (long) jsonObject.get("expires_in") - 300);return jsonObject.getString("access_token");}@Overridepublic String getConversation(String apiParams, String chatId, String msg) {JSONObject jsonObject = JSONObject.parseObject(apiParams);String appId=jsonObject.getString("appId");String secretKey=jsonObject.getString("secretKey");String source=jsonObject.getString("source");BaiDuConversationRequest baiDuConversationRequest = new BaiDuConversationRequest();String threadId = null;if (RedisUtils.hasKey(appId + "_" + secretKey + "_" + chatId)) {threadId = RedisUtils.getString(appId + "_" + secretKey + "_" + chatId, String.class);}JSONObject showText = new JSONObject();showText.put("showText", msg);JSONObject content = new JSONObject();content.put("type", "text");content.put("value", showText);if (!StringUtils.isEmpty(threadId)) {baiDuConversationRequest.setThreadId(threadId);}baiDuConversationRequest.setFrom("openapi");baiDuConversationRequest.setSource(source);baiDuConversationRequest.setOpenId(chatId);JSONObject message = new JSONObject();message.put("content", content);baiDuConversationRequest.setMessage(message);String clientCredentials = baiDuApi.getAnswer(appId, secretKey, baiDuConversationRequest);JSONObject jsonObject1 = JSONObject.parseObject(clientCredentials);if(jsonObject1.getInteger("status").equals(0)){// 获取 data 对象JSONObject data = jsonObject1.getJSONObject("data");// 获取 threadId 和 msgIdthreadId = data.getString("threadId");RedisUtils.setString(appId + "_" + secretKey + "_" + chatId, threadId, 120);// 获取 content 数组中的内容List<JSONObject> contentList = data.getJSONArray("content").toJavaList(JSONObject.class);String contentData="";for (JSONObject content1 : contentList) {if(!StringUtils.isEmpty(content1.getString("data"))){contentData= content1.getString("data");}}return contentData;}return "";}}
http://www.dtcms.com/a/347374.html

相关文章:

  • Dubbo vs Feign
  • 个人思考与发展
  • 探秘北斗卫星导航系统(BDS):架构、应用与未来蓝图,展现中国力量
  • 详细说一说JIT
  • Redis面试精讲 Day 28:Redis云原生部署与Kubernetes集成
  • Js逆向 拼夕夕anti_content
  • 深入解析Spring Boot自动配置原理:简化开发的魔法引擎
  • Java基础第2天总结
  • 青少年机器人技术(四级)等级考试试卷-实操题(2021年12月)
  • 互联网大厂Java面试实战:核心技术栈与场景化提问解析(含Spring Boot、微服务、测试框架等)
  • Java 遗传算法在中药药对挖掘中的深度应用与优化策略
  • 雨雾天气漏检率骤降80%!陌讯多模态车牌识别方案实战解析
  • Redis--day10--黑马点评--秒杀优化消息队列
  • 【JavaEE】多线程 -- JUC常见类和线程安全的集合类
  • 什么猫粮好?2025最新猫粮排名合集
  • 深度解析Bitmap、RoaringBitmap 的原理和区别
  • MySql知识梳理之DDL语句
  • TypeScript 类型系统入门:从概念到实战
  • 从零开始学习JavaWeb-16
  • 阿德莱德多模态大模型导航能力挑战赛!NavBench:多模态大语言模型在具身导航中的能力探索
  • Mysql InnoDB 底层架构设计、功能、原理、源码系列合集【六、架构全景图与最佳实践】
  • 新能源汽车热管理仿真:蒙特卡洛助力神经网络训练
  • android studio配置 build
  • XCVU13P-2FHGB2104E Xilinx(AMD)Virtex UltraScale+ FPGA
  • 力扣热题之多维动态规划
  • [2025CVPR-目标检测方向]学习增量对象检测的内生注意力
  • Redis(18)Redis的键空间通知机制是如何工作的?
  • LangChain4j中集成Redis向量数据库实现Rag
  • 设计模式详解
  • 服务器支持IPv6吗?如何让服务器支持IPv6