2026年3月

似乎是一段很干净的 ip ?甲骨文很轻松就能开出来了,之前的本地的公网 ip 应该脏了一直 abc

但是不知道为什么这一段 ip 在百度风控里面会提示是恶意软件 ip 然后国内非常多的软件什么 csdn 张大妈之类的基本上都要先验证码后进入..

说实话,Obsidian好是好,但这同步问题真的是老大难,差点因为这个我就弃坑了。

我之前为了在公司Windows电脑和回家躺床上的iPad之间同步笔记,真的,什么招都试过了。一开始傻乎乎地用数据线导来导去,后来听说有个叫Sync Vault的插件,兴冲冲去试了一下。结果呢?还得去百度网盘搞什么授权码,最离谱的是这玩意儿居然要手动点击“上传”和“下载”按钮!

拜托,都2026年了,谁还记得写完笔记去点一下上传啊?我有好几次写了一大堆灵感,回家一打开iPad,空的!那一瞬间真的想把电脑砸了。

折腾了一圈,最后发现还是得信赖老牌子。前两天看到坚果云出了个官方插件 Nutstore Sync,抱着试一试的心态装上了,结果……真香!

这才是云同步该有的样子好吗!

为什么说它香?主要是这几点真的戳中痛点:

第一,完全不用动脑子
不像以前那些插件,还要配什么WebDAV地址、端口号,看着就头大。这个插件直接选“单点登录”,跳到坚果云网页版点个“授权”,完事儿!甚至都不用你去想什么服务器地址,小白也能闭眼装。

第二,它是真的“无感”
这个太重要了。我在公司电脑上写完,直接关机走人。回到家拿出iPad,打开Obsidian,刚才写的东西就在那儿了。没有“正在下载”的进度条,不用点任何按钮。这感觉就像是……你的笔记本来就应该长在iPad里一样。听说是因为坚果云用了那个什么智能增量同步技术,反正不管原理是啥,快就完事了。

第三,安全感拉满
我是那种特别怕数据丢的人。毕竟笔记都是心血啊。坚果云这家公司我都用了十几年了,15年的老牌子,还有那个公安部三级等保的认证(据说银行也就这级别?),反正比那些个人开发者做的插件靠谱太多了。而且它还有历史版本功能,万一我手残把笔记删了,或者改乱了,直接去网页上一键恢复,后悔药随时有。

简单的教程来一发(其实根本不需要教程):

PC端怎么搞:

  1. 打开Obsidian,去社区插件市场搜 Nutstore Sync,认准官方标。
  2. 安装完,设置里选“单点登录”,授权一下账号。
  3. 它有个“宽松模式”,建议开着,同步速度飞快。

iPad端怎么搞:

  1. iPad上也装同一个插件,登录同一个账号。
  2. 最爽的一点来了!不用像以前那样手动把仓库拷贝到iPad里!插件只要登录上,它自己就会把云端的笔记结构拉下来。
  3. 建议把“后台同步”打开,这样你切出去回个微信啥的,它也在干活。
    image.png

最后的碎碎念:

真的,别再被那些花里胡哨的教程带偏了。什么网盘+第三方插件,听着挺极客,用起来全是泪。

如果你也是像我这种“Windows干活,iPad看片+轻办公”的双机党,坚果云这个官方插件绝对是目前的版本答案。

那种打开iPad,看到刚才电脑上写的思路无缝衔接在屏幕上的感觉,真的太爽了!

想试试的朋友直接去这儿:

功能

React 引入 useSyncExternalStore 也很长一段时间了,但是存在感还不太强。简而言之,它专门用来搞定那些不受 React 内部生命周期控制的外部数据源

过去最大的问题其实是 React 渲染时的 「撕裂」,这是 React 为了优化页面响应速度引入的并发渲染机制带来的副作用。

简单来说就是 React 为了防止在渲染时长时间无法响应用户输入,把渲染过程拆分成多个可中断的小任务,这就能小任务的间隙中插入用户响应,从而模拟出「并发」的感觉。更完整的前因后果可以参考《React 的设计哲学》

在 React 并发渲染机制下,如果用普通的 useEffect 去同步外部数据,可能会出现渲染进行到一半时数据突然发生变化,导致同一份页面中,一半的组件拿着老数据,另一半拿着新数据的灵异现象(但是实际上出现这个问题的几率其实非常小,大家都忽略了,这就导致了 useSyncExternalStore 的存在感很低)。使用 useSyncExternalStore 后,如果在渲染过程中快照发生变化,React 会丢弃当前渲染并重新开始,从而保证同一次提交中的所有组件看到的是同一个版本的数据。

使用场景

订阅浏览器 API

拿监听网络状态来说。不使用这个 Hook 之前,我们通常得在组件里写个包含完整挂载和清理逻辑的 useEffect 去监听 onlineoffline 事件。

function subscribe(callback) {
  window.addEventListener("online", callback);
  window.addEventListener("offline", callback);
  return () => {
    window.removeEventListener("online", callback);
    window.removeEventListener("offline", callback);
  };
}

function getSnapshot() {
  return navigator.onLine;
}

// 组件里直接这么用
const isOnline = useSyncExternalStore(subscribe, getSnapshot);

监听媒体查询(Media Queries)响应式布局也是同样的套路:

const query = window.matchMedia("(max-width: 600px)");

function subscribe(callback) {
  query.addEventListener("change", callback);
  return () => query.removeEventListener("change", callback);
}

const isMobile = useSyncExternalStore(subscribe, () => query.matches);

轻量级全局状态

如果你接手了一个极小的项目,不想引入 Redux 或 Zustand 这样繁琐的包,但又迫切需要在几个跨层级的组件间共享某部分状态。这时候你可以直接手搓一个简易的 Store:

// 丢在 React 外面的状态中心
let internalState = { count: 0 };
const listeners = new Set();

const store = {
  increment() {
    internalState = { count: internalState.count + 1 };
    listeners.forEach((l) => l());
  },
  subscribe(callback) {
    listeners.add(callback);
    return () => listeners.delete(callback);
  },
  getSnapshot() {
    return internalState;
  },
};

// 任何组件里都可以直接同步获取状态
const state = useSyncExternalStore(store.subscribe, store.getSnapshot);

注意:useSyncExternalStore 内部用 Object.is 比较前后快照,如果 getSnapshot 在数据未变的情况下每次都返回新对象,会导致无限循环重渲染。

只要把这段代码看懂,你就掌握了 Zustand 这种现代状态管理库的核心原理

竞品 API

useEffect + setState

曾经大家都习惯在 useEffect 里监听外部变化,如果变了,再跑一下 setState 触发更新。

这就又到了日常批判 useEffect 的时候了。

useEffect 带来重复渲染和闪烁问题。如果你的外部状态和页面初始计算的状态不对齐,页面渲染就会经历「旧值 -> 闪烁 -> 新值」这三步。而 useSyncExternalStore 在渲染中途就能直接取走最新的正确值。

另外,在处理服务端渲染时,用副作用很容易抛出水合(Hydration)错误,因为服务端和客户端首次生成的 HTML 大概率因为外部数据对不上。useSyncExternalStore 为此专门开了一个叫 getServerSnapshot 的参数,让你传能兜底服务端的静态快照。

Context

很多人滥用 Context 做全局状态,但如果是频繁变动的数据,Context 的广播机制简直是一场灾难。只要 Provider 提供的值发生了变动,它底下所有的子组件也会跟着无脑重跑 Render,除非你给每个组件层级套一层 React.memo(当然现在有 compiler,但也不是毫无代价)。

相比之下,useSyncExternalStore 实现了高精度的按需订阅——只有从 Store 取出的快照真的有了变化,关联的组件才会再次渲染。在这里还是顺便强调一下,没事别用 Context。

总结

要判断何时使用 useSyncExternalStore 其实很简单,只要你的数据依然在 React 的生命周期里流转(例如表单实时输入、控制弹窗开闭的布尔值),那就老老实实用回你的 useStateuseReducer

一旦数据满足游离于 React 管理之外、会随时间变化、且你要让 UI 能自动响应这种变化这三个条件,就毫不犹豫上 useSyncExternalStore。日常写前端页面也许碰不到几次,但之后你要是去造底层 Hook 库,或者需要硬啃第三方库内部暴露出的状态时,useSyncExternalStore 绝对好使~

相关链接

租房但也很想养宠物满足自己的情感需求,求各位推荐。
首先排除猫狗这样破坏力强,气味大难带走的,其次排除鸟类这种可能声音大的。
目前在考虑乌龟,仓鼠,金丝熊,蛇这些,大家有什么推荐吗?除了昆虫类的本人应该基本都能接受。
有没有租房养宠的给点意见?大感谢。

2025 年初从 13pm 换到 15pm ,续航倒退,升级到 ios26 后更是续航尿崩,已经从转转买了 99 新的 16pm ,续航会有很大的提升吗?
另外,后台常驻能力会不会有改善? 15pm 几乎每次打开微信都会重新载入,现在 26.3 版本甚至出现了解锁进桌面的时候桌面图标也会重新载入一遍。

可以试试看能否正常使用。

开启位置:设置-通行密钥

我在安卓移动版本的 chrome 测试能开启但登录的时候提示没有可用设备。sobbing

全屋 wifi 就是 86 盒装个 ap 来实现覆盖,不需要主无线路由器。

相比有线 mess 来说,三房的配置用哪个比较合适?

我在考虑客厅无线路由器放哪里呢问题。整体橱柜是不是只能放在不装玻璃的一个格子里了?或者放在电视柜上

我们建造了会发射一切的系统,却从未教它们什么才是重要的。

它揭示了一个我们刻意回避的事实:在可观测性领域,“收集一切”已经变成了一个优雅的借口。我们用存储成本下降来为自己的贪婪辩护,用“未来可能有用”来掩盖当下的无意义。当数据量突破某个临界点,信号就变成了噪音,理解让位于搜索,洞察退化为排查,做的事永远是头疼医头,脚疼医脚。

但真正的理解系统不是这样,这是我们作为工程师群体的集体失职。

Mezmo CEO 塔克·卡拉韦说了一句让所有人笑完之后沉默的话:“可观测性用法语说就是存储。”

笑是因为他说的是真话。沉默是因为我们发现自己无可辩驳。

01

过去十年,可观测性的叙事是这样的:存储便宜,弹性计算唾手可得,每多收集一条数据,就多一分发现问题的可能。这个逻辑曾经成立。

现在它成了债务。

被动收集模式有一个残酷的数学特性:成本线性增长,价值指数衰减。每加一条指标,每多一个追踪跨度,支出的增长是确定的,但它们带来的理解增长却恰恰相反——当数据海洋足够宽广,有意义的信号反而被稀释到难以辨认。

我们以为自己在监控一切。其实我们只是在囤积。

更隐蔽的危机发生在认知层面。现代运维人员面对的不是信息匮乏,而是选择过载。仪表板沦为噪音发射器,事件调查变成了过滤练习——从上百条相关日志中挑出真正有用的那一条。认知过载、误判疲劳、面对海量数据却无从下手的无力感,正在系统性地侵蚀整个行业的注意力和信心。

讽刺的是,我们用更多的数据来试图解决数据过多的问题

这就像用更多的演讲来解决沟通过多的问题一样。

02

AI 本应是救赎。

现实是,它放大了我们的问题。

训练于嘈杂、非上下文数据上的模型,继承了它创造者的混沌。行业数据显示,事件分拣仍然耗费每事件 1 到 6 美元,需要 12 到 27 次工具调用,失败率居高不下。即便是最先进的自动化管道,也难以摆脱一个根本瓶颈:输入本身就是垃圾。

机器学习不会超越数据质量。它成倍放大后果。

一个被错误标注的日志,一个缺失的追踪跨度,会通过嵌入层、向量存储和推理层级联传播,最终输出自信但错误的结论。模型越大,误会越昂贵

这才是真正令人警醒的事实:即便拥有最先进的大语言模型和异常检测器,人工智能在人类最擅长的领域仍然一败涂地——上下文的推理

它能看见模式。但它无法将模式置于情境(Context)之中。

没有服务拓扑,没有近期部署,没有用户行为,上下文就是空的,AI Agent 只是在追逐统计幽灵。

图片

03

有一个被遗忘的中间层,正在悄悄重塑整个行业。

数据工程优化吞吐量。可观测性优化可见性。AI 优化预测。但从来没有一个学科优化意义(Meaning)。

直到现在。

上下文工程——它不取代上述任何学科,而是连接它们。它定义了信息在系统间应该如何表现:如何承载意图(Intent)、溯源(Lineage)、所有权(Ownship)和重要性(Significance)

图片

你可以把它想象成主动遥测的神经系统。允许信号带着理解流动,而不仅仅是流动。

传统数据仓库(Data Warehouse)是静态的——存储发生了什么。上下文图(Context Graphs)是动态的——代表事情如何以及为何发生

它将事件(Events)、实体(Entity)、原因(Reason)连接成一个活的知识层。每个节点是一个活生生的实体:服务、部署、用户事务、配置文件,甚至 AI Agent。每条边描述关系——所有权、因果、时间顺序。因为这些图实时演变,它们成为自我解释系统的基础。

一个构建良好的上下文图(Context Graphs),可以让这样的查询得到即时解决:“昨晚 us-east-1 的延迟峰值,最有可能是谁部署的哪个变更触发的?”

图片

无需翻阅 PB 级日志。一个问题,一秒回答。

这就是意义(Meaning)的力量。

04

可观测性的第四个时代,关于系统本身参与自身的理解。

  • 第一个时代关于可见性,主要围绕日志、指标和链路三大支柱展开。
  • 第二个时代关于关联性,可观测性 2.0 试图解决 1.0 的不足,转向统一的数据模型。通过整合日志、指标和链路,团队能够在同一平台上分析数据并提出更多有意义的问题。
  • 第三个时代,让人类逐渐理解系统,给了人类有效地采取行动的能力。
  • 现在第四个时代来临了,系统本身参与自身的理解——遥测(Telemetry)不再是反映情况的镜子,而是交互的界面

主动遥测(Active Telemetry)意味着数据不再是被动收集的产物,而是积极参与系统运作的 Agent。

自我描述——携带来源、所有权、相关性的元数据。它自适应——根据消费者是谁来调整自己的形态。它前馈(Feeds forward)——以链接因果的方式引导人类和 AI 决策。

举一个具体的例子。

一个结账服务的延迟峰值,在不同场景下发出的遥测数据(Telemetry)截然不同。正常运行期间,它可能只产生粗粒度指标。部署窗口期间,它丰富追踪数据,附带提交 ID、部署策略、负责人元数据。事件期间,它提高保真度,抑制非关键噪音,优先处理与用户影响相关的信号。

同一个信号,三种形态。

因为它的目的变了。

这就是主动遥测(Active Telemetry)的核心哲学:数据的目的不是记录发生了什么,而是影响接下来会发生什么。

05

当遥测变得智能,上下文变得明确,系统可以开始闭环自己的循环。

它们感知,解释,响应。从曾经只告知人类的相同上下文中汲取营养。

观察和操作之间的边界消失了。仪表板变成了对话。

这带来了一个根本性的转变:自动化是关于规模的——做得更多、更快。自主性是关于判断力的——决定做什么、何时做、为什么做

在自主运营的核心是代理层——三种类型的智能体正在浮现:

  1. 顾问型 Agent 呈现建议(Recommendations)和置信度评分假设(Confidence-scored Hypotheses)。
  2. 助手型 Agent 在监督(Supervision)下执行常规操作。
  3. 自主型 Agent 在上下文和风险被充分理解的情况下内独立行动。

想象一下:不再是 PagerDuty 把你叫醒,而是 Agent 在故障发生前 30 分钟就已经模拟了回滚方案,等你只是来按确认键

这不是关于取代人类。这是关于扩大机器可以安全行动的范围——因为上下文让意图(Intent)变得可读。

但有一个前提:信任

没有工程师会轻易将控制权交给 AI。信任不是授予的,是赚取的。每个自主决策必须可解释:哪些信号触发了它?推断了什么因果链?模拟和拒绝了哪些行动(Action)?

可解释性(Explainability)将扮演无可替代的角色。

并且在 AI Agent 操作系统的整个流程中,人类需要确保 AI 的行动严格匹配行动的意图(Intent)。

图片

06

回到最初的问题。

“目前团队失败不是因为缺乏数据,”塔克·卡拉韦说。“他们挣扎是因为数据缺乏意义。”

