乐于分享
好东西不私藏

小智 AI 聊天助手:简单的源码调试

小智 AI 聊天助手:简单的源码调试
    早就听闻虾哥开源的基于 ESP32 的小智 AI 聊天助手,一直也没有机会好好研究一下。这次有机会通过 Moji2.0 硬件来学习一下。

获取源码

首先就是到 GitHub 上获取源码:

https://github.com/78/xiaozhi-esp32

下载后解压,里面主要是 4 个文件夹,分别是文档、程序、Flash 分区表配置、脚本。

主要看程序,程序里的结构分布如下:

main/
├── application.h/cc        # 主应用类
├── assets.h/cc             # 资源管理
├── ota.h                   # OTA升级
├── settings.h              # 配置管理
├── system_info.h           # 系统信息
├── device_state.h          # 设备状态枚举
├── device_state_machine.h  # 状态机
├── mcp_server.h            # MCP服务器(机器人控制)
├── audio/                  # 音频服务
│   ├── audio_service.h/cc
│   ├── audio_processor.h
│   ├── audio_codec.h
│   ├── wake_word.h
│   ├── processors/         # 音频处理器(AFE等)
│   ├── codecs/             # 音频编解码器驱动
│   └── wake_words/         # 唤醒词引擎
├── display/                # 显示模块
│   ├── display.h
│   ├── lvgl_display/       # LVGL图形库
│   ├── oled_display.h
│   └── emote_display.h     # Emote显示协议
├── protocols/              # 网络协议
│   ├── protocol.h
│   ├── mqtt_protocol.h/cc
│   └── websocket_protocol.h/cc
├── led/                    # LED控制
│   ├── led.h
│   ├── single_led.h
│   └── circular_strip.h
└── boards/                 # 硬件板级支持
    ├── common/             # 通用板类
    │   ├── board.h
    │   ├── wifi_board.h
    │   └── ml307_board.h   # 4G模块支持
    ├── esp-box-3/          # 具体板卡配置
    ├── electron-bot/       # 机器人平台
    └── ... (30+种板卡)

整体架构

┌─────────────────────────────────────────────────────────────────┐
│                    Application (主应用层)                        │
│  ┌───────────────────────────────────────────────────────────┐  │
│  │  状态管理 │ 事件处理 │ 网络协调 │ OTA升级 │ MCP服务     │  │
│  └───────────────────────────────────────────────────────────┘  │
├─────────────────────────────────────────────────────────────────┤
│                    Core Services (核心服务层)                    │
│  ┌──────────┐  ┌──────────┐  ┌──────────┐  ┌──────────┐       │
│  │AudioService│ │  Protocol │ │   Assets  │ │  Display  │      │
│  │(音频处理)  │ │ (网络协议) │ │  (资源管理) │ │  (显示输出) │      │
│  └──────────┘  └──────────┘  └──────────┘  └──────────┘       │
├─────────────────────────────────────────────────────────────────┤
│                    Board Abstraction (硬件抽象层)                │
│  ┌──────────┐  ┌──────────┐  ┌──────────┐  ┌──────────┐       │
│  │AudioCodec │ │    LED    │ │  Network  │ │  Camera   │      │
│  │(音频编解码)│ │  (指示灯) │ │  (网络接口)│ │  (摄像头)  │      │
│  └──────────┘  └──────────┘  └──────────┘  └──────────┘       │
├─────────────────────────────────────────────────────────────────┤
│                      ESP32 Hardware                             │
└─────────────────────────────────────────────────────────────────┘

设计的架构还是非常好的,而且有很多资料这里就不展开介绍了。小智有个类似官网百科全书的网址:

https://my.feishu.cn/wiki/F5krwD16viZoF0kKkvDcrZNYnhb

上手操作

如果是和我一样用的是源码已经支持的硬件的话,在搭建好编译下载的环境后,在 boards 文件夹下找到对应的板子文件夹,然后让 AI 根据这个文件夹的内容去编译下载就行了。

编译下载好程序后,根据提示完成配网。然后一些配置就可以在小智控制后台去操作了。

这里可以配置模型、设计人设、声纹识别,甚至设计 UI。

修改源码

上面这套基础流程走通了,后续就可以根据自己的需求修改代码了。我这次的需求比较简单:

  1. 增加一个 ADC 温度采集;
  2. 重新设计待机界面。

基本上用 Cursor 就能完成。这样改动基本都是硬件板级修改,都是在板级文件夹下进行。

如果跟我一样没有太了解这个项目的话,建议还是不要动框架内的东西,哪怕是用 AI。开始试着改了一下会出现各种奇怪的溢出、声音消失、卡顿等问题。需要修改 AI 部分的话还是要细心了解之后再去动手比较合适。

展示一下这次修改后的 UI 等功能后的小智 AI。