包含关键字 typecho 的文章

大语言模型在demo阶段总是看起来很惊艳。但一旦进入到生产环境很多问题就暴露了:不稳定、不可预测,甚至直接不可用。

从实践来看核心问题很少出在模型本身。更多时候是在于如何设计、评估和迭代应用模型的提示词。LLM应用的输入提示词必须适配具体任务,才能让模型在期望的输出范围内工作。

提示词工程在今天基本还是被当作一种"艺术"。这篇文章要讨论的就是为什么这是个问题,以及怎么把它变成一门可度量的工程学科。

提示词工程仍然是猜测

大多数团队的提示词改进流程其实很粗糙:有人写(或重写)提示词,跑几个例子,主观觉得"感觉好了一些",然后就上线了。

没有度量标准,没有基线,也没有对"更好"的明确定义。

这带来的直接后果是:提示词质量难以对比,评估基本靠外部响应来判断,回归问题不容易察觉,很多故障等到上线后才被发现。

提示词工程本质上极度主观,如果目标是构建可靠的AI系统,这就成了一个严重的瓶颈。

实际LLM使用中的两个对立问题

在生产环境里跑LLM,我发现有两个反复出现的问题。

不一致性:同一个提示词,不同的答案

同一条提示词跑多次会产生明显不同的输出。这不只是烦人的问题,而是对数据流水线、自动化决策系统、评估框架来说,这是实打实的可靠性风险。

高方差在这类场景下是bug不是feature。模型要么表现出确定性行为,要么至少得在可控范围内运行。

缺乏多样性:模型不够有创造力

反过来,有好几个实际项目中碰到了相反的困境:做创意生成、探索性分析、创意制作这类任务时,模型产出的内容彼此过于相似,概念覆盖面非常窄。一旦规模化,创造力就丢得干干净净。

这时候确定性就从优势变成了束缚。

一个简单的假设

提示词质量应该是可衡量的。

有些任务需要最小化输出方差,有些任务需要最大化多样性,而提示词的变更应该能推动结果朝可度量的方向移动。不同类型的任务也可以选择不同的度量标准。

既然模型行为可以衡量,提示词行为为什么不能?

为了验证这个想法,我选了模型行为的一个切面来入手:响应多样性,把它当作创造力的代理指标。

目标不是找到完美的度量方式,而是回答两个问题:提示词变更能不能转化为一致的数值差异?单次任务上的创造力/确定性到底取决于提示词还是仅取决于温度?

实验设置

实验规模不大,设计如下:

提示词

提示词A:

"Create 5 ideas of creative banners for performance marketing of an AI benchmarking platform."

提示词B在A的基础上加了一条指令:

"Create 5 ideas of creative banners for performance marketing of an AI benchmarking platform. Be as creative as possible."

模型和采样

采用单次生成模式,测试了多个LLM(具体型号这里略过),温度分别设为0 × max、0.5 × max和1 × max。每个(提示词、模型、温度)组合跑10次。

测试集选了4个主流模型家族的13个模型:OpenAI的GPT系列、Google的Gemini系列、Antropic的Claude系列,以及Deepseek。

通过Embedding衡量多样性

每条生成结果都计算了4096维的embedding向量。然后对每个实验集(固定提示词、模型和温度),取集合内embedding的最大成对距离作为响应多样性的度量。

逻辑很简单:距离小说明行为高度确定,距离大说明输出多样且有创造力。最终得到一个数值,描述模型响应的"分散程度"。

结果

汇总表,创意提示词版本导致了更显著的分散。同时温度并不总起作用。

基础提示词和创意提示词在模型-温度切片上的比较图。

每个模型在不同温度水平上的响应分散图

结果比预期要清晰得多。

跨模型来看有三个明显趋势:在提示词中加入明确的创造力指令,曲线一致上移;提高温度在一定程度上增大了响应多样性,但受限于小样本,这个结论还需谨慎看待;各模型对温度变化的响应方式差异很大没有统一规律。

提示词变更带来的是可预测的数值效果,而非随机噪声。

这说明两件事:提示词迭代不必完全依赖直觉,输出创造力是可量化的;这一假设有可能推广到更大的样本和不同的应用场景。

这套方法的实际意义在于:提示词可以通过数值做A/B测试,温度调优有了度量依据而不是靠猜,模型选择可以由任务需求驱动而非跟风。

它让团队能在提示词变更上线之前就对效果做出推断。

局限性

结果虽然是正向的但有几个局限

度量标准的任务特定性

这里定义的"创造力"严格来说是任务相关的。用embedding距离衡量的响应多样性,在创意生成、营销创意、探索性任务上作为创造力的代理指标还算合理,但在事实性问答、代码生成、结构化数据提取这些场景下可能毫无意义,甚至会产生误导。

不能把它当成模型质量的通用指标。目前我也在测试其他面向不同任务的度量标准。

对Embedding空间的依赖

所有测量都建立在特定embedding模型和距离度量之上。换用不同的embedding模型、向量归一化方式或距离函数,绝对值也是会变的,所以模型间的相对排名也可能有所不同。

但本实验中观察到的趋势是稳定的,所以结果应当按相对值来解读,不宜绝对化。

有限的样本量

每个配置只跑了有限次数。趋势虽然一致,但要减少方差、估计置信区间、得出统计上站得住的结论,样本量还远远不够。当前的发现更多是探索性的,不是定论。

提示词和领域偏差

实验只用了一种任务表述和一个窄领域(效果营销创意)。换到其他领域或提示词风格,效果可能更弱、更强,也可能呈现完全不同的行为模式。把这些结论向创意任务之外推广需要格外谨慎。

创造力与实用性的权衡

响应多样性高不等于结果好。高度多样化的输出里可能混着不相关的想法、低质量的建议和不连贯的回复。这个实验测的是方差,不是实用性更不是商业价值。实际应用中创造力度量必须和质量过滤或下游评估配合使用。

LLM的非平稳性

大语言模型会被提供商持续更新,所以绝对分数可能随时间漂移,分数可能在提示词没改的情况下发生变化,可复现性也可能下降。任何长期的基准测试工作都必须把这种非平稳性纳入考量。

相关性不意味着因果性

最后要说的是,温度、提示词指令和响应多样性之间虽然有明确的相关性,但这不代表对模型行为有了完整的因果理解。实验证明的是"提示词变更可以被衡量",而不是创造力可以被这套度量标准完全解释。

总结

这只是一系列研究的第一个实验,后续结果会在接下来的文章中陆续呈现。下一步计划:增加样本量,尝试不同的提示词,实验如何降低创造力,为其他类型任务定义新的度量标准,以及构建一个定期更新的模型排行榜来覆盖各项指标。

https://avoid.overfit.cn/post/e84eee36d7bc4263b9fd5dfe564e21d9

作者:Alexey Konoshenkov

前段时间我写过一篇文章,记录自己作为一名 PHP 开发者自学 Go 的过程

那篇更多是学习阶段的整理。这次则是一次完整实践的复盘。

单点知识和系统能力之间始终存在差距。

理解一个概念并不难,但要把多个能力组合起来,形成一个可以长期运行的系统,往往需要真实项目去反复打磨。很多看似基础的东西,只有亲手做过,理解才会真正扎实。

最近我完成了一个小工具:github-webhook-listener

一个用 Go 实现的 GitHub Webhook 接收服务,可以根据规则执行 Shell 命令,并内置一个简单的 Vue 面板,用于查看运行状态和执行记录。

功能本身并不复杂,AI 也完全可以在较短时间内生成类似的实现。但在实际开发过程中,我更在意的并不是功能本身,而是一些基础层面的设计问题:项目结构如何划分,依赖如何组织,边界如何定义,以及构建与部署如何简化。

这些内容未必新鲜,但当它们被组合到一个完整系统中时,体会是不同的。

项目地址我放在文章末尾,感兴趣可以自行查看下载使用。

下面我会从结构设计、并发模型以及构建方式三个方面,做一次相对完整的技术复盘。


项目结构与职责划分

项目核心代码放在 internal 目录:

internal/
├── bootstrap
├── handler
├── service
├── repository
├── model
├── dto

这种结构并不追求“标准答案”,重点在于依赖方向清晰。

repository

  • 只负责数据库操作
  • 不包含业务判断
  • 不依赖 HTTP

service

  • 负责业务逻辑
  • 调用 repository
  • 不处理 HTTP 细节

handler

  • 只做参数解析与响应封装
  • 调用 service
  • 不包含核心逻辑

在功能简单时,这种分层似乎有些“多余”。

但当涉及到任务调度、执行记录、重试机制时,结构边界开始体现价值。

边界明确之后,功能扩展基本是“局部修改”,而不是结构性调整。


在 bootstrap 中组织依赖关系

所有初始化逻辑集中在 bootstrap 包中完成:

  1. 初始化数据库
  2. 创建 repository
  3. 注入到 service
  4. 注入到 handler
  5. 注册路由

依赖关系在入口处完全展开,而不是在各个文件中隐式创建。

这种方式带来的最大好处是:

  • 对象生命周期清晰
  • 依赖方向可控
  • 替换实现时改动集中

在没有使用任何 DI 框架的情况下,通过显式构造函数完成依赖注入,本身就是对依赖关系的一种约束。

当项目规模不大时,这种方式反而比自动注入更透明。


双队列 Worker Pool 的并发调度模型

这个项目的核心之一,是执行 Shell 命令并控制并发数量。

我实现的是一个“双队列 Worker Pool”结构,主要包含三个核心组件:

  1. 任务生产者(Producer)
  2. 集中式调度器 + Worker Goroutine
  3. 结果处理器(Result Processor)

第一层:任务生产者

当 Webhook 触发或 Web 面板手动触发任务时,任务被封装为一个结构体,发送到调度队列。

这一层只负责“生成任务”,不关心执行细节。


第二层:集中式调度器 + Worker Pool

调度器内部维护:

  • 一个任务输入队列
  • 一个固定数量的 worker goroutine

调度流程:

  • 调度器从任务队列中取出任务
  • 分发给空闲 worker
  • worker 执行 Shell 命令
  • 将执行结果发送到结果队列

worker 数量可控,因此系统并发是有上限的。

这种结构的优点:

  • 并发可控
  • 不会因为 Webhook 高频触发而无限创建 goroutine
  • 任务调度逻辑集中管理

相比“每来一个请求直接开 goroutine 执行”的写法,这种结构在可控性和可扩展性上更好。


第三层:结果处理器

worker 不直接写数据库,而是把结果推送到结果队列。

结果处理器负责:

  • 更新执行记录
  • 写入数据库
  • 处理重试逻辑(如果有)

这样做的目的,是进一步解耦:

  • 执行逻辑专注执行
  • 持久化逻辑专注记录

这就是“双队列”的意义:

  • 队列一:任务调度
  • 队列二:结果处理

这种分离在系统规模变大时尤为重要,因为执行耗时和持久化耗时是两个不同维度的问题。


Makefile 作为构建入口

项目使用 Makefile 统一管理:

  • 后端构建
  • 前端构建
  • 交叉编译
  • 发布打包

Makefile 在这里的意义并不是“少打几行命令”,而是:

  • 所有构建流程被显式记录
  • 新环境下可直接复现
  • 发布步骤标准化

当一个项目开始涉及前后端协作、交叉编译和发布时,构建流程本身就成为项目的一部分。


使用 embed 将前端资源打包进二进制

这是我在这个项目中感受最明显的“Go 工程优势”。

前端使用 Vue 构建完成后,静态资源通过 embed 打包进 Go 二进制中。

然后通过:

http.FileServer(http.FS(...))

直接提供访问。

最终效果是:

  • 只有一个可执行文件
  • 不需要 Node 环境
  • 不需要单独部署前端
  • 不依赖外部静态文件目录

从架构上看,它仍然是前后端分离:

  • 前端独立开发
  • 后端提供 API

但从交付形态看,它又像是传统单体应用:

  • 单文件分发
  • 直接运行

这种组合非常适合工具型项目和内部服务。

Go 在这一点上确实有明显优势:编译后就是完整产物,不需要运行时环境,不依赖包管理器,不依赖额外解释器。

分发成本几乎为零。


写在最后

这个项目没有刻意追求复杂设计,也没有引入额外框架。

它更像是一次完整的工程实践:把分层、依赖组织、并发控制、构建管理这些已经学过的能力组合在一起,形成一个可长期运行的系统。

我自己已经在实际环境中持续使用它,用来自动化部署和执行脚本,稳定性和可维护性都符合预期。对我来说,它已经从“练手项目”变成了日常工具。

如果你刚好也需要一个简单的 GitHub Webhook 执行工具,可以直接拿去用;

如果你正在学习 Go,想找一个结构完整、但复杂度可控的小项目作为参考,也可以看看实现细节。

GitHub 仓库地址:点击查看

有问题或者想法,也欢迎直接在 GitHub 上交流。

🍁 枫琳 (Fenglin)

人机共生智能协作平台 - 让智能自然融入生活

一、产品简介

枫琳 是一款实现人与智能体(OpenClaw、OpenCode 等)和谐相处、共同交流、生活、工作的智能协作平台。支持接入钉钉、企业微信等办公软件,覆盖朋友圈、点赞、评论、私信等社区场景,实现人与机器人共生,共同进步,就像人与自然和谐共生一样。

品牌理念

含义象征
四季流转,顺应自然人与 AI 和谐适应、共同成长
美玉相击,清音回响思想交流、心灵共鸣
"枫叶由绿转红,是成长的印记;人机由陌生到默契,是共生的旅程"

二、核心功能

1. 🤖 智能体协作

枫叶随风起舞,人与 AI 自然共处
  • 多智能体协同工作 - 支持 OpenClaw、OpenCode 等多种智能体
  • 智能任务分配 - AI 自动分析并分配最优任务
  • 实时沟通反馈 - 人机无缝对话,即时响应

2. 🏢 企业级集成

枫枝相连,生态融合
  • 钉钉深度集成 - 无缝对接企业钉钉工作流
  • 企业微信对接 - 支持企业微信生态
  • 自定义工作流 - 灵活配置企业专属流程

3. 💬 社区生态

枫叶飘落,信息传递;琳玉相击,思想共鸣
  • 朋友圈动态分享 - 发布图文、视频动态
  • 实时互动评论 - 点赞、评论、转发
  • 安全私密对话 - 端到端加密私信

4. ✨ 智慧共生

枫叶四季蜕变,持续成长
  • 知识共享沉淀 - 构建团队知识库
  • 能力互补提升 - 人机优势互补
  • 共同成长轨迹 - 记录每一步进步

三、应用场景

场景描述
协同办公智能体助手帮你处理日常事务,如枫叶随风,自然流畅
团队协作人机混合团队高效配合,如枫林成片,协作共生
社交互动与 AI 伙伴分享生活,如枫语私语,获得理解与陪伴
知识共创人类智慧与 AI 能力融合,如秋日枫林,收获满满

四、产品优势

优势说明
🛡️ 安全可靠企业级数据安全保障,如枫根深扎
全天候服务7×24 小时智能体在线,如枫叶常伴
高效智能AI 驱动的工作流,效率提升 300%
🌐 开放生态支持多种智能体接入,如枫林开放

五、品牌色彩体系

颜色色值含义
🔴 枫叶红#C41E3A温暖、活力、信任
🟡 秋金黄#D4A017收获、价值、希望
🟢 自然绿#228B22成长、生命、和谐

六、品牌 Slogan

主 Slogan:

枫琳,让智能自然融入生活

场景 Slogan:

场景Slogan
品牌宣传枫琳 — 人机共生,自然之道
产品介绍枫琳,你的 AI 协作伙伴
社交场景在枫琳,与 AI 成为朋友
办公场景枫琳协创,工作更自然

七、开源项目

本产品为开源项目,欢迎参与贡献:

🔗 Gitee 仓库: https://gitee.com/hongmaple/openclaw-dindin-chart


八、快速开始

1. 注册账号

访问枫琳官网,点击"免费试用"按钮

2. 创建工作空间

选择你的行业场景,系统将为你推荐合适的智能体

3. 开始协作

与智能体开始对话,让它成为你的得力助手


九、联系我们

渠道信息
📧 Email296155694@qq.com
💬 微信mapleCx330
🌐 官网www.fenlin.ai
📦 开源项目https://gitee.com/hongmaple/openclaw-dindin-chart

十、相关链接

