AI语音智能体开发日记(五)为智能设备注入“灵魂”——详解MCP工具的注册与使用
相关链接AI语音智能体开发日记一如何为“小智”服务器启用并调试 License 功能-CSDN博客AI语音智能体开发日记二解决 Wi-Fi 配网小程序的兼容性问题-CSDN博客AI语音智能体开发日记三解决小程序配网中的蓝牙命名与MAC地址获取问题-CSDN博客AI语音智能体开发日记四在FreeRTOS中构建线程安全的UART2通信模块-CSDN博客AI语音智能体开发日记五为智能设备注入“灵魂”——详解MCP工具的注册与使用-CSDN博客AI语音智能体开发日记六为智能体注入旋律——七牛云音乐服务的接入与避坑指南-CSDN博客AI语音智能体开发日记七搞定功放控制——详解GX8006平台Mute电平配置-CSDN博客推荐链接AI语音智能体架构解析一系统架构全景图-CSDN博客AI语音智能体架构解析二大模型AI 的大脑-CSDN博客AI语音智能体架构解析三智控台指挥中心-CSDN博客AI语音智能体架构解析四AI 语音终端执行器官-CSDN博客AI语音智能体架构解析五小程序/APP遥控器-CSDN博客推荐链接AI 应用 图文 解说 (一) -- 百度智能云 实现 语音 聊天-CSDN博客AI 应用 图文 解说 (二) -- 百度智能云 ASR LIM TTS 语音AI助手程序 -CSDN博客开发手记为智能设备注入“灵魂”——详解MCP工具的注册与使用在嵌入式开发中硬件驱动是设备的“躯体”而业务逻辑则是其“灵魂”。今天我们来深入探讨一下lightning项目中如何通过MCPMachine Control Protocol工具系统将简单的硬件指令封装成可供上层应用调用的、具有明确语义的功能模块。这个过程主要围绕project/ln_model_public/app/servers/qiniu/mcp_server/mcp_tools/smart_toilet/mcp_tools.c文件展开可以分为三个核心步骤定义工具语义、实现指令函数、以及注册工具。第一步定义工具语义 (Mcp的语义定义)MCP工具的核心思想是将一个功能抽象成一个结构体。这个结构体不仅包含了功能的名称更重要的是定义了它的自然语言描述和参数规范让AI或上层应用能够“理解”这个功能是做什么的以及如何使用它。以控制机械狗前进的mcp_tool_dog_forward为例1// 文件: mcp_tools.c 2 3const mcp_tool_t mcp_tool_dog_forward { 4 // 1. 工具的唯一标识名 5 .name dog.action.forward, 6 7 // 2. 工具的自然语言描述用于AI理解 8 .description 靠近的类似词语认为是前进控制机械狗向前行走。可指定持续时间单位秒例如‘向前3秒’。如果不指定时间默认前进1秒。最大支持10秒。, 9 10 // 3. 关联的处理函数 11 .call dog_forward_handler, 12 13 // 4. 是否在独立任务中执行对于有延时的操作必须为true 14 .call_in_task true, 15 16 // 5. 定义工具的参数列表 17 .properties { 18 { 19 .name duration, // 参数名 20 .type kPropertyTypeInteger, // 参数类型整数 21 .has_min_value true, // 是否有最小值 22 .min_value 1, // 最小值为1秒 23 .has_max_value true, // 是否有最大值 24 .max_value 10 // 最大值为10秒 25 }, 26 { .name NULL } // 参数列表结束标志 27 } 28};通过这样的定义一个名为dog.action.forward的工具就拥有了清晰的“身份”它知道自己是干什么的description需要什么参数properties以及具体由哪个函数来执行call。第二步实现指令函数 (Mcp工具指令函数)定义好语义后就需要实现具体的业务逻辑。dog_forward_handler函数就是mcp_tool_dog_forward的执行体。1// 文件: mcp_tools.c 2 3static cJSON *dog_forward_handler(mcp_property_t *args, int args_count) 4{ 5 int duration_sec 1; // 默认1秒 6 7 // 1. 解析参数遍历传入的参数列表查找名为 duration 的参数 8 for (int i 0; i args_count; i) { 9 mcp_property_t *prop args[i]; 10 if (strcmp(prop-name, duration) 0 prop-type kPropertyTypeInteger) { 11 duration_sec prop-value.ival; // 获取参数值 12 break; 13 } 14 } 15 16 // 2. 业务逻辑将秒转换为毫秒并进行FreeRTOS延时 17 int duration_ms duration_sec * 1000; 18 LOG(LOG_LVL_INFO, [MCP] Dog forward for %d seconds (%d ms)\r\n, duration_sec, duration_ms); 19 20 // 模拟前进动作例如通过UART发送指令 21 uint8_t cmd_buf[5] {0x55, 0x01, 0x00, 0x00, 0xAA}; // 示例指令帧 22 for(int i 0; i duration_sec * 10; i) { 23 // 构造并发送“前进”指令 24 cmd_buf[1] 0x02; 25 cmd_buf[4] cmd_buf[0] cmd_buf[1] cmd_buf[2] cmd_buf[3]; // 计算校验和 26 safe_cmd_uart_write((char*)cmd_buf, 5); 27 vTaskDelay(pdMS_TO_TICKS(100)); // 延时100ms 28 } 29 30 // 模拟停止动作 31 cmd_buf[1] 0x00; 32 cmd_buf[4] cmd_buf[0] cmd_buf[1] cmd_buf[2] cmd_buf[3]; 33 safe_cmd_uart_write((char*)cmd_buf, 5); 34 35 LOG(LOG_LVL_INFO, [MCP] Dog stop\r\n); 36 return NULL; 37}这个函数清晰地展示了MCP工具的执行流程参数解析从args数组中安全地提取出duration参数的值。逻辑执行根据参数值执行具体的硬件操作。在这里它通过一个循环持续调用我们之前实现的safe_cmd_uart_write函数向外部设备发送“前进”指令并在结束后发送“停止”指令。第三步注册工具 (Mcp的语义注册)定义和实现都完成后最后一步是将这些工具“注册”到MCP核心系统中使其生效。这个过程在mcp_tools_register_all函数中完成。1// 文件: mcp_tools.c 2 3static int mcp_tools_register_all(void) 4{ 5 int result 0; 6 // 将所有定义好的工具通过 mcp_core_register_tool 函数逐一注册 7 result | mcp_core_register_tool(mcp_tool_device_get_status); 8 result | mcp_core_register_tool(mcp_tool_device_set_volume); 9 // ... 其他工具 ... 10 result | mcp_core_register_tool(mcp_tool_dog_forward); // 注册“前进”工具 11 result | mcp_core_register_tool(mcp_tool_dog_backward); // 注册“后退”工具 12 result | mcp_core_register_tool(mcp_tool_dog_turn_left); // 注册“左转”工具 13 result | mcp_core_register_tool(mcp_tool_dog_turn_right); // 注册“右转”工具 14 // ... 更多工具 ... 15 16 return result; 17}这个函数就像一个总控开关在系统初始化时被调用将我们定义的所有“狗”的动作前进、后退、左转、右转等以及其他设备功能获取状态、设置音量等全部添加到MCP的工具列表中。总结通过“定义语义 - 实现函数 - 注册工具”这三步我们成功地将底层的硬件操作如UART通信封装成了一个个高级的、语义化的MCP工具。这种设计模式的优势非常明显高内聚低耦合每个工具都是一个独立的模块职责单一。易于扩展增加新功能时只需按照同样的模式定义、实现并注册一个新的工具即可无需修改核心框架。AI友好清晰的自然语言描述和参数定义为AI理解和调用设备功能提供了标准化的接口。这不仅是代码的组织方式更是一种让嵌入式设备变得更“智能”、更易于集成的优秀架构思想。

