当前位置: 首页 > article >正文

基于ESP32与JavaScript的Stack-chan桌面机器人:从硬件组装到AI交互的完整实践

1. 项目概述一个用JavaScript驱动的超可爱桌面机器人如果你和我一样对桌面上的小玩意儿情有独钟同时又对硬件编程和机器人技术充满好奇那么Stack-chan绝对是一个会让你眼前一亮的项目。它不是一个简单的摆件而是一个由JavaScript驱动、运行在ESP32微控制器具体是M5Stack系列硬件上的开源机器人。它的核心魅力在于开发者将复杂的机器人控制逻辑通过Moddable这个JavaScript运行时环境变得像写网页应用一样直观和有趣。你可以用你熟悉的JavaScript或TypeScript代码赋予这个机器人表情、动作、语音甚至让它与环境互动而这一切都封装在一个设计得极其“卡哇伊”Kawaii的3D打印外壳里。简单来说Stack-chan是一个融合了硬件工程电路设计、3D建模、嵌入式开发和创意编程的绝佳实践平台无论你是想学习机器人入门还是想为你的创客项目找一个有趣的载体它都非常适合。2. 核心设计思路与硬件选型解析2.1 为什么选择JavaScript和ESP32Stack-chan的技术栈选择非常有意思它避开了传统的嵌入式C/C路线转而采用了JavaScript。这背后的考量主要有三点降低开发门槛JavaScript是全球最流行的编程语言之一拥有庞大的开发者社区。这意味着有更多人可以快速上手无需先啃下复杂的嵌入式C语言和实时操作系统。你可以用写脚本的逻辑来思考机器人的行为比如用setTimeout来控制动作序列用事件监听来响应传感器输入这对于前端开发者或初学者来说非常友好。Moddable SDK的强大支持项目依赖于Moddable SDK这是一个专门为微控制器优化JavaScript特别是ECMAScript 2020标准的开源工具链。它并非在ESP32上运行一个完整的Node.js而是提供了一个极其精简、高效的JavaScript运行时直接与硬件交互保证了实时性。Moddable还提供了丰富的硬件驱动GPIO、I2C、SPI、显示屏等和图形库让开发图形界面和硬件控制变得简单。ESP32的性价比与生态M5Stack系列模块基于ESP32芯片它双核、主频高、Wi-Fi/蓝牙双模性能足以流畅运行JavaScript引擎并驱动多个舵机。更重要的是M5Stack形成了完善的模块化生态M5Units如摄像头、麦克风、环境传感器等可以像乐高一样轻松堆叠扩展这完美契合了“Stack”堆叠的概念和机器人不断升级的需求。2.2 硬件架构深度拆解一个完整的Stack-chan机器人其硬件构成可以看作一个三层结构核心控制层M5Stack Core或M5StickC Plus作为大脑。它负责运行JavaScript程序、处理逻辑、驱动屏幕显示表情并通过其GPIO引脚输出控制信号。执行与结构层这是机器人的“身体”。通常包括两个舵机伺服电机来分别控制头部的左右转动Pan和上下点头Tilt。舵机通过一个简单的舵机驱动板或直接使用M5Stack的GROVE接口与核心连接。所有机械结构由一个精心设计的3D打印外壳包裹这个外壳文件STL格式在项目的/case目录下开源。感知与扩展层这是机器人的“感官”。可以通过M5Stack的I2C或UART接口接入各种M5Units例如麦克风单元实现语音唤醒或简单的声音识别让Stack-chan能“听”到你的呼唤。TOF激光测距单元感知前方障碍物或人的距离实现避障或“凝视”跟随。摄像头单元实现简单的人脸检测或颜色识别让互动更有趣。环境传感器单元感知温湿度、气压让Stack-chan能播报天气。注意硬件选型并非固定。项目原理图位于/schematics目录使用KiCad设计是开放的这意味着你可以根据手头的材料进行调整。例如如果你没有标准的9g舵机也可以使用其他规格的PWM舵机只需在代码中调整角度映射参数即可。3. 从零开始构建你的Stack-chan完整实操指南3.1 材料准备与硬件组装在开始写代码之前你需要先把机器人的“身体”搭建起来。以下是基于最常见配置的物料清单主控模块M5Stack Basic / Core2 / StickC Plus 任选其一。Core2屏幕更大更漂亮但StickC Plus更小巧便宜。舵机两个微型数字舵机如MG90S。一个用于水平旋转Pan一个用于垂直俯仰Tilt。注意检查舵机的工作电压通常是5V和扭矩。结构件使用PLA或PETG材料3D打印出/case目录下的所有STL文件。通常包括头部外壳、身体底座、舵机支架、颈部连接件等。打印时建议层高0.2mm填充率20%以上以保证强度。连接线与驱动板杜邦线母对母、公对母。如果舵机较多或电流需求大建议配备一个独立的舵机驱动板如PCA9685通过I2C控制以减轻主控的GPIO负担并提供更稳定的电源。如果只有两个舵机可以直接连接到M5Stack的GROVE接口需注意电压匹配。工具螺丝刀套装安装舵机、烙铁与焊锡如需焊接连接线、热熔胶或螺丝固定电路板。组装流程关键点舵机校准在将舵机安装到3D打印件之前务必先进行软件校准。上传一个简单的测试固件让舵机转动到90度中间位置然后再将其物理安装到中位。这能避免硬件结构因舵机初始角度不对而受损。走线管理3D外壳内部空间有限合理规划舵机线和传感器走线并用扎带或胶水固定防止线材缠绕影响运动或造成短路。电源考量当同时驱动屏幕、Wi-Fi和两个舵机时单靠USB供电可能不足尤其在舵机堵转时会导致M5Stack重启。建议在最终版本中为舵机提供独立的5V电源如通过电池盒并与M5Stack共地。3.2 开发环境搭建与固件编译这是将“灵魂”代码注入“身体”的关键步骤。Stack-chan的固件开发主要围绕Moddable SDK进行。步骤一搭建Moddable开发环境安装依赖根据你的操作系统Windows/macOS/Linux按照 Moddable官方文档 安装必要的工具链包括ESP32的编译器Xtensa、构建工具和Python 3。获取源码克隆Stack-chan的主仓库和必要的子模块。git clone --recursive https://github.com/stack-chan/stack-chan.git cd stack-chan/firmware配置设备类型在firmware目录下你需要根据你使用的M5Stack设备型号选择对应的构建配置。主要配置文件位于/targets子目录下。例如对于M5Stack Core2相关的配置和驱动文件会有所不同。步骤二理解项目结构与核心配置进入firmware目录你会看到类似如下的结构firmware/ ├── main.js # 应用程序的主入口文件 ├── manifest.json # 项目的“清单”定义资源、模块和引脚映射 ├── modules/ # 自定义的JavaScript模块如表情管理、舵机驱动 ├── resources/ # 图片、字体等资源文件 └── targets/ # 针对不同硬件目标的构建配置manifest.json是你需要重点关注的文件。在这里你需要定义哪个物理引脚GPIO连接了哪个舵机屏幕的型号是什么以及引用了哪些资源。{ include: [ ./manifest_base.json, ./targets/m5stack_core2/manifest.json ], modules: { *: ./modules/* }, resources: { *: ./resources/* }, config: { servos: { pan: { pin: 32, minAngle: -90, maxAngle: 90, neutral: 90 }, tilt: { pin: 33, minAngle: -30, maxAngle: 30, neutral: 90 } } } }上面的配置示例定义了两个舵机“pan”连接在GPIO32“tilt”连接在GPIO33并设置了它们的运动角度范围和中立位。步骤三编译与烧录固件编译在firmware目录下运行Moddable的构建命令。命令会根据manifest.json和指定的目标平台将JavaScript代码、资源文件一起编译并链接成ESP32可执行的二进制文件。# 例如为目标设备编译调试版本 mcconfig -d -m -p esp32/m5stack_core2烧录编译成功后使用esptool.py或M5Stack提供的烧录工具如M5Burner将生成的固件文件通常是.bin文件烧录到设备中。更简单的方式是使用PlatformIO或VSCode的Moddable插件它们通常提供一键编译烧录的功能。实操心得第一次搭建Moddable环境可能会遇到一些环境变量或路径问题尤其是Windows用户。最常见的错误是“xtensa-esp32-elf-gcc not found”。请务必仔细检查官方文档的每一步并确保相关工具链的路径已正确添加到系统的PATH环境变量中。编译过程会下载大量依赖请保持网络通畅。3.3 核心功能代码解读与自定义固件烧录成功后一个基础的Stack-chan就已经能动了。接下来我们深入其JavaScript代码看看如何自定义它的行为。表情系统如何工作Stack-chan的表情显示在M5Stack的屏幕上其本质是一个简单的状态机和动画系统。在modules/face.js或类似的模块中你会找到定义各种表情如HAPPY,SAD,ANGRY,SLEEPY的对象。每个表情可能由多张帧序列图片组成或者通过矢量图形指令实时绘制。// 示例一个简单的表情定义 const faces { NEUTRAL: { draw: (graphics) { graphics.fillCircle(120, 120, 30); // 画脸 graphics.fillCircle(100, 110, 5); // 左眼 graphics.fillCircle(140, 110, 5); // 右眼 graphics.drawLine(110, 140, 130, 140); // 嘴巴 } }, HAPPY: { draw: (graphics) { // ... 画笑脸嘴巴是向上的弧线 } } }; // 在main.js中切换表情 import Face from face; let currentFace NEUTRAL; function setExpression(expression) { if (faces[expression]) { currentFace expression; // 触发屏幕重绘 } }你可以通过修改这些绘图函数或者替换resources目录下的图片资源来创造独一无二的表情。舵机控制与动作编排舵机控制模块如modules/servo.js会暴露一个简单的API例如servo.setAngle(pan, 45)。更高级的动作是通过补间动画Tweening来实现平滑运动。import Servo from servo; import { Tween } from tween; // Moddable SDK可能自带的或自定义的补间库 // 让头部从当前位置平滑转动到30度 let panAngle 0; new Tween(panAngle, 30, 500 /* 500毫秒 */, (value) { panAngle value; Servo.setAngle(pan, panAngle); });你可以将一系列补间动画和表情切换组合起来编排成复杂的“行为”比如“好奇地左右张望”或“点头同意”。如何添加传感器交互假设你接入了一个人体红外PIR传感器到GPIO 25用于检测运动。在manifest.json中配置引脚config: { sensors: { pir: { pin: 25, mode: input } } }在主程序中读取并响应import { Digital } from pins; // 使用Moddable的GPIO API const pir new Digital({ pin: 25, mode: Digital.Input }); // 轮询或使用中断如果SDK支持 system.timer.repeat(() { if (pir.read()) { trace(Motion detected!\n); setExpression(SURPRISED); // 触发一个看向传感器方向的头部动作 } }, 100); // 每100毫秒检查一次4. 高级应用与社区生态探索当你完成了基础构建和编程后Stack-chan的玩法才刚刚开始。它的开源和模块化特性带来了无限的扩展可能。4.1 集成语音与人工智能能力虽然直接在资源有限的ESP32上运行大型AI模型不现实但我们可以通过云服务或边缘AI模块来增强它。语音合成TTS可以使用M5Stack的Speaker单元播放预先录制的音频片段。对于动态文本可以连接Wi-Fi后调用在线的免费TTS API如Google Cloud TTS的免费额度将返回的音频流下载并播放。语音识别STT与对话更高级的玩法是让Stack-chan成为一个ChatGPT或类似大语言模型的实体交互终端。具体架构可以是Stack-chan通过麦克风采集语音通过Wi-Fi发送到你的家庭服务器或云函数。服务器端处理语音识别STT将文本送入大语言模型如通过OpenAI API得到文本回复后再通过TTS转换成语音最后将音频流发回给Stack-chan播放。同时Stack-chan可以根据回复内容的关键词同步做出相应的表情和动作。这需要你在服务器端编写一个简单的中间层服务。4.2 利用Fusion 360和KiCad进行个性化改造项目的3D外壳文件STL是用Fusion 360设计的电路原理图是用KiCad绘制的。这意味着你完全可以进行二次创作。外观改造使用Fusion 360导入原始的STEP或F3D文件修改外壳的造型。你可以为它加上耳朵、帽子、披风或者完全重新设计一个科幻或复古风格的躯体。这是学习参数化3D设计的绝佳实践。电路扩展如果你觉得现有的I/O口不够用或者想集成更多的传感器可以打开/schematics目录下的KiCad工程文件。你可以学习如何在原主控板的基础上设计一个属于自己的“扩展盾板”集成更多的传感器接口、电机驱动芯片等然后送去PCB打样。这能将Stack-chan从一个组装项目提升到一个真正的硬件设计项目。4.3 融入社区与贡献Stack-chan拥有一个活跃的Discord社区链接在项目首页。在这里你可以展示作品分享你独一无二的Stack-chan造型、代码或有趣的应用视频。寻求帮助遇到硬件或软件问题时社区里的资深爱好者通常能提供非常具体的解决方案。参与开发如果你修复了一个Bug或者实现了一个很酷的新功能比如一个新的表情包、一个传感器驱动可以向GitHub仓库提交Pull Request。开源项目的生命力正源于此。获取灵感看看其他人用Stack-chan做了什么——有人把它做成了天气预报员有人把它接入了智能家居作为通知终端还有人用它来教孩子编程。5. 常见问题与故障排查实录在实际搭建和开发过程中你几乎一定会遇到下面这些问题。这里记录了我踩过的坑和解决方案。5.1 硬件相关问题问题1舵机抖动、不转动或转动角度不准。排查电源不足这是最常见的原因。使用万用表测量舵机供电电压在负载下是否稳定在5V左右。尝试单独用一个5V/2A的电源适配器给舵机供电。信号干扰确保舵机信号线远离电源线。可以尝试在舵机电源正负极之间并联一个100uF的电解电容以平滑电压。脉冲宽度范围不对舵机的中立位1500us和角度范围通常±500us可能因品牌而异。你需要校准代码中的minAngle/maxAngle对应的微秒数。修改servo.js驱动模块中的映射函数。解决优先加强电源。然后使用一个舵机测试器或编写一个简单的角度扫描程序逐步调整参数找到你手上舵机的实际运动范围。问题23D打印件组装不顺畅舵机装不进去或太松。排查FDM 3D打印存在收缩率孔位尺寸可能与设计有微小偏差。解决对于太紧的孔可以使用手钻或锉刀进行扩孔。对于太松的配合可以在舵机耳片上缠绕几圈电工胶带增加摩擦力或者使用热熔胶辅助固定。在打印前在切片软件中设置一个微小的“水平扩展补偿”如-0.1mm可以改善孔位尺寸。问题3Wi-Fi连接不稳定导致需要网络的功能时好时坏。排查ESP32的天线性能受周围金属物体影响。Stack-chan的金属舵机和内部线材可能形成干扰。解决在代码中增加Wi-Fi重连逻辑。确保路由器信号良好。如果问题严重可以考虑使用外置的陶瓷天线模块或者将Wi-Fi代码放在一个独立的任务中避免被其他高优先级任务阻塞。5.2 软件与开发环境问题问题1编译时出现“内存不足”错误。排查JavaScript代码和资源尤其是图片占用了过多的Flash或RAM。解决优化资源将屏幕上的图片转换为低色深的位图如1-bit或4-bit灰度使用图像压缩工具。精简代码移除未使用的模块和库。使用Moddable的xsbug调试器分析内存使用情况。启用PSRAM如果你的M5Stack型号如Core2支持外接PSRAM确保在manifest.json中正确配置并启用它这能极大扩展可用内存。问题2程序运行一段时间后崩溃或重启。排查这通常是内存泄漏或栈溢出引起的。在嵌入式JavaScript中常见原因是创建了太多未释放的对象如事件监听器、定时器或者递归调用过深。解决使用xsbug连接设备进行实时调试观察内存变化。检查所有system.timer.repeat创建的定时器在不需要时用.close()方法显式关闭。避免在频繁调用的函数如动画循环中创建新的数组或对象。问题3如何调试我的JavaScript代码解决Moddable SDK的xsbug工具是强大的调试器。在编译时加入-d调试标志然后通过串口连接设备。你可以在xsbug中设置断点、单步执行、查看变量、调用堆栈和内存分配其体验类似于在浏览器中使用开发者工具这对于排查复杂逻辑错误至关重要。5.3 功能实现问题问题1我想让多个动作顺序执行代码变得非常混乱全是回调函数嵌套。解决这是异步编程的经典问题。你可以引入一个简单的状态机或行为树库来管理复杂的行为序列。或者利用async/await语法如果Moddable运行时支持到ES2017配合自己编写的sleep函数基于Promise和timer可以让异步代码看起来像同步一样清晰。// 示例一个顺序执行的动作序列 async function performGreeting() { await lookAt(0, 20); // 抬头 await say(Hello!); // 说话假设是异步的 await wait(500); // 等待500毫秒 await nod(2); // 点头两次 setExpression(HAPPY); // 切换为开心表情 }问题2自定义的表情图片显示颜色不对或位置偏移。排查图片的格式、色深、尺寸可能与屏幕驱动期望的不匹配。解决仔细阅读Moddable文档中关于Resource和Texture的部分。确保图片使用工具如image2cs或png2bmp转换成了SDK支持的原始格式如CLUT16。在代码中加载图片时确认传入的坐标是相对于屏幕左上角(0,0)点的。构建和编程Stack-chan的过程是一个典型的“软硬结合”项目之旅。它不会一帆风顺舵机不转、代码崩溃、打印件报废都是常态。但每解决一个问题你对嵌入式系统、机器人学、JavaScript运行时的理解就会加深一层。这个项目的价值远不止于得到一个会动的可爱机器人更在于它为你打开了一扇门让你亲手实践了从3D设计、电路理解、固件开发到上层应用逻辑的完整闭环。当你最终看到自己编写的几行代码让这个小家伙转过头来用你设计的表情“看”向你时那种成就感是纯粹软件项目难以比拟的。我建议你先从完全复现官方版本开始确保主干道跑通然后再挑选一两个你最感兴趣的方向比如改外观、加一个新传感器、写一个有趣的行为进行深度定制这样学习曲线最平滑也最容易获得持续的正反馈。