这句话指向一个更深的转变。

遥测(Telemetry)不再是系统行为之后发射的信息——它是系统行为本身的一部分。
当信号(Signal)不仅仅是被观察,而是被真正理解运用。可观测性就变成了架构决策,而非工具选择

这意味着:

  • 有意义的数据生而有目的——信号(Signal)存在是因为它支持某个决策(Decision)或强化某种已知行为,而非因为某行诊断代码恰好被留在代码库里。
  • 有意义的数据在移动前被塑形——减少(Reduction)、丰富(Enrichment)、过滤(Filtering)和路由(Routing)在数据原点附近发生,存储后端不再承担全部解释负担。
  • 有意义的数据与系统目标对齐——遥测(Telemetry)反映服务级意图、用户影响和业务意义。

自主性不来自高数据量。自主性来自有意义的数据

07

我们正在见证一种新型企业的崛起。

AI 不再是对基础设施的附加——它正在成为基础设施本身。未来的赢家,是那些把上下文视为战略资本的组织。

三种力量汇聚:

  1. 可观测性成为 AI Agent 的基础设施。你的遥测层不再作为被动监控底层运行,而是成为为组织各处推理 Agent 提供动力的感官系统。
  2. 上下文工程成为竞争优势。在每个人都可以访问相同模型的世界里,上下文成为真正的差异化因素。两家公司用同一个模型——一个提供原始日志,另一个提供结构化、语义一致、领域感知的信号。只有后者实现真正的智能
  3. 智能遥测产生网络效应(Network effects)。系统产生的上下文越多,AI Agent 能理解的越多。AI Agent 理解越多,行动越有效。行动越有效,遥测越清晰有意义。这是一种运营复利。

企业变得更聪明,不是因为更多工具,而是因为意义的协调。

08

“我们建造了会发射一切的系统,却从未教它们什么才是重要的。”

我们这代人面对的挑战,不是让机器更聪明。

是让我们自己更清楚——什么才是真正重要的,包括人类对自己行动的理解。

当可观测性变成理解力(Comprehension),当上下文变成认知(Cognition),当自主性变成协作(Collaboration),工程就变成了人类判断和机器清晰度之间的伙伴关系。

这不是机器取代工程师的未来。

是机器理解系统,让我们更好理解我们正在构建的世界的未来。

智能运营(Intelligent Operation)的新时代,不由工具定义,不被仪表板限制。

它由一个哲学转变界定:我们不再教系统发生了什么。

Observe. Reason. Act. 从记录,到理解,到行动。我们教它们如何思考。

图片


参考来源:本文核心观点提炼自 O'Reilly 技术报告《Context Engineering for Observability》,作者深入分析了现代可观测性面临的人机双重危机,并提出了"主动遥测"、"上下文工程"及"自主运维"三大架构演进方向。

AI 冲击下,“传统设计流程已经死了”,但在 Claude 的设计负责人看来,真正被淘汰的不是设计,而是设计师过去那套被奉为“教条”的流程:

“设计师一直被教的那套设计流程,我们几乎把它当成“教条”在信。现在它基本已经死了。今天做设计,你根本没有时间再去做那些精美、打磨到极致的高保真稿了。”

设计没有被 AI 取代,但设计师的工作重心,正在被彻底改写。

过去那些被反复强调的步骤,比如调研、mock、高保真稿打磨,正在快速缩水。可事实上,Claude 的设计师并没有因此清闲下来,反而更忙了:

“我看到两类设计工作正在成形

而且,焦虑也不只发生在设计师身上:

“不仅是设计师觉得要跟上工程师的节奏。我觉得工程师自己也在问:‘我们到底怎么才能跟上我们自己?’”

这位 Claude 设计负责人名叫 Jenny Wen,她在一个访谈节目中表示:

“几年前,这份工作里有 60% 到 70% 都是在做 mock(设计稿/界面示意图) 和原型。但现在我觉得,做 mock 的部分大概只剩 30% 到 40% 了。”

不是设计师变懒了,而是产品的节奏变了。功能在滚动上线,代码部分由模型生成,版本像是“长”出来的。当你还在精雕细琢,产品已经更新了。

在 Anthropic,会写代码已经成为设计师的“基操”。被工程师逐渐抛弃的 IDE,反而成了设计师的新工具。

Jenny Wen 还分享了自己的 AI 工具栈

日常几乎是“全套 Claude 组合拳”:用 Claude Chat 处理日常对话,用 Cowork 承担长任务和复杂流程,用 Claude Code 在 VS Code 里改代码细节,甚至在手机和 Slack 里远程 @Claude 直接改前端、提 PR,把设计和工程无缝连在一起。

她指出,在像 Anthropic 这样的 AI 公司里,产品发布时有缺点不可怕,迭代太慢才可怕:

“AI 的用例,很多时候不是你事先“设计出来”的,是你看着用户怎么用、边看边发现的。所以执行与迭代非常关键。”

那么,在这样的变化下,什么样的设计师最有竞争力?

她点出了三类人

第一类是很强的“通才”(generalists)。不是那种“很多都懂一点”的通才,而是要在几个核心技能上都能做到接近行业 80 分位的水平,很扎实、很能打。

第二类是“深度专家”(deep specialist)。可以是非常技术向的,甚至能做到 50%像软件工程师。也可以是视觉设计特别强的人。在一个“人人都能做出东西”的世界里,这种很深的、强工艺的能力,反而能让你做出来的东西真正有辨识度。

第三类,她称之为“craft new grad”(“工艺感型应届生/新人”)。这是那种职业早期的人,但给人的感觉“聪明得超出年龄”,学得快、愿意学新打法、不带太多固定仪式感和流程包袱。

对此,有网友评价道,别怕 AI 抢走工具,真正属于设计师的是判断力和想法——与其拼命守住过去的工作方式,不如相信自己的直觉,走进变化里。

还有人说得更干脆:“AI 只是让创意脱离表达壁垒,回归单纯的精神创作罢了。”

下面是这期访谈的全部重点内容,AI 前线在不改变原意的前提下进行了编辑。

设计工作的变化

主持人:我们先从一个大问题开始:AI 崛起之后,设计流程到底怎么变了?

Jenny Wen:变化非常大。而且我觉得它还会继续变很久。

过去这一年,我们看到工程的变化比设计剧烈得多。但工程一变,设计也会被迫跟着变。

几个月前,我在柏林做过一个演讲,题目叫《别再迷信设计流程》(Don’t Trust the Design Process)。我在里面讲的是:传统那套设计流程,你做研究与探索(research & discovery),然后发散与收敛(diverge / converge),大家不停地说“相信流程、相信流程”,那套东西基本已经死了。

其实在 AI 之前,它就已经在走下坡路了,但现在工程师可以同时“拉起七个 Claude”快速做功能,作为设计师,你必须放下那套流程。

甚至在我做完那个演讲后的三四个月里,我都觉得它已经有点过时了(说出来还挺尴尬)。尤其是 Opus 4.6 出来、以及很多人假期里开始重度使用 Claude Code 之后,这种被迫改变的压力只会更强、更快。

Jenny Wen:我现在看到两类设计工作正在成形。

第一类,是支持实现与落地执行(implementation & execution)。工程师用多个 Claude agent 飞快地产出功能。任何人都可以提出一个想法,往往工程师会立刻做出一个“能跑起来的粗糙版本”让你试。作为设计师,你已经没有时间再按传统方式做那些精致的高保真稿、或者用那种方式来“主导”了。

第二类,是做愿景与方向(vision & direction)。这依然非常重要,但形态已经变了。

以前我们会做两年、五年、甚至十年的设计愿景。现在更像是三到六个月。与其产出一份“讲得非常漂亮、做得非常精致的 deck”,有时候可能只是做一个原型,给大家指明方向。

在一个人人都能拉起多个 agent、随便朝任何方向做东西的世界里,你需要有东西把大家的工作拉向一致性与效率,让整体能“合到一起”,而不是各做各的。

主持人:所以,不是设计师突然想转型,而是工程迭代快到飞起;与其挡在前面审批,不如先放手让它跑,再在后面把方向、逻辑和体验一块块拼回正轨。

Jenny Wen:对,差不多就是这样。

并没有一个统一的声音在喊“设计师必须立刻改变”,更多是工程工具链变化带来的下游影响。

我也觉得接下来一年左右,设计工具也会发生很大的变化。但目前整体还是在追工程。

同时这也挺“解放”的:设计师也能用各种编码工具参与到实现里。

我现在做了很多“最后一公里”的实现工作,打磨细节、在代码里跟工程师紧密协作,把功能真正推过终点线;也会直接用代码做原型,而不是再依赖工程师来做这些。

主持人:这种变化在所有公司都会发生吗?还是主要在像 Anthropic 这种 AI 原生公司?可能有人听完会想:好吧,Anthropic、Claude 肯定在最前沿,团队也很偏开发者。但他会觉得:这不一定会发生在 Salesforce、ServiceNow 这种公司吧。

Jenny Wen:我去年在柏林的那场演讲,意外成了我做过“共鸣最大”的一场演讲,这说明整个行业里很多人都开始感受到这一点:老的设计流程用不下去了。

设计师、PM 都在用 Claude Code、还有 v0 之类的工具做原型,PM 也开始自己“拉起来”原型了,所以确实有一股趋势正在出现。

但那次演讲也有不少反弹。很多人把整个职业生涯都建立在这套稳定的设计流程上,学习它、教它、用它,他们会强烈地维护它,比如说:“没有 discovery 不行”“这些流程环节不能丢”。

所以确实也有一部分行业还没走到这个工作方式上。

快速发布 vs 深度调研(Ship Fast vs. Deep Discovery)

主持人:到底什么路径会带来更成功的产品和公司?一种是花时间做 discovery、用户研究、mock、迭代、beta 测试;另一种是工程师快速发布一些“还行但不完美”的东西,然后快速学习、快速迭代。你的感觉是:第二条路现在反而可能更快逼近真正好的产品吗?

Jenny Wen:我觉得你必须用判断力去决定什么时候该发。但总体来说:能快速执行、把东西做出来、用真实数据去试、以真实用户为中心去验证,这确实会带来更好的产品。

特别是我们现在做的很多东西,是基于非确定性的 AI 模型。你没法把所有状态都 mock 出来,也没法光靠理论推演。甚至你都很难做一个“可点击”的原型把所有情况覆盖掉。你必须接上真实模型,用真实用户的用法去跑,才能知道会发生什么。

而且 AI 的用例,很多时候不是你事先“设计出来”的,是你看着用户怎么用、边看边发现的。所以执行与迭代非常关键。

在 Anthropic 当设计师的一天(A Day in the Life at Anthropic)

主持人:那在 Anthropic 做设计师到底是什么体验?能不能讲讲一天的工作是什么样?

Jenny Wen:在 Anthropic,有相当多的时间其实都花在“跟上公司里正在发生什么”上。

我也在一些规模差不多的公司工作过,当然也会信息很多、事情很多。但在这里我会更强烈地觉得:我必须跟上。

一方面是研究侧的模型进展;另一方面任何时候都有很多团队在做原型、试不同想法,各种项目代号满天飞。我经常在做的事就是:搞清楚这些项目到底是什么、各自走到哪一步,因为我想提前看到“接下来会有什么东西要找上我”。

同时公司内部也有很多原型和产品,我自己也想去试。我很好奇,想把这些东西摸一遍。

另外还有很多内部的人会写一些对行业走向的洞见与观点,有些是偏哲学层面的争论,有些是公司方向的讨论,读起来特别有意思。

在别的公司,我可能会觉得:这都不是我能影响的,离我很远,不太在意。但在这里,因为信息量和事件类型都不一样,我会特别想跟上。

Jenny Wen:除了“跟上信息流”之外,我还是会留出一些时间去想未来。

比如这周我就给自己划了一段时间:我们之前在 Co-work 上一直处于强执行模式,现在我想停下来想想:接下来三个月会怎样?在市场、模型进展的背景下,它可能会往哪里走?

把方向可视化出来,对团队对齐很有帮助,能把大家往同一个方向拉。

然后我也会花很多时间跟工程师一起“jam”,大量是对话、白板推演、看他们做出来的东西,然后给反馈,像一种“设计咨询”式的参与。

我一天里也会有一部分时间在写代码:做打磨、做实现。经常是我和工程师一起把一个东西讨论清楚,他先做出第一版,然后我进去一起把它抛光。

这个部分真的很有趣,而且说实话几个月前这还不是我工作里这么重要的一块。

传统设计还在,只是比例减少了

主持人:你还会做传统设计流程里的那些事吗?比如原型、用户研究、panel(访谈/小组)、你刚才描述的整套流程。

Jenny Wen:会的,我们还是在某种程度上做这些。团队里有用户研究员,会做传统研究,也会做问卷;全团队都会读那些研究和反馈。我们也还在做原型、我也还在做 mock。

只是我现在工具更多了,而且每块事情花的时间比例变了。

主持人:也就是说,以前你生活的“饼图”大概是:传统思考、规划、原型、mock、研究,再加上一些反馈与执行;现在这个饼图变了。

Jenny Wen:对。几年前我可能会说:60% 到 70% 的时间是做 mock 和原型;剩下的 20% 左右是在跟工程师一起 jam、一起咨询式配合;最后 10% 可能是协调类会议。

但现在我觉得:做 mock 的部分大概 30% 到 40%;另外 30% 到 40% 是直接跟工程师配对一起做;然后还有一块(具体占比我也说不准了)是实现,真的去做、去交付、去发布。

Jenny 的 AI 工具栈

主持人:你的 AI 工具栈是什么?

Jenny Wen:我们基本就是在 Claude 全家桶里深挖。

我当然用 Claude Chat,但越来越多地用 Claude Cowork

我几乎把所有“聊天类需求”都迁到 Cowork 了,因为它更适合长任务、长流程的事情,而我以前问 Claude 的大多就是这种长任务。

然后还有 Claude Code。我主要是在 VS Code 里用,因为我经常要改前端细节,能看着代码再跟 Claude 对话会很方便。

我也在尝试更多“远程使用 Claude Code”的方式,比如手机、比如 Slack。特别好玩:有人说“这个 icon 偏了”,你直接 @mention Claude,Claude 就给你改了,然后你把 PR 捡起来一看:搞定。这个体验真的很爽。

总之,我们这里基本是“全屋 Claude”。

主持人:你还在用 Figma 吗?

Jenny Wen:在用。

主持人:现在 Twitter 上有个很大的争论:设计的未来是不是 code?我们还需要 Figma 吗?还需要“设计工具”吗?你的看法是什么?

Jenny Wen:Figma 仍然重要。可能我作为前 Figmate 有点偏爱,但每次我用 Figma 都会觉得:对,我就该用这个。它依然在很关键的地方补上了缺口。

很大一部分是“探索多方案”的能力,你能快速想到八到十种不同做法。很多最好的设计,就是在你能把一堆想法扔到墙上,然后再筛选、再整理、逼着自己想更多方向的时候诞生的。

而现在这些编码类工具并不太适合做这种探索,因为它非常线性:你会在一个方向上投入很深,然后跟 Claude 反复迭代这个方向。

Figma 让你能发散去探索很多不同的选择,我觉得它还会以这种方式继续存在。

另外还有一些非常细的视觉与交互细节,也特别适合在 Figma 里试,比如字体、微交互、风格探索。把这些放在一个画布上专门对比、推敲,非常有价值。很多时候我并不想直接跳进代码来做这些。

IDE 成了设计师的新宠

主持人:有意思的是你还在用 IDE,因为在工程那边,明显正在往命令行、agent 流程迁移,IDE 好像都不“酷”了。但你这里很好理解:你只是想改点 CSS、颜色之类的,跟 agent 说“把这个 hex 改一下”反而更麻烦。

Jenny Wen:对,真的很烦。有时候你说“把这个换成那个 class”,还不如自己进去把 class 改掉。

主持人:会不会未来 IDE 反而更像是设计师和 PM 的工具,而工程师已经走到别处去了?

Jenny Wen:也许吧。

主持人:所以你大量时间是在跟工程师一起工作。 我从你的建议里总结出的一个重点是:放手。核心不是死守设计当“最后审批人”,而是让工程先跑起来。可问题是,当工程每天都在发版、迭代飞快,设计师怎么既不被甩在后面,又不把自己逼疯,还能让产品最终看起来像一个整体?

