2026年2月

传统开放平台的粗放式管控逻辑,无法适配GraphQL查询灵活度高、资源消耗差异大的运行特征,极易引发资源分配不均、服务负载失衡、价值核算模糊、交互行为无迹等问题,既会挤压优质开发者的使用空间,也会让平台陷入运营不可持续、权责无法界定的困境。构建成熟的GraphQL开放平台,需要从底层运行逻辑出发,摒弃标准化接口开放的固化思维,以资源精细化计量、价值对等化核算、行为全周期溯源为核心,打造无侵入、可动态适配、全链路可控的治理体系,既保留GraphQL高效数据交互、灵活查询组合的核心优势,又为第三方开发者提供稳定、公平、透明的接入环境,同时保障平台资源合理分配、运营可持续推进,这一实践路径也是当前企业级技术开放生态构建中,最具技术深度与落地价值的核心方向,唯有打通管控与开放的边界,才能让GraphQL开放平台成为连接平台与第三方的高效纽带,实现生态各方的价值共赢。

配额模型的设计核心是实现资源维度的颗粒化拆解与动态化调度,彻底抛弃传统接口按调用次数单一计量的管控模式,深度结合GraphQL查询请求的运行特征,构建多维度、可量化的资源计量体系,从查询结构复杂度、字段聚合量级、数据分片加载量、服务连接占用时长、响应传输带宽消耗等多个层面,精准定义每一次请求的资源占用权重,让配额管控与实际资源消耗完全匹配。基于第三方开发者的生态定位与业务场景,搭建三级分层配额体系,为入门探索型开发者配置普惠型基础配额,覆盖轻量测试与小型场景使用需求,最大程度降低生态接入门槛;为成长型业务开发者配置弹性浮动配额,结合其业务运行的时段波动、查询规律,自动调整配额阈值,保障业务高峰期的服务稳定性,低谷期自动释放闲置资源;为深度战略合作开发者配置专属隔离配额,搭建独立的资源供给通道,避免与其他开发者产生资源争抢,保障核心业务的持续稳定运行。配额管控体系还需搭建智能预警与平滑过渡机制,通过实时监测资源消耗速率,在配额消耗至临界区间前,向开发者推送多渠道精准提示,同时配置短时缓冲配额,避免请求直接中断影响业务连续性,再结合平台整体资源负载情况,搭建跨开发者的资源智能调度机制,让平台资源实现最优分配,既杜绝资源无序挤占与浪费,也让每一位第三方开发者都能获得匹配自身需求的资源保障。

计费模型的构建需坚守价值对等与生态公平的核心原则,打造可量化、透明化、弹性化的计量计费体系,让费用核算与开发者实际消耗的平台资源、使用的开放价值完全匹配,摆脱单一固定计费模式对生态发展的束缚。首先要构建标准化计费计量单元,将GraphQL查询的算力消耗、传输带宽占用、专属能力使用、服务保障等级等核心要素,转化为统一可核算的计量指标,确保计费的精准性与公平性,让每一笔费用都对应真实的服务价值输出。在此基础上设计多元化适配的计费套餐体系,轻量化体验套餐面向个人开发者与试验性业务场景,以极低门槛获取核心开放能力使用权限,满足探索与测试需求;弹性按量套餐面向中小规模业务开发者,按实际资源消耗实时核算费用,无需承担固定成本,完美适配业务发展的不确定性;专属包期套餐面向大规模合作开发者,以周期化付费模式获取稳定资源供给与专属服务支持,大幅降低长期使用成本。同时搭建梯度递减的生态激励计费规则,随着开发者资源使用量的提升,逐步降低单位计量费用,激励开发者深度融入生态、拓展业务场景,还要打造实时可视化的费用明细展示通道,让开发者可随时查看资源消耗轨迹、计量数据、费用构成与结算明细,再建立异常消耗甄别与豁免机制,对非业务性测试请求、系统调试类消耗予以费用减免,全方位保障开发者的合理权益,让计费体系成为生态良性循环的核心纽带,而非阻碍开发者接入的壁垒。

审计模型的核心价值是搭建全流程、可追溯、双向可视的行为溯源体系,让平台与第三方开发者的每一次接入认证、每一笔资源消耗、每一次费用核算都有完整记录、权责清晰,这并非简单的运行数据留存,而是覆盖接入校验、请求解析、资源调度、配额核销、费用结算全生命周期的多维审计框架。审计体系需构建完整的核心要素采集维度,包含开发者身份唯一标识、查询请求特征描述、资源使用明细轨迹、配额变动实时记录、计费核算原始依据等关键信息,确保每一个操作环节都能精准溯源,不遗漏任何核心数据节点。在审计数据的管理层面,采用轻量化持久化存储方案,在保障数据完整性与长期可查性的同时,避免过度占用平台资源,同时搭建高效多维检索机制,支持按开发者主体、时间周期、资源类型、请求特征等维度快速定位审计信息,同时满足平台管控核查与开发者自主核验的双重需求。审计设计需严格坚守隐私保护与合规边界,仅采集平台管控与价值核算必需的数据,绝不触碰第三方开发者的业务核心信息与隐私数据,同时实现审计数据的双向可视化展示,平台运营方可通过审计数据优化管控策略、调整资源分配规则,开发者可通过审计数据核对自身使用情况、核查费用明细,让透明化的审计体系成为构建平台与开发者信任关系的核心支撑,清晰界定双方权责边界,有效规避协作过程中的各类争议,为开放生态的稳定运行筑牢信任根基。

配额、计费、审计三大模型并非相互独立的运行模块,而是数据互通、逻辑联动、协同运行的有机整体,三者之间的高效数据流转与策略协同,是GraphQL开放平台实现全域治理的关键。配额模块的实时消耗数据会同步推送至计费与审计模块,成为费用核算的核心依据与行为审计的关键数据源;计费模块的套餐等级、付费状态与服务协议,会反向驱动配额阈值的自动调整,为不同等级的开发者匹配对应的资源供给标准与服务保障能力;审计模块采集的全链路运行数据,则会持续反哺配额与计费模型的优化迭代,通过深度分析开发者的查询习惯、资源消耗规律、业务运行特征,不断细化配额管控粒度、优化计费核算精准度、完善管控策略适配性。基于三大模块的协同逻辑,搭建平台动态调控中枢,实时汇聚全维度运行数据,实现资源分配、费用核算、行为审计的一体化自动化管控,无需人工干预即可完成策略调整与资源调度,保障平台运行的高效性与稳定性。同时,这套协同体系采用模块化解耦设计,预留灵活的扩展适配空间,可完美适配GraphQL开放能力的迭代升级与新业务场景的接入需求,新增开放功能时,仅需为三大模块添加对应的计量、计费与审计维度,无需重构整体架构,确保平台在生态持续扩展的过程中,始终保持管控的稳定性、高效性与兼容性。

GraphQL开放平台的建设并非一次性的工程落地,而是以配额、计费、审计三大治理模型为核心,持续迭代优化、培育生态价值的长期系统性工程,平台的核心竞争力不仅在于开放能力的丰富度,更在于治理体系的成熟度、生态的友好度与运行的稳定性。依托三大模型积累的海量运行数据,持续优化管控策略与适配规则,不断细化资源分配逻辑、完善计费核算精度、提升审计溯源效率,让平台管控从被动约束逐步转向主动适配,最大程度贴合第三方开发者的实际使用需求。同时搭建生态共建反馈机制,开放管控规则优化、功能迭代建议的反馈通道,让第三方开发者深度参与到平台治理的迭代过程中,结合真实使用体验提出优化建议,形成平台主导、多方参与、共建共享共赢的生态格局。

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;

最近想试一下新款模型的能力, 于是打算用全自动模式写个 VScode codex 账号切换插件.

在从来没有写过 VSCode extension 的前提下, 全程用 GPT-5.3-Codex Extra High, 从写文档开始总共花了大概 6 小时完成了一个能用的原型. 项目有效代码行数大约 3300 行(不包括文档和 AI Rules 等文件). 消耗的 codex 用量大约是 Business 订阅的 weekly 总量的 20%. 网页端 ChatGPT 5.2 Pro 的对话次数倒是很金贵, 大概一个月使用不超过 20 轮的样子.

根据用户给出的项目需求描述和大致设计的 prompt, ChatGPT 5.2 Pro (Extended) 给出的详细设计实施方案以及各个 Phase 的执行 prompt 的质量不错, 就是 thinking 等待时间较长, 生成初步方案花了 30 分钟. 后面根据第一轮的方案细化需求(登录时自动更新用户 auth 文件, 用量统计, 自动刷新等)生成第二版方案(Standard)差不多也要等 20 多分钟. 总计 3 轮对话完成最终的方案设计.

虽然项目很小, 原理也简单(auth.json), 但是编码全程只需要按各个 Phase 的 prompt 输入,一路自动执行, 每个 Phase 执行完提交一次. 遇到过一次寻找 codex.exe 路径的 bug, 反馈了之后一次就修好了. 这期间没有人工 review 过代码, 只是在每个 Phase 完成时候手动测试指定功能. 整个过程中 VSCode 的 codex 插件有时候会在提示用户点击选项时卡住. 生成代码时倒是很稳定, 不会出现 Antigravity 中那样需要 retry 的 Agent error. 不过 codex 在单个文件有大范围修改时倾向于删掉整个文件重写, 不知道具体原因是什么.

当然这种项目我是肯定不会发出去害人的, 自己凑合用用没问题, 炸了就修. 后续再测试一下他在一万行有效代码项目中的表现.

现在 AI 编程给我的感觉就类似辅助驾驶, 在简单场景下很方便, 但是营销吹的太过, 厂家又不负责. 要真正用好它,首先自己必须有编程基础(有驾照), 并且了解项目的相关领域和技术栈(驾驶准驾车型), 对 AI 能力边界有认知(知道哪些情况不能用辅助驾驶),要不然出个意外肯定翻车了(AI 弄出的 bug, 用户自己也不会修)
全自动一路 Yes, 不人工 review 完成的这种项目仅限于快速原型验证和自用项目, 真要开源给别人用或者正式交付肯定是不行的.

阿里千问 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

设备是 14 寸 m4 pro 12+16 。

充电器是 anker 140w 带屏显那款。