相关文章:

基于ESP32与JavaScript的Stack-chan桌面机器人:从硬件组装到AI交互的完整实践

1. 项目概述:一个用JavaScript驱动的超可爱桌面机器人 如果你和我一样,对桌面上的小玩意儿情有独钟,同时又对硬件编程和机器人技术充满好奇,那么 Stack-chan 绝对是一个会让你眼前一亮的项目。它不是一个简单的摆件&#xff0c…...

解锁AI潜能:系统提示词设计模式与实战应用指南

1. 项目概述:一个被低估的ChatGPT系统提示词仓库 如果你经常和ChatGPT、Claude这类大模型打交道,肯定遇到过这样的场景:你提了一个问题,但模型的回答要么过于笼统,要么完全跑偏,跟你想要的格式或深度差了十…...

开源学术写作工具箱:自动化工作流提升研究效率

1. 项目概述:一个为学术写作而生的开源工具箱 如果你是一名研究生、博士生,或者任何需要与学术论文、研究报告打交道的研究者,那么你一定对写作过程中的那些“琐碎但必要”的环节深有体会。从文献管理、格式排版,到数据可视化、参…...

基于大语言模型的自动化知识图谱模式生成:原理、实践与应用

1. 项目概述:当大模型学会“画图”,知识图谱构建进入自动化时代如果你也和我一样,曾经被构建知识图谱(Knowledge Graph, KG)那繁琐、耗时且高度依赖人工标注的流程折磨过,那么看到“AutoSchemaKG”这个名字…...