相关新闻

今天不升级AI协作方法,明天就被淘汰:2024Q2行业协作效能预警报告(附自检清单)

今天不升级AI协作方法,明天就被淘汰:2024Q2行业协作效能预警报告(附自检清单)

更多请点击: https://kaifayun.com 第一章:AI协作效能危机的底层逻辑 当团队将Copilot、Cursor或自研AI助手深度嵌入日常开发流程后,代码提交频率上升37%,但线上缺陷密度反而增长21%——这并非工具失效,而是人机协作范…

2026/8/6 9:39:55 阅读更多 →
单片机毕设选题推荐:基于 STM32/51 单片机的水质多参采集声光报警系统开发 单片机控制的水体浊度温度可视化检测终端设计(021601)

单片机毕设选题推荐:基于 STM32/51 单片机的水质多参采集声光报警系统开发 单片机控制的水体浊度温度可视化检测终端设计(021601)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于嵌入式单片机,Java、小程序技术领域和毕业项目实战 ✌️…

2026/8/7 17:32:30 阅读更多 →
OpenAI财报泄露背后:AI大模型的成本困境与行业影响分析

OpenAI财报泄露背后:AI大模型的成本困境与行业影响分析

1. 从一份“泄露”的财报说起:我们看到了什么?最近,一份据称是OpenAI的内部财务数据在圈内流传开来,核心信息相当炸裂:这家全球最受瞩目的AI公司,可能在短短三个月内就烧掉了高达37亿美元,而年化…

2026/8/6 7:44:24 阅读更多 →

最新新闻

机械键盘润轴全攻略:从原理到实践,打造极致手感与Hi-Fi音效

机械键盘润轴全攻略:从原理到实践,打造极致手感与Hi-Fi音效

1. 项目概述:从“哒哒哒”到“哒哒哒”的质变如果你玩过机械键盘,肯定对“润轴”这个词不陌生。它就像键盘圈里的一个神秘仪式,新手听着玄乎,老手却乐此不疲。简单来说,润轴就是给机械键盘的轴体内部涂抹润滑脂&#x…

