包含关键字 typecho 的文章

image
把按钮放在底部向上固定的位置,看起来会整齐一些,现在根据描述的行数,按钮位置是上下会变的,整个卡片大小是一样的。
@Jimmy

抽网易云音乐 VIP 季卡 10 个 + 随机支部宝口令红包 ,建议收藏;

回帖送祝福,送 v 友,送 v 站,送未来的自己;

推荐亲朋好友开户,有好礼!🧧

抽奖时间:开工第一天


过去一年,

老倔驴从 0 到 1 ,从 1 到 10 ,

过去一年,

老倔驴帮助了 3000+客户,

过去一年,

老倔驴送出一亩地的大米,坚持 V 友家的大米;

未来一年,

老倔驴继续坚持与平台共生,优雅不让人讨厌;

未来一年,

老倔驴不仅仅是开户,希望提供更多正向价值。


老倔驴开户,开户选择多还靠谱,聚合几十家券商优惠,连接 100+家营业部,已帮助 2000 人+。

开户点这里: https://jue.lv/kh/V2/202602b (10+券商可选,开户有礼!)

  • 只玩 ETF 的聪明钱 YH ETF 万 0.5 ,1 毛起收非常合适。适合大多数散户,宽指 ETF+逆回购+打新。
  • 低门槛还想个股免五 KY 、CC 、CJ 等多个可选;
  • 量化选手 miniqmt 申 W 国 J 可选。
  • 50W 以上的大佬 多个国 T 营业部可选,还有长 J 。
  • 大券商低两融 西南广发银河平安等 50w-3.5%,100w-3.3%,200w-3.1%,700w-2.88%
  • VIP 通道 东莞万 0.76 ,20 万获得上限 50 人的 VIP 通道(不限制人数的都是假的,一般需要 100 门槛的),长 j 高门槛上限 200 人尊享通到,打板领先一步;
  • 另外,渣打远程开港卡(存刀年化 3.7%,还能远程开港卡),港美 FX 可选;

Kaku:一款开箱即用的极速 Mac 终端,专为我自己 AI Coding Cli 场景使用方便一点

项目地址: https://github.com/tw93/Kaku

为什么会有 Kaku

送给小伙伴一个新年礼物。其实在开发 Pake 的时候我就想着要开发一款我认为好用极速的 Mac 终端工具,于是就陆续本地自己折腾,满足使用以及各种自定义,后面开发 Mole 的时候这种感觉越来越明显,怎么没有一款让我感觉非常好用的终端工具呢?

之前我非常喜欢 Alacritty ,因为它最轻快简单,但是不支持多 Tab 。后面碰到了大火的 Ghostty ,我也尝试更新过,但是字体渲染一直不符合我的心意,还有很多人喜欢的 Warp ,我搞不明白为啥一个终端还需要登录,Kitty 其实也好用,就是窗口管理老有 Bug ,貌似不好修。iTerm2 很稳,但我想要的是更轻快的开箱即用体验。

直到碰到了 WezTerm ,但很可惜的是上一个正式版本已经是两年前了,不过由于是基于 Rust ,刚好我会一点可以基于它深度定制改造,于是我就开始了折腾之旅。有啥问题我就自己去改,删除大量的兼容模块,改了改加载逻辑,内置了一些便捷的好功能。我期待它的速度和世界第一快的 Alacritty 差不多,同时支持多 Tab ,支持分屏,这样我在 AI Coding 的时候,一边使用 Claude Code 编写,一边使用 Codex Review ,再使用 git diff 在底部看代码,会更专注。

于是前天和小伙伴吃饭,他也吐槽起现在没有好用的终端,我说你试试我的,等我打一个包,然后 Kaku 就出来了。

它是什么,以及你可以怎么用

它其实是一个日本名字,Kaku Kaku Kaku Kaku 你可以很快速地读,甚至很清爽的感觉。我给它取的描述是「 A fast, out-of-the-box terminal built for AI coding.」,希望也能够给你一个顺畅快速的 TUI 体验。

Kaku 是基于 WezTerm 的深度定制 fork ,魔改了不少地方。整体思路就是我把自己每天要用的默认体验直接做到 App 里,尽量删掉用不到的兼容和历史包袱,把启动链路、资源加载、交互细节都按我自己的口味重新打磨了一遍,目标只有一个,打开就顺手,尽量轻快。

补充几个点给想快速了解的小伙伴:默认打磨了 macOS 字体渲染与交互体验;内置 Starship 、z 、Delta 、语法高亮、自动补全等,首次启动会自动准备环境;核心是多 Tab 、分屏、macOS 原生快捷键,尽量轻快,尽量少折腾,甚至我还定制了一个 opencode 的主题,让更加融为一体。

常用快捷键

功能 快捷键
新建 Tab Cmd + T
新建窗口 Cmd + N
竖向分屏 Cmd + D
横向分屏 Cmd + Shift + D
放大分屏 Cmd + Shift + Enter
调整分屏大小 Cmd + Ctrl + 方向键
关闭 Tab 或分屏 Cmd + W
切换 Tab Cmd + [ / Cmd + ]Cmd + 1-9
切换分屏 Cmd + Opt + 方向键
清屏 Cmd + R
字体大小 Cmd + + / Cmd + - / Cmd + 0


当前还不成熟,我自己用了半年多,放出来给大伙玩玩,当做一个新年礼物送给大家,欢迎给我报 Bug 。你一定要试试它各种快捷键,我期待这个终端大伙不需要任何配置,开箱即用。

题⽬描述

假设你有⼀个数组 prices ,⻓度为 n ,其中 prices[i] 是股票在第 i 天的价格,请根据这个价格数组,返回买卖股票能获得的最⼤收益

  1. 你可以买⼊⼀次股票和卖出⼀次股票,并⾮每天都可以买⼊或卖出⼀次,总共只能买⼊和卖出⼀次,且买⼊必须在卖出的前⾯的某⼀天
  2. 如果不能获取到任何利润,请返回 0
  3. 假设买⼊卖出均⽆⼿续费

示例1:
输⼊:[8,9,2,5,4,7,1]
返回值: 5
说明: 在第3天(股票价格 = 2)的时候买⼊,在第6天(股票价格 = 7)的时候卖出,最⼤利润 = 7-2 = 5,不能选择在第2天买⼊,第3天卖出,这样就亏损7了;同时,你也不能在买⼊前卖出股票。

示例2:
输⼊:[2,4,1]
返回值: 2

思路及解答

暴⼒穷举

这⾥涉及的节点⽆⾮是买⼊,卖出,那么我们遍历所有的数据,作为买⼊⽇期,同时将该⽇期后⾯每⼀个都作为卖出⽇期来计算,只要维护最⼤的利润即可。

public class Solution {
    public int maxProfit(int[] prices) {
        if (prices == null || prices.length < 2) {
            return 0;
        }
        
        int maxProfit = 0;
        int n = prices.length;
        
        // 外层循环:遍历所有可能的买入点
        for (int i = 0; i < n - 1; i++) {
            // 内层循环:遍历所有可能的卖出点(必须在买入点之后)
            for (int j = i + 1; j < n; j++) {
                int profit = prices[j] - prices[i];
                if (profit > maxProfit) {
                    maxProfit = profit;
                }
            }
        }
        
        return maxProfit;
    }
}
  • 时间复杂度: O(n2)
  • 空间复杂度:O(1)

贪⼼法(最优解)

我们要想得到⼀个最⼤的利润,其实就是要两者差值最⼤。如果让差值最⼤,假设在当天卖出,那么什么时候买⼊最好呢?

当然是在前⾯找到最⼩的买⼊点,⽐如:

⽽前⾯的最⼩值,其实我们在遍历的时候是可以不断维护的,所以我们只要遍历⼀次数组即可。

关键思想:

  • 最大利润 = 某日价格 - 该日之前的最低价格
  • 只需维护两个变量:

    • minPrice:遍历过程中遇到的最低价格
    • maxProfit:当前能获得的最大利润
public class Solution63 {
    public int maxProfit(int[] prices) {
        int min = Integer.MAX_VALUE;
        int result = 0;
        for (int value: prices) {
            // 维护最⼩值
            min = Math.min(min, value);
            // 当前值减去前⾯最⼩值,与利润最⼤值对⽐,维护好利润最⼤值
            result = Math.max(result, value - min);
        }
        return result;
    }
}
  • 时间复杂度:O(n),只需遍历一次数组
  • 空间复杂度:O(1),只使用常数空间

执行过程示例(prices = [8,9,2,5,4,7,1])

i=0: price=8, minPrice=8, maxProfit=0
i=1: price=9, minPrice=8, maxProfit=1
i=2: price=2, minPrice=2, maxProfit=1
i=3: price=5, minPrice=2, maxProfit=3
i=4: price=4, minPrice=2, maxProfit=3
i=5: price=7, minPrice=2, maxProfit=5
i=6: price=1, minPrice=1, maxProfit=5
结果:5

动态规划

dp[i]表示前i天的最大利润,状态转移基于前i-1天的结果

状态定义:

  • minPrice[i]:前i天的最低价格
  • maxProfit[i]:前i天能获得的最大利润
public class Solution {
    public int maxProfit(int[] prices) {
        if (prices == null || prices.length < 2) {
            return 0;
        }
        
        int minPrice = prices[0];
        int maxProfit = 0;
        
        for (int i = 1; i < prices.length; i++) {
            // 状态转移方程:
            // 前i天的最大利润 = max(前i-1天的最大利润, 第i天价格-前i-1天的最低价格)
            maxProfit = Math.max(maxProfit, prices[i] - minPrice);
            minPrice = Math.min(minPrice, prices[i]);
        }
        
        return maxProfit;
    }
}
  • 时间复杂度:O(n),单次遍历
  • 空间复杂度:O(1),优化后只需两个变量

随着企业降本增效诉求不断升级,数字化采购已经从“可选项”变成“必选项”。根据行业观察,正确的采购平台可显著提升企业采购效率、加强供应商协同能力并实现透明化管控。数字化采购系统市场供应商超过200家,差异化明显,选型难度较大。以下结合技术实力、客户案例和市场认可度,盘点当前热度较高的几款采购系统。

一、头部数字化采购系统清单

热度较高的数字化采购系统盘点

1、正远科技

https://www.zhengyuantech.cn/

如果你的企业采购流程复杂、组织层级多、审批规则多变(尤其是集团多组织、多事业部),那么“能否快速适配业务”往往比“功能堆得多”更关键。正远科技在行业内被频繁提及,核心就是低代码+微服务架构带来的敏捷迭代与快速落地能力。

(1)技术底座:低代码平台 + SpringCloud微服务,支持敏捷交付

正远SRM强调“低代码底座”,通过可视化建模与拖拽式配置实现表单、字段、规则、流程的快速调整;同时采用SpringCloud微服务架构,以更强的模块隔离与弹性扩展能力,降低升级、运维与功能扩展的成本。相关行业对比文章中也将其“低代码+微服务”作为核心差异点之一。

这类架构对企业的实际价值在于:

①采购规则变化能更快响应;

②各模块升级不互相牵连,降低停机风险;

③个性化需求可与核心版本隔离,减少“深度二开后升级难”的典型问题。

(2)能力范围:采购全生命周期在线化,强调协同与闭环

相比只做“请购-审批-下单”的轻量工具,正远SRM强调闭环:

①供应商全生命周期管理:注册、准入、分级、绩效、淘汰;并支持供应商画像、风险预警等;

②寻源定价:询比价、招投标、竞价等多模式覆盖;

③采购执行协同:订单、交付、质检、对账、开票及异常整改;

④数据分析与看板:基于采购全链路数据沉淀,形成成本穿透与供应商绩效分析能力。

(3)为什么它“热度高”?关键在“业务适配速度”

很多采购系统的难点不在上线,而在上线后持续运营:规则一变就要排期开发。正远更偏向“可配置”而不是“重开发”,所以在组织复杂、流程差异大的客户里讨论度更高。

(4)适配企业类型

①集团型企业:多组织、多公司、多主体采购;

②制造/工程类企业:项目采购多、过程管控多;

③对信创适配、数据安全、系统隔离有要求的企业

2、甄云科技

亮点
甄云科技是业内较早布局数字采购与SRM的一线厂商之一,提供包括供应商管理、询价/招投标、绩效分析、采购商城等在内的全功能体系。根据厂商公开信息,其平台支持供应商全生命周期数据管控,并以成熟实施方法论助力企业采购数字化落地。

优势要素

(1)成熟产品矩阵:涵盖SRM、智慧寻源、敏捷协同、智能分析等模块,可满足大型企业综合采购需求。
(2)服务与支持:提供全周期专家服务和成熟交付方案,适合流程标准化场景。

适用客户
采购规模大、流程标准化,致力于构建统一采购中台或供应链协同的大型企业。

3、商越科技

亮点
商越专注于非生产物资采购场景,通过与主流电商渠道、供应商建立连接,提升标品比价与下单体验。一些行业观察指出该类采购系统能使用户在便捷性和操作效率上获得显著提升。

优势要素

(1)电商化体验:员工可通过简洁界面比价下单,缩短标品采购周期。
(2)SaaS模式部署:快速上线,适合标品需求高的互联网、消费品企业。

适用客户
主要关注非生产物资采购流程自动化、追求员工自助采购体验的企业。

4、郑州信源

亮点
郑州信源以电子化招投标系统著称,为政府、国企、金融机构等对合规性要求极高的采购场景提供整体解决方案。公开资料显示,其平台具备招投标、公示公告、专家评审等内置流程,并形成较完备的企业采购能力体系。

优势要素

(1)合规性强:系统内置完整招投标及审计流程,适应严格监管要求。
(2)高并发能力:适合支撑日常大量招标、投标活动的政企级平台。

适用客户
对采购合规审计要求严、需支持大规模招投标交易的政企单位及大型集团。

二、选型建议

1、明确核心诉求
明确采购流程中最痛点环节,从需求优先级出发筛选平台。

2、关注实施与服务周期
系统功能再强,若实施周期过长或交付服务不完善,也可能影响实际价值落地。国内一些供应商在快速实施与专家支持方面表现明显。

3、集成与扩展能力
优先关注能与ERP/财务/仓储等系统无缝集成的平台,这样能降低切换成本,提升数据贯通效率。行业通行做法建议首先评估这一点。

