包含关键字 typecho 的文章

可穿戴设备的生理信号处理是健康科技与研究领域反复出现的工程难题。ECG 记录、心率变异性指标、加速度计数据,不管处理哪一类信号,从原始传感器输出到有意义的生物标志物,整条链路都是碎片化的:算法散落在论文、代码仓库和临时脚本里,接口各不相同,数据模型也无法共享。

PhysioDSP 是一个开源 Python 库,目标是改变这种局面。它给出了一套统一、可扩展的框架来处理和分析生理传感器数据,核心关注点放在算法一致性、类型安全与可复现性上。项目托管在 GitHub,pip 安装即可使用:

pip install physiodsp

核心架构

PhysioDSP 的算法架构简洁统一,各组件易于集成、扩展和测试。

每个算法遵循同一套模式:Settings 类(基于 Pydantic)定义可配置参数;Algorithm 类继承 BaseAlgorithm,对外暴露 run() 方法;结果以 Pandas DataFrame 返回,直接接入下游处理。传感器数据封装在 AccelerometerDataEcgDataHrvData 等类型化数据模型中,实例化时即执行 schema 校验。

切换算法或调参无需改动数据处理代码——把数组包进对应的数据类,就能接入 PhysioDSP 的处理流水线。

from physiodsp.ecg.peak_detector import EcgPeakDetector  
from physiodsp.sensors.ecg import EcgData  
  
ecg_data = EcgData(timestamps=timestamps, values=ecg_values, fs=250)  
detector = EcgPeakDetector()  
result = detector.run(ecg_data)  
  
# 包含 RR 间期和心率的 DataFrame
print(result.biomarker)  

已实现的算法

当前版本包含四个功能模块。

活动分析方面,activity/ 模块实现了多种体动记录算法,均经过单元测试且可投入生产:ENMO(欧几里得范数减一)、过零率、高于阈值时间(用于剧烈活动量化)、PIM(比例积分模式,处理多轴数据),以及一套个性化活动评分方案,输出归一化的 0–100 每日活动与恢复指数,支持基线个性化。

ECG 处理集中在 ecg/ 模块,核心是一个基于类 Pan-Tompkins 滤波和峰值检测流水线的 QRS 波群检测器。传入任意采样频率的 EcgData 对象后,该检测器在单个 DataFrame 中返回心跳时间戳、RR 间期与瞬时心率。hrv/ 模块负责 HRV 评分,算法将 RMSSD(连续差值均方根)经 sigmoid 归一化映射到 0–100 分,同时纳入趋势和稳定性分量,计算基于滑动窗口,面向纵向监测场景。

底层的 dsp/ 模块提供卷积和滤波工具,既是上述各模块的计算基础,也可独立用于构建自定义信号处理流水线。

传感器支持与数据模型

传感器层对三种 IMU 模态——加速度计、陀螺仪、磁力计——以及 ECG 和 HRV 时间序列做了统一抽象。每个数据类接收原始 NumPy 数组、时间戳和采样频率,经 Pydantic 校验输入后,向下游算法提供一致的接口。传感器抽象与算法逻辑的分离带来一个直接的好处:接入新硬件或新信号类型时无需改动已有算法实现。运行环境要求 Python ≥ 3.11,依赖 NumPy、Pandas、SciPy 和 Pydantic。

总结

PhysioDSP 虽然刚刚看是,但是已经是一个可用的生理信号处理基础框架。当前版本(0.1.0b0)覆盖活动分析、ECG 峰值检测和 HRV 评分三个方向,架构统一且易于测试。后续计划中的模块包括能量消耗估算、睡眠质量指标和基于机器学习的活动识别。

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

BY Matteo Serafino




🔗 https://luolei.org

我将过去 10 多年间的 300+ 篇博客、推文及 GitHub 内容全部向量化,构建了一个基于 RAG 的个人知识系统 🧠

今天下午又花了一小时,将「 AI 罗磊」接入了基于 Vinext 框架的新博客。

现在,可以直接在博客上与我的「数字分身」对话了 🤖

和「自己」聊天的感觉,还挺奇妙的。

面试精灵Offer蛙在求职圈里都有不少人用,但两款工具的设计思路不太一样。

面试精灵则更注重技术能力的提升,自动说话人识别、简历定制化、联网搜索这些功能做得比较深入;Offer蛙的定位很明确——让回复更像面试者自己说的话,沟通技巧是它的卖点。

面试精灵操作页面

功能特性对比

根据我们对AI面试助手的全面评测,以下是面试精灵和Offer蛙的功能特性对比表格:

功能特性面试精灵Offer蛙
面试助手
笔试助手
简历优化X
模拟面试XX
面试记录/分析
交流社群XX
界面美观度43
操作简单/可访问性44
功能强大43.5
价格(元/小时)1069
性价比4.53.5
免客户端下载
多语言支持X
语音识别优化X
自动说话人识别X
隐蔽模式(多机互联)X
简历输入
个人知识库X
大厂面经库X
联网搜索XX
多种回复模式X
回复结果显示增强

核心功能对比

语音识别能力

两款工具在常规语音识别上都能正常工作,但在面对英文术语和新词汇时表现不同。

Offer蛙对语音识别做了优化,特别针对面试场景中的常见关键词进行了调整。在标准面试问题上表现不错。

面试精灵在英文术语识别上更有优势。比如"Transformer"、"DeepSeek"这类词,很多语音识别工具会出错,但面试精灵能较好地纠正过来。这对技术面试很重要,因为技术问题经常涉及英文术语。

回复风格和沟通技巧

这是Offer蛙最突出的地方。

Offer蛙生成的回复非常符合面试者的口吻,第一人称叙述自然,语气贴近真实求职者。如果你不想自己整理回答思路,只想照着读,Offer蛙的这种风格很适合。

面试精灵的回复更偏技术专业,结构清晰,重点突出。它会把关键信息加粗显示,方便快速抓住重点。这种风格适合希望理解回答逻辑自己发挥的用户。

面试精灵提示词优化

简历定制化能力

两款工具都支持上传简历,但实际效果差异比较大。

Offer蛙在简历相关问题上的表现不错,能按照STAR结构(Situation-Task-Action-Result)组织回复,项目经历描述清晰。但在使用公司信息这类问题上,它的回复会出现占位符,没有真正利用提前填写的信息。

面试精灵在简历定制化上做得更全面。无论是自我介绍、项目描述,还是对公司的了解,它都能较好地利用简历和职位需求信息。实测中,面试精灵的回答能准确引用简历中的具体细节。

时效性问题处理

对于"DeepSeek最近很火爆"这类时效性问题,两款工具的差距比较明显。

Offer蛙内置的知识更新到2023年,无法回答2025年的新事物。实测中,它对这类问题的回复要么出错,要么泛泛而谈。

面试精灵支持联网搜索,而且英文术语识别准确。它能通过搜索找到最新信息,给出正确回答。这对关注技术趋势的求职者很重要。

隐蔽性和操作便捷性

两款工具都支持多设备协同,但实现方式不同。

Offer蛙需要用户手动选择窗口输入声道,然后点击触发回复。操作不算复杂,但需要用户主动干预。

面试精灵支持自动说话人识别,能自动区分面试官的话和用户的话,识别到问题后自动处理。这种跨设备隐蔽操作的方式更安全,面试时不用频繁操作另一台设备。

界面和显示效果

Offer蛙的界面比较简单,美观度一般。功能相对单一,但核心功能做得还算扎实。

面试精灵的界面更现代化一些,代码块、公式、图表等复杂内容的显示效果更好。前端支持LaTeX公式、流程图、泳道图,对技术岗位的面试更友好。

价格对比

Offer蛙约69元/小时,在同类产品中算中等偏上。

面试精灵基础版约10元/小时,精英版约25元/小时。就算用最高配置,价格也比Offer蛙低不少。