Jenny Wen:每次我和工程师一起工作,尤其是在更偏“顾问式”协作的情况下,我都会尽量解释清楚:我为什么会这样想。

目标是帮助他们提炼出背后的原则,而不是我只丢一句:“不,我觉得这里不应该放这个。”

我会换成这样表达:“我觉得这里应该有一个按钮,因为不是所有人都意识到你可以通过 prompt(提示词)触发这个功能。”然后我会给一个例子,可能来自用户研究,或者其他证据。

我会刻意把工程师带回设计系统和对应的代码规范上。因为现在很多代码是 Claude 写的,而它并不会天然遵循既有的设计模式,如果没人盯着,很容易越写越跑偏。

所以,对我来说,最重要的不是每次都亲自盯着,而是让工程师理解原则和设计系统,未来能自己判断、自己做对,而不是事事都来找我。

至于你说的“别把自己逼疯”:很难,现在真的很难。

我从工程师和设计师两边都听到同样的感受。因为我们现在能做到的事情太多了,于是就会想做更多。

所以不只是设计师在想:“我们得跟上工程师。”工程师自己也在想:“我们到底怎么才能跟上我们自己?”

在 AI 时代如何维持工艺感、质量与信任

主持人:对设计师来说,工艺感(craft)、优秀体验、质量和信任,是这份工作的核心。理论上也会带来更成功的产品和公司。当产品一天能发布上千次、你根本跟不过来,而且似乎也没有设计师参与时,你怎么思考如何维持工艺感、质量和信任?

Jenny Wen:倒也不是完全没有设计师参与。更准确地说,是一个设计师要兜住的东西几乎太多了,多到一个人根本顾不过来。

我会重点关注的是:一个功能或产品在用户“采用周期”(adoption cycle)里处于什么阶段,相比之下,它到底还是一个很早期的预览,还是已经进入更广泛的使用。

比如,我们有时会发布一些东西,并且明确告诉大家:“这是一个 research preview(研究预览)。”它还很早期,会有缺陷,我们会把这个前提讲清楚、把预期管理好。

Claude Cowork就是个典型例子。我们把它当作“研究预览”发布,很清楚它还不完美,甚至可以说这是它目前“最差的版本”,之后只会更好。但我们还是选择上线,因为内部反复验证过它的价值,相信它已经能让一部分用户真正受益。

它可能还不是最容易上手的;可能还不是最高质量的;可能还有问题。但我们仍然放出来,是因为我们认为收益大于代价。

我觉得这样是可以的,尤其当它已经有明确价值,而且值得尽快让用户先用起来。

但你必须对用户做出的承诺是:“我们先把它放出来,但我们会持续迭代。我们会听取你的反馈,把它做得更好。”

你要对这件事做出承诺,并且要让用户看见。你必须回应反馈、展示持续改进。

因为“提前发布”最容易丢掉质量信任的一种方式就是:你先发了,然后就没下文了,这才最伤品牌。

但如果你提前发布,同时持续迭代,其实是可能在不伤害公司品牌的前提下做到的。

我觉得我们做得还不错。如果要给听众一个 takeaway(关键结论),那就是:我们会继续这么做。

而且说实话,这对我作为设计师来说也很有趣,因为你把东西放出去,立刻就能学到东西,立刻就能收到反馈,也立刻就知道下一步该做什么。

主持人:我听你描述这件事的方式是:用速度来建立信任。

Jenny Wen:对,完全是,用速度建立信任。但同时也要让用户觉得“被听见了”。要让大家清楚:我们是在根据他们想完成的事情来修、来改;他们的反馈被重视、被使用了。

主持人:这点在 Labs 团队发布东西时特别明显。你们都很擅长:大家在推特上发,团队立刻回复推文和评论,然后继续发版,“我们昨天就修了”,“这个正在推进/已经发生了”。给人的感觉很明确:这是今天的真实状态。我们知道它哪里坏了,我们会修。而且因为 Claude Code 写代码很快,所以修复也来得非常快。

AI 会不会拥有“品味”?

主持人:现在很多人都在问:当 AI 从补全代码进化到几乎写完整个产品、甚至能帮你想点子,人类到底还剩下什么价值?在真正的“超级智能”到来之前,我们还能在哪些地方不可替代?

Jenny Wen:我认为它(AI)会在品味、判断力和设计方面变得更强。

我也觉得,我们可能把这些东西抓得有点太紧,会说:“设计师永远知道什么才是最该发的,或者什么才是这个东西最好的版本。”

我确实认为 AI 的品味会提升。

但归根结底,总得有人来决定:到底什么会被做出来?什么才真正重要?

当人们说“AI 会替我们把软件都做了”的时候,做软件最难的部分,很多时候并不是“把它做出来”。你回想自己工作中最艰难的时刻,往往是因为你和别人对“一个功能该不该进、该怎么进”产生分歧。AI 可以参与讨论、提供建议,但它未必能替你解决你和另一个人之间的争执。

所以,“决定最终到底把什么放进我们构建的产品里”这件事,本身就是一种品味。但可能不是审美意义上的“taste”,更像是对下一步该做什么的判断。

主持人:看到 AI 这么快接管 coding,一年前,甚至两年前,大多数人都会说“不可能”,而现在最优秀的工程师已经信任它到甚至不看代码了……

这让我重新审视了很多假设,比如:“AI 永远不会像顶尖 PM 或设计师那样,判断什么是好、决定做什么。”

但我现在开始觉得它可能会做到。甚至在你描述的场景里,它可以对两个正在争论的人说:“这是你需要的全部数据。为什么这个才是正确答案。按 1,我就把它做出来。”

主持人:那你的意思是:AI 会变得更强,但我们仍然需要很厉害的设计师、很厉害的 PM、以及工程师?

Jenny Wen:对。

总得有人决定:“我们要做这种产品。”或者当 AI 提供了一堆可能性时,也需要有人对最终决策负责。

即便 Claude 能写代码,工程师仍然要对“代码是否能工作、是否符合产品逻辑”负责。

所以仍然存在这样一层决策或判断的责任。也许有一天我们不需要承担这层,但至少现在还得由我们来承担。

聊天机器人界面的未来

主持人:AI 界面设计里还有一个持续的问题:聊天机器人和终端。我觉得没人一开始会认为聊天机器人会成为 AI 的长期 UI。大家以为它只是过渡。结果现在更进一步,终端也变得重要了。你觉得我们和 AI 的交互方式会不会还有下一步?还是 chatbots 和 terminals 最终会成为主流?

Jenny Wen:我觉得很可能会是“组合形态”。

会有一些你可以点、可以交互的 UI 和界面,更具触感的体验。我们在 Claude 内部,甚至在 chatbot 里,已经看到并在尝试这种方向。

我们最近发布了一些 widgets(小组件),让 Claude 可以用交互式方式问你问题,并展示天气、股票等信息。这些反响不错,因为人们仍然喜欢看到 UI、喜欢点它、摸它、操作它,而且很多时候这比把所有东西都打字输入 Claude 更高效。

与此同时,当我们更深入地拥抱 chatbot 这种范式,它带来了一个“固定、预先写死的 UI”做不到的灵活世界。

所以我的判断是:我不觉得 chat 会消失。它打开了一种全新的方式,几乎无限多种方式,让我们与模型协作、让我们和电脑对话,这是以前没有的。

但在一些具体事情上,直接的 UI 仍然是最好的选择。而且我认为,未来会有更多 UI 是由模型生成的,而不是每次都靠人手写出来。

所以我们现在处在一个阶段:我不认为 chat,甚至可能包括“对着终端说话”会消失。

挺有意思的是:像 OpenClaw、Clawdbot、Moltbot 这些名字,它们其中一个很大的创新,其实就是提供了另一种聊天入口:WhatsApp、Telegram、短信 SMS。那是一个很大的“解锁点”:“哦,我可以直接在 WhatsApp 里跟它聊。”

而且你想,我们人类本来就一直在聊天、一直在说话。这是一种很丰富的交互方式。现在只是多了一个媒介,让我们能用它和电脑互动。

主持人:对,Kevin Weil(他在另一家 AI 实验室工作)提过一个很好的观点:对话是一种非常强的界面,几乎适用于所有层级的智能。

我们可以跟很聪明的人说话,也可以跟没那么聪明的人说话,都能沟通;它能覆盖整个智能谱系。我们甚至可以和 200 IQ 或 300 IQ 的人交流,对话依然有效。

这也是为什么它成为了一种很美的方式,能够和不断增长的模型智能一起“扩展”,而且会持续有效。

Jenny Wen:嗯,我完全理解,这很有道理。

从 Director 回到 IC

主持人:好,我想回到“管理 vs IC(个人贡献者)”这个话题。你最近又重新回到一线做 IC 了,能聊聊为什么这么选择吗?以及在你看来,设计管理者是不是也有必要下场,重新做一段时间具体工作?

Jenny Wen:对,我确实有一些看法。

过去这一年在 Anthropic,我一开始是以 IC 身份加入的。之后带团队做了几个月管理,因为组织结构需要。现在我又回到全职 IC 了。

我之所以以 IC 身份加入,是因为我对需要被完成的工作很兴奋,而且我想贴近工作本身。

同时我也觉得,在我“继续往企业阶梯往上爬”之前,这可能是个重要时机。我当时脑子里也在想:未来中层管理还安全吗?这个岗位会不会持续存在?还是我应该先下场,把手弄脏?

公平地说,我两边都喜欢:我喜欢管理人、搭建团队;我也喜欢做 IC 工作。我当时其实有点像“勉为其难的管理”:“行吧,需要我我就做。”

但今年做 IC 让我学到了很多,如果我一直做管理就学不到的技能。

今年设计流程变化太大了,我也因此补了很多硬技能,如果我只做管理,我根本没时间去发展这些能力。

如果以后我再回去做管理,我会对流程变化有更强的同理心和理解。这很重要,因为团队现在的工作方式确实变了。如果你自己不在这种方式里工作:去测试工具、尝试新方法,就很难真正共情。

如果我没在这个环境里亲身经历,我不确定我是否能完全理解它,或者是否知道该怎么带团队。这就是今年给我的收获。

主持人:你之前在 Figma 是设计总监,对吧?团队有多大?

Jenny Wen:最大的时候,大概 12 到 15 个设计师,我下面还有几位 manager。

主持人:你提到过一种感觉:中层管理可能不会长久。你现在怎么看?设计管理会长期存在吗,还是大家都会变成 IC?

Jenny Wen:只要有团队存在,有一个人来管理通常就会有帮助。

管理者确实有价值,关键在于这个角色的形状、以及他们实际在做什么。

现在一个真正有用的管理者,不再只是纯粹的人事管理:“帮你做职业发展”“做一对一”“确保你在工作中感觉良好”。这类东西相比以前,感觉没那么“成立”了。

我觉得未来的管理者,是既能为团队指明方向、也能带好人的人:既深度参与具体工作、提供清晰判断,又能营造一个让团队发挥出最佳水平的环境。

主持人:你觉得自己长期会回去做管理吗?

Jenny Wen:我大概率会。我很喜欢帮助团队把产品做到最好。我的座右铭是 “whatever it takes(不惜一切代价)”。

如果团队需要有人定方向、搭团队,那可以是我;如果需要有人下场执行,那也可以是我。

主持人:所以你的意思是,设计管理者最好也重新回到一线做一段时间具体工作。只有亲身经历这些变化,才能真正理解当下的环境,也才能把团队带好。

Jenny Wen:我觉得是的。

传统上在工程领域,他们招一个 EM(工程经理),甚至有时候是 director,会让 EM 先轮转几个月,接一些任务,理解技术之后,再成为全职 manager。

设计可能也需要类似机制。历史上,设计更偏人事管理导向。

主持人:那你回到 IC 之后,觉得自己最生疏的是什么?

Jenny Wen:其实是做 crit(设计评审),以及被批评。 真的很难。经常性地接受批评性反馈很难。

作为设计师,把作品拿出来、讲出来,然后持续接受大量 critique(评审意见),本身就是一个很脆弱、很需要心理准备的过程。

Claude Cowork 的“10 天构建”

主持人:所以你现在是在负责 Cowork 的设计,对吗?

Jenny Wen:对。

主持人:Boris 之前说过,大家一开始对 Cowork 有很多宏大设想,争论不断,最后反而收敛成一个更务实的决定:先把它做成产品里的一个“高级终端”。那它为什么最终长成现在这个样子?这个形态是怎么一步步定下来的?

Jenny Wen:Cowork 这块,我们内部其实做过一堆不同形态的原型(prototype)。我们尝试了很多东西,也一直不太确定到底什么时候才算“准备好可以发”。

后来事情就像是突然同时发生了一样,“好,我们很快就要发了。”

然后就是 10 天,10 天的构建。

当然,整体肯定不止 10 天。更准确地说:从我们内部已有的东西,到我们觉得可以对外发布的版本,大概用了 10 天。我们其实已经做了一阵子,只是一直没确定最终该以什么“形态”(form factor)呈现。

之所以能走到这一步,是因为我们之前有很多内部探索,比如各种 agent harness(智能体驱动的框架/底座)之类。我们把一些交互的小模块先单独做原型,后来这些模块才逐渐演变成 Co-work 里最终呈现的样子。

举个例子:当 Claude 给你一个待办清单(to-do list)时,我们试过很多不同的展示形态;它给出多选题(multiple-choice questions)时,我们也试过很多不同形式;还有怎么教用户理解“这东西能干什么”(use cases),我们也探索了不同方式。

我也不敢说我们最终选的是“史上最好的形态”,但基本上,我们把内部已经跑通、大家确实喜欢的东西拿出来,然后觉得:与其继续闭门打磨,不如先发出去,获得更多真实信号。

所以,我们逼着自己在那 10 天内发布,本质上就是:“不管现在手里有什么,就先放出去,然后再在真实反馈里迭代。”我们现在也确实在这么做。

主持人:而且你们一发布就“炸翻互联网”,所以看起来这招挺成功的。

主持人:在 Cowork 目前的功能里,有没有哪一个是你最自豪的?或者有什么你特别迫不及待想修、想改的?

Jenny Wen:说实话,我最自豪的是:我们把它发出来了。真的,就是发出来了。

具体某一个功能我还说不上来,因为一个东西做久了,尤其对设计师来说,你眼里大部分时间看到的都是它的缺陷。

但我有很多事情很兴奋。比如我们一直在迭代首页,希望它更像这样:“这些是你可以交给 Claude 的任务”,以及“这些是 Claude 正在做的任务”。

这应该正在逐步上线,也许等这期播客播出的时候,已经上线了也说不定。

主持人:对,我看到了这个小小的随机推荐按钮,你点一下它就会给你不同的想法。

Jenny Wen:对。

然后当你真正开始和 Claude 一起工作时,我们也希望它更像一个待办清单:“这些是 Claude 正在处理的事情”,“这些是 Claude 需要你关注/介入的事情”。

我们有机会把它做得更像一个“你和 Claude 共用的任务清单”。我很期待继续往这个方向迭代。

我也很期待去思考更本质的“形态”问题:它会不会永远在你屏幕上常驻?还是它会跨越不同的工作界面/不同终端,在它正在做事的那些“表面”(surfaces)上主动触达你?

主持人:我很喜欢你刚才澄清“并不只是 10 天”。很多人爱说“我们 10 天做出来的”,但你强调的是:前面其实有大量时间花在方向判断、原型、mock、各种尝试上,然后才是“好,我们知道它大概该是什么了,开干,发布”。

Jenny Wen:对。不知道为什么,Cowork 发布后在网上最病毒式传播的点变成了“只用了 10 天”。

但事实上,我们做过很多探索,有很多人在不同模块上同时推进。真的不只是 10 天,而且参与的人也很多。

它属于那种“这个点子反复出现,但总不是最合适的时机”的项目;或者它会以不同变体出现。然后突然某一刻时机到了,就会觉得好像一切都理所当然、好像“早就该这样”,但其实背后是一条很长的路。

主持人:如果有人对 Cowork 还不太了解,我会这样描述它:像是“长了手的 Claude”,它可以在你的电脑上真的动手做事。你觉得用一两句话这么说合适吗?

Jenny Wen:这个说法很好。我之前没听过,但我很喜欢。我可能以后会更常用,“长了手的 Claude”。

我也会这样想它:Claude 特别擅长把你的一堆“垃圾”整理成好看的东西。