Sverklo:为AI编程助手注入代码结构智能,实现精准搜索与安全重构

1. 项目概述:当AI助手开始“理解”你的代码如果你和我一样,日常重度依赖像Claude Code、Cursor这类AI编程助手,那你一定也经历过那种“血压升高”的时刻:你让它修改一个核心函数,它改得飞快,代码看起来也像…...

智能字典生成器:从规则引擎到安全测试的自动化密码构造

1. 项目概述与核心价值最近在GitHub上看到一个挺有意思的项目,叫“dictator”。光看名字,你可能会联想到一些不太好的东西,但在技术圈里,这个名字其实挺直白的——它就是一个“字典生成器”。不过,别小看它&#xff0c…...

探索Nginx:深入理解Nginx基础组件的使用

1.1、ngx_palloc相关源码 /src/core/ngx_palloc.h。&#xff08;相关实现在/src/core/ngx_palloc.c文件&#xff09; 展开 代码语言&#xff1a;C 自动换行 AI代码解释 #ifndef _NGX_PALLOC_H_INCLUDED_ #define _NGX_PALLOC_H_INCLUDED_ #include <ngx_config.h> #i…...

掌握pip的基本命令和高级用法:轻松管理Python包

Ubuntu系统安装pip&#xff1a; 打开终端&#xff0c;输入以下命令以更新软件包列表&#xff1a; sudo apt-get update 安装pip包&#xff1a; sudo apt-get install python3-pip 安装完成后&#xff0c;可以通过以下命令来验证pip是否成功安装&#xff1a; pip3 --version …...