两款工具都有新用户免费额度,可以先试用再决定。

功能完善度

Offer蛙的功能相对单一,主要聚焦面试辅助本身,但在语音识别优化和回复口吻上做得比较用心。

面试精灵功能更全面,除了面试助手,还提供笔试助手功能。笔试助手纯网页操作,通过多设备互联实现远程截图,视觉大模型自动识别题目并生成答案。

回复效果实测对比

为了更直观地展示两款工具的回复效果差异,我们来看具体案例。

实测案例:自我介绍问题

问题:"请你先简短做个自我介绍吧。"

这个题目测试的是RAG检索增强生成的个性化回复效果。

两款工具在本题中都表现得不错。Offer蛙能按照STAR结构(Situation-Task-Action-Result)组织回复,项目经历描述清晰,回复口吻很贴近面试者。面试精灵的回答能够准确引用简历中的具体信息,按照"基础信息-技能-项目-动机与胜任"的结构组织,内容完整且贴切。

面试精灵自我介绍问题回复

实测案例:项目描述问题

问题:"请详细描述下你简历中的这个点云感知项目"

这个题目测试的是简历信息的利用能力。

两款工具在本题中都表现不错,都能准确贴合简历中的项目经历,回复遵从STAR结构。面试精灵在技术细节的描述上更深入一些。

Offer蛙项目描述问题回复

实测案例:时效性问题

问题:"DeepSeek最近很火爆,你了解他的技术么?知道他厉害在哪里么?"

这个题目测试的是英文术语识别和联网检索能力。

面试精灵在语音识别结果"Deep Seeker"虽然不正确,但是最接近真值"DeepSeek"的。大模型纠错后,回复内容正确,并结合了联网搜索对DeepSeek这一较新知识进行RAG检索。

面试精灵时效性问题回复

Offer蛙在语音识别这一步就翻车,对于"DeepSeek"识别错误,如识别成"Deeppse",导致后续的回复结果都不是很相关。

Offer蛙时效性问题回复

实测案例:公司了解问题

问题:"你对我们公司了解多少?"

这个题目测试的是提前填写的面试信息利用能力。

面试精灵能够根据提前填写的面试准备信息,逻辑清晰地介绍面试的目标公司和与面试者的切合度。

Offer蛙的回复没有输出任何有用信息,留了很多占位字符,明显没有理解所求职的目标公司。

评测数据对比

以下是两款工具在各评测维度的平均得分对比(满分5分):

评测维度面试精灵Offer蛙
帮助性4.784.22
语音识别准确率4.444.22
意图识别正确率54.56
内容深度及个性化4.784.11
沟通技巧4.675
准确性4.783.67
全面性4.784.33
直观性4.894.56

从评测数据可以看出,Offer蛙在沟通技巧上表现突出,但在准确性、内容深度和个性化上弱于面试精灵。面试精灵整体表现更均衡,特别是在利用简历信息和联网搜索的能力上更有优势。

总结和建议

两款工具各有特点,选择哪款要看你更看重什么。

如果你希望回复更像自己的语言,不想动脑筋整理思路,只想照着读,Offer蛙的沟通技巧和回复口吻可能适合你。但要注意它的时效性知识比较落后,对新技术问题不太擅长。

如果你更看重技术深度和准确性,面试精灵可能更合适。自动说话人识别让操作更隐蔽,简历定制化让回答更贴切,联网搜索能应对时效性问题,价格也更实惠。

从整体评测数据来看,面试精灵在准确性、内容深度和个性化上表现更均衡,特别是在利用简历信息和联网搜索的能力上更有优势。结合其高性价比,面试精灵可能是更符合大多数求职者需求的选择。


这篇文章对比了Offer蛙和面试精灵的主要差异。两款工具各有特点,关键是要根据自己实际的使用场景和需求来选择。

似乎是一段很干净的 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,看到刚才电脑上写的思路无缝衔接在屏幕上的感觉,真的太爽了!

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

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

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

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

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

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

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

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

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/

跨区域项目管理已不再罕见。如今,许多组织都采用分布式团队模式,团队成员分布在不同的时区,遵循不同的工作日、营业时间和公共假期。在这种情况下,使用单一的标准工作日历可能会导致日程安排错误、错过截止日期以及混乱。而 Zoho Projects 中的“工作日历”和“节假日管理”功能正是在此发挥了重要作用。

“工作日历”允许项目经理根据不同团队的实际运作方式定义多个工作时间表。经理无需假设所有员工都周一至周五朝九晚五地工作,而是可以创建反映实际工作模式的自定义时间表。例如,一个区域团队可能遵循标准的周一至周五工作时间表,而另一个团队可能实行轮班制或周末安排不同。通过定义不同的营业时间、上下班时间和休息时长,系统可以更准确地计算任务时间。

节假日管理同样重要。不同地区的公共假期、节日和国家纪念活动各不相同。如果项目计划中没有考虑这些节假日,则可能导致任务工期和截止日期计算错误。通过将特定的节假日列表与每个业务日历关联,项目时间表会自动调整。这确保任务不会安排在非工作日,并且工作量预期保持合理。

将业务日历与门户用户关联的另一个主要优势是任务持续时间和报告的准确性。当每个用户都链接到正确的日程安排时,系统会根据他们的实际可用时间计算工作量、工时、提醒和报告。这可以防止资源过度分配,并帮助管理人员公平地分配工作。此外,由于报告反映的是实际工时而非假设工时,因此也改进了时间跟踪和预测。

从规划的角度来看,此功能有助于项目经理创建可靠的日程安排。当不同地区的团队协作完成同一个项目时,了解他们的可用时间可以确保更好的协调。这可以减少因日程安排不一致而导致的延误,并改善团队之间的沟通。管理人员可以放心地分配任务,因为他们知道截止日期与团队的实际工作日历一致。

借助 Zoho Projects 中的业务日历,您可以创建多个日程安排,并自定义工作日、休息时间和节假日列表。您还可以将日历与门户用户关联。这确保任务持续时间、工时、提醒和报告能够实时反映用户的可用状态。这有助于项目经理制定准确的项目计划和管理进度。

例如,在一个项目中,不同地区的团队可能遵循不同的工作时间安排;有些团队按标准工作日上班,有些团队则采用错峰轮班制。

为了应对这些差异,请为每个工作时间安排创建单独的“工作时间”,定义工作日,并设置自定义的开始和结束时间。您还可以添加休息时间,并关联相应的节假日列表。创建完成后,将用户与其各自的工作时间安排关联起来,并将其中一个设置为门户网站的默认安排。

在实际业务报表中,我们经常会遇到这样一种场景:
两个指标存在关联,但量级差异较大。

例如:

  • 销售额(金额)
  • 销量(件数)

如果将它们放在同一个纵轴上展示,要么销量几乎贴地不可见,要么销售额被压缩失真。这时,组合图(Combo Chart)就是更专业的选择。

组合图允许:

  • 一个数据系列使用柱状图展示
  • 另一个数据系列使用折线图展示
  • 同时支持双 Y 轴

本文将完整演示如何使用 Python 创建组合图表,如“柱状图 + 折线图”,并实现双 Y 轴展示。

示例基于 Free Spire.XLS for Python,可通过 pip 安装:

pip install spire.xls.free

1. 初始化工作簿与销售数据

首先创建工作簿,并准备示例数据结构。

from spire.xls import *

# 创建工作簿
workbook = Workbook()

# 获取工作表
sheet = workbook.Worksheets.get_Item(0)
sheet.Name = "销售图表演示"

# 设置表头
sheet.Range["A1"].Text = "月份"
sheet.Range["B1"].Text = "销售额"
sheet.Range["C1"].Text = "销量"