我最喜欢的一个 Cowork 用法是:我给它一个文件夹,里面是什么其实不太重要,但它能从里面提炼出有价值的东西。我已经这么做过很多次了。

AI 时代,哪三类设计师人才最抢手?

主持人:在设计师岗位变化这么大的情况下,你现在在招人时,会特别看重什么新的特质?你觉得在这个新世界里成功所需要的关键是什么?

Jenny Wen:我觉得在这种环境里,一个很重要的东西是“韧性”,一种“顺势而为/能滚动适应”(roll with it)的心态。

身边变化太快了,你得愿意调整、愿意试新方法、试新工具、不断学习,而不是被旧流程卡住。

然后我觉得现在有三类人特别有意思。其实以前也重要,但在这个时代它们显得更关键。

第一类是很强的“通才”(generalists)。不是那种“很多都懂一点”的通才,而是更像“块状能力”(block-shaped):如果按 T 型人才来讲,他们在几个核心技能上都能做到接近行业 80 分位的水平,很扎实、很能打。

这非常罕见,也很难招。因为设计角色正在被拉伸,越来越像 PM,也越来越像工程。你如果在几个能力桶里都很强,就更容易扩展、灵活变形自己的角色。

所以这种人很让人兴奋,当然,这要求也很高。

第二类是“深度专家”(deep specialist)。在 T 型人才里,“T 的那一竖”比多数人更深,可能是行业前 10% 的水平。同样也很难找到。

我觉得某些公司能招到这样的人,会非常幸运。

第三类,也是我觉得现在被低估的一类,我称之为“craft new grad”(“工艺感型应届生/新人”)

这是那种职业早期的人,但给人的感觉“聪明得超出年龄”,同时又谦虚、渴望学习。

很多公司现在都在招资深人才,做过类似事情的人。但由于岗位职责在变、期待在变,反而需要一些“白纸”型的人:学得快、愿意学新打法、不带太多固定仪式感和流程包袱,这在今天非常有价值。

所以这三类人,是我现在最兴奋的三种原型。

主持人:关于你说的“深 T”:比如一个人在哪种技能上特别强,可能是什么样?

Jenny Wen:有些设计师非常技术向,甚至能做到 50% 像软件工程师。这很有意思,因为对我们来说,你现在很多时候是直接在和模型打交道,深一点的工程经验会非常有帮助。

另一种深度专家是视觉设计特别强的人,比如图标(icons)。在一个“人人都能做出东西”的世界里,这种很深的、强工艺的能力,反而能让你做出来的东西真正有辨识度。

给新人和资深设计师的建议

主持人:如果一个年轻设计师想入行并且做得好,甚至想加入 Anthropic,你会给什么建议?

Jenny Wen:做很多东西。多试、多做,做出真正的东西。

我不知道现在的设计教育是什么状态,但我读书那会儿,很多东西偏理论,各种方法论、框架。

而我认识的最厉害的“craft new grad”,其实就是直接用技术把东西做出来。他们不会因为自己经验不足就觉得受限。有时候,他们反而因为“没有那些包袱”,更自由。因为我们这些在行业里待久的人,身上会背着很多预设和期待,而他们没有。他们会觉得“一切皆有可能”。

所以:多做、多分享,并且找到一个也在做东西的社群。

我母校后来搞了一个叫 Socratica 的东西,他们的核心就是做项目、展示项目,像科学展览那样。有一波人就是“做东西的人”:有人做了“Claude 机器人”项目,组装机器人让它跑在 Claude 上;还有人在波士顿一辆公交车上贴了那种会动的玩具眼睛(googly eyes)。

它传递的就是一种行动力:“我们就是可以动手做事。”同时也有社群感:大家都在尝试、在构建、在分享。

不管在什么学校或背景下,只要你能找到类似方式,这种“做出来”的作品,会让人非常突出。

主持人:那对资深设计师来说:你是不是必须变得更技术化、必须学会写代码?还是说不往这边靠也能成功?

Jenny Wen:我觉得懂一点会有帮助,不一定要学到能从零搭建所有东西,但现在设计语言里越来越多地包含“实现”(implementing)这件事。

我也在想:随着模型和产品继续变好,我们会不断往更高的抽象层移动。你可能不需要理解每一行代码到底怎么跑。

但我会建议:把 coding 工具纳入你的工具箱。

不管你最后是不是“技术型设计师”,设计师都应该知道这些工具、会用这些工具,而不是按传统方式去学 React 那一套。

主持人:如果把 Claude 或 Claude Code 当成一个“设计师”来看,它现在到底有多强?你会愿意把它当成团队里的设计师来用吗?

Jenny Wen:还不会。我觉得 Claude 现在还达不到“可雇佣设计师”的程度——它还不是强通才,也不是深度专家,也不是“craft new grad”。

它很擅长做第一轮草案、给出很多不同想法,但还没有哪种东西让我觉得“特别、值得雇进来”。

不过从另一个角度说,这对设计师来说暂时是好消息。

当然也很有意思去看它会变到多强。最大的开放问题是:它能不能做出真正惊艳的、全新的、独特的创意体验?还是永远不可能像人类设计师一样?

但它在过去一年里确实进步很大。

“低杠杆任务”的价值(The Value of “Low-Leverage” Tasks for Managers)

主持人:你之前提到过一些关于管理的看法,比如你有个挺颠覆的观点:管理者并不存在所谓“低杠杆时间”,那些看起来不重要的小事,其实往往很有价值。能具体说说你的理解吗?

Jenny Wen:对。我记得我刚做管理者时,曾听过一些建议,可能来自课程或书,强调要优先级管理,把工作分类。

比如一个 2x2 框架,大概是:“只有我能做的事”“别人也能做的事”,以及剩下的都算低杠杆,你就不该再做了。

而很多所谓“低杠杆任务”,往往是很琐碎、很钻细节的事情,理论上别人也能做。

但我回想我最尊敬的那些领导者,他们身上一个很强的特质是:他们会挑一些“看起来低杠杆”的事,自己亲自去做,结果这些事反而变得高杠杆,恰恰因为是他们在做。

比如一个例子:很资深的领导会深度 dogfood(亲自长期使用自家产品)。他们不停测试、复现 bug、把日志发给工程师、挑细节。很粗粝、很耗时间,但它能让你对产品建立极深的熟悉感。

而且它也会营造一种氛围:“这个领导真的在乎,真的懂产品,愿意卷起袖子和团队一起干。”

同样地,一个资深领导亲自修一个 bug 也很有力量。我见过 Mike Krieger 自己提 PR。那很棒,因为它传达的信号是:“我们都在同一条船上。没有什么工作是这个人不屑做的。”

再比如一个文化层面的例子:有人会特意花心思做一张很用心的周年纪念卡片。按理说助理也能做,但当一个领导亲自做时,它表达的是:他/她愿意为“在乎”付出时间和努力。

这就是我想践行的:主动选择一些看似低杠杆、但其实值得我亲自投入的事。

主持人:太有意思了。从某种意义上,低杠杆会因为“你亲自做”而变成高杠杆,因为你的下属并不期待你会把时间花在这上面,所以它反而很突出。

Jenny Wen:对。而且它也会成为一种“你的领导风格之所以特别”的组成部分。

主持人:我还听说你会鼓励团队成员互相 roast(吐槽/调侃),表面听起来不是个很美好的工作环境。但我也听说你带出来的团队,往往是最快乐、绩效也最高的。聊聊 roast 这件事,以及你对打造高质量团队有什么体会?

Jenny Wen:我不是那种会说:“哟,你们得互相 roast!”的人。我不会强迫。

但我想心理安全感(psychological safety)以及团队成员真的相处融洽时,你想想你的朋友:你们会互相开玩笑、互相调侃、试探边界。你不太会一开始就这么对同事,因为你们还在建立舒适感和安全感。

所以我并不是希望团队一定要 roast,但当大家舒服到能开一点玩笑时,往往是个好信号。

如果他们也能对你这个 leader 有这种感觉,也可能是好信号,因为说明他们不怕你,有安全感:他们可以说点什么,而不用担心“说错了就被炒”。

比如我上一个团队,他们会拿我在 crit(评审)里常说的一些话来开玩笑,某些口头禅。

主持人:比如呢?

Jenny Wen:我总会说:“好,下一步是什么?”“我们怎么跟进?” 然后他们就会学我:“好,下一步是什么?”,有点模仿我那种语气。

我觉得这说明他们不怕我。他们信任我。也说明他们对彼此、对我这个人已经足够了解,知道边界在哪。

同时也总有人会问:你和你的下属是朋友吗?很多人会说不应该是朋友。

我对这个平衡的理解是:你需要一个心理安全的底座,大家对彼此、对你都很放松,但同时他们也要知道你标准很高。

这两者看似有张力,但其实可以很好地共存:当心理安全建立起来后,大家彼此信任了,你再去坚持高标准反而更容易,因为你可以在没有恐惧的情况下这么做。

我会把它类比成一种“严格的父母”。我的团队知道:我会一直在,不会动不动就把他们开掉;但他们也知道我希望他们变得更好,我标准很高,我会和他们一起把作品做到最好。

所以这个平衡点就是:你能不能创造一个环境,让团队敢于 roast 你,同时也清楚他们必须做出很棒的工作,而且在你的带领下,他们也确实会做出很棒的工作?

主持人:这建议太棒了,让我想到《Radical Candor》(彻底坦诚):既真诚关心,又直接挑战。我听到的就是:让大家知道你很在乎他们,同时也要直说、要坚持高标准。

“可读性(Legibility)框架”

主持人:我听说你特别喜欢一个叫 “legibility framework(可读性/可理解性框架)” 的东西。讲讲它吧:你怎么用?为什么你觉得它很有价值?

Jenny Wen:我好像是去年在 Twitter 上看到这个框架的。作者是 Evan Tana,他是 SPC 的合伙人,也就是一个 VC。

它本质是一个 2x2。可能当时没引起太多关注,但我一旦开始用它去看问题,就停不下来了。

在这个 2x2 里:创始人(founders)可以是“不可读/难懂”(illegible)或“可读/好懂”(legible);想法(ideas)也可以是“不可读/难懂”或“可读/好懂”。

他的意思大概是:如果创始人和想法都非常“可读”,那这个想法往往就不够新颖,因为别人也能马上理解、马上去做,你就很难真的找到新的东西。

真正有意思的区域,是“想法本身不可读”的情况。这里的“不可读”是指:它站在前沿,人们还没理解;或者它的描述方式还没被表达成一种对大众最合理、最容易懂的形式。

这显然是 VC 很适合使用的一种视角:你要找别人看不到的机会,然后把它带到世界上。

但我也觉得,设计师的角色,至少在像 Anthropic 这种前沿实验室里,很大一部分就是:发现那些“不可读”的想法,努力看懂它到底是什么,然后把它变成“可读”的东西,不管是通过叙事表达,还是通过真正的 UX、形态(form factor),最后把它做出来并发布。

我刚才提到我会去翻 Slack、看大家在做什么,我其实就是在做这件事:看看有哪些想法“有能量”,但还不太说得清楚,这些想法值得我在工作里更深入去想。

有个和 Cowork 很相关的例子:去年中途,有人做过一个内部原型,我们叫它 “Claude Studio”。

它是一个非常密集、非常强力的界面,构建在某种 agentic harness(智能体框架)之上,我记得当时可能是 Claude Code。它有各种面板:展示 Claude 知道什么、会什么技能、正在做什么、输出预览等等。

我作为设计师看到它时的反应是:我不知道这里发生了什么。我真的看不懂。但我看到研究人员、做这个的人,以及很多内部同事,他们对它有很强的兴奋感和能量。我就觉得:好,这里面肯定有东西,只是我还没看明白。

这就是一个“不可读想法”的例子。

最终从那个原型里沉淀出来的是 skills framework(技能框架),也就是那些用来指示 Claude 如何做某事的 markdown 文件。我没有直接参与那部分;是做原型的人从中提炼出来的。

但后来当我开始做 Claude Cowork、思考这些东西应该以什么形态呈现时,那个原型对我影响很大:比如看到 Claude 的计划和待办、看到 Claude 的上下文、看到它在浏览哪些文件,这些信息形式,都启发我把它们从原型里“抽出来”,带进 Cowork。

所以,我会觉得设计师在看内部原型时,某种程度上也要像 VC 一样去思考。

主持人:我最近和一位 VC 做了个研究,回头看那些后来成为巨头公司的团队成员——比如 Palantir、Stripe、Linear、Notion,他们在公司还很早期时,到底看中了什么信号?

我们发现,一个重要因素是:那些想法往往疯狂到让大多数人觉得“不可能”,甚至被嘲笑,比如当年的 Palantir、OpenAI。

当然,听起来疯狂的不一定都会成功,看不懂的也不一定就是好机会。但你的意思是,真正值得关注的,往往是那些让人觉得有点陌生、还没被讲清楚,却又隐隐让你觉得有意思的东西——也许你能成为那个把它真正梳理清楚的人。

Jenny Wen:对,还有一点是:如果某个东西周围有能量,但我又不太明白这种能量到底来自哪里,那反而是一个信号,我应该深入下去,搞清楚它到底是什么。

主持人:对。因为很多被早期想法吸引的人,往往也说不清楚原因。你得自己去挖、去理解。

关于 Anthropic 的设计团队

主持人:除了我们聊到的,你还有没有什么想留给听众的话、想强调的点?

Jenny Wen:我想特别点名一下 Anthropic 的设计团队,夸夸他们。

他们是一群非常谦逊的人。他们不一定在社交媒体上特别高调,但他们做了很多很棒的工作,尤其是在工作内容变化这么剧烈的时期。

这个团队很有韧性,而且能力跨度很大:从非常技术、偏原型和实现的人,到非常讲究工艺、能把交付做得特别漂亮、直接上线并且很惊艳的人,都有。

而且我们全年都在招聘。所以我想说一句,如果我没把你们吓到:如果你觉得我们内部的工作方式“更刺激而不是更可怕”,我很愿意和你聊聊、建立联系。

主持人:最让人觉得刺激的是能拿到那些 Slack 的访问权限,或者看到所有正在被做出来的功能。

Jenny Wen:对,这才是核心好处。我们现在就跟超级智能聊聊,让它告诉我该投什么,开玩笑的。

主持人:那关于招聘,你有没有什么更具体的建议,给那些想申请的人?

Jenny Wen:想想我刚才提到的那几个原型,尤其是强通才和深度专家,这是我们最兴奋的两类。整体来说就是:“块状能力”和“深 T”。

最后环节:快问快答

主持人:你最常推荐给别人的书是什么?

Jenny Wen:第一本是 Robert Caro 写的《The Power Broker》。我推荐它推荐得非常“强势”,因为它大概有 1100 页。

但在这个时代,我们的注意力跨度那么短,我反而觉得它值得从头到尾完整读完。因为很少有传记或回忆录能横跨一个人的整个人生,展现他在几十年尺度上的变化。

而且这本书写的是一个非常有争议的人,Robert Moses,所以你能看到一个更复杂、更有层次的视角。我觉得我们之所以失去“长周期思维”,是因为太沉迷当下。这本书会提醒你:职业生涯很长;同时它也能帮你理解一个人如何把事情做得极其高效、极其到位。

所以第一本:《The Power Broker》。

第二本我也很常推荐,叫《Insomniac City》,作者是 Bill Hayes。他在科学家 Oliver Sacks 去世前后那段时间,是 Oliver Sacks 的伴侣。

这是一本非常美、很飘渺(ethereal)的回忆录,关于 Oliver Sacks 最后的日子,以及他们的爱情故事。它跟你的播客主题几乎没什么关系,Lenny,但我很爱这本书。它会让你思考死亡,也思考爱与生命。是我最喜欢的书之一。

主持人:你最近有没有特别喜欢的一部电影或电视剧?

Jenny Wen:最近看了《A Sentimental Value》。我是在飞机上看的,你懂的,这肯定不是导演希望你看电影的方式(笑)。

它是一部挪威电影,导演也是《世界上最糟糕的人》(The Worst Person in the World)的那位。节奏、写作、人物关系,都很细腻、很美。

它基本是一个家庭故事,但也围绕他们一生居住的那栋房子展开。很美的一点是:那栋房子本身几乎也成了一个角色。我也不知道还能怎么形容,就是一部非常好的电影。

然后我也会推荐,当然,《The Pit》第二季。我们最近在追。我觉得大家都喜欢看“专业能力很强的人在认真工作”的内容。