充电器 c1/c2 支持 28V/5A 输出,但是接上设备后只能握手 100w ,且玩游戏时候(此时整机功耗在 70-80w )还会从电池取电,大概 1w 左右。

换了 MagSafe 和充电器送的 c 口线都是一样,只能握手 100w 。

通过

ioreg -rw0 -c AppleSmartBattery | grep -i "UsbHvcMenu"

查询也只看到了最高 20V/5A 的握手速度,所以是充电头的问题吗?
就算 100w ,但是为啥高功耗依旧会从电池取电?

有人遇到过类似问题吗。

春节的脚步越来越近,但关于 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多平台发布

在阿里云百炼调优完成的模型可以下载到本地部署吗?

阿里云百炼平台进行调优的模型不支持导出,只支持在阿里云百炼上部署后测试、调用。

最近 kiro 感觉被薅羊毛弄多了,只有 4.5sonnet,做一个简单的图片裁剪网站
https://imageratioconverter.com 都搞了半天,听说 codex 非常牛逼,但是又没有发布 windows 版本 不知道是自己写提示词有问题还是咋,vibing coding 的大佬们能否分享下经验 或者有什么好用的工具或者思路?

 1. 搞事前准备

  • 先瞅瞅系统对不对版

    打开终端,先跑俩命令,确认下是 Kylin V10 而且是 64 位的。

    cat /etc/os-release
    uname -m
看到结果里有 `Kylin Linux`和 `x86_64`就没毛病。
  • 找到你的 RPM 包在哪

    安装包下载:https://pan.quark.cn/s/d211d9d4b95e ,假设你把下载好的包放在 /home/你的用户名/下载/这个文件夹里了。先切到这个目录,并看看文件在不在。

    cd /home/你的用户名/下载
    ls -l minizip-1.2.11-20.ky10.x86_64.rpm
能列出文件信息,就说明地方找对了。
    • *

 2. 开整,开始安装

还是老规矩,推荐用第二种方法,能帮你自动处理那些烦人的依赖。

方法一:用 rpm命令硬上弓

这个方法最简单粗暴,但万一缺东西,你得自己一个个去找。

  1. 执行安装

    在 RPM 包所在的目录,直接敲命令:

    sudo rpm -ivh minizip-1.2.11-20.ky10.x86_64.rpm
-   `-i`是安装的意思
-   `-v`让你看详细过程
-   `-h`会给你弄个百分比进度条看着
  1. 缺啥装啥

    如果报错了,八成是提示你缺依赖。比如可能告诉你缺 zlib-devel之类的。这时候你就得按照它说的,把缺的包装上,然后再回来重新执行一遍上面的命令。

方法二:用 dnf或 yum命令装 (强烈推荐)

这个法子最省心,它会自动连上网去软件库里把需要的依赖都给你搞定。

  1. 执行安装

    还是在那个目录下,执行下面任意一个命令:

    # 如果你的系统默认是 dnf
    sudo dnf install ./minizip-1.2.11-20.ky10.x86_64.rpm
    
    # 或者,如果系统默认是 yum
    sudo yum localinstall minizip-1.2.11-20.ky10.x86_64.rpm
输完密码,它会分析一下,然后问你要不要继续,你输入 `y`然后回车就成了。
    • *

3. 验验货,看装好没

装完了,总得检查一哈。

在终端里输入这个命令:

rpm -q minizip

要是屏幕回显 minizip-1.2.11-20.ky10.x86_64,那就可以放心了,妥妥地装成功了!

1. 库的概览与核心价值

想象一下,如果你需要从零开始搭建一个完整的网站,就像要盖一栋房子却只有一堆泥土和木材——你需要自己设计地基、砌墙、装修,还要处理水电、门窗等细节。这个过程不仅耗时,而且充满风险。

Django 正是为解决这种复杂性而生的"全能建筑团队"。作为 Python 世界中最受欢迎的 Web 框架,Django 遵循"batteries included"(自带电池)的设计哲学,为开发者提供了构建 Web 应用所需的一切核心组件:ORM 对象关系映射、自动化的管理后台、强大的表单处理、用户认证系统、模板引擎等。

在 Python 生态中,Django 定位为"企业级全栈框架"。相比于 Flask 的轻量灵活和 FastAPI 的高性能异步,Django 更注重"快速开发"和"安全稳定"。它特别适合需要快速构建内容管理系统(CMS)、电商平台、社交网络等数据驱动的复杂 Web 应用。

Django 的不可替代性体现在:它让开发者能够专注于业务逻辑,而不是重复造轮子。正如 Instagram、Pinterest、Mozilla 等知名公司的选择,Django 在保证开发效率的同时,也提供了足够的安全性和可扩展性。

2. 环境搭建与 "Hello, World"

安装说明

在开始之前,请确保你的系统已安装 Python 3.10 或更高版本。Django 5.0 支持 Python 3.10-3.12。

方式一:使用 pip 安装(推荐)

pip install django==5.0

方式二:使用 conda 安装

conda install django=5.0

常见安装失败原因及解决方法:

  • 权限不足:使用 pip install --user django 或虚拟环境
  • 网络问题:使用国内镜像源,如 pip install django -i https://pypi.tuna.tsinghua.edu.cn/simple
  • 版本冲突:确保 Python 版本符合要求

最简示例:第一个 Django 项目

让我们创建一个最简单的 Django 项目,输出 "Hello, World!":

# 1. 创建项目
django-admin startproject mysite

# 2. 进入项目目录
cd mysite

# 3. 启动开发服务器
python manage.py runserver

逐行解释:

  1. django-admin startproject mysite:使用 Django 提供的命令行工具创建一个名为 "mysite" 的项目。这会自动生成项目的基本目录结构和配置文件。
  2. cd mysite:进入刚创建的项目目录。这是运行后续 Django 命令的必要步骤。
  3. python manage.py runserver:启动 Django 内置的开发服务器。manage.py 是 Django 项目的管理工具脚本,runserver 命令会启动一个轻量级的 Web 服务器,默认监听 8000 端口。

运行结果:

启动成功后,在浏览器中访问 http://127.0.0.1:8000/,你将看到 Django 的欢迎页面,显示 "The install worked successfully! Congratulations!",这表示你的 Django 环境已经正确搭建。

要输出 "Hello, World!",我们需要进一步创建视图和路由:

# mysite/views.py
from django.http import HttpResponse

def hello_world(request):
    return HttpResponse("Hello, World!")
# mysite/urls.py
from django.urls import path
from . import views

urlpatterns = [
    path('', views.hello_world, name='hello_world'),
]

现在访问 http://127.0.0.1:8000/,就能看到 "Hello, World!" 了。

3. 核心概念解析

Django 的核心架构基于 MVT 模式(Model-View-Template),这是对传统 MVC 模式的一种变体。理解这三个核心概念及其交互关系是掌握 Django 的关键。

3.1 Model(模型)- 数据层

Model 是 Django 与数据库交互的桥梁,它是一个 Python 类,继承自 django.db.models.Model。每个 Model 类对应数据库中的一张表,类的属性对应表的字段。

核心作用:

  • 定义数据结构和字段类型
  • 提供数据验证规则
  • 封装数据库操作(增删改查)
from django.db import models

class Article(models.Model):
    title = models.CharField(max_length=200)
    content = models.TextField()
    created_at = models.DateTimeField(auto_now_add=True)
    
    def __str__(self):
        return self.title

3.2 View(视图)- 业务逻辑层

View 在 Django 中相当于传统 MVC 的 Controller,它负责处理 HTTP 请求、执行业务逻辑、与 Model 交互,并决定返回什么响应。

核心作用:

  • 接收用户请求
  • 调用 Model 获取或处理数据
  • 选择合适的 Template 进行渲染
  • 返回 HTTP 响应
from django.shortcuts import render
from .models import Article

def article_list(request):
    articles = Article.objects.all()
    return render(request, 'articles/list.html', {'articles': articles})

3.3 Template(模板)- 表现层

Template 负责数据的展示和页面的渲染,使用 Django 模板语言(DTL)将动态数据嵌入 HTML 中。

核心作用:

  • 定义页面结构
  • 接收 View 传递的数据
  • 使用模板语法动态渲染内容
  • 实现页面复用(继承、包含)
{% for article in articles %}
    <h2>{{ article.title }}</h2>
    <p>{{ article.content }}</p>
    <p>发布时间:{{ article.created_at|date:"Y-m-d" }}</p>
{% endfor %}

MVT 架构交互流程

下图展示了 Django MVT 架构中各组件的交互关系:

graph TD
    A[用户浏览器] -->|HTTP请求| B[URL路由系统]
    B -->|匹配URL模式| C[View视图]
    C -->|查询/操作数据| D[Model模型]
    D -->|返回数据| C
    C -->|传递上下文数据| E[Template模板]
    E -->|渲染HTML| C
    C -->|HTTP响应| A
    
    style A fill:#e1f5ff
    style B fill:#fff4e1
    style C fill:#ffe1f5
    style D fill:#e1ffe1
    style E fill:#f5e1ff

交互流程说明:

  1. 用户通过浏览器发送 HTTP 请求
  2. URL 路由系统根据 URL 模式匹配到对应的 View
  3. View 调用 Model 进行数据操作(查询、创建、更新、删除)
  4. Model 返回处理后的数据给 View
  5. View 选择合适的 Template,并将数据传递给它
  6. Template 渲染生成 HTML 页面
  7. View 将渲染后的页面作为 HTTP 响应返回给用户

4. 实战演练:构建一个简单的博客系统

让我们通过一个完整的迷你项目——简单的博客系统,来实践 Django 的核心功能。这个项目将实现文章的列表展示、详情查看、后台管理等功能。

需求分析

我们要构建一个具备以下功能的博客系统:

  • 在后台管理界面创建、编辑、删除文章
  • 前台展示文章列表
  • 点击文章标题查看文章详情
  • 显示文章的发布时间

方案设计

我们将使用 Django 的以下核心功能:

  • Model:定义 Article 模型,包含标题、内容、发布时间字段
  • Admin:使用 Django 自带的管理后台快速实现文章管理
  • View:创建列表视图和详情视图
  • Template:设计文章列表页和详情页
  • URL 路由:配置 URL 模式

代码实现

步骤 1:创建项目和应用

# 创建项目
django-admin startproject blog_project
cd blog_project

