为什么我可以轻易地用口哨吹出自己想吹的音乐,用钢琴确弹不出
最近想玩 midi 键盘编曲,发现自己根本找不到想要音,有感而发
顺带咨询一下,想要自娱自乐 弹唱一首,有什么快速入门的方法
xiaohack博客专注前沿科技动态与实用技术干货分享,涵盖 AI 代理、大模型应用、编程工具、文档解析、SEO 实战、自动化部署等内容,提供开源项目教程、科技资讯日报、工具使用指南,助力开发者、AI 爱好者获取前沿技术与实战经验。
最近想玩 midi 键盘编曲,发现自己根本找不到想要音,有感而发
顺带咨询一下,想要自娱自乐 弹唱一首,有什么快速入门的方法
上一篇我们完成了 详细的使用文档请参考: Kite 的源码托管在 GitHub 和 Gitee 上,您可以在以下地址查看和贡献: Kite 是一个功能强大、易于使用的 ORM 框架,它通过全自动映射和简洁的 API,大大简化了数据库操作的开发工作。无论是在 Kotlin 项目还是 Java 项目中,都能提供高效、便捷的数据库访问体验。 如果您正在寻找一个轻量级、高性能的 ORM 框架,Kite 绝对值得一试!Kite 单表基础 CRUD 全解,Java&Kotlin 一行代码搞定数据库操作
Kite 的 Spring Boot 快速集成,并用select()实现了全表查询,今天作为功能篇的开篇,我们吃透 Kite 最核心、最常用的单表基础 CRUD 能力—— 新增、更新、删除、全表查询、单条查询、数量查询、分页查询,这是所有 ORM 框架的核心基础能力,也是开发者每天用得最多的功能。Kite 框架的 BaseMapper 提供了数据库表的基础 CRUD 操作方法。插入操作
insert(entity): 将单个实体插入数据库表中。insertSelective(entity): 插入单个实体到数据库表,仅插入非空字段。batchInsert(list): 批量插入实体到数据库表。batchInsertSelective(list): 批量插入实体到数据库表,仅插入非空字段。batchInsert(list, batchSize): 批量插入实体到数据库表,可指定批次大小。batchInsertSelective(list, batchSize): 批量插入实体到数据库表,可指定批次大小,仅插入非空字段。当未指定
batchSize参数时,默认批次大小为1000。删除操作
delete(entity): 根据条件实体删除单个实体。deleteById(id): 根据主键删除单个实体。deleteByIds(ids): 根据主键批量删除实体。deleteWrapper(): 根据指定条件删除单个实体。deleteWrapper(deleteWrapper): 根据指定条件删除单个实体。更新操作
update(entity): 根据主键更新单个实体。update(entity, conditionEntity): 根据指定条件更新单个实体。updateSelective(entity): 根据主键更新单个实体,仅更新非空字段。updateSelective(entity, conditionEntity): 根据指定条件更新单个实体,仅更新非空字段。updateWrapper(): 根据指定条件更新单个实体。updateWrapper(updateWrapper): 根据指定条件更新单个实体。batchUpdate(list): 批量更新实体到数据库表。batchUpdate(list, conditionEntity): 批量更新实体到数据库表,根据指定条件。batchUpdateSelective(list): 批量更新实体到数据库表,仅更新非空字段。batchUpdateSelective(list, conditionEntity): 批量更新实体到数据库表,根据指定条件,仅更新非空字段。batchUpdate(list, batchSize): 批量更新实体到数据库表,可指定批次大小。batchUpdateSelective(list, batchSize): 批量更新实体到数据库表,可指定批次大小,仅更新非空字段。batchUpdate(list, conditionEntity, batchSize): 批量更新实体到数据库表,根据指定条件,可指定批次大小。batchUpdateSelective(list, conditionEntity, batchSize): 批量更新实体到数据库表,根据指定条件,可指定批次大小,仅更新非空字段。基础查询
select(): 查询所有实体。select(orderBy): 查询所有实体,并指定排序。select(orderBys): 查询所有实体,并指定多个排序。select(entity): 查询所有实体,使用指定的条件实体。select(entity, orderBy): 查询所有实体,使用指定的条件实体和排序。select(entity, orderBys): 查询所有实体,使用指定的条件实体和多个排序。queryWrapper(): 查询所有实体,使用指定的查询包装器。queryWrapper(queryWrapper): 查询所有实体,使用指定的查询包装器。查询单个
selectById(id): 根据 ID 查询单个实体。selectOneWrapper(queryWrapper): 查询单个实体,使用指定的查询包装器。查询数量
count(): 查询所有实体的数量。count(entity): 查询满足条件实体的数量。countWrapper(): 查询所有实体的数量,使用指定的计数包装器。countWrapper(countWrapper): 查询满足条件实体的数量,使用指定的计数包装器。分页查询
paginate(pageNumber, pageSize): 分页查询所有实体,指定页码和每页大小。paginate(pageNumber, pageSize, orderBy): 分页查询所有实体,指定页码、每页大小和排序。paginate(pageNumber, pageSize, orderBys): 分页查询所有实体,指定页码、每页大小和多个排序。paginate(pageNumber, pageSize, entity): 分页查询实体,指定页码、每页大小和条件实体。paginate(pageNumber, pageSize, entity, orderBy): 分页查询实体,指定页码、每页大小、条件实体和排序。paginate(pageNumber, pageSize, entity, orderBys): 分页查询实体,指定页码、每页大小、条件实体和多个排序。paginate(request): 分页查询实体,使用指定的请求。paginate(request, orderBy): 分页查询实体,使用指定的请求和排序。paginate(request, orderBys): 分页查询实体,使用指定的请求和多个排序。paginate(request, entity): 分页查询实体,使用指定的请求和条件实体。paginate(request, entity, orderBy): 分页查询实体,使用指定的请求、条件实体和排序。paginate(request, entity, orderBys): 分页查询实体,使用指定的请求、条件实体和多个排序。文档与社区
官方文档
源码
总结
视频会议系统全解析:从技术底层到实战优化,打造高效远程协作体验
在远程协作成为日常的今天,视频会议已从临时应急的沟通工具,进化为企业降本增效、个人高效对接的核心支撑。无论是几人的小团队远程对接,还是上千人的跨国大型研讨会,一套稳定清晰、低延迟的视频会议系统,直接影响着沟通效率与协作质量。本文将从技术底层架构、核心功能选型、实战优化技巧三个维度,深度拆解视频会议的专业知识,帮助技术从业者和企业管理者实现更高效的远程沟通。
视频会议系统的底层技术架构解析
视频会议系统的本质,是音视频数据从采集、预处理、编码、传输、解码到终端渲染的全链路闭环,再搭配会议控制信令和数据共享等辅助模块,构成完整的会议生态。
采集环节是视频会议的起点,核心设备包括摄像头、麦克风及终端采集芯片。摄像头负责捕捉图像帧,麦克风拾取音频信号,而预处理则是提升音视频质量的关键步骤:
视频预处理:运用自动对焦、白平衡校准、降噪去雾等算法优化画面清晰度;通过人像识别与追踪技术,自动聚焦发言人画面,避免会议场景杂乱。
音频预处理:采用回声消除(AEC)、噪声抑制(NS)、自动增益控制(AGC)三大核心算法,解决远程通话中的回声干扰、环境杂音、音量不稳定等问题,保障语音清晰可辨。
未经压缩的音视频数据体积庞大,直接传输会占用极高带宽导致延迟飙升。编码(压缩)与解码(解压)技术是解决这一矛盾的核心:
主流编码标准:视频编码以H.264/AVC、H.265/HEVC、VP9、AV1为主流,其中H.265相比H.264可节省50%带宽,AV1更适合超高清视频场景;音频编码常用AAC、OPUS格式,OPUS兼具低延迟与高音质,是实时语音通话的首选。
自适应码率技术:系统会根据网络带宽动态调整编码码率与分辨率,网络拥堵时自动降低画质保障流畅性,网络恢复后再提升质量,实现质量与流畅的平衡。
音视频数据的传输依赖实时传输协议(RTP)封装数据,搭配实时传输控制协议(RTCP)监控传输质量,而网络优化是降低延迟、减少卡顿的关键:
传输协议选择:公网环境下UDP协议因无连接、低延迟特性成为首选,但需通过丢包重传、前向纠错(FEC)等技术弥补其不可靠性;网络不稳定时部分系统会切换为TCP协议,以可靠性换取稳定性。
网络优化技术:通过边缘计算节点部署,让用户就近接入服务器缩短传输链路;利用拥塞控制算法实时监测网络状态,调整数据发送速率避免拥塞,提升视频会议的稳定性。
解码后的音视频数据最终在终端设备完成渲染显示,同时搭配会议控制界面实现画面布局切换、音量调节、参会者管理等交互操作。部分高端视频会议系统还支持多屏显示、虚拟背景、美颜滤镜等功能,进一步提升会议体验。
视频会议系统核心功能选型要点
不同场景对视频会议系统的需求差异显著,企业与个人在选型时需重点关注核心功能,避免盲目追求“全功能”造成资源浪费。
多人音视频通话:支持的最大参会人数是核心指标。10人以内的小型团队协作,轻量级视频会议系统即可满足;大型企业年会或行业峰会,则需选择支持千人级并发的专业平台。
屏幕共享与标注:这是远程协作的核心功能,需关注共享时的画质损失、延迟情况,以及是否支持多人实时标注、文件同步演示,尤其适合远程培训、方案评审场景。
会议录制与回放:录制功能需支持本地与云端存储,回放时应清晰还原会议内容;部分视频会议系统还支持自动生成会议纪要,提升复盘效率。
虚拟背景与智能降噪:虚拟背景可避免参会环境杂乱,提升会议专业性;智能降噪能过滤键盘敲击声、环境杂音,保障语音清晰,适合居家办公场景。
实时字幕与翻译:多语言实时字幕、同声传译功能是跨国视频会议的必备选项,可有效解决语言障碍,提升信息传递效率。
文档协作与投票:支持会议中实时上传文档、多人在线编辑,搭配投票问卷功能快速收集意见,适合远程决策场景。
参会权限管理:支持密码登录、邀请链接、企业通讯录白名单等入会方式,防止无关人员闯入;会议主持人可对参会者进行静音、踢出、权限分配等操作,维持会议秩序。
数据安全保障:需关注系统是否采用端到端加密技术,数据传输与存储是否符合国家信息安全标准,尤其是涉及商业机密的视频会议,数据安全是底线要求。
视频会议实战优化技巧:告别卡顿与延迟
即使使用高端视频会议系统,若忽略细节也可能出现卡顿、杂音等问题。以下实战技巧可有效提升会议体验。
优先选择有线网络:相比无线WiFi,有线网络受干扰更少,能提供更稳定的带宽和更低的延迟,是保障视频会议流畅的基础。
关闭后台占用带宽程序:会议前关闭视频播放、文件下载、云同步等后台程序,避免带宽被抢占,保障音视频数据传输优先级。
选择最优节点接入:进入视频会议后,手动切换接入服务器节点,选择延迟最低的节点,提升通话流畅性。
麦克风与摄像头摆放:麦克风应距离发言人30-50厘米,避免距离过近导致声音失真;摄像头应与发言人视线平齐,背景尽量简洁,减少视觉干扰。
避免回声与杂音:佩戴耳机可有效避免扬声器声音被麦克风拾取,消除回声;选择安静的参会环境,关闭空调、风扇等噪音源,提升语音清晰度。
调整设备参数:网络不稳定时降低视频分辨率保障流畅;开启“硬件加速”功能,利用显卡提升解码效率,减少终端卡顿。
会前充分准备:提前发送视频会议邀请,明确主题、议程与参会人员;共享相关文件让参会者提前熟悉内容,减少会议中的无效沟通。
控制会议节奏:设定每个议题的时间,避免跑题;指定主持人引导讨论,确保会议高效进行。
通过对视频会议系统的技术底层、功能选型和实战优化的全面解析,相信无论是技术人员还是企业管理者,都能更好地理解和运用视频会议工具,提升远程协作效率,适应数字化时代的沟通需求。
众所周知 cc 现在封号严重,转发站并不稳定.
自费一般问题不大,封就封了.
但对于在企业内部推广, 会牵扯到财务及稳定等问题.
那么你们是如何解决这些问题的?可以分享一下吗?
赶着节前的时间点,老板们更加催手下人进度,每次开会只会问什么时候做完,年前能不能做完。设计稿子都没准备好,直接问能不能就拿着设计师的初稿去做技术评审。每天忙的昨天干了啥都忘了,事情真的要赶着放假前做完吗?
2 月 4 日,iQOO 品牌发布性能 Ultra 旗舰手机 iQOO 15 Ultra。该机面向游戏玩家与创作者,在性能、操控、直播与外观四个方向进行强化,并推出 2077(黑)与 2049(银)两款配色。
iQOO 15 Ultra 搭载第五代骁龙 8 至尊版 SoC,配合 LPDDR5X Ultra Pro 与 UFS 4.1,最高提供 24GB+1TB 的存储组合。散热采用定制冰穹风冷系统,结合风道与超大面积 VC,并搭载自研电竞芯片 Q3,可实现全场景光线追踪、2K 原画超分、120FPS 超帧等。屏幕为 2K 三星珠峰屏,支持 1 到 144Hz 动态刷新,最高亮度 8000nits,并通过杜比视界认证。
操控方面,iQOO 15 Ultra 采用系统级超感操控体系,包含超感肩键、陀螺仪与触控,并首发战锤 MAX 双轴振感马达,搭配双扬声器与杜比全景声。电池为 7400mAh 蓝海大电池,支持 IP68 与 IP69 防尘防水,并配备 Wi-Fi 7、超声波 3D 指纹以及覆盖含 N79 在内的 31 个 5G 频段等配置。
影像方面,该机后置为 5000 万像素三摄组合,前置 3200 万像素,主摄与潜望长焦支持 CIPA 4.5 级防抖,并搭载 NICE 3.0 影像算法与 Magic2.0 画质还原引擎。价格方面,16GB+256GB 首销优惠价 5499 元(2 月 4 日到 2 月 12 日),16GB+512GB 5999 元,另有 16GB+1TB 6999 元与 24GB+1TB 7699 元版本。来源