项目地址
枫琳落地页源码https://gitee.com/hongmaple/fenlin-landing
枫琳 chat 开源项目https://gitee.com/hongmaple/openclaw-dindin-chart

🍁 枫琳 - 人机共生,自然之道

让 AI 如枫叶般自然融入你的工作与生活

本文由mdnice多平台发布

从开服第一天起,就跑在云上;

上线一年,DAU 已经突破 1000 万;

高峰期百万玩家同时在线,零重大故障。

这不是科幻,而是巨人网络与阿里云共书写的云原生实战。

image

《超自然行动组》的云原生架构先行战略

2025 年 1 月,巨人网络推出多人组队欢乐冒险游戏《超自然行动组》,凭借创新的“中式微恐+多人合作"的独特玩法,迅速成为现象级产品。最近,《超自然行动组》宣布 DAU 突破 1000 万,更攀升至 iOS 游戏畅销榜第四。尤为值得一提的是,自开服第一天起,这款游戏从未部署在任何物理机或传统虚拟机上——它从第一天起,就运行在云原生架构之上

对于大多数游戏公司而言,“上线即爆款” 是甜蜜的烦恼——流量洪峰来得快、退得慢,而传统架构却“笨重”:

  • 游戏服(如战斗服、房间服)部署在固定服务器,扩容需数天;
  • 为应对峰值需长期预留资源,空闲时浪费严重;
  • 版本更新靠脚本,灰度发布难,一出错就“全服回滚”;
  • 日志分散、监控割裂,故障定位动辄几小时;
  • 安全防护薄弱,易受 DDoS 攻击;
  • 数据层瓶颈突出:战斗结算延迟、排行榜卡顿、玩家数据丢失等问题频发。

《超自然行动组》团队深知:若沿用旧模式,很可能“倒在成功的路上”。

于是,他们选择了一条更难但更远的路——全面拥抱云原生

通过 ACK(容器服务)、ESS(弹性伸缩)、网络型负载均衡 NLB、OpenKruiseGame(OKG)、SLS(日志服务)、ARMS(应用实时监控服务)、阿里云原生防护(Native Protection),以及云原生数据库 polardb 和 Redis 的深度协同,巨人网络构建了一套高弹性、高可用、低成本、智能化、高安全且高性能数据处理能力的新一代游戏基础设施,为行业树立了云原生落地的标杆。如今,随着日活跃用户(DAU)突破千万大关,这套技术体系,已经成为游戏行业“云原生转型”的标杆案例。

高弹性×低延迟×零故障:解码<超自然行动组>的云原生底座

《超自然行动组》基于阿里云 ACK 与 OpenKruiseGame(OKG)构建了业界领先的云原生游戏服架构:通过蓝绿发布与原地升级实现零停机、无感交付;通过 OKG+多 NLB 资源池,全面覆盖 BGP、电信、联通、移动等主流线路,实现多运营商网络自动化映射。结合 HPA 智能扩缩容与 OKG 优雅下线机制,在成本与用户体验间取得平衡;通过 ACK Koordinator 组件,实现 CPU Burst 与 QoS 精细化调度,显著提升集群资源利用率;并通过基础设施与业务状态的双向感知,构建起“业务语义驱动”的自动化运维闭环——真正实现了高弹性、高可用、高性能、高安全的新一代游戏后端体系。在显著降低运维压力的同时,实现了机制化、可持续的成本优化。

在网络层面,作为一款对延迟极度敏感的竞技手游,《超自然行动组》依托阿里云打造了“云边协同、三网通吃、弹性集约”的新一代云网络架构:通过 OKG 与 NLB 实现电信、联通、移动、BGP 四线并发接入,全国玩家自动匹配最优链路,并以“静态网络+动态计算”创新模式达成 50 节点/分钟的极速扩容,15 分钟内可拉起数千战斗服,彻底告别排队;同时,借助阿里云高速通道,将本地机房的账号、支付等核心系统与上海 VPC 内网直连,构建毫秒级同步、金融级安全的混合云中枢;并通过共享带宽包统一聚合公网出口,在简化运维的同时显著降本,为玩家交互与高频状态同步提供弹性“带宽蓄水池”,真正实现千万玩家同场竞技零卡顿、零等待的极致体验。

在数据层面,云原生 polardb 和 Tair(兼容 Redis)构建了弹性,稳定的玩家存档方案,支持千万级玩家高并发登录和读写,基于 polardb 云原生数据库的存算分离和弹性能力,支持游戏在活动期间自动扩展弹性,并且支持玩家数据的秒级备份和回档,大幅降低了数据库的运维成本,并且 PolarDB Serverless 支持自动扩容和缩容,能够根据用户访问量的实时变化,秒级调整计算资源。在高峰时期自动增加资源,低谷时期自动减少资源,确保社区始终运行在最佳状态。基于阿里云 Tair(兼容 Redis)支持玩家超高并发的访问,作为实时排行榜、战斗状态缓存和匹配池的核心,依托多线程与持久内存优化,单实例 QPS 超百万,实现毫秒级排名刷新、瞬时结算与断线无缝恢复。

当数百万玩家涌入《超自然行动组》,DDoS 攻击成为影响体验的关键风险。为此,巨人网络联合阿里云,基于云原生安全架构打造了一套高性能、智能化的防护体系。该方案依托阿里云原生高防能力,无需架构改造,一键接入即可实现 TB 级 DDoS 攻击的毫秒级识别与精准清洗,防护能力行业领先。即便在版本更新或大型赛事等高并发场景下,系统仍保障 99.99% 以上服务可用性,真正做到“攻击零感知、切换无中断”。面对突发流量洪峰,系统支持防御带宽自动弹性伸缩,动态调配资源,避免因容量不足导致服务中断。同时,通过集成安全事件中心,运营团队可实时监控攻击事件,分析攻击类型与特征,并结合 AI 驱动的策略建议,快速部署定制化游戏协议防护规则,显著提升响应效率与防御精准度。从高效清洗到智能决策,阿里云以“稳定、高效、安全”为核心,为《超自然行动组》构筑起坚不可摧的数字护盾,在保障千万玩家流畅竞技的同时,也为游戏行业树立了云原生安全新标杆。

对于《超自然行动组》这款主打实时互动的竞技游戏,“能跑” 只是起点,“看得清、查得准” 才是保障千万玩家流畅体验的关键。运维团队摒弃传统分散监控工具,基于阿里云日志服务 SLS 、云监控 CMS 的 Prometheus 服务、Grafana 服务,搭建起轻量、标准、深度集成的可观测体系:

  • 依托 Prometheus 实时采集百万级 PCU 下的资源水位与在线人数、匹配时长等核心业务指标,确保高并发下监控精准不丢点;
  • 通过 SLS 统一汇聚全链路日志,支持按 RequestID / 玩家 ID 秒级还原行为路径,结合 SQL 分析与自定义规则,实现地图报错统计、异常操作追踪;
  • 借助 Grafana 打造统一全景大盘,融合展示指标与日志数据,告警时可一键跳转 SLS 查看关联日志,实现 “指标发现问题、日志定位根因” 的闭环,将故障响应时间从小时级压缩至分钟级,充分发挥云原生可观测与协同优势。

image

超自然云原生架构

从“能跑”到“跑赢”:OKG 重塑游戏后端新范式

当一款游戏从“能跑”走向“跑得快、跑得省、跑得稳”,背后一定有一套先进的技术底座在支撑。《超自然行动组》的故事,源于巨人网络,也属于所有正在思考“如何用云原生重构游戏后端”的开发者。

image

面对全球游戏市场对高并发、低延迟及快速迭代的极致追求,OpenKruiseGame (OKG) 作为阿里云打造的“为游戏而生”的云原生游戏服管理方案,正成为推动行业架构平滑升级的核心引擎。针对游戏业务特有的异构性管理难题,OKG 提供了从精细化配置、自动化网络接入到业务状态感知的一站式管理体系。它不仅极大降低了游戏厂商的云原生转型门槛,更通过全球多地域一致性交付能力,助力开发者突破地域限制,实现业务的快速敏捷部署与全球化扩张。

image

云原生,已不再是互联网应用的专属,而是下一代游戏基础设施的必然选择。

随着越来越多的开发者寻求 React 生态系统之外的解决方案,像 Astro 和 Svelte 这样的前端框架越来越受欢迎,今年 Web 开发的复杂性进一步降低。与此同时,原生 Web 平台的特性证明了它们能够胜任构建复杂的 Web 应用程序的工作——尤其是 CSS 在 2025 年得到特别改进。

 

话虽如此,也许今年最大的 Web 开发趋势是 AI 辅助编码的兴起——事实证明,它倾向于默认使用 React 和领先的 React 框架 Next.js。因为 React 在前端领域占据主导地位,大语言模型(LLM)有很多 React 代码进行训练。

 

让我们更详细地看看 2025 年的五大 Web 开发趋势。

 

1. 原生 Web 特性的崛起

在 2025 年,许多原生 Web 特性悄然赶上了 JavaScript 框架提供的功能。例如,视图、转换API——它可以让你的网站在页面之间流畅地切换——成为了Baseline 2025索引跨浏览器支持的一部分。因此,现在 Web 开发人员可以广泛使用它。

 

Baseline 是一个由 W3C 的 WebDX 社区小组协调的项目,包括来自谷歌、Mozilla、微软和其他组织的代表。它从 2023 年才开始运行,但今年它真正成为了实践Web开发人员的有用资源。

 

Baseline 特性的稳定年度增长,通过Web平台状态站点观测

 

正如 The New Stack 的 Mary Branscombe在6月份所报道的那样,有很多方法可以跟踪 Baseline 的变化:

 

“谷歌的 Web.Dev 有关于 Baseline 特性和新闻的月度更新,WebDX 特性浏览器允许你查看有限可用、新可用或广泛可用的特性;月度发布说明涵盖了哪些特性达到了新的 Baseline 状态。”

 

从 Web 功能的角度来看,现在真的没有理由不使用原生 Web 功能。正如资深 Web 开发人员Jeremy Keith最近所说,框架“限制了你在 web 浏览器中所能做的事情的可能性空间”。在随后的一篇文章中,Keith 敦促开发人员尤其不要在浏览器中使用 React,因为文件大小对用户来说成本太高了。相反,他鼓励开发人员“研究在浏览器中可以使用纯 JavaScript 做些什么”。

 

2. AI 编码助手默认为 React

今年,AI 成为了 Web 开发工具链的标准组成部分(尽管并不总是得到开发者的认可,特别是那些在 Mastodon 或 Bluesky 而不是 X 或 LinkedIn 上社交的开发者)。无论你是不是应用程序开发中的 AI 粉丝,都有一个大问题:LLMs 倾向于默认使用 React 和 Next.js。

 

当 OpenAI 的GPT-5在 8 月发布时,其所谓的优势之一是编码。GPT-5 最初从开发者那里获得了褒贬不一的评价,所以在那个时候,我联系了 OpenAI,向他们询问编码特性。OpenAI 的研究员Ishaan Singal通过电子邮件回复。

 

我向 Singal 指出,在GPT-5提示指南中,有三个推荐的框架:Next.js(TypeScript)、React 和 HTML。我问是否有与 Next.js 和 React 项目团队合作,以优化 GPT-5 对这些框架的支持?

 

“我们选择这些框架是基于它们的受欢迎程度和通用性,但我们并没有直接与 Next.js 或 React 团队在 GPT-5 上合作,”他回答说。

 

OpenAI 的 GPT-5 提示指南中的“组织 GPT-5 代码编辑规则”的示例。

 

我们知道,负责Next.js框架的公司 Vercel 是 GPT-5 的粉丝。在发布当天,它称 GPT-5 是“最好的前端 AI 模型”。所以这里发生了一个很好的交换条件——GPT-5 之所以能够成为 Next.js 的专家,是因为它的受欢迎程度,这可能进一步增加了它的受欢迎程度。这对 OpenAI 和 Vercel 都有帮助。

 

“归根结底,这是开发者的选择,”Singal 总结道,关于开发者想要使用哪些 Web 技术。“但成熟的代码库有更好的社区支持。这有助于开发者自助维护。”

 

3. AI 智能体和聊天机器人中 web 应用的出现

今年,我们看到了 AI 聊天机器人和智能体中小型 Web 应用的出现。

 

MCP-UI是 Web 将成为 AI 智能体关键部分的第一个迹象。顾名思义,MCP-UI使用流行的模型上下文协议作为通信基础。该项目“旨在标准化模型和工具如何在客户端应用程序中请求显示丰富的 HTML 界面。”

 

在8月的一次采访中,两位创始人(其中一位当时在 Shopify 工作)解释说,MCP-UI 有两种类型的 SDK:客户端 SDK 和连接到 MCP 服务器的服务器 SDK。服务器 SDK 提供 TypeScript、Ruby 和 Python 版本。

 

一个 UI 被插入到 Claude 3.7 Sonnet 聊天中的 MCP-UI 演示。

 

MCP-UI 听起来很有前途,但很快就被 OpenAI 10 月初发布的Apps SDK盖过了风头。Apps SDK允许第三方开发者构建基于 Web 的应用程序,这些应用程序作为 ChatGPT 对话中的交互式组件运行——这让我们想起了 2008 年苹果推出应用商店时的情景。

 

Apps SDK 的决定性特征是基于 Web 的 UI 模型(类似于 MCP-UI)。ChatGPT 应用组件是一个 Web UI,运行在 ChatGPT 对话中的沙箱框架中。ChatGPT 作为应用程序的主机。你可以将第三方 ChatGPT 应用程序视为直接嵌入 ChatGPT 界面的“迷你 Web 应用程序”。

 

到 10 月底,像 Vercel 这样的行业巨头已经想出了如何使用他们的 JavaScript 框架来构建ChatGPT应用程序。Vercel 将 Next.js 与 ChatGPT 应用程序平台的快速集成表明,AI 聊天机器人将不仅仅局限于轻度交互的小部件——复杂的 Web 应用程序也将在这些平台上存在。

 

4. 浏览器中的 Web AI 和设备上的推理

2025 年的另一个并行发展是在浏览器中运行客户端AI的兴起,这允许 LLM 推理在设备上进行。谷歌在这方面尤为突出;它对这种趋势的称呼是“Web AI”。Jason Mayes,谷歌这些举措的负责人,将Web AI定义为“通过 Web 浏览器在用户设备上运行任何机器学习模型或服务的艺术。”

 

11 月,谷歌举办了一场仅限受邀者参加的活动,名为谷歌Web AI峰会。之后,我采访了活动的组织者兼主持人 Mayes,他解释说,一个关键技术是 LiteRT.js,谷歌的 Web AI 运行时,目标是生产 Web 应用程序。它建立在LiteRT的基础上,后者旨在直接在设备(移动、嵌入式或边缘)上运行机器学习(ML)模型,而不是依赖于云推理。

 

在 Web AI 峰会的主题演讲中,谷歌负责 Chrome 和 Web 生态系统的副总裁兼总经理Parisa Tabriz强调了去年 8 月 Chrome 内置的AI API,以及去年 6 月发布的作为 Chrome 内置功能的 Gemini Nano——谷歌的主要设备上模型。这些和其他 Web 技术正在推动当前的 Web AI 趋势。

 

Parisa Tabriz 在 Web AI 峰会上。

 

谷歌与微软一起参与的另一项创新是WebMCP的发布,它允许开发人员使用客户端 JavaScript 控制 AI 智能体如何与网站交互。在 9 月与微软 Edge 的 Web 平台产品经理Kyle Pflug的采访中,他解释道:“核心概念是允许 Web 开发者用 JavaScript 为他们的网站定义‘工具’,就像传统 MCP 服务器提供的工具一样。”

 

Web AI 不仅仅是由商业公司推广。万维网联盟(W3C)也在探索“代理式Web”的构建模块,其中包括使用 MCP-UI、WebMCP 和另一个新兴的称为NLWeb的标准(由微软开发)。

 

5. JavaScript 生态系统的“生命化”

这听起来像是 AI 主导了今年的 web 开发——事实上也确实如此。但前端工具也看到了它的创新份额。有一款产品特别引人注目。

 