主持人:想象一下当那部剧的演员得多辛苦,要学要背那么多术语。

Jenny Wen:对对对。而且看起来节奏也超级快。他们一镜到底要完成那么多动作、那么多走位,演员一定很难。

我也是最近才意识到 Noah Wyle 年轻时演过《急诊室的故事》(ER),现在又在这部剧里当“主心骨”了。

主持人:你最近发现、特别喜欢的一个产品是什么?但不能是 Cowork。

Jenny Wen:不是最近才发现,但我从它刚出来就用了大概两年,最近又发现了新的好处。

它叫 Retro。没用过的人可以理解为:一个小型的社区照片分享 App,你只能分享“这一周”的照片,而不是你整个相册里所有年份的照片。

它几乎没有任何传统社交媒体的机制:你看不到那些数字指标(like count 之类的),没有广告等等。

一个很好的点是:现在我已经用了两年,我可以按“周”去回看跨年的生活,比如“哦,原来两年前的这一周我在做这个”。它变成了一种很特别的方式,让我重新体验自己每一周的生活。

主持人:而且如果你想培养自己的设计品味,Retro 本身也是个制作得很精致的 App。

Jenny Wen:对。

主持人:设计师都爱 Retro。我完全能想象。

主持人:最后一个问题。回到 Cowork:有没有一个让你觉得“哇,Cowork 竟然能做到这个”的用例?不管是你自己在用的,还是你听别人说的。

Jenny Wen:我很喜欢的一类用法是“自我洞察”(introspection)。

我有一个本地笔记文件夹,我用 iA Writer,我会随手写各种东西。几年下来我积累了很多笔记:一对一记录、随机想法、小备忘、采访笔记等等,什么都有。

对我来说最酷的一件事是:用 Cowork 分析整个文件夹,从里面提炼洞见,甚至基于这些内容生成一些“成型的东西”。

任何时候只要我能更了解自己一点,我都会很喜欢。

我前两天做过一个很实际的用法,跟招聘有关:我想把我心目中“设计工艺感(craft)到底是什么、我怎么判断”的标准说清楚,因为很多人其实很难把这种东西表达出来。

于是我让 Cowork 读我所有笔记,包括采访笔记、我过去写的备忘录、我在乎的一些点,它最后给我做出了一套“评估设计工艺感的 rubric(评分量表/评价标准)”,用来面试时判断候选人。

这种洞察特别酷:它会把你自己都没意识到、但你其实一直在隐含表达的东西“翻出来”。这对我来说非常有意思。

主持人:我换个更直白的说法:你有一个文件夹,里面是这些年写下的所有东西,比如一对一记录、会议笔记,可能还有会议转写,然后你把整包资料交给它去分析。

我原本想问你具体用了什么 prompt,但听起来其实很简单:让它读完你所有写过的内容,帮你总结——你到底是怎么理解设计的。

Jenny Wen:对,我当时大概是这么跟它说的:这个文件夹里有很多面试笔记,还有不少我平时关于设计工艺的思考。你都读一遍,然后帮我整理出一份备忘录或评估标准,总结我在面试中是怎么判断一个人有没有 “craft” 的。

参考链接:

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

用上次中的 10 元机选 5 注
1️⃣ 05 14 17 23 31 + 01 06
2️⃣ 02 07 09 18 25 + 09 11
3️⃣ 16 21 24 30 33 + 07 09
4️⃣ 02 07 10 14 28 + 07 12
5️⃣ 12 20 21 27 35 + 02 10

作者:周卫林,Aloudata 创始人 & CEO

春节期间,我干了件跟公司业务无关的事——给自己写了一个 OpenClaw Skill。

起因是团队里一个产品经理分享了他的 Skill 合集:一个帮他写周报的,一个帮他做竞品监控的,还有一个帮他自动整理需求反馈并归类优先级。我试了一下,确实好用,然后手痒了。

我花了大概四十分钟,写了一个帮我准备客户拜访的 Skill。逻辑不复杂:输入客户名称和拜访目标,它会帮我整理这个客户的行业背景、竞争情况、现在数据架构现状、上次沟通纪要里的遗留问题、销售拜访记录,然后生成一份一页纸的拜访准备材料。这套流程以前我在飞机上用脑子做,每次大概半小时;现在 Agent 三分钟就能给我一份 90 分的底稿。

写完之后我有一个很强烈的感受——这不就是把我脑子里的工作方法“编译”了一下吗?

一个 .md 文件,几百字自然语言,没有代码,没有模型训练。但它把“我怎么准备客户拜访”这个原本只在我脑子里的隐性流程,变成了机器可执行的显性指令。

然后一个念头冒了出来,让我兴奋了好几天——这不正是我们过去四年在企业数据领域做的事么!

只不过,个人认知的编译用 .md 就够了;企业认知的编译,需要的东西要大得多。

人人都在编译自己,但企业还没有

先看个人这边发生了什么。

OpenClaw 去年 11 月上线,三个月 GitHub 超 23 万 star,社区贡献了 5700 多个 Skill,精选市场 ClawHub 收录了 2800 多个。Claude Code 的 CLAUDE.md 让项目记忆自我进化,团队知识通过 Git 版本管理协作共享。

所有人都在做同一件事:把自己脑子里的经验、判断、流程,写成 .md 文件,交给 Agent 执行。

一个运营写了个 Skill 来做活动复盘,一个投资人写了个 Skill 来筛选项目,一个产品经理写了个 Skill 来拆解需求——以前这些东西叫“个人方法论”,现在它们有了一个新的存在形态:可执行的认知资产。

知识的载体正在从“人脑”迁移到“协议”。这件事的意义怎么高估都不过分。

但如果你做企业服务,你马上会想到下一个问题:个人认知可以用一个 .md 编译,企业认知呢?

一家零售企业有几千个业务指标,散落在十几个系统里。“GMV”在市场部、产品部、财务部的定义各不相同。“退货率”的计算逻辑随业务变化每年都在调整。这些不是一个人的方法论——这是整个组织用十年积累起来的经营认知,涉及几百人的共识、几十个系统的数据、无数次业务决策的沉淀。

你不可能用一个 .md 文件搞定它。

编译个人认知,需要的是 Skill;编译企业认知,需要的是一整套语义基础设施。

这就是我四年前从蚂蚁出来创业时就做的事,撞上了 Agent 这波浪。

2026 年 1 月 27 日,行业给了答案

那时候跟投资人讲“我们要做数据语义层”,对方最常见的反应是礼貌的困惑——“语义层是什么?为什么需要一个独立的语义层?”

说实话,前几年最难的不是做产品,而是解释这件事为什么重要。指标平台、语义层、NoETL……这些词在当时的市场认知里,约等于“又一个数据中间件”。

然后,2026 年 1 月 27 日,Open Semantic Interchange(OSI)v1.0 规范在 GitHub 正式发布(github.com/open-semantic-interchange/OSI)。

Snowflake、Databricks、Salesforce、dbt Labs、AtScale、Qlik、JetBrains——几十家全球数据技术公司联合推动了一个标准:让企业对数据的“理解”,第一次有了跨平台、跨系统的交换格式。

简单说,SQL 标准化了“怎么取数”——不管你用 Oracle 还是 MySQL,SELECT * FROM 的语法一样。OSI 要标准化的是“数据是什么意思”——不管你用 Tableau 还是 Power BI,“净收入”的定义、计算逻辑、适用范围,应该是同一套东西。

当 Snowflake 和 Databricks 这两个平时打得不可开交的对手,愿意坐下来联合定义语义交换标准的时候,说明一件事已经从“要不要做”变成了“怎么做”。

OSI 替所有做语义层的人回答了那个最难回答的问题:为什么需要它。

我在办公室看到这个消息的时候,内心是复杂的。一方面觉得“终于”——四年了,行业共识终于到了;另一方面也很清醒——标准发布只是起点,真正的挑战在后面。

光有“定义”没有“执行”,等于光有语法没有编译器

如果你仔细看 OSI v1.0 的规范,你会发现它解决的是“定义”问题——用一种统一格式描述指标、维度、关系和上下文,让不同系统可以互相理解对方的语义。

但光有定义是不够的。

打个比方:OpenClaw Skill 写得再漂亮,如果没有 Agent 来跑它,它就只是一个文本文件。OSI 也一样——企业把所有指标按标准格式定义好了,然后呢?谁来把定义翻译成精确的 SQL?谁来决定上亿条数据的查询里哪些该预计算、哪些该实时算?谁来保证返回的结果既准又快?

定义是协议的前半段,执行是协议的后半段。有了语法还不够,你需要编译器。

这正是我们过去四年扎进去做的事。Aloudata CAN 的核心能力不只是定义指标,而是把语义定义“编译”成可执行的数据服务——自动生成 SQL、智能路由查询路径、按需物化加速。我们内部把这个能力叫 Semantic Fabric(语义编织)。在数据 Agent 的架构里,它的角色类似 Supabase 之于 Lovable——前端用自然语言“定义”意图,后端需要强大的引擎来“执行”它。

关于这些技术细节,我在之前的文章里讲过 NL2Semantic2SQL 的路径和 Trusted AI 的框架,今天不再展开。

我更想讲的,是把视野拉远之后看到的东西。

从 Skill 到 OSI:认知正在变成可互操作的资产

往后退一步看,OpenClaw Skill、Claude Code 的 CLAUDE.md、OSI 语义标准——这三件看似不相关的事,底层逻辑完全一致:

把人类的隐性认知,转化为机器可执行的显性协议。

Skill 编译的是个人认知——“我怎么做竞品分析”变成了 .md 文件。

OSI 编译的是组织认知——“我们公司的净收入怎么算”变成了标准语义格式。

Aloudata 提出的 NoETL 语义编织是认知的执行层——让这些协议不只是“被理解”,而是“被算出来”。

粒度不同,载体不同,但本质一模一样。

如果这个趋势继续演进下去,我看到了三件正在发生的事:

第一,企业的“认知密度”将变得可测量。多少业务概念被结构化定义了?多少决策逻辑可以被 Agent 执行?这个比例越高,AI 的赋能杠杆越大。我们在客户那里已经看到了这种效果——100 个原子指标定义配合语义层的动态组合能力,可以结合 300 个维度覆盖企业 90% 以上的分析场景,传统方式需要为每个场景单独建一张宽表。这不是效率提升,是范式变化。

第二,数据基础设施正在被重新定价。过去二十年,数据中台 + BI 是服务人类分析师的数据套件,这个组合催生了一个千亿级的全球市场。现在,Agent 正在成为新的数据消费者——而且是一个永不下班、可以并行处理成百上千个分析任务的消费者。Agent 需要的数据套件——可执行的语义层——其市场规模和战略位置,大概率会超过服务人类的那一套。道理很简单:人类分析师的数量和产出有上限,Agent 没有。

第三,也是我认为最重要的——个人认知和组织认知最终会融合。 一个分析师的 Skill 里包含了他个人的看数经验;企业的 OSI 语义定义里包含了组织的指标共识。当这两层在 Agent 里打通,它既懂标准定义又懂个人偏好——这才接近一个真正的“数字同事”,而不是一个只会写 SQL 的工具。

想想看:你的企业知识库告诉 Agent “净收入”怎么算;你的个人 Skill 告诉 Agent “老板关心的是净收入的区域结构变化”。两层叠加,Agent 给你的不是一个冷冰冰的数字,而是一个带判断的洞察。

这才是“AI 用好企业数据”的终局画面。

尾声

春节那个写 Skill 的晚上,我把那个客户拜访准备的 Skill 分享到了公司群里。CTO 回了一句:“这不就是低配版的 Aloudata CAN 吗?一个人的、非结构化的、没有执行引擎的。”

大家笑了一阵。但我觉得他说到了点子上。

.md 编译个人认知,语义层编译企业认知——这两件事之间,不是类比关系,是同一件事的不同尺度。OpenClaw 让每个人都体会到了“认知可以被编译”的兴奋感;OSI 和语义层要做的,是把这种兴奋感带到企业级。

在蚂蚁的时候,我们喊的口号是“让数据像水一样流动”,让每个念头都能被数据灌溉。现在我觉得这句话应该更新一下:

让认知像代码一样流动。

个人的认知,已经在流动了。

企业的认知,刚刚开始。

关于 OSI 标准的技术细节、全球厂商的语义层布局,以及“定义之后如何执行”的问题,我会在下一篇《从 SQL 到 OSI》中展开——那是一段跨越四十年的标准化故事,也藏着 AI 时代数据基础设施的下一个关键变量。

2026 年 2 月,我们收到不少用户反馈。我们把这些声音,一条条变成了产品更新,以下是本月最值得关注的 9 大升级亮点,每一个都为了让你的观测体验更顺滑、更贴合实际业务场景。

01|重磅更新!故障处理不再手忙脚乱:全新「故障中心」实现一站式响应

需求背景

"支付服务不可用"的 P0 告警短信发到了"技术值班"群,却无人响应。老板介入时,黄金排查时间已流逝。更混乱的是紧急排障过程中,4 个 Tab(监控指标、错误日志、链路追踪、基础设施)来回切换拼凑故障全貌,却没人知道当前谁在主导处理、处理到哪一步。历史操作散落在群聊天记录里,无法追溯。

更新说明

原「异常追踪」现已全面升级为「故障中心」,提供一体化故障处理工作台,让每一次异常都有明确的责任人和清晰的处理轨迹:

  • 智能值班(On-Call):支持多团队轮换(工作日 A/B 团队,周末 C/D 团队)、标签匹配(DB 故障自动找 DBA)、跨时区设置(跨国团队协作)。当监控器触发异常,系统自动按规则通知责任人。
  • 自动升级策略:若故障超时未认领,自动扩大通知范围,避免遗漏:

    • T+0 分钟:持续通知值班人员
    • T+20 分钟:若状态仍为"待分配",升级通知团队负责人
    • T+60 分钟:升级通知部门经理
  • 唯一责任制:只有当前负责人能变更状态(待分配→处理中→已解决→已关闭),避免多人重复处理或互相推诿
  • 全景关联:在单一详情页内一站式查看关联的监控指标、错误日志、调用链路、基础设施状态,无需在多个 Tab 间跳转拼凑信息
  • 完整审计:每个动作、每次通知、每次交接都有据可查,为复盘提供准确依据

如何体验?

进入「故障中心」,当监控器触发异常时将自动生成故障事件。在故障详情页内即可完成从发现、指派、处理到复盘的闭环操作。

图片

02|重磅更新!全新「错误中心」让根因定位快人一步

需求背景

同样的 NullPointerException 在 APM、RUM 和日志里反复出现,开发团队难以判断这是新问题还是已处理问题的残余;错误分散在各处,缺乏统一跟踪手段,排查时需要在不同数据源间来回比对,处理进度难以掌握。

更新说明

「错误中心」全新上线,实现跨数据源错误智能聚合:

  • 统一汇聚:自动采集 APM、RUM、日志中的错误数据,打破数据孤岛
  • 智能聚合:通过算法将相同根因的错误收敛为单一 Issue,避免重复处理和告警疲劳,一眼看清错误趋势
  • 全栈详情:进入错误详情即可查看完整堆栈、关联链路拓扑、用户会话回放,从代码层到用户层快速定位根因
  • 流程管理:支持错误状态流转(待处理/处理中/已解决)与团队协作指派,实现从发现到解决的全生命周期管理

如何体验?

进入 错误中心,先配置投递规则设定监控范围,即可在列表查看错误趋势与概况,点击具体错误进入详情进行深度分析。

图片

03|长周期指标查询更流畅:大数据量场景下曲线不再"中断"

需求背景

有客户反馈,排查故障回溯一个月数据时,使用未加过滤的查询经常遇到曲线中段无数据的情况,看上去像指标中断,实则是因为命中对象过多导致前端无法完整渲染。虽然可以通过添加聚合函数规避,但难以要求所有用户都掌握此技巧,长周期排查体验受阻。

图片

更新说明

指标分析模块新增 Top N 序列及最大返回点数选项:

  • 智能采样:查询超长周期、大范围指标时,系统支持自动按对象采样,优先展示关键时间线,避免因数据量过大导致的"假性中断"
  • 灵活配置:可自定义返回排序后的最大/最小 20/50/100/500 条数据序列,在完整性与性能间找到平衡

图片

  • 下钻增强:新增支持点击图表数据点,下拉选择查看相似趋势指标、下钻分析或其他关联查看,从宏观趋势快速聚焦微观异常