# 示例数据
data = [
    ("1月", 12000, 300),
    ("2月", 18500, 420),
    ("3月", 15000, 360),
    ("4月", 21000, 500),
    ("5月", 19500, 460),
]

row = 2
for item in data:
    sheet.Range[f"A{row}"].Text = item[0]
    sheet.Range[f"B{row}"].NumberValue = item[1]
    sheet.Range[f"C{row}"].NumberValue = item[2]
    row += 1

注意事项:

  • 销售额与销量必须使用 NumberValue
  • 否则图表无法识别为数值型数据

2. 创建组合图对象

# 添加图表
chart = sheet.Charts.Add()

# 设置数据范围
chart.DataRange = sheet.AllocatedRange
chart.SeriesDataFromRange = False

# 设置组合图类型
chart.ChartType = ExcelChartType.CombinationChart

关键点说明:

  • CombinationChart 表示组合图模式
  • SeriesDataFromRange = False 表示按列拆分数据系列

3. 设置柱状图系列(销售额)

sales_series = chart.Series.get_Item(0)
sales_series.SerieType = ExcelChartType.ColumnStacked
sales_series.Name = "销售额($)"
sales_series.UsePrimaryAxis = True

说明:

  • SerieType 控制该数据系列的图表类型
  • UsePrimaryAxis = True 表示使用主 Y 轴(左侧)

销售额通常数值较大,适合使用柱状图进行视觉强调。


4. 设置折线图系列(销量)

amount_series = chart.Series.get_Item(1)
amount_series.SerieType = ExcelChartType.LineMarkers
amount_series.Name = "销量(个)"
amount_series.UsePrimaryAxis = False

关键逻辑:

  • 折线图更适合展示趋势变化
  • UsePrimaryAxis = False 表示使用副 Y 轴(右侧)

通过双轴机制,可以避免数值比例冲突。


5. 设置图表位置与样式

# 设置图表位置
chart.LeftColumn = 4
chart.TopRow = 1
chart.RightColumn = 12
chart.BottomRow = 20

chart.ChartTitle = "2024年销售趋势"

chart.Legend.Position = LegendPositionType.Bottom

图表位置通过单元格坐标控制,这种方式比像素定位更稳定。


6. 自动调整列宽并保存文件

sheet.AllocatedRange.AutoFitColumns()

workbook.SaveToFile("CreateCombinationChart.xlsx", FileFormat.Version2016)
workbook.Dispose()

生成的 Excel 文件将包含:

  • 销售数据表
  • 柱状图(销售额)
  • 折线图(销量)
  • 双 Y 轴结构

无需手动修改即可直接使用。

生成结果预览:

使用Python在Excel工作表中创建组合图


常见组合图注意事项

项目说明
必须使用 CombinationChart否则无法混合图表类型
单独设置每个 SerieType控制不同图形类型
UsePrimaryAxis 控制双轴True 为左轴,False 为右轴
数据必须为数值类型使用 NumberValue

总结

组合图并不是简单的“两个图叠加”,它是一种表达结构关系的工具。

在自动化报表系统中,如果仅生成单一图表,往往难以满足管理层对趋势与规模同时分析的需求。而通过 Python 自动创建组合图,我们可以:

  • 构建更专业的分析报表
  • 自动生成双轴结构
  • 提高数据表达的层次感
  • 在服务器端直接输出完整可视化文件

借助 Python,我们无需打开 Excel 界面,即可构建具备企业级视觉表达能力的分析报表。

当自动化系统开始承担经营分析任务时,组合图能力将成为报表系统的重要组成部分。掌握这一能力,意味着你不仅在生成数据文件,而是在输出真正具备决策价值的业务图形。

更多 Excel 文件处理技巧,请前往 Spire.XLS for Python 官方教程查看。


                “术后8周康复目标”思维导图

“术后8周康复目标”思维导图模板获取链接

一、核心主题确定

核心主题明确为“术后8周康复目标”,该主题旨在系统化、可视化地呈现术后康复的全过程。围绕术后康复的不同阶段和具体训练内容展开设计,确保涵盖每周的重点任务、可执行的动作库以及负荷参数等信息,形成一套完整的康复指南。

二、导图结构设计

  • 主要分支划分:采用逻辑图结构,清晰划分“每周重点”、“动作库”和“负荷参数”三大主要分支,便于信息的分类展示和快速查找。
  • 每周重点细化:在“每周重点”下,按时间顺序分为四个子阶段(第1-2周、第3-4周、第5-6周、第7-8周),每个阶段详细列出具体的康复任务,利用分支自由布局功能,形成树状表格样式,层次分明,便于查看每周的康复重点。
  • 动作库分类:“动作库”分支细分为被动活动、主动辅助、抗阻训练和平衡训练四大类。每类下再详细列出具体的训练动作,形成系统化的动作指南,便于用户根据需求选择合适的训练方式。
  • 负荷参数展示:“负荷参数”分支则涵盖训练频率、强度控制和渐进原则,提供详细的参数指导,通过结构化的呈现方式,让用户清晰了解训练的各项参数要求。

三、导图样式设计

  • 颜色区分:运用不同颜色区分主要分支,如绿色代表每周重点、红色突出动作库、黄色用于负荷参数。这种颜色编码方式增强了视觉层次感,便于用户快速识别和区分不同类别的信息。
  • 文字精简:文字内容保持精简,使用要点形式呈现关键信息。避免冗长和复杂的句子结构,确保用户能够快速抓住重点,提高阅读效率。

“术后8周康复目标”思维导图模板在线免费体验链接

四、导图工具与流程

  • 工具选择:选用图形天下思维导图工具进行绘制,该工具支持多种结构化布局自由布局选项,便于根据实际需求灵活调整结构和样式。同时,工具提供丰富的图形元素和样式设置功能,满足个性化设计需求。
  • 创作流程

    • 信息收集:全面收集术后康复的相关信息,包括每周重点、动作库和负荷参数等。
    • 初步设计:利用工具的分支自由布局功能,快速搭建出思维导图的大致框架。
    • 内容填充:内容填充时,借助工具的文本编辑多中心主题功能,将康复计划的详细信息准确录入。
    • 样式调整:通过工具提供的图形样式、文本样式等设置选项,对思维导图进行美化,确保信息准确性和布局合理性。
    • 最终审核:对导图进行最终审核,确保信息的准确性和布局的合理性。形成一份高质量的思维导图,帮助用户快速掌握术后康复的关键信息。

图形天下思维导图软件免费下载链接

五、总结

通过运用图形天下思维导图工具的逻辑图分支自由布局树型表格等功能,结合颜色区分和文字精简等设计技巧,成功创作出一份清晰、有条理的“术后8周康复目标”思维导图。该导图不仅全面覆盖了术后康复的各个方面,还通过直观的可视化方式帮助用户快速掌握关键信息,有效提升了康复计划的执行效率和效果。

访问图形天下思维导图模板库教程资源,获取更多免费导图素材与实操指南,激发你的无限创意。

随着数字化时代的全面到来,全球各大企业都将目光高度聚焦于对外服务的安全建设上,通过部署SSL证书和安全审计,做好应对外部攻击的防范工作。而与此同时,同样关键的内部网络系统,却成为了遭到企业忽视的安全短板。无论是服务器之间的数据同步、内部API调用、建立开发测试环境,还是物联网设备与后台系统的内部连接,这些内部流通的数据,同样承载着不低的商业风险。相较于外部网络,内网系统承载大量隐私数据,一旦网络遭到非法入侵,明文传输的数据将面临极大的安全风险。JoySSL数据安全部门的技术总监指出,内网安全在现代社会中极容易遭到企业忽视,多数企业将其认定为自身内部事务,不会遭到外部威胁。然而,内网安全早已成为企业纵深防御体系中不可或缺的重要构成。为内网环境专门设计的内网IP SSL证书,正是为内部网络提供安全加密与信息验证的基础防护工具,在当前零信任架构体系下,其核心价值逐渐凸显。