隐私优先的本地化个人基因组分析工具:从数据到洞察的完整指南

1. 项目概述&#xff1a;一个隐私优先的本地化个人基因组分析工具 如果你和我一样&#xff0c;对消费级基因检测报告里那些“你有2.1%的尼安德特人血统”或者“你患某种疾病的风险是平均水平的1.2倍”的模糊描述感到不满足&#xff0c;同时又对将原始DNA数据上传到云端心存顾虑…...

从零构建智能代码解释器:LLM与沙箱的工程实践

1. 项目概述&#xff1a;当代码有了“思考”的能力最近在GitHub上看到一个挺有意思的项目&#xff0c;叫haseeb-heaven/code-interpreter。光看名字&#xff0c;你可能觉得这又是一个普通的代码执行工具&#xff0c;或者一个在线编程环境。但如果你点进去&#xff0c;花点时间研…...

Claudish:轻量级Claude API代理网关的设计与实战

1. 项目概述&#xff1a;Claudish&#xff0c;一个为Claude API设计的轻量级代理网关 如果你最近在尝试将Anthropic的Claude模型集成到自己的应用里&#xff0c;大概率会遇到一个头疼的问题&#xff1a;官方API的调用方式&#xff0c;特别是流式响应&#xff08;Streaming&…...

大模型智能路由引擎:动态调度多AI模型实现降本增效