图片

如何体验?

进入「指标」-「指标分析」,在查询配置中选择「Top N 序列」,系统将在大数据量场景下智能采样展示。

04|企业级安全再升级:SSO 登录流程加固,工作空间隐私保护更完善

需求背景

有客户反馈,在公共场合或共享屏幕演示时,输入邮箱进行 SSO 登录后,无需认证即可直接看到该邮箱能访问的所有工作空间列表。这在企业场景中存在信息泄露风险,可能被恶意利用进行针对性攻击或社会工程学渗透。

更新说明

SSO 登录流程已优化为"先认证、后展示"的更安全模式:

  • 身份验证优先:用户需先通过邮箱选择身份提供商(IdP)并完成认证
  • 受控信息展示:认证通过后,才能在受保护状态下查看可访问的工作空间列表
  • 隐私合规:彻底避免在登录前暴露用户的 Workspace 归属信息。

如何体验?

在登录页面点击「单点登录」,按新流程输入邮箱并完成 IdP 认证,通过后即可安全查看并选择目标工作空间。

05|大文件 Profile 分析不再迷茫:20MB+ 文件提供友好引导与工具推荐

需求背景

有客户反馈,当采集的 Profile 文件解析后超过 20MB,浏览器无法在线加载,只能下载后自行分析,但用户往往不清楚该使用什么专业工具处理,体验断裂。

图片

更新说明

Profiling 功能现已增强大文件处理引导:

  • 当 Profile 文件超过 20MB 时,系统新增友好提示"暂不支持在线解析,您可使用专业分析工具进行查看"(如火焰图分析器、JProfiler 等)进行本地深度分析
  • 从"无法打开"的挫败感转变为"清晰知道下一步怎么做"的顺畅体验

如何体验?

在「APM」-「Profiling」中上传或查看超过 20MB 的 Profile 文件,页面将自动展示下载提示与工具引导。

图片

06|维护状态一目了然:主机列表新增「静默」标识与筛选

需求背景

有客户反馈,服务器进入维护模式(Mute)后,在主机列表中无法直观识别哪些机器处于维护状态,难以快速区分正常下线与异常失联的主机。

更新说明

基础设施主机管理增强可视化能力:

  • 静默标识:通过 Open API 或规则创建的主机全局静默,将在主机列表显示"静默"标识,一眼识别维护中的资产
  • 快捷筛选:支持通过 df_mute 字段快速筛选处于维护模式的主机,批量管理维护中的资源
  • 避免误报:运维团队可直观判断主机状态,避免对维护中机器发出无效告警

如何体验?

进入「基础设施」-「主机」,查看列表中的「静默」标识列,或使用 df_mute 字段进行列表筛选。

图片

07|监控器与仪表板一键关联:排查效率再提升

需求背景

分析仪表板数据异常时,用户需要快速确认关联的告警规则配置情况。以往需要手动查找哪个监控器引用了该仪表板指标,操作繁琐且容易遗漏,无法实现从可视化分析到告警管理的无缝衔接。

更新说明

仪表板新增关联监控器快捷入口:

  • 一键查看:在仪表板页面即可一键查看与该仪表板关联的所有监控器,快速确认告警阈值配置与监控状态

图片

  • 图表配置优化:为所有图表别名配置新增统一序号标识和悬停联动,直观展示多查询行配置时的对应关系,复杂图表也能清晰阅读

图片

如何体验?

打开任意仪表板,点击右上角关联监控器按钮,即可查看并管理相关监控配置;在图表配置中悬停别名即可查看对应查询行关系。

08|Logstreaming 结构化日志查看更清爽:自定义字段列表不再被 message 强制填充

需求背景

有客户反馈,通过 Logstreaming 接入的业务日志通常只包含自定义结构化字段(如 order_id、api_latency、status_code),本身无需 message 字段。但此前在日志查看器点击"重置为默认字段"后,系统总会自动加回 message 列,即使已在全局设置中配置了关键字段列表也无法避免,导致纯结构化数据查看时始终存在空白列干扰,浪费横向视野。

图片

更新说明

日志查看器的字段重置逻辑现已优化,更尊重你的自定义配置:

  • 已配置关键字段:若你已在日志索引中设置了关键字段,重置后将严格按照你的自定义列表展示,系统不再自动注入 message 字段,确保视图与你的数据结构精准匹配
  • 未配置关键字段:若未配置关键字段,重置后默认显示 time 和 message(time 列的显示同时受独立显示时间列开关控制)
  • 灵活兜底:无论是否配置关键字段,message 字段均支持在显示项中手动移除,满足临时调整需求

如何体验?

进入「日志」-「查看器」,点击「显示项」-「重置为默认字段」:

  • 若你希望长期默认不显示 message,建议先在「全局配置」-「关键字段配置」-「关键字段」中配置好关键字段(仅保留你需要的业务字段),此后重置即按此列表渲染;

图片

  • 若只需临时隐藏,直接在「显示项」-「显示字段」中移除 message 字段即可。

图片

09|更多体验优化与问题修复

LLM 监测更精准

  • Trace 列表中「总 Tokens 数」现统计整条 Trace 消耗,并同步展示输入/输出 Tokens 数量,便于精确计算调用成本。

图片

资源目录管理更便捷

  • 新增「服务清单」列表入口。支持通过 Open API 创建、编辑、删除资源分组,账号状态(值班中/休假中)可直接编辑。

图片

部署版全局公告

  • 管理后台新增平台级系统公告配置,便于企业级客户统一发布维护通知。

多项稳定性提升

  • 修复了仪表盘外部数据源克隆导入失效、宁夏站点电话告警、日志监控器 503 错误等影响日常使用的问题,整体操作流畅度显著提升。

更多更新详见观测云二月更新日志:https://docs.guance.com/release-notes/

之前有 bybit 的 u 卡,手贱换了日本区,结果发现 stripe 都过不了,还有什么 u 卡可以过 stripe 的吗,我要订阅 x 的会员,求推荐,谢谢。

在传统的报表系统中,报表往往只是用于数据展示和查看,如果需要修改数据,通常需要跳转到其他页面或系统,操作繁琐,效率低下。如何让报表不仅仅是查看工具,还能直接进行数据编辑和自定义操作?

积木报表(JimuReport)  在 v2.1.0 版本中,推出了自定义编辑单元格功能,支持将单元格设置为允许自定义编辑,在预览页面可以直接编辑单元格内容,并将修改后的数据发送到指定的 API 地址,真正实现了报表的交互式编辑能力。

一、功能概述:预览即编辑,灵活自定义

自定义编辑单元格功能允许用户将报表中的单元格设置为可编辑状态,在预览页面可以直接编辑单元格内容,并将修改后的数据发送到指定的 API 地址。这一功能特别适用于需要在查看报表时直接进行数据编辑或执行自定义操作的场景。

核心优势

  1. 预览即编辑:在预览页面直接编辑单元格内容,无需跳转页面
  2. 灵活自定义:可以调用自己的接口实现数据编辑或其他自定义操作
  3. 操作简单:设置简单,使用便捷,用户体验良好

二、效果展示:编辑标识,一目了然

设置完成后,在预览页面可以看到单元格右上角有了三角标识,表示该单元格可以进行编辑。点击单元格后,会弹出编辑框,用户可以在编辑框中修改单元格内容,点击确定后,会将修改后的内容发送到指定的接口地址。

提示:自定义编辑单元格功能让报表不仅仅是查看工具,更是一个可以进行数据编辑的交互式平台。

三、设置方式:六步完成,简单易用

1. 设计报表

首先设计一个报表,确保报表中有需要设置为可编辑的单元格。

2. 选择单元格

选择有数据集的单元格,在右侧属性面板中,选择单元格选项卡,在其他设置中找到自定义编辑单元格按钮。

3. 配置接口

点击自定义编辑单元格按钮,在弹出的对话框中,设置接收请求的地址,以及固定参数。

配置说明

  • 接口地址:设置接收编辑数据的 API 地址
  • 固定参数:该参数只允许 JSON 格式,设置后,在预览页面编辑时参数会固定发送给接口
  • 接口实现:可以参考附录一的接口实现示例

提示:接口地址和固定参数的设置需要根据实际业务需求进行配置,确保接口能够正确处理接收到的数据。

4. 预览效果

设置完成后,在预览页面可以看到单元格右上角有了三角标识,表示该单元格可以进行编辑。

提示:三角标识清晰明确,用户可以一眼识别哪些单元格可以进行编辑。

5. 编辑单元格

点击单元格,弹出编辑框,可以在编辑框中修改单元格内容,点击确定后,会将修改后的内容发送到指定的接口地址。

提示:编辑操作简单直观,用户体验良好,编辑完成后数据会自动发送到指定接口。

6. 接收数据

接口接收到的数据包含了编辑后的内容以及相关的上下文信息,可以根据这些信息进行后续的业务处理。

重要提示:积木报表不会修改数据,只负责将修改后的数据发送到指定的接口地址。如果需要修改数据,请在接口中自行处理。这样可以确保数据安全,同时提供灵活的业务处理能力。

四、接口实现示例

附录一:自定义编辑单元格接口实现示例

以下是一个 Java Spring Boot 接口实现示例,展示了如何接收和处理自定义编辑单元格的数据:

@RequestMapping(value = "/jimureport/test/customCellEdit", method = RequestMethod.POST)
public String customCellEdit(@RequestBody JSONObject json) {
    System.out.println("===================自定义编辑单元格====================");
    System.out.println(json.toJSONString());
    System.out.println("===================自定义编辑单元格====================");
    return "{"success":true,"message":"","code":200}";
}

接口说明

  • 接口接收 POST 请求,请求体为 JSON 格式
  • 接口返回标准的 JSON 响应格式
  • 可以根据接收到的数据进行相应的业务处理
提示:接口实现需要根据实际业务需求进行开发,可以在此接口中进行数据更新、业务逻辑处理等操作。

五、应用场景:灵活应用,提升效率

1. 数据快速修正

场景描述:在查看报表时发现数据有误,需要快速修正。

解决方案

  • 在报表中设置可编辑单元格
  • 在预览页面直接编辑错误数据
  • 数据自动发送到后端接口进行更新

2. 状态更新

场景描述:在查看报表时需要更新数据状态,如订单状态、审批状态等。

解决方案

  • 将状态字段设置为可编辑
  • 在预览页面直接修改状态
  • 通过接口更新数据库状态

3. 备注添加

场景描述:在查看报表时需要添加备注信息,如审核意见、处理说明等。

解决方案

  • 将备注字段设置为可编辑
  • 在预览页面直接添加备注
  • 通过接口保存备注信息

总结

积木报表的自定义编辑单元格功能,通过预览即编辑、接口自定义、操作简单的方式,让报表不仅仅是查看工具,更是一个可以进行数据编辑的交互式平台。无论是数据快速修正、状态更新,还是备注添加、自定义业务操作,都可以通过自定义编辑单元格功能轻松实现。

立即体验 :访问积木报表官网,下载最新版本(v2.1.0+),体验全新的自定义编辑单元格功能,让报表不仅是查看,更是数据编辑的利器!

带标签的 PDF(也称为 PDF/UA)是一种包含结构化标签树的 PDF 文档,其结构类似于 HTML,用于定义文档的层级和内容组织方式。通过这些标签,屏幕阅读器等辅助工具可以准确识别文档结构,实现无障碍阅读,确保信息完整传达。

本文将介绍如何使用 Spire.PDF for .NET,在 C# 和 VB.NET 中从零开始创建一个带标签的 PDF 文档。

安装 Spire.PDF for .NET

在开始之前,需要将 Spire.PDF for .NET 包中的 DLL 文件添加为 .NET 项目的引用。您可以通过官方下载链接获取 DLL 文件,或直接通过 NuGet 进行安装。

PM> Install-Package Spire.PDF

创建包含丰富结构元素的带标签 PDF

在带标签的 PDF 文档中添加结构元素时,首先需要创建一个 PdfTaggedContent 类对象。随后,通过 PdfTaggedContent.StructureTreeRoot.AppendChildElement() 方法向结构树的根节点添加元素。

下面以添加“标题(heading)”元素为例,介绍使用 Spire.PDF for .NET 创建带标签 PDF 的具体步骤:

  1. 创建 PdfDocument 对象,并使用 PdfDocument.Pages.Add() 方法添加一个页面。
  2. 创建 PdfTaggedContent 类的实例。
  3. 调用 PdfTaggedContent.SetPdfUA1Identification() 方法,使文档符合 PDF/UA 无障碍标准。
  4. 使用 PdfTaggedContent.StructureTreeRoot.AppendChildElement() 方法,在文档结构树根节点下添加一个 “document” 元素。
  5. 通过 PdfStructureElement.AppendChildElement() 方法,在 “document” 元素下添加一个 “heading” 元素。
  6. 调用 PdfStructureElement.BeginMarkedContent() 方法添加开始标记,用于标识标题内容的起始位置。
  7. 使用 PdfPageBase.Canvas.DrawString() 方法在页面上绘制标题文本。
  8. 添加结束标记(对应标题内容结束)。
  9. 使用 PdfDocument.SaveToFile() 方法将文档保存为 PDF 文件。

下面的代码示例展示了如何在 C# 和 VB.NET 中创建包含多种结构元素(如 document、heading、paragraph、figure 和 table)的带标签 PDF 文档。

using Spire.Pdf;
using Spire.Pdf.Graphics;
using Spire.Pdf.Interchange.TaggedPdf;
using Spire.Pdf.Tables;
using System.Data;
using System.Drawing;

namespace CreatePDFUA
{
    class Program
    {
        static void Main(string[] args)
        {
            // 创建 PdfDocument 对象
            PdfDocument doc = new PdfDocument();

            // 添加一个页面
            PdfPageBase page = doc.Pages.Add(PdfPageSize.A4, new PdfMargins(20));          

            // 设置 Tab 顺序为结构顺序
            page.SetTabOrder(TabOrder.Structure);

            // 创建 PdfTaggedContent 类对象
            PdfTaggedContent taggedContent = new PdfTaggedContent(doc);

            // 设置文档语言和标题
            taggedContent.SetLanguage("en-US");
            taggedContent.SetTitle("test");

            // 设置 PDF/UA1 标识(符合无障碍标准)
            taggedContent.SetPdfUA1Identification();

            // 创建字体和画刷
            PdfTrueTypeFont font = new PdfTrueTypeFont(new Font("Times New Roman", 14), true);
            PdfSolidBrush brush = new PdfSolidBrush(Color.Black);

            // 添加“document”结构元素
            PdfStructureElement document = taggedContent.StructureTreeRoot.AppendChildElement(PdfStandardStructTypes.Document);

            // 添加“heading”(一级标题)元素
            PdfStructureElement heading1 = document.AppendChildElement(PdfStandardStructTypes.HeadingLevel1);
            heading1.BeginMarkedContent(page);      
            string headingText = "What Is a Tagged PDF?";
            page.Canvas.DrawString(headingText, font, brush, new PointF(0, 0));
            heading1.EndMarkedContent(page);

            // 添加“paragraph”(段落)元素
            PdfStructureElement paragraph = document.AppendChildElement(PdfStandardStructTypes.Paragraph);
            paragraph.BeginMarkedContent(page);
            string paragraphText = "“Tagged PDF” doesn’t seem like a life-changing term. But for some, it is. For people who are " +
                "blind or have low vision and use assistive technology (such as screen readers and connected Braille displays) to " +
                "access information, an untagged PDF means they are missing out on information contained in the document because assistive " +
                "technology cannot “read” untagged PDFs. Digital accessibility has opened up so many avenues to information that were once " +
                "closed to people with visual disabilities, but PDFs often get left out of the equation.";
            RectangleF rect = new RectangleF(0, 30, page.Canvas.ClientSize.Width, page.Canvas.ClientSize.Height);
            page.Canvas.DrawString(paragraphText, font, brush, rect);
            paragraph.EndMarkedContent(page);

            // 添加“figure”(图像)元素
            PdfStructureElement figure = document.AppendChildElement(PdfStandardStructTypes.Figure);
            figure.BeginMarkedContent(page);
            PdfImage image = PdfImage.FromFile(@"C:\Users\Administrator\Desktop\pdfua.png");
            page.Canvas.DrawImage(image, new PointF(0, 150));
            figure.EndMarkedContent(page);

            // 添加“table”(表格)元素
            PdfStructureElement table = document.AppendChildElement(PdfStandardStructTypes.Table);
            table.BeginMarkedContent(page);
            PdfTable pdfTable = new PdfTable();
            pdfTable.Style.DefaultStyle.Font = font;

            DataTable dataTable = new DataTable();
            dataTable.Columns.Add("Name");
            dataTable.Columns.Add("Age");
            dataTable.Columns.Add("Sex");
            dataTable.Rows.Add(new string[] { "John", "22", "Male" });
            dataTable.Rows.Add(new string[] { "Katty", "25", "Female" });

            pdfTable.DataSource = dataTable;
            pdfTable.Style.ShowHeader = true;
            pdfTable.Draw(page.Canvas, new PointF(0, 280), 300f);
            table.EndMarkedContent(page);

            // 将文档保存为文件
            doc.SaveToFile("CreatePDFUA.pdf");
        }
    }
}