内网IP证书与传统SSL证书的区别

传统证书绑定的均是公网域名,而内网IP证书本质上是一种特殊SSL证书,核心特点在于绑定的标识符为服务器的内网IP地址,专门用于没有公网域名,仅可通过内网IP访问的场景,从而为其提供强加密与强验证服务。

在技术实现方面,内网IP证书与传统证书一样,由受信任的证书颁发机构所签发。但不同的是,内网证书的申请验签过程需证明申请者对相应内网地址的控制权。

正确认识内网IP证书的战略价值

积极部署内网IP证书,对企业内网安全与高效管理具有重大意义。JoySSL技术总监表示,部署内网IP证书,可封堵数据明文传输时遭遇的隐形漏洞,将服务器之间的通信全部加密,限制非法攻击在系统内部的横向移动与窃取能力。

基于信任架构中的验证需求,内网IP证书通过标准化方案,强化身份认证。利用服务器身份验证,可确认连接的合法与安全性。同时,双向认证可进一步实现精细化访问控制,确保授权对象才能访问核心数据。

部署指南 有效申请安装内网证书

首先明确需求,做足准备。确定所需证书类型,同时确立所有需要加密的地址与服务。其次,提交申请与验证。通过文件或反向验证,确认申请者对IP的控制权。随后签发绑定,将证书安装至相应的内网服务器,并配置HTTPS服务,手动导入至受信任的根证书颁发机构存储。部署完成后,通过自动化管理系统对证书异常、续期等行为进行监测,简化管理难度。

以内网IP证书构建安全防护壁垒

零信任理念正逐渐从概念走向实践,企业的安全防线有必要从边界延伸至系统内部的每一台服务器,甚至每一次数据交互。内网IP证书可让原本透明的内部流量受高强度加密技术保护,让每一次对话都带有经过验证的身份标识,进一步完善了企业的纵深防御体系,成为守护企业数据和资产安全的壁垒。

中转站: https://chenyouai.com


先感谢各位 V 友的支持!上次发帖后,已有几百位 V 友体验了辰友中转站。不过因为上次体验额度仅限 V 友在帖子里领取,后台发现不少朋友注册了却没能领到体验额度,这里说声抱歉。这次改为添加客服即可领取,直接送 $20 ,先用起来再说。


我们的特点

  • 高缓存命中率:省钱才是硬道理,相同请求命中缓存后计费大幅降低
  • 计费清晰可查:每一笔消费都能在后台看到明细,花得明白
  • 主打 OpenAI GPT 全系列中转,Claude 系列模型内测中


正式上线:Codex 包月订阅套餐

经过一段时间的内测,这次正式开通三个档位的订阅套餐:

关于额度设计

可能有朋友会问:月额度除以 30 天不等于日额度呀?没错,这就是我们套餐设计的用心之处——

  • 日额度 ≈ 平均 2 天的用量
  • 周额度 ≈ 平均 10 天的用量

这样设计是为了应对突发的高强度使用场景。比如某天集中写代码需要多问几轮,不至于被日额度卡住。

选哪个档位?

以我自己为例,每天高强度使用 gpt-5.2+xhigh ,日消耗几乎很少超过 $50 。在高缓存命中的前提下,Lite 套餐(¥30/月)应该就能满足大多数人的日常需求

如果你是重度用户或者有公司级定制需求,欢迎直接联系客服沟通。


回复抽奖

老规矩,回复抽奖安排上:

  • 每 10 个不同用户回复,抽 1 个 Lite 包月套餐
  • 中奖概率 10%,同一用户多次回复只算一次
  • 回复就有机会,聊两句也行


新用户体验

添加客服联系方式,发送 领取体验额度,即可获赠 $20 体验额度,零门槛先体验,觉得好用再考虑订阅。

微信客服:

微信客服二维码

QQ 客服:

QQ 客服二维码


感谢各位 V 友一直以来的支持,有任何问题或建议随时反馈,我们会持续优化服务。

在前两篇文章里,我们完成了从零到一:第一篇打通了移动端与眼镜端的消息通道,第二篇在眼镜上展示了天气卡片并加入了 TTS 语音播报。

但还有三个短板没有解决:说话要带城市名(不能说「这里天气」)、每次都是全新查询(没有上下文记忆)、播完天气就结束了(没有进一步建议)。本篇解决这三件事,同时也是整个系列的收官实战篇。

如果您有任何疑问、对文章写的不满意、发现错误或者有更好的方法,如果你想支持下一期请务必点赞~,欢迎在评论、私信或邮件中提出,非常感谢您的支持。🙏


那么你将获得

  • GPS 自动定位:说「这里天气」自动获取位置,不用报城市名
  • 多轮对话:说「上海呢」「那边呢」「再查一次」接续上轮查询
  • AI 穿衣建议:接入 Claude API,天气播报后自动追加穿衣/出行建议
  • 可直接复制的 Kotlin 代码(LocationHelper、ConversationContext、AiSuggestionHelper)
  • 踩坑:直辖市 adcode、续播语义识别、LLM 延迟控制

一、总体流程

本篇在已有的 AiWeatherActivity(AI 语音查天气)基础上扩展,整体数据流如下:

Feature Provider Assembly-2026-03-02-091159

新增三个辅助类,原有文件做对应改造:

新建文件职责
LocationHelper.ktGPS + 高德逆地理编码
ConversationContext.kt多轮对话上下文(含5分钟TTL)
AiSuggestionHelper.ktClaude API 穿衣建议
改动文件改动点
AiIntentParser.kt+ GPS触发词 + 续播意图解析 + 城市库扩充
WeatherViewHelper.kt+ tv_suggestion 控件 + generateSuggestionUpdateJson()
AiWeatherActivity.kt串联 GPS / Context / Suggestion 完整调用链

二、功能 A:GPS 自动定位

2.1 实现路径

Feature Provider Assembly-2026-03-02-091258

为什么优先缓存? 用户说完「这里天气」不想等 5 秒。缓存位置最多偏差几公里,对天气查询完全够用。

2.2 核心代码:LocationHelper.kt

class LocationHelper(private val context: Context) {

    interface LocationCallback {
        fun onCityCode(adcode: String, cityName: String, districtName: String)
        fun onError(reason: String)
    }

    fun getCurrentCityCode(callback: LocationCallback) {
        if (!hasLocationPermission()) {
            callback.onError("缺少定位权限")
            return
        }
        val manager = context.getSystemService(Context.LOCATION_SERVICE) as LocationManager
        val lastKnown = getLastKnownLocation(manager)
        if (lastKnown != null) {
            reverseGeocode(lastKnown.latitude, lastKnown.longitude, callback)
        } else {
            requestSingleUpdate(manager, callback)
        }
    }

    @SuppressLint("MissingPermission")
    private fun getLastKnownLocation(manager: LocationManager): Location? =
        listOf(GPS_PROVIDER, NETWORK_PROVIDER, PASSIVE_PROVIDER)
            .mapNotNull { runCatching { manager.getLastKnownLocation(it) }.getOrNull() }
            .maxByOrNull { it.time }

    private fun reverseGeocode(lat: Double, lon: Double, callback: LocationCallback) {
        // 注意:高德 API 格式是 "经度,纬度"(lon在前)
        val url = "$REGEO_URL?location=$lon,$lat&key=$API_KEY&extensions=base&output=JSON"
        // OkHttp 调用 ...

        // 解析响应
        val component = json
            .getJSONObject("regeocode")
            .getJSONObject("addressComponent")
        val adcode = component.optString("adcode")

        // ⚠️ 踩坑:直辖市 city 字段为空,需取 province
        val city = component.optString("city").ifEmpty {
            component.optString("province")
        }
        val district = component.optString("district")
        callback.onCityCode(adcode, city, district)
    }
}

