这是一款专为智慧养老场景设计的 AI 智能助手。它不仅是一个聊天机器人,更是一个集成了语音识别(ASR)、语音合成(TTS)、实时天气查询和时间推算功能的“数字陪伴者”。


目录

一、 项目背景与愿景

二、 全栈技术架构

三、 核心功能实现原理

1. 智能大脑:LangChain4j + Function Calling

2. 语音闭环:解决 ASR 与 TTS 的痛点

3. 环境感知:IP 定位与天气联动

四、 数据库与记忆管理

五、 前端:专为老人优化的交互设计

六、 未来规划:定时与备忘功能

         七、界面展示:


一、 项目背景与愿景

在智慧养老场景下,老年人常面临“数字鸿沟”。本项目旨在打造一个名为小智的 AI 助手。

  • 交互方式:支持语音输入(ASR)与语音播报(TTS),降低操作门槛。

  • 核心功能:具备情感陪聊、实时天气查询、时间节日推算等感知能力。

  • 设计理念:采用大字号、高对比度、毛玻璃质感的 UI 界面,适配老年人视觉习惯。


二、 全栈技术架构

本项目采用前后端分离架构,通过大模型驱动核心逻辑。

维度 技术栈 作用
后端框架 Spring Boot 3 + LangChain4j 核心业务流控与大模型编排
大语言模型 Qwen3-8B (SiliconFlow) 语义理解、逻辑推理、情感交互
语音能力 百度 AI 极速版 (ASR/TTS) 实现“能听会说”的交互闭环
地理位置 Ip2region 基于 IP 自动识别用户所在城市
前端界面 Vue 3 + Recorder-core 毛玻璃 UI 视觉与音频高保真采集

三、 核心功能实现原理

1. 智能大脑:LangChain4j + Function Calling

实现原理:AI 不再是死板的聊天机器人,而是通过 AiTools 绑定了外部感知能力。当用户问“明天几号?”或“天气如何?”时,AI 会根据语义自动触发对应的工具方法。

核心代码实现 (AiTools.java)

@Component
public class AiTools {
    @Autowired
    private WeatherService weatherService;

    // 工具定义:AI 会根据提示词自动决定是否调用此方法
    @Tool("获取当前北京时间,包含年、月、日、星期。用于回答今天几号或推算春节等节日。")
    public String getCurrentDateTime() {
        return LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss EEEE"));
    }

    @Tool("根据城市名称查询当地的实时天气状况")
    public String getWeather(String city) {
        return weatherService.getWeatherByCity(city);
    }
}

2. 语音闭环:解决 ASR 与 TTS 的痛点

痛点方案:前端录音常报 3312 错误。我们通过固定采样率(16000Hz)和强制 WAV 格式转换,并在后端对音频 Header 进行校验,确保识别率。

语音转文字逻辑 (BaiduAsrService.java)

public String transcribe(byte[] audioData) {
    HashMap<String, Object> options = new HashMap<>();
    options.put("dev_pid", 1537); 
    options.put("speech_rate", 1);
    
    // 强制使用wav格式
    JSONObject res = client.asr(audioData, "wav", 16000, options);
    
    if (res.optInt("err_no") == 0) {
        return res.optJSONArray("result").optString(0, "").trim();
    }
    return "";
}

3. 环境感知:IP 定位与天气联动

实现逻辑:系统首先利用 Ip2region 数据库解析用户的真实 IP 获取城市名,再将其转换为气象台所需的 LocationKey,从而提供精准的天气预报和穿衣建议。


四、 数据库与记忆管理

为了让 AI “记得”之前的谈话,我们使用了 MessageWindowChatMemory 维护一个最近 10 条消息的滑动窗口,并将所有记录同步持久化到 MySQL 数据库中。

数据库结构 (ChatRecord.java)

  • Role: 标识消息来源(User 或 AI)。

  • Content: 存储对话文本内容。

  • UserId: 实现多用户隔离。


五、 前端:专为老人优化的交互设计

设计要点

  1. 大按键操作:底部巨大的“按住说话”按钮,支持触屏长按。

  2. 视觉反馈:录音时出现蓝色流光动画,告知用户系统正在“倾听”。

  3. 自动播报:AI 回复后前端自动调用 TTS 接口播放音频,无需老人阅读文字。

毛玻璃样式代码片段

.top-bar {
    background: rgba(255, 255, 255, 0.2);
    backdrop-filter: blur(45px);
    -webkit-backdrop-filter: blur(45px);
    border-bottom: 1px solid rgba(255, 255, 255, 0.4);
}

六、 未来规划:定时与备忘功能

针对老年人易忘事的特点,我们计划在下一版本中:

  • 定时功能:通过 AI 理解“提醒我下午 3 点吃药”,自动在后端开启定时任务。

  • 健康备忘:建立老人专属的健康日记,记录每日血压、心情等指标。

  • 主动提醒:结合天气情况,在清晨主动语音播报:“张爷爷,今天降温了,记得加件外套”。

  • MCP:未来将使用MCP,让AI更加智能,回答的信息更加准确。

七、界面展示:

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