2 月 2 日,xAI 团队宣布推出视频生成工具 Grok Imagine 1.0,并称其为该产品是 x AI 的「迄今最大升级」。xAI 表示,新版本已开始更广泛推送,用户可通过 grok.com 的 Imagine 页面体验。
Grok Imagine 1.0 是 xAI 的音视频生成大模型,目前支持生成最长 10 秒、最高 720p 分辨率的短影片,并「显著提升」音频能力,强调可生成更丰富的语音与配乐效果。 来源
阿里巴巴千问于 2 月 4 日宣布推出 Qwen3-Coder-Next,一款专为编码代理与本地开发打造的开放权重的语言模型。该模型基于 Qwen3-Next-80B-A3B-Base 构建,采用混合注意力与 MoE 的新架构;通过大规模可执行任务合成、环境交互与强化学习进行智能体训练,在显著降低推理成本的同时,获得了强大的编程与智能体能力。目前该模型已经在 ModelScope 和 Hugging Face 发布。来源
近日,Apple 公司向 Apple Home 用户发出提醒,用户需在 2026 年 2 月 10 日前完成 Home app 的升级。未完成升级的用户可能会遇到智能配件与自动化场景运行异常的问题,甚至会在该 app 中完全无法访问自己的智能家居设备。
此外,未升级用户将无法使用扫地机器人支持等全新功能,也无法获取重要的安全补丁与性能优化更新。
升级方法为,打开 Home app,点击右上角的三点图标进入家庭设置然后点击软件更新——立即更新,按照屏幕提示操作即可。来源
2 月 3 日,微软公司在更新的支持文档中确认,其计划移除 OneDrive for Business 和 SharePoint Online 的独立低价订阅服务(Plan 1 和 Plan 2)。这些套餐内并不包含 Word、Excel 和 PowerPoint 等核心办公组件,但对于预算有限且仅需特定功能的用户极具吸引力。
微软计划在 2026 年 5 月正式停止向新客户销售上述独立产品,6 月关闭现有用户的续订功能。现有订阅的「生命周期结束」(End-of-Life)为 2027 年 1 月,微软计划于 2029 年 12 月彻底停止对这些产品的所有技术支持,届时相关服务将完全下线。来源
经过多方反对之后,Adobe 公司于 2 月 4 日在一份常见问题解答中表示,原计划彻底停用的 Animate 将进入维护模式。Animate 仍会获得持续的安全更新与漏洞修复,新老用户均可继续使用,但软件将不再推出新功能。来源
前端开发者常常面临这样的困境:Vue项目需要使用React生态的优秀组件,或者React项目想引入Vue的优雅解决方案。过去,这几乎意味着需要完全重写或寻找笨重的替代方案。 今天介绍的Veaury将彻底改变这一局面。这是一个专门设计用于在Vue和React之间实现无缝互操作的工具库。 在实际开发中,跨框架组件复用面临诸多挑战: Veaury通过高阶组件(HOC)的方式,在两种框架之间搭建桥梁。其核心思路是: 消除包装器带来的额外DOM元素,保持组件树的整洁: Veaury智能地映射两个框架的生命周期: Veaury在性能方面做了大量优化: 性能对比示例: 某低代码平台使用Veaury实现插件系统: 在微前端场景中,Veaury帮助不同技术栈的子应用共享组件: 尽管Veaury功能强大,但仍有一些限制: 对于需要在Vue和React之间搭建桥梁的项目,Veaury提供了一个成熟、稳定的解决方案。无论是新项目技术选型,还是老项目现代化改造,都值得考虑这一工具。 技术栈不应成为创新的约束,而应是实现目标的工具。 Veaury正是这一理念的实践,让开发者能够专注于创造价值,而不是被框架之争所困扰。 本文由mdnice多平台发布核心问题与挑战
Veaury的技术实现原理
// 简化版实现原理示意
function createCrossFrameworkWrapper(OriginalComponent, targetFramework) {
return function Wrapper(props, context) {
// 处理props转换
const convertedProps = convertProps(props, targetFramework);
// 处理上下文传递
const frameworkContext = adaptContext(context, targetFramework);
// 根据目标框架选择渲染方式
if (targetFramework === 'vue') {
return renderAsVue(OriginalComponent, convertedProps, frameworkContext);
} else {
return renderAsReact(OriginalComponent, convertedProps, frameworkContext);
}
};
}主要特性
1. 完整的Vue 3支持
2. 双向上下文共享
// React组件可以访问Vue的provide/inject
// Vue组件可以访问React的Context
const SharedComponent = ({ theme }) => {
// theme可以来自Vue的provide或React的Context
return <div className={`theme-${theme}`}>共享主题</div>;
};3. 纯模式(Pure Mode)
// 使用纯模式包装
const PureReactComponent = applyPureReactInVue(ReactComponent);
// 渲染结果没有额外的div包裹4. 生命周期映射
Vue 生命周期 React 等效 onMounteduseEffect(() => {}, [])onUpdateduseEffect(() => {})onUnmounteduseEffect(() => () => {})实际应用示例
场景一:在Vue项目中使用React组件
<template>
<div>
<h2>Vue组件主体</h2>
<!-- 直接使用React组件 -->
<ReactDataTable :data="tableData" @row-click="handleRowClick" />
</div>
</template>
<script setup>
import { ref } from 'vue';
import { applyPureReactInVue } from 'veaury';
import ReactDataTable from './ReactDataTable.jsx';
// 将React组件转换为Vue可用的组件
const ReactDataTable = applyPureReactInVue(ReactDataTable);
const tableData = ref([
{ id: 1, name: '项目A', value: 100 },
{ id: 2, name: '项目B', value: 200 }
]);
const handleRowClick = (rowData) => {
console.log('行点击事件:', rowData);
// 处理来自React组件的事件
};
</script>场景二:在React项目中使用Vue组件
import React, { useState } from 'react';
import { applyVueInReact } from 'veaury';
import VueRichEditor from './VueRichEditor.vue';
const RichEditor = applyVueInReact(VueRichEditor);
function App() {
const [content, setContent] = useState('');
const [isDarkMode, setIsDarkMode] = useState(false);
const handleContentChange = (newContent) => {
setContent(newContent);
// 处理来自Vue组件的事件
};
return (
<div className={isDarkMode ? 'dark-theme' : 'light-theme'}>
<h1>React应用中的Vue富文本编辑器</h1>
<RichEditor
modelValue={content}
onUpdate:modelValue={handleContentChange}
darkMode={isDarkMode}
v-slots={{
toolbar: () => <div>自定义工具栏</div>
}}
/>
<button onClick={() => setIsDarkMode(!isDarkMode)}>
切换主题
</button>
</div>
);
}性能考虑
// 传统iframe方案 vs Veaury方案
// iframe:独立的DOM、样式和上下文,开销大
// Veaury:共享同一DOM,轻量级包装,性能接近原生企业级应用实践
案例:低代码平台集成
案例:微前端架构
// 主应用(Vue)使用子应用(React)的组件库
import { applyPureReactInVue } from 'veaury';
import ReactDesignSystem from 'team-react-ds';
// 在Vue主应用中直接使用React设计系统
const VueWrappedButton = applyPureReactInVue(ReactDesignSystem.Button);
const VueWrappedModal = applyPureReactInVue(ReactDesignSystem.Modal);配置与构建
Vite配置示例
// vite.config.js
import { defineConfig } from 'vite';
import vue from '@vitejs/plugin-vue';
import veauryVitePlugins from 'veaury/vite';
export default defineConfig({
plugins: [
veauryVitePlugins({
type: 'vue', // 或 'react',根据主框架选择
vueOptions: {
reactivityTransform: true // 启用响应式语法糖
}
})
],
optimizeDeps: {
include: ['veaury']
}
});Webpack配置要点
// webpack.config.js
module.exports = {
module: {
rules: [
{
test: /\.vue$/,
use: 'vue-loader'
},
{
test: /\.jsx$/,
use: 'babel-loader',
options: {
presets: ['@babel/preset-react']
}
}
]
}
};局限性说明
总结
在上一章中,我们已经初步了解了 ESP32 系列芯片(如 ESP32-P4和 ESP-IDF开发框架的相关知识)。接下来,我们将进入实践部分,逐步搭建适合 ESP32-P4 开发的工作环境。无论您是初学者,还是有一定开发经验,本章节都会帮助您从搭建环境、命令式开发再到IDE集成开发环境搭建,确保顺利开启基于 ESP32-P4 的项目开发。 在前面章节中,笔者已经讲解了ESP32的开发可以在Windows、Linux和Mac系统上进行。本书的开发环境是在Windows平台上搭建的,因此对于Linux和Mac系统的开发环境搭建,读者需要自行查找相关资料。 注意:笔者将 ESP-IDF 安装在 D:\Soft_APP\Espressif 路径下,因此以下示例将基于该路径进行操作说明。 在 VSCode 的 ESP-IDF 插件中,可以通过在线方式安装 ESP-IDF 软件开发库。关于 VSCode 和 ESP-IDF 插件的下载与安装过程,请参考本章节的 4.3 小节。接下来,我们将详细介绍通过 ESP-IDF 插件在线安装 ESP-IDF 软件开发库的具体步骤,流程如下: 相比离线安装,在线安装 ESP-IDF 更具挑战,主要是因为在线安装依赖于稳定的网络连接,否则可能会导致安装失败。接下来,笔者将手把手教大家如何进行在线安装 ESP-IDF。 ESP32-P4的USB串口可以用于程序下载和与ESP监控器的交互。通过USB连接DNESP32P4开发板后,您可以在项目文件夹中执行特定命令,使用像idf.py这样的工具编译并下载程序到开发板上。正点原子的DNESP32P4开发板通过CH343P芯片进行串口信号转换,从而实现与PC的通信。CH343P芯片将ESP32- P4的串口信号转换为USB信号,并通过USB接口连接到PC。 在PC系统上的CMD和PowerShell终端运行IDF(Espressif IoT Development Framework)命令,主要涉及到配置ESP-IDF环境以及使用相应的命令。以下是在CMD和PowerShell中运行IDF命令的详细步骤:第四章 开发环境搭建
本章分为如下几个小节:
4.1 搭建ESP-IDF环境
4.2 IDF前端工具
4.3 搭建集成开发环境4.1 搭建ESP-IDF环境
搭建ESP-IDF环境有两种方式:离线安装和在线安装。在此,笔者强烈推荐使用离线安装包。尽管安装速度可能稍慢,但离线安装能够大幅提高成功率,避免网络问题带来的安装失败风险。相比之下,在线安装包需要稳定的网络连接,如果网络状况不佳,可能会导致安装中断或失败。不过,在线安装的优势在于可以获取最新的ESP-IDF版本,通常适用于芯片发布前的调试阶段。这样,读者可以根据自己的需求选择合适的安装方式。4.1.1 离线安装ESP-IDF
离线安装包可以在 ESP-IDF Windows 安装下载中心(https://dl.espressif.com/dl/esp-idf/)下载,或通过正点原子提供的资料A盘 路径找到。具体路径为:6,软件资料1. 软件1,IDF开发工具esp-idf-tools-setup-offline-5.4.exe,可以获取 v5.4 离线安装包,如下图所示。
图4.1.1.1 下载v5.4离线安装包
注意:本书籍中的所有例程示例均使用此版本的 ESP-IDF。如果使用其他版本编译本书籍中的例程示例时出现错误或效果未能如预期,请务必切换回本书籍推荐的ESP-IDF 版本,以确保所有例程能正常编译和运行。
下载成功后,在安装程序上单击右键选择<以管理员身份运行>运行安装包,如下图所示:
图4.1.1.2 以管理员身份运行安装包
打开安装程序后选择简体中文安装,如下图所示。
图4.1.1.3 选择安装语言
点击“确定”后进入安装许可协议页面,如下图所示。请勾选“我同意此协议”选项,并点击“下一步”。
图4.1.1.4 勾选“我同意此协议”选项
点击下一步后,会跳出安装前系统检查页面,如下图所示。
图4.1.1.5 安装前系统检查
安装程序会检查你当前系统有没有打开“长路径支持”,因为GNU编译器产生的编译文件会有非常深的目录结构,如果不支持长路径,编译可能出现文件不存在,目录不存在等奇怪的错误。这里单击应用修复按钮,可以修复这个问题。在弹出的确认对话框中,选择“是”,开始修复(若上图中的“应用修复”按钮失效,证明系统已经启用长路径功能,我们直接下一步即可)。如下图所示。
图4.1.1.6 启用长路径
如果修复不成功,通常是由于安装软件时未使用管理员权限运行。在这种情况下,可以手动修改注册表来启用长路径支持。具体操作是:按下快捷键“Win + R”打开“运行”对话框,输入“regedit”并按回车进入注册表编辑器。接着,找到HKLM_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem\LongPathsEnabled项目,将LongPathsEnabled 的DWORD数值修改为1。这样可以解决长路径问题,确保安装顺利完成。如下图所示。
图4.1.1.7 手动启用长路径
图4.1.1.7 提示修复完成后,点击“下一步”进入配置安装路径,如下图所示。
图4.1.1.8 配置安装路径
安装程序默认的安装位置为 C:\Espressif,但笔者将其安装在 D盘,因为安装过程中可能会占用数十GB的存储空间。因此,建议用户选择其他磁盘分区作为安装路径。注意:安装路径必须为全英文路径,切勿使用任何包含中文字符的路径,否则会导致 ESP-IDF 环境搭建失败。
设置安装路径后,点击 “下一步” 进入 确认安装组件界面。在该界面中,我们选择 “全部安装”,然后再次点击 “下一步”,开始安装ESP-IDF开发环境。
ESP-IDF安装成功后会出现如下图页面。
图4.1.1.9 ESP-IDF安装成功
上图中的选项 1 和 2 用于测试环境安装是否成功,选项 3 则是将 ESP-IDF 工具链加入杀毒软件的排除项,以加快编译速度。我们勾选所有选项后,点击 “Finish” 按钮。此时,桌面会自动弹出两个命令终端图标:“ESP-IDF 5.4 CMD”和“ESP-IDF 5.4 PowerShell”。其中,PowerShell 终端功能更强大,适合执行复杂任务或管理复杂环境的用户;CMD 终端则更适合基础的命令行操作和简单脚本执行。用户可以根据需求和偏好选择使用合适的工具,如下图所示。
图4.1.1.10 PowerShell和CMD终端
上图中,如果两个终端均提示“idf.py build”命令,则初步证明安装成功。在这两个终端下,我们可以采用命令形式进行配置、编译、链接和构建项目,这与在Linux中的开发方式颇为相似。在4.2小节中,将详细讲解ESP-IDF常用的命令。
下图为ESP-IDF安装成功后的文件结构。
图4.1.1.11 espressif工具目录
上图中的文件介绍,笔者已在 3.2 小节中展示过,这里不再详细说明。图中的 frameworks 文件夹保存了我们之前安装的 ESP-IDF 源代码。
为了让系统能够找到和识别ESP-IDF的相关工具和库,从而能够顺利地进行编译、构建和调试ESP32或其他Espressif芯片的项目,我们必须设置ESP-IDF的环境变量,设置方法如下:
按照此过程(此电脑属性高级系统环境变量)打开,如下图所示。
图4.1.1.12 添加IDF_PATH环境变量
如果 ESP-IDF 库安装成功,系统会自动为我们添加 IDF_TOOLS_PATH 和 IDF_COMPONENT_STORAGE_URL 环境变量。安装完成后,系统还会自动安装 Espressif-IDE,这是一款专为乐鑫 SoC 芯片开发的集成开发环境。由于该软件在国内发布时间较短,且国内开发者多倾向于使用 VS Code IDE 进行开发,因此本教程的示例主要基于 VS Code IDE 展开。然而,正点原子也致力于推广 Espressif-IDE,因此我们决定额外编写一份关于 Espressif-IDE 使用的教程,以帮助国内开发者更好地熟悉并使用这一强大的开发工具(请参阅《Espressif-IDE 集成开发环境使用指南》)。
至此,ESP-IDF 离线安装已经完成。接下来,笔者将为大家介绍如何进行 ESP-IDF 的在线安装,有需要的读者请参考接下来的内容。4.1.2 在线安装ESP-IDF(方法一)
1,按下快捷键“F1”或“Ctrl + Shift + P”打开“显示所有命令”界面。然后,在搜索框中输入“Configure ESP-IDF”,并从下拉菜单中选择此选项,进入 ESP-IDF 配置界面,如下图所示。
图4.1.2.1 配置ESP-IDF扩展
回车后,将进入配置 ESP-IDF 插件的界面,如下图所示。
图4.1.2.2 进入ESP-IDF插件配置界面
在上图中,点击 “ADVANCED”选项,然后选择下载服务器和下载版本,如下图所示。
图4.1.2.3 在线安装v5.4版本IDF
2,点击“Configure Tools”选项下载与安装,如下图所示。
图4.1.2.4 ESP-IDF下载与安装
在上图中,完成步骤1至3后,流程顺利运行并成功完成,接下来将进入下图所示的界面。
图4.1.2.5 安装ESP-IDF成功
如上图所示,v5.4版本的ESP-IDF安装已成功完成。此时,您可以在VSCode左下角切换到v5.4版本的ESP-IDF,具体操作如下面的图示所示。![]()
图4.1.2.6 切换IDF版本¬¬¬
3,设置环境变量,如下图所示。
图4.1.2.7 设置IDF环境变量4.1.3 在线安装ESP-IDF(方法二)
首先,我们需要从 GitHub 或 Gitee 平台查找所需的 ESP-IDF 版本。下图展示了在 GitHub 平台上查看 ESP-IDF 分支版本的方法。
图4.1.3.1 查看ESP-IDF版本
在这里,笔者选择了 release/v5.4 分支的 ESP-IDF 版本。接下来,在 Git 终端中输入以下命令,拉取该版本的 ESP-IDF(或者使用国内服务器git clone -b release/v5.4 https://gitee.com/EspressifSystems/esp-idf.git)。
图4.1.3.2 拉取ESP-IDF V5.4版本的源代码
在上图中,笔者将 ESP-IDF 源代码拉取到了 D:\Soft_APP\Espressif\frameworks路径下(离线安装ESP-IDF源代码存储的位置),方便使用多个IDF版本开发。接着,在 Git 终端中输入以下命令,进入 esp-idf 目录。随后,输入以下命令更新 ESP-IDF 源代码中的子模块,如下图所示。
图4.1.3.3 更新子模块
注意:全部子模块必须更新完成,否则在线安装将会失败。在更新子模块的过程中,请确保网络连接稳定,以避免出现中断或错误。
为了让读者避免繁琐的在线SDK下载过程,笔者已经为大家预先下载了v5.4.0和v5.5.0版本的ESP-IDF。您可以在 A盘6 软件资料1 软件4,IDF软件开发工具包目录下找到这两个版本的开发工具包。只需解压缩文件即可免去从GitHub下载的步骤。例如我们将4,IDF软件开发工具包目录下esp-idf_v5.4.0.zip压缩包解压到D:\Soft_APP\ESP_IDF\Espressif\frameworks目录下,该目录是离线IDF成功后生成的目录,它是用来存储IDF软件开发工具包的地方。
然后在ESP-IDF Windows 安装下载中下载网页下下载在线安装工具,用来安装release/v5.4 分支的 ESP-IDF 版本,如下图所示。
图4.1.3.4 下载在线安装工具
以<管理员身份运行>在线安装工具,如下图所示。
图4.1.3.5 运行在线安装工具
进入安装语言页面,这里我们选择“简体中文”,并点击“确定”按钮,如下所示。
图4.1.3.6 选择安装语言
点击“确定”后进入安装许可协议页面,如下图所示。请勾选“我同意此协议”选项,并点击“下一步”。
图4.1.3.7 勾选“我同意此协议”选项
点击下一步后,会跳出安装前系统检查页面,如下图所示。
图4.1.3.8 安装前系统检查
上图中的“应用修复”按钮失效,证明系统已经启用长路径功能,我们直接下一步即可。如下图所示。
图4.1.3.9 下载或使用ESP-IDF
这里我们选择“使用现有的ESP-IDF目录”也就是我们前面下载的release/v5.4版本的Esp-IDF源代码,然后点击“浏览”选项配置ESP-IDF路径。如下图所示。
图4.1.3.10 配置选择现有的ESP-IDF
点击“下一步”进入ESP-IDF Tools工具安装,如下图所示。
图4.1.3.11 ESP-IDF Tools安装路径配置
上图的安装路径与离线安装的Tools路径是一致的。然后点击“下一步”进入选择组件安装页面,如下图所示。
图4.1.3.12 选择安装组件
点击“下一步”按钮,进入准备安装页面,如下图所示。
图4.1.3.13 准备安装
此时,我们点击“安装”按钮,就可以安装release/v5.4版本的ESP-IDF了,如下图所示。
图4.1.3.14 ESP-IDF Tools安装完成
此时点击“完成”按钮,系统自动弹出“ESP-IDF 5.4 CMD”和“ESP-IDF 5.4 PowerShell”终端,如下图所示。
图4.1.3.15 PowerShell和CMD终端
上图中,如果两个终端均提示“idf.py build”命令,则初步证明安装成功。在这两个终端下,我们可以采用命令形式进行配置、编译、链接和构建项目,这与在Linux中的开发方式颇为相似。在4.2小节中,将详细讲解ESP-IDF常用的命令。4.1.4 安装USB虚拟串口驱动
为了在电脑上实现与ESP32-P4的通信,需要安装CH343P芯片的驱动程序。您可以访问沁恒的官方网站(https://www.wch.cn/)下载该驱动程序,或者在6,软件资料1,软件CH343P驱动文件夹下找到CH343P的驱动安装程序,如下图所示。
图4.1.4.1 CH343P驱动安装程序
打开CH343P驱动安装程序后,点击安装程序中的“安装”按钮,若提示“驱动安装成功”,则说明CH343P驱动已经安装成功了,如下图所示。
图4.1.4.2 CH343P驱动安装成功
安装完CH343P驱动后,使用跳线帽将正点原子DNESP32P4开发板的底板P6和核心板P3排针的1&3和2&4接上,如下图所示。
图4.1.4.3 连接USB-UART0
接下来,使用USB线将开发板UART接口与PC的USB端口相连接即可。此时,PC端的设备管理器中查看到CH343P虚拟出的串口,如下图所示。
图4.1.4.4 PC端显示的虚拟串口
从上图可以看出,CH343P虚拟出的串口被PC分配了COM60的端口号。这个端口号用于串口调试助手等上位机确定与之通信的串口端。需要注意的是,当CH343P与不同的PC连接,甚至是与同一台PC的不同USB端口连接后,虚拟出的串口被PC分配到的端口号可能是不同的,例如COM4或COM5。读者可以根据设备管理器中端口设备的名称来判断具体是哪个端口号。如果同时连接了多个CH343P系列的芯片,则需要逐个测试端口号。安装完USB虚拟串口驱动后,就可以使用串口调试助手,如MobaXterm软件,与板卡通过串口进行通信了。4.1.5 如何在PC系统上的CMD和PowerShell终端运行IDF命令
1,打开IDF CMD终端,并输入“echo %path%”命令获取IDF相关路径
图4.1.5.1 获取IDF相关安装路径
上图中,我们把输出的地址直到红色圈圈为止,进行拷贝到path环境变量当中。
2,打开系统环境变量path,然后使用编辑文本的方式添加这些变量值。
图4.1.5.2 添加环境变量
注意:添加环境变量时候,必须首尾添加“;”逗号以表示添加结束。添加完成后,我们就可以在CMD或者PowerShell终端运行IDF命令了。
为了方便大家及时获取各大主流论坛通知,主要通知内容板块为:交易,技术,资源分享,薅羊毛等!
目前对接站点如下:

现在公司产品画的原型处于第三点(个人评价),原型经常一堆文字,但是阅读起来,很难受,比如:
1.面对复杂需求时,一个页面堆了一堆文字,把所有相关需求都写在同个页面,不把需求拆分多点,分多个画布页说明讲解;
2.同一个需求点,这边说明一点,那边写一点,甚至文字说明一些,原型页面图片上说明一些
3.表达歧义,这点个人觉得就是细节量化不足或者逻辑混乱导致的;
4.需求边界考虑不足,导致有时要频繁改动,特别是有历史设计负债或者复杂需求时
5.拿来主义:从其他地方复制过来、或者干脆用 ai 生成,粘贴一坨,把问题交给下游岗位,慢慢咀嚼莫名其妙的“需求说明”。
6.口头改动,经常没写进原型,后期有问题时,复盘很难受。
...
有使用过的兄弟们可以发表一下意见,国内的这些大模型又更好用的可以给大家推荐一下
有个女同事之前一直脾气不算太好,我每次听到她声音时,不是和同事因为接口吵架,就是因为业务问题在拌嘴,永远皱着眉头,额头中间隐约呈现出一个“川”字形。
后来她回家生孩子去了,最近回来上班之后,我惊奇的发现她似乎变了一个人;再也没有听到她和同事争辩,和谁说话都是温温柔柔,眉头挥之不去的川字也消失不见。
如果她是解决了心中的什么事情导致心情很好,那我由衷的为她祝福;如果是生育、激素的影响,那我觉得这也太可怕了。
2026 年,语音交互技术已经从简单的"命令-响应"模式,发展到融合 AI 大模型的自然对话阶段。在产品开发过程中,开发者面临着越来越多的选择: 本文基于 SmartPi 平台的完整产品矩阵,结合真实开发案例,系统性地分析 2026 年语音产品开发的技术趋势和选型策略。 传统模式: 免唤醒模式: 适用场景: JX-A7T 和 JX-17T 模组支持离在线混合架构: 优势: 随着用户对可视化交互的需求增加,2026 年更多产品开始集成屏幕显示: 技术方案: 需求描述: 选型方案: 配置要点: 需求描述: 选型方案: 功耗优化策略: 需求描述: 选型方案: 系统架构: 2026 年的产品开发越来越强调模块化: 工具链选择: 完整的测试流程: A:可以,但需要明确产品定位。 建议:对于明确控制类产品,纯离线仍然是首选方案。 A:当产品需要以下能力时: 成本考虑:AI 大模型方案成本是纯离线的 2-3 倍,需要评估目标用户群体的付费意愿。 A:采用渐进式开发策略: A:重点关注功耗参数: 续航估算公式: 关键词:语音产品、选型指南、技术趋势、离线语音、AI 大模型、2026 年趋势、产品开发前言
一、2026 年语音产品技术趋势
1.1 三大技术路线
技术路线 特点 适用场景 代表模组 纯离线方案 无需联网,响应快,隐私安全 智能家电、照明、玩具 SU-03T、CI-03T、SU-13T 离在线混合 离线唤醒 + 在线 AI,兼顾响应与智能 智能音箱、中控屏 JX-A7T、JX-17T 纯在线方案 依托大模型,对话能力强 教育机器人、陪护设备 云端语音服务 1.2 产品形态演进
2024年以前:
┌─────────────────────────────────────┐
│ 唤醒词 → 命令词 → 固定动作 │
│ "打开台灯" → GPIO高电平 → 灯亮 │
└─────────────────────────────────────┘
2025年:
┌─────────────────────────────────────┐
│ 唤醒词 → 自然说 → 条件判断 → 动作 │
│ "把灯调暗一点" → 变量-10 → PWM调节 │
└─────────────────────────────────────┘
2026年:
┌─────────────────────────────────────┐
│ 免唤醒/声纹 → AI对话 → 多模态响应 │
│ "我回来了" → 识别用户 → 场景联动 │
└─────────────────────────────────────┘二、产品选型决策矩阵
2.1 按应用场景选型
应用场景 推荐方案 核心模组 关键特性 智能照明 纯离线 SU-03T/CI-03T 低成本、快速响应 智能风扇 纯离线 SU-13T 多档位(150 条命令) 智能中控 离在线混合 JX-A7T 屏幕显示 +AI 对话 智能门锁 低功耗离线 SU-21T/SU-23T 超低功耗、电池供电 教育机器人 在线 AI JX-17T 大模型对话能力 蓝牙音箱 蓝牙 + 离线 SU-63T/JX-B5C 音乐 + 语音双模 2.2 按成本敏感度选型
成本敏感度排序(从低到高):
SU-03T < CI-03T < SU-13T < SU-21T/22T < CI-73T < SU-32T < JX-A7T < SU-63T < CI-95C < JX-17T
价格区间参考(仅供参考,以实际询价为准):
- ¥5以下:SU-03T系列(入门级)
- ¥5-10:CI-03T、SU-13T、SU-21T(中端)
- ¥10-20:CI-73T、SU-32T、JX-A7T(高端)
- ¥20以上:CI-95C、JX-17T(旗舰)2.3 按功能需求选型
功能需求 最少词条数 推荐模组 备选方案 基础开关控制 10-20 条 SU-03T CI-03T 多档位调节 50-100 条 SU-13T CI-33T 复杂场景控制 100-300 条 CI-73T SU-32T 声纹识别 50 条 + 声纹 CI-95C JX-A7T 声源定位 50 条 + 定位 CI-33T(带晶振) SU-32T 三、2026 年新增技术特性
3.1 免唤醒模式
用户:"你好小美,打开台灯"
设备:检测唤醒词 → 识别命令 → 执行动作
响应时间:约1-2秒用户:"打开台灯"
设备:直接识别命令 → 执行动作
响应时间:约0.5秒3.2 AI 大模型集成
┌─────────────────────────────────────────────────────────┐
│ AI大模型集成架构 │
├─────────────────────────────────────────────────────────┤
│ │
│ 本地处理 云端处理 │
│ ┌──────────┐ ┌──────────┐ │
│ │ 离线唤醒 │ ──快速────► │ AI大模型 │ │
│ │ 离线命令 │ │ 对话理解 │ │
│ │ 常用控制 │ │ 知识库 │ │
│ └──────────┘ └──────────┘ │
│ │ │ │
│ └────────── 数据同步 ──────┘ │
│ │
└─────────────────────────────────────────────────────────┘3.3 外接屏幕支持
显示内容类型:四、典型产品开发案例
案例 1:智能照明产品
功能模块 技术选择 原因 语音识别 SU-03T 成本低,基础控制足够 PWM 调光 2 路 PWM 亮度 + 色温独立控制 联网功能 JX-12F WiFi+BLE 双模,支持 APP 控制 供电 5V 直流 市电转换 命令词配置:
- 打开/关闭灯:基础开关
- 调亮/调暗:变量±10,PWM输出
- 最亮/最暗:变量边界值
- 暖光/冷光/白光:色温PWM切换
变量定义:
- brightness: 0-100(亮度百分比)
- colortemp: 0/1/2(色温模式)案例 2:智能门锁产品
功能模块 技术选择 原因 语音识别 SU-23T 超低功耗(1-3mA) 声纹识别 CI-95C 高可靠性声纹验证 供电 4 节 AA 电池 低功耗设计延长续航 唤醒方式 语音 + 触摸双触发 降低误唤醒 低功耗配置:
- 深度休眠唤醒阈值:中
- 进入休眠时间:5秒
- 语音唤醒灵敏度:中
- 触摸触发:GPIO输入(低功耗)
预期续航:
- 待机电流:~2mA
- 工作电流:~50mA(短暂)
- 每日使用20次:约6个月续航案例 3:智能中控屏产品
功能模块 技术选择 原因 语音识别 JX-A7T 离在线混合,AI 支持 屏幕显示 外部 MCU 驱动 UART 通信,复杂显示 联网功能 JX-A7T 内置 WiFi 支持云端控制 AI 能力 智能体平台 知识库 + 设备控制 ┌─────────────────────────────────────────────────────────┐
│ 中控屏系统架构 │
├─────────────────────────────────────────────────────────┤
│ │
│ ┌────────────┐ UART ┌────────────┐ │
│ │ JX-A7T │ ◄─────────► │ 屏幕MCU │ │
│ │ 语音模组 │ │ (显示驱动) │ │
│ └────────────┘ └──────┬─────┘ │
│ │ │ │
│ │ WiFi │ SPI/I2C │
│ ▼ ▼ │
│ ┌────────────┐ ┌────────────┐ │
│ │ 云端服务 │ │ TFT屏幕 │ │
│ │ (AI大模型) │ │ (2.4寸) │ │
│ └────────────┘ └────────────┘ │
│ │
└─────────────────────────────────────────────────────────┘五、开发趋势与最佳实践
5.1 模块化设计理念
传统开发模式:
需求 → 硬件设计 → 固件开发 → 调试 → 量产
└────────────────┘ 一次性投入
模块化开发模式:
┌─────────────────────────────────────┐
│ 通用模块 + 定制化配置 │
├─────────────────────────────────────┤
│ • 语音识别模块(标准件) │
│ • 控制逻辑模块(平台配置) │
│ • 业务逻辑模块(自定义) │
│ • 外设驱动模块(标准接口) │
└─────────────────────────────────────┘5.2 快速原型开发
开发阶段 推荐工具 优势 概念验证 Mixly 图形化编程 零代码,快速验证 固件配置 智能公元平台 在线配置,实时生成 调试优化 串口日志 + 平台调试 可视化分析 量产准备 固件继承 + 版本管理 批量一致性 5.3 测试与验证
1. 单元测试
├─ 语音识别率测试(各命令词)
├─ 功能响应测试(GPIO/UART输出)
└─ 稳定性测试(长时间运行)
2. 集成测试
├─ 多设备联动测试
├─ 网络连接测试(在线方案)
└─ 异常恢复测试(断网重启)
3. 用户体验测试
├─ 响应时间测试
├─ 误唤醒率测试
└─ 声纹识别准确率测试六、常见问题与解决方案
Q1:纯离线方案还能满足 2026 年的用户需求吗?
Q2:什么时候需要考虑 AI 大模型?
Q3:如何平衡功能丰富度和开发成本?
阶段1:基础版(MVP)
├─ 纯离线方案
├─ 核心功能(开关、档位)
└─ 快速上市验证市场
阶段2:增强版
├─ 保留离线基础
├─ 增加自然说、条件判断
└─ 提升用户体验
阶段3:旗舰版
├─ 离在线混合
├─ AI大模型对话
└─ 多模态交互Q4:电池供电产品如何选择模组?
模组 待机电流 唤醒电流 适用场景 SU-21T/22T \~1mA \~20mA 遥控器、门锁 SU-23T \~1-3mA \~30mA 电池供电设备 SU-03T \~10mA \~50mA 市电供电设备 JX-A7T \~55mA \~300mA 需要充电的设备 续航天数 = 电池容量(mAh) / (待机电流×待机时间占比 + 工作电流×工作时间占比) × 24
示例:4节AA电池(2000mAh×4=8000mAh)
- 待机电流:2mA
- 每日使用:20次×3秒×50mA=8.33mAh
- 每日总消耗:2mA×24h + 8.33mAh ≈ 56.33mAh
- 续航:8000/56.33 ≈ 142天七、总结与展望
2026 年选型建议
产品类型 首选方案 次选方案 智能照明 SU-03T CI-03T 智能风扇 SU-13T CI-73T 智能门锁 SU-23T SU-21T 智能中控 JX-A7T SU-32T 教育机器人 JX-17T JX-A7T 蓝牙音箱 JX-B5C SU-63T 未来技术趋势
参考资源
素材来源:SmartPi 官方文档 + 技术交流群真实案例 + 行业趋势分析
适用模组:SU-03T、CI-03T、SU-13T、SU-21T、SU-23T、CI-73T、SU-32T、JX-A7T、JX-17T、SU-63T、CI-95C、JX-B5C
你是不是也有过这样的崩溃时刻? 这些问题的根源,其实是 本文将带你从 是什么 到 怎么用在实际工作中,彻底掌握这个比 用最通俗的比喻: 想象你招了一位天才实习生 技术本质: 当 下面用 场景:开会录音转文字后,需要整理成结构化会议纪要。不同会议类型(周会/项目复盘/客户沟通)需要不同的整理模板。 新建一个名为 在 需要切换为 本文案例 https://gitee.com/zlt2000/my-agent-skill/tree/master/meeting-minutes https://github.com/zlt2000/my-agent-skill/tree/master/meeting-minutes 在实际使用过程中本文 Skill 还可以进行以下迭代优化: 核心价值优势: 本文由mdnice多平台发布
一、为什么 Agent Skill 突然火了?
Claude 写代码,都要重复粘贴 请使用我们的代码规范:驼峰命名、2空格缩进、必须写单元测试 ——像极了每天入职新公司;Prompt 换个项目就完全失效,之前的调教经验归零;AI 的 专业能力无法沉淀。直到 2025 年 10 月 Anthropic 推出 Agent Skill(又名 Claude Code Skill)正是为解决这些问题而生。这不仅是 Claude 的新功能,更是一个 开放的跨平台标准,目前已被 OpenAI、Cursor、Trae 等主流工具跟进支持。Prompt 更高级、比 MCP 更易用的 AI 编程神器。二、到底什么是 Agent Skill?
Agent Skill 是 AI 的 入职手册 + 工具箱。Claude 他智商极高但不懂你们公司的业务。传统的做法是每次布置任务都口头交代一遍 Prompt 而 Agent Skill 则是给他一本完整的标准作业程序 SOP:Agent Skill 是一个标准化的文件夹结构,核心必须包含 SKILL.md 文件(YAML元数据 + Markdown说明),可选包含脚本、模板等资源文件。my-skill/ # 技能包根目录
├── SKILL.md # 📄 核心文件:元数据 + 工作流指令(必须)
├── scripts/ # 🔧 可选:自动化脚本(Python/Bash)
├── references/ # 📖 可选:专业文档、API手册、FAQ
└── assets/ # 🎨 可选:模板、示例、静态资源AI 检测到相关任务时,会自动 翻开 对应的手册,严格按照既定流程执行,无需你每次都重复交代。三、Skill工作原理
Skill 最精妙的设计,是它的 渐进式加载机制 —— 就像你查字典,先看目录,再翻对应章节,最后查附录,不会一上来就把整本书塞进脑子里。3.1. 三层加载:用最少的 Token 做最多的事

加载层级 内容类型 加载时机 作用 L1 元数据(名片) Agent 启动时自动加载 让AI知道“有什么技能可用” L2 说明文档(正文) 匹配用户需求时加载 教AI“具体怎么做” L3 资源文件(脚本 / 模板) 执行中按需加载 提供“工具/素材支持” 3.2. 四步执行流程

四、现有技术的对比
4.1. Agent Skill vs Prompt
维度 普通 Prompt Agent Skill 性质 临时指令,用完即走 标准化流程,永久复用 加载方式 每次全量输入 按需渐进加载 稳定性 依赖模型"记忆",易漂移 固化检查点,强制执行 管理 分散在聊天记录里 文件化、版本可控 共享 复制粘贴,易丢失格式 整包分享,开箱即用 一句话总结:Prompt 是 口头交代,Skills 是书面 SOP + 工具箱。
4.2. Agent Skill vs 多 Agent 架构
维度 多 Agent 架构 Agent Skill 复杂度 重量级,需要架构设计 轻量级,单个文件夹即可 适用场景 复杂并行任务(如研究+写作+审核同时进行) 单领域深度任务(如专业代码审查) 资源消耗 高,需调度多个 Agent 实例 低,单 Agent 内能力切换 启动成本 需要搭建 Agent 框架 零成本,复制文件夹即可 关系 体系级解决方案 单元级能力模块,可被多 Agent 调用 4.3. Agent Skill vs MCP
维度 MCP Agent Skill 定位 连接协议:AI 与外部系统的"USB 接口" 执行标准:AI 做事的"操作手册" 解决的问题 能不能连(访问数据库、API、文件系统) 怎么做(流程、规范、最佳实践) 技术形态 需要运行 MCP Server(TypeScript/Python) 静态文件夹(Markdown + 脚本) 加载时机 启动时建立连接 按需渐进加载 关系 互补:MCP 提供“工具” Skills 提供“使用指南” MCP 让 AI 能连上数据库,Skill 教 AI 怎么按你们公司的规范查数据、生成报表、处理异常。两者配合,AI 才能真正成为"懂行的专家"。
五、创建你的第一个 Agent Skill
会议纪要整理助手 为例,从零创建一个 Skill5.1. 创建 Skill 文件夹结构
meeting-minutes 的文件夹,总体的文件结构如下:/meeting-minutes/
├── SKILL.md # L1:技能元数据,L2:内容
├── references/ # L3:按会议类型按需加载
│ ├── weekly-rule.md # 周会模板
│ ├── retro-rule.md # 复盘模板
│ └── client-rule.md # 客户沟通模板5.2. SKILL.md(核心文件)
5.2.1. 元数据
SKILL.md 文件最开头以上下两个 --- 作为元数据标识---
name: meeting-minutes
description: 办公室通用会议纪要整理助手,支持周会/项目复盘会/客户沟通会三类场景,自动识别会议类型,按需加载对应会议规则,智能提取关键信息,输出结构化纪要。
---5.2.2. SKILL内容

5.3. 编写模块化配置references

通过文件分离,AI每次只读取当前任务所需的规则,避免 Context 污染
5.4. 测试你的 Skill(以 Trae 为例)
Trae 作为国内的 AI IDE 已原生支持 Agent Skillshttps://www.trae.cn/TRAE IDE5.4.1. 导入Skill
my_skillsTRAE IDE 打开这个文件夹meeting-minutes 文件夹复制到 my_skills/.trae/skills/ 目录下5.4.2. 输入提示词
SOLO 模式,然后在对话框输入以下提示词:帮我生成周会会议纪要
原始文本:
小明:用户模块我搞完了,已经提测。
小红:接口文档我还没弄,我负责写,周五前给出来。
张三:测试环境那个问题搞不定,需要运维老陈帮忙看看。
李四:下周我打算开始订单模块,周三前出个技术方案看看。
王五:数据库设计谁review一下?
小明:我来吧,不过得明天才有空。5.4.3. 执行Skill

5.4.4. 最终输出以下内容

六、本文Skill下载地址
会议纪要整理助手 Skill 的下载地址如下:references 里扩展更多的 会议类型 模板;script 文件夹写 Python 脚本,实现输出内容 导出word文档 或者 同步给飞书。七、总结
Agent Skills 的正式发布,标志着 AI 协作从 提示词工程 正式迈入 技能工程 的全新范式。它将人类专家的经验、标准化流程与行业最佳实践,封装成 AI 可理解、可执行、可复用的数字资产。
易饭票”是一款专为文员、办公室行政人员、学校及各类机构打造的极简票券设计工具。
从此打印饭票不再需要找文印店,只需要利用传统的打印机即可制作饭票。
针对传统排版中的痛点,彻底解决了“在 Word 里拉框子画线”以及繁琐的“邮件合并”操作。通过智能化的拼版系统和自动化工具,让您只需专注于设计,剩下的工作全部交给“易饭票”。
在线演示:https://mealtkt.langhub.top/
源代码右键自取

.fpt 工程文件,方便下次活动直接修改日期或面值重复使用。[背景概述]
IT 技术岗,工作 7 年。平时都在协调、组织,写材料。“带了”几个同事干活。
但是本身是技术岗,非管理岗。以为自己主动在帮领导分忧。
一年过去了,隔壁和我类似的同事升管理岗、拿了优秀。但是我还是虚线。
领导从来不主动谈这些事情,但是隔壁的领导是主动谈并且给选择。
[疑问]
感觉干纯技术岗位更舒服,不用为“组织协调”、和很多人打交道费尽心思。
在通向所谓“技术管理”岗位上,反而留给自己的时间更少,技术难以沉淀,都在帮组织解决问题、帮同事解决问题、尝试让同事更强,反而自己技术成长有限。
另外,管理岗是不是更不好跳槽?技术岗相对更容易跳槽?
大家有遇到类似的情况吗,怎么看待职场这样的变化?
搭建企业级 PHP 后台管理系统,选择一款合适的 Laravel admin 框架至关重要。PHP 作为 Web 开发领域最成熟的语言之一,拥有众多优秀的后台管理框架。Laravel 框架凭借优雅的语法和完善的生态,已成为 GitHub 上 stars 最高的 PHP 框架,围绕它诞生了大量优质的 PHP 后台框架。 本文将从开发效率、灵活性、学习成本三个维度,为你推荐 2026 年最值得使用的 7 款 PHP admin 后台管理系统。无论你是需要快速搭建企业后台、开发 SaaS 平台,还是构建电商管理系统,都能找到适合的 Laravel 后台管理解决方案。 在选择 PHP 管理后台框架之前,需要先明确项目需求。不同类型的 Laravel admin 框架适用于不同场景,选错框架可能导致后期开发成本大幅增加。下面按抽象程度从低到高,介绍三种主流的 PHP 后台框架类型: 脚手架型框架通过命令行自动生成 Model、Controller、路由和基础 CRUD 代码。优势是灵活性高,生成的代码完全可控;劣势是后期维护需要手动修改生成的代码。 CRUD 接口型框架提供一套完整的后台管理组件,开发者只需定义资源配置即可自动生成管理界面。代码量相对较少,但遇到复杂业务逻辑时需要额外扩展。本文推荐的 Laravel Nova、CatchAdmin、Filament、Backpack、Orchid 都属于这种类型。这类 PHP 后台管理系统在灵活性和开发效率之间取得了良好平衡,是目前最主流的选择。 可视化编程型框架抽象程度最高,通过拖拽或配置即可生成后台界面。部署快速,对编程能力要求较低,但灵活性也相对受限。Voyager 和 QuickAdminPanel 属于这种类型。 以下按推荐顺序介绍 7 款主流的 Laravel admin 后台管理框架,涵盖付费和开源方案,适用于从个人项目到企业级应用的各种场景。 Laravel Nova 是 Laravel 框架作者 Taylor Otwell 亲自打造的官方后台管理系统。作为官方产品,Nova 在架构设计和性能优化上都达到了极高水准。 Nova 采用 Vue.js 构建前端,提供了资源管理、搜索过滤、图表统计、自定义操作等开箱即用的功能。扩展生态非常完善,几乎每天都有新的扩展包在 Nova Packages 上线。 优势: 劣势: 适用场景: 商业项目、对稳定性要求高的企业级应用。 CatchAdmin 是一款基于 Laravel 12.x 和 Vue 3 + Element Plus 的企业级前后端分离后台管理系统。它充分利用 PHP 8+ 特性,采用现代化架构设计,是目前最受欢迎的开源 Laravel admin 框架之一。 对于需要搭建企业级 PHP 后台管理系统的团队来说,CatchAdmin 提供了开箱即用的完整解决方案。它不仅仅是一个 Laravel 后台框架,更是一套经过生产验证的企业级开发脚手架。 CatchAdmin 的核心优势在于模块化设计。每个业务模块拥有独立的控制器、路由、模型和数据表,模块之间完全解耦。这种架构让团队可以并行开发不同模块,后期维护也更加轻松。 CatchAdmin 还支持 Vue 即时渲染,前端代码修改后无需编译即可生效,大幅提升开发调试效率。 优势: 劣势: 适用场景: 企业后台管理、SaaS 平台、电商后台、CRM/OA 等企业应用、中大型项目。 Filament 是 2021 年发布的 Laravel admin 框架,近两年在社区的热度持续攀升,已成为 Laravel 生态中最受欢迎的开源后台框架之一。 Filament 基于 Livewire 和 Alpine.js 构建,采用 Tailwind CSS 设计。它不仅仅是一个后台管理框架,还包含表单构建器、表格构建器、通知系统等独立组件,可以单独使用。 优势: 劣势: 适用场景: 开源项目、个人项目、中小型企业项目。 Backpack 自 2016 年发布以来,一直保持稳定更新。它提供了一套完整的 CRUD 组件和丰富的字段类型,同时还有可视化开发工具 Backpack DevTools。 Backpack 的文档写得非常详尽,配有视频教程,学习成本较低。它的设计哲学是「约定优于配置」,大部分场景下只需简单配置即可完成开发。 优势: 劣势: 适用场景: 快速原型开发、对文档要求高的团队。 Orchid 由俄罗斯开发者 Alexandr Chernyaev 创建,是一个功能完善的 Laravel 后台管理框架。它内置了表单构建器、表格过滤器、排序、搜索等功能,细节处理得非常到位。 Orchid 的亮点在于它的 Screen 概念,将页面逻辑封装在 Screen 类中,代码组织清晰。同时,Orchid 拥有活跃的开源社区和大量的赞助者,保证了项目的持续发展。 优势: 劣势: 适用场景: 开源项目、需要精细权限控制的系统。 Voyager 与其他 Laravel admin 有所不同,它可以根据数据库表自动创建 BREAD(Browse、Read、Edit、Add、Delete)界面,无需编写代码。 Voyager 内置了媒体管理器,支持在 UI 层面管理文件。菜单构建器让你可以直接在页面上拖拽管理菜单结构。对于需要快速搭建后台的项目,Voyager 是一个不错的选择。 优势: 劣势: 适用场景: 快速原型、内容管理系统、对灵活性要求不高的项目。 QuickAdminPanel 的理念就是「快」。整个开发流程在线完成:在官网配置 admin 面板,选择需要的模块,点击下载,获得定制代码,部署到服务器。 这种模式特别适合需求明确、不需要太多灵活性的项目。生成的代码基于 Laravel 标准结构,后期也可以手动修改。 优势: 劣势: 适用场景: 快速启动项目、外包项目、MVP 开发。 以下表格从价格、技术栈、学习曲线、灵活性、前后端分离五个维度对比 7 款 Laravel admin 后台管理框架: 从表格可以看出,如果你需要一款免费、前后端分离、灵活性高的 PHP 后台管理框架,CatchAdmin 是为数不多同时满足这三个条件的选择。 选择 Laravel admin 后台管理框架需要综合考虑项目规模、团队技术栈、预算等因素: 无论选择哪个 Laravel 后台框架,建议先在小项目中试用,评估是否符合团队的开发习惯和项目需求。2026 年最值得使用的 7 款 PHP 管理后台框架推荐
PHP 后台管理框架选型指南
脚手架型
CRUD 接口型
可视化编程
2026 年 7 款 PHP 后台管理框架详解
Laravel Nova - 官方出品的标杆之作
CatchAdmin - 企业级前后端分离方案
核心功能
# 快速安装,五分钟即可构建
composer create catchadmin/catchadmin
cd catchadmin
php artisan catch:installFilament - 社区最火的后起之秀
// Filament 资源定义示例
use Filament\Resources\Resource;
class PostResource extends Resource
{
protected static ?string $model = Post::class;
public static function form(Form $form): Form
{
return $form->schema([
TextInput::make('title')->required(),
RichEditor::make('content'),
Select::make('status')->options([
'draft' => '草稿',
'published' => '已发布',
]),
]);
}
}Backpack - 灵活与效率的平衡
Orchid - 开源社区的优秀选择
// Orchid Screen 示例
use Orchid\Screen\Screen;
class PostListScreen extends Screen
{
public function query(): array
{
return [
'posts' => Post::paginate(),
];
}
public function layout(): array
{
return [
PostListLayout::class,
];
}
}Voyager - 可视化管理的先驱
QuickAdminPanel - 在线生成定制代码
PHP 管理后台框架对比
框架 价格 技术栈 学习曲线 灵活性 前后端分离 Laravel Nova $99-$299 Vue.js 中 高 ✅ CatchAdmin 免费 Vue 3 + Element Plus 中 高 ✅ Filament 免费 Livewire + Alpine.js 低 中高 ❌ Backpack €69+ jQuery + Bootstrap 低 中 ❌ Orchid 免费 Laravel Blade 中高 高 ❌ Voyager 免费 Laravel Blade 低 低 ❌ QuickAdminPanel $199/年 Laravel 标准 低 中 ❌ 如何选择合适的 PHP 后台管理框架
[原文 2026 年最值得使用的 7 款 PHP 管理后台框架推荐
](https://catchadmin.com/post/2026-02/php-admin-panel-2026)
输⼊⼀个⻓度为n 的整型数组array ,数组中的⼀个或连续多个整数组成⼀个⼦数组,找到⼀个具有 示例 1 示例 2 通过三重循环枚举所有可能的子数组,使用三重循环枚举所有可能的子数组起始和结束位置,计算每个子数组的和 在暴力法基础上优化,利用前缀和在计算子数组和时复用之前的结果,减少一层循环 采用分治思想,将问题分解为更小的子问题 将问题分解为左半部分、右半部分和跨越中间的三部分 即递归求解左右子数组,合并时处理跨越中间的情况 遍历数组,维护当前子数组和,根据规则重置或扩展当前子数组 假设现在有 n 个元素,突然加上⼀个元素,变成 n+1 个元素,对连续⼦数组的最⼤和有什么影响呢? 我们只需要知道以每⼀个元素结尾的最⼤连续⼦数组,再维护⼀个最⼤的值即可。 假设数组为num[] ,⽤ dp[i] 表示以下标 i 为终点的最⼤连续⼦数组和,遍历每⼀个新的元素nums[i+1] ,以 num[i+1] 为连续⼦数组的情况只有两种: 所以以nums[n] 结尾的最⼤连续⼦数组和为: dp[i] = max( dp[i-1] + num[i], num[i]) 在计算的过程中,需要维护⼀个最⼤的值,并且把该连续⼦数组的左边界以及右边界维护好,最后根据维护的区间返回。题⽬描述
最⼤和的连续⼦数组。
输⼊:[1,-2,3,10,-4,7,2,-5]
返回值:[3,10,-4,7,2]
说明:经分析可知,输⼊数组的⼦数组[3,10,-4,7,2]可以求得最⼤和为18,故返回[3,10,-4,7,2]
输⼊:[1]
返回值:[1]思路及解答
暴力枚举
public class Solution {
public int[] findMaxSubarray(int[] array) {
if (array == null || array.length == 0) {
return new int[0];
}
int n = array.length;
int maxSum = Integer.MIN_VALUE;
int start = 0, end = 0;
// 第一重循环:子数组起始位置
for (int i = 0; i < n; i++) {
// 第二重循环:子数组结束位置
for (int j = i; j < n; j++) {
int currentSum = 0;
// 第三重循环:计算子数组和
for (int k = i; k <= j; k++) {
currentSum += array[k];
}
// 更新最大和及位置(优先选择长度更长的)
if (currentSum > maxSum || (currentSum == maxSum && (j - i) > (end - start))) {
maxSum = currentSum;
start = i;
end = j;
}
}
}
// 构建结果数组
int[] result = new int[end - start + 1];
System.arraycopy(array, start, result, 0, result.length);
return result;
}
}优化枚举法(前缀和思想)
public class Solution {
public int[] findMaxSubarray(int[] array) {
if (array == null || array.length == 0) {
return new int[0];
}
int n = array.length;
int maxSum = Integer.MIN_VALUE;
int start = 0, end = 0;
// 外层循环:子数组起始位置
for (int i = 0; i < n; i++) {
int currentSum = 0;
// 内层循环:从起始位置向后累加
for (int j = i; j < n; j++) {
currentSum += array[j]; // 复用之前计算的结果
// 更新最大和(优先选择长度更长的)
if (currentSum > maxSum || (currentSum == maxSum && (j - i) > (end - start))) {
maxSum = currentSum;
start = i;
end = j;
}
}
}
return buildResult(array, start, end);
}
private int[] buildResult(int[] array, int start, int end) {
int[] result = new int[end - start + 1];
System.arraycopy(array, start, result, 0, result.length);
return result;
}
}分治法(递归思维)
public class Solution {
public int[] findMaxSubarray(int[] array) {
if (array == null || array.length == 0) {
return new int[0];
}
Result result = findMaxSubarrayHelper(array, 0, array.length - 1);
return buildResult(array, result.start, result.end);
}
private Result findMaxSubarrayHelper(int[] array, int left, int right) {
// 基准情况:单个元素
if (left == right) {
return new Result(left, right, array[left]);
}
int mid = left + (right - left) / 2;
// 递归求解左右两部分
Result leftResult = findMaxSubarrayHelper(array, left, mid);
Result rightResult = findMaxSubarrayHelper(array, mid + 1, right);
Result crossResult = findMaxCrossingSubarray(array, left, mid, right);
// 返回三者中的最大值(长度优先)
return getMaxResult(leftResult, rightResult, crossResult);
}
private Result findMaxCrossingSubarray(int[] array, int left, int mid, int right) {
// 向左扩展找最大和
int leftSum = Integer.MIN_VALUE;
int sum = 0;
int maxLeft = mid;
for (int i = mid; i >= left; i--) {
sum += array[i];
if (sum > leftSum) {
leftSum = sum;
maxLeft = i;
}
}
// 向右扩展找最大和
int rightSum = Integer.MIN_VALUE;
sum = 0;
int maxRight = mid + 1;
for (int i = mid + 1; i <= right; i++) {
sum += array[i];
if (sum > rightSum) {
rightSum = sum;
maxRight = i;
}
}
return new Result(maxLeft, maxRight, leftSum + rightSum);
}
private Result getMaxResult(Result r1, Result r2, Result r3) {
Result maxResult = r1;
if (r2.sum > maxResult.sum || (r2.sum == maxResult.sum && (r2.end - r2.start) > (maxResult.end - maxResult.start))) {
maxResult = r2;
}
if (r3.sum > maxResult.sum || (r3.sum == maxResult.sum && (r3.end - r3.start) > (maxResult.end - maxResult.start))) {
maxResult = r3;
}
return maxResult;
}
private int[] buildResult(int[] array, int start, int end) {
int[] result = new int[end - start + 1];
System.arraycopy(array, start, result, 0, result.length);
return result;
}
// 辅助类存储子数组结果
class Result {
int start, end, sum;
Result(int s, int e, int sum) {
this.start = s;
this.end = e;
this.sum = sum;
}
}
}动态规划-Kadane算法(最优解)

public class Solution85 {
public int[] FindGreatestSumOfSubArray(int[] array) {
int[] dp = new int[array.length];
dp[0] = array[0];
int maxsum = dp[0];
int left = 0, right = 0;
int maxLeft = 0, maxRight = 0;
for (int i = 1; i < array.length; i++) {
right++;
dp[i] = Math.max(dp[i - 1] + array[i], array[i]);
if (dp[i - 1] + array[i] < array[i]) {
left = right;
}
// 更新最⼤值以及更新最⼤和的⼦数组的边界
if (dp[i] > maxsum || dp[i] == maxsum && (right - left + 1) > (maxRight - maxLeft + 1)) {
maxsum = dp[i];
maxLeft = left;
maxRight = right;
}
}
// 保存结果
int[] res = new int[maxRight - maxLeft + 1];
for (int i = maxLeft, j = 0; i <= maxRight; i++, j++) {
res[j] = array[i];
}
return res;
}
}