2.3 意图解析:新增 GPS 触发词

AiIntentParser 里加一批触发词,识别「这里天气」类意图:

private val LOCATION_KEYWORDS = listOf(
    "这里", "附近", "当前", "我这", "这边", "当前位置", "我在哪", "这里的"
)

// 返回特殊常量 INTENT_LOCATION,交给 Activity 分支处理
const val INTENT_LOCATION = "__LOCATION__"

fun isLocationIntent(text: String): Boolean {
    val hasLocation = LOCATION_KEYWORDS.any { text.contains(it) }
    val hasWeather = text.contains("天气") || WEATHER_KEYWORDS.any { text.contains(it) }
    return hasLocation && hasWeather
}

Activity 侧处理分支:

private fun processRecognizedText(text: String) {
    val intent = intentParser.parseWeatherIntent(text, conversationContext)
    when {
        intent == null -> {
            updateStatus("未识别到查询意图,请说「XXX天气」或「这里天气」")
            notifyAiError()
        }
        intent == AiIntentParser.INTENT_LOCATION -> handleLocationIntent()
        else -> queryWeather(intent, intentParser.getCityNameByCode(intent))
    }
}

private fun handleLocationIntent() {
    checkLocationPermission {
        locationHelper.getCurrentCityCode(object : LocationHelper.LocationCallback {
            override fun onCityCode(adcode: String, cityName: String, districtName: String) {
                val name = if (districtName.isNotBlank()) "$cityName$districtName" else cityName
                queryWeather(adcode, name)
            }
            override fun onError(reason: String) { notifyAiError() }
        })
    }
}

三、功能 B:多轮对话上下文

3.1 核心数据结构

data class ConversationContext(
    val lastCityCode: String? = null,
    val lastCityName: String? = null,
    val turnCount: Int = 0,
    val lastQueryTimeMs: Long = 0L
) {
    companion object {
        private const val CONTEXT_TTL_MS = 5 * 60 * 1000L // 5分钟
    }

    fun isValid(): Boolean =
        lastCityCode != null &&
            (System.currentTimeMillis() - lastQueryTimeMs) < CONTEXT_TTL_MS

    fun advance(cityCode: String, cityName: String): ConversationContext =
        copy(
            lastCityCode = cityCode,
            lastCityName = cityName,
            turnCount = turnCount + 1,
            lastQueryTimeMs = System.currentTimeMillis()
        )
}
为什么设 5 分钟 TTL? 纯粹是经验估计:5 分钟内的续问大概率是连续对话;超过 5 分钟放下手机再拿起来,基本是新话题,不应复用旧上下文。

3.2 续播意图的两种形态

private val CONTINUATION_KEYWORDS = listOf(
    "那呢", "那边", "那里呢", "那边呢", "再查", "继续", "再来一次", "重新查"
)

private fun parseContinuationIntent(text: String, ctx: ConversationContext): String? {
    // 形态1:续播词 → 直接复用上次城市
    if (CONTINUATION_KEYWORDS.any { text.contains(it) }) return ctx.lastCityCode

    // 形态2:只有城市名,没有天气关键词(「上海呢」)→ 切换城市
    val hasWeather = WEATHER_KEYWORDS.any { text.contains(it) }
    if (!hasWeather) {
        val cityCode = extractCityCode(text)
        if (cityCode != null) return cityCode
    }
    return null
}

三种典型场景对照:

用户说解析结果
「上海呢」形态2:切换到上海
「那边呢」形态1:复用上次城市
「再查一次」形态1:同城市重查
「明天北京天气」正常解析:北京(不走续播)

Activity 侧每次成功查询后更新上下文:

// queryWeather 成功回调中:
conversationContext = conversationContext.advance(cityCode, cityName)

四、功能 C:AI 穿衣建议(Claude API)

4.1 为什么用 LLM 而不是规则

用规则也能生成建议:

if (temp < 10) "建议穿厚外套"
else if (weather.contains("雨")) "建议带伞"
else "穿着舒适即可"

问题在于这是死的。同样是 10 度、小雨:北京会建议穿棉服;深圳的 10 度已经算相对冷了,建议和北京截然不同。LLM 能感知城市的气候背景,给出有地域差异的自然建议,这是规则系统做不到的。

4.2 核心代码:AiSuggestionHelper.kt

class AiSuggestionHelper {
    companion object {
        private const val API_URL = "https://api.anthropic.com/v1/messages"
        private const val CLAUDE_API_KEY = "YOUR_CLAUDE_API_KEY"
        private const val MODEL = "claude-haiku-4-5-20251001"
    }

    interface SuggestionCallback {
        fun onSuggestion(suggestion: String)
        fun onError(reason: String)
    }

    fun getSuggestion(
        city: String, temp: String, weather: String,
        wind: String, humidity: String,
        callback: SuggestionCallback
    ) {
        val systemPrompt = "你是一个天气助手,根据天气数据生成简洁的中文穿衣和出行建议。" +
            "要求:语气自然友好,不超过50字,直接给建议,不要重复天气数据。"

        val userMessage = "城市:$city,气温:${temp}°C,天气:$weather," +
            "风力:$wind,湿度:${humidity}%,请给出建议。"

        val requestBody = JSONObject().apply {
            put("model", MODEL)
            put("max_tokens", 200)
            put("system", systemPrompt)
            put("messages", JSONArray().apply {
                put(JSONObject().apply {
                    put("role", "user")
                    put("content", userMessage)
                })
            })
        }.toString()

        val request = Request.Builder()
            .url(API_URL)
            .addHeader("x-api-key", CLAUDE_API_KEY)
            .addHeader("anthropic-version", "2023-06-01")
            .addHeader("content-type", "application/json")
            .post(requestBody.toRequestBody("application/json".toMediaType()))
            .build()

        client.newCall(request).enqueue(object : Callback {
            override fun onResponse(call: Call, response: Response) {
                val body = response.body?.string() ?: return
                val suggestion = JSONObject(body)
                    .getJSONArray("content")
                    .getJSONObject(0)
                    .optString("text")?.trim()
                if (suggestion != null) callback.onSuggestion(suggestion)
                else callback.onError("解析失败")
            }
            override fun onFailure(call: Call, e: IOException) {
                callback.onError("网络请求失败: ${e.message}")
            }
        })
    }
}

4.3 Prompt 设计要点

「不要重复天气数据」这条约束很关键——用户刚听完 TTS 播报了天气,建议里再说「当前北京25度晴天,建议穿短袖」是纯粹的信息冗余。

claude-haiku-4-5-20251001 而不是更强的模型,是因为这个场景对「聪明程度」要求不高,对延迟的要求更高:用户说完天气查询,天气 TTS 结束后 2 秒内最好就能听到建议。

4.4 与天气查询的串联时序

private fun queryWeather(cityCode: String, cityName: String) {
    weatherApiHelper.getWeatherForecast(cityCode, object : WeatherApiHelper.WeatherCallback {
        override fun onSuccess(response: WeatherApiResponse) {
            val live = response.lives?.firstOrNull()
            val forecast = response.forecasts?.firstOrNull()

            // 1. 打开眼镜端 Custom View(建议区初始显示「建议获取中...」)
            openGlassCustomView(weatherViewHelper.generateWeatherViewJson(live, forecast))

            // 2. TTS 播报天气摘要
            sendWeatherTts(weatherViewHelper.generateWeatherTtsText(live, forecast))

            // 3. 更新多轮上下文
            conversationContext = conversationContext.advance(cityCode, cityName)

            // 4. 异步获取 AI 建议(不阻塞天气播报)
            if (live != null) fetchAiSuggestion(live, cityName)
        }
        override fun onError(error: String) { notifyAiError() }
    })
}