申请临时许可证

如果您希望去除生成文档中的评估提示信息,或解除功能使用限制,请申请 30 天试用许可证。

带标签的 PDF(也称为 PDF/UA)是一种包含结构化标签树的 PDF 文档,其结构类似于 HTML,用于定义文档的层级和内容组织方式。通过这些标签,屏幕阅读器等辅助工具可以准确识别文档结构,实现无障碍阅读,确保信息完整传达。

本文将介绍如何使用 Spire.PDF for .NET,在 C# 和 VB.NET 中从零开始创建一个带标签的 PDF 文档。

安装 Spire.PDF for .NET

在开始之前,需要将 Spire.PDF for .NET 包中的 DLL 文件添加为 .NET 项目的引用。您可以通过官方下载链接获取 DLL 文件,或直接通过 NuGet 进行安装。

PM> Install-Package Spire.PDF

创建包含丰富结构元素的带标签 PDF

在带标签的 PDF 文档中添加结构元素时,首先需要创建一个 PdfTaggedContent 类对象。随后,通过 PdfTaggedContent.StructureTreeRoot.AppendChildElement() 方法向结构树的根节点添加元素。

下面以添加“标题(heading)”元素为例,介绍使用 Spire.PDF for .NET 创建带标签 PDF 的具体步骤:

  1. 创建 PdfDocument 对象,并使用 PdfDocument.Pages.Add() 方法添加一个页面。
  2. 创建 PdfTaggedContent 类的实例。
  3. 调用 PdfTaggedContent.SetPdfUA1Identification() 方法,使文档符合 PDF/UA 无障碍标准。
  4. 使用 PdfTaggedContent.StructureTreeRoot.AppendChildElement() 方法,在文档结构树根节点下添加一个 “document” 元素。
  5. 通过 PdfStructureElement.AppendChildElement() 方法,在 “document” 元素下添加一个 “heading” 元素。
  6. 调用 PdfStructureElement.BeginMarkedContent() 方法添加开始标记,用于标识标题内容的起始位置。
  7. 使用 PdfPageBase.Canvas.DrawString() 方法在页面上绘制标题文本。
  8. 添加结束标记(对应标题内容结束)。
  9. 使用 PdfDocument.SaveToFile() 方法将文档保存为 PDF 文件。

下面的代码示例展示了如何在 C# 和 VB.NET 中创建包含多种结构元素(如 document、heading、paragraph、figure 和 table)的带标签 PDF 文档。

using Spire.Pdf;
using Spire.Pdf.Graphics;
using Spire.Pdf.Interchange.TaggedPdf;
using Spire.Pdf.Tables;
using System.Data;
using System.Drawing;

namespace CreatePDFUA
{
    class Program
    {
        static void Main(string[] args)
        {
            // 创建 PdfDocument 对象
            PdfDocument doc = new PdfDocument();

            // 添加一个页面
            PdfPageBase page = doc.Pages.Add(PdfPageSize.A4, new PdfMargins(20));          

            // 设置 Tab 顺序为结构顺序
            page.SetTabOrder(TabOrder.Structure);

            // 创建 PdfTaggedContent 类对象
            PdfTaggedContent taggedContent = new PdfTaggedContent(doc);

            // 设置文档语言和标题
            taggedContent.SetLanguage("en-US");
            taggedContent.SetTitle("test");

            // 设置 PDF/UA1 标识(符合无障碍标准)
            taggedContent.SetPdfUA1Identification();

            // 创建字体和画刷
            PdfTrueTypeFont font = new PdfTrueTypeFont(new Font("Times New Roman", 14), true);
            PdfSolidBrush brush = new PdfSolidBrush(Color.Black);

            // 添加“document”结构元素
            PdfStructureElement document = taggedContent.StructureTreeRoot.AppendChildElement(PdfStandardStructTypes.Document);

            // 添加“heading”(一级标题)元素
            PdfStructureElement heading1 = document.AppendChildElement(PdfStandardStructTypes.HeadingLevel1);
            heading1.BeginMarkedContent(page);      
            string headingText = "What Is a Tagged PDF?";
            page.Canvas.DrawString(headingText, font, brush, new PointF(0, 0));
            heading1.EndMarkedContent(page);

            // 添加“paragraph”(段落)元素
            PdfStructureElement paragraph = document.AppendChildElement(PdfStandardStructTypes.Paragraph);
            paragraph.BeginMarkedContent(page);
            string paragraphText = "“Tagged PDF” doesn’t seem like a life-changing term. But for some, it is. For people who are " +
                "blind or have low vision and use assistive technology (such as screen readers and connected Braille displays) to " +
                "access information, an untagged PDF means they are missing out on information contained in the document because assistive " +
                "technology cannot “read” untagged PDFs. Digital accessibility has opened up so many avenues to information that were once " +
                "closed to people with visual disabilities, but PDFs often get left out of the equation.";
            RectangleF rect = new RectangleF(0, 30, page.Canvas.ClientSize.Width, page.Canvas.ClientSize.Height);
            page.Canvas.DrawString(paragraphText, font, brush, rect);
            paragraph.EndMarkedContent(page);

            // 添加“figure”(图像)元素
            PdfStructureElement figure = document.AppendChildElement(PdfStandardStructTypes.Figure);
            figure.BeginMarkedContent(page);
            PdfImage image = PdfImage.FromFile(@"C:\Users\Administrator\Desktop\pdfua.png");
            page.Canvas.DrawImage(image, new PointF(0, 150));
            figure.EndMarkedContent(page);

            // 添加“table”(表格)元素
            PdfStructureElement table = document.AppendChildElement(PdfStandardStructTypes.Table);
            table.BeginMarkedContent(page);
            PdfTable pdfTable = new PdfTable();
            pdfTable.Style.DefaultStyle.Font = font;

            DataTable dataTable = new DataTable();
            dataTable.Columns.Add("Name");
            dataTable.Columns.Add("Age");
            dataTable.Columns.Add("Sex");
            dataTable.Rows.Add(new string[] { "John", "22", "Male" });
            dataTable.Rows.Add(new string[] { "Katty", "25", "Female" });

            pdfTable.DataSource = dataTable;
            pdfTable.Style.ShowHeader = true;
            pdfTable.Draw(page.Canvas, new PointF(0, 280), 300f);
            table.EndMarkedContent(page);

            // 将文档保存为文件
            doc.SaveToFile("CreatePDFUA.pdf");
        }
    }
}

申请临时许可证

如果您希望去除生成文档中的评估提示信息,或解除功能使用限制,请申请 30 天试用许可证。

在处理复杂的企业级文档时,我们经常会遇到需要动态填充内容的场景。传统的“查找并替换”虽然直观,但在处理需要多次复用、全局统一更新的数据时,Word 的文档变量(Document Variables)功能展现出了更高的灵活性和专业性。文档变量本质上是存储在文档元数据中的键值对,通过域(Field)在正文中引用,能够实现“一处修改,全篇同步”的效果。

本文将探讨如何使用 Java 编程语言,通过专业的文档处理库高效地在 Word 中创建、引用以及更新这些变量,从而提升文档自动化的生产力。


1. 库的介绍与环境安装

要在 Java 中实现对 Word 文档变量的精细化控制,我们需要一个功能完备的组件。本教程使用的是 Spire.Doc for Java。它是一个专业的 Office 办公组件,支持在不安装 Microsoft Word 的情况下,直接通过代码创建、编辑、转换和打印 Word 文档。

安装方式

如果你使用 Maven 管理项目,只需在 pom.xml 文件中添加以下依赖即可快速引入:

<repositories>
    <repository>
        <id>com.e-iceblue</id>
        <name>e-iceblue</name>
        <url>https://repo.e-iceblue.cn/repository/maven-public/</url>
    </repository>
</repositories>
<dependencies>
    <dependency>
        <groupId>e-iceblue</groupId>
        <artifactId>spire.doc</artifactId>
        <version>14.2.4</version>
    </dependency>
</dependencies>

对于非 Maven 项目,可以从官网下载 JAR 包并手动导入工程的 lib 目录。


2. 在 Word 文档中添加变量

添加变量的过程分为两个逻辑步骤:首先是在文档的正文中插入指向该变量的域(Field),其次是在文档的后台变量集合中定义该变量的具体内容。

以下代码演示了如何创建一个包含特定物理量定义的文档。我们将“物理量”定义为一个变量名,并在文档中多次引用它,最后统一赋值为“时间”。

实现步骤:

  1. 初始化文档:创建 DocumentSection 对象。
  2. 格式预设:设置段落字体(如微软雅黑)和字号,并调整页边距以确保排版美观。
  3. 插入变量域:使用 paragraph.appendField("变量名", FieldType.Field_Doc_Variable) 在需要的位置插入引用占位符。
  4. 变量赋值:通过 document.getVariables().add("变量名", "值") 定义后台数据。
  5. 触发更新:调用 document.isUpdateFields(true)。这一步至关重要,否则打开文档时变量可能显示为初始状态。
import com.spire.doc.*;
import com.spire.doc.documents.Paragraph;
import com.spire.doc.formatting.CharacterFormat;

public class AddVariables {
    public static void main(String[] args) {

        //创建Document
        Document document = new Document();

        //添加一个节
        Section section = document.addSection();

        //添加一个段落
        Paragraph paragraph = section.addParagraph();

        //设置文本格式
        CharacterFormat characterFormat = paragraph.getStyle().getCharacterFormat();
        characterFormat.setFontName("微软雅黑");
        characterFormat.setFontSize(14);

        //设置页边距
        section.getPageSetup().getMargins().setTop(80f);

        //添加变量到段落
        paragraph.appendField("物理量", FieldType.Field_Doc_Variable);
        paragraph.appendText("是物质的永恒运动、变化的持续性、顺序性的表现,包含时刻和时段两个概念。\r\n");
        paragraph.appendField("物理量", FieldType.Field_Doc_Variable);
        paragraph.appendText("是人类用以描述物质运动过程或事件发生过程的一个参数,确定");
        paragraph.appendField("物理量", FieldType.Field_Doc_Variable);
        paragraph.appendText(",是靠不受外界影响的物质周期变化的规律。");

        //获取变量集合
        VariableCollection variableCollection = document.getVariables();

        //给添加的变量赋值
        variableCollection.add("物理量", "时间");

        //更新文档中的域
        document.isUpdateFields(true);

        //保存文档
        document.saveToFile("添加变量.docx", FileFormat.Auto);
        document.dispose();
    }
}

3. 在 Word 文档中更改变量值

在实际业务中,我们往往会预先准备好带有变量占位符的模板。当数据发生变化(例如多语言切换、报告期调整)时,我们只需要读取现有的文档并修改其变量值。

由于变量是存储在 VariableCollection 中的,我们无需遍历文档正文去寻找每一处文本,直接操作集合即可完成全局替换。

实现步骤:

  1. 载入现有文档:通过 loadFromFile 加载包含变量域的 .docx 文件。
  2. 访问变量池:通过 document.getVariables() 获取当前文档的所有变量。
  3. 重新赋值:使用 set("变量名", "新值") 方法更新特定键的值。
  4. 刷新并保存:再次执行域更新操作,确保 PDF 预览或直接打开文档时内容已刷新。
import com.spire.doc.Document;
import com.spire.doc.FileFormat;
import com.spire.doc.VariableCollection;

public class ChangeVariableValue {
    public static void main(String[] args) {

        //创建Document的对象
        Document document = new Document();

        //载入Word文档
        document.loadFromFile("添加变量.docx");

        //获取变量集合
        VariableCollection variableCollection = document.getVariables();

        //给指定变量分配一个新的值
        variableCollection.set("物理量", "Time");

        //更新文档中的域
        document.isUpdateFields(true);

        //保存文档
        document.saveToFile("更改变量.docx", FileFormat.Auto);
        document.dispose();
    }
}

总结

利用 Java 结合文档变量功能,可以极大地简化 Word 文档的动态生成过程。这种方法的优势在于它解耦了“内容排版”与“核心数据”,使得开发者能够专注于业务逻辑的实现,而不用担心复杂的字符串匹配或格式丢失问题。

无论是在自动化生成合同、技术规范书,还是构建企业报表系统,掌握文档变量的操作都能让你的解决方案更加稳健。希望本文的代码示例与步骤详解能为你的项目开发提供有价值的参考。如有更复杂的文档处理需求,建议查阅相关 API 的官方文档以探索更多进阶功能。

在处理复杂的企业级文档时,我们经常会遇到需要动态填充内容的场景。传统的“查找并替换”虽然直观,但在处理需要多次复用、全局统一更新的数据时,Word 的文档变量(Document Variables)功能展现出了更高的灵活性和专业性。文档变量本质上是存储在文档元数据中的键值对,通过域(Field)在正文中引用,能够实现“一处修改,全篇同步”的效果。

本文将探讨如何使用 Java 编程语言,通过专业的文档处理库高效地在 Word 中创建、引用以及更新这些变量,从而提升文档自动化的生产力。


1. 库的介绍与环境安装

要在 Java 中实现对 Word 文档变量的精细化控制,我们需要一个功能完备的组件。本教程使用的是 Spire.Doc for Java。它是一个专业的 Office 办公组件,支持在不安装 Microsoft Word 的情况下,直接通过代码创建、编辑、转换和打印 Word 文档。

安装方式

如果你使用 Maven 管理项目,只需在 pom.xml 文件中添加以下依赖即可快速引入:

<repositories>
    <repository>
        <id>com.e-iceblue</id>
        <name>e-iceblue</name>
        <url>https://repo.e-iceblue.cn/repository/maven-public/</url>
    </repository>
</repositories>
<dependencies>
    <dependency>
        <groupId>e-iceblue</groupId>
        <artifactId>spire.doc</artifactId>
        <version>14.2.4</version>
    </dependency>
</dependencies>

对于非 Maven 项目,可以从官网下载 JAR 包并手动导入工程的 lib 目录。


2. 在 Word 文档中添加变量

添加变量的过程分为两个逻辑步骤:首先是在文档的正文中插入指向该变量的域(Field),其次是在文档的后台变量集合中定义该变量的具体内容。

以下代码演示了如何创建一个包含特定物理量定义的文档。我们将“物理量”定义为一个变量名,并在文档中多次引用它,最后统一赋值为“时间”。

实现步骤:

  1. 初始化文档:创建 DocumentSection 对象。
  2. 格式预设:设置段落字体(如微软雅黑)和字号,并调整页边距以确保排版美观。
  3. 插入变量域:使用 paragraph.appendField("变量名", FieldType.Field_Doc_Variable) 在需要的位置插入引用占位符。
  4. 变量赋值:通过 document.getVariables().add("变量名", "值") 定义后台数据。
  5. 触发更新:调用 document.isUpdateFields(true)。这一步至关重要,否则打开文档时变量可能显示为初始状态。
import com.spire.doc.*;
import com.spire.doc.documents.Paragraph;
import com.spire.doc.formatting.CharacterFormat;