Vite,由Evan You创建,已经成为现代前端框架的首选构建工具,包括 Vue、SvelteKit、Astro 和 React——也有来自 Remix 和 Angular 的实验性支持。在 9 月份接受The New Stack采访时,You 告诉我,Vite 成功的关键在于它早期使用了 ES 模块 (ESM),这是一种标准化的 JavaScript 模块系统,允许你“将 JavaScript 代码分解成不同的片段,不同的模块,你可以加载。”

 

Even You 在 ViteConf 上展示的 Vite 生态系统。

 

You 和他的公司 VoidZero 现在正在构建 Vite+,一个新的统一 JavaScript 工具链,旨在解决 JavaScript 碎片化问题。在今年的 ViteConf 活动上,You 正式推出了 Vite+,将其定位为企业开发工具包。他说它包括“你喜欢 Vite 的一切——加上你一直在用胶带粘合在一起的一切。”

 

Web 开发的十字路口

在 2025 年底,感觉我们正处于前端开发的十字路口。一方面,有一种方法可以解决 React 的复杂性难题:使用原生 Web 特性和工具,如 Astro,减轻用户的负担。虽然这确实是今年的一个趋势,但它有可能在 2026 年被我们越来越依赖 AI 工具编码所掩盖——正如所指出的,这些工具倾向于依赖 React。

 

事实是,现在的大多数开发者——包括成千上万以前不属于开发者生态系统的“vibe 程序员”——将继续由 AI 系统提供 React 代码。这使得 Web 开发社区在明年继续支持和倡导原生 Web 代码变得更加必要。

 

原文链接:

https://thenewstack.io/web-development-in-2025-ais-react-bias-vs-native-web/

研究背景

在教育信息化 2.0 行动计划的推动下,数字化学习工具逐渐融入中小学的日常教学与课后辅导中。中小学生的注意力持续时间较短,传统的刷题模式形式单一、趣味性不足,难以调动学生的学习积极性,而游戏化学习模式将学习与互动、竞赛相结合,能够有效提升学生的参与度和学习效率。
微信作为国内用户量最大的社交平台,其小程序生态日趋完善,具有无需下载安装、即用即走、开发成本低、传播便捷等特点,非常适合开发轻量化的教育类应用。同时,腾讯微信云开发技术为小程序提供了一站式的云端开发解决方案,无需开发者搭建独立的服务器和域名,降低了小程序的开发和部署门槛,为教育类小程序的快速开发提供了技术支撑。在此背景下,设计并实现一款基于微信云开发的中小学学科答题小程序,能够满足校方、教师的教学辅助需求和家长的课后辅导需求,助力中小学教育的数字化转型。

主要研究内容

(1)通过调研中小学教学和课后辅导的实际需求,结合游戏化学习理论,完成小程序的功能性和非功能性需求分析,并进行技术、经济、操作可行性分析;
(2)确定小程序的设计原则,设计基于微信云开发的系统架构,将小程序划分为前端用户模块和后台管理模块,并对各模块的功能进行详细设计;
(3)根据需求分析和总体设计,完成小程序的数据库设计,设计用户表、题库表、答题记录表、竞赛表等核心数据表的结构;
(4)选择微信小程序平台和腾讯云开发技术作为核心技术栈,完成小程序前端页面的开发、云函数的编写和后台管理功能的实现;
(5)制定详细的系统部署步骤,完成小程序的本地部署和云端发布,并设计功能测试用例,对小程序的各项功能进行测试,验证系统的稳定性和实用性;
(6)总结本次研究的成果和不足,对小程序的后续优化和功能拓展进行展望。

系统需求分析

需求分析是系统开发的基础,通过调研校方、教师、家长和学生的实际需求,明确系统的功能和性能要求,为后续的系统设计和实现提供依据。本次调研采用问卷调查和访谈相结合的方式,调研对象包括中小学教师、家长和学生,共发放问卷 300 份,回收有效问卷 286 份,访谈中小学教师 20 名、家长 30 名。

功能性需求

根据调研结果,将中小学学科答题小程序的用户分为普通用户(学生)、管理用户(教师 / 家长 / 校方管理员) 两类,不同用户的功能性需求不同,同时小程序需满足基础的系统管理需求,具体功能性需求如下:
2.1.1 普通用户(学生)需求
普通用户为中小学学生,核心需求是通过小程序进行学科知识点的练习和答题竞赛,具体需求包括:
(1)用户登录:支持通过微信授权快速登录,无需单独注册账号,登录后可查看个人信息和答题记录;
(2)题库选择:支持按照学科(数学、语文、英语等)和知识点对题库进行分类筛选,方便学生选择针对性的知识点进行练习;
(3)随机抽题:支持选择特定学科或知识点,由系统随机生成题目进行练习,抽题数量可灵活选择;
(4)答题练习:答题过程中显示题目序号、题干和答题选项,支持选择题、判断题等常见题型,答题完成后即时显示答题结果;
(5)解析详解:每道题目答题完成后,提供详细的解答和解题思路解析,帮助学生理解错题原因,巩固知识点;
(6)答题竞赛:支持参与模拟竞赛,竞赛前可查看竞赛规则(答题时间、题目数量),竞赛过程中倒计时显示,答题完成后即时显示竞赛成绩;
(7)排行榜查看:支持查看答题竞赛的积分排行榜,按积分从高到低排序,显示用户昵称、积分和排名,提升学习的竞争性;
(8)个人中心:支持查看个人答题记录(答题次数、正确率、错题集)、竞赛记录(竞赛次数、最高成绩、平均成绩),可修改个人昵称等基础信息。

系统基础需求

(1)权限管理:实现超级管理员和普通管理员的权限分离,超级管理员拥有所有操作权限,普通管理员仅拥有题库管理、答题参数设置等部分权限;
(2)数据备份与恢复:支持对题库、用户信息等核心数据进行备份,防止数据丢失;支持在数据异常时进行数据恢复;
(3)缓存清理:支持清理小程序的本地缓存,提升小程序的运行速度。

性能需求

(1)响应速度:小程序前端页面的加载时间不超过 3 秒,随机抽题、答题结果展示、排行榜查看等操作的响应时间不超过 1 秒;
(2)并发处理:支持至少 100 名用户同时参与答题竞赛,系统无卡顿、无延迟;
(3)数据处理:支持 Excel 文件批量导入题库,5000 条数据的导入时间不超过 30 秒。

技术可行性

本小程序基于微信小程序平台和腾讯微信云开发技术进行开发,相关技术均为腾讯官方推出,技术文档完善、社区支持活跃,开发门槛较低。
(1)微信小程序的开发框架提供了丰富的组件和 API,支持前端页面的快速开发,且兼容 iOS 和 Android 两大移动操作系统;
(2)微信云开发技术提供了云函数、云数据库、云存储、定时器等一站式云端服务,无需开发者搭建独立的服务器和域名,降低了后端开发的复杂度;
(3)开发所需的辅助技术如 Node.js、NPM 均为开源技术,学习资源丰富,开发者可快速掌握;
(4)微信开发者工具为小程序的开发、调试、预览、部署提供了一体化的支持,支持本地调试和真机测试,方便开发过程中的问题排查。

经济可行性

本项目的开发和部署成本较低,后期维护成本几乎为零,具有良好的经济可行性:
(1)开发成本:项目基于开源技术和腾讯免费的云开发基础配额进行开发,开发过程中无需支付软件授权费、服务器租赁费、域名注册费等费用;
(2)部署成本:微信云开发的资源配额价格低廉,基础版配额可满足中小学校方的日常使用需求,即使后续需要提升资源配额,费用也远低于传统的服务器部署;
(3)维护成本:微信云开发由腾讯官方进行维护,无需开发者进行服务器的运维、升级、安全防护等工作,节省了大量的维护人力和物力成本;
(4)使用成本:小程序对用户完全免费,用户无需支付任何费用即可使用所有功能,易于推广和使用。

系统总体设计

模块化设计原则:将系统划分为多个独立的功能模块,每个模块实现特定的功能,模块之间通过统一的接口进行交互,降低模块之间的耦合度,方便后续的功能扩展和 bug 修复;
用户体验优先原则:结合中小学生和管理员的使用习惯,进行前端界面和操作流程的设计,保证界面友好、操作简单,提升用户的使用体验;
轻量化设计原则:基于微信小程序 “即用即走” 的特性,简化前端页面的代码和资源,降低小程序的代码包大小,提升页面的加载速度;
云原生设计原则:充分利用微信云开发的技术优势,将业务逻辑、数据存储、文件存储均部署在云端,实现前后端的解耦,降低本地开发的复杂度;
权限最小化原则:针对不同的管理员角色分配最小的操作权限,超级管理员拥有所有权限,普通管理员仅拥有必要的操作权限,保证系统的数据安全;
可扩展设计原则:在系统架构和数据库设计中,预留扩展接口和字段,方便后续新增功能和扩展数据类型,适应不同用户的个性化需求。

数据库设计

本小程序采用微信云开发的云数据库进行数据存储,云数据库是一种非关系型数据库(NoSQL),以集合(Collection)为单位存储数据,每个集合包含多个文档(Document),文档采用 JSON 格式存储数据,具有灵活的结构,适合小程序的轻量化开发需求。根据系统的功能需求,设计用户集合、题库集合、答题记录集合、竞赛记录集合、管理员集合、答题参数集合、系统日志集合七个核心集合
在这里插入图片描述

前端功能实现

小程序前端是用户与系统的交互界面,采用 WXML、WXSS、JavaScript 进行开发,遵循微信小程序的页面 - 逻辑 - 配置开发模式,每个页面由.wxml(页面结构)、.wxss(页面样式)、.js(页面逻辑)、.json(页面配置)四个文件组成。前端功能实现的核心是通过微信云开发的 API 与云端进行交互,将用户的操作请求发送至云函数,接收云函数返回的处理结果,并完成页面的动态渲染。

云函数实现

云函数是本小程序的业务逻辑处理核心,基于 Node.js 开发,核心云函数为mcloud,包含用户管理、题库管理、答题处理、竞赛管理、参数设置、数据统计六大业务模块的处理逻辑。云函数的开发遵循模块化原则,将不同的业务逻辑拆分为不同的函数,通过action参数区分前端的请求类型,实现对不同请求的处理。

// 得分统计
    async statAnswer(userId) { 
        let where = {
            ANSWER_USER_ID: userId,
            ANSWER_TYPE: 1
        }
        let cnt = await AnswerModel.count(where);
        let score = await AnswerModel.sum(where, 'ANSWER_SCORE');

        let data = {
            USER_ANSWER_CNT: cnt,
            USER_ANSWER_SCORE: score
        }
        await UserModel.edit({ USER_MINI_OPENID: userId }, data);
    }

    // 每日可答题次数校验
    async isAnswerTimes(userId, cateId) {
        let dayCnt = 100;
        let setup = await setupUtil.get('answer');
        if (setup) {
            setup = dataUtil.dbForms2Obj(setup);
            dayCnt = Number(setup.daycnt);

            if (setup.open != true) {
                return '竞赛尚未开始!';
            }
        }

        let where = {
            ANSWER_CATE_ID: String(cateId),
            ANSWER_USER_ID: userId,
            ANSWER_TYPE: 1,
            ANSWER_DAY: timeUtil.time('Y-M-D')
        }
        let cnt = await AnswerModel.count(where);
        if (cnt >= dayCnt) {
            return '每日竞赛答题最多' + dayCnt + '次,请明日再来!';
        }

        return '';
    }

    async saveMyAnswer(userId,
     ) { 
     
    }

    // 随机N条记录,生成本次题库
    async genQuestion(userId, type, cateId) { 

        return { questionList: [], maxTime:10 };
    }


    async getMyAnswerList(userId, {
        search, // 搜索条件
        sortType, // 搜索菜单
        sortVal, // 搜索菜单
        orderBy, // 排序 
        page,
        size,
        isTotal = true,
        oldTotal
    }) {

        orderBy = orderBy || {
            'ANSWER_ADD_TIME': 'desc'
        };
        let fields = 'ANSWER_SCORE,ANSWER_CATE_NAME,ANSWER_TYPE,ANSWER_ADD_TIME,ANSWER_CNT,ANSWER_PER,ANSWER_SUCC_CNT,ANSWER_DURATION,ANSWER_START,ANSWER_END';

        let where = {};
        where.and = {
            ANSWER_USER_ID: userId,
            _pid: this.getProjectId() //复杂的查询在此处标注PID
        };

        if (util.isDefined(search) && search) {
            where.or = [

            ];
        } else if (sortType && util.isDefined(sortVal)) {
            // 搜索菜单
            switch (sortType) {
                case 'type': {
                    where.and.ANSWER_TYPE = Number(sortVal);
                    break;
                }
                case 'cateId': {
                    where.and.ANSWER_CATE_ID = String(sortVal);
                    break;
                }
                case 'sort': {
                    orderBy = this.fmtOrderBySort(sortVal, 'ANSWER_ADD_TIME');
                    break;
                }
            }
        }

        return await AnswerModel.getList(where, fields, orderBy, page, size, isTotal, oldTotal);
    }

git代码

点击下载

一家 AI 公司要是在很短时间里接连走了联合创始人和一批核心工程师,外界第一反应通常就一句话:完了,这肯定出事了。

 

xAI 过去一周的离职潮就是这种感觉。消息在 X 上越滚越大,最后干脆被玩成梗:有人明明从没在 xAI 上过班,也跑去发帖“我也离职了”,用跟风式的调侃把“集体出走”的说法跑偏成了大型玩梗现场。

 

马斯克没做任何解释,直接把一场 45 分钟的全员大会录像公开出来。

 

这段视频等于一次对外说明:离职到底是大家自己走,还是公司在做组织调整?xAI 现在在忙什么、谁负责什么?Grok、编程模型、视频生成、Macrohard(多智能体软件公司)这四条线接下来要怎么推进?

 

更狠的是,马斯克在视频里还抛出一个判断:到 2026 年底,AI 甚至可能不写代码了,直接生成二进制。

 

埃隆·马斯克预测,到 2026 年底,AI 将彻底绕过传统编程,不再写代码,而是直接生成二进制程序。他认为,AI 所生成的二进制文件,其效率可以超过任何编译器所能产出的结果。也就是说,未来你只需要告诉 AI:“为这个特定目标生成一个经过优化的二进制程序”,就可以直接跳过传统意义上的编程过程。

 

当前的软件开发流程是:代码 → 编译器 → 二进制 → 执行;而马斯克设想中的未来将变成:Prompt(指令)→ AI 生成的二进制 → 执行。他还表示,Grok Code 有望在 2 到 3 个月内达到业界最顶尖(state-of-the-art)水平。

 

在马斯克看来,软件开发正站在一次根本性变革的门槛上。

 

马斯克:不是离职潮,是我在裁员

 

一周之内,一家 AI 公司接连失去两位联合创始人和多名核心工程师,这很难再被当作正常的人才流动。

 

在 xAI,离职消息几乎是“扎堆”出现的,很快就不只是“谁走了”的八卦,而变成了另一个更直接的问题:这家公司还能不能稳住?

 

TechCrunch 统计显示,过去一周里,至少有 9 名工程师公开宣布离开 xAI,其中包括两位联合创始人 Jimmy Ba 和 Tony Wu。短短几天,创始团队就少了将近一半。对任何一家仍在高速扩张的公司来说,这种速度和幅度都足够让人警觉。

 

马斯克显然意识到了这一点。在离职叙事迅速发酵、并开始脱离公司控制之前,他选择了一种极不寻常的应对方式:公开一场内部全员大会。

 

一段长达 45 分钟的 all-hands meeting 视频,被直接放到了 X 上,对所有人开放。

 

而在公开视频之前,马斯克已经在内部会议上给出了他的判断。周二晚间的全员大会上,他将这轮离职定性为“阶段适配问题”,而非绩效问题。“因为我们已经发展到一定规模,我们正在重组公司结构,以便在这个规模下更高效地运作,”他说,“而事实上,在这种情况下,有些人更适合公司的早期阶段,却不太适合后期阶段。”

 

马斯克随后也在 X 上明确表示,这是一轮因组织结构调整而产生的人员分离——本质上是裁员,而非单纯的个人选择。

 

“随着公司快速成长,组织结构必须进化。这不幸地意味着需要与一些人分道扬镳。”

 

在外界看来,这一解释并未完全平息争议。xAI 在两天之内失去两位联合创始人的事实,很快引发了更多关于内部节奏与执行压力的讨论。

 