2026/8/8 2:04:28 阅读更多 →
CRAY-1向量处理机核心架构与设计思想深度解析

CRAY-1向量处理机核心架构与设计思想深度解析

1. 从“古董”中挖掘现代计算思想:CRAY-1为何仍是经典?提到超级计算机,大家脑海里浮现的可能是如今那些占地广阔、功耗惊人、由成千上万颗通用处理器堆叠而成的庞然大物。但在计算机体系结构的发展长河中,有一台机器如同夜空中最亮…

2026/8/8 2:04:28 阅读更多 →
Kubernetes私有镜像拉取密钥配置与实践指南

Kubernetes私有镜像拉取密钥配置与实践指南

1. 为什么需要镜像拉取密钥 在Kubernetes集群中部署应用时,我们经常需要从私有Docker Registry拉取镜像。不同于公开镜像仓库可以直接匿名拉取,私有仓库通常需要身份验证。这就是镜像拉取密钥(ImagePullSecret)发挥作用的地方。 …

2026/8/8 2:04:27 阅读更多 →
计算机毕业设计之汾河流域水情水质监测系统

计算机毕业设计之汾河流域水情水质监测系统

当下社会,信息技术充斥社会各个领域,已融入人们生活的点滴,日常中人们管理信息、办理业务、购买商品等都可以网络线上进行,快速而又便利,特别是随着移动互联网时代的到来,更是让人们随时享受着网络给带来的…

2026/8/8 2:04:27 阅读更多 →
Dify平台MySQL连接失败排查与解决方案

Dify平台MySQL连接失败排查与解决方案

1. 问题现象与初步排查 最近在配置Dify平台的Database插件时遇到了连接失败的问题,具体表现为在填写完数据库连接信息后点击测试连接,系统返回"Connection failed"错误。这个问题在MySQL数据库环境下尤为常见,特别是在本地部署Dify…

2026/8/8 2:04:27 阅读更多 →
家装窗户玻璃选购指南:避开中空玻璃与Low-E镀膜两大误区

家装窗户玻璃选购指南:避开中空玻璃与Low-E镀膜两大误区

1. 这篇文章真正要解决的问题如果你正在装修,或者准备封阳台、换窗户,大概率已经听过“系统窗”、“断桥铝”这些名词。销售会告诉你,型材多厚、五金件多好、密封条多牛。但有一个关键信息,他们可能一笔带过,而你却可能…

2026/8/8 2:03:27 阅读更多 →

日新闻

AI多智能体时代来临,读懂MCP与A2A架构,抢占企业数字化新风口

AI多智能体时代来临,读懂MCP与A2A架构,抢占企业数字化新风口

当下AI应用飞速普及,无数企业下场搭建智能体系统,可落地阶段难题接踵而至:上下文无限堆积频繁爆栈、AI工具调用准确率低下、Token成本居高不下、企业数据权限混乱暗藏安全隐患……很多团队卡在架构搭建环节,空有前沿技术概念&…

2026/8/8 0:00:07 阅读更多 →
PHP二维码生成终极指南:用chillerlan/php-qrcode打造专业级二维码

PHP二维码生成终极指南:用chillerlan/php-qrcode打造专业级二维码

PHP二维码生成终极指南:用chillerlan/php-qrcode打造专业级二维码 【免费下载链接】php-qrcode A PHP QR Code generator and reader with a user-friendly API. 项目地址: https://gitcode.com/gh_mirrors/ph/php-qrcode 在当今数字时代,二维码已…

2026/8/8 0:00:08 阅读更多 →
UniApp微信小程序隐私保护组件开发:从原理到实战

UniApp微信小程序隐私保护组件开发:从原理到实战

1. 项目缘起:为什么我们需要一个隐私保护通用组件?最近在维护一个基于uniapp开发的微信小程序矩阵时,我遇到了一个非常棘手的问题。随着平台对用户隐私保护的要求越来越严格,几乎每一个新版本发布,或者在某些特定机型&…

2026/8/8 0:00:08 阅读更多 →

周新闻

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

1. 从水管网络到最大流:一个核心问题的诞生想象一下,你是一个城市供水系统的总工程师。你的城市有多个水源(水库),需要通过一个复杂的地下管道网络,将水输送到各个居民区。每条管道都有其最大通水能力&…

2026/8/6 22:02:27 阅读更多 →
基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

2026/8/6 22:02:27 阅读更多 →
MATLAB xcorr函数详解:从互相关原理到四大实战应用

MATLAB xcorr函数详解:从互相关原理到四大实战应用

1. 从一次信号“找茬”说起:为什么我们需要互相关几年前,我在处理一组声学传感器数据时遇到了一个棘手的问题。我有两个麦克风记录了一段相同的音频信号,理论上它们接收到的声音波形应该非常相似,只是由于麦克风位置不同&#xff…

2026/8/7 23:24:08 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/7 17:02:37 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/7 23:54:54 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/7 17:02:36 阅读更多 →