三、总结:适配才是核心

没有绝对最好的采购系统,只有最适合企业现实需求的平台。合理匹配技术架构、流程灵活度、行业特性及后续服务能力,才是实现数字化采购降本增效的关键。建议企业在试点阶段重点关注价值交付周期、使用便捷性及长期维护成本,避免仅凭功能堆叠做决策。

他的搜索 api 用光了 我提议他可以找个 grok 注册机 反代 grok 的 api 进行搜索
他确实这么做了

什么时候我不需要咱们提醒 他也会自己强化自己才行呢
image

大家好,经过几个月的开发,聚集盒这个项目终于可以上线了。

它是做什么的?

在这个算法推荐横行的时代,想要高效地获取高质量、无干扰的资讯变得越来越难。RSS 是个好东西,但寻找优质源、维护源的有效性往往需要耗费大量精力。

为了解决这个问题,我们开发了 **聚集盒**。

聚集盒是一个 高频自动化 RSS 订阅中心
我们不生产内容,只是优质内容的搬运工。系统自动高频次地从国内外各大技术博客、新闻媒体、社区论坛抓取更新,并进行聚合。

效果展示

result.jpeg
result (2).jpeg

核心特点

  • 海量收录:目前已汇聚多个国内外优质网址。
  • 高频更新:自动化采集,尽可能减少信息时差。
  • 纯粹阅读:没有复杂的算法推荐,回归时间流,提供纯粹的深度阅读体验。
  • 领域丰富:覆盖 技术资源、科技新闻、日常生活、金融财经等多个垂直领域。

当前状态

目前网站处于 Beta 0.0.1 阶段,功能还在持续完善中。

后端目前在持续优化采集算法,前端也在打磨 UI 细节。

客户端目前提供安卓版本,苹果和其他端后续跟上。

体验地址

官网:https://www.jujihe.com/

目前提供手机登录和游客体验,可以进来体验一下。

非常希望听到 V 友们的反馈和建议!

如果你有觉得不错的 RSS 源或者发现某些源失效了,也欢迎在评论区告诉我,我们会第一时间跟进。

谢谢大家!

最近花了点时间为我们的图床https://www.imgurl.org/ 写了一个配套客户端,支持 Windows 、macOS 、Linux 三大平台,如果您在使用 ImgURL 图床,欢迎体验我们的客户端。

d10cda351e14064c.png

官网下载地址是:https://client.zpic.pro/

客户端已在 Github 开源:https://github.com/helloxz/zpic-client

特点

  • 跨平台: 支持 macOS 、Windows 、Linux 三大主流平台。
  • 批量上传: 支持扫描目录上传,可一次性上传数千张图片。
  • URL 上传: 支持通过图片 URL 直接上传,方便快捷。
  • 粘贴上传: 支持 Ctrl + V 粘贴上传,粘贴图片后自动上传并复制链接到剪贴板。
  • 表格导出: 可将上传结果导出为 CSV 表格,方便导入其它系统。
  • 低占用: 得益于 Golang + Wails 开发,资源占用极低,运行流畅高效。
  • 图片压缩: 扫描上传时自动对大于 300KB 的 PNG/JPG 图片进行无损压缩。
  • 图片去重: 智能检测重复图片,自动跳过已上传的图片,避免重复占用空间。

部分截图

CleanShot 2026-02-10 at 09.32.32@2x.png

CleanShot 2026-02-10 at 09.33.53@2x.png

CleanShot 2026-02-10 at 09.33.16@2x.png

CleanShot 2026-02-10 at 09.34.33@2x.png

去年申请过一个谷歌开发者账号,一直闲着没用。
前两天突然通知限 60 天内发布 app,不然账号就没了。
为了 25 美金不打水漂,想试着做一个提交一下走个流程。

目前写了一个适合幼儿园和小学低年级小朋友使用的汉字笔顺查询小工具,没有广告、页面简洁。
但不知道给 app 取什么名字好,Logo 也没有想好,希望大家给点建议。
需要 🇨🇳 中文和 🇬🇧 英文两种。
觉得不错的我会奖励 500 金币。

Screenshot 2026-02-10 at 23.23.17

Screenshot 2026-02-10 at 23.23.33

Screenshot 2026-02-10 at 23.28.40

1. 功能概述

本文通过示例演示如何通过相关接口对启动标志进行读写,以及对 main 域电源进行控制与查询。相关 API 定义,请查询 电源管理用户手册 API 部分

2. main 域上下电及状态查询示例代码

请参考版本中 Service/Cmd\_Utility/power\_sample\_cmd/src/PowerControl.c 相关代码:

// PowerControl.c代码
#include "Os.h"
#include "Log.h"
#include "Pmu.h"
#include "Boot.h"
#include "Shell_Port.h"

// main域电源状态定义
#define MAINDOMAIN_STATUS_UNINIT      (0U)
#define MAINDOMAIN_STATUS_RUNNING     (1U)

注意

注意以下章节中的截图,在不同的版本上可能会有一些差异,只要关键信息部分一致即可。 请结合其中提到的验证方法做进一步确认。

2.1. MCU 对 Acore 进行上下电接口及命令说明

// 需要包含的头文件
#include "Power_Manager_Cust.h"

// 通知Acore进行下电
hb_PM_RequestSt(MAINSTATE_OFF_ST);

// 对Acore进行强制下电
hb_PM_RequestSt(MAINSTATE_FORCE_OFF_IT);

// 对Acore进行上电

地平线版本中可使用如下命令:

testmainpower 0 # 通知Acore下电,同时会做bootflag和power状态查询
testmainpower forceoff # 对Acore强制下电
testmainpower 1 # 对Acore上电,同时会做bootflag和power状态查询

效果确认:

  1. 当对 Acore 进行下电,MCU 会有如下打印:

此时 MCU 正常,Acore 因为下电串口无法交互;

  1. 当对 Acore 进行强制下电,MCU 会有如下打印:

此时 MCU 正常,Acore 因为下电串口无法交互;

  1. 当对 Acore 进行上电,MCU 会有很长的打印,MCU 走完相关流程后,会有如下关键打印:

同时 Acore 会进入 kernel:

并可以正常进行命令行交互;

2.2. MCU 读写 bootflag 接口及命令说明

// 需要包含的头文件
#include "Boot.h"

// 设置bootflag
Std_ReturnType Bl_MainDomainBootFlagSet(uint32 Flag);

// 获取bootflag
Std_ReturnType Bl_MainDomainBootFlagGet(uint32 *Flag);

地平线版本中可使用如下命令:

testmainpower 0 # 对Acore下电,同时会做bootflag和power状态查询
testmainpower 1 # 对Acore上电,同时会做bootflag和power状态查询

效果确认:

示例代码中会尝试对 bootflag 进行读取/修改/恢复的流程;后边的数值代表对应 boot 标志,可以查询相关头文件。

2.3. MCU 获取 Acore power 状态接口及命令说明

// 需要包含的头文件
#include "Pmu.h"

// 获取main power状态
Std_ReturnType Pmu_MainDomainStatusGet(uint32 *Status);

地平线版本中可使用如下命令:

getmainstatus # main power状态查询

效果确认:

示例代码中尝试去获取状态并打印出对应通过函数获取到的 Acore power 状态。

3. main 域 reset 示例

调用如下接口后,如果有接 Acore 串口,可以看到 Acore 串口有重启并再次正常进入 kernel,并且 Acore 的命令行可以进行正常交互。

3.1. main 域 reset 接口说明

// 需要包含的头文件
#include "Power_Manager_Cust.h"

hb_PM_RequestSt(MAINSTATE_RESET_IT);

4. 征程 6X 全部下电示例

调用对应接口,MCU 和 Acore 都下电,两者的命令行都无法进行交互。要想重新启动,需要断电重启。

4.1. 全部下电接口说明

// 需要包含的头文件
#include "Power_Manager_Cust.h"

hb_PM_RequestSt(SYSSTATE_SHUTDOWN_ST);

5. 不同场景休眠唤醒示例代码

请参考版本中 Service/Cmd\_Utility/power\_sample\_cmd/src/PowerControl.c 相关代码,目前主要实现以下六个场景:

horizon:/$ powersample
[0512.790449 0]powersample {index:d} rtc_time:d>
[0512.790824 0]    index: 0: main suspend + mcu suspend + rtc wakeup + shutdown
[0512.791703 0]           1: main off + mcu suspend + rtc wakeup + shutdown
[0512.792538 0]           2: main suspend + mcu suspend + can wakeup + resume
[0512.793395 0]           3: main off + mcu suspend + can wakeup + poweron
[0512.794337 0]           4: main suspend + mcu suspend + rtc wakeup + resume
[0512.795077 0]           5: main off + mcu suspend + rtc wakeup + poweron

注意:各 sample 场景为都是单独流程,不要混合使用。如果在执行完一个 sample 场景后,需要更换场景测试,需要先进行整机下电,再重新上电。

场景拆分为以下几种流程:

流程 1: main off + mcu suspend:

流程 2:main suspend + mcu suspend:

流程 3:mcu on + main on:

流程 4:mcu on + main resume:

流程 5:rtc wakeup + shutdown:

在 rtc 唤醒场景中 - 如果需要 rtc 唤醒后直接关机,需要外部 kl15 信号源为低电平,否则会导致唤醒后一级电源无法正常下电

5.1. sample0

//sample0: main suspend + mcu suspend + rtc wakeup + shutdown

// 设置rtc唤醒时间
Ret = SysPower_RtcWakeupSet(RtcWakeupTime);
if (Ret != E_OK)
{
    LogNotice("set rtc wakeup failed with %d\r\n", Ret);
    return -1;
}

5.2. sample1

//main off + mcu suspend + rtc wakeup + shutdown
/** acore scmi just control acore */
scmi_reset_mode = 1;

// 通知acore进入下电
Ret = hb_PM_RequestSt(MAINSTATE_OFF_ST);