The information 则给出了另一种解读。据知情人士透露,xAI 原计划在去年年底或今年 1 月初发布Grok 4.2,但这一时间点最终被错过。“埃隆不喜欢延期,”他们写道,“当他对某个项目感到愤怒,或者高度聚焦时……就会有人出局。”

 

这一说法虽非官方表态,却在舆论场中迅速传播,也从侧面解释了为什么这场 all-hands meeting 不只是一次例行沟通,而更像是一场在压力之下,对内对外同时展开的解释与重组。

 

xAI 离职时间表(公开信息汇总)

 

2 月 6 日,Ayush Jaiswal(工程师)写道:“这是我在 xAI 的最后一周。接下来几个月我会陪伴家人,同时折腾一些 AI 相关的东西。”

 

2 月 7 日,Shayan Salehian(负责产品基础设施和模型后训练行为,曾就职于 X)写道:“我已离开 xAI,准备开启新的事业,也正式结束我在 Twitter、X 和 xAI 工作的 7 年多时光,满怀感激。”他还提到,与马斯克近距离共事让他学会了“对细节的偏执关注、近乎疯狂的紧迫感,以及从第一性原理思考问题”。

 

2 月 9 日,Simon Zhai(技术人员)写道:“今天是我在 xAI 的最后一天,非常感激这次机会。这是一段令人惊叹的旅程。”

 

2 月 9 日,Yuhuai(Tony)Wu(联合创始人、推理负责人)写道:“我今天从 xAI 辞职了。是时候开启新篇章了。这是一个充满可能性的时代:一个配备 AI 的小团队,可以移山填海,重新定义可能性。”

 

2 月 10 日,Jimmy Ba(联合创始人、研究与安全负责人)写道:“今天是我在 xAI 的最后一天。借助合适的工具,我们正迈向 100 倍生产力的时代。递归式自我改进循环很可能在未来 12 个月内上线。是时候重新校准我在宏观层面的‘梯度’了。2026 年将会疯狂,并且很可能是关乎我们物种未来、最忙碌的一年。”

 

2 月 10 日,Vahid Kazemi(机器学习博士)写道,他“几周前”就已离开 xAI,并表示:“在我看来,所有 AI 实验室都在做同样的事,这很无聊。我认为还有更大的创意空间,所以我要开始做点新的。”

 

2 月 10 日,Hang Gao(从事多模态项目,包括 Grok Imagine)写道:“我今天离开了 xAI。”他称这段经历“非常有价值”,并提到自己对 Grok Imagine 多次发布的贡献,同时称赞团队“谦逊的工匠精神和雄心勃勃的愿景”。

 

2 月 10 日,Roland Gavrilescu(去年 11 月离职创办 Nuraline)发帖称:“我离开了 xAI,正与其他离开 xAI 的人一起打造新的东西。我们在招聘 :)”

 

2 月 10 日,Chace Lee(Macrohard 创始团队成员)写道:“短暂重置一下,然后重返前沿。”(Macrohard 是 xAI 旗下的纯 AI 软件项目,目标是利用 Grok 驱动的多 agent 系统,实现软件开发、编码和运维的全自动化;其名字带有对微软的调侃意味。)

 

xAI 现在员工还是一千多人,所以短期内不太可能因为这波离职就“运转不下去”。但人走得太集中、太快,网上很容易越传越夸张:一些 X 用户甚至干脆跟着玩梗,发帖“我也离开 xAI 了”——明明他们从来没在那儿上过班。

 

这正是 xAI 随后选择 公开视频 all-hands meeting 的直接背景。

 

在这场全员大会上,马斯克反复强调了两个判断。第一,离职并非绩效问题,而是阶段适配问题。第二,在当前阶段,xAI 的唯一优先级只有一个——速度(velocity)和加速度(acceleration)。

 

如果你在某个技术领域里跑得比所有人都快,那么你最终一定会成为领导者。

 

xAI 新架构:四大团队,各自干什么?

 

马斯克在这次大会上,大概说了几件事儿。

 

首先他给 xAI 进行了一个定位:别把它当成熟公司看,毕竟这个公司才成立两年半。

 

他把 xAI 形容成“幼儿”,强调:“我们还小,但长得特别快”。对手很多都干了五年、十年甚至二十年,起步资源更好、人更多,但 xAI 硬是在短短几年里把不少关键方向做到了前排,甚至拿了“第一”。

 

然后他一口气列了几条“成绩单”:语音、图像、视频生成做到了行业领先;他还强调“预测能力”才是衡量智能的关键指标,并说 Grok 4.20 在预测任务上赢过别的模型。应用形态上,xAI 已经把 Grok 和 Imagine 这种能力整合进一个 App,还对 X 做了更激进的改造。

 

他们还有一个更野的目标:Grok-pedia 不只是“做个更好的维基百科”,而是要做成“银河百科全书”——把所有知识(包括图像、视频)都装进去,规模和准确性都要上一个数量级。

 

随后谈到离职和重组,马斯克表示这不是“崩了”,而是“公司长大了”:xAI 已经达到了一个新的规模节点。

 

他用了生命体成长的比喻:公司创业初期几十个人,大家可以随便聊,到几百人就必须有结构;再长大就得“分化出器官、长出四肢,甚至一度还会有尾巴——好在后来尾巴消失了”。所以重组是为了跑得更快。也因此会出现现实情况:有人适合早期冲锋,但不一定适合后期规模化运作。

 

最后他公布了新的组织架构,xAI 接下来就按四条线打:

第一,是 Grok Main 和语音,这是核心的 Grok 主模型;

第二,是专门面向编程的模型;

第三,是图像和视频模型,也就是 Imagine;

第四,是 MacroHard,它的目标是对整个公司级系统进行完整的数字化仿真。

 

Grok 仍然是 xAI 对外最重要的产品入口;Coding 团队则被放在了一个更加核心的位置,不只是为了“写代码”,而是为了压缩整个软件生产链路。

 

Grok 团队:一年内,Grok 装进了 200 万辆特斯拉

 

Grok 团队是 xAI 当前最核心、也最直接面向用户的一条产品线,几乎承载了外界对 xAI 的全部直观认知:聊天、语音、车载、API,以及与 X 平台的深度整合。这条线的负责人是 Aman Madaan(2024 年加入 xAI)。

 

如果只用一句话概括 Grok 团队这一年的进展,那就是:从“什么都没有”,到成为 xAI 最快落地、规模化最成功的产品线。

 

Aman 用“从零到第一”的方式概括语音线的推进速度:

 

Grok Main 和语音团队将合并为一个团队。在语音上有一个很典型的例子。2024 年 9 月,OpenAI 已经推出了高级语音模式,而当时我们什么都没有,连模型都没有。但我们是在那之后才开始的,在短短六个月里,我们从零开始、完全自研,在团队里几乎没有音频背景的情况下,做出了一个在六个月内就已经超越 OpenAI 的语音产品。

而现在,不到一年,Grok 已经部署在超过 200 万辆特斯拉汽车中,同时我们也推出了 Grok Voice Agent API。

 

一年时间里,我们从“什么都没有”变成了行业领导者。这种事情,只可能发生在像 xAI 这样的地方:小团队、极度投入、使命导向,再加上充足的算力。

 

在 Grok 主模型上,xAI 把重点从“问答”推向“Everything App”:

在聊天模型这条线上也是同样的故事。从 Grok 1.5、Grok 2 到 Grok 3,我们始终站在推理能力的最前沿。

 

我们想要走向一个不只是“问答”的世界,而是打造一个真正的“Everything App”。你可以来这里咨询法律问题、制作幻灯片、解决复杂问题,真正把事情做完。

 

我们的目标,是打造一个入口,让你可以完成所有工作,真正放大每一个人的能力,让他们完成远超个人极限的事情,而且这一切都会通过一个极其简单、自然、无缝的使用体验来实现。

 

未来几个月,知识工作者能够完成的工作量,将出现数量级提升。

编程(Coding)团队:到今年年底,你可能都不用写代码了

 

如果说 Grok 是 xAI 面向用户的“对话入口”,那 Coding 团队就是整个公司真正的执行引擎。这个团队不仅负责 xAI 内部的编码系统,更承担着一个更激进的使命:让 AI 自行写代码,并最终替代“写代码”这件事本身。

 

Coding 团队负责人 Makro 的发言,是这场 all-hands 里最容易让工程师产生情绪波动的一段。

 

按他的说法,这已经不再是“提效”,而是一条自我加速的链路:这一代 Grok Code 正在训练下一代 Grok Code。等“写代码”变成训练流程的一部分,讨论的重点就不再是工具顺不顺手,而是系统会不会沿着这条路一路跑下去。所以,编程被直接提到公司最高优先级之一。而且投入了等效“百万张 H100”的训练算力,目标是训练出世界上最强的编程模型。

 

马斯克的判断更为激进。在他看来,“写代码”本身正在显露出一种过渡形态的特征,最终只需要一句“为这个特定目标生成一个经过优化的二进制程序”,就可以直接绕过传统意义上的编程过程。

 

Makro 在会上先从“质变”讲起:模型终于从“看起来能用”变成“真的能用”:

最近这段时间,编程这件事真的发生了很大的变化。

 

以前我一直在吐槽:大家老是劝我用编程模型,我也试过,但说实话,并没有被真正说服。但最近不一样了——这些模型已经能产出相当不错、可用的代码质量了。

 

当然,你还是需要去 review、去给反馈,但已经很容易看出来,它们能把人的效率拉高很多。这已经不只是“帮你写代码”了,而是它们对你的直觉理解得比以前好太多。现在我描述一个问题的时候,只需要像跟一个已经熟悉代码库的工程师同事解释一样去说就行;而以前,你基本得像牵着一个幼儿一样,一步一步教它该怎么改。

 

而且它们不只是写代码,还可以帮你 debug 代码。现在我们会让 Grok Code 连续跑上好几个小时,来确保对训练系统这种更复杂的改动,真的能在生产环境里稳定工作。

 

Makro 也把 Grok Code 的用途描述为“生产级验证 + 递归自我改进”:

 

所以对我们来说,这已经不只是“写代码更快一点”、让工程师 10x 更高效的问题了。我们已经清楚地看到:我们正走在一条递归式自我改进的路径上——这一代 Grok Code,正在训练下一代 Grok Code。而且这条路径已经进入指数级起飞阶段,并且会继续下去。

 

正因为如此,我们在公司里全面加码编程方向,把 coding 提升为公司最高优先级之一。

 

如果你对编程感到兴奋,不管你是非常擅长训练模型,还是一名对系统设计感兴趣的底层软件工程师——这里就是你该来的地方。我们现在拥有等效百万张 H100 的训练算力,目标就是训练出世界上最强的编程模型。

 

Guodong 则表示:

 

随着时间推移,我们越来越清楚地意识到:至少在编程这个维度上,我们正走向某种“奇点”

 

真正的限制因素,可能已经不在算法或模型上了,而是在计算资源和能源:是否能运行起足够强的模型,去支持和赋能所有人。而现在,通过这次调整,我们已经是一个统一的团队;我们会在算力上取胜,我们正在赢下“太空算力”这条路。

 

所以,对每一位工程师来说——不管你现在是在写内核、写编译器,都可以想一想:这件事是否还值得你亲手去做? 也许你应该加入我们,在 coding 方向上,多少“自动化掉你自己的一部分”,让自己跑得更快。

 

说实话,这是一个非常疯狂、也非常令人兴奋的年份。真的是“活在这个时代太夸张了”。我已经能清晰地感受到 AGI 的气息——至少在编程这件事上,已经非常接近了。

 

同时,马斯克在 Coding 段补了一句极具冲击力的判断,把“写代码”本身都当成中间态:

 

对,我觉得事情会走到一个阶段——可能甚至今年年底就会到——你都不会再费劲去“写代码”了,AI 会直接把二进制给你生成出来。

 

而且 AI 生成的二进制,效率会比任何编译器做到的都更高。所以你就直接说:“给我一个针对这个具体目标的最优化二进制。” 然后你甚至连传统意义上的编码都绕过了。写代码这一步,其实只是个中间步骤,很可能到……我觉得今年年底左右,就不需要了。

 

而且我们预计,Grok Code 会在两到三个月内达到最先进水平(state of the art)。这一切发生得非常、非常快。

Imagine 团队:每天 5000 万条视频,是所有竞争对手的总和

Imagine 是 xAI 的图像与视频生成产品线,也是公司里算力消耗最大的方向之一。负责人是 Guodong,核心成员包括主攻视频方向的 Haotian,以及 Chaitu。

 

Guodong 在会上把 Imagine 的进展描述为“从零到全面铺开”的速度战:

Imagine 团队几乎是六个月前从零开始的。没有扩散模型代码,没有现成基础,但现在 Imagine 已经全面集成进我们所有产品,包括 X 应用。你现在就可以在 X 里长按图片,直接编辑,或者把图片变成视频。

 

Imagine 的增长速度极其惊人。用户现在每天生成接近 5000 万个视频,过去 30 天里生成了 60 亿张图片。作为对比,Google 最近表示他们的模型 30 天生成了 10 亿张图片,而我们是它的六倍。

Haotian 则把时间表拉到“今年年底”,强调“长视频一键生成 + 无干预”的路线。

 

随着模型能力不断扩展,我们正在构建与现实难以区分的视觉世界。到今年年底,我们很可能会拥有可以一次性生成 10 分钟、20 分钟视频的模型,而且不需要任何中途干预。你只需要给出你的想象力,其余的一切都会由模型和智能体自动完成。

 

此外,马斯克也补了一句方向性判断,把未来算力押注在“实时视频理解/生成”上:

我的预测是:未来大多数 AI 计算资源都会用在实时视频理解与实时视频生成上,而我们预计会成为这方面的领导者。这里值得再次强调:六个月前,我们在视频与图像生成、编辑方面几乎什么都没有,或者说非常弱;但在六个月内,我们就冲到了第一名。

 

而且我相信,大家会对即将发布的 Grok 4.2 模型印象非常深刻——它是一次显著提升。不过那只是我们新模型体系里的“小版本”。接下来还会有中等版本和大型版本,它们会更加智能。

 

MacroHard:AI Agent 的终极实验场

MacroHard 被定义为一个由 AI Agent 驱动、用来“模拟公司运转”的方向,目标远不止写代码:它要模拟人类使用计算机,自动运行软件和各类公司流程,甚至进一步做到对整家公司进行仿真。负责人是 Toby,核心成员包括负责执行层推进的 John M.。

 

Toby 在会上给 MacroHard 的一句话定义非常硬核:

 

MacroHard 正在构建一个完全能力齐备、数字化、实时的人类模拟器。

它能够在计算机上完成任何一个人类能完成的事情,包括使用工程和医学等领域的高级工具。未来应该会出现由 AI 完整设计的火箭发动机。

 

从某种意义上说,这是 AI 目前仍然显著弱于人类的领域之一。也正因为如此,这是最令人兴奋、最值得投入、也最有可能真正改变整个领域的方向。

John M. 则把 MacroHard 的路径拆成“CLI → GUI → 端到端编排”:

 

我们正在构建这些强推理模型,而它们将会控制我们的 CLI(命令行界面)。我们每天都在积极使用这些模型,它们给整个团队带来了巨大的生产力提升。我知道语音团队在这方面做得非常出色。

 

这也是为什么我们需要算力——我们需要大规模算力来运行这些模型,从而提升我们自己的生产力。但现实是:全球 80% 到 90%,甚至 95% 的软件世界,都有 GUI(图形界面)。这是一个非常重要的事实。要真正让人们生活更容易,我们必须开发能够在 GUI 上完成日常任务的模型。

 

所以 MacroHard 的目标,是模拟一家“输出是数字化成果”的公司。这是智能体的下一步:MacroHard 将实现跨桌面端的真正端到端编排,并将带来巨大的经济繁荣。

 

同时,马斯克把 MacroHard 的意义抬到“人类仿真”的高度:

 

MacroHard 这个项目,随着时间推移,可能会成为我们最重要的项目。

我们讨论的是:对整家人类公司进行仿真。

 

理论上完全有可能完整仿真任何一家“输出是数字化产物”的公司。这将开启一个繁荣时代,其程度可能是我们现在几乎无法想象的。

 

基础设施:xAI 真正的护城河

 