private fun fetchAiSuggestion(live: Live, cityName: String) {
    val wind = "${live.winddirection ?: ""} ${live.windpower ?: ""}".trim()
    suggestionHelper.getSuggestion(
        city = cityName, temp = live.temperature ?: "--",
        weather = live.weather ?: "--", wind = wind,
        humidity = live.humidity ?: "--",
        callback = object : AiSuggestionHelper.SuggestionCallback {
            override fun onSuggestion(suggestion: String) {
                // 更新眼镜端建议控件
                updateGlassCustomView(weatherViewHelper.generateSuggestionUpdateJson(suggestion))
                // 延迟 2 秒播报,避免与天气 TTS 重叠
                Handler(Looper.getMainLooper()).postDelayed({
                    sendGlobalTtsContent(suggestion)
                }, 2000L)
            }
            override fun onError(reason: String) {
                updateGlassCustomView(
                    weatherViewHelper.generateSuggestionUpdateJson("建议暂时无法获取")
                )
            }
        }
    )
}

4.5 眼镜端 Custom View 新增建议区

WeatherViewHelper 在原有天气卡片末尾追加分割线和建议控件:

// 分割线
children.put(createTextView(
    id = "tv_divider",
    text = "─────────────────",
    textSize = "10sp",
    textColor = "#FF444444",
    marginTop = "12dp",
    marginBottom = "8dp"
))

// AI 建议占位(成功后 updateCustomView 更新)
children.put(createTextView(
    id = ViewIds.TV_SUGGESTION,
    text = "建议获取中...",
    textSize = "14sp",
    textColor = "#FFFFCC00"  // 金色,区别于普通信息
))

仅更新建议的方法:

fun generateSuggestionUpdateJson(suggestion: String): String {
    val updates = JSONArray()
    updates.put(createUpdateAction(ViewIds.TV_SUGGESTION, "text", suggestion))
    return updates.toString()
}

五、踩坑与排错速查

直辖市逆地理编码返回城市名为空

高德 regeo 接口,北京/上海/天津/重庆的 city 字段是空字符串,城市信息在 province 里:

// 错误写法:
val city = component.optString("city") // 北京返回 ""

// 正确写法:
val city = component.optString("city").ifEmpty {
    component.optString("province")
}

续播语义识别错误

判断关键是「有没有天气关键词」:

  • 有天气关键词(「北京天气」)→ 走正常解析,不走续播
  • 无天气关键词(「北京呢」)+ 有城市名 → 走续播,切换城市
  • 续播词(「那边呢」)→ 复用上次城市

AI 建议延迟太长/播报重叠

Claude Haiku 响应通常在 1-2 秒。fetchAiSuggestion 在天气查询成功后立即异步发起,建议播报延迟 2 秒,基本不会与天气 TTS 重叠。如果网络慢可以加 OkHttp 超时:

OkHttpClient.Builder()
    .readTimeout(10, TimeUnit.SECONDS)
    .build()

requestSingleUpdate 废弃警告

LocationManager.requestSingleUpdate() 在 API 30+ 被标记废弃,但本项目 minSdk=28,功能完全正常,用 @Suppress("DEPRECATION") 压警告即可。


六、完整调用示意(三功能汇总)

用户:「这里天气」
  → isLocationIntent → INTENT_LOCATION
  → checkLocationPermission → LocationHelper.getCurrentCityCode
  → 高德 regeo → adcode=110105(朝阳区)
  → queryWeather("110105", "北京市朝阳区")
  → openCustomView(天气卡片,建议区显示「获取中...」)
  → sendTtsContent(「北京市朝阳区当前天气,温度25度,晴...」)
  → context.advance("110105", "北京市朝阳区")
  → AiSuggestionHelper.getSuggestion → Claude API
  → updateCustomView(「今天天气舒适,建议穿薄外套出行」)
  → 2秒后 sendGlobalTtsContent(「今天天气舒适,建议穿薄外套出行」)

用户:「上海呢」
  → parseContinuationIntent → 形态2,切换到上海
  → queryWeather("310101", "上海") ...(同上流程)

用户:「那边呢」
  → parseContinuationIntent → 形态1,复用上海
  → queryWeather("310101", "上海") ...

七、需要替换的 Key

文件常量说明
WeatherApiHelper.ktAPI_KEY高德天气 Key
LocationHelper.ktAPI_KEY同一个高德 Key
AiSuggestionHelper.ktCLAUDE_API_KEYAnthropic API Key

高德天气和逆地理编码共用同一个 Key(高德开放平台同一应用下权限打通即可)。


八、从这里出发,还能做什么

做完这篇,其实有一个更大的问题浮现:眼镜应该做什么?

手机是工具——你主动去用它。眼镜是助手——它在你需要的时候说一句话,然后闭上嘴。

天气是最安全的起点:不打扰、有明确答案、TTS 一句话说完。但如果你想继续探索,以下方向都在这套框架上可以直接延伸:

  • 路况播报:早晨出门前说「今天路况」,调高德交通 API + TTS
  • 会议提醒:接入日历权限,到点眼镜自动提醒「15 分钟后有会议」
  • 实时翻译:利用 controlScene(CxrSceneType.TRANSLATION) 做实时翻译
  • 时间维度续播:「那明天呢」处理预报字段

没了。如果你想支持下一期请务必点赞~,欢迎在评论、私信或邮件中提出任何问题,这对我真的很重要,非常感谢您的支持。🙏

在2026年的今天,Java开发者面临的早已不是“会不会写代码”的问题,而是如何从繁琐的重复劳动中解脱出来。特别是面对Spring Boot项目初始化、三层架构代码编写以及各种“粘合剂”配置时,手动的重复劳动往往占据了大量的开发时间。

2026年1月,飞算科技正式发布飞算JavaAI专业版,作为国内唯一获中国信通院认证的、可生成完整工程代码的AI编程助手,它正将开发效率推向新高度 。本文将带你实战演练,从0到1体验飞算JavaAI如何一键生成完整的Spring Boot项目工程。

  1. 新建项目:选择Spring Boot版本与依赖

在传统开发中,新建一个Spring Boot项目需要去Spring Initializr勾选依赖、生成包结构再导入IDE。而在飞算JavaAI中,这一切被浓缩为自然语言对话。

在IntelliJ IDEA中安装飞算JavaAI插件后,你只需要在右侧的AI对话面板中输入类似这样的需求 :

“新建一个Spring Boot 3.2项目,使用Java 17,依赖选择Spring Web、MyBatis-Plus 和 MySQL Driver,创建一个用户管理的增删改查功能。”

飞算JavaAI 遵循引导式开发逻辑,并不会直接丢出一堆混乱的代码。它会先在对话框里与你确认需求理解,自动拆解为“接口设计”、“表结构设计”、“业务逻辑处理”等步骤 。

在最新的专业版中,飞算JavaAI原生支持Spring Boot 3.x系列及Spring Cloud微服务套件,内置了针对这些框架的最佳实践,确保生成的代码从一开始就符合官方规范,而非简单的语法堆砌 。
image.png

  1. 生成Controller、Service、Mapper代码

确认需求后,便是飞算JavaAI最核心的“一键工程构建”能力。它生成的不再是零散的代码片段,而是一个遵循Maven标准目录结构、分层清晰的完整工程 。

以生成“用户管理”功能为例,飞算JavaAI会在后台完成以下工作:

实体类与数据库设计:自动生成User实体,并匹配JPA或MyBatis-Plus注解。同时规划好数据库表结构,甚至包括字段备注和索引建议 。

三层代码生成:

Controller层:生成符合RESTful风格的接口,包含@PostMapping、@GetMapping等注解,并自动集成参数校验。

Service层:生成业务逻辑接口及实现类,自动处理事务注解@Transactional。

Mapper层:生成MyBatis-Plus的Mapper接口,甚至包含复杂的动态SQL(如<script>标签内的内容)。