# 创建博客应用
python manage.py startapp blog

步骤 2:定义数据模型

# blog/models.py
from django.db import models

class Article(models.Model):
    """文章模型"""
    title = models.CharField('标题', max_length=200)
    content = models.TextField('内容')
    created_at = models.DateTimeField('发布时间', auto_now_add=True)
    updated_at = models.DateTimeField('更新时间', auto_now=True)
    is_published = models.BooleanField('是否发布', default=True)
    
    class Meta:
        ordering = ['-created_at']
        verbose_name = '文章'
        verbose_name_plural = '文章'
    
    def __str__(self):
        return self.title

步骤 3:注册到管理后台

# blog/admin.py
from django.contrib import admin
from .models import Article

@admin.register(Article)
class ArticleAdmin(admin.ModelAdmin):
    list_display = ['title', 'is_published', 'created_at', 'updated_at']
    list_filter = ['is_published', 'created_at']
    search_fields = ['title', 'content']
    list_editable = ['is_published']
    date_hierarchy = 'created_at'

步骤 4:创建视图函数

# blog/views.py
from django.shortcuts import render, get_object_or_404
from .models import Article

def article_list(request):
    """文章列表视图"""
    articles = Article.objects.filter(is_published=True)
    return render(request, 'blog/article_list.html', {'articles': articles})

def article_detail(request, article_id):
    """文章详情视图"""
    article = get_object_or_404(Article, id=article_id, is_published=True)
    return render(request, 'blog/article_detail.html', {'article': article})

步骤 5:配置 URL 路由

# blog/urls.py
from django.urls import path
from . import views

urlpatterns = [
    path('', views.article_list, name='article_list'),
    path('article/<int:article_id>/', views.article_detail, name='article_detail'),
]
# blog_project/urls.py(项目主路由)
from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('blog.urls')),
]

步骤 6:创建模板文件