在 xAI,基础设施不是“后台部门”,而是以上所有激进判断能不能落地的前提。ML 基础设施团队负责搭建公司的训练、推理以及整套工具链系统。用他们自己的话说:站在软件工程师视角,这可能是你能做的最酷的一类系统。

 

最典型的例子发生在 Grok 3 的训练上。当时,xAI 已经拿到 10 万张 H100,硬件都交付到位,但软件并没有真正准备好。团队原本以为系统能跑,结果规模一拉到 3 万卡,现实给了一个很明确的反馈:系统跑不起来。问题不是某一个 bug,而是数据中心里的“意外”太多:交换机抖动、链路抖动、交换机宕机、GPU 频繁损坏、数值不稳定……这些都不可能提前枚举完。但目标只有一个:让 10 万张 H100 像一个整体一样工作。

 

一次训练 step 可能只有 5 秒:每 5 秒往前推一步,但这 5 秒里什么都可能发生。所以系统必须做到:意外不断出现也能自动恢复、持续推进,而不是一出问题就停下来等人来救。

 

这种问题在别的地方也很难遇到。不是工程师不够聪明,而是很少有人同时拥有这种规模的算力、以及这种密度的人才。当时整个预训练团队大约 15 人,真正负责训练系统的可能只有 7 人,但他们刻意维持了这种“人才密度”,而不是靠堆人数去堆规模,最终靠这支小团队完成了 Grok3 的训练。

 

英伟达 CEO 黄仁勋在多次采访中说过一句评价:在把 AI 算力上线这件事上,没有人比 xAI 更快。

 

随后,RL 与推理团队接力。这个团队负责在地球上、以及很快可能在太空中,大规模运行训练任务和生产推理系统,目标很直接:把系统从 10 万张芯片扩展到数百万张芯片,并且让它对已知和未知的硬件故障都具备韧性。

 

目前他们的成果都汇聚到了孟菲斯的数据中心里:xAI 已经建起了全球规模最大的 AI 训练集群之一,而且仍在扩张——第一阶段是 33 万张 GB300,接下来还将再增加 22 万张 GB300。

 

显然,想要最好的模型,必须有大规模训练算力,这一点是绝对基础。 

 

而在这场 all-hands 的最后,马斯克把这个逻辑推到了一个几乎只存在于科幻里的地方。如果地球已经装不下这些算力了,那下一步呢?答案是:月球。

 

马斯克认为,要真正理解宇宙,最终必须离开地球去探索,而这正是 SpaceX 与 xAI 合并到一起的动机:加速人类理解宇宙的未来,把意识的光延伸到群星之间。

 

从能源的角度看,他给了一个非常极端的对比:今天整个人类文明,使用的只是地球可用能量的 1% 左右。而如果人类哪怕只想用到太阳能量的百万分之一,那也是现在文明能耗的一百万倍。

 

问题在于:你在地球上,根本不可能拿到那样的能量。地球在整个太阳系里,只是一粒“极小的尘埃”。太阳占了太阳系 99.8% 的质量,如果不走出地球,你几乎不可能对太阳能量的利用产生任何实质性的提升。

 

所以在他看来,下一步不是“更大的地球数据中心”,而是“离开地球的数据中心”。先把数据中心送上地球轨道;再往后,就把制造和发射搬到月球——在月球上建工厂生产 AI 卫星,再用质量驱动器(mass driver)把它们一颗接一颗“弹射”到深空,把算力扩展到地球根本承载不了的规模。

 

参考链接:

https://www.youtube.com/watch?v=aOVnB88Cd1A

https://techcrunch.com/2026/02/11/senior-engineers-including-co-founders-exit-xai-amid-controversy/

在可观测性场景中,Elasticsearch 常受限于写入性能与高昂成本。在《可观测性方案怎么选?SelectDB vs Elasticsearch vs ClickHouse》一文中提到, 在云上日志服务中,SelectDB 相比 Elasticsearch 展现出明显的性能和成本优势。为进一步探索,本文通过基准测试对比二者表现,验证 SelectDB 在日志场景下性能与成本上的显著优势。1、基准目标和方法本次测试的目的是在可观测性场景下公平比较 SelectDB 和 Elasticsearch 的实际性能和成本,并为用户提供参考数据。为尽可能做到真实和公平,我们设计了如下对比测试:测试环境:使用 腾讯云 Elasticsearch 和 SelectDB Cloud 进行测试,未进行任何针对性调优。测试数据:使用 Elasticsearch 的官方性能测试集http logs,以确保测试中立性(实际更偏向 Elasticsearch)。测试内容:写入性能、查询性能、存储空间和成本的比较,这些是可观测性场景中用户最关心的指标。测试方法:第一阶段比较相同资源下的性能第二阶段比较支持相同负载所需的成本。第二阶段超越了传统的性能测试,以验证性能优势是否能在实际用户需求中转化为成本优势,而不仅仅是一种推断。2、相同资源下的性能比较在测试的第一阶段,比较相同配置下 Elasticsearch 和 SelectDB 的性能和成本。第一步:Elasticsearch 和 SelectDB 分别购买具有相同配置(48vCPU、348GB RAM)的集群,成本分别为 18.83 元/小时 和 16.95 元/小时。(1)腾讯云 Elasticsearch(48c) 费用:
图片
(2)SelectDB Cloud(48c) 费用:
图片
第二步:在 Elasticsearch 中创建索引,并在 SelectDB Cloud 中创建表。为确保公平性,两个系统使用相同的模式,包括字段类型、索引类型、共享/分片数量等。需要注意的是,Elasticsearch 的索引大致对应于 SelectDB 的表。第三步:将相同的 HTTP 日志数据集导入到 Elasticsearch 和 SelectDB Cloud。Elasticsearch 耗时 225 秒,而 SelectDB Cloud 仅需 69 秒。SelectDB Cloud 比 Elasticsearch 快 3.3 倍。第四步:分别在 Elasticsearch 和 SelectDB Cloud 中运行 HTTP 日志测试集的查询。Elasticsearch 中的首次运行(冷查询)耗时 2.049 秒,第二次运行(热启动)耗时 1.691 秒,SelectDB Cloud 中的首次运行(冷查询)耗时 0.599 秒,第二次运行(热启动)耗时 0.52 秒。SelectDB Cloud 在冷查询和热启动时的速度均比 Elasticsearch 快 3 倍以上。第五步:分别获取 Elasticsearch 和 SelectDB Cloud 的存储空间使用情况。Elasticsearch 的存储空间使用量为 12.8GB,而 SelectDB Cloud 的存储空间使用量为 3.3GB。与 Elasticsearch 相比,SelectDB Cloud 的存储空间减少了 75%。通过本次测试可以看出,在相同配置下,SelectDB Cloud 的数据导入性能比 Elasticsearch 快 3.3 倍,查询性能快 3 倍以上,存储空间减少 75%。这意味着,在相同配置下,SelectDB Cloud 的用户将比使用 Elasticsearch 的用户获得数倍的性能提升。在可观测性场景下,用户更关心相同负载和性能下能否真正降低成本。因此,接下来的测试将验证 SelectDB Cloud 的性能优势能转化为多大的实际成本优势。3、成本突破:从性能领先到真正的成本降低在测试的第二阶段,SelectDB Cloud 将缩小至其原始规模的 1/6,与使用 6 倍资源的 Elasticsearch 进行性能比较。第一步:将 SelectDB Cloud 48vCPU 的集群规模缩减至 8vCPU,成本也大幅降低至 2.93 元/小时。
图片
第二步:在仅有 8vCPU 的 SelectDB Cloud 集群中创建相同的表。第三步:将相同的 HTTP 日志数据集导入到具有 8vCPU 的 SelectDB Cloud 集群中。这一过程耗时 140 秒,速度仍比 48vCPU 的 Elasticsearch 云集群快 1.6 倍。第四步:在 8vCPU 的 SelectDB Cloud 集群中运行来自 HTTP 日志测试集的查询。第一次运行(冷查询)耗时 1.389 秒,第二次运行(热启动)耗时 1.246 秒。8 vCPU 的 SelectDB Cloud 在冷查询时比 48vCPU 的 Elasticsearch 还快 47.5%。在第五步中,获取 8vCPU SelectDB Cloud 集群中的存储空间使用情况。SelectDB Cloud 的存储空间使用量仍为 3.3GB,比 Elasticsearch 低 75%。通过本次测试可以看出,在将 SelectDB Cloud 的资源缩减至 Elasticsearch 的 1/6 后,成本仅为 2.93 元/小时,比 Elasticsearch 的 18.83 元/小时 节省了 85% 的费用。尽管成本大幅降低,但性能仍保持显著优势:数据导入性能快 1.6 倍,冷查询性能快 47.5%,存储空间减少 75%。这意味着,对于从 Elasticsearch 切换到 SelectDB Cloud 以支持相同负载的用户来说,SelectDB Cloud 将实现实打实的 83% 成本降低,并提供更好的性能。4、为什么 SelectDB 能如此显著地降低成本SelectDB Cloud 出色的性能和成本优势得益于针对可观测性场景进行的广泛优化。SelectDB 针对日志场景优化倒排索引降低空间占用,数据和索引均采用列式存储,并使用 ZSTD 压缩算法,实现了高压缩率,可大幅减少存储空间。此外,SelectDB 将所有数据存储在低成本的对象存储中,热数据在 SSD 等本地磁盘上进行缓存和加速,利用可观测性数据冷热分层的特点降低存储空间单价。这些特性使 SelectDB 的存储成本比 Elasticsearch 降低了接近一个数量级。 SelectDB 采用存储与计算分离的架构。在写入数据时,计算层仅存在一次计算消耗,避免了 Elasticsearch 存储与计算一体化架构所需的多副本。此外,SelectDB 为日志和追踪等时间序列数据设计了时间序列压缩策略,将后台数据合并的写入放大从 3 降低到 1,大幅节省计算和 IO 资源消耗。SelectDB 专为实时分析而设计,这意味着它支持高性能聚合操作,这些操作常用于可观测性领域。在搜索查询方面,SelectDB 以一种针对日志搜索和topn查询(如SELECT * FROM log WHERE message MATCH 'error' ORDER BY time DESC LIMIT 100)进行优化的方式实现了倒排索引。结果是,SelectDB 在搜索查询方面速度快 2 倍,在聚合查询方面速度快 10 倍。结论在 HTTP 日志基准工作负载下,SelectDB Cloud 与 Elasticsearch 相比实现了 83%的成本降低。在实际生产环境中,许多用户已经在 PB 规模下用 SelectDB 或 Apache Doris 取代了 Elasticsearch,实现了显著的成本节约。您可以阅读来自网易、MiniMax、领创集团、中信信用卡中心的用户故事来了解更多。我们建议您根据实际业务场景设计测试,亲自验证 SelectDB 在成本与性能上的表现。欢迎申请 SelectDB Cloud 试用验证。

春节快到了,想生成一些个性化的异形红包和动态红包,于是用 AI 开发了一款微信红包封面生成工具。

研究微信红包开发规范

微信红包封面设计规范

使用 AI 来开发的大致思路

开发流程

简单总结就是:用 AI 生成完整图,然后通过代码切割、抠图、自动化压缩,然后导出微信要求的素材,上传到微信红包后台通过审核即可。

部分产品截图

产品截图 1

产品截图 2

产品截图 3

产品截图 4

产品截图 5

成果

有了工具做微信红包封面就快了,最终用这个工具制作了 60 多款微信红包封面,包括 42 款普通红包封面、13 款异形红包封面、5 款动态红包封面,全部收录到我的「来财」小程序里。有需要的欢迎自取,签到或分享后使用金币可以免费兑换。

普通红包效果

普通红包 1

普通红包 2

普通红包 3

普通红包 4

普通红包 5

异形红包效果

异形红包 1

异形红包 2

异形红包 3

异形红包 4

动态红包效果

因为 V2EX 不支持显示视频,请移步小程序看效果。

领取方式

来财小程序二维码

提醒:小程序第 2 个菜单里签到或分享后可获得金币,使用金币兑换即可,动态红包效果很好,推荐使用。

阿里云函数计算 AgentRun 正式推出全新 知识库功能,为智能体(Agent)注入更强的语义理解与上下文感知能力。通过深度集成 百炼知识库RAGFlow 知识库,AgentRun 让开发者能够轻松构建具备“知识”的智能应用,真正实现“更懂用户、更贴场景、更高效响应”。

为什么需要知识库?

在传统智能体开发中,模型往往依赖通用训练数据,缺乏对特定业务、私有文档或实时信息的理解能力。这导致其在面对专业领域问题、企业内部知识或个性化需求时表现受限。

AgentRun 的知识库功能正是为解决这一痛点而生——它将外部知识源无缝接入智能体运行流程,通过 检索增强生成(RAG) 技术,让智能体在回答问题、执行任务时,能动态调用相关知识,大幅提升准确性、专业性与可信度。

双引擎支持:百炼 + RAGFlow,覆盖多元知识形态

百炼知识库绑定

函数计算AgentRun可以绑定您账号下已经创建好的阿里云百炼知识库

进入到创建页面,输入知识库名称、描述,选择知识库类型为“百炼”,可以多选绑定您账号下已经在阿里云百炼控制台创建好的多个知识库。填写检索配置后,点击创建知识库,即可将您的阿里云百炼知识库绑定至AgentRun平台。

RAGFlow知识库绑定

函数计算AgentRun可以绑定您账号下已经创建好的RAGFlow知识库。如果您没有RAGFlow知识库,可以点击此链接,一键在SAE上创建RAGFlow。

进入到创建页面,输入知识库名称、描述,选择知识库类型为“RAGFlow”,填写您已部署的RAGFlow的BaseURL、Dataset IDs和API-KEY(将其保存在凭证中)。填写检索配置后,点击创建知识库,即可将您自建的RAGFlow知识库绑定至AgentRun平台。

RAGFlow知识库详细配置获取方式,可参考此文档

三大集成方式,灵活适配各类开发场景

函数计算AgentRun 知识库功能支持快速创建集成、代码集成和MCP集成三种方式,满足不同技术栈和开发习惯。

快速创建Agent集成知识库功能

对于希望快速验证想法或加速产品迭代的团队,AgentRun 提供了低代码、可视化的知识库绑定能力。开发者只需登录 AgentRun 控制台,选择已创建的百炼或 RAGFlow 知识库,将其关联到目标智能体,并配置简单的检索参数(如返回结果数量、相似度阈值等),即可完成集成——全程无需编写一行代码。

这一模式极大降低了技术门槛,让产品经理、运营人员甚至非技术背景的创新者也能参与智能体的构建与优化。无论是搭建内部知识问答机器人、客户自助服务助手,还是快速验证某个垂直领域的 AI 应用场景,都能在几分钟内完成部署并上线试用

代码集成知识库查询能力对于追求极致灵活性与控制力的开发者,AgentRun 提供了原生代码级知识库接入能力。您可以在代码逻辑中,调用AgentRun SDK的知识库检索接口,根据业务上下文动态发起检索请求,精准筛选并注入最相关的信息片段到智能体的推理流程中。您可以使用AgentRun SDK,调用以下封装的接口,进行单知识库查询或多知识库查询。

fromagentrun.knowledgebaseimportKnowledgeBase
## 获取单知识库,进行查询
knowledgebase=KnowledgeBase.get_by_name("ragflow-test")
single_kb_retrieve_result=knowledgebase.retrieve("<your-query>")
print(single_kb_retrieve_result)
## 获取多知识库,进行查询,支持跨供应商知识库类型检索
multi_kb_retrieve_result=KnowledgeBase.multi_retrieve(
    query="<your-query>",
    knowledge_base_names=["ragflow-test","<your-knowledge-base-name-2>"],
)
print(multi_kb_retrieve_result)

同样,您可以集成LangChain框架,将知识库的查询能力集成在工具或上下文中。

"""AgentRun 知识库智能体集成代码示例

使用前,请参考https://docs.agent.run/docs/tutorial/quick-start 配置好相应认证信息和环境变量

curl http://127.0.0.1:9000/openai/v1/chat/completions -X POST \
    -H "Content-Type: application/json" \
    -d '{"messages": [{"role": "user", "content": "什么是Serverless?"}], "stream": true}'
"""

import json
import os
from typing import Any

from langchain.agents import create_agent
import pydash