异常处理与日志:自动添加全局异常处理器(@RestControllerAdvice)和日志切面配置,避免AI代码常见的“只写正例,不写异常”的毛病 。

有开发者在实战中测试,生成一个包含核心CRUD逻辑的模块,飞算JavaAI不仅完成了基础代码,还自动加入了诸如分布式锁、库存不足熔断策略等企业级考量,这些细节通常是普通AI工具难以顾及的 。
image.png

  1. 运行测试验证接口可用性

代码生成后,最怕的就是“能看不能跑”。飞算JavaAI专业版在代码质量上做了重点优化。根据官方2026年1月发布的数据,专业版的代码采纳率从70%提升至90%,返工调试工作量降低20% 。

生成的项目是一个即时可运行的Spring Boot工程。你只需修改application.yml中的数据库连接信息,启动main方法,即可通过Swagger(如果勾选了相关依赖)或Postman访问接口。

例如,在生成复杂的卷积神经网络(CNN)或涉及Deeplearning4j的算法项目时,飞算JavaAI甚至会主动提示你修改pom.xml依赖版本,并生成包含数据加载、训练循环、模型评估的完整可执行代码,确保开箱即用 。

  1. 如何调整AI生成的代码

AI生成代码虽然强大,但如何与团队现有规范对齐?飞算JavaAI提供了独特的自定义AI规则文件来解决这一问题 。

如果你对生成的代码有微调需求,可以通过以下几种方式:

自然语言二次修正:直接在对话框输入“将Controller层的@GetMapping改为@PostMapping”,AI会自动识别并修改相关文件。

自定义规范文件:这是飞算JavaAI的杀手锏功能。你可以在项目中通过自然语言设定规范(例如:“Controller层方法必须加@Log注解”、“所有类名不得包含‘DO’后缀”),后续生成的代码将严格遵循这些规则 。

AI工具箱微调:如果代码存在冗余或格式问题,可以使用“Java整洁器”一键优化,它会自动删除无用导入、简化复杂表达式、修复Checkstyle规范违规 。甚至有“Jar依赖修复器”,可以快速解决因版本冲突导致的启动报错 。

image.png

  1. 结尾FAQ

为了帮助你更好地开始使用飞算JavaAI,我们针对最关心的两个问题进行解答:

Q:飞算JavaAI支持哪些Spring Boot版本?
A:飞算JavaAI深度适配Java生态,原生支持Spring Boot的多个主流版本。特别是在2026年1月发布的专业版中,重点强化了对Spring Boot 3.x及Spring Cloud微服务套件的支持,内置了30+主流框架的最佳实践,能自动处理不同版本间的配置差异(如Spring Boot 2.x与3.x的配置迁移)。

Q:能生成微服务项目吗?
A:完全可以。飞算JavaAI不仅能生成单体应用,还能一键生成微服务工程。它能够自动理解微服务拆分逻辑,生成包含服务注册与发现(Eureka/Nacos)、配置中心、分布式事务(Seata)等核心组件的完整项目结构 。

写在最后
飞算JavaAI的出现,标志着AI编程从“辅助写代码”迈入了“协同建系统”的新阶段。它用无限量Tokens解决了开发者的额度焦虑,用企业级模型保障了生成逻辑的严谨性 。如果你还在为Spring Boot项目的重复劳动而苦恼,不妨试试这个“懂行”的AI搭档。

目前飞算JavaAI专业版已开放9.9元/月的尝鲜通道,你也可以通过基础版免费体验核心功能 。

开工大吉的热闹褪去,不少程序员却陷入了“开工困境”——近日,“程序员开工手抖确诊假期综合征”的新闻冲上热搜,引发全网程序员共鸣。有程序员网友吐槽:“假期里手只握过手机和筷子,再碰键盘竟手抖到敲不准字符”“面对年前写的代码,大脑一片空白,连Hello
World都要愣半天”“打开IDE盯着屏幕半小时,一行有效代码都写不出来”。事实上,这种节后“编码失忆”“效率掉线”的状态,并非个例,而飞算JavaAI,正是帮程序员快速找回手感、高效复工的“神器”。

image.png

节后复工效率低?三大核心原因戳中程序员痛点

很多程序员疑惑,明明假期休息充足,为何开工后却迟迟进入不了编码状态?结合程序员职业特性和假期状态,总结出三大核心原因,每一个都戳中痛点:

  1. 生理节律紊乱,大脑“休假模式”未切换

假期里,熬夜刷剧、玩游戏、走亲访友成为常态,打破了日常工作的规律作息,人体自主神经系统出现紊乱,睡眠不足、精神萎靡成为普遍现象。程序员日常工作需要高度集中精力,而节后大脑仍处于“放松懈怠”的休假模式,面对复杂的代码逻辑和业务需求,难以快速进入专注状态,出现反应迟钝、思路卡顿的情况,敲代码自然力不从心。这也是“开工手抖”的核心诱因——并非身体出现病变,而是生理节律失衡导致的肌肉控制不协调和注意力不集中。

  1. 技能“生锈”,编码手感断层

程序员的编码能力,离不开日常的练习和使用,就像肌肉长期不锻炼会“生锈”一样,假期里完全脱离代码环境,大脑对编程语言、语法规则、框架使用的记忆会逐渐模糊。开工后面对项目,需要重新回忆基础语法、框架配置,甚至要翻看以前的代码才能找回思路,原本熟练的操作变得生疏,编码效率大幅下降,甚至出现“写一行改三行”的尴尬,这种“节后代码失忆症”成为程序员复工的最大阻碍之一。

  1. 任务压力叠加,心理焦虑加剧低效

开工后,堆积的需求、未完成的项目、紧急的迭代任务接踵而至,而程序员本身还未从假期的松弛状态中走出来,面对繁重的工作任务,容易产生焦虑情绪。这种焦虑会进一步影响专注度,导致思路混乱、错误频发,形成“效率低→焦虑→更低效”的恶性循环,甚至出现逃避编码、拖延工作的情况,让复工状态雪上加霜。同时,假期的高多巴胺刺激(刷剧、游戏等)过后,面对枯燥的代码容易产生戒断反应,也会加剧心理上的抵触感。

飞算JavaAI:一键破解复工困境,快速找回编码手感

image.png

面对节后复工的“编码瓶颈”,强行硬扛不仅效率低下,还会打击自信心。此时,一款高效的AI编程工具,能帮程序员快速“热身”,而飞算JavaAI,正是专为Java开发者打造的复工“好帮手”,凭借强大的代码生成能力,帮你跳过繁琐的基础操作,快速找回编码节奏。

飞算JavaAI依托先进的AI算法,深度适配Java开发场景,聚焦程序员复工期间的核心需求,无需复杂操作,就能快速生成基础代码框架,帮你省去重复的“热身”环节。无论是简单的接口编写、实体类定义,还是复杂的框架配置,飞算JavaAI都能精准响应,让你从“无从下手”快速过渡到“高效编码”,轻松找回指尖流过代码的熟悉手感。

与其他AI编程工具不同,飞算JavaAI更懂Java开发者的复工痛点,生成的代码贴合企业实际开发规范,无需大量修改就能直接投入使用,既节省时间,又能避免因生疏导致的语法错误,有效缓解复工焦虑,让编码效率快速回归正常水平。同时,它还具备智能代码补全、代码优化等功能,在帮你找回手感的同时,还能提升代码质量,一举两得。

image.png

手把手实操:3步用飞算JavaAI生成Spring Boot项目**

Spring Boot是Java开发者最常用的框架之一,节后复工,很多项目都需要从搭建Spring Boot项目开始,手动配置依赖、创建目录结构,不仅繁琐,还容易出错,严重影响复工手感。下面,就用飞算JavaAI实操演示,3步快速生成可直接使用的Spring Boot项目,帮你快速进入编码状态。

