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

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

AI智能体集成语音设备

先给大家介绍一下我使用的技术:

后端技术:

Java 8:作为项目的核心编程语言,稳定高效。

Spring Boot 2.7:提供快速开发的框架,适合构建微服务和集成AI模块。

前端技术:

Vue.js 2:流行的前端框架,适合构建响应式网页应用,提供良好的用户体验。

Node.js 16版本:确保项目在前后端交互时的高效性。

AI技术集成:

百度云智能体:为系统提供智能体管理功能。

YUMOU AI-VOICE-Z01/ESP32-S3设备:智能硬件设备,结合语音交互功能,通信协议websocket。

火山引擎:提供高效的语音识别与语音合成功能,支持"一句话识别"和音频生成。

给大家看一下页面效果吧

前台比较简单 就做了一个首页

后台页面展示

语音硬件设备:

对于前台的智能体展示 使用 这些逻辑我就不介绍了。

注意:系统接入百度智能体,前台仅提供跳转到对应智能体平台进行问答交互,不提供AI在线聊天功能。

主要介绍一下 语音硬件和软件怎么交互的:

实现逻辑:语音硬件接收声音-> java接收到声音后进行解码->把声音发给语音识别的第三方接口->拿到文字后把文字发送给 智能体->智能体回答后把结果在转成音频-> 语音设备进行播放。

这个AI智能体平台管理系统 主要是用来学习和实践AI和软硬件结合的练习项目,不适合商用~,如果对这个项目有兴趣的小伙伴可以拿去学习使用。

源码已经整理好啦:

www.wwwoop.com/home/Index/...

因为代码量还是非常大的,下面就简单的介绍一下 源码

arduino 复制代码
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.5

    public static IAiAgentModelService getITtsClientService(String type) {
        switch (type.toLowerCase()) {
            case baiduAgent:
                return AppContextUtil.getBean(BaiDuAgent.class);
            default:
                return AppContextUtil.getBean(BaiDuAgent.class);
        }
    }
}
ini 复制代码
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 {


    @Autowired
    BaiDuApi 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");
    }

    @Override
    public 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 和 msgId
            threadId = 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 "";
    }


}
相关推荐
道可云3 分钟前
AI+产业革命:人工智能如何成为新质生产力的“第一加速器”
人工智能·百度
hg01186 分钟前
非洲人工智能稳步发展
人工智能·百度
Xiaoxiaoxiao020912 分钟前
迎接情感 AI 的新时代 —— 加入 GAEA 社区!
人工智能
花月C25 分钟前
算法 - 差分
人工智能·算法·机器学习
拆房老料25 分钟前
深入解析提示语言模型校准:从理论算法到任务导向实践
人工智能·算法·语言模型
JIngJaneIL27 分钟前
财务管理|基于SprinBoot+vue的个人财务管理系统(源码+数据库+文档)
java·前端·数据库·vue.js·spring boot·毕设·财务管理系统
rengang6628 分钟前
352-Spring AI Alibaba OpenAI DashScope 多模态示例
java·人工智能·spring·多模态·spring ai·ai应用编程
音视频牛哥28 分钟前
RTMP/RTSP/WebRTC/SRT/HLS/DASH/GB28181/WebTransport/QUIC协议规范深度分析
人工智能·计算机视觉·音视频·webrtc·大牛直播sdk·dash·webtransport
L.EscaRC29 分钟前
Kafka在Spring Boot生态中的浅析与应用
spring boot·分布式·kafka
张较瘦_30 分钟前
[论文阅读] AI+ | AI如何重塑审计行业?从“手工筛查”到“智能决策”:AI审计的核心逻辑与未来路径
论文阅读·人工智能