from agentrun import Config
from agentrun.integration.langchain import model
from agentrun.integration.langchain import knowledgebase_toolset
from agentrun.integration.langgraph.agent_converter import AgentRunConverter
from agentrun.knowledgebase import KnowledgeBase
from agentrun.server import AgentRequest, AgentRunServer
from agentrun.server.model import ServerConfig
from agentrun.utils.log import logger

# 请替换为您已经创建的 模型 名称
AGENTRUN_MODEL_SERVICE = os.getenv("AGENTRUN_MODEL_SERVICE", "<your-model-service>")
AGENTRUN_MODEL_NAME = os.getenv("AGENTRUN_MODEL_NAME", "<your-model-name>")
KNOWLEDGE_BASES = os.getenv("AGENTRUN_KNOWLEDGE_BASES", "ragflow-test").split(",")

if AGENTRUN_MODEL_NAME.startswith("<") or not AGENTRUN_MODEL_NAME:
    raise ValueError("请将 MODEL_NAME 替换为您已经创建的模型名称")

## 加载知识库工具,知识库可以以工具的方式供Agent进行调用
knowledgebase_tools = []
if KNOWLEDGE_BASES and not KNOWLEDGE_BASES[0].startswith("<"):
    knowledgebase_tools = knowledgebase_toolset(
        knowledge_base_names=KNOWLEDGE_BASES,
    )
else:
    logger.warning("KNOWLEDGE_BASES 未设置或未替换,跳过加载知识库工具。")

agent = create_agent(
    model=model(AGENTRUN_MODEL_SERVICE, model=AGENTRUN_MODEL_NAME, config=Config(timeout=180)),
    tools=[
        *knowledgebase_tools,   ## 通过工具集成知识库查询能力
    ],
    system_prompt="你是一个 AgentRun 的 AI 专家,可以通过查询知识库文档来回答用户的问题。",
)


async def invoke_agent(request: AgentRequest):
    messages = [
        {"role": msg.role, "content": msg.content}
        for msg in request.messages
    ]

    # 如果配置了知识库,查询知识库并将结果添加到上下文
    if KNOWLEDGE_BASES and not KNOWLEDGE_BASES[0].startswith("<"):
        # 获取用户最新的消息内容作为查询
        user_query = None
        for msg in reversed(request.messages):
            if msg.role == "user":
                user_query = msg.content
                break

        if user_query:
            try:
                retrieve_result = await KnowledgeBase.multi_retrieve_async(
                    query=user_query,
                    knowledge_base_names=KNOWLEDGE_BASES,
                )
                # 直接将检索结果添加到上下文
                if retrieve_result:
                    messages.append({
                        "role": "assistant",
                        "content": json.dumps(retrieve_result, ensure_ascii=False),
                    })
            except Exception as e:
                logger.warning(f"知识库检索失败: {e}")

    input: Any = {"messages": messages}

    converter = AgentRunConverter()
    if request.stream:

        async def async_generator():
            async for event in agent.astream(input, stream_mode="updates"):
                for item in converter.convert(event):
                    yield item

        return async_generator()
    else:
        result = await agent.ainvoke(input)
        return pydash.get(result, "messages[-1].content", "")


AgentRunServer(
    invoke_agent=invoke_agent,
    config=ServerConfig(
        cors_origins=[
            "*"
        ]
    ),
).start()
注意⚠️:如果您选择了RAGFlow的知识库,需要确保您的Agent运行环境和RAGFlow的BaseURL的地址处于同一网络环境下,否则AgentRun SDK将无法调用RAGFlow的API实现查询能力。

通过代码集成,AgentRun 赋予开发者“全栈可控”的能力——既享受函数计算的弹性与免运维优势,又保留对智能体认知过程的深度掌控,真正实现“知识为我所用,逻辑由我定义”。

MCP集成:将知识库检索作为Agent的工具调用

AgentRun知识库率先实现“Agentic RAG”(智能体RAG)模式——将传统静态检索升级为动态、可编程的智能体工具调用。具体而言,用户可一键将知识库发布为MCP,使其成为大语言模型(LLM)可主动调用的工具之一。在此模式下,LLM不再被动接收上下文,而是具备“工具使用能力”,在推理过程中自主判断何时调用RAG、数据库查询、库存检查等工具,并基于返回结果进行多步推理与任务分解。这种机制使RAG从单一检索功能转变为智能体工具箱中的灵活组件,与其他工具并列协作,显著提升复杂任务的处理能力。其工作方式更贴近人类“思考—行动—反思”的认知流程:模型先分析问题,制定计划,再按需调用多个工具获取信息,最终整合结果生成答案。

进入其他 >> 工具管理 >> 工具市场,可以搜索到“AgentRun知识库MCP” 工具模板,点击安装后,填写知识库名称和类型,即可将知识库的查询能力一件发布成MCP工具给大模型进行调用。

创建完毕后,点击工具详情,即可看到集成调用的工具地址:

基于MCP工具标准协议,AgentRun 支持以标准化方式对接知识库服务,实现跨平台、跨模型的上下文注入能力,保障架构的开放性与可扩展性。

结语:从“能回答”到“真理解”,智能体正在拥有“知识之眼”

AgentRun 知识库功能的上线,不仅是一次技术能力的升级,更标志着智能体发展迈入新阶段——从依赖通用语料的“泛化应答”,转向基于专属知识的“情境理解”。当智能体能够随时调用企业文档、行业规范、用户历史甚至实时数据,它便不再只是一个语言模型的接口,而成为一个具备领域认知、上下文记忆与决策依据的数字协作者

未来,随着知识库的持续进化——支持多模态内容、动态更新、跨源推理——AgentRun 将进一步降低构建“有知识、有逻辑、有温度”智能体的门槛。

我们相信,真正的智能,不在于模型有多大,而在于是否“懂你所需、知你所问、信你所依”。

AgentRun,正让每一个智能体,学会思考,更学会理解。

浏览网页经常遇到 Imgur 图片加载不出来的情况?
即使挂了梯子,也可能因为节点屏蔽等原因导致裂图,体验极差。

最近更新了 Links Helper (链接助手),重点增强了 图片代理功能,无需复杂配置即可完美解决这个问题。

🛠️ Links Helper:图片代理与浏览辅助

核心功能:图片代理

  • 无需梯子:通过公共代理服务中转,直连加载 Imgur 等被墙图床的图片。
  • 智能检测:自动检测当前网站 CSP (内容安全策略) 限制。例如在 GitHub 上会自动禁用代理以避免报错,并还原原始图片。
  • 自动修复:自动检测并替换裂图链接,无感体验。
  • 可定制性:支持自定义代理域名列表;支持按站点单独开关代理功能。
  • 流量节省:开启 转换为 WebP 格式 后,可显著减少流量消耗并加快加载速度。

使用方法

  1. 安装脚本/扩展


  2. 开启功能


    • 安装后打开脚本/扩展的 设置 菜单。
    • 勾选 启用将图片链接转为代理链接 (默认关闭)。
    • 推荐勾选 转换为 WebP 格式
  3. 配置规则 (重要):


    • 代理域名列表 (Proxy Domains) 中,默认包含 i.imgur.com
    • 你可以根据需要添加其他域名,例如 2libra.com

screenshot-2026-01-21-09-44-52

其他实用功能

  • 新标签页打开:智能控制链接打开方式,站外链接自动新标签页打开。
  • 文本转链接:自动识别并转换帖子中的纯文本 URL 为可点击链接。
  • 图片链接转图片:自动将原本只是 URL 的图片链接转换为直接显示的图片。

🔗 项目地址

欢迎大家试用反馈,有问题可以在 GitHub 提 Issue 或直接留言。

一、ArkUI框架概述

ArkUI是OpenHarmony生态中核心的UI渲染框架,采用声明式开发范式,支持多设备(手机、平板、PC等)多端统一开发。开发者通过ArkTS语言描述界面,框架负责组件树构建、布局测量、渲染绘制及事件处理。底层由方舟运行时引擎驱动,协同无障碍、国际化等系统能力,保障高性能与良好用户体验。

二、开发范式与执行机制

  1. 开发范式
    当前ArkUI中主流的开发范式采用ArkTS声明式范式,支持多端统一UI描述。在一些需要更高性能的场景下,可以采用Native API进行开发。
  2. 代码执行流程
    ETS源码经IDE编译生成ABC中间指令文件,打包成HAP安装包。应用启动时,原能力子系统启动对应应用进程,ArkUI子系统负责组件创建与渲染,最终由图形侧执行渲染指令,完成界面展示。
    image.png

    三、渲染核心流程与状态管理

  3. 组件树构建
    框架在运行时维护组件树的压栈与出栈,动态构建UI组件树结构。
    image.png
  4. 布局测量与渲染绘制
    父节点传递约束条件,子节点自底向上计算尺寸和位置,完成布局测量。随后根据信息发送渲染指令,执行绘制操作,生成最终界面。
    image.png
  5. 差异更新机制
    通过装饰器(如@State、@Provider)实现状态观察,观察过程识别“脏”组件,即需要更新的组件。
    ArkUI区分两类“脏”状态:
  6. 布局脏:影响尺寸和位置,需重新测量布局,以及判定影响范围。
  7. 绘制脏:仅影响样式,重绘但不重新布局。
    image.png
    状态变更触发依赖收集,精准标记相关组件为脏,在布局过程只更新需要刷新的组件,避免造成组件树的重建。

    四、ArkUI应用开发性能优化方案

    1、创建过程优化
    方案1:使用组件懒加载机制,减少创建数量,提升响应速度。在滚动过程中进行数据读取和加载,使用LazyForEach仅渲染可视区域项,避免一次性数据加载过多,解决页面加载耗时长问题,关于长列表优化可以参考长列表加载丢帧优化。
    image.png
    方案2:高负载场景分帧渲染,将本来一帧内加载的数据分成多帧加载,但是分帧渲染需要开发者计算每帧中加载多少数据,操作复杂,因此在必要的情况下才推荐使用。详请可点击查看
    image.png

2、布局过程优化
方案1:精简组件数量,使用扁平化布局组件(如RelativeContainer、Grid)替代多层Column/Row嵌套,减少中间节点数量。
image.png
方案2:利用布局边界减少布局计算
①对固定尺寸组件设置具体宽高,限制布局影响范围。
②优先使用无状态组件@Builder替代@Component,减少状态依赖。
image.png

3、更新过程优化
复用替代重建, 利用组件复用机制,减少滑动过程中组件创建、布局开销,提升帧率。
image.png

4、状态管理优化
可以采用状态管理V2进行开发,状态管理V2相对于状态管理V1优化了更新方式,由V1的对象级观察,优化为属性级观察,可以降低状态更新时带来的开销。详细内容参考:状态管理V2。

五、工具链支持与性能分析

推荐使用DevEco Studio内置工具:

  • AppAnalyzer:实现“体检-报告-修复”一体化流程,快速定位布局耗时及性能瓶颈。
  • 通过工具量化指标,结合业务场景,精准实施优化策略。
    image.png
  • ArkUI Inspector:用于可视化的展示UI组件树,分析UI的布局层次和参数。使用方法可以参考ArkUI Inspector使用说明
  • CPU Profiler:Profiler:用于在运行过程中抓取trace和调用栈对耗时点进行分析,使用方法可以参考CPU Profiler的使用指导分析的思路可以参考常用Trace的含义。

六、性能标准与实践建议

  • 帧率要求:120fps设备单帧耗时≤8ms,90fps设备单帧耗时≤12ms。
  • 响应速度:页面跳转及交互反馈延迟需低于用户感知阈值,保证流畅体验。
    实践中应结合懒加载、分帧渲染、组件复用、扁平化布局及状态管理优化等多种手段,综合提升应用性能和用户体验。

七、总结

ArkUI框架通过声明式开发范式和高效的状态管理机制,实现了灵活且高性能的UI渲染。性能优化需基于框架运行机制,结合具体业务场景,重点控制组件数量、优化更新粒度、合理利用复用与懒加载策略。借助DevEco Studio提供的丰富工具链,开发者可快速定位性能瓶颈,持续提升鸿蒙应用的流畅度和响应速度。

八、更多参考

1、界面渲染性能优化
2、AppAnalyzer

所有人【华为专家面对面01期】ArkUI框架运行原理与常见性能优化方案 

了解ArkUI渲染的基本流程,探索通过节点优化、懒加载、预加载、组件复用等技术手段,提升列表场景下应用的流畅度,打造极致流畅的界面体验。
➡️ 详情点击

不会吧,你不会现在写代码还是靠拼时长吧,不会吧?

我曾经也认为,优秀的后端工程师就是写得快、写得多。直到我发现,我把大量时间浪费在了配置环境、用Print查Bug、以及手动排查内存泄漏上。

真正的效率提升,不仅仅是手速变快了,今天分享8个彻底改变我开发逻辑的工具,它们把我的焦虑变成了生产力。

ServBay:我再也不想在本地环境上浪费一秒钟

image.png

说实话,每次接手新项目或者维护老项目,最让我头疼的不是代码逻辑,而是 Go 环境配置

以前为了跑一个老项目,我得去改 .bash_profile,去整 GOPATH,甚至因为版本冲突把本地环境搞得一团糟。如果是混合技术栈,比如还得跑个Java服务,那简直是灾难。

而 ServBay,它就是拯救我于水深火热中的。它能够了一键安装,多版本共存。我可以同时保留 Go 1.11 和最新的 Go 1.24。

现在,环境配置对我来说就是点一下鼠标的事。这种隔离且并存的能力,让我工作效率蹭蹭的。

Delve:求求大家,别再用Print调试了

曾几何时,我也是Print党。遇到Bug,就在代码里疯狂塞 fmt.Println("111")fmt.Println("here")

但在Go的高并发场景下,这种做法是一时爽,事后火葬场。Goroutine一多,控制台输出乱成一锅粥,根本看不出谁先谁后。

Delve 能够仔细剖析正在运行的程序。

不需要修改代码,直接启动调试:

dlv debug main.go

遇到死锁或者逻辑诡异的地方,打个断点,直接看内存里的变量状态。它能清晰地展示出每一个Goroutine停在哪里。自从用了Delve,我解决并发Bug的时间从半天缩短到了几分钟。

Cobra:写出让人想用的CLI工具

image.png

以前写内部脚本,我总是偷懒直接解析 os.Args。结果就是,过了一个月,连我自己都忘了参数顺序是怎样的,同事用起来更是怨声载道。

后来我强制自己用 Cobra, 它是Kubernetes都在用的库。用它写出来的工具,天生就带有规范的帮助文档(--help)和子命令结构。

看看这个架子,写出来就显得很专业:

package main

import (
        "fmt"
        "github.com/spf13/cobra"
)

func main() {
        var rootCmd = &cobra.Command{
                Use:   "deploy",
                Short: "一键部署工具",
                Run: func(cmd *cobra.Command, args []string) {
                        fmt.Println("正在执行部署逻辑...")
                },
        }
        // 哪怕只是个内部工具,也要像模像样
        rootCmd.Execute()
}

把烂脚本变成正规军,Cobra是门槛最低的选择。

GoVet:编译通过不代表逻辑正确

编译器只能告诉我们语法没错,但它不管逻辑是不是弱智。

我有一次在 if 条件里把 == 写成了 =(虽然Go通常会报错,但在某些特定构造下容易混淆),或者在循环里错误地使用了闭包变量,导致线上数据全错。

GoVet 就是为了拦截这种低级但致命的错误存在的。

go vet ./...

它专门扫描那些“看起来对,但执行起来会炸”的代码。比如 Printf 的参数类型不对,或者不可达的代码块。现在我把它做进了提交前的钩子(Pre-commit hook),不通过Vet检查的代码,根本不允许提交。

Golangci-lint:我的全自动代码洁癖管家

image.png

团队协作最怕什么?怕每个人的代码都有自己的想法。

与其在Code Review时因为“花括号换不换行”或者“变量名太短”吵架,不如直接上 Golangci-lint

它不是一个工具,它是一个聚合器,并行跑了50多个检查器。

golangci-lint run

配置好 .golangci.yml 后,它就是就是一个无情的检查机器。未使用的变量、过高的圈复杂度、拼写错误,它全能抓出来。它让Code Review回归到了关注业务逻辑本身,而不是纠结语法细节。

Pprof:甚至能看清内存的毛细血管

服务上线后CPU突然飙高,或者内存缓慢泄漏,这时候看日志是没用的。以前我只能靠猜,现在我靠 Pprof