1. 项目概述&#xff1a;一个技能模型路由器的诞生最近在折腾大模型应用开发的朋友&#xff0c;估计都绕不开一个核心痛点&#xff1a;如何高效、低成本地管理和调用多个不同能力的AI模型。无论是OpenAI的GPT系列、Claude&#xff0c;还是开源的Llama、Qwen&#xff0c;每个模型…...

【汽车芯片功能安全分析与故障注入实践 08】Diagnostic Coverage 是怎么算出来的?

作者&#xff1a; Darren H. Chen 方向&#xff1a; 汽车芯片功能安全分析与故障注入实践 Demo&#xff1a; D08_dc_engine 标签&#xff1a; 汽车芯片 功能安全 Diagnostic Coverage DC Safety Mechanism FMEDADemo 说明 D08_dc_engine 的目标是实现一个简化但可解释的 Diagno…...

Orcha:为AI编程助手构建微服务架构感知的智能工作空间

1. 项目概述&#xff1a;为AI智能体装上“工作空间大脑” 如果你和我一样&#xff0c;正在一个由多个独立代码仓库组成的微服务架构里折腾&#xff0c;并且尝试用Claude Code、Cursor这类AI编程助手来提升效率&#xff0c;那你肯定遇到过这样的场景&#xff1a;每次打开一个新的…...