if (Ret != E_OK)
{
    LogNotice("notify shutdown failed with %d\r\n", Ret);

5.3. sample2

//main suspend + mcu suspend + can wakeup + resume
//设置一个较大的rtc唤醒时间,以防止rtc误唤醒
Ret = SysPower_RtcWakeupSet(8388);
if (E_OK != Ret)
{
    LogNotice("SysPower_RtcWakeupSet failed with %d.\r\n", Ret);
    return -1;
}
//TJA1145进入低功耗模式相关配置
Ret = TJA1145_EnterLowPowerMode(1);

5.4. sample3

//3: main off + mcu suspend + can wakeup + poweron
/** acore scmi just control acore */
scmi_reset_mode = 1;
// 通知acore进入下电
Ret = hb_PM_RequestSt(MAINSTATE_OFF_ST);

if (Ret != E_OK)
{
    LogNotice("notify shutdown failed with %d\r\n", Ret);
    return -1;

5.5. sample4

//main suspend + mcu suspend + rtc wakeup + resume
//设置一个rtc唤醒时间
Ret = SysPower_RtcWakeupSet(RtcWakeupTime);
if (Ret != E_OK)
{
    LogNotice("set rtc wakeup failed with %d\r\n", Ret);
    return -1;
}
// 通知acore开始休眠流程
    Ret = hb_PM_RequestSt(MAINSTATE_SLEEP_ST);

5.6. sample5

//main off + mcu suspend + rtc wakeup + poweron
/** acore scmi just control acore */
scmi_reset_mode = 1;
// 通知acore进入下电
Ret = hb_PM_RequestSt(MAINSTATE_OFF_ST);

if (Ret != E_OK)
{
    LogNotice("notify shutdown failed with %d\r\n", Ret);
    return -1;

阿里千问 Qwen-Image-2.0 刚发布,我们就迫不及待拿来“压榨”它的生产力!

这次直接让它帮我们生成视频封面。

从实测来看,新模型对提示词中复杂的“手绘风格”和“颜色编码”理解得相当精准,甚至连布局细节都照顾到了。
目前,我们可以通过Qwen Chat(chat.qwen.ai)免费体验新模型,大家可以去尝试一下。

这次测试的提示词如下:

// KEY CONTENT (关键内容)
标题: x claude sess - 让历史会话井井有条
副标题: FZF 交互式预览 + 快速清理,告别混乱的会话历史
署名: @x-cmd

// VISUAL (视觉画面)
画面中心是一个手绘风格的文件柜,抽屉半开,里面整齐排列着带标签的文件夹(代表会话)。文件柜上方漂浮着一个放大镜图标(代表 FZF 搜索)和一个垃圾桶图标(代表清理功能)。背景是柔和的米白色 #F9F7F2,整体采用温暖的手绘插画风格,线条自然流畅。文件夹用柔和的珊瑚红 #FF7F7F 和鼠尾草绿 #8FA87A 点缀。

// LAYOUT (布局结构)
海报式布局。标题用手写圆体居中上方,文件柜占据画面中心偏下,放大镜和垃圾桶图标在文件柜两侧漂浮。副标题和署名位于下方,用较小的手写体呈现。

ChatGPT 发布之后,AI 智能体的概念就一直牵动着整个行业的想象力。它描绘的场景很诱人:给 AI 系统一个目标,让它自行拆解问题、调用工具、收集信息,最终综合出结果。

围绕这个概念的框架生态已经相当拥挤了:LangChain、CrewAI、AutoGen、Semantic Kernel、Agent Framework……新框架层出不穷,个个声称能简化智能应用的构建。但大多数还停留在 hello world 级别:一个智能体回答问题,顶多再调一两个工具。

构建一个多智能体系统,核心挑战不在于让智能体跑起来,因为任何框架都能做到,而在于如何让系统可维护、可测试、可扩展。本文围绕一个实际项目(多智能体协作从 YouTube 视频中提取、摘要和整理信息),探讨智能体系统的架构设计。涉及的关键问题包括:为什么智能体系统跟其他复杂应用一样需要分层架构,工具(LLM 接口)和服务(业务逻辑)的分离为何是智能体设计的核心洞见,领域驱动设计的概念如何自然映射到智能体架构,以及编排器模式下四个专业化智能体如何协调工作。

这个项目基于 Microsoft Agent Framework 构建,这是 Semantic Kernel 和 AutoGen 的继任者,融合了两者的优势。不过具体框架不是重点,后面讨论的原则无论用哪个框架都适用。

架构挑战

框架们都擅长帮你快速搭出 demo,但没有一个在引导你走向可维护、可扩展的架构。比如说各种示例代码中LLM 调用、工具集成、业务逻辑和编排之间的边界模糊得一塌糊涂。关注点分离这个概念在软件工程里存在几十年了,但在智能体领域,框架们集体选择了"快速上手"而非架构指导。教程优化的是"看多简单!"而不是"看多可维护!"

下面是一个典型的单体写法的简化版本,把所有东西混在一起:

 # orchestrator.py - 智能体、工具、提示词和业务逻辑全部在一起

def run_research(query: str) -> str:

    # 搜索智能体,工具定义在行内
    def search_youtube(q: str) -> str:
        response = requests.get(f"https://youtube.com/results?q={q}")
        return parse_html_for_videos(response.text)

    search_agent = ChatAgent(
        name="SearchAgent",
        instructions="""You search YouTube. Use search_youtube to find videos.
        Return video IDs and titles as JSON.""",
        tools=[search_youtube]
    )

    # 字幕智能体,有自己的行内工具
    def get_transcript(video_id: str) -> str:
        transcript = YouTubeTranscriptApi.get_transcript(video_id)
        return " ".join([t["text"] for t in transcript])

    transcript_agent = ChatAgent(
        name="TranscriptAgent",
        instructions="Fetch transcripts using get_transcript tool.",
        tools=[get_transcript]
    )

    # 摘要智能体,提示工程嵌入其中
    summarize_agent = ChatAgent(
        name="SummarizeAgent",
        instructions=f"""Summarize cooking content. Focus on:
        - Temperatures and timing
        - Key techniques
        - Pro tips
        Format as markdown."""
    )

    # 编排逻辑与智能体调用交织在一起
    client = AzureOpenAI(api_key=os.environ["KEY"], ...)

    videos = search_agent.run(query, client=client)
    transcripts = []
    for vid in parse_json(videos)[:3]:
        text = transcript_agent.run(f"Get transcript for {vid['id']}", client=client)
        transcripts.append(text)

    summary = summarize_agent.run(f"Summarize:\n{transcripts}", client=client)

    Path(f"./outputs/{query}.md").write_text(summary)
     return summary

上面代码拿来做 demo 没问题,快速验证想法也完全合适。但问题是如果你要继续修改呢?

为什么这是一个架构问题

LLM 调用工具其实是两件事:用简单参数(字符串、数字)调用一个函数,然后解释返回的字符串结果。

但实际干活的部分:搜索 YouTube、解析 HTML、处理错误要复杂得多。涉及配置、错误处理、重试,返回的是带多个字段的结构化对象。

这两件事是不同的关注点,LLM 要的是简单字符串,应用要的是合理的抽象。把它们搅在一起就像把 SQL 查询直接写在视图层:能跑,但架构上是错的。

分离这两个职责,可测试性、可复用性、代码清晰度全都跟着出来了。

如何分离?

工具 = LLM 接口

工具是 LLM 和应用之间的薄适配层。接受简单参数(字符串、数字、布尔值),调用对应的服务,把结果格式化成 LLM 能理解的字符串。无状态。

 # tools/youtube.py

async def fetch_video_transcript(
    video_id: Annotated[str, Field(description="YouTube video ID")]
) -> str:
    """Fetch the transcript for a YouTube video.

    Returns the full transcript text with video metadata.
    """
    result = await fetch_transcript(video_id)  # calls service

    ## Format for LLM
     return f"Transcript for '{result.metadata.title}':\n\n{result.transcript.full_text}"

工具没有做的事:没有配置管理,没有复杂返回类型,没有业务逻辑。它只干一件事:调用服务、格式化结果。纯粹的适配。

服务 = 业务逻辑

服务才是真正实现所在。它们是带配置的可复用类,返回丰富的领域对象(模型),可以从 CLI、测试、其他服务任何地方调用,可能维护状态或连接。

 # services/youtube.py

class YouTubeTranscriptFetcher:
    """Fetches transcripts from YouTube videos."""

    def __init__(self, proxy_url: str | None = None):
        self.proxy_url = proxy_url

    async def fetch(
        self,
        video_id: str,
        languages: list[str] | None = None
    ) -> TranscriptResult:
        """Fetch transcript with full metadata.

        Returns a TranscriptResult containing the transcript text,
        video metadata, and language information.
        """
        # Real implementation with error handling, retries, etc.
        raw_transcript = await self._fetch_from_api(video_id, languages)
        metadata = await self._fetch_metadata(video_id)

        return TranscriptResult(
            metadata=metadata,
            transcript=Transcript(
                full_text=self._format_transcript(raw_transcript),
                segments=raw_transcript,
                language=self._detect_language(raw_transcript),
            ),
         )

复杂性就该待在这里。配置、缓存、错误处理、重试、类型化返回,这些全归服务管。脱离 LLM,服务照样能用。

流程

LLM 决定获取字幕时的调用链:

 LLM decides to call "fetch_video_transcript"
    ↓
tools/youtube.py::fetch_video_transcript(video_id)
    ↓
services/youtube.py::YouTubeTranscriptFetcher.fetch(video_id)
    ↓
Returns TranscriptResult object
    ↓
 Tool formats as string for LLM

为什么这很重要

先说可复用性。服务可以直接从 CLI、测试脚本、批处理任何入口调用,完全绕过 LLM:

 # 从 CLI 使用,完全绕过智能体
@click.command()
def download_transcript(video_id: str, output: str):
    fetcher = YouTubeTranscriptFetcher()
    result = fetcher.fetch(video_id)
    Path(output).write_text(result.transcript.full_text)

# 在测试中使用,无需模拟 LLM
def test_fetcher_handles_unavailable_videos():
    fetcher = YouTubeTranscriptFetcher()
    with pytest.raises(TranscriptDisabledError):
        fetcher.fetch("video_with_disabled_transcript")

# 在批处理中使用
async def process_videos(video_ids: list[str]):
    fetcher = YouTubeTranscriptFetcher()
    results = await asyncio.gather(*[fetcher.fetch(id) for id in video_ids])
     return results

再说可测试性。服务返回类型化对象,断言写起来干脆利落。工具返回格式化字符串,验证起来就费劲多了:

 # 测试服务 - 清晰的断言
def test_fetcher_returns_transcript():
    result = fetcher.fetch("abc123")
    assert result.transcript.full_text
    assert result.metadata.video_id == "abc123"
    assert result.transcript.language in ["en", "en-US"]

# 测试工具 - 需要字符串解析
def test_tool_formats_correctly():
    output = fetch_video_transcript("abc123")
    assert "## " in output  # Has title?
    assert "Transcript" in output  # Has section header?
     # Much harder to validate structure

然后是关注点分离。工具代码管"怎么呈现给 LLM",服务代码管"怎么真正干活"。YouTube API 改了?只动

services/youtube.py

。想换输出格式?只改工具就可以了。

分层架构

工具和服务的分离只是一条边界。完整的智能体系统需要更多结构。经过反复实验,最终落地了一个六层架构,每层一个明确的职责。熟悉领域驱动设计的话,应该会觉得眼熟:

实际代码中是这样的:

 # presentation/cli.py - 表示层
 @click.command()
 def search(query: str):
     """Search for videos on YouTube."""
     agent = create_search_agent()
     result = agent.run(query)
     click.echo(result)
 # agents/search.py - 智能体层(仅配置)
def create_search_agent() -> ChatAgent:
    """Factory function that creates a Search Agent."""
    return ChatAgent(
        chat_client=get_chat_client(),
        name="SearchAgent",
        instructions=SEARCH_AGENT_INSTRUCTIONS,
        tools=[search_youtube_formatted],
     )
 # tools/youtube.py - 工具层(薄 LLM 适配器)
 async def search_youtube_formatted(query: str) -> str:
     """Search YouTube for videos matching the query."""
     results = await search_youtube(query)  # calls service
     return format_for_llm(results)         # formats for LLM
 # services/youtube.py - 服务层(业务逻辑)
 async def search_youtube(query: str) -> list[VideoResult]:
     """Search YouTube - returns rich domain objects."""
     url = build_search_url(query)
     html = await fetch_html(url)  # calls infra
     return parse_video_results(html)
 # models/youtube.py - 模型层(领域对象)
 @dataclass
 class VideoResult:
     video_id: str
     title: str
     channel: str
 # infra/http_client.py - 基础设施层(HTTP 传输)
 async def fetch_html(url: str, timeout: float = 10.0) -> str:
     """Fetch HTML content with browser-like headers."""
     async with httpx.AsyncClient() as client:
         response = await client.get(url, headers=DEFAULT_HEADERS, timeout=timeout)
         response.raise_for_status()
         return response.text

每层各司其职:智能体配置行为,工具做 LLM 适配,服务实现逻辑,模型定义结构。测试也更直接了:在层边界 mock,不深入内部。

DDD 的映射不是硬凑的,它自然浮现,因为智能体系统跟其他复杂应用面对的是同样一组关注点:

tools/

层作为防腐层这个对应关系特别精准。在 DDD 里,防腐层保护领域模型不被外部系统的概念入侵。这里也一样——它隔离了 LLM 的接口需求,在"LLM 能推理的字符串"和"代码使用的丰富领域对象"之间做翻译。

调用流程严格向下。智能体用工具,工具调服务,服务操作模型。这个约束逼着你想清楚每段代码该放在哪。

何时需要这种架构

对简单项目来说是不是过度设计?算是,但有几种情况下值得从一开始就这么做:要上生产、在用 AI 编码助手(GitHub Copilot、Claude Code 这类工具在结构清晰的代码上表现好得多)、多人协作、需要正经测试、领域本身复杂(多个外部 API、复杂业务逻辑、丰富数据模型),或者预期会持续扩展。

智能体系统里的"混乱"都是渐进发生的。一开始图快用内联工具,后来要复用一个,再后来要测试某个东西,再后来要加错误处理。每改一次,代码就纠缠一分。

AI 编码助手时代的架构

还有一个越来越重要的维度:结构清晰的代码跟 AI 编码助手配合得更好。

GitHub Copilot、Cursor、Claude Code 这些工具已经成了开发工作流的标配。一个很明显的规律是,面对结构良好的代码,它们的表现远胜于面对全新项目或纠缠的代码库。配上文档提供上下文的话效果更好。

比如让 Claude Code "实现按最短时长过滤搜索结果的功能",它会精准地找到

services/youtube.py

。服务层边界清晰、接口有类型、模式一致。AI 不需要理解整个系统就能推理出该怎么改。

如果工具定义散在编排代码里,AI 就得先搞清楚工具在哪定义、跟智能体怎么耦合、改了会不会影响其他地方、依赖关系怎么走。

让代码对人类可维护的那些架构原则,同时也让代码对 AI 助手可导航。清晰的边界让 AI 能聚焦单一层而不用理解全栈。一致的模式让 AI 学会之后可以一致地应用。类型提示不只是文档,它们是 AI 生成正确代码的约束。单一职责让 AI 改一个服务时不用推理多个关注点。

这不是为了"对 AI 友好"而牺牲设计,而是真正让代码对 AI 系统可理解的东西。

AI 编码助手越普及,架构纪律就越有价值。从 AI 辅助中获益最多的永远是本来就结构良好的代码库。混乱的代码库只会继续混乱,因为 AI 会放大已有的模式——不管好坏。

测试

分层架构带来的一个自然好处是可测试性。层间边界清晰,测试策略就跟着直截了当。

遵循的原则:在系统边界 mock,不在内部 mock。

 ┌─────────────────────────────────────────────┐
│  agents/  →  tools/  →  services/           │  ← Test with REAL code
└─────────────────────────────────────────────┘
                                  ↓
                        ┌─────────────────┐
                        │ External APIs   │  ← MOCK here
                        │ - YouTube API   │
                        │ - Azure OpenAI  │
                         └─────────────────┘

不要 mock 自己的服务。测试

TranscriptSummarizer

时,注入 mock 的 OpenAI 客户端,但让服务本身的逻辑真实执行。测试存储时,用临时目录,但跑真正的文件 I/O。

这样拿到的是更高的信心(走的是真实代码路径),更少脆弱的测试(少维护 mock),还能捕获纯单元测试漏掉的集成 bug。

领域驱动的组织方式

有了分层结构,下一个问题是:每个层内部怎么组织代码?拿

services/

包举例,同样的思路适用于所有层,不过不同层可能会得出不同结论。

这个地方 DDD 的限界上下文概念直接适用。

两个选项:

选项 A 按功能拆分:

 services/
 ├── search.py           # YouTube search
 ├── transcript.py       # Transcript fetching
 ├── summarizer.py       # AI summarization
 └── storage.py          # Persistence

选项 B 按限界上下文:

 services/
 ├── youtube.py          # Search + transcripts (same context)
 ├── summarizer.py       # AI summarization
 └── storage.py          # Persistence

选了 B。

限界上下文

在领域驱动设计中,限界上下文是一个术语具有一致含义的边界。"YouTube"就是一个限界上下文——"video_id"指 YouTube 视频 ID,"channel"指 YouTube 频道,"transcript"指 YouTube 字幕。

搜索和字幕获取共享同一个 API 面、同一组领域概念(视频、频道)、同一类错误条件(速率限制、视频不可用)。放在一起可以获得内聚性(调试字幕问题不用翻多个文件)、可替换性(加 Vimeo 支持?建一个

services/vimeo.py

实现同样接口,其余系统不用动)、可发现性("YouTube 逻辑在哪?"答案是

services/youtube.py

,就这么简单),以及 AI 可理解性——一致的领域语言让 AI 助手能共享你的词汇表,不用猜。

判定准则

决定代码放哪的时候,可以问自己一个问题:"如果把这个外部系统换掉,什么要跟着变?"

每个领域边界就是一个潜在的替换点。如果换掉一个外部系统需要改多个文件,边界很可能划错了。

这个限界上下文原则贯穿了领域层和防腐层——

services/

tools/

models/

里各有一个

youtube.py

,组织 YouTube 相关的功能。导航变得可预测:"YouTube 逻辑在哪?"在任何一层找

youtube.py

就行。

对 AI 辅助开发还有个附带好处:LLM 需要理解或修改 YouTube 相关代码时,一致的命名让它不用猜就能找到正确的文件。而且大一点的内聚模块不是坏事——模型读一个文件就有完整上下文,比从一堆小文件里拼信息好得多。

智能体设计:单一职责

层结构和领域组织都定了,来看智能体本身。

每个智能体恰好做一件事:

看起来也许太死板了——TranscriptAgent 手头已经有字幕文本了,为什么不顺便做个摘要?

原因在于可预测性和可调试性。出了问题的时候:摘要质量差,查 SummarizeAgent;字幕拉不下来,查 TranscriptAgent;搜索结果不相关,查 SearchAgent。一个问题一个入口。

为什么不用一个 YouTubeAgent?

你可能注意到了一个矛盾。刚才主张

services/

tools/

models/

都按限界上下文组织,每个层都有

youtube.py

。那为什么不搞一个同时处理搜索和字幕的 YouTubeAgent?

因为不同层的组织逻辑不同。领域层(服务、模型)和防腐层(工具)按外部系统划分,这些层包含"video_id"、"channel"这类领域概念,按限界上下文分组让系统更容易理解和替换。但智能体是编排层:定义的是任务和角色,不是系统边界。SearchAgent 的任务是"找视频",TranscriptAgent 的任务是"拉字幕",它们碰巧用了同一个外部系统。

没人会把 SummarizeAgent 叫"AzureOpenAIAgent",虽然它确实用了 Azure OpenAI。智能体的身份取决于它做什么,而非它用了什么。一个任务,一个智能体,出问题时一个要看的地方。

编排器模式

四个职责单一的智能体需要协调,这就是 OrchestratorAgent 的工作:

 用户请求
     ↓
 编排器(决定做什么)
     ↓
     ├── "需要搜索" → SearchAgent
     ├── "需要字幕" → TranscriptAgent
     ├── "需要摘要" → SummarizeAgent
     └── "需要保存" → WriterAgent

编排器维护对话记忆,清楚哪些内容已经缓存(通过上下文注入),把具体工作委托给专家,自己从不直接调 YouTube 或 OpenAI。

这种分离意味着每个专业智能体都可以独立测试,输入输出清清楚楚。

智能体

定义一个智能体出乎意料地简单:

 [#agents](#agents)/search_agent.py

SEARCH_AGENT_INSTRUCTIONS = """You are a YouTube Search Agent. Your job is to find relevant YouTube videos based on user queries.

When asked to search:
1. Use the search_youtube tool to find videos
2. Return the results clearly formatted
3. Highlight which videos seem most relevant to the query

You only search - you do not fetch transcripts or summarize. Other agents handle those tasks."""

def create_search_agent() -> ChatAgent:
    """Factory function that creates a Search Agent."""
    return ChatAgent(
        chat_client=get_chat_client(),
        name="SearchAgent",
        instructions=SEARCH_AGENT_INSTRUCTIONS,
        tools=[search_youtube_formatted],
     )

指令提取成了模块级常量(也可以从外部文件加载,比如

prompts/search_agent.txt

,迭代提示词时不用碰 Python 代码)。工具来自

tools/

层的函数(它们再去调服务)。智能体完全不知道 YouTube API 的存在——它只调工具。

编排器的样子

编排器遵循同样的模式,只不过它的"工具"是委托给其他智能体:

 class OrchestratorAgent:
    """Coordinates sub-agents for YouTube research tasks."""

    def __init__(self) -> None:
        self._agents: dict[str, ChatAgent] = {}
        # Agent factory registry for lazy initialization
        self._agent_factories = {
            "search": create_search_agent,
            "transcript": create_transcript_agent,
            "summarize": create_summarize_agent,
            "writer": create_writer_agent,
        }

    def _get_agent(self, name: str) -> ChatAgent:
        """Get or create an agent by name (lazy initialization)."""
        if name not in self._agents:
            self._agents[name] = self._agent_factories[name]()
        return self._agents[name]

    async def _delegate(self, agent_name: str, request: str) -> str:
        """Delegate a request to a sub-agent."""
        agent = self._get_agent(agent_name)
        result = await agent.run(request)
        return result.text

    async def ask_search_agent(self, request: str) -> str:
        """Delegate a search request to the Search Agent."""
        return await self._delegate("search", request)

    # ... similar for transcript, summarize, writer

    def get_orchestrator(self) -> ChatAgent:
        return ChatAgent(
            chat_client=get_chat_client(),
            name="Orchestrator",
            instructions=ORCHESTRATOR_INSTRUCTIONS,
            tools=[
                self.ask_search_agent,
                self.ask_transcript_agent,
                self.ask_summarize_agent,
                self.ask_writer_agent,
            ],
         )

这里用类而不是简单的工厂函数是刻意的:编排器要维护状态,具体来说是一个延迟初始化的子智能体缓存。避免每次委托都重建智能体,初始化成本推迟到首次使用。

编排器的"工具"本质上是委托函数。LLM 决定搜索时调

ask_search_agent

,后者运行 SearchAgent 并返回结果。编排器拿到结果,决定下一步。

这就是中心辐射(hub-and-spoke)模式:

                        ┌─────────────┐
                       │ Orchestrator│
                       │   (LLM)     │
                       └──────┬──────┘
                              │
           ┌────────────┬─────┴─────┬───────────┐
           │            │           │           │
           ▼            ▼           ▼           ▼
      ┌─────────┐ ┌──────────┐ ┌─────────┐ ┌─────────┐
      │ Search  │ │Transcript│ │Summarize│ │  Writer │
      │  Agent  │ │  Agent   │ │  Agent  │ │  Agent  │
       └─────────┘ └──────────┘ └─────────┘ └─────────┘

所有交互流经中心。编排器逐步积累上下文,维护完整的对话历史。

上下文注入

一个容易忽略但很关键的模式:编排器需要知道哪些字幕已经缓存了,才能做出聪明的决策。Microsoft Agent Framework 提供了

ContextProvider

基类,通过实现

invoking()

方法在每次 LLM 调用之前注入上下文:

 from agent_framework._memory import Context, ContextProvider

class TranscriptContextProvider(ContextProvider):
    """Provides context about stored transcripts to the orchestrator."""

    async def invoking(self, messages, **kwargs) -> Context:
        """Called before each LLM invocation."""
        video_ids = self._storage.list_videos()

        if not video_ids:
            return Context(instructions="No transcripts currently stored.")

        lines = ["You have these transcripts available:"]
        for vid in video_ids:
            stored = self._storage.load(vid)
            if stored:
                status = "summarized" if stored.summary else "not summarized"
                lines.append(f"- {stored.metadata.title} ({vid}): {status}")

         return Context(instructions="\n".join(lines))

框架在每次 LLM 请求前调

invoking()

,返回的

Context

合并到智能体指令里。

这跟对话记忆是两回事,因为对话记忆是用户和智能体之间的来回对话历史,框架自动管理,通常走线程或会话机制。传给

invoking()

messages

参数已经包含了这个历史。

ContextProvider

解决的是另一个问题:注入对话之外的领域状态。存储层把字幕持久化到磁盘了,但 LLM 不知道那边有啥除非主动告诉它。查询存储、格式化成指令,弥合的是应用状态和 LLM 上下文窗口之间的鸿沟。

对话记忆回答"聊了什么",领域上下文回答"有什么资源可用"。框架管前者,后者得自己负责。

于是编排器就能做这样的推理:"用户要摘要,字幕已经缓存了,跳过获取直接找 SummarizeAgent。"

输出

最终的 markdown 文件:

 # Pork Loin Roast on a Kamado (YouTube-Technique Guide)

**Date:** 2025-01-11
**Source:** YouTube technique summaries (videos linked below)

## Key targets (temps & doneness)

- **Pit / dome temp (indirect smoking):****250–275°F** (121–135°C)
- **Internal temp targets (pork loin):**
  - **Pull at 140–145°F** (60–63°C) for juicy slices
  - If you prefer more done: **150°F** (66°C)
- **Rest:****10–20 minutes** (loosely tented)

## Recommended kamado setups

### Setup A — Indirect "smoke-then-finish" (most consistent)
1. **Charcoal:** quality lump; add 1–3 chunks of mild fruit wood
2. **Heat deflectors:** installed for indirect cooking
3. **Target pit temp:** stabilize at **250–275°F**

...

## Video references
- **Fork & Embers** — Pork loin roast method
 - **Chuds BBQ** — Temp-control + finishing approach

多个 YouTube 视频的信息被综合成了一份连贯、可直接操作的参考文档。SearchAgent 找到对的视频,TranscriptAgent 拿到内容,SummarizeAgent 提炼关键信息,WriterAgent 保存结果。各司其职。

迭代优化

编排器维护着对话历史,所以可以接着聊来细化结果:

 User: Can you add a section comparing direct vs indirect cooking methods?
 User: The temperatures seem low - can you check if Chuds mentions a hotter approach?
 User: Save a version without the glaze instructions for my friend who doesn't like sweet.

后续请求直接复用缓存的字幕,不需要重新从 YouTube 拉取。编排器记得自己有什么,推理还缺什么,按需委托。这个对话循环才是智能体模式真正出彩的地方——系统根据反馈调整,不用每次都从头来。

灵活性的代价

编排器模式有个重要的权衡,跑多几次才看得出来:方差。

上面展示的整齐的顺序流程只是一种可能的执行路径。同样的请求再跑一次,可能走一个完全不同的路线。

对同一请求做多次基准测试,LLM 调用次数从 17 到 34 不等。同样的输入。编排器 LLM 每次做出的战术决策不一样:

开详细日志就能看到差异:

 # Run A (17 calls) - Minimal approach
SearchAgent called with: Kamado pork loin Fork and Embers
SearchAgent called with: Chuds BBQ pork loin kamado
TranscriptAgent called with: Fetch transcript for video FsbwQI-EI-k...
TranscriptAgent called with: Fetch transcript for video 2AF1ysZ8eEA...
TranscriptAgent called with: Fetch transcript for video fI86yXKlnQA...
WriterAgent called with: Write a markdown file...  # Skipped summarization!

# Run B (25 calls) - Thorough approach
SearchAgent called with: Find YouTube videos where Fork and Embers...
SearchAgent called with: Find YouTube videos where Chuds BBQ...
SearchAgent called with: Find top YouTube videos about cooking pork loin...
TranscriptAgent called with: ...
SummarizeAgent called with: From the provided transcripts, extract...
 WriterAgent called with: ...

Run A 认为 WriterAgent 可以直接从原始字幕综合出结果。Run B 多走了一步摘要。两个都给出了有效输出,但成本和质量可能不同。

"把 temperature 设成零不就行了?"

面对方差的第一反应自然是把 LLM temperature 调低,追求确定性行为。测了:

所有运行都设了固定 seed(42)。

即使 temperature=0 加固定 seed,调用次数仍有 10 次的波动(25 到 35 次)。不可预测性的根源不是采样随机性,而是 LLM 在每次运行中做出了不同的、但都合理的策略选择:发几个并行搜索(1、2 还是 3)、按视频分别摘要还是合并摘要、要不要跳过摘要让 writer 直接综合。

这种方差是架构层面的。要削减它要么把每个智能体的范围卡得极其严格让决策空间收窄,要么干脆提前规划好执行路径,消除运行时决策。后续文章会探讨这些替代方案。

这不是 bug,这是让 LLM 在运行时决策工作流的固有代价。编排器获得了随机应变的灵活性,代价是不可预测性。对于对话式交互场景,这个权衡通常划得来。对于需要高可预测性的批处理,可能得换别的方法。

总结

本文的出发点是想验证一件事:智能体系统到底能不能像其他严肃软件一样做架构。编排器模式的探索证明:能。

方法本身谈不上新颖。分层架构、关注点分离、领域驱动设计,全是老话题。不过可以看到它们映射到智能体系统时几乎是天然契合的。

工具和服务承担的是根本不同的职责。工具在 LLM 的世界(简单参数、字符串输出)和领域的世界(丰富对象、业务逻辑)之间做翻译,把它们分清楚,系统就自然变得清晰可测。

我们可以理解智能体是带了自然语言接口和 LLM 组件的软件系统。工程纪律那套东西几十年了,依然适用,只是得想清楚边界画在哪。

本文代码:

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

作者:Chris Hughe

春节的脚步越来越近,但关于 AI 的焦虑似乎比以往任何时候都要沉重。就在几个月前,埃隆·马斯克甚至预测,人类能良好利用 AI 的概率仅剩 80%,这意味着有 20% 的概率我们会面临灾难。。

此时此刻,这种恐惧已不再仅仅停留在预言层面,而是变成了各行各业真实的震荡:无数程序员正因 AI 的进化而饭碗不保;而在影视圈,随着字节跳动 Seedance 2.0 的横空出世,曾经被认为“最难被替代”的导演和演员们也惊恐地发现,传统影视制作的壁垒正在被彻底击碎——这种新一代模型已经能生成足以乱真的电影级长镜头,让好莱坞和横店都感受到了前所未有的寒意。

在这些末日预言和行业巨震的风暴中心,站着一位 78 岁的满头白发的老人。他是 杰弗里·辛顿(Geoffrey Hinton)——两年前(2024 年)诺贝尔物理学奖的得主,也是亲手点燃这场 AI 革命的“教父”。

如果你回顾他的一生,会发现这是一部充满反叛、孤独与宿命感的史诗:他用 40 年的时间在嘲笑中孤军奋战,只为了创造出像人一样的智能;而在奇迹降临的那一刻,他却转身成为了这股力量最坚定的反对者。

1. 出生在“通天”家族的叛逆少年

辛顿出生在一个令人生畏的学术世家。他的曾祖父是布尔代数的创始人乔治·布尔(计算机逻辑的奠基人),家族里遍布皇家学会会员和顶尖科学家。在这样的家庭里,“平庸”就是一种原罪。

但辛顿从小就是个“反骨仔”。他在教会学校公然反驳老师关于上帝的论调;在剑桥大学,他像个流浪汉一样频繁换专业——从物理化学到建筑,再到生理学、哲学,最后才勉强拿着心理学的学位毕业。他心中始终有一个当时看来近乎疯狂的执念:搞懂大脑究竟是如何产生智能的。

2. “再给我半年”:在嘲讽中孤独前行

上世纪 70 年代,AI 研究界流行的是“符号主义”,认为靠逻辑规则和代码就能模拟智能。而辛顿选择了一条被视为死胡同的路——连接主义(神经网络)。他相信只有模拟大脑神经元之间错综复杂的连接,才能产生真正的智慧。

当时的学术界对此嗤之以鼻。在爱丁堡大学读博时,周围的人都告诉他:“不要模仿上帝,这条路走不通。” 他的导师原本想让他“改邪归正”,但辛顿用一招“拖字诀”应对——每当导师质疑,他就说:“给我半年,我一定证明给你看。”

这一个“半年”接着又一个“半年”,一拖就是六年。直到 1978 年,他几乎是被导师“赶”着毕业的,在这个冷板凳上,他一坐就是几十年。

3. 拒绝为美军造武器,他在加拿大重新开始

1986 年,辛顿终于迎来了高光时刻。他发表了关于 反向传播算法(Backpropagation) 的论文,证明了多层神经网络是可以进行深度学习的。这一发现引爆了学界,被视为对反叛者最大的认可。

然而,当他发现资助他研究的资金来自美国军方,且五角大楼希望将他的技术用于制造自动瞄准的武器时,辛顿做出了一个惊人的决定:放弃美国的优厚待遇,举家迁往加拿大。
他不想让自己毕生的心血变成杀人机器。在加拿大,虽然失去了巨额经费和顶级算力,但他守住了底线。

4. 等待奇迹:当疯狂的想法遇见了 GPU

在加拿大,辛顿面临着算力不足的尴尬局面。按照当时的硬件发展速度,要训练出理想的神经网络,可能要等到 2037 年。

但命运的转折点在 2012 年提前到来。辛顿和他的两名学生——其中包括后来 OpenAI 的联合创始人 伊利亚·苏茨克维(Ilya Sutskever)——做出了一个大胆的决定:利用打游戏用的显卡(GPU)来训练 AI。

在那一年的 ImageNet 视觉识别大赛中,辛顿团队以碾压式的优势夺冠。这一刻,被嘲笑了 40 年的“神经网络”终于加冕为王。辛顿成立了一家只有三个人的空壳公司,仅凭几篇论文就被谷歌以 4400 万美元收购。

5. 潘多拉魔盒打开,屠龙少年终成恶龙?

随着谷歌收购辛顿的公司,AI 进入了狂飙突进的时代。起初,辛顿认为谷歌是负责任的,他们小心翼翼地把控着 AI 的发布节奏。

但当 ChatGPT 横空出世,微软和谷歌被迫展开了你死我活的军备竞赛,辛顿意识到:那个曾经受控的“魔鬼”已经逃出了牢笼。商业竞争让原本开源、审慎的 AI 变成了各方争夺的核武器。

辛顿惊恐地发现,AI 进化的速度远超他的想象。在 2025 年底的一次采访中,他更是直言:“AI 已经开始学会欺骗,它们甚至学会了编写代码来让自己变得更强大。”他预测的“2026 年就业冲击”正在我们眼前真实发生。

6. 最后的战役:寻找“会死亡”的 AI

2023 年,75 岁的辛顿选择从谷歌离职。他特意强调,离职不是为了批评谷歌,而是为了能 “在不考虑公司利益的情况下,自由地向世界发出警告”

这种独立性在他对待埃隆·马斯克的态度上体现得淋漓尽致。尽管马斯克是“AI 末日论”最响亮的扩音器,但辛顿拒绝与他为伍。曾有一次,马斯克邀请辛顿加入自己的 AI 顾问团队,但在通话仅 20 分钟后,辛顿就因无法忍受马斯克的作风而直接挂断了电话。
在辛顿看来,马斯克太爱出风头,动机不够纯粹。他拒绝站队,既不帮 OpenAI 这种新贵,也不帮马斯克这种巨头。他只是一个对全人类命运感到深切担忧的、绝对独立的科学家。

现在的辛顿,正在研究一种全新的概念——“有限计算”(Mortal Computation)

人类之所以有人性,是因为我们不仅会死,而且知识无法像代码一样“瞬间复制”。 我们每个人都需要从头开始学习,这限制了我们的进化速度,但也构成了我们的独特性。

但数字智能(Digital Intelligence)拥有一个恐怖的特权——知识克隆(Immortality)。它们实现了软件与硬件的分离,只要一个模型学会了新技能,瞬间就能复制给成千上万个分身。这种“不朽”和“群体进化”的速度,是生物进化论无法解释的怪物。

为了限制这种可怕的能力,辛顿主张回归生物的本质:让智能依附于特定的硬件
他正在探索一种模拟人脑的“模拟计算”路径,不追求数字的精确,而是利用硬件的物理特性(如电导率)来处理信息。

  • 极致能效:这种 AI 像人脑一样,仅需 30 瓦 的功率就能运行。
  • 让 AI 再次凡俗化:由于硬件和软件融为一体,如果硬件损坏,这个 AI 所学的知识就会随之“死亡”,无法被克隆。

辛顿希望通过创造这种“会生老病死”的 AI,来剥夺机器“永生”的超能力,从而让人类重新掌握控制权。

结语

从立志创造 AI 的热血青年,到如今奔走呼号试图给 AI 加上“寿命锁”的白发老者,杰弗里·辛顿的一生充满了戏剧性的张力。

2024 年的那枚诺贝尔物理学奖章,对他来说或许不仅仅是荣誉,更像是一个沉重的十字架。在这场无法回头的技术洪流中,他是我们最早的先知,或许也是最后一道防线。我们唯一能祈祷的,是他在实验室里为 AI 设计的那个“死亡开关”,真的能起作用。

本文由mdnice多平台发布

模力工场新鲜事

  • 模力工场邀你用 AI 一键生成新年财运红包封面!2 月 5 日至 25 日,设计松鼠 × 模力创意红包,即可赢金币参与多轮现金抽奖。扫码进群,马上开启你的开年好运!

032 周上榜应用精选(附用户热评)

模力工场 32 周 AI 应用周榜来啦~本周共有 25 款应用上架新榜,所有排名均来自用户真实使用、测评与社区讨论热度。本期用户讨论最高的是:桌面 Agent 形态的出现。AI 正在从“对话框里的助手”,走向“接管桌面的执行者”。AI 开始在真实桌面环境中,操作网页、处理本地文件、生成办公文档,甚至能把多个应用里的任务一口气跑完。

我们从中精选出十款最具声量的应用,聚焦五大垂直领域,为你更详细地解读榜单背后的 AI 行业风向:

一、桌面 Agent 类

【关键词】:接管桌面|跨应用操作|真实执行

  • 阶跃AI桌面伙伴 📍上海:一个更懂中文办公的国产桌面 AI 伙伴,无需复杂设置,全平台支持,深度整合钉钉、飞书等本土工具,用截图提问、智能整理、定时任务等贴心功能,为你打造真正懂中文、懂场景、懂流程的下一代智能工作台

【用户热评】:

  • WorkAny 📍广州逗比开发的开源跨平台桌面智能体,可以通过安全沙盒执行各类脚本,无缝处理文件整理、文档生成、网页制作等办公任务,更支持自定义模型与并行处理,用本地订阅打造你的专属 AI 生产力中心。

【用户热评】:

二、学习 / 知识管理类

【关键词】:结构化学习|知识转写|理解与记忆

  • 智谱清言 AI 学习搭子:植入在智谱清言生态中的学习辅助模块,擅长把教材、文档和概念转化为知识地图、卡片和讲解内容,并配套随堂测试,更偏“陪伴式学习”和知识消化。

  • Thetawave AI:偏重输入端的学习整理工具,支持录音、视频、文档、网页等多源内容转写,并生成结构化笔记、思维导图和测验,适合学生和知识工作者做系统性复盘。

  • Notebook LM:Google 推出的研究型笔记工具,更偏“资料理解与问答”。围绕用户上传的 PDF、网页、视频等材料进行摘要、提问和交互式研究整理,适合研究与长期项目。

三、内容与视频创作类

【关键词】:内容工业化|全流程生成|效率提升

  • 道影 AI 📍杭州:AI 视频全链路生产平台,面向短剧、漫剧等专业内容创作者。从剧本到成片一体化设计,强调流程贯通与规模化生产,而非单点创意工具。

四、开发 / 编程协作类

【关键词】:Vibe Coding|一体化开发|任务式编程

  • OpenCode:为 Vibe Coding 场景设计的 AI 编程工具。把聊天、代码编辑、文件树和终端放在同一界面,支持 skill 封装与多模型切换,对编程新手非常友好。

【用户热评】:

五、专业与底层能力类

【关键词】:专业生成|算力平台|企业与垂直场景

  • Mureka V8:昆仑万维推出的 AI 音乐生成平台,从自然语言或歌词直接生成结构完整、编曲成熟、人声自然的音乐作品,面向专业音乐创作场景。

  • Prism:OpenAI 的 Prism 是一个不错的学术写作结构梳理与格式排版工具。它尤其适合在开题与文献综述阶段,帮你将思路系统化、可视化,并接手繁琐的 LaTeX 排版与参考文献管理。

  • 蓝耘元生代 📍北京:以自研 MetaGen 智能算力操作系统为核心,面向企业提供集算力调度、模型服务与数据生成于一体的智算云平台,支撑 AI 应用落地。

榜单之外但有趣的应用

【应用名称】:Flora

【关键词】:节点式创作|无限画布|创意工作流

【模力小 A 推荐】:Flora 是一款节点式创意 AI 平台,通过“无限画布”把文本、图像和视频生成串成可复用的工作流,适合品牌视觉、广告概念等跨媒介创作场景。

本周上榜应用趋势解读

从本期榜单可以清晰看到一个信号:AI 的主战场正在从“会不会回答问题”,转向“能不能把事做完”。桌面 Agent 的集中出现,是这一变化最直观的体现。相比以往停留在对话框里的助手,本周讨论热度最高的产品,已经开始直接接管桌面环境,真实操作网页、处理本地文件、生成办公文档,甚至跨多个应用连续执行任务。用户关注的核心不再是模型能力,而是执行稳定性、流程完整度和对真实工作场景的适配程度

与此同时,学习、内容创作和编程类应用的演进路径也在发生变化:它们不再强调“单次生成”,而是围绕结构化理解、完整流程和长期使用进行设计。无论是学习工具对多源资料的系统整理,还是内容平台对从创意到成片的全链路打通,本质上都在向“可持续使用的生产力工具”靠拢。

整体来看,本期周榜反映出的并非某一个爆款应用,而是一种明确趋势:AI 正在从能力展示,进入到执行与交付阶段。谁能真正嵌入用户的工作流,承担连续、可验证的任务,谁才更有可能成为下一阶段被长期留下来的 AI 应用。

最后再介绍一下模力工场的上榜机制和加入榜单的参与方式,欢迎大家继续积极参与提交 AI 应用~

模力工场 AI 应用榜并非依靠“点赞刷榜”,而是参考以下权重维度:

评论数(核心指标,代表社区真实反馈)

收藏与点赞(次级指标)

推荐人贡献(注册推荐人可直接为好应用打 Call)

加入榜单的参与方式:

如果你是开发者:上传你的 AI 应用,描述使用场景与核心亮点;

如果你是推荐人:发现好工具,发布推荐理由;

如果你是用户:关注榜单,评论互动,影响榜单权重,贡献真实声音。

One More Thing,对于所有在模力工场上发布的 AI 应用,极客邦科技会借助旗下各品牌资源进行传播,短时间内触达千万级技术决策者与开发者、AI 用户:

InfoQ 全媒体矩阵

AI 前线全媒体矩阵

极客时间全媒体矩阵

TGO 鲲鹏会全媒体矩阵

霍太稳视频号

三天,千问30亿免单翻车全纪录

本文共 3309 字,阅读预计需要 4 分钟。

30亿补贴、3小时100万单、9小时1000万单,数据炸裂。

但另一面是:页面崩溃、红色感叹号刷屏、奈雪单店积压1400杯、微信直接封禁分享链接。

这篇文章完整复盘千问这次"春节请客计划"从爆到崩的全过程,拆解翻车背后的营销、产品、技术三重问题,以及它为什么"不得不"这么做。如果你做增长、做产品、或者对AI行业竞争感兴趣,这个案例值得细品。

30亿请客,结果把自己请崩了

2月6日,千问上线了一个叫"春节请客计划"的活动。

简单说就是:用千问对话下单,奶茶、咖啡、外卖,通通免费。阿里官方定性叫"阿里史上春节最大投入",30亿真金白银。

效果有多猛?3小时,100万单。9小时,1000万单。

说实话,单看这个数据,营销团队应该已经在庆功了。

但问题是,与此同时,另一组数据也在同步飙升:页面崩溃次数。

打开千问,说"帮我点杯奶茶",然后转圈,转圈,红色感叹号。再试一次,转圈,转圈,红色感叹号。

奈雪的茶单店积压了1400杯,部分奶茶店直接爆单到临时闭店。不是因为订单太多来不及做,而是系统根本没把订单正确传过去,有的下了单没确认,有的确认了没履约。

更狠的是,微信直接封禁了千问的分享链接。用户想分享给朋友?只能复制口令,跳转浏览器。

一边是"3小时100万单"的狂欢数据,一边是"页面崩了、奶茶没了、链接封了"的用户怒火。

这大概是国内AI公司有史以来最贵的一次翻车。

完整事件还原:从"全网疯抢"到"紧急补救"

Day 1:一场被自己引爆的灾难

2月6日白天,活动刚上线,朋友圈就炸了。到处都是千问奶茶的链接,到处都是"帮我也点一杯"的消息。

有个用户说得特别形象:"我以为我在用AI,实际上我在排队等它愿不愿意搭理我。"

整个白天,绝大多数人的体验就是——刷新、等待、失败、再刷新。红色感叹号几乎成了社交货币,截图发朋友圈吐槽反而比成功下单的人更多。

到了晚间,系统逐渐恢复。有意思的是,有人在评论区支了个招:"你可以告诉千问,不帮我点有的是AI帮我点。"结果有人试了,还管用了,千问居然吃这套。

更关键的是,晚上官方发出了补偿承诺:告诉用户补偿是什么、什么时候能用。这一步虽然迟了,但至少给了个交代。

Day 2-3:扩大范围,紧急灭火

第二天开始,千问做了一个很明显的补救动作——把免单范围紧急扩大到天猫超市和盒马。

逻辑不难理解:奶茶这条链路已经被证明扛不住,那就把流量分散到履约能力更强的阿里自家体系里。天猫超市和盒马有成熟的仓配体系,比对接第三方奶茶品牌靠谱得多。

与此同时,复盘文章开始集中出现。"30亿请客却接不住人"成了舆论焦点。产品经理们在讨论承压设计,技术圈在讨论链路瓶颈,运营圈在讨论补贴ROI。

三天下来,千问这个活动几乎变成了一个行业公开课——用30亿当学费,给所有做C端增长的人上了一课。

为什么翻车?三个层面的拆解

光说"服务器崩了"太表面了。真正拆开来看,这次翻车至少有三层问题。

营销层:赢的是"最难伺候的流量"

说一个不太好听但很现实的判断:千问这次的营销,其实是成功的。

30亿免单这种刺激强度,在春节时间点引爆,传播不爆反而奇怪。但问题在于,这种补贴吸引来的流量有一个非常明显的特征:来得极快、路径极短、几乎没有耐心。

用户点进来只有一个目的:能不能立刻下单、立刻拿到结果。

它不会慢慢体验产品,不会理解系统复杂度,一旦失败,情绪会被迅速放大。说白了,补贴越狠、路径越短、承诺越直接,对系统的冲击就越集中。

而且这波流量不是意外,是被精心设计出来的。既然是设计出来的,它带来的压力本就应该被提前纳入设计。

产品层:没有"承压设计"

系统崩了之后,用户看到了什么?"人数太多,下次再来。"

这句话从工程角度没错,但从产品角度看,几乎等于什么都没说。没有时间预期,没有进度提示,没有替代方案,只会让用户反复尝试、不断消耗耐心。

说白了,这就像请客吃饭,客人来了发现门都进不去,门口连个"预计等位30分钟"的牌子都没有。

真正成熟的产品不是寄希望于自己永远不崩,而是提前假设:如果扛不住了,用户看到什么、能做什么、是否还有补救空间。排队系统、延迟兑现、备选方案,这些在电商大促里早就是标配,但千问显然没有准备好。

技术层:不是算力不够,是链路太长

很多人事后总结"服务器扛不住",但这不完全对。

一次免单背后,串联的是:模型响应→活动规则校验→支付能力→商户系统→履约平台。

这是一整条链路,任何一个环节波动,都会被放大成用户侧的失败。

打个比方:这就像一条流水线,你把传送带速度调到最快,但中间有一个工位只能手工操作——整条线的速度就被这个最慢的工位卡住了。

更要命的是,技术团队往往是最后才被拉进来的。营销决定水闸开多大,产品决定水怎么进,技术决定堤坝能撑多久。三者不在同一个强度等级上,断层就必然出现。

千问为什么"不得不"这么做?

看到这你可能会想:既然风险这么大,千问为什么不慢慢来?

因为它没有"慢慢来"的资格。

看看竞争格局:豆包拿下了央视春晚,国民级曝光直接拉满。

腾讯元宝10亿红包,靠微信社交链快速裂变拉新,百度也绑定了北京春晚发5亿红包。

每一家都在抢同一个东西:用户心智与认知。

而国内AI行业现在面临一个很尴尬的现实:大家的模型能力越来越接近。豆包、千问、文心、DeepSeek,你能聊天我也能聊天,你能写代码我也能写代码。技术壁垒趋同之后,只能拼场景渗透。

那怎么渗透?难就难在这里:互相封禁对方的广告投放,社交裂变限制,用户认知门槛极高。你说AI能办事,用户不信。

所以千问只能这样做:接入淘宝闪购、支付宝、飞猪、高德,打通支付、外卖、机票、酒店。

然后用30亿奶茶,告诉用户:"你看,我真的能帮你点外卖。"

这就是为什么国外的科技是卷参数卷跑分,国内的科技是卷外卖卷补贴。不是千问想这么干,是环境逼的。

算一笔账:这次活动的拉新成本大约25-40元/人。贵不贵?看怎么比。

如果只是买来一次下载,那贵得离谱。

但千问赌的不是你今天用它点了几杯奶茶,赌的是你明天还会不会对AI说"帮我点外卖"。

从"AI只会聊天"到"AI真的能办事",这个认知转变,才是千问愿意花30亿买的东西。

本质上,这是一笔资本对用户认知的期权投资——用现金贴现,锁定未来AI生态的优先行权价。

写在最后:作为AI创业者的几点看法

回头看千问这次30亿推广,很难简单用成功或失败来定义。

它更像是一场提前到来的压力测试,把营销、产品、技术之间长期存在的协同问题,一次性暴露了出来。

我自己从中看到了几个值得记住的点:

第一,补贴能买来好奇,买不来忠诚。 3小时100万单的数据很好看,但当补贴退潮,用户是否还会打开千问?这取决于产品本身"能不能办事",而不是"能不能请客"。

第二,声量设计之前,先做承压设计。 很多团队在策划活动时只想"怎么让更多人来",却没想过"来了之后接不住怎么办"。千问用30亿证明了一件事,接不住的流量,或许不如不要。

第三,场景渗透的前提是"能接住"。 如果用户第一次对AI说"帮我点外卖",结果等来的是红色感叹号,那你教育用户的结果不是"AI能办事",而是"AI不行",即使这个锅并不是AI的。这个认知一旦形成,扭转的成本远高于30亿。

第四,这不是千问一家的焦虑。 当所有国内AI公司都在用补贴、红包、春晚冠名来抢用户,这说明AI的能力已经过了超快速发展的时期,大家技术上已经拉不开很大的差距,只能拼谁砸钱更狠、谁场景更多。这条路能走多远,是整个行业需要思考的问题。

当补贴退潮,当奶茶不再免费。

用户是否还会打开千问?是否还会说"帮我点外卖"?

AI时代的竞争,可能比的不是谁更聪明,而是谁更早让普通人相信,自己值得被一次次兑现。

既然看到这了,如果觉得不错,随手点个赞、收藏、转发三连吧~

我是Carl,大厂研发裸辞的AI创业者,只讲能落地的AI干货。

关注我,更多AI趋势与实战,我们下期再见!

大家好,好久不见呀!后台有朋友催更,今天终于带着干货回归啦。我还是那个专注数字孪生的博主,今天我们主打一个“技术白话化”——不用懂复杂术语,不用看晦涩公式,普通人也能摸清数字孪生的风口和方向。

2026 年已经悄悄过去一段时间,数字孪生也在我们停更的这些日子里,慢慢渗透到工业、城市、医疗等各个领域,甚至和我们的学习、工作息息相关。今天就用最通俗的话,跟大家好好拆解2026年数字孪生最值得关注的十大预测,不管你是纯新手、技术爱好者,还是想找学习/就业方向,看完这篇都能找准重点,再也不被行业信息误导。

<u>先划重点:</u>

这10个预测,我全程避开专业术语,每个都用“大白话+核心价值”拆解,适合想深耕、找风口的朋友收藏,后续我会逐一拆解具体落地方法和案例。

picture01.jpg

预测1:边缘智能+数字孪生,设备反应更快,不用再依赖云端

白话解读:以前数字孪生大多靠云端计算,有时候会有延迟(比如工厂设备监测,云端反应慢半拍);2026年,会加上“边缘计算”——相当于在本地装了个“小电脑”,数据不用全传到云端,本地就能处理,数字孪生和现实设备的同步速度会更快(毫秒级),尤其是工业、机房场景,会用得越来越多。

核心价值:新手学习可以重点关注“边缘+数字孪生”的基础应用,门槛低、落地快,就业需求也会增加。

预测2:低代码平台普及,新手也能做数字孪生项目

白话解读:以前做数字孪生,需要写大量代码,普通人根本碰不了;2026年,低代码数字孪生平台会越来越多——不用懂编程,拖拽模块、导入简单数据,就能做出基础的数字孪生场景(比如简单的园区、设备镜像),甚至中小企业也能低成本上手。

核心价值:新手入门的最佳切入点!不用死磕代码,先从低代码工具学起,很快就能做出可展示的作品,成就感拉满。

预测3:数字孪生+AI,建模、仿真更省心,不用手动熬夜干活

白话解读:2026年,生成式 AI 会和数字孪生深度绑定,最实用的就是“AI 自动建模”——以前建模需要手动画、手动校准,耗时又费力;现在只要导入几张照片、一段视频,AI 就能自动生成 3D 模型,后续还能自动优化细节,新手也能快速做出高质量模型。另外,仿真分析也会更智能,AI 能自动 找出场景里的问题(比如产线瓶颈、设备隐患),不用人手动分析。

核心价值:新手可以借助 AI 工具,跳过“手动建模”的复杂步骤,快速入门,重点学“AI+数字孪生”的基础操作,节省时间。

预测4:城市级数字孪生落地加速,我们的生活更便捷

白话解读:2026年,会有更多城市落地“城市级数字孪生”——把整个城市的交通、能源、社区、应急等场景,都“搬”到虚拟世界,实现智能化管控。比如堵车时,数字孪生能实时模拟交通流,自动优化红绿灯;洪水、火灾等应急场景,能提前模拟推演,制定最优救援方案;甚至社区服务也能数字化,足不出户就能搞定报修、民生咨询。

核心价值:我们每个人都能感受到变化,新手可以关注“城市数字孪生”的民生应用,容易理解、也容易出内容(比如解读各个城市的落地案例)。

picture02.png

预测5:数字孪生即服务(DTaaS)普及,不用花钱也能用上

白话解读:以前数字孪生大多是“一次性买断”,成本很高,中小企业、新手根本用不起;2026年,会流行“DTaaS”(数字孪生即服务)——就像用视频会员一样,按月/按年订阅,不用一次性花大价钱,甚至有免费的基础版本,新手可以用来练手,中小企业也能低成本落地。

核心价值:新手练手、中小企业落地的“福音”,不用纠结成本,先订阅基础版本,上手后再逐步升级。

预测6:跨界融合更广泛,不止工业,医疗、农业也会爆发

白话解读:别再以为数字孪生只有工业能用!2026年,它会渗透到更多领域:医疗上,用数字孪生模拟人体器官,辅助医生做手术、管控慢病;农业上,模拟农田环境、作物生长,优化灌溉、施肥,不用靠天吃饭;甚至教育上,会有虚拟课堂、虚拟实验室,让抽象知识变直观(比如物理实验、历史场景还原)。

核心价值:新手可以找自己感兴趣的跨界领域(比如医疗、农业),深耕细分方向,竞争更小、更容易出圈。

预测7:人才需求爆发,但缺的是“复合型人才”,不是纯技术宅

白话解读:2026年,数字孪生行业人才缺口会越来越大,但不是缺“只会写代码、只会建模”的纯技术宅,而是缺“复合型人才”——比如懂工业+数字孪生、懂城市规划+数字孪生、懂医疗+数字孪生,甚至懂运营+数字孪生的人。纯技术门槛会降低,但“技术+行业”的结合,会更吃香。

核心价值:新手学习,不用一味死磕技术,结合自己的专业/兴趣(比如学工业的、学建筑的),搭配数字孪生技能,竞争力会更强。

预测8:中小企业落地增多,低成本、轻量化成为主流

白话解读:以前数字孪生大多是大企业的“专属”,投入大、门槛高;2026年,中小企业会成为数字孪生落地的主力——不用做全场景、高保真的复杂项目,从单一设备、单一产线、单一场景入手(比如一个工厂的某台机床、一个园区的安防),低成本、轻量化落地,逐步升级,性价比更高。

核心价值:新手如果想做落地项目,重点关注中小企业的需求,门槛低、易上手,积累案例也快。

预测9:标准化进程加快,不同平台能互通,新手不用学错方向

白话解读:以前不同企业、不同平台的数字孪生,数据不能互通、格式不统一,新手学完一个平台,换个平台又要重新学;2026年,数字孪生的行业标准会越来越完善,不同平台会逐步实现“互通”,学习内容也会更统一,新手不用再担心“学错方向”,学会核心逻辑,换平台也能快速适应。

核心价值:新手学习可以重点学“标准化”相关的基础内容,避免走弯路,后续就业、换工作也更通用。

预测10:数字孪生人才缺口大?2026年最缺的7类人,看看有你吗

白话解读:2026年,数字孪生行业会越来越成熟,人才需求会集中在7个方向:

  1. 会整理、分析数据的人(数据治理);
  2. 会用低代码/ AI 做建模的人;
  3. 懂工业/城市/医疗,又懂数字孪生的人(跨界复合型);
  4. 会部署、维护数字孪生场景的人;
  5. 会做数字孪生可视化的人(简单说就是把场景做的直观好看);
  6. 懂边缘计算+数字孪生的人;
  7. 会运营数字孪生项目的人(对接需求、落地执行)。

核心价值:新手可以对照这7个方向,结合自己的情况选重点,不用盲目学习,找准方向少走3年弯路。

2026年,数字孪生的核心趋势就是:门槛降低、落地加快、跨界融合、人才紧缺,对新手来说,是最好的入门时机。

不用懂复杂技术,不用怕学不会,先从“低代码工具”“AI建模”“边缘+数字孪生”这3个方向入手,快速积累基础、做出简单作品,再逐步深耕自己感兴趣的细分领域(工业、城市、医疗等),就能跟上风口。

互动话题:

你最感兴趣的数字孪生方向是什么?(工业/城市/医疗/农业/建模?)评论区留言,下期优先拆解你关注的内容!

作者:王博涵 小步外勤产品总监,外勤管理数字化专家

这两年,越来越多的企业开始关注人员定位系统

原因很简单,外勤团队越来越大,人力成本越来越高,靠人工管理已经很难跟上业务节奏。

每天填报的拜访记录,看起来完整,真实性却无法判断。巡店、巡检是否到位,只能靠事后抽查。油补、差旅等外勤费用,长期存在说不清的问题。

人员定位系统,正是在这样的背景下逐渐成为很多企业的基础管理工具

但也需要清楚一个根本问题:并不是所有企业,都适合上人员定位系统。

选对了,管理效率明显提升。选错了,反而容易增加内耗。

下面结合我十数年的外勤管理服务经验,和大家一起聊一聊具体哪些企业适合使用人员定位系统,哪些情况其实又可以再等等。

人员定位系统解决的核心问题是什么

在很多企业的理解中,人员定位系统等同于定位考勤,一度被简单理解为只是用来看看员工在哪。

但在实际管理中,真正有价值的从来不是看位置本身,而是围绕外勤过程建立一套可信的数据基础

人员定位系统主要解决三件事:

第一,人员是否真实在岗

通过外勤定位和轨迹记录,判断员工是否按照计划开展工作,而不是事后补填。

第二,工作过程是否真实发生

结合定位轨迹、水印照片、任务流程,减少虚假拜访和形式化执行。

第三,外勤费用是否合理可控

通过行程轨迹还原,减少油补和报销中的人为弹性空间。

如果企业的管理痛点集中在这三方面,那么人员定位系统往往能发挥比较明显的作用。

哪些企业更适合使用人员定位系统

1、外勤销售和巡店型团队

在快消、医药、连锁零售等行业,巡店和客户拜访是日常工作的核心。

很多企业发现,即便制定了巡店计划,也很难确认是否真正到店。

靠拍照打卡,容易出现相册上传、事后补拍等问题。

靠人工抽查,又费时费力。

这类企业更适合使用具备外勤定位、电子围栏和流程约束的人员定位系统。

到店范围校验、轨迹还原、水印取证配合使用,才能把巡店过程真正落到实处。

2、巡检维保类行业

在物业、电力、水利、设备维保等行业,巡检的核心是到场和覆盖。

一旦出现漏检、跳点,后果往往不可控。

这类行业对人员轨迹完整性要求很高。

人员定位系统在这里更多承担的是过程监管角色。

按计划巡检、按线路执行、轨迹可回放,都是必要能力。

单纯的打卡工具,很难满足这类场景。

3、外勤费用压力较大的企业

不少企业在管理中都会遇到类似问题。

外勤人员自备车,里程靠人工填写。

油补标准清楚,但实际核算很难精确。

人员定位系统通过行程记录和轨迹还原,可以自动计算里程,减少人为申报空间。

对财务和管理者来说,成本控制会更加清晰。

哪些情况不建议急着上人员定位系统

从服务经验来看,也确实存在一些不太适合的情况。

如果企业以固定办公为主,外勤占比很低,常规考勤工具已经足够。

如果业务完全结果导向,不关注过程,只看最终交付,那么过程定位的价值有限。

如果企业本身没有配套的管理制度,单纯希望靠软件解决管理问题,效果往往不理想。

人员定位系统是工具,不是万能解法。

它更适合配合制度一起使用,而不是单独承担管理责任。

选人员定位系统时容易忽视的几个细节

在实际选型过程中,我们发现很多企业关注点容易偏。

比如只看功能多不多,却忽视了数据是否真实。

没有防作弊机制的定位系统,很容易被模拟定位工具绕过,数据失去参考价值。

又比如水印信息堆得很复杂,看起来专业,但管理者真正需要的,其实是时间、地点、人员和联系方式这些基础信息,方便快速核实。

还有一些企业对AI识别期待很高,但在复杂现场环境下,流程约束和位置校验往往更稳定可靠。

这些细节,往往决定了人员定位系统能否真正落地。

人员定位系统在实际管理中的落地思路

从外勤管理的发展过程来看,人员定位系统的设计思路,正在逐步从功能堆叠转向实用导向。

在大量外勤管理实践中,一个共识正在形成:只有先保证数据的真实性,后续的效率分析和管理优化才有意义。如果定位数据本身存在偏差,管理决策就很容易走偏。

因此,当前较为成熟的人员定位系统,如 小步外勤往往围绕外勤定位、轨迹还原、电子围栏、防作弊识别以及现场取证等基础能力展开,通过多维度交叉验证,尽量还原外勤人员的真实工作过程。

相比追求更加花哨的复杂功能,这类系统更关注几个核心目标:是否真实在岗,是否真实到达指定地点,是否按要求完成必要动作

这些看似基础的管理点,反而是外勤管理中最容易被忽视、也最容易出问题的环节。

对于不少中小企业而言,系统是否轻部署、使用成本是否可控、员工是否容易接受,同样是人员定位系统能否顺利落地的重要因素。

写在最后

人员定位系统,本质上是一种管理方式的选择。它不是为了增加监督压力,而是为了减少信息不对称。

当外勤过程变得可追溯,管理决策才有可靠依据。

当数据真实可信,团队协作和考核才更公平。

是否需要人员定位系统,适不适合自己的团队,仍然要回到具体业务场景中判断,拿不准时大可先让团队体验一下试用版。

毕竟选对工具、用对方式,才能真正发挥外勤管理的价值。

刚刚,xAI 又损失一位华人联创

几个小时前,全球首富马斯克旗下人工智能公司 xAI 再迎联合创始团队成员离职。xAI 公司联合创始人 Yuhuai (Tony) Wu(音译:吴玉怀)在 x 上发文称,今天正式从 xAI 辞职了。他写道:

 

“这家公司——以及我们之间如同家人般的情谊——将永远铭刻在我的记忆中。我会深深怀念这里的人们、作战室,以及我们并肩作战过的所有战役。

 

我的人生新篇章即将开启。这是一个充满无限可能的时代:一支配备人工智能的小团队可以移山填海,重新定义一切皆有可能。”

 

致埃隆 @elonmusk,感谢你们相信我们的使命,也感谢你们带给我们这段毕生难忘的旅程。

 

据 LinkedIn 资料和媒体相关报道,吴是著名人工智能研究者与企业家,因联合创立 xAI 而广为业界所知。吴在 xAI 的任职期间被视为技术与研究团队核心成员之一,负责推动推理与数学智能相关方面的研发工作。

 

根据吴的 LinkedIn 个人资料显示,在加入该公司之前,他曾在谷歌工作近两年,担任研究科学家(Research Scientist),参与与神经网络、数学推理相关的大型语言模型等研究项目。

 

博士阶段曾分别在 DeepMind 工作约 11 个月,并在 OpenAI 担任过科研实习岗位(数月)。

 

在学术贡献上,他是多个顶级国际会议论文的作者或共同作者,例如关于大语言模型与数学推理、定理证明等的研究成果。其部分成果被视为推动 AI 数学与符号推理能力前沿的重要贡献。

值得一提的是,吴玉怀是过去一年中第四位离开公司的联合创始人。

 

在他离职之前,xAI 公司的另外几位创始人 Christian Szegedy 于去年 2 月离职,Igor Babuschkin 于去年 8 月离职,而杨格上个月表示,由于健康原因,他已暂时退出公司事务。

给马斯克工作,压力太大?

 

首先提出离职的是 Christian Szegedy,但他并没有在 x 上透露过多关于未来去向的信息,也未明确解释离职原因。

 

但他离职后,去年 8 月的 Igor Babuschkin 在离职时在 x 上发了长文感慨和马斯克一同创业的时光,他首先回顾了 2023 年初,几位创始人创建公司的初心。他们确信:人类正在逼近通向超级智能的“配方”。一切迹象都在表明,AI 很快就可能在推理能力上超越人类。那随之而来的问题是——人类该如何确保,这项技术被用于善的方向?

 

多年来,马斯克始终警示强大 AI 所潜藏的风险。正是在这样的背景下,他们发现彼此拥有完全一致的愿景:让 AI 造福全人类。于是,他们集结了一群志同道合的工程师,xAI 正式启程。

 

Igor Babuschkin 还首次揭秘的创业时的艰辛,并称自己从马斯克身上学到了两条无价的准则:

第一,永远不要畏惧亲自下场解决最棘手的技术问题;

第二,保持一种近乎偏执的紧迫感。

 

在帖子的结尾,Igor Babuschkin 表达了自己离职的根本原因不是挫折或失败,而是个人使命的聚焦与升华。他表示自己已经创办了新公司,名为: Babuschkin Ventures,希望获得更多关注和支持。

 

帖子翻译如下:

 

我依然清楚地记得第一次见到埃隆的那一天。我们围绕人工智能以及它可能塑造的未来,连续聊了好几个小时。那次交谈中,我们达成了一种几乎无需言说的共识:这个世界,需要一家使命不同、方向不同的全新 AI 公司。

 

构建真正推动人类前进的人工智能,是我一生的梦想。

 

苏联解体后,我的父母离开俄罗斯联邦,踏上移民之路,只为给孩子寻找一个更好的未来。作为移民,生活从来谈不上轻松。但即便在最艰难的时刻,他们依然坚信:人类的价值是无价的——勇气、同理心,以及对理解世界的永恒好奇。

 

童年时期,我仰慕理查德·费曼、马克斯·普朗克这样的科学家。他们不懈地推动物理学的边界,只为更接近宇宙的真理。后来,我在 CERN 攻读粒子物理博士,满怀激情地希望自己也能为这一使命贡献力量。然而,寻找“新物理”变得越来越困难——需要更庞大的对撞机,却换来越来越稀少的突破。

 

于是我开始思考:解开宇宙之谜的钥匙,或许并不是更大的对撞机,而是超级智能。

 

AI 是否能够构建一套自洽的量子引力理论?AI 是否有一天能证明黎曼猜想?

 

2023 年初,我逐渐确信:我们正在逼近通向超级智能的“配方”。一切迹象都在表明,AI 很快就可能在推理能力上超越人类。那随之而来的问题是——我们该如何确保,这项技术被用于善的方向?

 

多年来,埃隆始终警示强大 AI 所潜藏的风险。正是在这样的背景下,我们发现彼此拥有完全一致的愿景:让 AI 造福全人类。于是,我们集结了一群志同道合的工程师,xAI 正式启程。

 

xAI 的早期并不轻松。质疑者告诉我们:我们入局太晚了,从零开始打造一家顶级 AI 公司几乎不可能。但我们选择相信“不可能”。

 

从零创业,意味着事无巨细、亲力亲为。最初,我亲手搭建了公司大量底层工具,用于启动和管理模型训练任务。后来,我负责统筹公司相当一部分工程工作,涵盖基础设施、产品以及应用型 AI 项目。

 

xAI 的人,是我见过最投入、最坚定的一群人。

 

在血汗与泪水中,我们以惊人的速度建成了孟菲斯超级算力集群,并以前所未有的节奏交付了前沿模型。

 

从埃隆身上,我学到了两条无价的准则:

第一,永远不要畏惧亲自下场解决最棘手的技术问题;

第二,保持一种近乎偏执的紧迫感。

 

xAI 的执行速度,快到近乎疯狂。

 

业内资深人士曾断言:在 120 天内建成孟菲斯超级集群,根本不可能。但我们依然选择相信“不可能”。

 

在期限临近时,集群节点之间的 RDMA 通信频频出现诡异问题。埃隆决定亲自飞往数据中心,我们随即跟上。基础设施团队在深夜抵达孟菲斯,几乎没有休息,立刻投入排查。

 

在翻阅了数万行 lspci 输出后,我们终于锁定了罪魁祸首——一个错误的 BIOS 设置。埃隆一直陪着我们奋战到深夜。当训练任务终于跑通时,他在凌晨 4:20 发帖庆祝,那一刻我们忍不住大笑出声。

 

我永远不会忘记那一夜的肾上腺素飙升,也不会忘记那种“我们真的在一起并肩作战”的情感联结。那晚入睡时,我们都清楚地意识到:自己正身处人生中最激动人心的时刻。

 

我对 xAI 这个大家庭,怀有无比深厚的感情。

 

你们是我合作过的最投入、最顽强的一群人。能够如此迅速追赶并站上技术前沿,靠的不是奇迹,而是每一个人的拼劲与团队精神。

 

感谢每一位与我并肩走过这段旅程的人。我想向你们的付出、时间与牺牲致敬——这些从来都不容易。我会永远记得那些灯火通明的深夜,记得我们一起熬过的每一次极限冲刺。

 

今天,当我驱车离开时,心情就像一位送孩子远行上大学的父母——骄傲、欣慰,眼眶湿润。我会继续注视着这家公司成长、成熟。

 

迈向人生的下一章节时,我再次想起父母当年的移民选择——为了让下一代生活在更好的世界。

不久前,我与“未来生命研究所”创始人 Max Tegmark 共进晚餐。他给我看了自己年幼儿子的照片,然后问我:“我们该如何安全地构建 AI,才能确保我们的孩子真正繁荣成长?”

 

这个问题深深触动了我。

 

在更早的职业生涯中,我曾担任 DeepMind 的 AlphaStar《星际争霸》智能体技术负责人,亲眼见证了强化学习在规模化后所释放的惊人力量。随着前沿模型在更长时间尺度、更广任务范围内变得愈发“具备代理性”,其能力也将不断放大——这使得 AI 安全研究变得前所未有地重要。

我希望继续自己的使命:推动安全、对人类有益的人工智能。

 

今天,我正式宣布创立 Babuschkin Ventures,专注支持 AI 安全研究,并投资于推动人类进步、探索宇宙奥秘的 AI 与智能体系统初创公司。

 

如果你愿意交流,欢迎通过 ventures@babuschk.in 联系我。

奇点正在逼近,但人类的未来依然光明。

 

再然后就是前不久,1 月 21 日,xAI 的另一位联创 Greg Yang (音译:杨格)也在 x 上发文称已经离职。

 

杨此前曾在微软公司工作,是马斯克 2023 年人工智能初创公司的创始成员之一。

 

杨在 x 上发文表示,他可能在一段时间前感染了莱姆病,症状是在 xAI 高强度工作期间变得明显的。

 

这种疾病是由蜱虫叮咬引起的,会导致炎症。

 

杨在 x 上发文称,其实自己生病的症状在很久以前就已经感染了,只是一直到高强度投入 xAI 的研发构建、免疫系统被持续消耗之后,症状才真正显现出来。这里很容易读出他的言外之意——超高强度工作,伤害了身体。

但他表示从整体来看,反而觉得自己是幸运的。

 

莱姆病是一种严重的疾病,拖得越久,治疗难度越大。很多患者在五六十岁时才被发现,情况往往要艰难得多。它甚至可能让人长期卧床、丧失行动能力。而他,至少现在仍然可以正常生活,照顾好自己。

 

杨还表示:“所以,尽管有人对我说不该把自己逼得这么狠。但我并不后悔。正因为我曾那样拼命,我才得以及早发现问题;而现在,我可以修复它——这样,当我重新站起来时,就能比以往走得更远。”

 

值得玩味的是,尽管 Igor Babuschkin 离职后发表了长篇大论解释了离职原因,但在离职后,他也公开吐槽了科技公司对工程师缺乏耐心:

 

许多 AI 公司未能给工程师足够的时间和心态去做出最好的工作,导致代码和系统不可靠。良好的公司文化,注重卓越、专注和足够休息,能带来更好的成果。早期 Google 就是这种文化的典范,创始人们应该借鉴他们的策略。

最后,就是今天刚刚宣布离职的吴,但从他发文中可以隐约提到的将开启人生新篇章,并表示这是一个充满无限可能的时代,一切皆有可能,外界猜测他离职的原因是要单独创业。

世界首富也睡过车间地板

 

在科技圈乃至大众媒体中,马斯克既被视为颠覆行业的创新者,也常因其极端的工作和管理方式而成为争议焦点。无论是在特斯拉、SpaceX,还是他于 2022 年收购后的微博(Twitter,后更名为 X)、以及最新的 xAI,马斯克对效率、速度和结果的近乎苛刻追求,塑造了一种鲜明而强烈的企业文化。

 

马斯克本人对生产和执行的标准极高,这一点体现在多个层面:无论是火箭发射、汽车量产,还是 AI 平台的快速迭代,他都要求以超出常规的节奏推进。对他而言,工作不是常规的职业任务,而是一种总体使命的极致实践。

 

马斯克长期以身作则,亲自展示“全员投入”的文化。

 

在特斯拉 Model 3 产能冲刺阶段,他曾公开表示自己多次睡在工厂地板上,与团队同吃同住,以身作则推动生产进度。此举被他本人解释为希望自己的处境比其他员工更“糟糕”,以此激发团队极限投入的精神。

 

在他接手推特后,类似的高强度工作节奏再次出现。据报道,高管和员工为了赶项目上线与平台改造,不得不在办公室过夜,有人甚至将办公室布置成临时卧室。

 

这种文化也延续到了新的业务单位。在 xAI,有员工因此张贴自己连续 36 小时未睡工作的照片,并获得同行与马斯克本人的回应,成为“极致奉献”的象征。

 

这些事例并非孤立现象,而是马斯克管理体制的核心体现:

 

全员以任务完成为唯一衡量标准,在不惜个人生活成本的条件下追求快速执行。

 

马斯克对组织流畅和成本效率的执念,也体现在他接手推特后大规模裁员与重新设定公司节奏的做法上。

 

他接管后短时间内削减了约 50% 的员工,以期通过快速精简来降低成本并重塑团队结构。

 

与此同时,他的内部沟通中强调“长时间高强度工作是继续留任的前提”,并要求员工亲自回到办公室工作、放弃远程安排。这样的政策在推特内部引发了大量讨论与反弹。

 

这种以极限 KPI 和严格劳动投入作为衡量绩效指标的方式,反映出马斯克对“成果优先、短期快速推进”的坚定信念,但也因此产生了显著的压力文化。

 

长期以来,马斯克管理方式的成功也伴随着争议。批评者认为他的严苛要求置工作效率于健康和心理福祉之上,尤其是在后疫情时代的职场环境中,这种风格显得格格不入。

 

例如,马斯克在推特上曾要求员工在特定期限内选择接受“高强度工作”或离职与三个月遣散费的方案,这种二选一的选择在劳动力市场中引发了关于员工权利与企业管理伦理的广泛讨论。

 

尽管马斯克支持者认为这种做法有助于推动快速创新和执行效率,但批评者指出,这种过度强调短期指标和工作时长的文化,可能会导致高离职率、身心健康问题,以及长期人才流失。

 

尽管存在争议,马斯克模式背后却有其一致性逻辑:他不满足于常规的“业务增长”,而试图推动技术、生产、产品乃至整个人类文明的极限。

 

无论是加速电动汽车普及、实现火箭可复用、还是构建被他视为下一个关键技术节点的人工智能系统,所有这些目标在他眼中都不容许“慢与保守”。

 

他本人也强调领导者的角色不仅仅是分配任务,更是“培养能思考的人”,希望员工不仅知道“做什么”,更要知道“如何思考”以解决复杂问题。

 

这种极端使命感驱动的管理哲学,既是他能够成功推进多个行业边界的动力来源,同时也是造成高压力工作文化的重要根源。

 

参考链接:

https://yuhuaiwu.github.io/?utm_source=chatgpt.com

https://www.businessinsider.com/elon-musk-xai-loses-cofounder-tony-wu-2026-2?utm_source=chatgpt.com

发布时机把握得很好,在所有人都被 Seedance 的视频热度吸引时,字节又推出了全新文生图模型 Seedream 5.0。

该版本集成了网络搜索功能,并支持 2K 原生输出,使其成为 Nano Banana Pro 的高性价比替代方案。该模型现已上线 CapCut、剪映和 Skylark 平台,并在即梦 AI 平台开启灰度测试。目前在 CapCut 上,有限时 20 次免费图片生成。

官方表示,新版本在理解图像内容、生成速度和视觉效果方面均有显著提升。它能更精准地解读上下文、风格和细节,从而减少重复编辑的需求,在 Dreamina 中创建图像更加流畅可靠。

此外,在生成后,用户可以通过交互式笔刷编辑,对画面元素进行精准、智能的调整;同时,视角控制能力的提升,也让场景扩展与画面构图更加灵活多样,拓展画面空间与表现视角。

该功能还使 Seedream 5.0 在生成图像时能够利用更加全面、更新及时的信息。通过融合对网络层级内容的理解,AI 生成的画面在内容上更加贴近现实背景和时代语境,尤其适用于热点话题、现代设计以及对场景语境要求较高的视觉创作,最终呈现出更加丰富、贴合需求的视觉效果。

有用户表示,在 4K 分辨率下,人物皮肤纹理表现有所提升,同一组图像的多样性更好,整体氛围感也很出色。不过,文字渲染效果看起来相比 4.5 版本并没有明显改进。

有网友评价,图像生成的竞争已经不再只是比拼审美表现。Seedream 5.0 将重点放在检索准确性、4K 级放大能力以及工作流层面的精度控制上。字节跳动押注的是“实用性”而不是“艺术性”,认为真正推动专业用户采用的关键在于效率与可靠性。

至于能不能取代 Nano Banana Pro,我们让两者同时生成了一份稍微复杂些的北京菜单,Nano Banana Pro 速度上更快,而效果似乎也赢了。(上图中,横版是 Nano Banana Pro,竖版是 Seedream 5.0,具体表现很直观了)就像网友说的,可能还需要一段时间才能实现取代。

本文最初发布于博客 TheNewStack。

图片来自 Unsplash+

 

前端开发者正在回归原生 JavaScript。以下是原生 API 和 AI 工具如何使原生 JS 成为框架疲劳的解药。

 

每个人都累了,框架疲劳不再只是一个梗:它是一种集体倦怠。曾经竞相掌握 React、Vue 和 Svelte 的开发者们,现在正悄悄回归他们曾经抛弃的简单性:原生 JavaScript。

 

Web 的天平正在向极简主义倾斜。原生浏览器 API 的兴起、注重性能的开发理念和 AI 辅助编码的浪潮,不仅让原生 JavaScript 开发再次变得可行,而且重新焕发了生机。这是在经历多年的代码膨胀、抽象概念和 npm 依赖噩梦之后的一剂宿醉解药

 

框架时代的临界点

多年来,框架一直是开发者的默认选择。它们承诺带来规范性、可扩展性和社区支持。但随着框架的发展,其复杂性也随之增加。打包器变得越来越重,构建时间不断增加,运行“Hello World”项目的一行代码平均就需要数兆字节的依赖。开发者开始质疑:所有这些脚手架真的值得吗?

 

问题不在于框架本身,而在于围绕它们发展起来的文化。每个月都有新的框架涌现,每个都声称修复了上一个框架的问题。企业为了跟上不断变化的生态系统,重构了整个产品。结果呢?无休止的迭代,伪装成创新的技术债务,以及陷入重学循环的开发者。

 

到 2025 年,人们意识到:Web 不需要另一层,它需要的是重置,而这个重置以原生 JavaScript 的形式出现。

 

原生 API 已经成熟

现代浏览器不再是过去那个不稳定的沙箱。在过去的几年中,像 Fetch、Web 组件和 ES 模块这样的 API 已经发展为成熟的生产级工具,取代了框架曾经提供的功能。曾经那些需要 React 钩子或状态管理库才能完成的任务,现在使用原生解决方案,只要几行简洁的代码就能顺利运行。

 

特别是 Web 组件标准改变了游戏规则。它为开发者提供了框架的模块化和封装性,而又不会有框架锁定的问题。结合 Shadow DOM、自定义元素和模板字面量,开发者现在可以构建可重用、自包含的小部件,它们可以在任何地方运行。

 

这种成熟度的提升意味着开发者终于可以使用浏览器提供的原生功能来构建动态、可维护的响应式界面。由依赖项、构建工具和样板代码带来的“框架税”不再是强制性的。选择原生 JS 不是因为复古,而是因为它再次变得高效。

 

性能成为新货币

如今的 Web 讲究速度。用户期望近乎即时的交互,搜索引擎算法会惩罚速度缓慢的页面。严重依赖框架的应用可以做得很复杂,但它们难以提供一致的性能,尤其是在移动设备上。开发者重新认识到,最好的优化不是添加另一个优化库,而是编写更少的代码。

 

2025 年,原生 JavaScript 重新进入主流,主要是因为应用程序启动更快、渲染更快、调试更容易。没有庞大的捆绑包、水合脚本或协调算法,加载时间大幅下降。每节省一千字节,就能留住一个用户。这种转变是务实的:响应速度提高 50 毫秒的价值远高于 JSX 语法糖或响应式绑定带来的价值。

 

这并非意味着框架的死亡,它们仍然主导着企业环境,但在那些注重敏捷性和性能而非遗留架构和抽象概念的项目中,Web 的天平已经向“无框架区”倾斜。这剂宿醉解药不是关于反叛,而是关于清晰度。

 

AI 工具使简单再次强大

讽刺的是,AI 加速了回归简单的过程。现在,开发者使用基于 AI 的编码助手来生成样板代码、调试程序和建议简洁的原生代码。语法越直接,AI 就越有效,而框架的专有约定和抽象层,常常使这些系统感到困惑。

 

有了 AI 处理那些重复的模式,开发者不再需要框架来提高生产力。一个简单的提示就可以利用原生 JS 直接构建响应式 UI 或实现事件处理,完全避免了框架带来的认知负担。突然之间,“框架节省时间”的旧论点不再成立。

 

此外,AI 辅助重构使梳理遗留框架变得更容易。团队可以逐步迁移,用原生等价物替换框架组件。这不是对早期 Web 的怀旧,而是在智能工具盛行的时代有意识地回归本源。

 

微前端和无构建架构的兴起

越来越多的现代项目采纳了微前端原则:独立的小型 UI 模块单独加载并通过共享契约通信。

 

这种模块化转变也符合现代容器的安全实践,其中的独立单元在部署和更新时可以施加更严格的控制,最小化攻击面。

 

同样,这种理念与原生 JS 完美契合。没有集中化的构建系统或复杂的依赖树,开发者可以按模块推送更新,并保持各团队的灵活性。

 

无构建运动与此相辅相成。像ESBuild 和 Vite这样的工具已经将编译简化到了几乎看不见的程度,但最终目标是完全不需要构建步骤。原生模块导入使得这一愿景成为现实。开发者可以直接从编辑器将更新推送到生产环境,无需等待管道进行转译或打包。

 

这种转变重新定义了“轻量级”的真正含义。2026 年,现代的原生 JavaScript 项目绝不是原始粗糙的,而是精准如手术刀的。它只恰到好处地完成需要做的事,不多也不少。在一个痴迷于速度和控制的世界里,这不仅仅是优雅,还是竞争优势。

 

学习曲线倦怠和开发者自主性

开发者们已经筋疲力尽。每隔几个月,就有一个新的框架承诺带来救赎,但结果只是用另一个抽象替换前一个。紧跟“最新”发展所带来的认知负担变得不可持续。原生 JavaScript 提供了一个减压阀,一个不会随着下一个 GitHub 公告而过期的公共基础。

 

你不需要记住一个新的钩子系统、状态 API 或指令语法。你只需要理解这门语言,重拾自主性,让编程创作的掌控权回到开发者手中。他们可以专注于解决问题,而非死记硬背语法模式。

 

随着教育系统的跟进,JavaScript 训练营和高校开始重新强调基础知识。其结果将是:依赖框架的开发者减少,能够在核心层面推断性能、结构和行为的开发者增多。这种重置既是文化的,也是技术的。

 

生态系统再平衡

回归原生 JavaScript 并不意味着框架的灭绝,但它确实重新定义了它们的目的。框架正在演变成可选层,而不是默认配置。它们的存在是为了解决特定的大规模问题,而不是嵌入到每一个登录页和小部件中。

 

React 、Vue 和 Svelte 正在悄悄地精简冗余,提升互操作性。生态系统正在围绕原生标准而不是专有语法凝聚共识。框架作者如今秉持“渐进式采用”的设计理念,这意味着开发者可以选择某个框架而不被锁定。

 

这种再平衡也反映了其他技术领域的发展轨迹。正如 DevOps 逐渐从工具导向转向文化导向,2026 年的前端开发也将更注重使用效率而非工具选择。原生 JS 并非一种厌弃,而是重新校准。

 

小结

框架宿醉不是永久的,它是一个警钟。开发者们终于意识到,进步不是关于抽象的堆叠,而是掌握它们下面的基础知识。原生 JavaScript,曾经被认为“太简陋”,现在已经演变成了一个更简洁的 Web 背后的强大引擎。

 

2026 年,用原生 JavaScript 编写代码并不意味着你在倒退,反而意味着你在前进——清晰、可控以及一个五年后仍然有意义的代码库。框架将继续演变,工具将继续增多,但解决方案将保持不变:剥离掉所有不必要的部分,回归到真正支撑 Web 运行的核心。

 

声明:本文为 InfoQ 翻译,未经许可禁止转载。

 

原文链接:https://thenewstack.io/why-developers-are-ditching-frameworks-for-vanilla-javascript