回到首页 返回首页
回到顶部 回到顶部
返回上一页 返回上一页

基于行空板K10和deepseek大语言模型的互联交互 简单

头像 kylinpoet 2025.02.12 40 0

一、项目前言

        从2023年12月ChatGPT发布以来,大语言模型已然成为当下技术顶流。而随着国内自研开源的大语言模型deepseek在2025年开年立于世界巅峰之列的态势发展,以及国家人工智能政策的加成,大语言模型点燃了中国人的热情。在这样的背景下,智能设备必然经历更大的革命。本项目旨在利用行空板 K10 开发一个多模态交互的的智能助手,实现通过语音、视频、图像等指令,利用大语言模型的思考和联网能力,控制各类设备和自动智能判断决策,提升生活和工作的便利性,同时也为探索物联网与多模态交互技术的融合应用提供实践案例,符合义务教育信息科技课程中对物联网实践与探索的教学要求。
 image.png

二、项目来源

        依据《义务教育信息科技课程标准(2022年版)》中“物联网实践与探索”“过程与控制”模块的要求,需设计真实场景下的数字化解决方案。

基于行空板K10的物联网语音识别控制图3

 

行空板K10作为集成AI与物联网功能的开源硬件,为教学项目提供技术基础。

基于行空板K10的物联网语音识别控制图1


三、项目功能

为了实现项目的多层次性,本文作为PoE(Proof of Execution)主要从语音识别和大语言模型交互的功能入手,先行探究功能实现的可能性。

实现以下功能:

语音交互:通过中文语音指令控制灯光等设备。

基于行空板K10的物联网语音识别控制图2

大模型接入:通过HTTP API的方式接入deepseek大语言模型。

二次处理和反馈:通过提示词二次处理交互信息,并通过屏幕显示和语音播报呈现

所需硬件:行空板K10(自带LED灯)

所需软件:WiFi网络、deepseek API KEY、JSON处理扩展
 

 

image.png


四、系统设计

功能功能描述技术实现
智能语音  解析中文语音指令、生成语音信息    板载人工智能,语音识别、合成
环境监测

 

  实时显示温度、湿度、光照数据

    板载温度,湿度,光线传感器
设备控制  通过GPIO控制灯光    信号口输出控制
大语言模型语音交互、反馈    GPT技术、联网搜索、深度思考

五、实现过程

 

1.关于deepseek

 

基于deepseek的成功,据有关媒体报道,微软、英伟达、亚马逊等全球领先的云计算平台也宣布接入deepseek,标志着中国AI技术首次大规模反向输出。但常常造成了以下情况:

718867-20250208205934334-1096193235.png

我们可以通过第三方的 硅基流动 服务完成满血版使用:

首先,注册并登录硅基流动官网。现在硅基流动有活动,用我的邀请链接注册 (https://cloud.siliconflow.cn/i/NxHF7Q41),咱俩都能白嫖14块钱额度,高频使用2周到1个月没问题(真不是广告)。
登录后直接进入【模型广场】,别管排在首位的模型,看向最左边导航栏,找到【API密钥】点进去。

718867-20250208210029973-368848702.png

2. 关于json用户库:

参考:

【行空板K10】获得当前所在城市及JSON库的移植
https://mc.dfrobot.com.cn/thread-323610-1-1.html?fromuid=805438
(出处: DF创客社区 - 分享创造的喜悦)

image.png
 

六、相关代码

image.png
image.png
image.png

七、相关问题说明:

1.因为使用的是deepseek的联网搜索功能,所以返回的api信息是比较,复杂的。为了减少代码处理的难度。我这里使用了二次接口,进行数据清洗。

image.png
image.png

可以看到,返回的信息是能满足要求的。

 

2.这里还有一个问题:

因为大语言模型返回的内容中是json格式嵌套数组的。图形化用户库,没有这个功能。所以这里需要用到纯代码编写:

image.png

测试代码:

 

代码
/*!
 * MindPlus
 * esp32s3bit
 *
 */
#include "asr.h"
#include <DFString.h>
#include <ArduinoJson.h>
#include "unihiker_k10.h"

// 动态变量
String mind_s_WangLuoFanHui;
// 函数声明
void DF_HuoQuWangLuoXinXi();
// 创建对象
// DynamicJsonBuffer jsonBuffer;
UNIHIKER_K10      k10;
uint8_t           screen_dir=2;
ASR               asr;


// 主程序开始
void setup() {
	k10.begin();
	k10.initScreen(screen_dir);
	k10.creatCanvas();
	asr.asrInit(CONTINUOUS, CN_MODE, 6000);
	while(asr._asrState == 0){delay(100);}
	k10.canvas->canvasClear();
	k10.canvas->canvasText("行空板K10", 1, 0x0000FF);
	k10.canvas->updateCanvas();
	asr.addASRCommand(0+1, "kai deng");
	asr.addASRCommand(1+1, "guan deng");
	asr.addASRCommand(2+1, "tian qi");
	DF_HuoQuWangLuoXinXi();
}
void loop() {

	delay(100);
	if (asr.isWakeUp()) {
		k10.canvas->canvasText("进入语音识别状态,请说出控制命令词...", 5, 40, 0x0000FF, k10.canvas->eCNAndENFont16, 50, true);
		k10.canvas->updateCanvas();
	}
	else {
		k10.canvas->canvasText("进入休眠状态,请说唤醒词“你好 小新”...", 5, 40, 0x0000FF, k10.canvas->eCNAndENFont16, 50, true);
		k10.canvas->updateCanvas();
	}
	if (asr.isDetectCmdID(0+1)) {
		k10.rgb->write(0, 0xFF0000);
		k10.rgb->write(1, 0x33CC00);
		k10.rgb->write(2, 0x0000FF);
	}
	if (asr.isDetectCmdID(1+1)) {
		k10.rgb->write(-1, 0x000000);
	}
	// 大语言模型天气
	if (asr.isDetectCmdID(2+1)) {
		DF_HuoQuWangLuoXinXi();
	}


}

// 自定义函数
void DF_HuoQuWangLuoXinXi() {
	mind_s_WangLuoFanHui = "{   \"id\": \"97efaa39-07f1-4112-b230-26bafb78bc45@2\",   \"model\": \"deepseek\",   \"object\": \"chat.completion\",   \"choices\": [     {       \"index\": 0,       \"message\": {         \"role\": \"assistant\",         \"content\": \"2025年2月12日,农历正月十五,元宵节。北京白天晴间多云,北风3-4级,阵风可达7级,最高气温6℃。夜间晴,北风1-2级,最低气温-4℃。白天风寒效应显著,外出需防风防寒;夜间风力减弱,适合赏灯赏月,但气温较低,建议保暖。\",         \"reasoning_content\": \"\"       },       \"finish_reason\": \"stop\"     }   ],   \"usage\": {     \"prompt_tokens\": 1,     \"completion_tokens\": 1,     \"total_tokens\": 2   },   \"created\": 1739337432 }";
	DynamicJsonDocument jsonBuffer(1024);
  DeserializationError error = deserializeJson(jsonBuffer, mind_s_WangLuoFanHui);
  if (error) {
    Serial.print(F("deserializeJson() failed: "));
    Serial.println(error.f_str());
    return;
  }

  // 获取choices数组
  JsonArray choices = jsonBuffer["choices"];
  JsonObject choice = choices[0];
  int index = choice["index"];
  const char* role = choice["message"]["role"];
  const char* content = choice["message"]["content"];
  const char* finish_reason = choice["finish_reason"];
  String mind_s_WangLuoFanHui = String(content);
	k10.canvas->canvasText(mind_s_WangLuoFanHui, 5, 40, 0x0000FF, k10.canvas->eCNAndENFont16, 19, true);
	k10.canvas->updateCanvas();
	delay(5000);
}

效果图:image.png

隐藏彩蛋:

测试过程中,发现语音唤醒词使用:hi,esp也是可以的。

 

评论

user-avatar