macOS智能鼠标模拟器:告别远程会话超时,保持连接活跃

1. 项目概述&#xff1a;一个为macOS设计的智能鼠标模拟器如果你和我一样&#xff0c;经常需要远程连接到公司的开发机&#xff0c;或者长时间在虚拟机里跑一些测试任务&#xff0c;那你一定对“会话超时断开”这个烦人的问题深恶痛绝。无论是微软的远程桌面、VNC&#xff0c;还…...

iButton数据记录器:冷链监控与环境监测技术详解

1. iButton数据记录器概述iButton数据记录器是Maxim Integrated公司推出的一款微型环境监测设备&#xff0c;外形仅相当于五枚叠放的硬币大小&#xff08;16mm直径&#xff09;。这种不锈钢封装的设备内置温度传感器&#xff08;部分型号含湿度传感器&#xff09;、实时时钟、非…...

从思维链到思维图:GoT框架如何革新大语言模型推理

1. 项目概述&#xff1a;从“思维链”到“思维图”的范式跃迁如果你最近在关注大语言模型&#xff08;LLM&#xff09;的应用与推理能力增强&#xff0c;那么“思维链”&#xff08;Chain-of-Thought, CoT&#xff09;这个词你一定不陌生。它通过让模型“一步一步思考”&#x…...