public class AddVariables {
    public static void main(String[] args) {

        //创建Document
        Document document = new Document();

        //添加一个节
        Section section = document.addSection();

        //添加一个段落
        Paragraph paragraph = section.addParagraph();

        //设置文本格式
        CharacterFormat characterFormat = paragraph.getStyle().getCharacterFormat();
        characterFormat.setFontName("微软雅黑");
        characterFormat.setFontSize(14);

        //设置页边距
        section.getPageSetup().getMargins().setTop(80f);

        //添加变量到段落
        paragraph.appendField("物理量", FieldType.Field_Doc_Variable);
        paragraph.appendText("是物质的永恒运动、变化的持续性、顺序性的表现,包含时刻和时段两个概念。\r\n");
        paragraph.appendField("物理量", FieldType.Field_Doc_Variable);
        paragraph.appendText("是人类用以描述物质运动过程或事件发生过程的一个参数,确定");
        paragraph.appendField("物理量", FieldType.Field_Doc_Variable);
        paragraph.appendText(",是靠不受外界影响的物质周期变化的规律。");

        //获取变量集合
        VariableCollection variableCollection = document.getVariables();

        //给添加的变量赋值
        variableCollection.add("物理量", "时间");

        //更新文档中的域
        document.isUpdateFields(true);

        //保存文档
        document.saveToFile("添加变量.docx", FileFormat.Auto);
        document.dispose();
    }
}

3. 在 Word 文档中更改变量值

在实际业务中,我们往往会预先准备好带有变量占位符的模板。当数据发生变化(例如多语言切换、报告期调整)时,我们只需要读取现有的文档并修改其变量值。

由于变量是存储在 VariableCollection 中的,我们无需遍历文档正文去寻找每一处文本,直接操作集合即可完成全局替换。

实现步骤:

  1. 载入现有文档:通过 loadFromFile 加载包含变量域的 .docx 文件。
  2. 访问变量池:通过 document.getVariables() 获取当前文档的所有变量。
  3. 重新赋值:使用 set("变量名", "新值") 方法更新特定键的值。
  4. 刷新并保存:再次执行域更新操作,确保 PDF 预览或直接打开文档时内容已刷新。
import com.spire.doc.Document;
import com.spire.doc.FileFormat;
import com.spire.doc.VariableCollection;

public class ChangeVariableValue {
    public static void main(String[] args) {

        //创建Document的对象
        Document document = new Document();

        //载入Word文档
        document.loadFromFile("添加变量.docx");

        //获取变量集合
        VariableCollection variableCollection = document.getVariables();

        //给指定变量分配一个新的值
        variableCollection.set("物理量", "Time");

        //更新文档中的域
        document.isUpdateFields(true);

        //保存文档
        document.saveToFile("更改变量.docx", FileFormat.Auto);
        document.dispose();
    }
}

总结

利用 Java 结合文档变量功能,可以极大地简化 Word 文档的动态生成过程。这种方法的优势在于它解耦了“内容排版”与“核心数据”,使得开发者能够专注于业务逻辑的实现,而不用担心复杂的字符串匹配或格式丢失问题。

无论是在自动化生成合同、技术规范书,还是构建企业报表系统,掌握文档变量的操作都能让你的解决方案更加稳健。希望本文的代码示例与步骤详解能为你的项目开发提供有价值的参考。如有更复杂的文档处理需求,建议查阅相关 API 的官方文档以探索更多进阶功能。

近年来,人工智能(AI)对就业、产业创新以及知识生态的影响成为社会热议话题。媒体和舆论常强调 AI 可能取代大量岗位,引发焦虑。然而,从实际观察来看,AI 对就业和产品生态的影响远比“全面失业”或“无限增长”复杂,需要理性分析,同时结合后疫情时期的全球经济环境、资本市场压力、企业行为模式以及 LLM(大型语言模型)提供方对产品迭代的控制。

我的观察

AI 的技术潜力与实际替代能力并不完全等同。理论上可被 AI 替代的任务比例,并不意味着对应岗位就会消失。企业在引入 AI 时,受到成本、监管、组织惯性等因素制约。低技能、重复性的岗位,如客服、数据输入、基础编程等,确实面临较大替代压力,但很多岗位只是部分任务被 AI 取代,而非整个岗位消失。同时,AI 的引入往往提升劳动生产力,促进劳动者技能升级,而人类独有的能力——创造力、共情、伦理判断、复杂社交互动——仍不可替代。

裁员的动机复杂,部分裁员被冠以“AI 替代”之名,但背后更可能是资本行为或组织调整。现实案例显示,企业在追求利润率和股价增长时,为了账面好看往往采取裁员策略,而不是因为 AI 完全替代了岗位。AI 提高生产能力,但人的作用并未消失,反而在许多任务中得到强化。这意味着,AI 既带来了效率提升,也创造了新的岗位机会,例如数据科学家、AI 训练师、自动化工程师等新职业不断涌现。

更关键的是,这个世界的消费者仍然以人类为主,而不是资本。即便 AI 提高了生产效率、优化了服务或产品,最终消费、收入和市场需求还是由人类决定。失业率高、消费能力低的情况下,再强的技术也无法直接转化为经济价值。资本市场和企业的追求再激烈,也必须面对消费者的现实限制,否则再多的 AI 投入也只是账面上的数字游戏。

资本市场与经济环境:危机,失业和资本狂欢

当前全球经济尚未从疫情冲击中完全恢复,物价高企,消费和企业活力仍低于疫情前水平。AI 热潮在资本市场中形成泡沫,投资循环、互相买卖的关系脆弱,一旦断裂会产生连锁反应。为了追求股价持续增长和利润率,企业不得不在账面上做文章。AI 被美国政府视作国家级战略目标,企业必须在 AI 硬件和技术上投入巨额资金,否则股价必然下跌。这也解释了为什么裁员往往被冠以 AI 理由,而实际更多是资金周转和财报压力的结果。

宏观经济结构和全球贸易摩擦进一步加剧就业压力。疫情后经济恢复有限,物价高企,全球贸易壁垒提高,企业裁员更多是应对资金不足和账面压力,而非技术必然。这种短期的宏观结构性压力可能增加失业率,劳动者必须应对技能转换和职业适应问题。同时,贸易摩擦和经济结构调整使收入下降、市场收缩,企业为保持财务稳健和股价表现,不得不通过裁员节约成本,而 AI 只是借口或催化剂。值得讽刺的是,裁员计划公布后,往往股价上涨,这反映了资本市场与社会生存之间的悖论。AI 巨头们投入巨额资金争夺市场份额,但实际客户受高失业率和消费力下降影响有限,市场承载能力成为潜在瓶颈。

资本增长集中在少数人手中,而高失业率意味着大量劳动者的生计受威胁。这揭示了一个核心问题:即便技术和资本发展迅猛,如果没有有效的社会托底机制,AI 大量替代人工可能导致社会不稳定。社会保障、就业支持、技能培训和收入再分配机制的缺失,使得科技繁荣无法真正惠及大多数人。

个人层面也能观察到类似现象:高性能 GPU、AI 设备和计算资源难以获得,个人用户的使用受限,娱乐和创造的选择空间缩小。AI 中心的大规模计算和学习消耗了难以估计的能源和资源,但这些消耗未必能直接带来人类生活质量的提升。这意味着,技术的增长必须与社会福利、可持续资源使用以及公共利益相结合,否则所谓的“效率提升”可能只成为资本增值工具,而非真正改善人类生活的力量。AI 设备和计算消耗的资源庞大,亟需关注其社会回报。

世界经济结构的变动:美中 AI 双巨头与其他国家

在 AI 浪潮下,美中两国都将人工智能视为国家级战略目标,但出发点和经济背景存在明显差异,同时也对全球经济结构产生深远影响。

美国

美国推动 AI 发展的主要驱动力既包括国家战略,也包括企业股价和资本市场压力。科技巨头为保持市场领先,不惜投入巨资研发 AI 技术和采购硬件。然而,这种资本驱动模式带来了一个悖论:裁员成为常态,但并非技术必然导致岗位消失,而是企业为账面压力和资金周转不足采取的成本调节手段。资本市场往往对裁员行为作出正面反应,股价反而上涨,显示出资本逻辑与社会生存之间的矛盾。

AI 确实提高了生产力和效率,但消费能力下降、收入受限,使得技术潜力未能充分释放。疫情后经济复苏有限,劳动者并未被 AI 替代,而是被经济结构和资本逻辑所影响。

中国

中国在 AI 发展中既面临高精尖技术替代,也受到全球贸易摩擦压力。高精技术和生产线优化,使中美经济结构逐渐调整:美国难以在中国赚取收益,中国企业也难以在美国市场获得利润。贸易壁垒和经济摩擦增加整体收入压力,物价上涨、企业成本上升,使裁员和效率提升成为企业应对宏观压力的手段。

中国的 AI 发展既是技术驱动,也是经济结构调整的一部分。政策推动和资本投入下,中国企业提升效率,但消费者需求受限、全球市场压力加大,技术红利难以完全转化为经济增长或个人福利提升。

其他国家

其他经济体同样受 AI 冲击,但表现形式不同。发达国家可能更多依赖 AI 优化服务和生产率,而发展中国家面临技术进口依赖、人才缺口和市场不确定性。核心技术供应高度集中在美中两国,其他国家基本只能依赖 A 或 B 提供的 AI 服务,就像“水电费”一样持续支付,无论价格如何,难以自主掌控。一旦核心技术供应链受限,整个地区经济和就业都会受到波及。

这意味着,无论是中美两国,还是其他国家,AI 浪潮都不可避免地带来结构性冲击。福利较好的国家可能通过社会保障和再分配机制缓冲失业压力,但如果不介入 AI 竞争,税收减少、赤字增加,长期的福利支撑可能遭受重创。加之地缘政治和社会压力,局部冲突甚至战争事件可能随之发生,进一步影响全球经济稳定。

AI 在产品生态中的潜在危机:同质化和 IP 危机

除了就业,AI 对使用者和创新者自身也潜藏潜在风险。大型语言模型(LLM)提供方往往掌握大量几乎无限的使用额度。一旦用户开发的产品或服务与 LLM 提供方的产品有交集,很容易被其以“人海战术”迅速替代。我观察到,大量应用、程序和功能已经或正在被 LLM 公司快速开发甚至内置,这意味着即便用户投入了大量 token 和努力,仍可能在模型迭代下被迫走差异化路线,而这种差异化又容易被 AI 再次追上。

过去我大学时期写的 300 多篇博客、在维基百科贡献的 1000 多条词条,曾有大量价值,但最终可能被大模型整合为数据流,流量下降、影响力减弱,甚至出现运营危机。这是一种正在发生的、被忽视的现象:个人或企业基于 AI 创造的产品,很可能在未来被他人或平台快速迭代和替代。

AI 时代下的知识贡献危机:孤岛、平庸与消失的智慧

回想一下,上次你访问 Stack Overflow 是什么时候?又有多少人真正去阅读博客、翻阅文献、揣摩原作者思路?在 AI 时代,一切变得触手可得,但便捷的背后,是知识流动的危机,是原创精神的消逝。

我曾写过无数博客,编辑过上百篇维基百科文章,贡献了上千条词条。那时候,我为自己的付出感到骄傲——每一篇文章、每一次编辑,都是对知识世界的注入。我的词条一年内总阅读量,相当于纽约人口的四倍;博客访问量更是百万级别。虽然我没有因此获利,身边的人也未必知晓,但被看见、被使用,那就是认可,是动力。

而现在,这种认可几乎消失殆尽。人们不再主动阅读博客,不再细致研读百科,而是直接从 AI 助手获取答案。AI 绕过了所有平台,忽略了所有名字和权利,甚至一次爬取就消化了所有内容。开源代码、图片、文章被分析、被重用,而当初的贡献者毫不知情。你写的代码、生成的内容,背后可能正借鉴了别人多年前的心血,却无人知道。

更糟糕的是,AI 依赖的知识来源——博客、维基百科、Reddit——都被稀释、重组、匿名化。五年前的回答、曾经的博文,在 AI 的答案里早已隐形。曾经独特的经验、精妙的技巧、那些“DOOM 式”的代码 hack 和操作心得,也正在被标准化、平庸化的答案取代。AI 的回答可能合格,也可能错误,而缺乏纠正机制让错误积累,知识漂移,智慧被锁死。

技术进步本应让我们更容易获取知识,却在不知不觉中制造了孤岛。每个人都在依赖 AI 的快捷答案,却少有人去探究原始文献、分析原作者思路、质疑和反思。知识的积累被削弱,经验分享被替代,创意被压缩。

结果显而易见:

  • 知识贡献的激励消失,原创者沉默;

  • 独特经验和创新思维被平庸化答案取代;

  • 错误与误导信息积累,缺乏纠正;

  • 科技交流减少,每个人都可能成为孤岛。

直接越过原创者意味着看不见,看不见意味着失去动力。没有动力,就没有新的知识;没有新知识,就只能依赖旧知识,而旧知识锁死了交流,也锁死了进步。我们必须警醒:如果不反思、不调整,这个世界的知识生态将逐步丧失活力。平庸将取代精妙,孤岛将取代交流,曾经闪耀的智慧火花,可能在寂静中熄灭。讽刺的是,这篇文章很有可能最终融入到大模型之中,没有激起一点涟漪。

AI 利滚利与个人创收的现实

对于 AI 使用者和产品创造者而言,利滚利的现象尤为明显。个人利用 AI 生成的产品本身没有问题,但现实情况是,大多数人生成的产品仍停留在 MVP 级别的小 demo,或者仅是对已有代码的一部分重构和升级。少数案例中,AI 被用于重构大型代码库或产品,但大多数 one-person 公司和个体创作者,很难真正实现被动收入或 FIRE(Financial Independence, Retire Early)的梦想。

个人创收的现实,非常像之前的“被动收入”风潮。许多人花钱购买课程、支付 AI token,试图借助 AI 技术获得稳定收益,但结果往往不尽如人意。新闻中偶尔报道的一些成功案例,展示的往往是局部风毛菱角,而非普遍可行的模式。大多数人仍然只能在高投入、低回报之间挣扎,因此在使用 AI 之前,就必须做好“打水漂”的心理准备。

更值得注意的是,AI 生成代码的成本随着使用量增长而可能呈指数级上升。对于一些公司而言,代码通常是批量生成的,且随着产品复杂度和生成量增加,token 消耗量会越来越大,类似水电费一样每月都要支付。但不同于固定水电费,AI 生成代码的 token 消耗可能呈指数增长,因为上下文越大、生成内容越多,计算和模型调用成本也随之攀升。这意味着,即便技术可用,使用成本和迭代成本也可能成为个体开发者和小团队的主要限制。我甚至知道有人在开发的时候一天就花费了 1000 刀,而当时还没有任何收入,这种高成本、高风险的现实,让许多 AI 创作者陷入困境。

真正获利的,往往仍是卖工具、卖课程、或者提供 AI 服务的平台。世界一直没变,人心也没变:每个人都希望用最低成本获得最高价值。大量博主和视频作者在宣传 AI 的“成功案例”,表面看似可行,但背后成本巨大——不仅金钱投入高,而且个人信息面临泄露风险。尝试新事物固然值得鼓励,但需要正确认知 AI 的功能、边界与安全,避免陷入幻想和风险之中。

综合分析

总体来看,AI 不会全面消灭就业,但会改变就业结构、劳动内容以及知识生态。一方面,低技能岗位受冲击,短期可能增加失业率,劳动者需进行技能升级和职业转型;另一方面,AI 创造新职业和商业机会,提供长期就业潜力。任务的替代更多是部分任务而非整个岗位消失,人类不可替代的技能仍然关键。AI 在提升劳动生产力、优化工作效率的同时,也促使劳动者技能提升,并激发新的商业模式和创新机会。

然而,知识贡献和原创价值正面临前所未有的压力。AI 替代了原创传播渠道和用户流量,使得个体创作者的努力可能被快速迭代和匿名化整合,形成平庸化输出,原创激励消失。即便技术带来效率提升和新商业机会,也需要社会制度、教育和社区机制来保护原创贡献,确保知识生态的活力。

结论

AI 对就业、创新和知识生态的影响呈现“冲击与补充并存”的特点。裁员和产品替代往往是资本市场压力和经济环境的结果,而非技术必然。低技能岗位面临替代压力,但技能升级和新职业机会能够缓解冲击。AI 提高生产力,改变工作任务,但不能替代人类独有能力。使用 AI 开发产品的个人或企业,也需警惕平台和模型迭代带来的快速竞争压力。知识贡献面临平庸化与匿名化的风险,原创者激励减少,创新与交流可能受限。

面对 AI 发展和全球经济挑战,我们需要理性应对,强调技能升级、职业转型、原创保护和创新保护,同时制定政策和教育培训支持劳动者适应新就业结构。技术替代、资本压力、劳动升级与知识生态保护并存,而最终经济、创新、就业与知识活力仍依赖于人类消费者和原创者的参与。AI 应成为增强人类能力的工具,而不是社会问题、裁员或知识消亡的推手。