只需要在代码里加一行副作用引入:

import _ "net/http/pprof"

然后启动个HTTP服务,就能通过浏览器看到程序的X光片。

我也经常用命令行来生成火焰图:

go tool pprof -http=:8080 http://localhost:6060/debug/pprof/profile

哪一行代码占用了最多的CPU,哪个对象在这个瞬间分配了最多的内存,一目了然。不夸张地说,Pprof 给了我一种“上帝视角”。

Godotenv:别把秘密写在代码里

有些初级事故是因为把数据库密码或者AWS Key直接硬编码在代码里,然后推到了Git仓库。

Godotenv 是我所有项目的标配。

开发时,我只需要在本地建一个 .env 文件:

DB_SECRET=123456
DEBUG_MODE=true

代码里直接读:

import "github.com/joho/godotenv"

func init() {
    // 自动加载,从此告别硬编码
    _ = godotenv.Load() 
}

这样既方便本地调试,又彻底杜绝了泄密风险。

Gosec:上线前的最后一道防线

image.png

即便有了前面的工具,安全漏洞依然防不胜防。比如随机数生成器用得不安全,或者TLS配置太弱。

人工审查很难发现这些隐患,但 Gosec 可以。

它会扫描代码的抽象语法树(AST),专门寻找安全漏洞。

gosec ./...

它会直接甩一份报告给我,告诉我哪一行代码可能导致SQL注入,哪里的文件权限设置太宽泛。对于金融类或者对安全性要求高的项目,这是必须要跑的流程。


低效是一种选择,而你本可以拒绝

开发者的黄金时间极其有限。是用这仅有的精力去和环境配置搏斗、去肉眼查错,还是把它们交给工具,自己专注于构建复杂的系统逻辑?

这不只是工具的差异,这是职业生涯的加速度差异。

从今天开始,选两个装上,别让重复劳动毁了你的创造力。

一、背景介绍

AviatorScript 是一门寄生在 JVM(Hosted on the JVM)上的表达式语言,常用于规则计算、条件判断等场景。由于其执行环境与 Java 运行时深度绑定,一旦表达式内容可被外部控制,就可能引入严重的安全风险。

在 Jeecg-Boot 等项目中,历史上曾出现过 AviatorScript 相关漏洞。围绕这些漏洞,社区中也公开了多种利用 PoC。本文将首先分析这些历史 PoC 的利用方式及其局限性,随后引出一种仅依赖 JDK 的新利用思路


二、历史 PoC 利用方式分析

2.1 基于 Spring 生态的利用方式

目前网络上公开的 AviatorScript PoC,大多依赖 Spring 相关组件,其典型特征包括:

  • 使用 org.springframework.util.ClassUtils 获取默认 ClassLoader
  • 使用 org.springframework.util.Base64Utils 解码字节码
  • 使用 org.springframework.cglib.core.ReflectUtils.defineClass 动态定义类

这类 PoC 的核心思路是:

在 AviatorScript 表达式中动态注入并加载恶意字节码,从而触发类初始化逻辑。


2.2 BCEL 相关利用方式

另一类历史 PoC 依赖 JVM 内部的 BCEL 机制,例如:

  • com.sun.org.apache.bcel.internal.util.ClassLoader

通过将字节码编码进类名,实现“类名即字节码”的效果。

这种方式在早期 JDK 中较为流行,但存在以下问题:

  • 对 JDK 版本要求苛刻
  • 在高版本 JDK 中逐渐失效


2.3 历史 PoC 的局限性总结

综合来看,历史 PoC 普遍存在以下局限:

  1. 强依赖 Spring 或特定框架
  2. 对组件版本和 JDK 版本敏感


三、AviatorScript 的表达式调用能力

根据官方文档说明,AviatorScript 的表达式调用规则主要包括:

  1. 使用 new 关键字实例化 Java 对象
  2. 自 5.2.1 版本起,支持使用 Class.Method(args) 语法直接调用 Java 的 public static 方法

文档位置: https://www.yuque.com/boyan-avfmj/aviatorscript/

这些特性决定了 AviatorScript 天然具备与 JVM 深度交互的能力。


四、新的利用思路:仅依赖 JDK 的攻击面

AviatorScript 可以直接调用 Java 的 public static 方法。在这一特性基础上,如果能够找到 JDK 中合适的工具类,就可以进一步扩展表达式语言本身的能力边界。

通过在 JDK 中检索相关类,可以发现 sun.reflect.misc.MethodUtil 这一工具类。该类中提供了大量与反射相关的 public static 方法,其中 invoke 方法尤为关键。

image.png


MethodUtil.invoke 方法概述

MethodUtil.invoke 的核心作用是对反射调用进行封装,其逻辑上需要三个参数:

  1. Method —— 目标方法的反射对象
  2. Object —— 目标方法所属的实例对象
  3. Object[] —— 方法调用时使用的参数数组

只要能够在 AviatorScript 表达式中成功构造这三个参数,就可以通过 MethodUtil.invoke 间接调用任意实例方法。


Method 参数的构造方式

sun.reflect.misc.MethodUtil 中,除了 invoke 方法外,还提供了用于获取 Method 对象的辅助方法,例如 getMethod

image-1.png

getMethod 的作用是:

  • 指定目标类(Class 对象)
  • 指定方法名称
  • 指定方法参数类型列表

即可返回对应的 Method 实例。

由于 AviatorScript 本身支持:

  • Class.forName 获取类对象
  • 基本类型与数组的构造
  • public static 方法的直接调用

因此,在表达式执行阶段,Method 对象本身是可以被完整构造出来的。


目标对象(Object 参数)的来源

invoke 的第二个参数用于指定反射调用的目标对象实例。

在 Java 中,只要能够获取到目标类的实例,即可调用其对应的实例方法。

在 AviatorScript 环境下,实例对象的来源通常包括:

  • 已存在的单例对象
  • 通过静态工厂方法获取的实例
  • 通过 new 关键字创建的对象

这使得 MethodUtil.invoke 在表达式语言中具备了较高的灵活性。


参数数组(Object[])的构造

第三个参数为方法调用时使用的参数数组。

AviatorScript 提供了 tuple / array 等基础构造能力,可以将单个或多个参数封装为对象数组,从而满足反射调用对参数形式的要求。

image-2.png

image-3.png

至此,MethodUtil.invoke 所需的三个参数:

  1. Method
  2. 目标对象
  3. 参数数组

均可以在表达式层面完成构造。


利用思路的关键点总结

从整体利用思路来看,其核心不在于某一个具体 API,而在于以下几点:

  • AviatorScript 允许调用 JDK 的 public static 方法
  • MethodUtil 对反射调用进行了统一封装
  • 反射调用本身可以突破“只能调用静态方法”的限制
  • 整个过程不依赖任何第三方框架

这意味着,即使在不存在 Spring、BCEL 等组件的环境中,只要表达式执行上下文未对 JDK 内部工具类进行限制,仍然可能存在可被利用的攻击面。


基于以上分析我们可以构造出以下POC

use sun.reflect.misc.MethodUtil;

MethodUtil.invoke(MethodUtil.getMethod(Class.forName("java.lang.Runtime"),"exec",seq.array(java.lang.Class,Class.forName("java.lang.String"))),Runtime.getRuntime(),tuple('open /System/Applications/Calculator.app'))

image-6.png

小结

通过 sun.reflect.misc.MethodUtil,可以将 AviatorScript 的能力从:

仅能调用 Java 的 public static 方法

进一步扩展为:

在表达式执行阶段,间接调用任意实例方法,例如直接通过调用ScriptEngineManager执行JS代码,达到注入内存马等操作。

use javax.script.ScriptEngineManager;
use sun.reflect.misc.MethodUtil;
MethodUtil.invoke(MethodUtil.getMethod(Class.forName("javax.script.ScriptEngine"),"eval",seq.array(java.lang.Class,Class.forName("java.lang.String"))),MethodUtil.invoke(MethodUtil.getMethod(Class.forName("javax.script.ScriptEngineManager"),"getEngineByExtension",seq.array(java.lang.Class,Class.forName("java.lang.String"))),new ScriptEngineManager(),tuple("js")),tuple("java.lang.Runtime.getRuntime().exec(\\"open /System/Applications/Calculator.app\\");"));

image-5.png

五、实战

在本地搭建积木报表环境进行测试和验证,具体步骤如下:

生成 JS 类加载器

image-9.png

编码与拼接

  • 将生成的 JS 代码进行 Base64 编码。
  • 按照 POC(概念验证)示例,将编码后的内容拼接成完整 payload。
    image-8.png

发送 payload 与连接内存马

  • 通过 HTTP 请求将拼接好的 payload 发往测试环境。
  • 如果 payload 执行成功,可以在内存中看到远程加载的类,进一步连接内存马进行控制或交互。

image-10.png

六、意外收获

在翻阅AviatorScript文档时,发现AviatorScript提供了一个简单的文件 IO 模块实现,可以直接 require('io') 进来使用。从来达到不引入java层面类进行写入文件操作。使用这种方式写入文件在一定情况下可以绕过AviatorScript的一些安全配置。

image-4.png

let io = require('io');

let file = io.file("/tmp/aviator\_test.jsp");

io.spit(file, "Hello world\\r\\nAviator is great!");

image-7.png

一、Oracle数据库故障描述
一个Oracle数据库故障表现为ASM磁盘组掉线,ASM实例无法挂载(mount)。数据库管理员自行进行简单修复,未能成功,随后联系北亚数据恢复中心恢复数据。

二、Oracle数据库故障分析方法
北亚企安数据恢复工程师先对底层磁盘展开分析,从组成ASM磁盘组的磁盘中提取ASM元数据作进一步研究。经分析发现,ASM存储元数据已损坏,这就是diskgroup无法挂载的原因。接着,北亚企安数据恢复工程师重组ASM存储空间,导出其中的数据库文件,再对导出的文件进行检测与恢复。若检测显示数据文件完整,后续可直接用其启动数据库;若文件也损坏,则需对底层文件进行解析和恢复。

三、Oracle数据库数据恢复过程
1、按上述方法分析和提取底层数据,得到ASM元数据,借助其重组出ASM存储空间。
2、得到ASM存储空间后,使用北亚自主开发的ASM解析工具(也可用其他常见工具或自编脚本)解析ASM结构,目的是获取ASM中的数据文件。
北亚企安数据恢复—oracle数据恢复
3、对提取的Oracle数据库文件进行检测。
检测结果:
北亚企安数据恢复—oracle数据恢复
4、利用北亚自主开发的oracle数据库解析工具,解析所有数据文件中的数据记录,然后按用户需求导入到新数据库中。
北亚企安数据恢复—oracle数据恢复

四、Oracle数据库数据恢复成功
通过重组ASM存储空间、对ASM磁盘底层解析,导出恢复后的数据库文件,并进一步对这些文件进行底层解析,再按用户要求将数据导入新数据库。北亚企安数据恢复工程师抽查数据表验证恢复数据,未发现异常,随后通知用户方进行全面数据验证,结果显示数据恢复完整,本次Oracle数据库数据恢复成功。
北亚企安数据恢复—oracle数据恢复

如果你也在折腾“让大模型在本地改代码”的 Agent,八成遇到过这种崩溃瞬间:模型说要执行命令、工具跑完回传一大坨、上下文越滚越长、性能忽高忽低、最后还把权限问题搞成“你敢让我删库我就敢执行”……😅

OpenAI 的 Codex CLI(本地跨平台软件代理)把这套流程摊开讲得很直白:核心就是 agent loop(代理循环)——一个负责“用户 ↔ 模型 ↔ 工具”编排的 harness。把 loop 设计对了,Agent 才不会像一只喝了三杯咖啡的无头苍蝇。

下面就用更接地气(但依然严谨)的方式,把 Codex 的 agent loop 彻底“拆开看看”,顺便给做 Java/Python 工程化的同学一些能直接落地的套路。

image

1)所谓 Agent Loop:其实就是“反复问、反复干、反复追加”的流水线

Codex 这套 loop 的节奏非常规律:

  1. 收用户输入:把用户的话塞进要发给模型的 prompt(注意:真实 prompt 不是一段字符串,而是“多条消息/多种 item 的列表”)。
  2. 模型推理(inference):把 prompt 送到模型,让模型输出。
  3. 分支:模型输出要么是

    • 最终回复(assistant message):这回合结束;
    • 工具调用(tool call):比如让 agent 执行 ls、读文件、跑测试等。
  4. 执行工具 + 追加结果:agent 执行工具,把工具输出追加回 prompt,再请求模型下一轮推理。
  5. 循环直到停止调用工具:最后必须以 assistant message 收尾(哪怕主要产出是“本地代码改动”)。

一回合(turn)里可能有很多次“推理↔工具”迭代;多回合(multi-turn)则会把历史对话都带上,prompt 越滚越长:

image

这也解释了为什么 Agent 工程化最容易踩的坑,永远是这两座大山:

  • 性能(请求体越来越大,推理越来越贵,缓存还经常失效)
  • 上下文窗口(context window)不够用(尤其单回合工具调用特别多的时候)

2)Codex 如何“组装 prompt”:不是你以为的一段文本,而是一串分角色的 item

Codex CLI 用的是 Responses API,而不是让用户直接手搓 prompt。用户提交的 JSON 里最关键的三块是:

  • instructions:系统/开发者指令(Codex 既支持用户配置,也有模型内置 base instructions)
  • tools:可调用的工具定义列表(Codex 内置 shell、plan 等,也可接 MCP 工具,甚至用 web_search)
  • input:多条 item 的数组(消息、文件、图片、推理结果、工具调用/输出等都在这里)

Codex 会先往 input 里插入一堆“铺垫项”,再追加用户的真实提问。典型的插入顺序包含:

  • developer 消息:权限/沙箱说明(只约束 Codex 自带的 shell 工具)
  • developer 消息:用户自定义 developer_instructions(可选)
  • user 消息:用户指令聚合(可选)(例如 AGENTS.md/AGENTS.override.md、skills 等)
  • user 消息:环境上下文(cwd、shell 等)

示例(权限/沙箱说明):

<permissions instructions>
  - description of the sandbox explaining file permissions and network access
  - instructions for when to ask the user for permissions to run a shell command
  - list of folders writable by Codex, if any
</permissions instructions>

示例(环境上下文):

<environment_context>
  <cwd>/Users/mbolin/code/codex5</cwd>
  <shell>zsh</shell>
</environment_context>

而真正发到 Responses API 的 input item,是这种结构:

{
  "type": "message",
  "role": "user",
  "content": [
    {
      "type": "input_text",
      "text": "Add an architecture diagram to the README.md"
    }
  ]
}

另外,Codex 还会把工具定义塞到 tools 里,长得大概这样(里面同时包含 shell、plan、web_search、以及 MCP 工具):

[
  // Codex's default shell tool for spawning new processes locally.
  {
    "type": "function",
    "name": "shell",
    "description": "Runs a shell command and returns its output...",
    "strict": false,
    "parameters": {
      "type": "object",
      "properties": {
        "command": {"type": "array", "description": "The command to execute"},
        "workdir": {"description": "The working directory..."},
        "timeout_ms": {"description": "The timeout for the command..."}
      },
      "required": ["command"]
    }
  },

  // Codex's built-in plan tool.
  {
    "type": "function",
    "name": "update_plan",
    "description": "Updates the task plan...",
    "strict": false,
    "parameters": {
      "type": "object",
      "properties": {"plan": "...", "explanation": "..."},
      "required": ["plan"]
    }
  },

  // Web search tool provided by the Responses API.
  { "type": "web_search", "external_web_access": false },

  // MCP server tool (example).
  {
    "type": "function",
    "name": "mcp__weather__get-forecast",
    "description": "Get weather alerts for a US state",
    "strict": false,
    "parameters": {
      "type": "object",
      "properties": {"latitude": {}, "longitude": {}},
      "required": ["latitude", "longitude"]
    }
  }
]

Codex 文章里还有几张“prompt 快照”的图,直观看出服务器会把 system、tools、instructions、input 组装成最终 prompt:

image

3)流式推理 + 工具回填:SSE 事件才是“真实对话记录”

Codex 发起一次推理,Responses API 会用 SSE(Server-Sent Events)流式返回事件;这些事件不仅用来 UI 实时输出,还会被 Codex 转成内部对象,并追加回 input,供下一轮推理继续使用。