通过用量看板观测TaotokenAPI调用成本与模型消耗分布

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 通过用量看板观测Taotoken API调用成本与模型消耗分布 接入大模型服务后&#xff0c;成本管理是开发者持续关注的核心议题。直接使…...

CANN/SiP三维FFT接口文档

FFT_3D 【免费下载链接】sip 本项目是CANN提供的一款高效、可靠的高性能信号处理算子加速库&#xff0c;基于华为Ascend AI处理器&#xff0c;专门为信号处理领域而设计。 项目地址: https://gitcode.com/cann/sip 产品支持情况 产品是否支持Atlas 200I/500 A2 推理产品…...

ChatGPT-AutoExpert:构建领域专家提示词,实现AI深度专业协作

1. 项目概述&#xff1a;当ChatGPT学会“自我进化”如果你和我一样&#xff0c;深度依赖ChatGPT进行编程、写作或解决复杂问题&#xff0c;那你一定遇到过这样的困境&#xff1a;面对一个专业领域的问题&#xff0c;你需要反复向ChatGPT解释背景知识、行业术语和具体约束&#…...

移动端视频帧插值技术:ANVIL框架与NPU优化实践

1. 移动端视频帧插值的技术挑战与ANVIL框架概述视频帧插值&#xff08;Video Frame Interpolation, VFI&#xff09;作为提升视频流畅度的关键技术&#xff0c;在移动设备上实现实时处理面临三重技术壁垒&#xff1a;首先是计算复杂度与功耗限制&#xff0c;传统光流法需要执行…...

