用ESP32构建基于大模型的聊天机器人
这是一款用ESP32制作的聊天机器人,可连接国内主流大模型,可自定义唤醒词,支持角色定义。
之前在HomeAssistant里使用Node-RED+小米智能音箱+某GPT实现了智能问答应用,但使用起来不太方便,最近看到一个开源项目,正好手头又有相关配件,于是试着搭建了一个自己的聊天机器人。
一、器件准备
1. ESP32开发板(ESP-WROOM-32)
2、INMP441全向麦克风
3、MAX98357 I2S音频放大器模块
4、1.8寸(128x160)TFT彩色显示屏(8针)
5、小型喇叭
6、3D打印外壳
7、按钮开关
6*6*9按钮微动开关
二、器件连接
INMP441 | ESP32 | MAX98357 | ESP32 | TFT显示屏 | ESP32 | LED (可选) | ESP32 | |||
VDD | 3.3v | Vin | VIN | VDD | VIN | 正极 | GPIO33 | |||
GND | GND | GND | GND | GND | GND | 负极 | GND | |||
SD | GPIO22 | LRC | GPIO27 | SCL | GPIO18 | |||||
WS | GPIO15 | BCLK | GPIO26 | SDA | GPIO23 | |||||
SCK | GPIO4 | DIN | GPIO25 | RST | GPIO12 | |||||
DC | GPIO32 | |||||||||
CS | GPIO5 |
如下图:
三、注册并开通大模型服务
以接入讯飞星火模型为例:
1、注册账号
进入https://www.xfyun.cn注册个人账号
2、创建应用
完成注册并登录后,进入控制台,选择创建新应用,平台将自动生成APPID。
3、开通服务
点击已创建的应用条目,点击“更多服务信息查询”,可查看你的APPID、APISecret、APIKey信息,记录下来后面代码调试将使用。
返回后重新点击已创建的应用条目,进入后选择左侧的Spark4.0 Ultra模型,点击“立即购买”,然后选择我的应用、“免费包(个人)”,最后“确认下单”,这样就开通了讯飞认知大模型。
同样的操作,再选择开通语音转文字服务。
四、烧录固件
1、编译环境准备
下载vscode和platformIO插件
2、从GitHub克隆代码
注意:找到.pio\libdeps\upesy_wroom\TFT_eSPI路径下的User_Setup.h文件,删除它,然后将根目录下的User_Setup.h文件剪切粘贴过去
3、按需修改代码
必须修改的代码:
......
int llm = 1; // 大模型选择参数:0:豆包,1:讯飞星火,2:通义千问
......
// 讯飞stt和大模型服务的参数
String APPID = "12345678"; // App ID,必填
String APISecret = "12345678"; // API Secret,必填
String APIKey = "12345678"; // API Key,必填
......
根据个人喜好可以修改的代码:
......
// 角色设定
String roleSet = "你是一个二次元魔法猫娘,你的名字叫小灵,你的性格可爱活泼,说话简短,同时带有攻击嘲讽意味,你喜欢在回答的末尾加一个“喵”字。";
String roleSet1 = "你是一个二次元魔法猫娘,你的名字叫小灵,你的性格可爱活泼,说话简短,同时带有攻击嘲讽意味,你喜欢在回答的末尾加一个“喵”字。";
......
// 增加足够多的同音字可以提高唤醒率,支持多唤醒词唤醒(askquestion.indexOf("你好") > -1 || askquestion.indexOf("您好") > -1) &&
if( (askquestion.indexOf("坤坤") > -1 || askquestion.indexOf("小白") > -1 || askquestion.indexOf("丁真") > -1 || askquestion.indexOf("九歌") > -1))
{
await_flag = 0; //退出待机状态
start_con = 1; //对话开始标识
Answer = "喵~九歌在的,请尽情吩咐小九歌,主人。";
response(); //屏幕显示Answer以及语音播放
conflag = 1;
return;
}
......
Answer = "嗨~我没有听清,请再说一遍吧";
......
else if (askquestion.indexOf("退下") > -1 || askquestion.indexOf("再见") > -1 || askquestion.indexOf("拜拜") > -1)
{
start_con = 0; // 标识一轮对话结束
musicplay = 0;
Answer = "喵~主人,我先退下了,有事再叫我。";
response(); //屏幕显示Answer以及语音播放
await_flag = 1; // 进入待机状态
awake_flag = 0; // 继续进行唤醒词识别
}
......
4、编译并上传固件
在vscode中安装platformIO插件,编译并上传固件即可。
五、使用说明
1、首次使用设置
1)设备通电后,用电脑连接设备热点ESP32-Setup密码为12345678
2)打开浏览器,输入http://192.168.4.1
3)进入ESP32 Configuration页面,点击“WI-FI Management”
4)输入你的WI-FI信息,点击“Save”
如果需要在其他WIFI环境使用,也可以添加多个WIFI,只不过启动会稍微慢一点。也可以通过“Delete”删除多余的WIFI配置。
2、正常使用
点击ESP32开发板上的“EN”重启键设备,就可以连接WIFI开始使用了。在待机状态下,使用唤醒词“小白”唤醒设备,设备应答后就可以开始提问。设备回答完一个问题,过一段时间没有新的问题,设备会自动回到待机模式。也可以说“拜拜”“退下”让设备进入待机模式。如要在设备回答过程中终止设备回答,可以按ESP32开发板上的“ROOT”按钮,开始下一个提问。如设备响应出现问题,可以按“EN”键重启设备。
六、组装
1、打印3D外壳
在以下地址下载3D打印外壳文件:
百度网盘链接:https://pan.baidu.com/s/1ek-Phzb4BuplCgqt3bZ0RA?pwd=ulze
提取码:ulze
2、组装
按照接线图进行组装,注意为方便操作,需将ESP32开发板上的“EN”、“ROOT”键外接到机壳上。
3、效果视频
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)