<!-- blog/templates/blog/base.html(基础模板)-->
<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>{% block title %}我的博客{% endblock %}</title>
    <style>
        body { font-family: 'Microsoft YaHei', sans-serif; max-width: 800px; margin: 0 auto; padding: 20px; }
        .header { border-bottom: 2px solid #333; padding-bottom: 10px; margin-bottom: 20px; }
        .article { border: 1px solid #ddd; padding: 15px; margin-bottom: 15px; border-radius: 5px; }
        .article-title { color: #333; text-decoration: none; }
        .article-title:hover { color: #0066cc; }
        .meta { color: #999; font-size: 0.9em; margin-top: 10px; }
        .content { line-height: 1.8; margin-top: 20px; }
        .back-link { display: inline-block; margin-top: 20px; color: #0066cc; }
    </style>
</head>
<body>
    <div class="header">
        <h1><a href="{% url 'article_list' %}" style="text-decoration: none; color: #333;">我的博客</a></h1>
    </div>
    {% block content %}{% endblock %}
</body>
</html>
<!-- blog/templates/blog/article_list.html(文章列表页)-->
{% extends 'blog/base.html' %}

{% block title %}文章列表 - 我的博客{% endblock %}

{% block content %}
    <h2>最新文章</h2>
    {% for article in articles %}
        <div class="article">
            <h3><a href="{% url 'article_detail' article.id %}" class="article-title">{{ article.title }}</a></h3>
            <div class="meta">
                发布时间:{{ article.created_at|date:"Y年m月d日 H:i" }}
                {% if article.updated_at != article.created_at %}
                    | 更新时间:{{ article.updated_at|date:"Y年m月d日 H:i" }}
                {% endif %}
            </div>
        </div>
    {% empty %}
        <p>暂无文章</p>
    {% endfor %}
{% endblock %}
<!-- blog/templates/blog/article_detail.html(文章详情页)-->
{% extends 'blog/base.html' %}

{% block title %}{{ article.title }} - 我的博客{% endblock %}

{% block content %}
    <div class="article">
        <h2>{{ article.title }}</h2>
        <div class="meta">
            发布时间:{{ article.created_at|date:"Y年m月d日 H:i" }}
            {% if article.updated_at != article.created_at %}
                | 更新时间:{{ article.updated_at|date:"Y年m月d日 H:i" }}
            {% endif %}
        </div>
        <div class="content">
            {{ article.content|linebreaks }}
        </div>
        <a href="{% url 'article_list' %}" class="back-link">← 返回文章列表</a>
    </div>
{% endblock %}

步骤 7:配置应用设置

# blog_project/settings.py
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'blog',  # 添加我们的博客应用
]

步骤 8:生成数据库和创建超级用户

# 生成数据库迁移文件
python manage.py makemigrations

# 执行迁移,创建数据库表
python manage.py migrate

# 创建超级用户(用于登录管理后台)
python manage.py createsuperuser
# 按提示输入用户名、邮箱、密码

运行说明

启动开发服务器:

python manage.py runserver

访问管理后台:

  1. 在浏览器中访问 http://127.0.0.1:8000/admin/
  2. 使用刚创建的超级用户账号登录
  3. 在 "文章" 管理界面添加几篇文章

查看博客:

  • 访问 http://127.0.0.1:8000/ 查看文章列表
  • 点击任意文章标题查看详情

程序运行结果:
你将看到一个完整的博客系统,包含文章列表、文章详情、后台管理等功能。所有的增删改查操作都通过 Django 的 ORM 自动完成,无需编写任何 SQL 语句。

5. 最佳实践与常见陷阱

常见错误及规避方法

错误 1:忘记在 INSTALLED_APPS 中注册应用

# ❌ 错误做法
# 创建应用后忘记在 settings.py 中注册
python manage.py startapp myapp
# 直接使用模型,导致错误:django.core.exceptions.ImproperlyConfigured

# ✅ 正确做法
INSTALLED_APPS = [
    # ... 其他应用
    'myapp',  # 记得注册应用
]

错误 2:在模板中编写复杂业务逻辑

# ❌ 错误做法
# 在模板中进行复杂的数据处理
{% for article in articles %}
    {% if article.content|length > 100 %}
        <p>{{ article.content|slice:":100" }}...</p>
    {% else %}
        <p>{{ article.content }}</p>
    {% endif %}
{% endfor %}

# ✅ 正确做法
# 在 View 中预处理数据
def article_list(request):
    articles = Article.objects.annotate(
        short_content=Substr('content', 1, 100)
    )
    return render(request, 'blog/list.html', {'articles': articles})

错误 3:直接使用 .get() 而不处理异常

# ❌ 错误做法
# 可能抛出 DoesNotExist 异常导致 500 错误
article = Article.objects.get(id=article_id)

# ✅ 正确做法
# 使用 get_object_or_404 或 try-except
from django.shortcuts import get_object_or_404
article = get_object_or_404(Article, id=article_id)

最佳实践建议

1. 使用虚拟环境隔离项目依赖

# 创建虚拟环境
python -m venv venv

# 激活虚拟环境
# Windows
venv\Scripts\activate
# Mac/Linux
source venv/bin/activate

# 安装依赖
pip install django
pip freeze > requirements.txt

2. 合理组织项目结构

project/
├── apps/
│   ├── blog/
│   └── users/
├── config/
│   ├── settings/
│   │   ├── base.py
│   │   ├── development.py
│   │   └── production.py
│   └── urls.py
├── static/
├── templates/
├── media/
└── manage.py

3. 充分利用 Django Admin 的定制功能

@admin.register(Article)
class ArticleAdmin(admin.ModelAdmin):
    # 列表页显示字段
    list_display = ['title', 'author', 'created_at', 'is_published']
    
    # 启用列表页编辑
    list_editable = ['is_published']
    
    # 添加搜索功能
    search_fields = ['title', 'content']
    
    # 添加过滤器
    list_filter = ['is_published', 'created_at', 'author']
    
    # 添加日期层级导航
    date_hierarchy = 'created_at'
    
    # 每页显示数量
    list_per_page = 20

4. 使用 context processors 共享全局数据

# 创建 context processor
def global_context(request):
    return {
        'site_name': '我的博客',
        'current_year': datetime.now().year,
    }

# 在 settings.py 中注册
TEMPLATES = [
    {
        'OPTIONS': {
            'context_processors': [
                # ... 其他 processors
                'myapp.context_processors.global_context',
            ],
        },
    },
]

5. 善用 Django 的信号机制

from django.db.models.signals import post_save
from django.dispatch import receiver
from .models import Article

@receiver(post_save, sender=Article)
def send_notification(sender, instance, created, **kwargs):
    """文章保存后发送通知"""
    if created:
        # 发送新文章通知
        pass
    else:
        # 发送文章更新通知
        pass

6. 进阶指引

掌握了 Django 的基础知识后,你可以继续探索以下高级主题:

高级功能

  • 类视图(Class-Based Views):使用 ListViewDetailViewCreateView 等通用视图减少代码重复
  • 中间件(Middleware):实现请求/响应的横切关注点,如日志记录、性能监控
  • 信号(Signals):实现解耦的事件驱动编程
  • 缓存系统:使用 Redis 或 Memcached 提升应用性能
  • 异步视图:利用 Django 5.0 的异步支持处理 IO 密集型任务

生态扩展

  • Django REST Framework:构建强大的 RESTful API
  • Celery:处理异步任务和定时任务
  • Django CMS:快速搭建内容管理系统
  • Wagtail:现代化的内容管理系统
  • Django Debug Toolbar:调试和性能分析工具

学习资源

Django 的学习曲线相对平缓,但要真正掌握它的精髓,需要不断地实践和探索。建议从实际项目出发,在解决问题的过程中深入理解各个组件的设计理念和使用技巧。记住,Django 的强大之处不仅在于它的功能丰富,更在于它倡导的"约定优于配置"和"不要重复自己"(DRY)的编程哲学。

模力工场新鲜事

  • 模力工场邀你用 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趋势与实战,我们下期再见!

过去一年,关于 AI 的讨论出现了一种明显的反差:一边是模型能力不断刷新上限,另一边却是越来越多企业开始质疑——为什么真正落地依然这么难?

 

从概念验证到生产系统,从 60% 的“看起来可用”到 99.99% 的“不得不可靠”,企业级 AI 面对的从来不是算力或参数规模的问题,而是数据、决策责任、合规流程以及现实系统复杂性。而这些恰恰是大多数新闻叙事里最容易被忽略的部分。

 

正是在这样的背景下,这期播客给出了一种罕见的“现实视角”。对话并没有继续渲染模型能力的指数级增长,而是把焦点放在一个更基础、也更棘手的问题上:AI 要真正进入企业和关键业务流程,还缺什么?答案指向了一个长期被低估的环节——数据,以及数据背后的人。

 

本期节目的对话者,正是站在这一环节核心位置的人。他所领导的公司,长期为几乎所有一线大模型实验室提供训练所需的基础数据;而在加入这家公司之前,他曾把一个看似边缘的想法,在极短时间内推演成一家年收入 200 亿美元的业务,也亲身经历过科技创业中最极端的法律与商业风险。

 

在这场对谈中,他系统性地拆解了几个被反复误解的问题:

为什么大模型至今仍然离不开人类专家

为什么绝大多数企业数据对 AI 来说毫无价值

以及,当模型开始转向“智能体”和决策能力时,真正的瓶颈到底在哪里

 

以下是播客整理翻译:

 

精华摘要

Lenny:最近有不少反对的声音,认为 AI 并没能满足人们对技术的全部想象,特别是在企业应用领域。您怎么看这个问题?

 

Jason Droege:AI 方案往往需要半年到一年才能真正发展壮大,实现关键业务流程的自动化。跟以往的任何一次重大技术革命一样,新闻媒体总是过度乐观,而实际操作却没那么简单。互联网时代,宽带的铺设过程需要覆盖全国的每一条道路,还要跨大洲之间建立海底光缆,这些都需要时间。

 

Lenny:关于未来两到三年的 AI 模型发展趋势,你觉得当前大家的普遍认知还有哪方面缺失?

 

Jason Droege:目前的总体趋势是从模型到模型功能的过渡。接下来最关键的问题是,大模型能为我们做什么,智能体如何替我们做出决策?

 

Lenny:您在数据、标记、训练等领域都是当之无愧的技术先驱,您能不能展望一下 AI 领域在过去一年半以来的发展轨迹?

 

Jason Droege:一年半之前,大模型的能力极限就是生成一本短篇小说,不同模型生成的小说之间有优劣之分。而现在的大模型已经能帮哪怕最顶尖的 Web 开发者直接生成完整网站了,或者是就癌症诊疗问题给出相当全面且中肯的建议,而这些都需要专业人士耗费几个小时为其提供准确的统计数据。

 

Lenny:您向来以严苛的业务衡量标准著名。那从创业的角度来看,您的核心理念是什么?

 

Jason Droege:这个问题的实质,是大家对于未来机遇的洞察,包括这种洞察来自哪里。为什么你能够在数百万头脑聪慧、乐于尝试的创业者当中脱颖而出,掌握其他人所没有洞察力。谁能做到这一点,谁就可以领先一步。

 

收购之后,Scale 还是 Scale 吗?

 

Lenny:欢迎今天到场的嘉宾 Jason Droge,请先简单向大家介绍一下您的背景。

 

Jason Droege:我是 Scale AI 的新任 CEO,这也是我在接替 Alex Wang 接受 Meta 收购之后参与的首次采访。Alex 现在领导 Meta 旗下的超级智能团队。在加入 Scale AI 之前,我与 Travis Calendar 曾共同创立一家公司,再向前追溯还在 Uber 等几家初创公司工作。我最知名的成果应该是创立并领导了 Uber Eats,跟团队的同事一道把这个点子培养成了如今市值数十亿美元的企业。在 COVID 期间,Uber Eats 几乎是以一己之力支撑起了因社交隔离而陷入瘫痪的 Uber 业务体系。

 

Lenny:这次采访的主题是 AI 模型如何拥有真正的智能。您觉得 Scale AI 在其中扮演了什么角色?

 

Jason Droege:我们在 ChatGPT 和 Claude 身上看到了诸多改进。目前各个前沿领域都存在领军级别的模型,各家实验室则聘请专家填补这些大模型的知识空白,校正其对于事物运作方式的理解。而 Scale 是这一领域的先驱,也可以说是创造了这种业务形态。

 

Lenny:我们都很关心 Scale 的近况以及被 Meta 收购之后的变化。Scale 目前情况如何?

 

Jason Droege:Scale 仍然是一家完全独立的公司。在此次交易中,Meta 投入 140 多亿美元以换取 Scale 公司 49%的无投票权股份,且未获得新的董事会席位。Scale 的董事会保持不变,治理结构几乎未肥影响,Meta 对于 Scale 的任何资源也都不具备优先访问权。我们跟 Meta 一直在数据业务方面保持着长期合作关系,随着双方关系更进一步,各方面合作也有望持续扩大。但我们与其他各方的合作不会受到影响,Meta 无法访问任何之前不对其开放的信息,例如隐私和数据安全政策等。事实上,此次交易只涉及约 15 位员工的变动,而 Scale 共拥有约 1100 名员工。现在我们旗下拥有两大业务部门,其营收都达到了数亿美元规模。公司内部相当于两家独角兽,支撑着每月的业务增长。总之,我们很高兴能够继续构建并交付数据,维持之前的工作模式。

 

数据不是苦力活:标注为何变成专家工作

 

Lenny:您提到 Scale 主要面向 AI 数据市场,那能不能解释一下数据标注工作是怎么从当初的低成本劳动力转向如今的专家处理形式?

 

Jason Droege:没问题。首先,我认为其他竞争对手目前的定位是错误的,所以我先从这个角度切入,再逐渐延伸其他方面。这里我先花点时间介绍一下 Scale 的发展史,还有自 2016 年以来的发展脉络。Alex 很早就意识到,数据对于模型来说至关重要。那时候他只有 19、20 岁,但他已经在考虑要如何围绕这个基本前提建立业务。他最初选择的方向是为自动驾驶做标注。标注数据的质量越高,汽车的行驶表现也会更好。之后这股浪潮演变成了计算机视觉,我们开始跟国防部门建立合作关系,为他们提供标注服务,到这里时间已经来到 2020 年。

接下来大模型的性能越来越强、愈发完善,需要的数据类型也更为丰富。所以我们一直在不断调整以提供所需的数据类型。在此期间,行业本身也在不断变化。记得两、三年前这些大语言模型刚出现的时候,经常会闹出幻觉问题,比如给出特别浅显的错误答案等等。但情况变化很快,我们也一直在随之改变。Scale 一直走在前沿,开始为更复杂的任务提供专家级的数据标注服务。

 

要聊过去一年半的情况我其实不太够格,因为我才加入公司 13 个月。刚加入时,我一直在做模型性能的测试。那时候大模型的能力极限就是生成一本短篇小说,不同模型生成的小说之间有优劣之分。而现在的大模型已经能帮哪怕最顶尖的 Web 开发者直接生成完整网站了,或者是就癌症诊疗问题给出相当全面且中肯的建议,而这些都需要专业人士耗费几个小时为其提供准确的统计数据。

我们的专家中,有 80%的同事拥有学士学位证书,这跟其他竞争对手的定位完全不同。其中约有 15%的员工对相关行业有深入了解。这些高知人群通过为模型添加标签、贡献专业知识来赚取丰厚的收入。我很喜欢我们这种以专家级别进行数据标注的业务定位,这能帮助公司与研究人员保持联系、了解他们的需求。我们内部也很早意识到大模型在高度专业的领域上表现欠佳,所以我们会主动联系开发基座模型的大厂,表示我们注意到了这个问题,而且有专家团队可以搞定。我喜欢这种与众不同的定位,这跟竞争对手的想法完全不同。

 

Lenny:那 Scale 是怎么接洽并挽留这些专家贡献群体的?

 

Jason Droege:确实不太容易接触得到,所以得制定相应的策略。具体的方式肯定不止一种,最主要的就是让专家们相互内推,而且他们很喜欢这种用自己的专业知识为 AI 做贡献的感觉,很酷。比如一位特定领域的博士在面对具体主题时,发现大模型的表现根本无法令人满意。那这时候他就可以通过有偿的方式提供专业建议,并借此赚取数百甚至数千美元。当然,我们也会推动校招,直接跟学校里的教授和学生们交流,询问有没有人愿意参与进来。当然,LinkedIn 等传统渠道也是开放的,但效果最好的还是线下接洽和内推网络。这样能够为参与者提供良好的体验,因为他们的贡献一方面是为了赚钱,但更多是出于为 AI 模型做贡献的成就感。而且这个过程也是在替他们自己解决问题。

 

智能体要学会做事:没有捷径,只有环境

 

Lenny:有报道认为整个 AI 经济生态都将转向强化学习,您对此有何看法?

 

Jason Droege:强化学习当然非常重要,我觉得这种趋势性判断也很有道理。强化学习环境就相当于 AI 智能体的沙箱,它们可以在沙箱中学会如何达成目标。我们在这方面也尝试了一年有余。比如在 Salesforce 实例当中,AI 智能体要如何实现导航?襳中包含哪些需要识别的数据?这要求智能体执行一套可靠性极高的业务流程。

另外,智能体还得知道如果无法完成预期任务,或者判断正确完成任务的可能性较低,那要怎么向人类反馈以获取指引。所有这些都需要训练,而且不存在什么神奇的捷径。唯一的办法就是把 AI 智能体放进能代表人类正确操作的环境当中。

可以想象,现实世界中此类环境的数据和其中的不同目标可以说是无穷无尽,所以我们花了一年多跟模型开发商保持良好的合作关系,共同观察在不同任务/环境下的通用性表现。很明显,这类环境、软件系统、配置、数据类型、规模和用户数量各有不同,复杂性也差异巨大。这

就要求我们制定一种策略,让模型开发商能够收集到足够的通用数据以支撑广泛用例,而不必直接面对上万亿种任务和环境指标的排列组合。有些工作和数据之间具有更强的通用性,可以用一种简单的方式完成任务——比如在日历上找到要参与的访谈,让智能体浏览日历内容并弹出相应提示。接下来要做的,就是把智能体推广到一切日历搜索和日程管理操作。总之数据通用性越强,价值也就越大。我们的工作就是为模型开发商提供最有价值的数据,从而确保智能体尽可能为最终用户提供良好服务。

 

企业 AI 不是演示:从 95% 到‘五个 9’,差着一个世界

 

Lenny:那您能举例聊聊具体向模型实验室提供哪些数据吗?

 

Jason Droege:当然可以。比如说我们的业务分为两个方面:其一是向模型开发商提供数据,也就是出售数据。其二则是向医疗保健系统、保险系统之类客户出售应用程序和服务解决方案。比方说我们跟一家医疗保健系统开发商合作,这套系统目前存在很多问题,部分专家需要定期处理少数罕见病例。因为专家人手不够,所以罕见病例会大量积压。这家医疗保健机构希望接诊更多病人,提供更好的护理体验并减少复诊次数,也就是在第一时间给出准确的诊断并制定治疗方案。如果没有 AI 的帮助,医生得耗费大量时间阅读长达两、三百页的病历文件。而我们开发的工具能帮助他们阅读这些文件,并指出其中最值得注意的五到十条内容。举例来说,某些过敏症状看似不起眼,但却可能跟医生开具的治疗药物发生冲突。AI 工具可以快速提取这种人脑难以容纳的关联性要素,表现出相当完善的诊疗能力。

在这方面,现成的模型肯定会有一定局限性,迫使医疗保健系统内部的人员亲自进行数据标注。不少企业乃至政府部门也会这么做,但仅靠现成模型加上一些零散数据没办法实现特别好的效果。毕竟很多银行或者医院一年的数据量就多达上百 PB,他们自己根本没法判断哪些数据对模型有用。大多数数据都没价值,可怎么从中挑选出少数有价值的?而作为专业服务商,我们在数据的评判、挑选和专业知识储备方面非常出色,能够帮助客户顺利攻克这些瓶颈。

 

Lenny:要保证 AI 变得越来越聪明,咱们人类到底还要参与多久?

 

Jason Droege:首先,数据标注本身就是一段不断创新的历程,就跟自动驾驶汽车一样。现在我们需要的数据标注量已经远远少于过去了,什么时候我们不再需要外部数据、模型的训练不再需要人工数据时,那就已经发展到新的阶段了。换言之,这意味着那时人类提供的一切技能和知识都已经不重要,没办法推动模型的进一步提升了。但对于 Scale 这样的企业,我们一直在研究如何刹那起能够发现新需求,并与贡献者网络合作的运营体系。我们会邀请专家贡献者来挖掘这些数据和信息。另外,他们的很多才能并不会第一时间就表现出价值。比如一年前很多知识对模型没用,但现在却突然有了大用。这是个不断进步的过程,需要将越来越多的数据输入到模型当中。

出于经济动机,我们相信人类永远会在其中占据一席之地。这不只是种商业判断,更是我的个人信念,就像 AI 系统永远要为人类服务一样。我甚至觉得随着脑力岗位的逐渐消失,这就是未来知识工作者的主要转型方向。而且从我对部分客户身上观察到的情况,这种转变很可能在未来一到两年内发生。我当然希望这种颠覆别来得太快,但目前来讲确实是一切皆有可能。

至于从长远来看,新技术总会替代旧方案,比如收音机淘汰了现场播讲之类。人类还是很善于适应这种变化的,技术的发展史就是人类适应新模式的过程。

 

Lenny:您经常会提到“评估”这个词。那评估工作在专家们的日常工作中占比多少?

 

Jason Droege:占比还是相当高的。在企业和政府客户中,大部分业务内容就是评估,因为需要有人来设定“好”的基准。以之前提到的医疗保健来讲,医生在工作中就会评估病历报告和记录内容,然后对“好”做出明确的定义。这样慢慢累积起来的“好”和“正确”,就会让模型变得越来越可用。当然,AI 的能力仍然有局限。对于那些人工流程的准确率很低的场景来说,AI 就特别重要,因为能够切实帮上大忙。如果 AI 在其中能够达到 50%、60%甚至 70%、80%的准确率,那大家就乐疯了。但对于剩余的情况,比如人工流程的准确率能够达到 98%,希望 AI 能解决余下的 2%,那就很困难了。正因为如此,我们才需要明确定义“好”,让自己构建的系统能够代表使用者做出判断。在这样的设计思路下,AI 系统就能像人类一样根据当前的信息尽可能给出最佳建议或者行动方案。

 

Lenny:很多人觉得 AI 是基于海量历史数据训练出来的,那 AI 在智能水平上怎么超越人类呢?

 

Jason Droege:这种理解对,但也不对。首先,跟以往的任何一次重大技术革命一样,新闻媒体总是过度乐观,而实际操作却没那么简单。互联网时代,宽带的铺设过程需要覆盖全国的每一条道路,还要跨大洲之间建立海底光缆,这些都需要时间。而且这些铺设工作总得有人去做。负责任地讲,作为从业者,我对于如今大模型在一致性和准确性方面的提升仍然感觉喜出望外。现在大家可能已经习惯了大模型越来越先进也越来越靠谱,但短短三年前这个问题还相当复杂,需要综合考虑多种因素。总之,大模型的发展是算力、模型本体和数据改进的共同产物,而这三条确实在同时进步。

 

Lenny:关于未来两到三年的 AI 模型发展趋势,你觉得当前大家的普遍认知还有哪方面缺失?

 

Jason Droege:大家对这个问题讨论得倒是不少,新闻报道也是层出不穷。具体怎么理解,要看我们选择怎样的视角。目前的总体趋势是从模型到模型功能的过渡。接下来最关键的问题是,大模型能为我们做什么,智能体如何替我们做出决策。一旦到了这个阶段,我们之前提到的应用环境就非常重要了。比如怎么让智能体在医疗保健系统内正确导航、如何在手机上的天气应用中导航,又怎么替我们做出决策。目前这一切才刚刚起步,我也期待看到后续的更多变化。而这也是大家相对不太了解的层面,对于改进的方式也是莫衷一是。如果选择最乐观的判断,那这一切就是经济体系下的又一波正常变动。

换言之,AI 普及不再是技术问题,而是人力和政策层面的问题。虽然目前还没到这个程度,但我确实相信未来两到三年之内,AI 技术会发展到中心让治理层和政策制定者认真对待的阶段。现在已经离那个状态不远了,也就是两到三年的事。

 

Lenny:最近有不少反对的声音,认为 AI 并没能满足人们对技术的全部想象,特别是在企业应用领域。您怎么看这个问题?

 

Jason Droege:主要还是炒作得太狠了。我们的工作是打造出真正能够为客户创造价值的产品,并真正在解决复杂性上有所突破。还是以医疗保健系统为例,我们就在为医保公司提供理赔流程管理。这样的财务决策其实就是个可以自动化的过程,但在具体落地上学问就大了。很多人觉得概念验证能达到 60%、70%的成功率就行,但这跟规模化应用还差得远。以数据中心为例,正常运行时间、可靠性和备份稳定性方面每增加一个“9”对应的都是又一个数量级的投入。比如四个“9”基本就是大学生自架服务器的水平,而五个“9”看起来只高了一点点,但其实完全是另一个世界。比如说很多人认为 95%是个挺高的标准,但一旦用这个标准处理采购订单,那必然会面对无穷无尽的故障和投诉。

总之,企业在应用 AI 时需要一步步完成法律批准、政策批准、监管批准和变更管理等各个环节,确保精度能让所有人满意。因此,AI 方案往往需要半年到一年才能真正发展壮大,实现关键业务流程的自动化。所以大家一定要分得清新闻炒作跟实践落地。就像我自己的教育背景,博士这个头衔说起来轻,但背后需要付出的努力远超大多数人的想象。

 

所有好生意,都是在不确定中被验证出来的

 

Lenny:您参与建立了 Uber Eats,还创办过其他几家初创企业。关于获客户这个问题,您有没有什么独家心得可以分享?

 

Jason Droege:我是那种愿意尝试一切新鲜事物的人,而且我总觉得创业是个非常清晰而且可把握的过程。我自己的思路是这样:在实际行动之前,先质疑自己听到的每一句话。我不会从字面上理解客户的表达,而是从产品管理的角度来审视。这个大家已经讨论得足够多了,比如说别按他们说的做、而要按他们预期的效果来做,这才是真正值得关注的问题。总之我会关注客户的潜在动机,而这种动机并不总是经济性质的,也往往跟自尊心和职业发展相关。比如说如果我们要向某人推销企业软件,那就得让对方相信你的软件能帮他们做好工作、建立起信任让对方接受你参与到大的项目中来。这个过程中重要的不只是产品,更要思考他们想得到怎样的建议、需要我们提供什么、需要怎么做才能找到正确的产品实现方向等等。我知道这话听起来有点陈词滥调,但只要让我准确把握住对方的真实动机,我就能拿出正确的结果。我再举个例子,当初在发布 Uber Eats 之前,我有认真考察业务。在获客方面,我们其实还给不出餐厅导览的功能,对餐饮行业也一无所知。但在 Uber,我们最想解决的是接下来该拓展哪些其他业务。在考察了大量企业之后,我们觉得外卖业务最值得尝试,结果也证明这是正确的。

 

为了搜集数据,我们找了一家餐厅供应商并拿到一份基础目录,比如说一份典型的餐食要用多少火腿、多少奶酪、多少面包和多少片生菜,再据此推断食材成本有多少、人工成本是多少,进而建立起基准数据。把这些因素综合起来,我们就能把餐食品类建立起清晰的认知。我们发现食材在每份餐食中的成本大约占 20%到 30%,人工又占 20%到 30%,10%是房租和其他开销。总之这就是一种链条,而结合核算出的附加价值之后,我们决定收取账单总价的 30%。

 

餐厅刚开始会觉得这个数字太高了,本能性地想要拒绝。我们解释了自己的核算方式,说服对方做起来试试。事实证明餐厅的判断是正确的,这个比例确实太高了,最终确定下来的抽成是 25%——跟我们的判断也相差不远。在这样的基础之上,我们再分析餐厅的主要价值实现形式是什么。对于游客型餐厅来讲,增加需求就是最关键的。在固定的餐厅店租、人力支出和食材成本都不变的前提下,需求增加三倍并不会增加人力支出,单纯的食材用量增加可以让产品的毛利率提升至 70%到 80%。

 

基于这样的洞察,我们有信心在抽取一定费用之后店家和消费者都能接受。这就是市场经济的基本逻辑——不会只满足单独一方的所有需求,各方牺牲一点利益来保障自己余下的利益。Uber Eats 就是这样的典型案例。

 

Lenny:您向来以善于独立思考闻名,这种能力为什么如此重要?

 

Jason Droege:从创始人的角度来论述,在 Uber 我确实享受到了很多优势。我其实不算真正的创始人,只是参与了创业的流程。创业是涉及很多要素的,比如在 97 年创办第一家公司时,体验其实也就那样。但现在的创业可不一样了,每个人都在做自己的探索。但问题是,我们的研究方向多少都要受到周围言论的影响,那就没办法拥有独立的洞察力。所以最重要的独立思考,坚定去践行自己的判断。因此从创业的角度讲,我认为独特性非常重要。所以核心考验的就是人的洞察力,至于为什么我会幸运地拥有这种洞察力。这个问题的实质,是大家对于未来机遇的洞察,包括这种洞察来自哪里。为什么你能够在数百万头脑聪慧、乐于尝试的创业者当中脱颖而出,掌握其他人所没有洞察力。谁能做到这一点,谁就可以领先一步。也许是因为我有点“遗世独立”,也可能是因为我是那种擅长逆向思维的人,总会在寻求其他人不相信的真理,有时候这也挺有效的。而且最难的部分是,我们愿不愿意在自己的判断上押上五到十年时间?人们总会犯错,只能尽量跟客户沟通,试着解决困扰他们的问题。创业就是这样,我们必须有这种强烈的自我表达意愿,不断摧毁自己曾经坚信的东西。更难的一点在于,我们又要有能力超越自己的观点,不能自大到总认为自己就是全世界最了不起的独立思考者。这个事很辩证,但最终就是要靠结果来证明和支撑。

 

Lenny:您向来以严苛的业务衡量标准著名。那从创业的角度来看,您的核心理念是什么?

 

Jason Droege:有时候最靠谱的创业方向,并不在于所谓最好的思路和机会。当然,对于我这种职业生涯已经超过 25 年的从业者,那选择空间和容错面会大得多。我认为一种业务的成功可以有两种途径:其一,也可以说是最重要的一种,就是创始人长期保持一股自我迭代和更新的力量。但这种年复一年的坚持其实很艰难。第二点是,可以直接去照搬其他人的经验,比如什么是好的商业模式、什么是差的商业模式、什么是好的市场定位、什么是差的市场定位。哪怕是拥有再强大的知识储备,哪怕理论上要进入的是一种比较差的市场定位,那只需要全身心投入,那随着时间推移也会逐渐显现回报。当然,我个人不会选择这种方式,我认为还是要根据市场需求走。纵观顶尖风投企业投资的项目,就会发现他们的投资组合是有规律的,至少是在对应价值数百亿美元的商业模式方面是有共性的,而且是具有网络效应的。规模大的业务就是比规模小的业务更有价值。比如我在 Uber 做过的新业务筛选,淘汰不好的想法其实挺快的,费不了多少时间。至于在筛选剩下的业务中,那就可以根据自己的直觉和热情去推动了。总而言之,我觉得大多数人对于哪些业务有机会增长到千亿美元规模缺少基本的理解。

 

Lenny:您推动了 Uber Eats 的上线。那在确定选择外卖赛道之前,你还探索过哪些其他想法?

 

Jason Droege:我肯定不是那种绝顶聪明的人,所以我会尽可能长期保持自己开放的态度,直到把各种有价值的元素都融合起来。有些想法刚开始看也许觉得比较差,但只需要不断挖掘,最终的对错判断很可能会反转。有一天,我在旧金山到处乱逛,看到了 711 之类的便利店。我就会想,大家要买到自己想要的东西需要转多少个拐角?难道不能直接把想要货品直接放进购物车吗?比如按下购物车上的按钮,它就直接把想要的货品送过来。毕竟叫“便利”店嘛,就得足够便利。所以我们在华盛顿特区推出了这项服务,在路上投放了大约十辆这样的卡车,里面装了大约 250 个吐货口。刚开始的情况很糟糕,根本就没多少人来买。于是我们意识到自己在下意识地找痛点,并不清楚便利店的核心吸引力是什么。我们的卡车不卖烟、不卖啤酒、不卖豌豆泥,我们不清楚大家最想买哪些商品。但说实话,工会的力量太强了,所以我天然地认为别用人工是最安全、成本最低的。我们很出色地解决了这个非经济学层面的问题,实现了便捷交付。但结果呢?我们做了 Uber Spot 还是什么,但跟点对点配送的 Uber Direct 一样,刚起步就表现不好。也就是说,消费者并没这方面需求,企业才有这种需求。2014 年我们刚做尝试时,就没找到市场需求。后来我们持续更新了 15 个版本,最终发现外卖业务的表现才更出色,也拥有可靠的经济回报。这是个很酷的问题,我们可以用这些工具来支持夫妻店,让他们具备跟大企业竞争的资格。我们可以把房地产因素排除在外,让店面选址不再决定一切。只要你的餐食好吃,就完全可以吸引更多顾客。所以我觉得这是个很有趣的问题,真正促进当地经济发展。

 

Lenny:Uber Eats 最终在 Uber 的危机时刻拉了母品牌一把,现在业务规模发展到多大了?

 

Jason Droege:我们是 2015 年 12 月在多伦多推出了这项服务,大约两小时内销售额就达到了 2 万美元,简直是疯狂。我们很快意识到这个路子是对的,而且经济效益很好。我在 Uber 待了六年左右,用了一年半左右才把这个项目真正做起来,并在四年半之后把销售额做到了 200 亿美元。必须承认,Uber 非常擅长扩大业务规模,但竞争激烈的市场上其他友商也做得不错。我们击败了很多对手,也有一些对手确实压我们一头。目前业务规模正在向着 800 亿美元迈进,时间才过去了短短四年半。我想 COVID 在其中也发挥了很大的推动作用。

 

Lenny:众所周知,您曾经反对麦当劳加入 Uber Eats。能分享一下这个故事吗?

 

Jason Droege:这事说起来就有意思了。或许有时候不想太多反而会让人意外找到正确的原因。我们发布的 Uber Eats 在全球范围内获得了广泛成功,而其中的基本愿景很简单:让小餐馆也能跟大规模连锁餐厅正面竞争。以巴黎来说,大家去巴黎旅行肯定不想吃大牌连锁餐厅,而更想发掘本地特色小店。这是现实需求,我们也决定参与其中。但后来麦当劳联系了我们,表示想跟我们一起做外卖业务。我们拒绝了,哪怕对方强调他们的日均消费者高达 8000 万。在拖了四、五个月之后,我们团队觉得我肯定是疯了,他们想促成这件事、而且愿意为之倾力投入。最终,我们还是跟麦当劳建立了独家合作关系,获得了大量连锁店客户。那时候大家都担心每单收益还能不能保证,毕竟订单规模到了单日几千万级别,这肯定是笔大钱。面对现实问题,Uber 的企业文化就是缩小配送半径、在必要时提高某些食物的价格,反正总有办法解决的。三个月之后又有新的问题出现,业务再次陷入困境……总之很多同事觉得我在跟麦当劳合作方面太固执了,但我觉得最终至少还是达成了一笔很棒的交易。

 

Lenny:你一直很关注毛利率,能不能具体说说?

 

Jason Droege:我是这样的,当然这只是我的评判标准之一。当然,也有不少企业本身很好,但毛利率也不高,比如说好市多、沃尔玛之类。亚马逊也有类似的情况。但总的来说,高毛利率加上相对较低的客户流失曲线,对企业来说肯定是个很健康的运营信号。毕竟生意的本质就是增加价值,这就像一块客观的试金石。我们在开展新业务的时候肯定也受到过毛利率问题的困扰,比如刚开始先试试毛利率 40%的方案,发现可行再试着提升到 60%——这时候商家就觉得不能接受了,大家再坐下来交流。至于离岸外包公司,他们的毛利率是多少?查了一下,大概在 20%,而且已经运营了很长时间。那按这个规律来讲,我们的毛利率最终也将不可避免地从 40%下降到 20%,除非真能找到差异化的突破,否则必然要陷入这个巨坑。所以我认为毛利率只是个很粗糙的指标,远不能算是完美的工具。但至少它可以是种快速高效的过滤器,可以考查突然跳出来的想法能不能通过初步评估。比如说核算之后发现毛利率很低,就只能通过后续销量来弥补,那这事恐怕就不大行得通。

 

Lenny:您提到“不输”是获得成功的先决条件,能不能给我们具体解释一下这个理念?

 

Jason Droege:我们的科技文化是由投资者来建立投资组合,很多叙事是由投资者掌控。坦率地讲,创始人肯定也会参与其中。这种情况当然是比较理想的,只是我们没法确定自己会不会有这份运气。如果真说自己人生中只有一次尝试的机会,那我肯定不会轻易去行动,必须得三思而后行。虽然没有这方面数据做支撑,但我发现自己朋友圈里的企业家和最出色的创业者,会审视自己做决策时的风险状况,并在整个过程中都持续做出均衡和积极的决策调整。很多时候我们会忘记决策背后是对应着风险的。这里还有很多可以讨论的部分,因为我觉得用高风险决策最终取得成功是种特别不可取的文化现象,连培训当中都会认可这种思路。毕竟高风险决策必然带来巨大的波动,这对创始人最重要的特质——也就是坚持下去的能力是种直接挑战。大多数人在寻求最佳时机、与客户建立良好关系和将合适产品推向市场之前,就已经放弃退出了。而科技行业瞬息万变,我们确实可能在短时间内从平凡之人变成技术英雄,但大概率这会是个漫长的过程,得先活下来才能谈成功。而当前我们正身处炒作周期,每个人都想尝试、全力投入,但却没意识到客户会一直在,希望自己的问题能得到解决。总之,生存是一切的前提,我们要尽量别把业务发展置于危及的境地。当然,我也不是说完全拒绝任何冒险,这是个需要认真权衡利弊的大问题。

 

快问快答

 

Lenny:您肯定也经历过失败,能不能分享一条从痛苦经历中汲取到的教训?

 

Jason Droege:我还是认为多花点时间提前思考,可以避免后续的很多麻烦。我之前确实做过一些尝试,但结果一般就不细聊了。在 2001 年互联网泡沫破裂之后,我曾打算筹资创办一家公司、而且是能赚钱的公司,成果就是 Scour。坦白讲,当时我没在科技行业发现什么好机会,所以我开始在网上卖二手高尔夫球杆,还真赚了不少钱。那会我才 22 岁,考虑得并不周全,而且我的预期也不高,因为我觉得这生意什么人都能做。但我确实赚了很多钱,甚至想过把全美国所有的二手高尔夫球杆都买下来,直接操控整个市场的交易价格。我太年轻、太自负了,根本没认真思考过这件事的可行性。总之我就这样进入了这个行业,还靠这个赚了几百万美元。但整个过程都让我很痛苦,因为

 

Lenny:您对招聘人才和组建团队很有见解,能不能聊聊自己的理念?

 

Jason Droege:最近我对这个问题又有了更具体的理解。比如某些职位,就必须要有对当前市场丰富的观察和理解。毕竟市场发展太快,没时间慢慢去培训,所以要找的就是那些哪怕其他条件弱些、但真正理解市场和能够跟客户建立良好关系的人。有了这个前提,其余的部分才能跟公司共同成长,并建立起理想的职业发展轨迹。当然,这类职位只能在公司中只占 5%,但它们对于产品的快速上市非常重要。比如在面试当中,我就只考查三点:对于解决问题是否抱有足够的好奇心,是不是擅长把自己的想法准确表达出来,还有能不能很好地跟其他人合作、特别是扮演好领导者。我相对不那么看重专业知识,毕竟我自己肯定有能力边界,不可能在所有专业知识上都做出准确判断。但只要能成功做好这几点,对方的成功几率就相当高。面对世界的持续变化,我们需要的就是具备极强适应能力的人。以 Uber Eats 为例,当初组建项目管理团队时,我总会通过招人把团队设计成一个优势互补扔 机体,同时尽量减少团队中除运营以外的大部分冲突。而且从一无所有到高达 200 亿美元的估值,我的这个理念始终没有动摇。我一直坚信团队成员间了解彼此的优势和劣势,而且能够相互弥补,这比传统上的各种考核标准都要靠谱。换句话说,我必须得学会相信员工,因为我不可能亲自掌控一切。当然,人事系统是非常复杂的,不可能基于我简单的几句话就生搬硬套。

 

Lenny:在日常生活和工作当中,你发现了哪些 AI 应用方式?

 

Jason Droege:说实话,我在加入 Scale 之前是在消费电子领域工作,也参与过政府层面的一些应用项目。AI 这个领域发展太快了,每当有新概念出现我都会认真学习,也会向公司里的其他同事请教技术细节,比如说数据和产品的技术特征。但他们的时间也有限,更多新概念还得靠自己主动学习。大家可能不相信,我的主要工作并不是处理跟 AI 相关的工程问题,而是管理这个组织。为了避免频繁打扰同事,很多时候我也会直接跟 AI 学习,在上下班的路上跟它聊天。这已经变成我生活中的一种习惯,也是我从业以来见证过的最不可思议的奇迹。

 

比如之前采访 Perplexity 创始人的时候,对方就介绍他们要求同事在提出任何问题之前,必须先请教 AI。那时候这还是种很疯狂的工作方式,但现在看来他们的领先恰恰体现在这里。至于在工作当中,我会上传一份内部文件,然后边亲自阅读边比较它的提炼结果。让人震惊的是,AI 的表现真的非常出色,而且帮我节约了大量时间。在大规模组织中,我们经常会遇到这样的难题:我不知道你想让我说什么,我也不知道自己需要了解什么,这就导致大家各有议程、自说自话。那面对这样的传播挑战,AI 确实能帮上大忙,太神奇了。我现在会用它来处理法律文件,比如快速了解对手打算怎么对付我、我又该怎么应对。

 

Lenny:您还有什么想跟听众们分享吗?

 

Jason Droege:有啊。我想向大家强调 Scale 团队的卓越贡献。我们一直非常努力,持续为客户提供巨大的价值。任何语言在这份努力面前都显得苍白无力,更无法体现客户在此基础之上解决的无数问题。我认为这份付出配得上一切尊重和回报。

 

Lenny:您最近发现什么自己特别喜欢的产品了吗?

 

Jason Droege:应该说是 Veo 3 吧,虽然不算全新产品。高中时我曾梦想当个编剧,还认真写过剧本。所以这次我找出第一页、拍下照片,再上传到 Veo 3。结果真的让我震惊,居然一张剧本照片也能生成相应的视频画面。现在我在考虑怎么把这些工具用来生成家庭录像,再利用其他工具让内容更加生动。虽然还有进一步迭代的空间,但这种体验真的很有趣。这类工具真的会改变人们的情感生活,比如让祖父母、亲戚或其他很久没见的人在照片中动起来,这会产生很大的情感冲击。训练出这套模型的技术人员很厉害,而帮助他们做专家级数据标注的服务者也很厉害。这种直接把文字转化成光景的能力很棒,也很酷。

 

Lenny:您最喜欢的人生格言是什么?

 

Jason Droege:终点永远不是终点。这是我最喜欢、也深深牢记心中的格言。这跟之前关于生存才是第一要务的观点差不多,只有先活下来才有机会获得成功。纵观自己的创业历程,我觉得这条的指导意义最大。每个人都会经历艰难的旅程,但只要能在这段旅程中坚持五年,那大家的精神承受力绝对会比 99.9%的人强。更具体地讲,我们在努力工作时会深切感受到这句话的意义。有时候我们觉得自己太累了,想要停下来,但事实上只要继续前进,似乎就又可以坚持下去了。我牢记这句话,提醒自己任何一个节点都不是真正的终点,仍然有更远的标的有待探寻。所以无论当下的解决方案到底完不完美,我们都可以先勇敢接受,然后抖擞前行。

 

Lenny:如果想要与您交流或者了解更多关于 Scale 的信息,应该怎么安排?

 

Jason Droege:当然可以,大家可以关注我的邮箱,随时了解最新动态。如果是招聘方面的诉求,可以直接访问 scale.com、进入我们的招聘页面,目前公司开放了 250 个空缺职位。我们的业务仍在扩展,包括应用程序业务、数据业务和服务业务都在疯狂增长。我们需要更多人手来帮助我们推进这段旅程。我们还刚刚跟政府签下了巨额合同,金额是 21 亿美元——而且不是一份,而一个月内签了两份。我们的政府业务做得很好、企业业务做得很好、国际政府业务同样做得很好。公司市场需求很大,也让不少销售人员拿到了丰厚的佣金。

 

参考链接:

https://www.lennysnewsletter.com/p/first-interview-with-scale-ais-ceo-jason-droege

 

​VMware-workstation-full-12.5.7-5813279​​是 VMware Workstation 12.5.7 完整版 的 Windows 安装包,这玩意是个虚拟机软件,能在你电脑上再“装”一台或多台虚拟电脑,用来跑别的系统(比如 Linux、Win7/Win10 测试版),开发、测试、学习系统都用得上。

安装不算难,下面用大白话一步步说。

一、准备工作

  1. 下载安装包
  1. 确认系统版本
  • 需要 Windows 7 及以上,最好 64 位系统,内存建议 4GB 以上(跑虚拟机吃内存)。
  1. 用管理员身份运行(必须)
  • 右键安装包 → “以管理员身份运行”,不然可能装不上驱动或报错。

二、安装步骤

  1. 双击 VMware-workstation-full-12.5.7-5813279.exe运行(如果右键过了就直接双击)。
  2. 第一次打开会弹出“用户账户控制”提示 → 点  “是”
  3. 进入安装向导,选语言(默认 English,有的版本有中文)→ 点  “下一步”
  4. 弹出版权协议 → 选“我接受许可协议中的条款” → 点  “下一步”
  5. 选安装类型:
  • 默认是“典型安装”,新手直接下一步就行;想自定义路径或组件就选“自定义”。
  1. 选安装位置:
  • 默认是 C:\Program Files (x86)\VMware\VMware Workstation,可点“更改”改到其他盘。
  1. 用户体验设置:
  • 可以取消勾选“启动时检查产品更新”“加入客户体验计划”,不想被联网打扰就都去掉。
  1. 快捷方式:
  • 建议勾“桌面”和“开始菜单”快捷方式,方便以后打开。
  1. 点  “安装” ​ 开始装,等进度条走完(几分钟)。
  2. 安装完会提示输入许可证密钥(如果有注册码就填上,没有可以先试用)。
  3. 点  “完成” ,装完会在桌面出现 VMware Workstation 图标。

三、首次运行与基本使用

  1. 双击桌面图标打开 VMware Workstation。
  2. 第一次打开可能会提示安装 VMware 服务或驱动,点“安装”或“确定”。
  3. 新建虚拟机:点“创建新的虚拟机” → 选“典型”或“自定义” → 按向导选系统镜像(ISO 文件)→ 分配硬盘和内存 → 完成。
  4. 启动虚拟机:选中建好的虚拟机 → 点“开启此虚拟机”,就能进虚拟系统了。
  5. 常用操作
  • 暂停、快照(保存当前状态)、克隆(复制一台一样的虚拟机)。
  • 虚拟机和真机之间可拖拽文件、复制粘贴(需在设置里开启)。

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

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个方向入手,快速积累基础、做出简单作品,再逐步深耕自己感兴趣的细分领域(工业、城市、医疗等),就能跟上风口。

互动话题:

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

OpenJDK 的Amber项目发布了一份全新的设计说明,名为“Java面向数据编程:超越记录类(Record)”,阐述了一种探索性的方案,以便将类似记录类的特性拓展至更灵活的类设计中。该文档引入了载体类(carrier class)与载体接口(carrier interface)的概念,目标是提炼记录类的核心优势并进行通用化适配,同时不再强加严格的表述规则。

Java 16 引入了记录类,为不可变数据载体的建模提供了简洁的方式。如下这种记录类的声明:

record Point(int x, int y){ }
复制代码

编译器会自动为其生成规范的构造器、访问器方法,以及equalshashCodetoString方法的实现。记录类还支持解构(deconstruction)模式,可以配合instanceofswitch关键字使用。结合密封类与模式匹配特性,记录类能实现 Java 中代数数据类型的建模。例如,HTTP 客户端或网关可以按如下方式定义不同的响应类型:

public sealed interface HttpResponse permits HttpResponse.Success, HttpResponse.NotFound, HttpResponse.ServerError {    record Success(int status, String body) implements HttpResponse{}    record NotFound(String message) implements HttpResponse{}    record ServerError(int status, String error) implements HttpResponse{}}
复制代码

基于这样的响应类型层级,我们可以通过穷举式模式匹配进行统一处理:

static String handle(HttpResponse response) {   return switch (response) {       case Success(var code, var body) -> "OK (" + code + "): " + body;       case NotFound(var msg) -> "404: " + msg;       case ServerError(var code, var err) -> "Error (" + code + "): " + err;   };}
复制代码

此示例中,编译器会强制检查是否覆盖了所有允许的响应类型。若新增一种响应类型,必须同步更新该 switch 表达式,从而降低不完整错误处理的风险。

在近期的一次讨论中,甲骨文公司的 Java 语言架构师Brian Goetz指出,这些特性的组合虽然能实现强大的数据建模能力,但实际落地却经常会受到长期形成的面向对象设计习惯制约。他发现,即便现代语言特性已能大幅减少间接代码,开发人员仍会习惯性地设计用于中介数据访问的 API。

这份设计说明重点聚焦于记录类无法适用的场景。实际开发中,许多数据类型需要派生值或缓存值、可选的内部表示形式、可变性或继承特性。在这种情况下,开发人员只能退而求其次,使用传统类,并重写大量的样板代码。文档将这种转变形容为“断崖式回落”,对记录类的基准模型做微小调整,就会导致代码量的大幅增加。

为了缓解这一问题,文档提出了载体类的设计思路。载体类以类似记录类头信息的状态描述作为开头,其余行为则与普通类完全一致:

class Point(int x, int y){    private final component int x;    private final component int y;}
复制代码

其中,状态描述用于定义类的逻辑组件,编译器可基于这些组件自动生成访问器、对象方法及解构模式。与记录类不同,载体类不要求将所有状态仅存储在这些组件中,这也是其核心灵活性所在。

这种灵活性能实现记录类难以表达的设计模式,例如缓存派生值的场景:

class Point(int x, int y){    private final component int x;    private final component int y;    private final double norm;    Point { norm = Math.hypot(x, y); }    double norm() { return norm; }}
复制代码

此例中,派生值norm在构造阶段计算完成,并且未纳入状态描述,但该类仍能借助编译器为其组件自动生成的方法,减少样板代码编写。

载体类同样设计为可与模式匹配深度集成,用法与记录类一致:

if (obj instanceof Point(var x, var y)){    // use x and y}
复制代码

设计说明中还进一步探讨了载体类与未来重构特性的兼容性,例如,针对记录类的JEP 468

除载体类外,该提案还引入了载体接口的概念,接口可声明自身的状态描述,并且所有实现类都能参与统一的模式匹配:

interface Pair<T, U>(T first, U second){ }switch (pair) {    case Pair(var a, var b) -> ...}
复制代码

这种设计能简化日常开发中常见的元组式抽象,同时保留 Java 强类型的优势。

这份设计说明将载体类置于 Java 向面向数据编程整体转型的背景下,通过结合记录类、密闭类型、模式匹配,再加上潜在的载体类,Java 正逐步引导开发者直接建模数据结构,而非依赖层级繁杂的 API。Goetz 认为,当前的核心挑战在于,帮助开发者意识到,在将“数据”作为首要抽象时,大量的支撑性代码都可被省略。

目前,“超越记录类”还属于探索性的文档,官方尚未公布具体的语法定义、JEP 提案及版本发布时间表。但这份文档释放了明确的信号,那就是 Amber 项目将持续推进相关研发,进一步减少 Java 的样板代码,并将现代语言特性拓展至更复杂的类设计中,而这些探索,也许会将影响未来版本中 Java 开发者构建以数据为核心的 API 的方式。

原文链接:

Java Explores Carrier Classes to Extend Data-Oriented Programming Beyond Records

谷歌云正式发布AlloyDB for PostgreSQL 通用托管连接池,将类似 PgBouncer 的功能直接集成到数据库服务中。按照谷歌的说法,与直接连接相比,这一特性能够提供 3 倍多的客户端连接和高达 5 倍的事务吞吐量,帮助开发者解决了运行高并发工作负载时面临的扩展挑战。

 

连接池并不是什么新鲜事。多年来,为了重用数据库连接而不是为每个请求创建新的连接,开发者们将PgBouncerpgpool作为单独的基础设施进行了部署。现在,AlloyDB 可以自动完成这些工作了。开发者可以通过控制台复选框或 API 调用来启用它,连接池使用 6432 端口,而常规连接使用 5432 端口。

 

托管连接池会缓存预先建好的连接,将它们分配给传入请求,并在使用完成后将它们返回给连接池,而不是关闭它们。谷歌表示,这可以消除“运维负担”,作为 AlloyDB 实例的一部分,连接池会自动升级和扩展。连接池和数据库之间的通信在谷歌云的网络内运行,可能比外部连接池设置的延迟小。

 

对于 Cloud Run 或 Cloud Functions 上的无服务器部署,其优势更为显著。这些平台会启动多个实例,每个实例都会打开数据库连接,在流量高峰时往往会超出 PostgreSQL 的连接限制。对于这种情况,连接池是一个很好的缓冲,它利用现有的连接处理请求,而非强制数据库同时处理数百个新的连接尝试。

 

UKG 高级首席架构师 Jeff Bogenschneider 在早期测试期间描述了其影响:

 

AlloyDB 的架构使我们能够在单个集群中部署的数据库数量远超其他 Postgres 托管服务。此前我们曾担心连接限制问题,而托管连接池可以帮助我们确保全球的客户都能获得最佳的性能,让我们得以自由地扩展业务,而不用担心在高峰使用时段遇到连接限制问题。

 

运行微服务的开发者应该考虑将应用端连接池与 AlloyDB 的托管连接池配对。在Medium上,Adarsha Kuthuru 和 Kumar Ramamurthy 详细描述了这种“双池”模式:像 HikariCP 这样的应用连接池为每个实例维持 5-10 个到 AlloyDB 连接池的连接,后者通过多路复用将这些连接连接到数量更少的后端数据库连接。这个方案可以避免为 50 个微服务实例各建立 20 个连接时,1000 个并发连接冲击数据库的场景。作者建议为每个 vCPU 配置 15-20 个连接器连接,并协调各层的超时设置,避免连接重置错误。

 

该功能提供两种连接池模式。事务模式(默认)通过为每个事务分配独立的连接来最大化可扩展性;会话模式完全兼容 PostgreSQL 的功能。开发者可以通过 AlloyDB API 中的标准 PgBouncer 参数调整连接池规模、超时设置及空闲阈值。

 

该功能存在一些限制。托管连接池不适用于 AlloyDB Auth Proxy 或语言连接器——开发者需要直接连接。这妨碍了依赖身份验证代理进行凭据轮换或简化 TLS 配置的部署模式。在 2024 年 11 月前部署的实例上启用连接池功能时,由于要更新 VPC 设置,会引发短暂的网络中断(持续时间少于 15 秒)。

 

对于已经单独运行 PgBouncer 的开发者而言,迁移至托管连接池主要在于整合基础设施——减少一个需要打补丁的组件。对于新增部署,尤其是无服务器或高并发工作负载,启用该功能所需的投入极少,却能防患于未然,在扩展问题爆发前将其及时化解。

 

谷歌提供了配置托管连接池的文档和在现有实例上启用该特性的最佳实践。对于双池模式,发表在 Medium 上的博文提供了一份部署指南。

 

原文链接:

https://www.infoq.com/news/2026/01/alloydb-managed-connection-pool/

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

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

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

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

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

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

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

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

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

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

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

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

第一,人员是否真实在岗

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

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

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

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

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

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

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

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

运维、运维开发创业的可行性:

  • 背景说明: 多年大厂一线运维和运维开发经验
  • 已落地产品:
    • golang 大运维平台,k8s 、监控、cicd 等
    • gpu 训练平台
    • 故障分析自愈
    • 巡检平台
  • 打工早晚会有尽头:现在探讨运维创业的可行性,感觉迟早要踏入这一步,欢迎讨论

01 特定运维软件:开源+商业付费模式:如 kubespare

  • 运维平台方向:k8s/prometheus/日志/cicd/cmdb-服务树/工单/ai/大数据
    • 在线服务:运维平台,多云管理
    • 离线训练:混合云多队列资源分配,多机训练,缓存优化等
  • 细分垂类:
    • ai/gpu 等训练 infra:hami 虚拟化等
    • 大集群异常处理自愈,GPU 利用率提升等

02 解决方案模式

  • 为面临性能瓶颈或成本压力的企业提供专项技术咨询、架构审计与调优服务。
  • k8s 在离混部,finops 成本优化
  • 为缺乏自研能力的企业设计并交付定制化的云原生运维平台或 AI 训练平台。

03 教育培训

  • 卖课

04 人力外包

  • 提供运维服务

整理 | 华卫

 

近日,有消息称,星海图孵化首席科学家许华哲创业,新公司将会切入具身智能 C 端应用赛道,已获得星海图种子轮投资。

 

“让机器人做一道松鼠鳜鱼”,是许华哲在多次公开提到的具身智能终极设想。他曾表示,处理活鱼、改刀、油炸到摆盘,其复杂的物理交互是验证机器人智慧程度的最好指标。

 

知情人士透露,为了更深入探索具身智能在 2C 领域的技术与应用,许华哲在 2025 年 8 月曾主动与星海图团队进行了沟通,表达了希望专注深耕这一方向的想法,星海图团队表示了支持,并对许华哲的新公司启动内部孵化。今年 2 月,星海图通过直接投资的方式,支持许华哲创立并运营新公司。

 

据悉,星海图正通过一系列秘密投资,围绕“数据+应用”构建起一套闭环的生态,许华哲此次创业正是该生态布局在 C 端应用的重要一步。下一步,星海图将计划通过产业基金的方式参股或控股关键技术环节和应用方,整合上下游,为其具身智能产品的量产与商业化提供保障。

 

作为具身智能领域的明星创业公司,星海图于 2023 年 9 月成立,连续完成 A4 轮及 A5 轮战略融资,合计融资金额超过 1 亿美元。2026 年 1 月,公开信息披露星海图已经完成股份制改造。另据可靠消息透露,星海图已于近期完成新一轮融资,估值已突破 100 亿人民币。