跟着 MDN 学 HTML day_30:(AbortController 实现可取消的异步请求)

在现代 Web 开发中&#xff0c;异步操作随处可见&#xff0c;尤其是网络请求。但有时候我们需要主动取消一个正在进行的请求&#xff0c;比如用户切换了页面、重复提交表单、或者文件下载被中断。传统的做法往往难以优雅地处理这些场景。AbortController 的出现&#xff0c;为我…...

PL/SQL:异常处理补充

PL/SQL异常处理补充&#xff1a;本文在基础异常处理语法基础上&#xff0c;重点补充了5个实用知识点&#xff1a;常见预定义异常&#xff08;如NO_DATA_FOUND&#xff09;及其应用场景&#xff1b;两种自定义异常实现方式&#xff08;异常别名与RAISE_APPLICATION_ERROR&#x…...

离线优先的Markdown编辑器:inkdown如何实现极致专注写作

1. 项目概述&#xff1a;一个为创作者而生的轻量级写作工具如果你和我一样&#xff0c;经常需要在不同设备间切换写作&#xff0c;或者对市面上那些功能臃肿、界面花哨的写作软件感到厌倦&#xff0c;那么你可能会对inkdown产生兴趣。这不是一个功能大而全的“巨无霸”&#xf…...

ASIC功能验证:基于规范的方法与Specman实战

1. ASIC功能验证的现状与挑战在当今的芯片设计领域&#xff0c;功能验证已成为决定项目成败的关键环节。作为一名从业十余年的验证工程师&#xff0c;我亲眼见证了ASIC设计规模从几十万门级发展到如今的数亿门级&#xff0c;而验证复杂度却呈指数级增长。传统验证方法在面对这种…...

PMP管理大数据学习建议

本文提出用PMP五大过程组管理大数据开发学习&#xff0c;建议&#xff1a; 启动阶段明确学习边界&#xff0c;制定项目章程&#xff08;如6周掌握PythonOracle核心&#xff09;&#xff1b;规划阶段细化WBS分解&#xff08;Python语法→数据结构→Oracle SQL→PL/SQL&#xff0…...

别再刷后台了!我用凌风工具箱导出竞价表格,摸清所有对手底牌

做Temu一年多&#xff0c;我最怕的不是报不上活动&#xff0c;不是物流延迟&#xff0c;而是——竞价。每次打开商家后台的竞价管理页面&#xff0c;看着密密麻麻的商品列表和不断跳动的竞价倒计时&#xff0c;心里就开始发慌。哪个品该竞价、哪个该守住、哪个该放弃&#xff1…...

基于MCP协议的AI智能体实时金融数据工具箱Tickerr详解

1. 项目概述&#xff1a;一个为AI智能体打造的实时金融数据工具箱最近在折腾AI智能体&#xff08;Agent&#xff09;开发&#xff0c;特别是想让它们能处理一些实时性要求高的任务&#xff0c;比如监控股票价格、追踪新闻动态。我发现&#xff0c;要让一个智能体真正“理解”并…...

别再手动下架了!Temu查重复铺货那晚,我10分钟救了三个店

上周三晚上十一点多&#xff0c;我正准备关电脑睡觉&#xff0c;群里突然炸了。“卧槽&#xff0c;三个店全收到重复铺货警告&#xff01;几十条链接被标记了&#xff01;”我瞬间睡意全无。你们知道的&#xff0c;Temu现在对重复铺货是零容忍——一旦触发&#xff0c;直接下架…...

轻量级定时任务调度库timetask:配置即代码的Python实践指南

1. 项目概述与核心价值最近在折腾个人效率工具链&#xff0c;发现一个挺有意思的开源项目&#xff0c;叫haikerapples/timetask。乍一看名字&#xff0c;可能觉得就是个简单的定时任务工具&#xff0c;但深入把玩之后&#xff0c;我发现它的设计理念和实现方式&#xff0c;恰好…...