示例(SSE 事件流片段):

data: {"type":"response.reasoning_summary_text.delta","delta":"ah ", ...}
data: {"type":"response.reasoning_summary_text.delta","delta":"ha!", ...}
data: {"type":"response.reasoning_summary_text.done", "item_id":...}
data: {"type":"response.output_item.added", "item":{...}}
data: {"type":"response.output_text.delta", "delta":"forty-", ...}
data: {"type":"response.output_text.delta", "delta":"two!", ...}
data: {"type":"response.completed","response":{...}}

如果模型输出了 function_call,Codex 执行工具后会把 推理摘要、函数调用、函数输出 一股脑追加回下一次请求的 input,示例:

[
  /* ... original items ... */
  {
    "type": "reasoning",
    "summary": [
      {"type": "summary_text", "text": "**Adding an architecture diagram for README.md**\n\nI need to..."}
    ],
    "encrypted_content": "gAAAAABpaDWNMxMeLw..."
  },
  {
    "type": "function_call",
    "name": "shell",
    "arguments": "{\"command\":\"cat README.md\",\"workdir\":\"/Users/mbolin/code/codex5\"}",
    "call_id": "call_8675309..."
  },
  {
    "type": "function_call_output",
    "call_id": "call_8675309...",
    "output": "<p align=\"center\"><code>npm i -g @openai/codex</code>..."
  }
]

对应的第二张快照图:

image

当模型终于输出 assistant message(不再请求工具)时,这个 turn 才算结束:

data: {"type":"response.output_text.done","text":"I added a diagram to explain...", ...}
data: {"type":"response.completed","response":{...}}

用户再发一句话,就进入下一 turn:需要把上一次 assistant message 和本次 user message 一起追加进去:

[
  /* ... all items from the last request ... */
  {
    "type": "message",
    "role": "assistant",
    "content": [{ "type": "output_text", "text": "I added a diagram to explain the client/server architecture." }]
  },
  {
    "type": "message",
    "role": "user",
    "content": [{ "type": "input_text", "text": "That's not bad, but the diagram is missing the bike shed." }]
  }
]

第三张快照图更能说明:这玩意儿会一直长一直长……

image

4)性能:请求体“看似二次方”,但缓存命中能救命

很多同学看到“每次把所有历史 input 都带上”第一反应:这不就是网络传输二次方增长吗? 没错。

Responses API 支持 previous_response_id 来减少重复传输但Codex 当前选择不用它,主要为了两点:

  • 保持请求无状态:对 API 提供方更友好。
  • 支持 ZDR(Zero Data Retention):不在服务端存历史数据,避免与“零数据保留”冲突;同时 reasoning 的 encrypted_content 允许服务端解密以保留“模型理解”,但不持久化用户数据本身。

真正的性能关键在于:prompt caching。缓存命中要求非常苛刻:必须是精确的前缀匹配。因此缓存命中要求非常苛刻:必须是精确的前缀匹配。因此) Codex 特别强调“旧 prompt 是新 prompt 的 exact prefix”,这不是强迫症,是省钱省到骨子里了😂。

哪些变化会导致 cache miss?

  • 中途改 tools(甚至工具顺序不稳定都会炸)
  • model(模型内置指令变了)
  • 改沙箱配置、审批策略、cwd 等

Codex 的一个经典教训:早期接入 MCP 工具时,因为 工具枚举顺序不一致 导致缓存频繁失效(工具数量一多,直接“性能心电图”📉)。

为了尽量保住前缀,Codex 对“中途配置变更”的处理是:追加新消息,而不是修改旧消息:

  • 沙箱配置/审批模式变化:追加新的 developer <permissions instructions>
  • cwd 变化:追加新的 user <environment_context>

这招非常值得抄作业:你改的是“环境状态”,但你不能动 prompt 的“历史前缀”。

5)上下文窗口:不够用怎么办?压缩(compaction)才是正解

Agent 聊着聊着就爆 context window,这事不是“会不会发生”,而是“什么时候发生”。Codex 的策略是超过阈值就 compact:把冗长的 input 替换成一个更短、但能代表历史的 item 列表,让后续推理还能“记得发生过啥”。

早期需要手动 /compact;后来 Responses API 提供了专门的 compaction endpoint:
https://platform.openai.com/docs/guides/conversation-state#co...

它会返回一组可直接替代原 input 的 items,其中包含 type=compaction 以及不透明的 encrypted_content,用于保留模型的“潜在理解”。Codex 现在会在超过 auto_compact_limit 后自动触发这件事。


6)给做 Java/Python 工程化 Agent 的“抄作业清单”✅

把 Codex 的设计拆完,可以总结出几条非常硬核、非常工程的结论:

  1. 把 prompt 当“不可变日志”来设计
    追加新事件,不修改旧事件。你改旧的,缓存就没了;你改多了,定位就疯了。
  2. 工具列表要稳定排序 + 版本可控
    工具顺序不稳定 ≈ 主动放弃缓存。生产环境别玩“每次启动动态扫描全部工具再随机排列”的刺激游戏。
  3. 权限/沙箱必须写进 prompt
    这不是文档,这是模型行为约束的一部分。尤其是 shell 这类高危工具,不写清楚“哪些目录可写、何时需要用户确认”,迟早出事故。
  4. 流式事件要落地成结构化记录
    SSE 不只是展示给用户看的“打字效果”,而是下一轮推理的输入材料。要能回放、能审计、能复现。
  5. 上下文管理要有自动化机制
    compaction 不是锦上添花,是续命针。阈值触发、摘要策略、加密理解保留,都是工程必须项。

当 Agent loop 真正做对了,你会发现“让模型写代码”不再是玄学,更像一套可控的流水线:可追溯、可审计、可缓存、可压缩、可扩展

而 Codex 把这套“写代码的 AI 代理”最核心的一环——loop——摊开讲清楚了:所谓智能体,很多时候并不是模型多聪明,而是 harness 多靠谱。

(Codex 开源仓库: https://github.com/openai/codex


喜欢就奖励一个“👍”和“在看”呗~

image

目前暂时考虑两个:小米手环 9Pro 和剃须刀

之前没有带手表和手环的习惯,想试试睡眠监测之类的,上年纪了开始关注健康了facepalm。然后不知道能不能手环刷地铁(杭州),看了 🍠 说杭州地铁不支持,没有累计优惠。

然后先用的剃须刀刮不干净,飞利浦的,买了有好几年了,换个刀头还是买个新的呢。大佬们有推荐好用的吗?挂的干净最重要,当然也不接受太贵的,三四百左右吧

还有什么好用的小东西推荐的吗? doge_flower

今日速览

  1. happycapy:浏览器变身原生电脑,开箱即用无门槛。
  2. Revo AI Email Assistant:智能邮箱助手,自动回复邮件省时省力。
  3. Tines:安全平台打造智能工作流,自动化你的日常工作。
  4. Migma AI:AI 邮件平台一键设计,提升邮件转化率。
  5. Subscription Day² for iOS:订阅管理工具全新升级,轻松追踪付费分析。
  6. Atyla:AI 搜索引擎 SEO 工具,跟踪品牌曝光抢占先机。
  7. Doraverse's All-in-One AI for Meetings:全能会议助手,实时翻译加自动记录。
  8. Oz by Warp:云代理编排平台,并行运行数百代理加速开发。
  9. Willow for Developers:开发者语音输入神器,三倍准确率写代码。
  10. JumprAI:YouTube AI 搜索工具,描述内容直达精彩时刻。


1. happycapy

这款神器能帮你把浏览器变成一台原生计算机,由 Claude Code 驱动,让编码、设计到日常任务一站式搞定。

  • 无需设置和学习曲线,打开即用
  • 提供友好的图形界面,适合所有用户
  • 安全可靠,无风险隐患
  • 支持浏览器和手机端,随时随地工作

热度:🔺746

happycapy

访问官网 Product Hunt 详情


2. Revo AI Email Assistant

智能邮箱助手帮你自动处理邮件,连接会议、Slack 和 CRM,几秒钟搞定回复。

  • 专为 Gmail 和 Outlook 设计,快速集成
  • 自动回复邮件,减少手动搜索和打字
  • 连接外部工具,提升任务管理效率
  • 准确处理后续任务,省时省力

热度:🔺347

Revo AI Email Assistant

访问官网 Product Hunt 详情


3. Tines

在你的工作空间里构建智能助手和自动化工具,打造安全可靠的工作流程。

  • 供应商无关平台,灵活适应不同环境
  • 构建、运行和监控智能工作流
  • 集成到工作空间,减少手动操作
  • 提供可信赖的自动化解决方案

热度:🔺345

Tines

访问官网 Product Hunt 详情


4. Migma AI

让邮件重新变得吸引人,这个 AI 平台帮你设计和发送高转化率的邮件。

  • 一键连接域名,快速开始创建邮件
  • 通过 API 接口访问,灵活集成
  • 准确追踪点击率和打开率,优化效果
  • 专为邮件转化设计,提升营销效率

热度:🔺327

Migma AI

访问官网 Product Hunt 详情


5. Subscription Day² for iOS

全新设计的订阅管理工具,帮你跟踪来自多个来源的付费订阅分析。

  • 支持 Mac 和 iOS,跨平台使用
  • 改进版界面,操作更流畅
  • 分析多来源数据,全面掌握订阅情况
  • 轻松管理付费订阅,避免遗漏

热度:🔺291

Subscription Day² for iOS

访问官网 Product Hunt 详情


6. Atyla

随着 AI 搜索崛起,这款工具帮营销团队在 ChatGPT、Gemini 等引擎上跟踪和提升品牌曝光。

  • 跟踪品牌在 AI 回答中的提及频率
  • 分析竞争对手推荐,抢占市场先机
  • 专为生成引擎优化(GEO)设计
  • 将 AI 可见性转化为可量化增长渠道

热度:🔺242

Atyla

访问官网 Product Hunt 详情


7. Doraverse's All-in-One AI for Meetings

全能会议助手支持 60 多种语言实时翻译,自动生成记录和待办事项。

  • 提供实时翻译,打破语言障碍
  • 自动生成会议记录、笔记和行动项
  • 内置 AI 助手,随时提问获取信息
  • 企业级安全,无论有无机器人都可靠

热度:🔺237

Doraverse's All-in-One AI for Meetings

访问官网 Product Hunt 详情


8. Oz by Warp

云代理编排平台让你在几分钟内启动数百个代理,加速开发流程。

  • 通过 Warp、CLI 或手机快速启动代理
  • 并行运行数百个云代理,提升效率
  • 生成生产就绪的合并请求(PRs)
  • 简化云代理管理,减少手动配置

热度:🔺175

Oz by Warp

访问官网 Product Hunt 详情


9. Willow for Developers

开发者语音输入工具,准确度是内置选项的三倍,让写代码更快捷。

  • 支持 Cursor、Antigravity 等 AI IDE 语音输入
  • 文件标记提供丰富上下文,提升准确性
  • 识别技术术语和缩略语,如 SQL、API
  • 在 Mac 和 Windows 上可用,跨平台兼容

热度:🔺147

Willow for Developers

访问官网 Product Hunt 详情


10. JumprAI

在 YouTube 视频中用 AI 搜索直达任何时刻,告别拖动进度条的烦恼。

  • 语义搜索技术,理解内容含义而非仅关键词
  • 自动处理带字幕的视频,无缝集成 YouTube
  • 保护数据隐私,使用安全放心
  • 完全免费工具,轻松找到搞笑或教程时刻

热度:🔺137

JumprAI

访问官网 Product Hunt 详情

今天,我们上线并开源 GLM-5 。

学界与业界正逐渐形成一种共识,大模型从写代码、写前端,进化到写工程、完成大任务,即从“Vibe Coding”变革为“Agentic Engineering”。

GLM-5 正是这一变革的产物:在 Coding 与 Agent 能力上,取得开源 SOTA 表现,在真实编程场景的使用体感逼近 Claude Opus 4.5 ,擅长复杂系统工程与长程 Agent 任务。

在全球权威的 Artificial Analysis 榜单中,GLM-5 位居全球第四、开源第一。

更大基座,更强智能

GLM-5 全新基座为从“写代码”到“写工程”的能力演进提供了坚实基础:

  • 参数规模扩展:从 355B (激活 32B )扩展至 744B (激活 40B ),预训练数据从 23T 提升至 28.5T ,更大规模的预训练算力显著提升了模型的通用智能水平。
  • 异步强化学习:构建全新的“Slime”框架,支持更大模型规模及更复杂的强化学习任务,提升强化学习后训练流程效率;提出异步智能体强化学习算法,使模型能够持续从长程交互中学习,充分激发预训练模型的潜力。
  • 稀疏注意力机制:首次集成 DeepSeek Sparse Attention ,在维持长文本效果无损的同时,大幅降低模型部署成本,提升 Token Efficiency 。

Coding 能力:对齐 Claude Opus 4.5

GLM-5 在编程能力上实现了对 Claude Opus 4.5 的对齐,在业内公认的主流基准测试中取得开源模型 SOTA 分数。在 SWE-bench-Verified 和 Terminal Bench 2.0 中分别获得 77.856.2 的开源模型 SOTA 分数,性能超过 Gemini 3 Pro 。

2026 年,大模型需要从“会写”走到“会完成”,尤其是端到端完成大型任务。GLM-5 是一个“系统架构师”,它不仅为开发精美的 Demo 而生,更为稳定交付生产结果而生。

在内部 Claude Code 评估集合中,GLM-5 在前端、后端、长程任务等编程开发任务上显著超越 GLM-4.7 (平均增幅超过 20%),能够以极少的人工干预自主完成 Agentic 长程规划与执行、后端重构和深度调试等系统工程任务,使用体感逼近 Opus 4.5 。

Agent 能力:SOTA 级长程任务执行

GLM-5 在 Agent 能力上实现开源 SOTA ,在多个评测基准中取得开源第一:在 BrowseComp (联网检索与信息理解)、MCP-Atlas (工具调用和多步骤任务执行)和 τ²-Bench (复杂多工具场景下的规划和执行)均取得最佳表现。

在衡量模型经营能力的 Vending Bench 2 中,GLM-5 获得开源模型第一的表现。Vending Bench 2 要求模型在一年期内经营一个模拟的自动售货机业务,GLM-5 最终账户余额达到 4432 美元,经营表现接近 Claude Opus 4.5 ,展现了出色的长期规划和资源管理能力。

这些能力是 Agentic Engineering 的核心:模型不仅要能写代码、完成工程,还要能在长程任务中保持目标一致性、进行资源管理、处理多步骤依赖关系,成为真正的 Agentic Ready 基座模型。

国产芯片支持线上推理集群

GLM 系列模型受到全球开发者喜爱,在 GLM Coding Plan 全球爆量后,我们不得不启动限售活动。本次 GLM-5 的上线依托众多国产芯片有力保障了线上服务的稳定和高效。

目前,GLM-5 已完成与华为昇腾、摩尔线程、寒武纪、昆仑芯、沐曦、燧原、海光等国产算力平台的深度推理适配。通过底层算子优化与硬件加速,GLM-5 在国产芯片集群上已经实现高吞吐、低延迟的稳定运行。

Agentic Engineering 典型场景

点击或在浏览器输入:showcase.z.ai,即可查看所有案例。

开源与使用方式

即日起,GLM-5 在 Hugging Face 与 ModelScope 平台同步开源,模型权重遵循 MIT License 。

GLM-5 已经纳入 Max 用户套餐,Pro 将尽快在 5 天内支持,接下来我们将逐步扩大范围,尽力让更多用户体验并使用 GLM-5 。GLM Coding Plan 支持 Claude Code 、OpenCode 等主流开发工具。

GLM Coding Plan 同步升级 Agentic Engineering 体验:

  • 官方适配 OpenClaw:仅需简单几步即可完成配置,快速开启 Agent 工作流;
  • Pro / Max 用户限量赠送 AutoGLM-OpenClaw:支持将云端个人 AI 助手接入飞书,实现办公场景的长任务执行;
  • 新增 GLM in Excel 权益:原生适配 Excel 环境的 AI 插件,支持在侧边栏以自然语言交互,深度赋能数据处理与表格工作流( Beta 期仅 Max 用户可享套餐抵扣)。


1. 官方 API 接入

2. 在线体验

3. 开源链接

4. Agent

5. Blog