第一步:下载并配置飞算JavaAI

访问飞算官方网站,下载飞算JavaAI客户端,安装完成后打开工具,进行简单配置。将工具与本地的Java开发环境(如Maven、IntelliJ IDEA等)进行关联,确保工具能顺利调用相关环境,为后续项目生成和构建做好准备。整个配置过程简单易懂,无需复杂的技术操作,新手也能快速完成。

第二步:输入需求,一键生成项目脚手架

打开飞算JavaAI的项目创建界面,清晰描述项目需求:选择项目类型为Spring
Boot,指定项目功能(如简单的用户管理系统)、数据库类型(如MySQL),以及所需的技术栈(如MyBatis作为数据持久层框架)。输入完成后,点击“生成项目”,飞算JavaAI会快速分析需求,基于庞大的代码模板库,自动生成Spring
Boot项目脚手架,涵盖src/main/java、src/main/resources等核心目录,自动添加Spring Web、Spring Data JPA等所需依赖,以及application.properties配置文件,整个过程仅需3-5分钟,无需手动编写一行配置代码。

第三步:导入开发环境,直接上手编码

项目生成完成后,在IntelliJ IDEA等开发工具中,通过Maven的“导入项目”功能,将生成的项目导入。导入过程中,Maven会自动下载项目所需的所有依赖包,无需手动下载配置。导入完成后,运行Spring Boot项目的启动类,若能正常访问默认接口,说明项目搭建成功。此时,你可以基于生成的基础框架,直接编写业务逻辑代码,无需再花费时间搭建基础结构,轻松找回编码手感,快速进入工作状态。

结尾FAQ:解决复工编码核心困惑

复工期间,很多程序员会有两个核心困惑,结合飞算JavaAI的使用,逐一解答,帮你彻底摆脱复工困境:

Q1:如何快速找回编码状态?

核心思路是“循序渐进,借力工具”:首先,调整生理节律,尽量恢复工作期间的作息,避免熬夜,通过简单的运动(如散步、瑜伽)缓解身体疲劳,让大脑快速切换到工作模式;其次,不要一开始就挑战复杂任务,可从简单的代码编写、接口调试入手,逐步找回手感;最后,善用飞算JavaAI等工具,跳过繁琐的基础操作,减少挫败感,通过“小任务成就感”带动状态提升,比如用飞算JavaAI生成基础代码,在此基础上优化完善,快速建立编码信心。同时,可通过查看年前的Git提交记录,回顾过往的编码思路,帮助大脑快速唤醒编码记忆。

Q2:使用AI工具,会不会让技术退步?

答案是:不会,合理使用反而会提升技术水平。很多程序员担心,依赖AI生成代码会让自己逐渐忘记基础语法、框架原理,导致技术退化,但实际上,飞算JavaAI的核心作用是“解放双手,聚焦核心”——它帮你省去的是重复、繁琐的基础代码编写工作,让你有更多时间和精力去研究复杂的业务逻辑、优化代码性能、学习新的技术栈。对于初学者来说,飞算JavaAI生成的代码是优质的学习范例,通过学习这些符合规范的代码,还能快速掌握Spring Boot等框架的架构设计和开发规范,助力技术积累;对于资深开发者,它能提升开发效率,让你有更多精力投入到技术创新和难题攻克中,避免陷入“重复劳动”的内耗。真正的技术进步,不在于重复编写基础代码,而在于核心能力的提升,飞算JavaAI正是帮你实现这一点的工具,而非“替代者”。同时,使用过程中,建议对AI生成的代码进行复盘和优化,进一步巩固自身技术,避免盲目复制粘贴。

节后复工,不必因“编码手感掉线”而焦虑,也无需硬扛低效的工作状态。飞算JavaAI,用AI赋能编码,帮你快速跳过繁琐环节,找回熟悉的编码手感,高效完成复工任务,轻松开启新一年的编码之旅。无论是新手还是资深Java开发者,都能借助它摆脱复工困境,让编码更高效、更轻松!

在一个程序员的群,好多年了,突然被管理员踢了.
可能是我说了什么,让管理员感觉不太好的内容.
管理员据说是女的.
随缘吧.真的累了.

伤感的原因,联想到,人可能也会突然死去.

图片
文末有源码下载链接!

1、什么是RPC?gRPC是什么?

    RPC是Remote Procedure Call的缩写,中文是远程过程调用的意思。让程序像调用本地函数一样去调用远在另一台服务器上的函数。

    gRPC是Google开源的高性能RPC框架。它的特点是:

        使用HTTP/2

        使用Protobuf(二进制序列化)

        自动生成客户端与服务端代码

        内置流式通信

        高性能、跨语言

    gRPC专为微服务架构打造。

2、gRPC的工作流程

    第一步:用protobuf(.proto文件)定义接口与数据结构

    第二步:用protoc工具自动生成客户端和服务的代码

    第三步:实现服务端接口

    第四步:写客户端

    第五步:使用HTTP/2+二进制传输进行通信

[.proto 文件] → protoc → [Server  + Client ] →
Server 实现 ←→ Client 像调用本地函数一样调用

3、gRPC示例

    我们以商品管理为例

3.1 定义proto文件 proto/goods.proto

syntax = "proto3";
package goods;
option go_package = "./proto/goods";
service GoodsService {
    rpc GetGoods (GetGoodsRequest) returns (GetGoodsResponse) {}
}
message GetGoodsRequest {
    int64 id = 1;
}
message GetGoodsResponse {
    int64 id = 1;
    string name = 2;
    float price = 3;
    int64 stock = 4;
}

3.2 生成代码

$ protoc --go_out=.  --go-grpc_out=. goods.proto

    这里生成的代码比较长,只做展示用,源码在文末下载,注意:生成的代码不要去改动

图片

3.3 实现服务端

//proto_impl/goods.impl.go
package protoimpl
import (
    "context"
    "golang_per_day_29/proto/goods"
)
type GoodsServiceServer struct {
    goods.UnimplementedGoodsServiceServer
}
func (s *GoodsServiceServer) GetGoods(ctx context.Context,
 req *goods.GetGoodsRequest) (*goods.GetGoodsResponse, error) {
    return &goods.GetGoodsResponse{
        Id:    req.Id,
        Name:  "Codee君",
        Price: 99.99,
        Stock: 1000,
    }, nil
}
//main.go
package main
import (
    "golang_per_day_29/proto/goods"
    protoimpl "golang_per_day_29/proto_impl"
    "net"
    "google.golang.org/grpc"
)
func main() {
    lis, _ := net.Listen("tcp", ":50051")
    s := grpc.NewServer()
    goods.RegisterGoodsServiceServer(s, 
    &protoimpl.GoodsServiceServer{})
    s.Serve(lis)
}
//启动服务
go run .

3.4 客户端调用

// main_test.go
func TestGrpc(t *testing.T) {
    conn, _ := grpc.Dial("localhost:50051", grpc.WithInsecure())
    defer conn.Close()
    client := goods.NewGoodsServiceClient(conn)
    res, _ := client.GetGoods(context.Background(), 
    &goods.GetGoodsRequest{Id: 1})
    if res.GetId() != 1 {
        t.Error("grpc client error")
    }
}

3.5 测试一下

图片

4、gRPC为什么适合微服务?

    gRPC有明显的优势:快、稳定、省数据、省CPU、规范。

5、gRPC和REST对比

    结论:外部API面向前端-> REST, 内部服务之间通信->gRPC

*源码地址*

1、公众号“Codee君”回复“每日一Go”获取源码

2、源码获取链接: https://pan.baidu.com/s/1B6pgLWfSgMngVeFfSTcPdg?pwd=jc1s 提取码: jc1s


如果您喜欢这篇文章,请点赞、推荐+分享给更多朋友,万分感谢!