包含关键字 typecho 的文章

大家好,分享一个刚上线的小项目:云烟花https://yunyanhua.top )。

起因

很多城市禁放/不方便放烟花,但过年总还是想"参与点热闹"。想做一个"不用真放,但能感受到全国/同城正在热闹"的线上体验,所以有了这个站。

核心玩法

  1. 地图选城:3D 中国地图,点击省份可下钻到具体城市,或直接搜索定位。
  2. 点燃夜空:进入城市页面后点击屏幕即可发射烟花;可选昵称(会短暂飘在夜空/弹幕里)。
  3. 热度可视化:地图上用颜色(蓝→金→红)展示"最近 10 分钟各省/城市的活跃度",让你能直观看到"此刻哪里最热闹"。
  4. 背景风格:提供了 8 种风格(赛博朋克、水墨山水、极光雪原等),可以按喜好切换。

网址: https://yunyanhua.top (无需注册/登录,即开即用)

效果预览

地图热度可视化:

地图效果

烟花夜空:

烟花效果

想听听大家的建议

如果你试玩后有任何建议或发现问题,欢迎在评论区反馈,我会尽快改进。

上期我们介绍了如何部署Clawdbot AI的详细操作步骤【本地搭建 Clawdbot + ZeroNews 访问

本篇文章主要为已部署Clawbot AI的用户,提供了一种便捷、适配国内网络环境的远程管理解决方案——借助 ZeroNews 替代官网推荐的代理工具,实现OpenClaw GateWay Dashboard的远程访问;

同时针对性解决远程访问时可能出现的Gateway Token错误、设备授权错误两大常见问题,明确了远程Dashboard的全部可操作功能。

OpenClaw 是一个专为 AI 应用与智能体部署设计的高性能网关平台,它提供了统一的仪表盘(Gateway Dashboard)用于集中管理模型调用、渠道集成、技能插件、定时任务及节点监控。

基于 OpenClaw 构建的 Clawbot AI 是一款功能强大的 AI 产品,能够无缝接入多种对话模型与即时通信平台(如 WhatsApp、Telegram、Discord 等),并通过可扩展的技能系统实现自动化任务与智能交互。

完成 Clawbot AI 安装后(安装步骤可参考我们上期的文章),您将获得 OpenClaw Gateway Dashboard 的本地访问地址及唯一的 Gateway Token(后续配置需用到)。

图片

通过访问地址可以通过本地访问打开 OpenClaw Gateway Dashboard
默认访问地址:127.0.0.1:18789
图片

该地址仅支持本地网络访问。若需在外部网络环境下管理网关,官方文档提示我们需借助 Tailscale 或 VPN 等代理工具,但这些方式在国内网络环境中往往体验不佳。
图片

ZeroNews 远程映射配置

而通过我们的实测,ZeroNews可以完美的替代官网推荐的代理工具。
1、简单三步就能够实现 OpenClaw Gateway Dashboard 的远程访问。下载安装 ZeroNews Agent创建域名信息配置映射服务
2、提供IP黑白名单和鉴权认证。可以完美的解决暴露出来的 GateWay Dashboard 不受非授权IP访问和授权账号访问,提升服务的安全性。

远程Gateway Dashboard 错误问题处理

但是我们通过远程访问的时候,如果出现如下问题,可以通过下面的方法解决。

01 GateWay Token 错误

1、报错信息:
disconnected (1008): unauthorized: gateway token missing (open a tokenized dashboard URL or paste token in Control Ul settings)
图片

2、报错原因:第一次通过远程连接访问 OpenClaw Gateway Dashboard时,需要配置 GateWay Token,否则会出现错误。

3、解决方案:打开 Control / Overview 页面然后将上面安装时获取到的GateWay Token粘贴进去点击Connect连接
图片

02 设备授权错误

1、报错信息:disconnected (1008): pairing required
图片
2、错误原因:如果您使用一台新的设备去访问 OpenClaw Gateway Dashboard的 URL 时,除了需要配置上面的GateWay Token 之外,还需要对新的设备进行授权,否则会提示错误。

3、解决方法:

a) 首先,我们要打开到配置窗口,并执行设备列表查询命令
图片

图片

b) 这时候,可以看到上面会出现刚才请求连接访问的设备信息。我们需要记住 Request IDc) 接着,我们执行设备授权命令和重启网关命令
图片

图片

d) 执行完成之后,我们回到 GateWay 页面,点击刷新,可以看到 STATUS 为 Connected 状态,表明我们已经可以正常访问了。
图片

注意:

  • 一旦批准,设备会被记住,除非你使用命令 openclaw devices revoke --device <id> --role <role> 撤销它,否则不需要重新批准。
  • 每个浏览器配置文件生成唯一的设备 ID,因此切换浏览器或清除浏览器数据将需要重新配对。
  • 若等待授权的时间过长,Request ID会过期,需要重新点击 Connect 申请授权,并通过设备命令查询获取到新的Request ID进行授权。

e) 通过上述操作后,我们就可以在Chat页面与AI进行沟通了。
图片

远程 Gateway Dashboard 可以做什么

通过远程 Dashboard,您可以全面管理 OpenClaw 网关,包括:

  • 对话管理:通过 WebSocket 与模型聊天,支持流式工具调用与实时输出。
  • 渠道集成:管理 Telegram、WhatsApp、Discord、Slack 等渠道的状态、扫码登录与配置。
  • 实例监控:查看在线实例列表并即时刷新状态。
  • 会话控制:列出会话、调整会话的思考模式与详细设置。
  • 定时任务:管理 Cron 任务的添加、启用、禁用与执行历史。
  • 技能管理:查看技能状态、启用/禁用技能、安装新技能及更新密钥。
  • 节点管理:查看节点列表及其能力。
  • 执行审批:编辑网关与节点的允许列表,设置执行询问策略。
  • 配置编辑:查看或编辑 openclaw.json配置文件,支持表单与 JSON 两种编辑模式。
  • 调试与日志:查看系统状态、健康检查、模型快照、事件日志,支持实时日志跟踪与导出。
  • 更新操作:执行包更新或 Git 更新,并查看重启报告。

安全注意事项

1、IP 访问控制:
可以通过在映射页面,对此映射配置IP访问控制功能,实现仅允许白名单IP访问,非白名单IP无法访问。
图片

拒绝访问效果图
图片

2、鉴权认证管理:
可以通过在映射页面,对此映射配置鉴权认证,实现需要账号密码才能访问,进一步提升安全能力。
图片

开启鉴权效果图
图片

接下来,我们将继续深入挖掘更多实用、有趣的进阶玩法,敬请期待。

大家好啊,我是甲木。

这段时间不是一直在折腾 OpenClaw 么,

之前发的几篇教程类文章,对于很多小伙伴来说,还是门槛比较高,

正好前两天刚从百度智能云的 Agent 大会回来,还挺有意思的,趁热给大家聊聊(关于大会内容,放后边了~)。

现在,百度智能云也接入了 OpenClaw的极简版本,

并且发了一堆非常有意思的skills和百度官方工具,跟现有的OpenClaw打通也有很多的玩法,

我当时第一反应就是:

这不就是我一直在找的东西吗?

OpenClaw × 百度智能云 × 千帆 Skill ⽣态,一套组合拳下来,贼牛批..

好,先别急,我慢慢说。

今天这篇主要聊几件事:

  • 百度千帆上线了几个非常实用的Skills,直接接入OpenClaw
  • 百度智能云上搭 OpenClaw,到底有多简单
  • 三个我实际跑通的 Skills 玩法,真的能干活那种

那么,我们开始!

先说大会上最让我上头的东西

大会上发了不少东西,但最让我兴奋的,是「百度千帆工具及MCP广场」把百度的生态,直接接入OpenClaw了。

大家玩过 OpenClaw 都知道,这玩意儿的拓展性也在于 Skills,你给它装什么技能,它就能干什么活。

而现在百度智能云把「百度 AI 搜索、百度地图、百度网盘、OCR、语音识别」...这些百度自家的能力,全部以 MCP Server 和Skills的形式开放出来了。

以前你想给 OpenClaw 加个"搜索"能力,得自己找 API、写配置、调半天参数。

现在?去广场里挑一个,接进去,完事儿。

而且开发者还能自己开发 MCP Server 发布上去,免费托管,还能被百度搜索收录,等于白送你一波流量。

说白了,这就是给 Agent 开发者建了一个应用商店

而我这次重点关注到的,是已经上架的几个跟 OpenClaw 直接能打配合的 Skill

  • 百度搜索:实时信息检索,这是 Agent 的"眼睛"
  • 百度百科:知识查询和概念核实,相当于给 Agent 装了本百科全书
  • 学术检索:论文搜索和学术信息获取,做研究的朋友懂的
  • 智能 PPT 生成:搜完信息直接出汇报材料,一条龙
  • AI 绘本生成:把内容变成图文并茂的绘本,做内容创作的太需要了

这几个 Skill 单独用都挺好使,但更有意思的是,它们能组合起来用

后面我会专门聊几个我自己跑通的组合玩法,先按下不表。

百度智能云上搭 OpenClaw,到底有多简单

已经部署好Openclaw的朋友可以直接跳过本章,看下一节内容,

还没部署好,或者想要再白嫖优惠OpenClaw的可以看看本章。

前两篇文章之后,大家反馈最多的问题

关注我的朋友应该记得,前两天我连着肝了两篇 OpenClaw 的教程:

  • 第一篇是阿里云部署的,从买服务器到打通钉钉,全流程手把手
  • 第二篇更硬核,从 0 到 1 装官方原版,接了 Kimi K2.5,还搞了 Discord 远程操控

文章发完之后,后台和群里炸了..

大家问得最多的,基本就两类:

一类是:"甲木,我照着你教程做,环境配置那步就卡住了,报了一堆错,咋整?"

虽然我已经写得尽量保姆级了,但确实,

对于没怎么碰过命令行的朋友来说,配环境、装依赖、排报错这些东西..还是劝退了不少人。

另一类是:"教程里那些软件都是国外的,有没有更适合国内的方案?"

嗯,这个确实是痛点。

OpenClaw 原生适配的工具和渠道基本都是海外生态,国内想用好它,适配成本不低。

正好,

百度智能云这次直接上线了 OpenClaw 极简部署

https://cloud.baidu.com/product/BCC/moltbot.html

它同样直接提供了预装好 OpenClaw 环境的轻量应用服务器镜像。

你在控制台选这个镜像,创建实例,几分钟就能跑起来,啥都不用手动装。

更狠的是,它还搞了个限时免费体验首月免费,每天限量 500 台,先到先得。

之前阿里云那个 68 块一年大家就已经觉得香了,这次百度直接搞免费...

好家伙,卷起来了属于是。

部署完之后,你还能直接通过千帆平台接入文心、DeepSeek、Qwen 这些模型,不用自己到处去注册账号拿 API Key。

这对于小白来说,友好度直接拉满了。

搭建流程,三步搞定

第一步、买台服务器

打开百度智能云官网(https://cloud.baidu.com/product/BCC/moltbot.html),选轻量应用服务器。

几个关键的配置别选错:

  • 镜像:一定选 OpenClaw(Clawdbot) 应用镜像
  • 套餐:CPU 2核、内存 4GB 起步
  • 地域:按需选

如果有优惠的话,你会看到这个界面,

如果没优惠的话,你就只能按月付费了..

但我给你一个思路,可以新注册一个账号...

然后正常购买,

踩坑提醒:OpenClaw 是 Node.js 应用,比较吃内存。2G 内存裸跑偶尔会 OOM(内存溢出),建议搞一下 Swap 交换空间,不然跑着跑着进程就没了,问我怎么知道的..

第二步、配模型

服务器跑起来之后,进控制台:

等待实例创建完成后进入实例详情页,点击实例管理Tab

  1. 放通端口——防火墙那步,点一下「一键开通」就行

这里需要注意,按量计费

这里是直接按使用量计费的,需要注意。如果不想走千帆平台的,我们可以直接用它的服务器,然后自己搭建镜像,就跟那篇文章教大家的一样。
  1. 防火墙放通18789端口

访问openclaw官网网站需要通过18789端口访问,点击“一键放行”放行防火墙18789端口。

  1. 接大模型——通过千帆平台配,文心、Qwen、DeepSeek 都能选

到这里,三步其实就完事了,但千帆的好处是,选完模型之后还能顺手去 MCP 广场挑几个工具,直接给你的 OpenClaw 装上技能包

这步体验下来确实比之前丝滑不少。

第三步、选你的操作渠道(可选)

可以直接在消息平台配置选择接入飞书、企业微信、钉钉、QQ

每一个接入过程都有详细地文档,可以按需使用,然后点击应用

比如,QQ接入,https://cloud.baidu.com/doc/LS/s/xml9eru3h

这里不再赘述,我直接接入了QQ。

第四步、选择skills(可选)

接入了百度搜索、百度百科skills,这里按需选择,直接点击应用


到这里,基本就配置完成了,你可以选择页面访问,

也可以直接QQ对话。

三个我实际跑通的 Skills 玩法,真的能干活那种

平台工具说了这么多,最终还是得落地。

百度搜索、百度百科、学术检索、智能PPT生成和AI绘本生成,这几个skills的可玩性挺多的。

关于如何在OpenClaw中添加百度的skills,我们可以直接看https://cloud.baidu.com/doc/qianfan/s/Mmlda41a2中的内容。

直接一句话添加,剩下的交给OpenClaw就可以了:

下面分享三个我自己跑通的场景。

不局限于OpenClaw,ClaudeCode、OpenClaude,都可以直接接入这几个skills,直接施展组合技。

玩法一:热点追踪 → 一键出图文材料

用到的 Skills:百度搜索 + 智能 PPT 生成 / AI 绘本生成

这个场景特别适合做内容、做运营的朋友。

我试了一下,直接给 OpenClaw 扔了一句话:

"帮我搜一下今天 AI 领域最重要的三条新闻,然后整理成一份简报 PPT。"

它的执行链路大概是这样的:

  1. 先调用百度搜索 Skill,从全网检索实时信息
  2. 自动筛选、去重、提取核心内容
  3. 把整理好的内容丢给智能 PPT 生成 Skill
  4. 直接输出一份带标题、分页、核心要点的 PPT

整个过程我啥也没干,就等着收材料。

如果你不想要 PPT 格式,换成 AI 绘本生成也行——它会把新闻内容变成图文并茂的绘本形式,特别适合发朋友圈或者做社交媒体内容。

以前做一份热点简报,你得先翻一圈新闻网站,然后自己写摘要,再打开 PPT 模板排版..

【插入PPT GIF图片】

现在一句话搞定。

这个场景还能拓展:

  • 每天早上定时跑一次,自动生成 AI 行业早报
  • 输入某个关键词,自动追踪相关热点并生成周报
  • 做竞品监控,一有动态就出分析材料

核心逻辑就是:搜索 Skill 负责"找信息",PPT/绘本 Skill 负责"出成果",中间 Agent 负责"串起来"。

玩法二:学术研究 Agent:会查资料、会核实、还会追问

用到的 Skills:学术检索 + 百度百科 + 深度研究 Agent

这个场景偏硬核一些,适合做研究、做咨询、写报告的朋友。

普通的 AI 搜索是这样的:你问一个问题,它给你一个答案,完事了。

但接上学术检索百度百科这两个 Skill 之后,OpenClaw 干的事就不一样了。

我试着让它研究一个课题:AI Agent 在企业服务领域的落地现状与挑战

它的工作方式是这样的:

  1. 拆解问题——把一个大课题拆成几个子问题

  1. 调用学术检索 Skill,去找相关的论文和研究报告

  1. 遇到不确定的概念,自动调用百度百科 Skill去核实

  1. 整理完一轮之后,它自己又追加了几个问题继续深挖

它更像是一个真的会做研究的助手,不只是搜,还会交叉验证、会追问、会自己判断哪些信息还不够。

百度千帆还有一个深度研究 Agentdeepresearch-conversation),专门做这种多轮拆解的研究场景。接上学术检索和百度百科之后,体验就更接近"企业研究 / 咨询分析"的工作方式了。

如果你平时要写行业分析报告、做市场调研,或者帮老板准备决策材料,

比如刚才的报告,我让它给我补充了一些内容。

Deep Research Agent 基于 284 次深度搜索后...

这个组合真的建议试试。

玩法三:私董会 × 百度生态:让幕僚带着真数据给你出主意

用到的 Skills:私董会 Skill + 百度搜索 + 百度百科

这个非常有意思,skill搭配组合技。

关注我的老朋友应该知道,之前我做过一个AI 私董会的 Skill,

就是模拟巴菲特、比尔·盖茨、马斯克、乔布斯四位大佬当你的幕僚,通过多轮提问和反馈,帮你深入分析问题、给出可执行的建议。

这个 Skill 之前在社区里反响很不错,很多朋友拿它来做创业决策、职业规划、项目复盘。

但它一直有两个让我觉得不够完美的地方:

第一,幕僚的"人设"全靠模型自己编。

比如巴菲特这个角色,模型知道他是投资大师,但它掌握的信息可能是训练数据里的老内容。关于他最新的持仓变动、最近的股东信里说了什么、今年的投资逻辑有什么变化,模型是不知道的。

第二,幕僚们给建议的时候,全凭"脑补"。

聊投资策略的时候,巴菲特会引用一些经典理论和案例,但这些都是模型"记忆"里的东西。你问一个特别新、特别细的市场问题,他可能就只能泛泛而谈了。

现在有了百度搜索和百度百科的 Skill 之后,这两个问题同时被解决了

幕僚们不仅能"上网查资料",连自己的背景信息都能实时更新。

什么意思呢?直接看流程图:

这些真实信息直接注入到幕僚的人设里,他们的提问和建议就不再是"通用模板",而是带着当下真实语境的。

然后在实际咨询环节,幕僚还能随时调用搜索去查数据来支撑自己的观点。

我试了一下,把私董会 Skill 和百度搜索、百度百科接到同一个 OpenClaw 里。然后抛了一个问题:“我想做一个面向中小企业的 AI 培训课程,但不确定市场定位和定价策略。”

效果还不错:

  • 巴菲特在分析定价的时候,直接调了百度搜索去查了当前市场上同类课程的价格区间,然后基于真实数据给了定价建议

  • 比尔·盖茨聊行业趋势的时候,从百度百科拉了最新的企业培训市场规模数据

  • 马斯克聊差异化竞争的时候,搜了几个海内外的竞品案例来佐证他的观点

一句话总结:以前的私董会是"凭经验聊",现在是"带着数据聊"。

四位幕僚的建议变得更具体、更有针对性。


聊聊生态

前两天刚从百度智能云的 Agent 大会回来,

事情是这样的,百度的朋友邀请去参加这次大会,

我去了之后发现,还有@袋鼠帝@梦飞@宇明,大型好友面基现场,

还给整了个百度千帆开发者大使的身份..

当然,身份不重要,重要的是我在现场发现了一些好玩的东西(如上)。

前面三个Case其实也展示了一个更大的可能性——

不同 Skills 之间的融合,才是 OpenClaw 真正的威力所在。

单个 Skill 是工具,多个 Skill 组合起来就是一套完整的工作流。

而百度千帆 MCP 广场提供了大量现成的"积木块",你只需要想清楚怎么搭就行。

毕竟百度做搜索做了二十多年了,AI 搜索这块的积累确实是最厚的。

而针对 Agent 的使用方式做了适配。比如学术检索 Skill 返回的结构就很适合 Agent 做后续处理。

从选镜像到配模型到进 Web 端用,整个过程对小白太友好了。特别是部署阶段直接选 Skill 这个设计,把"跑起来"和"能干活"合成了一步,省了很多折腾。

当然,每个云平台都有自己的优势,大家根据自己的需求选就行。

不管云平台怎么选,我觉得这几个skills,都可以给你的🦞助手配置上,非常丝滑。

结语

关于OpenClaw,其实已经写了好几篇的内容了,

今天给大家分享的百度智能云的生态,其实也给OpenClaw提供了工具,

折腾这么多,其实就是为了让更多人能用上 OpenClaw,让它能真的解决你生活中的一些场景。

千帆这些 Skill 生态的组合玩法,才是我觉得真正有想象空间的地方。

后续等我把更多 Skill 组合跑通了,再给大家出详细的教程和玩法拆解。

马上春节了,

这周的精彩其实才刚刚开始,

国内 AI 在这周会发力的~ 期待一波!

以上。


我是甲木,热衷于分享一些AI干货内容,同时也会分享AI在各行业的落地应用,我们下期再见👋🏻

本文由mdnice多平台发布

在互联网安全越来越受到关注的今天,WebRTC 泄露已经成为很多人忽略但又非常危险的隐私问题。

即便你使用了 IP工具 或代理服务器,如果浏览器的 WebRTC 功能不加以控制,你的真实 IP 仍可能被网站探测到。这就意味着所谓的“匿名浏览”可能形同虚设。本文将手把手教你如何防止 WebRTC 泄露。

什么是 WebRTC 泄露?

首先我们得了解,WebRTC(Web Real-Time Communication) 是一种允许浏览器直接进行音视频通话和数据传输的技术。它本身非常方便,但也有隐私隐患:

当你打开支持 WebRTC 的浏览器访问网页时,某些 JavaScript 脚本可以绕过 IP工具 或代理,直接获取你的本地和公网 IP。

这就叫做 WebRTC 泄露,也有人称之为 “IP 泄露”。

泄露的 IP 可以让广告商、网站甚至黑客追踪你的真实位置。

所以,想要安全上网,控制 WebRTC 泄露非常重要。

如何检测自己的 IP 是否被泄露?

在采取防护措施之前,最好先确认自己的 IP 是否真的存在泄露风险。常用方法有:

IP泄露检测网站
打开一些知名的 IP 泄露检测网站,可以快速判断你是否通过 IP工具 暴露了真实 IP。例如,你可以访问一些综合测试页面,看看显示的 IP 是否是你 IP工具 的 IP,还是你真实的公网 IP。

WebRTC 泄露检测工具
有专门的 WebRTC 泄露检测工具网站,可以模拟 WebRTC 请求,判断浏览器是否会暴露本地 IP。

浏览器指纹检测
值得一提的是,浏览器指纹检测 也可能揭示你的一些信息,包括浏览器版本、操作系统、屏幕分辨率等。如果配合 IP 泄露,你的匿名性就更低了。推荐使用 ToDetect指纹查询工具 来检测浏览器指纹安全情况。

通过以上方法,你可以明确自己的隐私风险点,然后针对性防护。

禁止 WebRTC 泄露的实用方法

接下来,重点来了——如何在日常使用中阻止 WebRTC 泄露。这里分浏览器和插件两类方法:

  1. 浏览器内置设置

不同浏览器对 WebRTC 的控制方式不同:

Firefox
打开 about:config,搜索 media.peerconnection.enabled,将其值改为 false。这样就可以彻底禁止 WebRTC 连接。

Chrome/Edge
默认 Chrome 没有直接开关,需要借助扩展程序来控制 WebRTC。可以通过 chrome://flags/ 查看实验性功能,但最稳妥的方法还是用插件。

Safari
在 Safari 的设置里,找到“WebRTC 功能”,勾选“阻止所有 WebRTC 公网 IP 地址”,即可防止 IP 泄露。

  1. 使用浏览器插件

对于 Chrome、Edge、Firefox 等主流浏览器,使用插件是最方便的方式:

WebRTC Leak Prevent
可以直接阻止 WebRTC 访问本地和公网 IP,同时提供 IP工具 兼容模式。

uBlock Origin
虽然主要用于广告拦截,但高级设置里可以控制 WebRTC 请求。

ScriptSafe / NoScript
可以通过屏蔽不信任的 JavaScript,间接防止 WebRTC 泄露。

这些插件在安装后几乎可以做到“开箱即用”,降低被追踪的风险。

其他提升隐私安全的技巧

除了禁止 WebRTC 泄露,还有一些小技巧可以提升浏览器的隐私保护能力:

定期检测 IP 泄露
每隔一段时间使用 IP泄露检测 或 WebRTC 泄露检测 工具,确保 IP工具 没有被绕过。

使用隐身模式或专门的隐私浏览器
像 Tor Browser 或 Brave,都有更强的防止 浏览器指纹检测 和 IP 泄露的功能。

关注浏览器更新和安全补丁
有些漏洞会被利用来绕过 WebRTC 限制,保持浏览器最新是最基本的防护。

结合 ToDetect 指纹查询工具
通过 ToDetect指纹查询工具,你可以看到自己浏览器的指纹信息是否容易被追踪,进一步优化隐私设置。

总结

WebRTC 泄露 可能看起来小问题,但一旦被追踪,你的匿名性和隐私都会受到影响。实用的方法就是:

定期做 IP泄露检测 和 WebRTC 泄露检测。

根据浏览器类型,关闭或限制 WebRTC 功能。

使用可靠的隐私插件,比如 WebRTC Leak Prevent。

检测浏览器指纹,利用 ToDetect指纹查询工具 做进一步优化。

只要按照这些步骤操作,你就能大幅降低 IP泄露 风险,保护自己在网络世界的隐私安全。

前几日在在电梯里听见的谈论:

“你这几年换了三份工作啊?”
“嗯。”
“厉害……也有点飘。”
电梯门一合,扣好“草率”的标签,一整天都刮着风。

与其争辩,不如换个叙述方式。今天不讲数据,讲一个三幕小剧场,把“稳定”与“跳槽”请上台,各自说话。

第一幕|传统观念的回音墙

父母视角:稳定=安全。“铁饭碗至少不饿肚子。”
邻里视角:稳定=体面。“单位名片比名片上人名重要。”
部分HR视角:稳定=可靠。“履历像一条直线,省心。”

这些声音没有错,只是来自过去的经济逻辑:岗位稀缺、失败成本高、信息不透明。
但现在的职场像一条不断分叉的河。你原地扎营可以,但也许更好的水草在拐弯处。
“稳定”如果只是不变,那更像卡在河床上的一块石头;真正的稳定,是在变化中保持可控。

金句:稳定是结果,不是方式;不变不一定叫稳定,掌控才叫稳定。

第二幕|跳槽与成长:换工作,别只换门禁卡

跳槽,最怕“换来换去,只换了工牌颜色”。
判断有没有成长,看四件事:

问题强度:新岗位的难题,是否比原来的更大、更复杂、更贴近业务核心?
可迁移资产:你带走了什么“随身武器”(写作、分析、项目推进、谈判、行业认知)?
视角宽度:是否从“执行者”升到“设计者/决策参与者”的视角?
作品与证据:能不能用一页纸/一个仓库/一个案例说服陌生人?

如果这四件事持续上台阶,频率不是原罪;如果只是为了逃避情绪、老板、加班——那叫逃跑,不是跳槽。

金句:好的跳槽,是把履历写进能力;坏的跳槽,是把心情写进简历。

跳槽机-会

技术大厂,前端-后端-测试,全国均有机-会,感兴趣可以试试。待遇和稳定性都还不错~

第三幕|什么样的跳槽才算“有价值”?

给你一块价值跳槽九宫格(自测用,过半即值得):

方向:行业在向上?岗位贴近价值链核心?
密度:问题更难?反馈更快?产出更可见?
导师:能跟到真正在干活、愿意带人的上级?
舞台:边界更大(预算/权限/跨部门协作)?
节奏:迭代更短(周/月为单位复盘)?
证据:离职时能留下公开作品或可量化战绩?
现金:不是只涨工资,而是单位时间成长更高?
生活:通勤、作息、健康是否更可持续?
心流:进入“做着做着忘了时间”的那种投入?

能勾中6格以上,才叫“向上的移动”。
别只看薪资条,那是果;先看问题强度与可迁移资产,那是根。

四不跳(写得像贴在显示器上的小贴纸):

不为发泄而跳(吵完架写辞职信,第二天先删草稿)。
不为名头而跳(Title 高一号,问题却更边角)。
不为“跟风”而跳(朋友涨薪=他的剧本,你得看自己的镜头)。
不为“逃离”而跳(去哪儿都一样累=问题在方法,不在公司)。


行动卡|下一次跳之前,先做这三件小事


写一封给未来雇主的信(300字)
只回答三问:我解决过什么问题→用过什么方法→带来了什么改变。写不出来,就别急着跳。


做一张“技能-行业”二维表
横轴列出你拥有或在学的3–5项通用技能,纵轴放3个感兴趣行业,把可迁移的交叉点标星。星星越多,越值得跳。


安排一次“影子体验”
找目标岗位的人聊30分钟,围绕一天在做什么、最难的问题、如何被衡量三件事。聊不到,说明信息还不够,先别跳。


给“稳定派”与“跳槽派”的一封并信

稳定派:请把“稳定”从“年头写到年尾”改成“能力结构可复用、现金流有弹性、健康不透支”。那是强者的稳定。
跳槽派:请把“跳”从“情绪出口”改成“能力跃迁”。那是成熟的跳槽。

人和岗位不是孰优孰劣,是匹不匹配。
频繁跳槽的人,并不比稳定工作的人差;真正的差别在于:
有人在原地生长,有人在移动中生长;有人只是换地方,有人换了层级。

当你能把每一次选择,都解释为更清晰的方向、更锋利的能力、更合理的生活——
你的履历,就不再是“跳来跳去”,而是一步一个台阶。

——转载自:狗头大军之江苏分军

作者|快手技术团队

审校 | 陈姚戈

编者按

以 ChatGPT 问世的 2022 年为起点,大模型技术进入公众视野已经超过三年。人们普遍见证了 AI 作为新型生产工具对生产力的重塑,但对科技企业而言,这远不止是多了新技术或新产品那么简单。

作为前沿技术的掌握者与实践者,科技公司必须率先完成自身的转型:以极快的速度,不惜试错和阵痛,找到大规模、稳定、高效使用 AI 的组织路径。过去十年,“数智化”浪潮主要聚焦于传统企业如何借助外部工具实现数字化;而如今,AI 正在倒逼科技公司自身成为变革对象。它们必须在人才结构、工具体系、协作流程乃至组织文化上同步革新,否则将难以在 AI 时代维持竞争力。

正是在此背景下,快手首次系统性披露其自 2023 年以来的 AI 研发范式升级历程。

今天,快手发布了名为《快手万人组织 AI 研发范式 跃迁之路:从平台化、数字化、精益化到智能化》的 1.6 万字长文。文章由快手研发效能委员会审稿、经内部深度复盘整理,罕见地呈现了一家超大型科技企业在 AI 时代推进组织级提效的完整图景。

你会在这篇文章中看到快手研发范式的三阶段演进路径,以及快手技术团队对 AI 赋能组织提效的思考:

  • 三阶段演进路径:

  • 平台化、数字化、精益化 (2023-2024 年)

  • 建设一站式研发平台,并标准化需求和工程流程,工具渗透率>95%,流程自动化>94%

  • 通过建立效能模型,识别交付瓶颈,提升需求交付效率,人均需求吞吐量提升 41.57%

  • 智能化 1.0 (2024 年 6 月 -2025 年 6 月) :聚焦用 AI 提升个人开发效率

  • 建设并推广 AI 编码 / 测试 /CR 等能力,AI 代码生成率超过 30%- 但发现矛盾——个人主观编码效率提升显著,但组织需求交付效率却基本不变

  • 智能化 2.0 (2025 年 7 月以后):聚焦用 AI 提升组织整体效能

  • 找到了 AI 研发范式升级路线:L1 AI 辅助(Copilot)→ L2 AI 协同(Agent)→ L3 AI 自主(Agentic)

  • 探索出了支撑路线达成的系统性实践:AI x 效能实践、AI x 研发平台、AI x 效能度量

  • 关键洞察与经验:

  • AI 研发提效陷阱: 用 AI 开发工具 ≠ 个人提效 ≠ 组织提效

  • 本质问题:如何将个人提效传导到组织提效

在全球范围内,如此系统、坦诚且具备工程细节的 AI 提效实践总结仍非常稀缺。对于所有正在探索 AI 落地路径的企业而言,这份来自一线的复盘值得细读。

这也预示着一个新的节点正在到来。当像快手这样的头部公司开始对外输出其 AI 落地的方法论与效能成果,整个行业将面临一种隐形的压力——组织能否高效驾驭 AI,将成为其在 AI 时代竞争力的重要衡量方式。

可以预见,2026 年将成为一批先行者集中展示阶段性成果的窗口期。这些成果首先会以研发效率、工程体系和组织方法论的形式呈现;再过几年,更会传导到公司的财务表现与人才吸引力上。

到那时,所有公司都将不得不回答同一个问题: AI 时代,我们如何重构自己?

快手报告标题:

《 快手万人组织 AI 研发范式 跃迁之路:从平台化、数字化、精益化到智能化 》

AI 研发提效陷阱:用 AI 开发工具 ≠ 个人提效 ≠ 组织提效

早在 2024 年,快手就建设了 AI 编程工具 Kwaipilot,并发布给公司内 10000+ 研发人员使用。经过持续的深度优化和推广,快手整体的 AI 代码生成率,在严格度量口径下(AI 生成并入库的代码行 / 新增代码行)从 1% 达到了 30%+,甚至部分业务线达到了 40%+。同时,在非编码环节,也衍生出了很多 AI 提效工具,比如智能 CR(CodeReview)、智能测试用例生成、智能单元测试等等,但经过大量的调研和数据分析,我们发现了这个不等式:

“用 AI 开发工具 ≠ 个人提效 ≠ 组织提效”

如果以企业的研发效能提升为目标,我们发现:

  • 对研发工程师而言 :深度使用 AI 开发工具,代码生成率很高,个人主观体感上编码效率提升了 20-40%,但并不代表真正的“个人提效”,因为在现实中,大部分工程师并没有接纳更多的需求,个人需求的交付数没有显著提升。

  • 对大型组织而言:我们发现部分 AI 用的好的工程师,确实可以更快更多的完成开发任务,但组织整体的需求吞吐量没有明显提升,需求交付周期也没有明显缩短。

从《2025 年 DORA 报告:人工智能辅助软件开发现状调查报告》中能看到,这也是业界普遍存在的问题。如报告中所述(如下图所示),在对 AI 提效的结果的预估上,各企业普遍对个人效能的提升有信心,而对团队效能的提升预估非常小。

在快手,我们发现仅推广研发各阶段的 AI 提效工具,已经偏离了企业研发效能提升的核心目标,最终必然会导致 2 个问题:

  • 投入很大,但企业整体的研发效率提升不明显 :虽然通过调研很容易能收到大量的个人效率提升反馈,但个人提效无法传导到组织提效。

  • 效能平台开始割裂 :传统 DevOps 平台仍承担研发主流程,每天被高频的使用,却无法演进到下一代 AI 研发平台(顶多扩展一些单点的 AI 功能)。新生的 AI 编程工具,只取代了传统 IDE,又无法与老平台协同演进。

为了解决上述 2 个问题,我们从 2025 年开始进行了更激进的探索和变革,我们称之为“ AI 研发范式升级”,最终,通过一系列的实践,找到了一条能借助 AI 能力平滑通往研发智能化的路径。

正逢 2025 年年末,我们把镜头拉远,将时间回溯到 3 年前,对快手研发效能的演进做一个系统性总结,有踩过的坑,也有做出的突破,希望为更多企业提供经验和参考。

总览:快手 研发效能 演进路线

快手有 10000+ 研发、8+ 业务线,研发效能的演进可以分为 3 个大阶段,如上图所示:

  • 阶段 1:平台化、数字化、精益化(2023-2024 年) :通过建设三端一站式研发平台、需求流 & 工程流标准化,解决了研发交付流程散乱,既无标准也无数据的问题。再通过建立效能模型,识别交付瓶颈,提升需求交付效率。

  • 阶段 2:智能化 1.0(2024 年 6 月 -2025 年 6 月):在研发全流程中开始建设 AI 能力,包括 AI 编码、AI 单元测试、AI CR、AI 手工用例生成、AI OnCall 等等,并进行全员推广。经过 1 年多的实践,基本上完成了全员普及,在主观调研中,开发人员主观体感上效率提升 20-40%,在客观数据上,AI 代码生成率也在持续增长。但同时也发现了矛盾点:需求交付效率基本不变,即个人效率提升未能有效传导到组织效率提升。

  • 阶段 3:智能化 2.0(2025 年 7 月 +):从“推广 AI 工具,让开发者使用”回归到了更本质的元问题:如何用 AI 提升需求端到端交付效率?经过半年多的探索,终于找到了新的路径,并得到了充分的数据验证。我们称这套解决方案为“AI 研发范式”,主要解决了 3 个问题:

  • AI x 效能实践:如何用 AI 提升工程师的生产力,并将个人提效传导到组织提效。

  • AI x 研发平台 :支撑需求交付全流程(从分析到编码再到发布)的研发工具链,如何整体演进到智能化?即下一代的智能研发平台,应该是什么样的?而不仅仅是只推广 AI 编程工具或在原有工具链上增加一些散点的 AI 提效功能。

  • AI x 效能度量 :如何在效能度量指标的基础上,构建 AI 提效的指标体系,能清晰的量化过程和结果,为组织级的 AI 研发范式升级提供有效指引。

阶段 1:平台化、数字化、精益化(2023-2024 年)

这个阶段的解决方案,业界相关的分享已经非常多了,但从实际情况看,在千人规模的技术团队中,能做好、做深、做透的实践非常稀有。

因此,我们直接分享 1 个具体的案例,以便能更好的看清快手的研发效能从基础建设到效能提升的全过程,这也是我们之所以能更快跃迁到 AI 研发范式的重要基石。案例来源是快手最核心的技术团队之一—— 主站技术部 ,是快手 APP 的研发团队,开发人员规模千人以上。

背景:了解快手的研发效能基建

首先,主站技术部的实践依托一套公司级的研发效能基建,由横向团队「研发效能中心」提供,如下图所示,这是在 2023 年快手当时的研效基建,主要分为:

  • 效能平台:项目管理平台(Team)、三端一站式研发平台(KDev(服务端)、KFC(前端)、Keep(客户端))、琅琊阁(效能度量)、质量平台(KTest 等)

  • 效能实施:效能 BP 专家(Business Partner),负责深入各业务线,提供专业支持。

了解快手的研效基建后,下面开始重点介绍主站技术部的实践过程。

Step1:依托工具推广,实现流程标准化

解决的问题

需求流和工程流均不标准,开发人员的工作分散在各处,日常开发体验差、学习成本高,又无法实施有效的质量防护措施,还不能沉淀准确的研发过程数据持续度量与改进。

达成的效果

通过推广三端一站式研发平台,定义需求、研发的标准流程,将研发全流程标准化。核心度量指标与结果如下:

实践过程

主要难点

  • 用一套产品设计尽量满足多样化的研发场景 :工具一边建设一边落地,且需兼容之前散乱各种不同的研发模式和习惯。

  • 服务端(KDev 平台) :需要支持一些特殊的研发模式(比如 Master 模式、窗口模式)。

  • 客户端(Keep 平台):移动端研发场景多样化,包括 APP、动态化、 SDK。

  • 前端(KFC 平台):前端应用类型多(Web、Node、低码、KRN(动态化)、小程序),研发流程和习惯散乱。

  • 研发流程规范差异大 :不同团队间,不同的技术栈的研发流程上存在一定差异,包括研发流程配置、流程各阶段信息字段、单点环节所需的工具能力不同等。

  • 用户迁移成本大 :迁移过程中,需持续关注和解决用户问题,包括用户体验变化、用户学习成本、用户情绪。

  • 落地时间紧迫 :一般互联网大厂类似的工作基本会持续 6 个月以上,快手主站只用了 1 个多月。

实施要点

  • 精准的解决方案设计:

  • 服务端(KDev 平台) :精准的打造了 4 套标准研发模式,适配了主站实际研发情况。

  • 客户端(Keep 平台):一套平台底层能力,支撑 3 种移动研发场景;通过可配置与定制化能力,满足不同团队流程规范与管理诉求(自动翻转配置、流程与质量卡点配置、团队定制化模板)。

  • 前端(KFC 平台):支持 80% 以上前端应用类型,并通过 8 个流程模板、适配 5 个内部自建的插件,兼顾了前端差异化研发流程和用户习惯。

  • 以用户满意为导向 :提供完整的迁移配套服务,降低用户迁移成本。主要包括:

  • 产品质量专项 :用户 BUG 日结。

  • 用户体验专项 :持续深度用户访谈,识别体验问题,并优化。5 周内,交付了 73 个功能 & 体验需求。

  • 用户培训与激励 :通过 12 次培训,50+ 线下访谈,7x24 小时 OnCall、200+ 人次的用户激励,提升用户对产品的接受度。

  • 数据驱动团队级推广:每周度量进度,驱动各部门接口人推广。

经验总结

可能大家会有疑惑,为什么三端分别是 3 个平台,而不是一套平台。因为从实际情况看,服务端、前端、客户端的底层模式、流程都有比较大的差异,强行整合,不仅对产品用户收益不大,反而牺牲了要兼容不同端的流程、习惯差异化的灵活性,给标准化的推进增加难度。因此,我们在用户层面上,还是三套平台,分别解决各自领域的问题,但在底层的基础能力用的是一套,比如流水线、权限等。

Step2:建设效能度量体系

主站的研发效能早在 2022 年就开始启动了,当时在探索北极星指标阶段,缺少度量体系,更多是根据一线开发者的开发痛点反馈,进行偏工具流程等的优化,没有核心指标的牵引,项目都无法推进,更谈不上论证给业务带来的价值。在 2023 年 3 月再次重启效能项目时,北极星指标初步定义为 “有效需求吞吐量”,但是当时需求有效性的衡量难度太大,内部无法达成共识,项目推进困难,而且也无法看清业务堆积和开发人效情况。

随着流程标准化的落地,研发数据的置信度大幅提升,为效能度量提供了土壤。因此,我们定义了以“人均交付产品需求数” 为北极星目标来看清业务开发交付能力,同时观测需求颗粒度(避免单一指标跑偏:度量什么得到什么,种瓜得瓜种豆得豆)来保障交付提升的良性发展,逐步建立了一套更全面的指标体系(多指标互相佐证约束,hack 成本极高)来体现业务交付产能和交付效率,以及组织和个人效率情况。

快手的效能度量体系如下图所示:

注明:SP:Story Point,快手用于度量需求工作量的单位。

借助这套全面完备的指标体系,我们不仅避免了依赖单一指标可能导致的偏差,还有效防范了效能数据被 hack 的风险,确保了效能数据的准确性和可靠性。

Step3:效能问题分析与改进

有效能度量体系,首先我们可以为任何一个业务线做系统性的体检,如下图所示,依托数据和经验,可以逐一拆解出核心的优化专项,并以效能项目的形式实施。

其次,在研发流程和管理上,也能洞察出更多平时看不见的 Case,深入改进,下面是 2 个具体的洞察与改进案例:

Case1:通过「研发活动在线化率」分析,深挖出架构不合理问题

上图是主站技术部下级各团队的研发活动在线化率,其中有一个团队出现了数据异常,分析之后可以发现存在不少问题:

  • 横向来看,这个团队的研发活动在线化率处于中上水平,但产品需求投入占比只有 59%,处于末尾水平。而且产品需求中体验优化占比11.44%,又是各团队中最高的。那么问题来了,“时间都去哪儿了?”

  • 再下钻一层,这个团队的缺陷占比 14%,也是各团队中最高的,且 Oncall& 排障占比 6% 也不低。

因此,数据表明,此团队可能存在的问题:在缺陷问题、体验问题、Oncall& 排障消耗了团队大量的投入,以至于无法消化更多产品需求。所以,通过对团队核心成员的调研和访谈,基本可以找到根因:和客户端的架构劣化有关,比如:

  • 反馈 1:新需求开发时,上手门槛特别高,很多需求会涉及到多个模块开发,这会涉及到自己不熟悉的模块,因为架构分层结构不合理,模块耦合度太高,往往需要花大量的时间去熟悉其他模块的代码,最近做了一个新需求,评估是 3 天的工作量,2 天都在看代码,实际的开发联调只有 1 天。

  • 反馈 2:模块边界不清晰,代码杂糅一起,新需求的代码,可能会影响到已有功能,导致旧功能的 BUG,而且这些 BUG 在回测时,不容易被发现,导致问题漏测逃逸到线上。

通过效能的客观数据再结合主观调研,就可以看清“架构劣化”这种深层次问题,也可以对症下药了。解法是这个团队实施了 2 个技术专项:

  • 客户端的架构升级:从根本上解决因为架构问题带来的交付效率低和交付质量差的问题。

  • 体验优化:集中优化重点场景的体验问题。

随着这两个专项的落地上线,这个团队的效能数据已经有所改善,产品需求投入占比已经提升到 64%,体验优化占比下降到 6%。

Case2:通过「需求积压率」分析,驱动业务优化需求评审流程和节奏

上图是主站技术部下级各团队的需求积压率数据,有些团队的需求积压率持续保持在 80% 以上,意味着需要近一个月的时间才能消化这些积压的需求。这种情况可能存在的问题:

  • 这些被积压的需求,一个月之后,会不会进入排期开发?如果之后会排期开发,说明需求本身的价值还可以,当下是否可以协调资源加快交付?能否可以停掉某些技术需求优先业务交付?是否可以短期加班临时突击?

  • 如果后面不会进入排期,是不是这些需求本身的重要性没那么高?在预评审的时候,是不是可以控制需求的优先级?当前的需求评审流程是否可以优化?

结果

经过一年时间的系统化提效 ,主站提效方面进展显著,人均交付产品需求数 24 年 7 月份同比增长超过 80%。总结下来,主要有效的措施有:

  • 升级研发模式 :通过动态化、配置化等研发模式,让部分需求可以更快速交付。

  • 研发过程提效:通过 API 在线化管理,测试环境稳定性治理、流水线优化、发布优化等措施,降低研发协作成本以及低价值工作占比。

  • 管理与协同提效 :通过效能洞察,持续识别团队协作瓶颈,并通过排期优化、测试无人值守、人力调配等措施,支撑需求可顺畅流动。

阶段 2:智能化 1.0(2024 年 6 月 -2025 年 6 月)

从 2023 年 6 月开始,我们开始探索大模型在研效领域的应用,主要有 2 个方向:

  • 编码场景 :如何用 AI 辅助编码,提升代码生成效率。

  • 非编码场景:在研发全流程里,哪些环节可以通过 AI 能力提升单点工作的效率。

其中,最重要的决策是我们决定自己研发一款 AI Coding 工具:Kwaipilot。它包含了大家见过的所有产品形态:

  • IDE 插件 / AI IDE / CLI:最符合开发人员习惯的几种形态,插件、IDE 可以做续写、问答、智能体代码生成,CLI 则可更灵活的开启代码生成任务。

  • 智能问答引擎 :有独立的 Web 页面,也会嵌入到上面的产品形态里,为开发人员提供灵活的问答能力。

业界有很多优秀的 AI Coding 产品,比如 Cursor、Claude Code、Krio、Windsurf、Antigravity,快手为什么不选择采购,而是自建呢?其实一年来,我们也一直带着这个疑问在探索,相当于一场大型的公司内部 AB 实验:

从用户体验的角度,我们希望大家“用脚投票”,选择好用的工具:

  • 一方面,我们允许开发同学使用任何 AI Coding 产品,可以团队级采购也可以个人购买。

  • 另一方面,我们研发了 Kwaipilot,对内推广。

从实际效果的角度,我们以“AI 代码生成率”为核心观测指标,持续收集用户 / 团队的反馈,识别不符合预期的代码生成 Case,研究解决方案,再投放实验。最终,经过 1 年的探索,实践结果让我们坚定了继续走自研 Kwaipilot 的路线。

注明:2025 年 12 月开始,在 Kwaipilot 已规模应用后,由于安全原因,探索按代码分级封禁三方 AI Coding 工具,仅涉及到部分开发人员。

下面简单分享一下我们的实践过程,相信大家会更容易理解我们的选择。整个 AI Coding 的推广过程分为 3 个阶段:导入、优化、固化

Step1,导入:推广工具,让开发人员用起来

这个阶段很好理解,我们鼓励开发人员在日常工作中默认使用 AI 编程工具,主要目的是让大家拥抱 AI,在意识和行为上先有一个转变。

当然,各种各样奇怪的使用姿势也会出现:

  • 一些同学,尤其是校招入职的同学,在我们的培训和引导下,会深度使用 Kwaipilot。

  • 一些同学会多种 IDE 混开配合使用。其中,有“团购客”,哪家这个月免费就用谁,也有“付费用户”,主要以个人购买 Cursor 为主。

这里最大的副作用,就是个人编码效率不一定全员获得了提升,通过调研看,出现了明显的两级分化的情况。腾讯研究院出品的《AICoding⾮共识报告》中也揭示了类似的情况:

Step2,优化:推广实践,提升编码效率

我们通过用户数据和技术 Leader 推荐找到了一批公司里的“AI 开发高手”,那些用 AI 辅助编码切实提升了效率的开发人员。

一边重点收集他们在使用过程中的问题,集中想办法解决,一边把他们的优秀开发技巧淬炼出来,提炼共性,形成最佳实践。

这个阶段,我们发现,有别于那些网上随处可见的所谓的 Vibe 编程场景(用对话的形式直接做一些独立应用或小游戏等),在真实的业务需求开发场景里,想用好 AI 编程工具提升效率,有 2 个非常大的门槛:

  • AI 编程工具不“懂”业务和系统 :我们发现一个规律,无论用多好的代码大模型和 AI 编程工具,“通用的工具只能达到通用的效果”。因为它们不理解公司内大量的业务概念、存量系统、编程规范等这些知识,所以,只能做一些普通的代码续写、函数级的代码生成,但很快就会到瓶颈。如果想进一步提升 AI 代码生成的效果,必须想办法让 AI 编程工具从一个“擅长编程但不懂快手开发场景的临时工”进化为一个“熟悉快手业务的开发工程师”。

  • 人和 AI 协同需要掌握新的开发方法 :相比传统编程方法,目前已经发展出了一套 AI 辅助编程的新方法。如果开发工程师仅使用 AI 编程工具,却未掌握对应的技巧,不仅不能提效,还可能会降效,比如出现很多“AI 乱改业务代码”、“AI 生成后还要自己删除”等各种不符合预期的情况。

为了降低门槛,在这个阶段我们做了 2 项工作:

  1. 升级 AI 编程工具

上图是优化后的 Kwaipilot 的产品矩阵,都解决了哪些问题呢?一张表可以概览出来:

  1. 沉淀并推广「AI 辅助编码」最佳实践

我们将大量“AI 开发标杆”个人的共性实践沉淀成了一份标准的指南和实战课程,让所有开发工程师,通过学习指南和课程,可以完整的掌握所有关键技巧。

Step3,固化:将 AI 编码能力变为组织机制

既然已经验证了 AI 编码对效率提升的有效性,且已经有了固定的工具、方法、实战课程,接下来就是如何把这些习惯固化在组织的日常工作中,让所有研发人员大范围的升级开发技能。我们主要用了 3 个措施:

  • 增量人员 :强化入职培训,从源头培养 AI-Native 开发者。

  • 存量人员:牵引 AI 在团队、研发流程、个人工作中渗透。

  • 文化影响:通过活动运营、奖励机制激发更多同学拥抱 AI。主要是一些自下而上能让更多一线研发被看见。

结果

持续的推广,在编码场景上,80%+ 的开发人员都开始用 AI 辅助编码,如下图所示,可以看到 AI 代码生成率每月线上增长。

同时,在非编码场景中,我们在研发流程中建设的单点 Agent 能力也开始在研发平台中陆续透出,用 AI 能力辅助部分研发活动提效。

最终,我们对研发各阶段的 AI 提效情况,做个一个完整的评估:

最后顺便提一下,众所周知,目前大家在业界看到的“代码生成率”指标,包括各大厂披露的、AI 编程工具自己度量,基本都是不置信的,要么只统计了编程工具里的生成的代码和提交的代码作为分子分母,要么是在分母上做了一些限定(比如某些场景下不纳入分母统计)。但因为我们会用这个指标作为公司级 AI 编码推广的目标,因此对度量的精度和置信度要求非常高,一路“踩坑”过来后,最终使用了最严格的度量方法:

  • 分母 :新增代码行,统计公司内所有最终入库的 Commit 中的代码行。

  • 分子 :将分母的每一行代码,和 AI 生成的代码进行比对,如果编辑距离<50%(相似度高),则纳入统计。

这套实现无法在 AI 编程工具端实现,需要由公司内部的代码平台、AI 编程工具一起提供数据,并在离线数据层进行精确的计算,计算分母中每一行新增的代码和分子中 AI 生成代码的编辑距离,符合要求才能被统计为分子。

问题

经过 1 年多的努力,从数据上看,研发各环节效率都在提升,尤其是编码环节提升很大。在 AI 热潮下,我们也看到很多开发人员、团队 Leader 都在分享自己效率提升数据和案例,按道理来说,公司整体的研发效能应该提升了吧?我们从全局视角,分析了一个核心业务线的客观研发数据,结果发现了非常反直觉、令人困惑的情况: AI 代码生成率持续在增长,但需求交付效率基本不变

为什么呢?我们做了深入的调研,排除了少量个例,观察总结了大多数普遍使用“AI 辅助编码”的开发人员的用法和客观研发数据,发现在真实业务交付场景中,只用“AI 辅助编码”这种开发方法,对需求的开发周期影响非常有限。主要原因如下:

洞察

不过调研中也有额外收获,我们发现在真实的业务需求开发中,已经存在着 3 种不同的开发方法,对效率提升的程度有着根本性的差异。如上图所示。我们把三种开发方法总结出来做了一个定义:

  • AI 辅助编码: 在标准开发流程的基础上,在编码环节,依托 AI 编码工具,使用各种 AI 生成代码的技巧,提升编码效率。如果熟练掌握,可以缩短一部分编码时间,但如上文中的调研归因,由于只是节省了碎片化的编码时间,联通、测试、需求评估等不变,因此对整体的开发任务缩短帮助不大。

  • AI 辅助开发: 在研发全流程的各环节均使用 AI 辅助的方式,提升整体开发效率。需要由人把需求拆分为多个开发任务,不同开发任务调用不能的 AI 能力来完成,再由人来审核和优化产出物。由于从技术设计到编码到测试等各环节都可以节省时间,因此加总起来后,可以将研发任务的开发周期缩短 30% 左右。

  • AI 协同开发: 在某些需求开发中,通过完全用自然语言和 AI 交互的方式(类似业界比较流程的说法 Spec/Vibe 开发)完成需求交付,提升需求端到端交付效率,需求整体的开发周期可以缩短 40% 左右。

举个例子说明,会更容易理解三种开发方法对效能提升程度的影响。例如 1 个需求分解出 2 个开发任务,1 个前端、1 个后端,其中前端工程师接到开发任务,正常评估从设计、开发、测试、合入主干需要 5 天,其中编码 1 天:

  • 如果用「AI 辅助编码」,他自己的评估还是 5 天,只不过相比以前,可以节约一部分时间做一些杂事,但到不了可以接更多开发任务的程度。

  • 如果用「AI 辅助开发」,他可以整体节约 1.5 天,只用 3.5 天就可以完成。但需求整体能不能快,还需要看另一个接任务的同学,以及对应的联调、集成测试、发布的周期。

  • 如果用「AI 协同开发」,首先必须改变协同模式,比如 2 个人均使用这种模式开发或者 1 个人全栈的做,假设 1 个人全栈独立做要 10 天,且不需要和别人集成 & 验证,开发周期可以缩短到 6 天左右。

有了 3 种开发方法的定义,我们就能很容易的评估出理想和现实间的差距,我们取了 1 个业务线 3 个月所有已交付的需求进行分析,发现 50%-70% 的需求,在不改变原有开发流程、规范、人员协同模式的情况下,可以使用提效幅度更大的「AI 辅助开发」模式。此外,还有 2%-10% 的需求,可以更激进的使用「AI 协同开发」。但实际情况上,团队里只有不到 10% 的人在使用「AI 辅助开发」或「AI 协同开发」开发方法,有对 AI 开发特别感兴趣的校招生,也有积极拥抱 AI 喜欢自己探索的资深开发者,但由于人数过少,对团队整体研发模式的变化无法起到带动的作用。

阶段 3:智能化 2.0(2025 年 7 月至今)

上面一个阶段,我们称之为“智能化 1.0”阶段,即以编码场景的 AICoding 为中心提效,并逐步辐射非编码场景的 AI 提效。但主要瓶颈就在于开篇提到的 AI 研发提效陷阱:用 AI 开发工具 ≠ 个人提效 ≠ 组织提效 。

在智能化 1.0 阶段最大的收益是什么呢?大部分研发人员都开始主动使用 AI 开发工具了,同时,找到了个人提效的最佳实践。但接下来才是深水区,我们需要回归效能提升的元问题:“如何用 AI 提升需求端到端交付效率?” 。

经过充分的复盘、洞察和验证,我们找到了新的可行的路径,并重新设计了解决方案,我们称之为“AI 研发范式”,它的实践体系框架,如下图所示:

我们根据需求交付中 AI 的参与程度,定义了“需求 AI 研发成熟度”,将需求划分为 3 个等级 L1、L2、L3,不同等级的需求,需要使用对应的开发方法。不同开发方法,对底层研发工具的 AI 能力也有不同程度的依赖。用一张表对上图做一下解读:

具体实施上整体有 3 步:

Step1,AI x 效能平台:建设能同时支持多种研发模式、可自进化的智能研发平台

解决的问题:

  • 能支持多种研发模式 :不同 AI 研发成熟度的需求,它们的交付流程都是一样的,差异点在于开发方法。因此我们无法为不同的需求、不同的开发方法匹配不同的平台,而是要思考如何用一套平台,来支撑多种开发方法:完全不使用 AI 的标准开发流程、只用 AI 辅助编码的开发流程、更激进的使用 AI 辅助开发或协同开发的开发流程,都应该在同一个平台上完成。这样,我们的需求交付效率,才可以随着人的能力的提升、AI 能力的提升,持续变快。

  • 产品形态可进化 :产品形态随主要研发模式的变化持续演化,从人主导最终变为由 AI 主导;能与传统平台协同进化。

  • AI 效果可进化:能随大模型的升级、Agent 技术的升级、企业 / 个人知识的丰富,持续提升 AI 效果。

解决方案 :建设下一代智能研发平台

如上图所示,有 4 个关键点:

下面重点介绍下为了支撑组织级研发范式跃迁,Flow 这种子产品形态的独特优势。

  • 从需求交付视角看 :同一个需求,开发者可以结合自身对 AI 的理解和开发技能的掌握,在同一种产品形态上选择不同开发方法。

  • 标准开发 / AI 辅助编码 :工作流中所有节点,完全由人工来完成和推进。其中“编码”节点会跳转到 IDE 中,可以用 AI 辅助编码。对用户而言,收益相对来说最小,和原来相比,由于 Flow 的每个节点内嵌或自动兼容了各工具平台的功能,因此仅节约了用户平台跳转的切换与学习成本。用这种模式交付的需求,会被度量为 L0/L1 级需求(AI 辅助(Copilot))。

  • AI 辅助开发 /AI 协同开发 :工作流中多个关键节点均有 AI 完成,人进行结果审查。多个节点之间的上下文可以有效传递,比如 AI 完成需求分析、技术设计后,产出的 AI 友好结构化文档可以自动传递到 AI 编码节点,以提升代码生成的准确性。有些节点暂时无法由 AI 完成的,比如“提测”节点,仍然由人来操作。用这种模式交付的需求,会被度量为 L2 级需求(AI 协同(Agent))。

  • AI 自主开发 :部分需求可以实现全流程 AI 完成,人只需要在需求上线前或上线后进行审核。这种模式下,整个 Flow 是全自动运行的不需要人工参与。用这种模式交付的需求,会被度量为 L3 级需求(AI 自主(Agentic))。

  • 从开发者视角看 :整个过程依然非常丝滑和简洁,下图是一个需求交付中 Flow 的整个工作过程,大家可以感受一下:

Step2,AI x 效能实践:以需求为中心,导入「AI 研发模式」,实现需求端到端提效

支撑「AI 研发模式」的方法和平台都有了,这个阶段的关键是如何把这些作用在团队日常交付的需求上。我们分 3 个层面落地:

个人级实践 :导入「AI 辅助开发 / AI 协同开发」开发方法,并树立标杆

首先人的开发方法要变化。我们重复了第一阶段“优化”与“固化”的实践,让大部分研发人员从“AI 辅助编码”的方法升级成“AI 辅助开发”,让小部分专业能力更强的人员,选修“AI 协同开发”方法。我们同样通过实战课程、典型案例、人员培训等手段,对人的开发方法进行升级。

当然,即使这样,从数据上看,个人用 AI 提效的效果还是存在两极分化的情况。我们对 2025 年 6 月 -12 月的数据进行了分析得到如下结论:

团队级实践:导入「AI 研发模式」,重塑流程、分工,提升所有需求的交付效率

通过管理导向、各种活动的形式,鼓励团队 Leader 主动带领团队进行探索,最终沉淀出了一套适合团队的核心实践:

经过大量的验证,我们的标杆团队(<50 人规模)无论在 AI 转型后的业务感知上,还是客观数据上,均能达到比较优秀的水平,见下表:

业务线级实践:大规模研发团队,系统性升级 AI 研发范式,带来效能提升

以 主站技术部 为例,从 2023 年到 2025 年,从平台化到数字化再到精益化,2025 年开始步入深水区,2 个新挑战浮出水面:

  • 传统的流程、工具优化手段带来的提效收益,边际效应持续减小。

  • 业务的规模与复杂度持续提升。

因此开始探索能否把握 AI 爆发的机遇,把传统研发流程升级到“AI 研发范式”,进而打开组织级效能跃升的新空间。核心实践:

实践 1:Top-Down,战略驱动

  • 明确战略导向 :主站技术部提出了“AI First”的战略思想,鼓励全体员工开展工作之初,优先将 AI 作为核心驱动力,加速技术创新、优化业务流程、深度融合 AI 技术,为产品与服务注入新活力和新可能性。

  • 发布白皮书 :将战略导向具象化为思考、方法与规划,为全员提供明确指引。

  • 成立重点项目 :在研发领域,成立了 AI DevOps 项目,统一设计解决方案并推广实施。

实践 2:AI x 效能实践

  • Step1:将需求分级,按需求 AI 研发成熟度定义:

  • L1 AI 辅助(Copilot):人主导,AI 主要在编码环节提供辅助。

  • L2 AI 协同(Agent):人和 AI 更深度的协同完成需求开发,在研发全过程中,更深度分解任务给 AI 完成,人进行修改、调整、确认。

  • L3 AI 自主(Agentic):人类似产品经理,把需求澄清清楚并交给 AI 来完成,并进行最后的验收。

  • Step2:分级实施

  • 让所有需求达到 L1 级(AI 辅助,Copilot):推广个人级实践,依托 Kwaipilot 工具实现全员掌握,最终覆盖所有需求。

  • 让大部分需求能持续升级到 L2 级(AI 协同,Agent):开展团队级实践,从试点到推全,重塑流程、分工。

  • 小部分需求探索能达到 L3 级(AI 自主,Agentic):圈选出颗粒度小且独立的需求,构建全技术栈 / 职能端到端交付链路,通过全栈、跨栈,减少协作节点,进而形成效率跃迁,最终达成 AI 自主交付。

  • Step3:项目化推进

  • 成立组织级重点项目,Top-Down 实施。

实践 3:AI x 效能平台。基于需求全流程构建 AI 能力,逐一“点亮”能力并规模推广落地:

  • 构建 AIDevOps 能力矩阵与建设路线图 :基于研发效能白盒化,分析交付流程中各原子环节的人力投入比重、AI 能力建设 ROI,形成决策建设哪些 AI 原子能力。

  • AI 原子能力建设 :与研发线共建交付流程环节内的 AI 原子能力 20+,研发流程环节覆盖超过 60%,从需求准备到发布运维各环节。

实践 4:AI x 效能度量:建设 AI 研发成熟度模型,可将需求分级度量(L1、L2、L3 级需求占比),牵引各级实践落地。

经过 1 年多的项目实施,最终探索出了一条组织级的 AI 研发范式升级路线,从数据上也能看出明显的变化:

Step3,AI x 效能度量:建设「AI 研发成熟度模型」,接入原有效能度量体系,驱动需求持续转变为“AI 研发模式”

最后在效能度量上一样也需要升级,基于效能实践的探索,我们配套建立了「需求 AI 研发成熟度」模型(如下图所示),用于度量一个需求在研发过程中的 AI 使用程度,这样我们就可以按 L2&L3 级需求的比例,来牵引实践过程,也可以专门度量 L2&L3 级需求的交付周期的变化,来印证提效结果。

结果

再回到全局视角,从数据上看,如果只看“AI 代码生成率”指标,可以明显看到 2025 年 6-11 月出现了一个大幅提升。实际上,在智能化 1.0 阶段,这个指标达到 24%+ 基本已经是极限了,当我们开始实施智能化 2.0 后,才开始进一步拉升。

当然,我们在内部的数据观测上,其实已经不再看“AI 代码生成率”指标了,它只是一个单点的过程指标,片面且孤立。我们现在有了更直接的度量指标。从过程上,我们观测多少需求被采用全流程 AI 研发模式交付,从结果上,我们直接观察需求的交付效率变化。

  • L1、L2、L3 级需求占比 :有多少需求的 AI 研发程度可以达到 L1、L2、L3 的阶段。

下图是最先完成 AI 范式转型团队的数据变化,可以看到 L2&L3 级需求占比达到 20.34%,需求交付周期下降 58%,2 个指标呈现明显的正相关性。

总结

最后也总结下我们一年来的实践心得,目前看完全印证了《2025 年 DORA 报告:人工智能辅助软件开发现状调查报告》中的洞察:

“从 DevOps 到 AI 辅助开发:AI 是“透视镜”与“放大器”

  • AI 是“透视镜”

  • 在协同良好的组织中(如流程清晰、数据打通的团队),AI 能使 DevOps 效能再提升 25%。

  • 在架构松散的组织中,AI 会暴露流程断点、数据孤岛等隐性痛点。

  • AI 是 “放大器”

  • 如同亚马逊通过微服务转型释放 DevOps 价值,AI 辅助开发也需重新设计工作流程(如 “AI 提案 — 人类决策” 闭环)、角色分工(如专职提示工程师)与治理机制(如 AI 代码审查标准),否则无法释放真正价值。

对于大型组织的研发效能提升,AI 不是“ 万能药 ”,而是“ 透视镜 ”和“ 放大器 ”,它不会自动修复组织问题,而是先把组织历史积累的长板和短板一并透视出来,再全部放大。幸运的是快手的研发效能实践一直保持客观、务实的风格,先把地基打稳(平台化 / 数字化 / 精益化),再通过在研发各环节建立 AI 提效能力,先一边落地一边充分验证对个体的提效情况,再体系化的推进组织级 AI 研发范式升级。最终发现,AI 在传统研发效能基建的基础上,像放大器一样增幅了每个环节,为组织带来研发范式级的跃迁。

如下图所示,我们基于张乐老师的“研发效能黄金三角”框架之上做了升级,能更清晰的表达出快手的实践框架:

最后,再把镜头拉远,回到宏观视角看——2025 年我们所做的种种努力,不过是这场 AI 变革的开端。由 AI 驱动的生产力跃升和生产关系重塑,正在重新定义软件开发的每一个环节。这不是一场短跑,而是一场马拉松,不是一次技术升级,而是一次范式革命。

快手已经在这条路上积累了宝贵的经验,但真正的挑战和机遇还在前方。未来已来,一起共同探索 AI x 研发效能的无限可能吧!

了解更多

本文作者

  • 快手研发效能中心:秦巍(研发效能解决方案 & 智能工具产品负责人)

  • 快手主站技术部:胡伟(主站 AIDevOps 项目负责人)、马坤(主站研发效能项目负责人)

写在最后

感谢快手 研发效能中心 与 快手主站技术部 的授权,使我们有机会系统梳理并总结快手在过去三年中的实践经验。

快手向来崇尚“行胜于言”的实干精神,也因此我们往往专注于行动,而疏于对外分享。然而,过去一年间 AI 技术的迅猛发展,正深刻改变着研发效能领域的格局。在与行业同行的交流中,我们既看到层出不穷的创新探索,也注意到在实践、方法与工具建设方面仍存在不少共性问题。这些问题若不及早重视,很可能导致未来大量返工与资源浪费,甚至偏离客观规律,影响企业研发效能提升的既定路径。

为此,我们决定把我们的探索与实践经验分享出来——无论是曾经踏过的“坑”,还是有幸跨过的“河”,都希望能为企业与同行们在“AI × 研发效能”的探索中,降低试错成本,注入更多成功可能。

当然,快手的 AI 研发范式升级仍在沿着这条路径演进中:L1 AI 辅助(Copilot)→ L2 AI 协同(Agent)→ L3 AI 自主(Agentic)。目前,我们的研发效能体系已经初步完成 AI 化升级,全景图如下图所示:

2026 年正在探索 L2 → L3 的跃迁路径,我们将定期梳理实践经验,持续向业界输出更多有价值的内容,主要包括:

  • 实践与技术:欢迎关注「 快手技术 」公众号。我们将持续分享具体实操方法与技术解析,例如:个人、团队乃至业务线如何借助 AI 提升效能?有哪些落地案例?研发各环节 Agent 的核心技术及调优方法有哪些?等等。

  • 平台与工具:我们将智能化 1.0 阶段沉淀的产品 Kwaipilot 进行了全面升级与开放,它在快手内部历经数千名研发同学的反馈与打磨,已完成三代演进:Code Copilot → Code Agent → Multi-Agent & Agentic Coding,目前已在海外发布,产品名为 CodeFlicker,希望服务全球开发者,也欢迎国内同行下载体验。后续,我们还会持续把快手在智能化 2.0 阶段的探索成果融入 CodeFlicker,希望让更多企业级开发者受益。

最后的最后,如果你也希望一起探索「AI x 研发效能」最前沿的技术、产品、实践,一起以业界最高标准做有挑战的事,欢迎加入我们

前言

本小节继续来描述istio对于流量的各种操作

流量镜像

对标nginx的mirror功能,复制一份流量到对应的地址去,通常用来做从线上环境引流至其他环境做测试或者分析

apiVersion: networking.istio.io/v1
kind: VirtualService
metadata:
  name: backend-vs
  namespace: default
spec:
  hosts:
  - backend-service
  - api.wilsontest.com
  http:
  - mirror:
      host: backend-service
      subset: v1
    mirrorPercentage:
      value: 100
    route:
    - destination:
        host: backend-service
        subset: v0

流量先到v0版本,istio-proxy复制一份流量到v1版本。如果不想1比1复刻,可以调整mirrorPercentage百分比功能

如果mirror host的目标不存在,怎么发现该错误及时调整host配置呢?

超时/重试

配置超时/重试的原因主要是为了解决:

  • 调用外部网络的接口,很容易产生诸如502、504、499,甚至连接中断等问题,有了重试,可以尽可能的尝试再次发起,而不是直接报错
  • 公用云网络抖动,导致客户端收到一堆5xx,从而引起客户产生不适
  • 后端服务没有优雅更新,一旦发版,导致大量502,重试可以缓解502,避免告警风暴
apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
  name: backend-retry
spec:
  hosts:
  - backend-service
  http:
  - route:
    - destination:
        host: backend-service
    timeout: 1s
    retries:
      attempts: 3  # 最大重试次数
      perTryTimeout: 1s  # 每次尝试的超时
      retryOn:  # 触发重试的条件
        - 5xx
        - gateway-error
        - connect-failure
        - refused-stream

有位老哥说了,如果一套qps很高的集群,一旦发生重试,那就意味着短时间之内上游服务的qps至少翻一倍(第一波请求不成功,很快第二波请求就要来了),那这时候上游服务就有被冲垮的风险

说的没错,重试是为了提高请求的成功率,但是不可避免增加系统负载,并且增加请求的响应时间,如果大量重试,那就会导致重试风暴,带来更大的问题

重试次数

为了避免重试风暴,在配置策略的时候应该考虑合理的重试次数

    retries:
      attempts: 3  # 最大重试次数
      perTryTimeout: 1s  # 每次尝试的超时

重试3次,每次间隔1s,然后就应该报错,介入查看了

级联超时

超时时间逐层递减,前端超时 > 网关超时 > 服务超时
frontend: timeout: 5s
nginx-test: timeout: 3s
backend-service: timeout: 2s

退避策略

简而言之,就是重试失败之后不是马上重试,而是等一段时间再重试

  • 固定退避(Fixed Backoff):每次重试等待固定时间

    • attempt 1: 等待 100ms
    • attempt 2: 等待 100ms
    • attempt 3: 等待 100ms
  • 线性退避(Linear Backoff):等待时间线性增加

    • attempt 1: 等待 100ms
    • attempt 2: 等待 200ms
    • attempt 3: 等待 300ms
  • 指数退避(Exponential Backoff):等待时间按指数增加(乘以系数),最使用也最常用

    • attempt 1: 等待 100ms
    • attempt 2: 等待 200ms
    • attempt 3: 等待 400ms
    • attempt 4: 等待 800ms
    • attempt 5: 等待 1600ms
  • 随机退避(Jitter/随机抖动):在退避时间中加入随机性,打破同一时间重试,避免"惊群效应"

    • attempt 1: 等待 100ms ± 随机时间
    • attempt 2: 等待 200ms ± 随机时间
apiVersion: networking.istio.io/v1
kind: VirtualService
metadata:
  name: backend-vs
  namespace: default
spec:
  hosts:
  - backend-service
  - api.wilsontest.com
  http:
  - retries:
      attempts: 10
      perTryTimeout: 1s
      retryOn: 5xx,connect-failure
    route:
    - destination:
        host: backend-service
        subset: v0

测试istio-proxy的策略

istio-proxy自带了指数退避随机退避,初始25ms

为了探索istio-proxy是否带有指数退避随机退避的特点,特意设置attempts: 10(日常用可以设置小一点,比如笔者通常设置为3)

设置后端报错代码,只要报错5xx即可,所以我直接将代码的关键字改错,应该会报语法错误或者方法找不到之类的

Traceback (most recent call last):
  File "/usr/local/lib/python3.11/site-packages/tornado/web.py", line 1846, in _execute
    result = method(*self.path_args, **self.path_kwargs)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/test.py", line 9, in get
    self.writ(ret)
    ^^^^^^^^^
AttributeError: 'TestFlow' object has no attribute 'writ'

都准备好了,开始测试:

  • curl -s -H 'host: api.wilsontest.com' 10.22.12.178:30785/test
  • 查看日志,有11条日志,符合预期:第1次访问+attempts: 10

    [2026-02-05T06:51:41.322Z] "GET /test HTTP/1.1" 500 - upstream=10.244.0.73:10000 duration=1ms route=default
    [2026-02-05T06:51:41.332Z] "GET /test HTTP/1.1" 500 - upstream=10.244.0.73:10000 duration=1ms route=default
    [2026-02-05T06:51:41.369Z] "GET /test HTTP/1.1" 500 - upstream=10.244.0.73:10000 duration=2ms route=default
    [2026-02-05T06:51:41.441Z] "GET /test HTTP/1.1" 500 - upstream=10.244.0.73:10000 duration=1ms route=default
    [2026-02-05T06:51:41.463Z] "GET /test HTTP/1.1" 500 - upstream=10.244.0.73:10000 duration=2ms route=default
    [2026-02-05T06:51:41.480Z] "GET /test HTTP/1.1" 500 - upstream=10.244.0.73:10000 duration=1ms route=default
    [2026-02-05T06:51:41.660Z] "GET /test HTTP/1.1" 500 - upstream=10.244.0.73:10000 duration=1ms route=default
    [2026-02-05T06:51:41.787Z] "GET /test HTTP/1.1" 500 - upstream=10.244.0.73:10000 duration=1ms route=default
    [2026-02-05T06:51:41.804Z] "GET /test HTTP/1.1" 500 - upstream=10.244.0.73:10000 duration=1ms route=default
    [2026-02-05T06:51:41.978Z] "GET /test HTTP/1.1" 500 - upstream=10.244.0.73:10000 duration=1ms route=default
    [2026-02-05T06:51:42.116Z] "GET /test HTTP/1.1" 500 - upstream=10.244.0.73:10000 duration=2ms route=default
  • 分析下时间

    序号时间戳与上一次间隔
    141.322
    241.332+10ms
    341.369+37ms
    441.441+72ms
    541.463+22ms
    641.480+17ms
    741.660+180ms
    841.787+127ms
    941.804+17ms
    1041.978+174ms
    1142.116+138ms
  • 从日志看来确实满足了指数+随机,初始 backoff:~25ms、指数增长、加入 jitter(随机抖动)

    • 10ms → 37ms → 72ms → 180ms → 127ms → 174ms → 138ms

经过这次简单的测试:

  • 配置重试应该要针对幂等的request,非幂等是绝对不能使用重试的
  • retries应该要配置小一些,否则就会出现重试风暴,就像测试中10次,相当于原请求放大了10倍

熔断

熔断是为了保护后端服务不被流量风暴淹没,保护系统整体稳定

  • 目标:如果后端检测5xx,超过3次,就将该pod踢下线,30s之后又加回来

    apiVersion: networking.istio.io/v1
    kind: DestinationRule
    metadata:
      name: backend-dr
      namespace: default
    spec:
      host: backend-service
      subsets:
      - labels:
          version: v0
        name: v0
      trafficPolicy:
        outlierDetection:
          baseEjectionTime: 30s
          consecutive5xxErrors: 3
          interval: 5s
          maxEjectionPercent: 100
    • baseEjectionTime: 30s:服务被下线的时间,30s
    • consecutive5xxErrors: 3:触发熔断的条件,有3次5xx
    • interval: 5s:检测间隔,5s
    • maxEjectionPercent: 100,被下线的服务比例,100%
  • 后端backend服务依然会报错500,先访问3次,curl -s -H 'host: api.wilsontest.com' 10.22.12.178:30785/test

    Traceback (most recent call last):
      File "/usr/local/lib/python3.11/site-packages/tornado/web.py", line 1846, in _execute
        result = method(*self.path_args, **self.path_kwargs)
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/opt/test.py", line 9, in get
        self.writ(ret)
  • 第四次再访问

    no healthy upstream
  • 符合预期,第四次服务直接被熔断了,并且由于backend的pod只有1个,istio下线了,导致nginx没有upstream

限流

首先基于http1.1,每次发起http并不是短链了,而是长连接。为了不让每次都产生3次握手与4次挥手的连接消耗,istio-proxy与后端服务backend之间会维护一个长连接

  • 配置在DestinationRule上

    apiVersion: networking.istio.io/v1
    kind: DestinationRule
    metadata:
      name: backend-dr
      namespace: default
    spec:
      host: backend-service
      subsets:
      - labels:
          version: v0
        name: v0
      trafficPolicy:
        connectionPool:
          http:
            http1MaxPendingRequests: 1
            maxRequestsPerConnection: 5
    
    • http1MaxPendingRequests: 1maxRequestsPerConnection: 5是为了方便测试,改得非常的小
    • http1MaxPendingRequests: 1:等待“可用连接”的 HTTP 请求数量,如果没有可用连接,最多允许1个,超出就报503
    • maxRequestsPerConnection: 5:一条 TCP 连接上最多处理多少个 HTTP 请求
  • 使用wrk压测工具,用20个并发,同时发送20个连接,向目标url发送请求,持续1s

    ▶ wrk -t20 -c20 -d1s -H 'Host: api.wilson.com' http://10.22.12.178:30785/test
    Running 1s test @ http://10.22.12.178:30785/test
      20 threads and 20 connections
      Thread Stats   Avg      Stdev     Max   +/- Stdev
        Latency    10.66ms    3.18ms  21.85ms   76.73%
        Req/Sec    93.55     16.33   171.00     80.75%
      1990 requests in 1.10s, 650.09KB read
      Non-2xx or 3xx responses: 92
    Requests/sec:   1808.21
    Transfer/sec:    590.70KB
    
    • 可以看到,1秒之内有1990个请求发送至目标url
    • 其中有92个请求有问题
  • 检查日志

    ...
    [2026-02-06T07:37:08.168Z] "GET /test HTTP/1.1" 200 - upstream=10.244.0.73:10000 duration=5ms route=default
    [2026-02-06T07:37:08.169Z] "GET /test HTTP/1.1" 503 UO upstream=- duration=0ms route=default
    [2026-02-06T07:37:08.169Z] "GET /test HTTP/1.1" 0 DC upstream=10.244.0.73:10000 duration=4ms route=default
    ...
    • http_code是200是正常请求,503就是熔断保护的结果,触发了istio熔断保护而返回客户端503
    • http_code是0,通常意味着 连接在 HTTP 响应头完整返回之前就已经断开了,这非常类似于nginx的499。他们本质都描述了一个问题,客户端没有等到结果就终止连接了,这应该和我们压测只持续了1s有关系

联系我

  • 联系我,做深入的交流


至此,本文结束
在下才疏学浅,有撒汤漏水的,请各位不吝赐教...

书接上回
划水,划水,请问大家手机都用什么主力套餐?

30 元内又多送 1 张 plus 券,价值网购价值 20 元 +3G 流量

这么来相当于 30 元话费,用了 39G 流量和 40 元?

【订购成功提醒】尊敬的客户,您好!您于 2026 年 02 月 09 日 14 时 16 分通过中国移动客服热线成功办理好礼多多(新)3GB 会员(方案编号:24BJ202167)活动,2026 年 02 月 09 日生效,有效期 24 个月,失效时间为 2028 年 01 月 31 日 23 时 59 分,到期后将按照 24 个月为周期自动续订,有效期内规则如下:
1、需承诺每月实付通信费不低于 30.0 元,若您同时办理其他承诺消费类业务时,每月承诺的最低消费额度将就高计算。若整月停机,当月仍按 30.0 元扣费。每月通信费不含购买非通信类产品的费用、违约金、话费支付、代付代收费,例如宽带、万能副卡等代付费用。
2、从 2026 年 02 月 09 日起,每月获得 3GB 国内通用流量(不含港澳台),流量不可分享、结转与转赠,优先级同套内国内通用流量。若在购买此产品前已限速,办理本流量包无法打开限速速率,次月网速自动恢复。
3、每月获得 PLUS 灵活会员(含 1 张权益兑换券,可用于兑换权益超市中的权益福袋),您需每月自助兑换,权益券仅当月有效。兑换路径:登录中国移动 APP-权益超市。因供货商政策原因权益内容有可能进行调整,以页面实时展示为准。
4、活动持续开展,到期后将以 24 个月合约期自动续订。若活动下线,则活动到期后自动失效。将以到期短信通知内容为准。活动到期月,若为您续订时,您的号码为停机等特殊状态、或有互斥业务,则无法续订成功。
5、变更/转户/销户/携转等需退订该业务,退订无需承担违约责任,可拨打 10086 取消业务。
6、自当前协议签署日起,至活动有效期结束,须持续使用中国移动网络。
7、如办理此活动时客户已开通 VOLTE 功能,将同步开通“高频骚扰电话拦截”服务,该服务开通后长期有效,无需任何费用,如需取消可发送“QXFSR”到 10086 办理。【中国移动】

image

今日,OpenAtom openKylin(以下简称“openKylin”)社区正式推送 openKylin 2.0 SP2 第二次更新升级。本次更新针对系统稳定性,共修复200余项缺陷,重点解决蓝牙连接异常(如文件传输中断、弹窗错位)、双屏显示不稳定等问题;强化多语言支持,提升藏文、蒙古文、繁体中文等界面翻译的覆盖度;完善核心功能,优化软件商店装包稳定性、驱动兼容性(如 Realtek 8852BE WiFi网卡);上线支持磐石架构的KMRE移动兼容环境、openKylin Wine助手;升级火狐浏览器、微信、QQ 等高频应用至最新稳定版本等。

01系统安装与升级方式
方式一:从openKylin官网(扫描下方二维码或点击“阅读原文”)下载最新镜像进行安装(适用于新用户或想重新安装系统的用户);

方式二:前往系统设置—“更新”界面,按提示完成系统更新(适用于已安装旧版本的用户);

方式三:打开维护模式(设置-关于-点击5次UKUI Logo-侧边栏找到维护模式并打开),通过终端运行以下命令进行更新,升级后退出维护模式(适用于开发者):sudo apt updatesudo apt upgrade

02主要缺陷修复及体验优化
主要缺陷修复
桌面环境
【通知中心】修复藏文环境下鼠标悬浮通知中心图标,提示英文的问题【网络管理】修复wifi优先级设置未立即生效的问题【网络管理】修复新建有线网不进行授权认证,点击保存,第二次超时弹窗未汉化的问题【网络管理】修复新建有线网络,点击保存,认证弹窗点击失败,添加失败弹窗未汉化的问题【网络管理】优化无线网络连接,修复部分用户反馈的检测不到无线网络的问题【文件管理器】修复藏文下,文件管理器标题栏选项按钮中的Samba拼写错误的问题【文件管理器】修复繁体环境下,文管窗口文档部分显示英文的问题【文件管理器】修复复制大文件时任务栏窗口显示异常的问题【文件管理器】修复切换为藏文后,文件管理器中存在乱码的问题【文件管理器】修复英文下最大、次最大字体时窗口显示有遮挡的问题【文件管理器】修复用户反馈的繁体环境下,鼠标右键菜单里部分选项未被翻译为繁体的问题【文件管理器】修复用户反馈的双击启动应用程序相较于右键启动有很大延迟的问题【文件管理器】修复用户反馈的在分辨率缩放情况下,桌面壁纸异常显示的问题【文件管理器】优化大量文件同时拷贝等场景下出现崩溃的问题【文件管理器】修复右键双击标题栏,窗口会最大化的问题【侧边栏】修复藏文、蒙古文、繁体下,侧边栏部分字体仍显示英文的问题【登录锁频】修复部分用户反馈的关机再开机或者重启,需要大约1分钟时间才显示登录界面,且登录界面显示异常的问题【登录锁屏】修复不能正常开机自启动小键盘的问题【登录锁屏】修复切换其他语言,锁屏/登录界面,无线网络连接时提示信息为英文的问题【登录锁屏】修复忘记密码的提示文案不正确的问题【登录锁屏】修复相册屏保未自动轮播的问题【登录锁屏】修复用户反馈的设置了限制密码错误次数后,输入正确密码但锁定三分钟的问题【USD】修复英文环境下非最小字体由小到大切换时按钮文字显示不全的问题【USD】修复藏文最大字体下确认报警信息弹窗按钮文字显示不全的问题【会话管理器】修复多用户登录的情况下,右键开始菜单,点击电源选项-重启/关机,没有多用户重启提示的问题【会话管理器】修复存在未保存的WPS文件、画图文件时,执行重启/关机/注销,没有任何提示,直接重启/关机/注销的问题【会话管理器】修复用户反馈的遇到电源键鼠标左键点击无效的问题【开始菜单】修复登录两个用户,右键开始菜单,点击重启/关机,没有弹窗提示,直接关机/重启的问题【开始菜单】修复切换到字母排序或功能排序后,按上下方向键无法移动到字母导航栏或功能导航栏的问题【开始菜单】修复系统语言为繁体,部分显示为英文的问题【控制面板】修复控制面板中选择德语重启后不勾选的问题【控制面板】修复默认应用不正确的问题【控制面板】修复用户反馈的VPN在设置中关闭vpn后,重启会自动恢复的问题【控制面板】修复用户反馈的系统快捷键设置存在冲突时的提示不够明确的问题【控制面板】修复wlcom环境下,首次打开设置-关于,设置窗口会异常缩小的问题【控制面板】修复侧边栏AI管理模块缺失图标的问题【快捷键】修复自定义快捷键,无法设置按键组合的问题【蓝牙】修复打开托盘处蓝牙,再打开屏幕键盘,关闭屏幕键盘后,蓝牙弹窗没有恢复到原来位置的问题【蓝牙】修复断开已连接的蓝牙设备,在任务栏界面该设备移动界面最低部的问题【蓝牙】修复多次发起批量文件,发送端和接收端文件不一致的问题【蓝牙】修复繁体时,发送文件弹窗存在英文的问题【蓝牙】修复连接蓝牙设备失败,一直处于连接状态,重新打开控制面板扫描不到蓝牙设备的问题【蓝牙】修复音频设备的主动连接弹窗显示不正确的问题【任务栏】修复wlcom环境下,应用打开子窗口的情况下,任务栏软件图标或预览图无法激活应用的问题【任务栏】修复藏文、蒙古文、繁体文任务栏部分内容未翻译的问题【任务栏】修复藏文/蒙古文/繁体文系统,开始菜单悬浮提示未汉化的问题【任务栏】修复多用户重启系统时,会话工具存在任务栏图标的问题【任务栏】修复任务栏固定应用数量超过任务栏宽度,往右拖动最右侧的应用任务栏会自动滑到最左侧的问题【任务栏】修复英文环境下,快捷菜单冷冻模式和wifi显示不完全,悬浮无提示的问题【任务栏】修复用户反馈的任务栏“显示桌面”按钮区域并没有完全覆盖任务栏的最右边,导致滑到屏幕右下角点击无效的问题【任务栏】修复悬浮任务栏开始菜单图标,显示为英文的问题【会话管理器】修复WPS文件编辑未保存,点击电源-关机,没有提示未保存,机器直接关机的问题【主题】修复wlcom环境下,控制面板背景设置后不生效,重启才生效的问题【主题】修复藏文环境下系统,主题界面按钮文字显示不完全的问题【区域语言】修复藏文系统下,输入法设置显示为中文的问题【区域语言】修复藏文系统下,添加语言弹窗关闭按钮悬浮为英文的问题【时间和日期】修复藏文系统下,授权弹窗藏化不完全的问题【时间和日期】修复添加时区和修改时区页面关闭按钮悬浮为英文的问题【时间和语言】修复在修改时区和添加时区搜索框输入不存在的时区,没有无结果的提示的问题

系统应用
【归档管理器】修复解压缩后的弹窗“显示文件”,弹出两个文件管理器界面的问题【归档管理器】修复蒙古文环境下,存在部分的翻译异常问题【计算器】修复ARM架构下,用键盘的数字无法输入的问题【计算器】修复蒙古文计算器标题栏为英文,且选项菜单存在英文显示的问题【截图】修复区域截图后无法选择字体的问题【微信】修复订阅号页面无法调用系统默认浏览器的问题【开明包格式】修复运行开源系列的开明包应用均无图标的问题【天气】优化天气出现定位不准的问题【录音】修复蒙古文右键点击已存在的录音文件,下拉菜单存在英文内容的问题【用户手册】修复英文环境下,关于界面的图片所属张数错误的问题【日历】 修复英文环境下,日程中存在部分项悬浮没有内容的问题【U盘管理工具】修复英文环境下,插入异常U盘,提示弹窗格式化按钮显示不全的问题【系统监视器】修复系统语言为蒙古文,会话管理器下方系统监视器显示简体中文的问题【系统监视器】修复磁盘详情页面连续点击不同磁盘应用闪退的问题【虚拟键盘】修复用户反馈的鼠标拖动移动悬浮球与虚拟键盘时,出现悬浮球与虚拟键盘严重抖动的问题【虚拟键盘】修复用户反馈的鼠标长按虚拟键盘时,键盘出现闪烁的问题【音乐】修复蒙古文环境下,存在部分的翻译异常问题【日历】修复调整缩放率为175%和200%,日历页面位置异常的问题【日历】修复用户反馈的农历时间存在错误的问题【麒麟管家】修复部分用户反馈的麒麟管家应用右上角关闭按钮变小的问题【麒麟管家】修复用户反馈的通过服务支持反馈问题时,一旦勾选高级模式,界面就不正常的问题【软件商店】根据社区用户反馈,上架最新版原生微信、QQ音乐等应用【软件商店】修复软件商店更新下点击更新某些应用,提示安装失败的问题【软件商店】修复正在下载界面内悬浮在软件上,悬浮显示的网速位置在窗口右侧的问题【第三方软件】修复用户反馈的 WPS办公软件卸载不完全的问题

系统支撑
【wlcom】修复命令行启动应用,窗管显示异常的问题【安装器】修复英文环境-大号字体下,卸载器界面存在截断的问题【安装器】修复应用图标显示为默认图标时,图标显示较小且居于左上角的问题【安装器】修复用户反馈的浏览器下载qq安装包无法安装的问题【电源管理】修复控制面板中电源管理模块未翻译完全的问题【电源管理】修复英文模式下,查看控制面板-系统-电源,各子选项中存在首字母未大写情况的问题【定时关机】修复菜单栏的“选项”按钮,悬浮提示显示“更多”,与其它应用显示不一致的问题【定时关机】修复设置时间为当前时间,剩余时间显示错误的问题【多语言】修复Wayland模式下,英文模式切换到法语无法切换的问题【龙芯】修复部分龙芯平台机型上无法进入桌面的问题【系统启动】优化系统重启等待时间【软件源】修复pristine-tar的依赖问题【软件源】修复下载安装libkysdk-system-dev时报错的问题【声音】修复英文下用户手册缺少内容介绍的问题【系统安装】修复安装各界面滚动条、输入框未屏蔽右键菜单的问题【系统安装】修复部分用户反馈的在多系统共存环境下安装不成功的问题【系统安装】修复系统安装流程中存在的部分未汉化的问题【系统安装】修复虚拟机安装时,数据盘分区太小的问题【显示器】修复用户反馈的出现系统崩溃:Abnormal display,and the input method cannot be sw的问题【显示器】修复镜像模式下,显示器预览图为两个的问题【显示器】修复镜像模式下插拔显示器进行旋转,两个屏幕显示不同步的问题【显示器】修复扩展模式下,调整其中一个屏幕亮度另一个屏幕亮度也会随之改变的问题【显示器】修复连接多个显示器进行插拔,控制面板内显示多个亮度条的问题【显示器】修复连接双屏,设置投影仪为主屏,关闭投影仪,主屏未切换到显示器上的问题【显示器】修复连接投影仪,屏幕旋转90°,重启后桌面花屏的问题【显示器】修复屏幕旋转后点击桌面,桌面呈现黑色部分的问题【显示器】修复切换分辨率后,点击桌面壁纸发生变化的问题【显示器】修复拖动预览图改变屏幕相对位置,4K屏会闪现部分黑屏的问题【显示器】修复用户反馈的在高分辨率下在VMware虚拟机上出现的屏闪问题【硬件驱动】修复Realtek 8852BE Wireless LAN WiFi 6 PCI-E NIC网卡无法驱动的问题

在上一篇 Flink SQL 极简入门 中,我们体验了 Flink SQL 的基础用法。但在流处理中,最核心、最迷人(也最让人头秃)的概念莫过于“时间”“窗口(Window)”

你可能经常听到这样的业务需求:

  • “每 5 分钟统计一次订单总量”
  • “实时统计过去 1 小时内的热门商品,每 10 秒更新一次”
  • “每天 0 点到当前时刻的累计 PV”

这些需求都离不开窗口。今天,我们就来深入 Flink SQL 的窗口机制,看看它是如何驯服无限数据流的。

什么是窗口 (Window)?

流数据(Stream)是无限的,像水流一样源源不断。我们无法计算“无限流”的总和(因为永远算不完)。为了计算,我们需要把无限的流“切”成有限的块,这个“切”的操作就是开窗(Windowing)

在 Flink SQL 中,窗口主要用于将时间序列上的数据分桶,然后在桶内进行聚合计算(如 SUM, COUNT, AVG)。

新一代标准:Window TVF

在 Flink 1.13 之前,我们主要使用 GROUP WINDOW(如 TUMBLE(rowtime, ...) 在 GROUP BY 子句中)。但从 Flink 1.13 开始,官方推荐使用 Window TVF (Table-Valued Functions)

Window TVF 符合 SQL 2016 标准,语法更自然,功能更强大(支持 TopN、去重等复杂操作)。本文将以 Window TVF 为主进行讲解。

核心语法结构通常如下:

SELECT window_start, window_end, SUM(price)
FROM TABLE(
    -- 窗口函数
    TUMBLE(TABLE my_table, DESCRIPTOR(ts), INTERVAL '5' MINUTE)
)
GROUP BY window_start, window_end;

三大核心窗口类型

1. 滚动窗口 (Tumble Window)

特点:窗口大小固定,窗口之间不重叠,首尾相接。
场景:每隔 5 分钟统计一次。

Tumble Window

语法
TUMBLE(TABLE data, DESCRIPTOR(time_col), INTERVAL '10' MINUTE)

2. 滑动窗口 (Hop Window)

特点:窗口大小固定,但窗口之间可以重叠。它有两个参数:

  1. Window Size (窗口大小):统计多长时间的数据(如“过去 1 小时”)。
  2. Window Slide (滑动步长):多久更新一次结果(如“每 5 分钟”)。

场景:每 5 分钟,统计过去 1 小时的 PV。

Hop Window

语法
HOP(TABLE data, DESCRIPTOR(time_col), INTERVAL '5' MINUTE, INTERVAL '1' HOUR)
注意:参数顺序是先 Slide (步长),后 Size (大小)。

3. 累积窗口 (Cumulate Window)

特点:这是 Flink 特有的窗口,用于解决“每天 0 点至今的累计值”这类需求。它会按步长输出一个个不断变大的窗口,直到达到最大窗口大小。

场景:每天的实时累计销售额(每 10 分钟更新一次看到当天的累计值)。

Cumulate Window

语法
CUMULATE(TABLE data, DESCRIPTOR(time_col), INTERVAL '10' MINUTE, INTERVAL '1' DAY)


实战:处理“过去 5 分钟的订单总额”

让我们回到开头的经典需求。假设我们有一个订单流 orders

0. 准备数据环境

首先,我们启动 SQL Client

./bin/sql-client.sh

创建一个模拟的订单源表(使用 DataGen 连接器):

CREATE TABLE orders (
    order_id INT,
    price DOUBLE,
    order_time TIMESTAMP(3),
    -- 定义水位线,基于 order_time,延迟 0 秒
    WATERMARK FOR order_time AS order_time - INTERVAL '0' SECOND
) WITH (
    'connector' = 'datagen',
    'rows-per-second' = '1',
    'fields.price.min' = '10',
    'fields.price.max' = '100'
);

需求一:每 5 分钟,统计该 5 分钟内的订单总额

这是一个典型的滚动窗口 (Tumble)。比如 12:00-12:05 一个结果,12:05-12:10 一个结果。

SELECT 
    window_start, 
    window_end, 
    COUNT(*) as total_orders, 
    SUM(price) as total_amount
FROM TABLE(
    TUMBLE(TABLE orders, DESCRIPTOR(order_time), INTERVAL '5' MINUTE)
)
GROUP BY window_start, window_end;

运行结果示例
5分钟内订单总额

需求二:实时统计“过去 5 分钟”的订单总额,每 1 分钟更新一次

这是一个典型的滑动窗口 (Hop)

  • 窗口大小:5 分钟
  • 滑动步长:1 分钟

这样,12:00 输出 [11:55, 12:00] 的数据;12:01 输出 [11:56, 12:01] 的数据。

SELECT 
    window_start, 
    window_end, 
    SUM(price) as total_amount
FROM TABLE(
    HOP(TABLE orders, DESCRIPTOR(order_time), INTERVAL '1' MINUTE, INTERVAL '5' MINUTE)
)
GROUP BY window_start, window_end;

运行结果示例
过去5分钟订单总额

注意
HOP 函数的参数中,第一个时间是滑动步长 (Slide)第二个时间是窗口大小 (Size)。千万别搞反了!
INTERVAL '1' MINUTE = Slide (更新频率)
INTERVAL '5' MINUTE = Size (统计范围)

总结

Flink SQL 的 Window TVF 极大地简化了窗口聚合的写法。

  • TUMBLE: 规规矩矩,互不干扰(分批统计)。
  • HOP: 藕断丝连,频繁更新(移动平均/最近 N 分钟)。
  • CUMULATE: 聚沙成塔,越积越多(日报/大屏累计)。

掌握了这三种窗口,你就能覆盖 90% 的实时统计需求了。

下一篇,我们将挑战更复杂的场景:双流 JOIN,看看当“订单流”遇到“用户流”,Flink 该如何处理?


原文来自

在做IT架构规划时,很多团队都会面临一个核心选择题:到底该用本地服务器,还是走云部署路线?其实这两种方式没有绝对的好坏,关键要看你的业务特性、团队配置和长期规划。

先说说成本结构。本地服务器一般前期投入比较大,包括硬件采购、机房改造这些一次性支出,不过后面每年的运维成本相对可控。而云服务基本是“开箱即用”,起步门槛低,但随着业务规模扩大,月度或年度的费用会逐步上升,长期来看未必更省。

性能方面,本地服务器由于资源独享,通常延迟更低、稳定性也更可控,特别适合对实时性要求高的场景。不过云服务的弹性都是实打实的优势——流量突增时能快速扩容,高峰期过了又能及时缩容,资源利用率更高。

数据安全是很多人关心的话题。本地部署等于把所有数据都握在自己手里,权限管控更直接,适合金融、医疗这类强监管行业。而现在的云服务商在安全上的投入也越来越大,像加密传输、漏洞防护、跨区域容灾这些能力,可能比很多企业自建的水平还要专业。

运维管理上的差异也很明显。本地服务器需要配备专门的IT团队做日常维护,出了问题也得自己排查,技术门槛不低。云服务就省心不少,大部分运维工作都由平台承担,团队可以更专注于业务开发,对技术人员配置要求也没那么高。

那到底该怎么选呢?如果你对数据管控、性能稳定性有强要求,而且有专门的运维团队,本地部署可能更踏实。如果你的业务波动大、增长快,或者希望降低运维复杂度,那云服务的灵活性和便捷性会更合适。

其实现在很多企业都在采用混合架构——核心系统放在本地,弹性业务上云,两边优势互补。不管选哪种方案,找个靠谱的IDC服务商都很重要。毕竟从方案设计到后期运维,专业的团队能帮你避开不少坑,让整个系统跑得更稳更省心。

VMware ESXi 9.0.1.0 macOS Unlocker & OEM BIOS 2.7 集成网迅网卡驱动定制版

VMware ESXi 9.0 macOS Unlocker & OEM BIOS 2.7 集成网卡驱动和 NVMe 驱动 (集成驱动版)

发布 ESXi 9.0 集成驱动版,在个人电脑上运行企业级工作负载

请访问原文链接:https://sysin.org/blog/vmware-esxi-9-sysin/ 查看最新版。原创作品,转载请保留出处。

作者主页:sysin.org


2026-01-12,应用户要求,更新集成网迅网卡驱动定制版。

发布 ESXi 9.0 集成驱动版,在个人电脑上运行企业级工作负载,构建开发、测试和学习的最佳平台。

vSphere Workloads Everywhere

通用特性概览

该版本在官方原版基础上新增以下特性:

  • macOS Unlocker:来自 GitHub 的 Unlocker 4,现已支持 macOS Tahoe
  • OEM BIOS 2.7:使用社区最流行的 OEM BIOS/EFI64,现已支持 Windows Server 2025
  • LegacyCPU support,允许在不受支持的旧款 CPU 上安装 ESXi 9.0
  • ESX-OSData 卷大小修改为 8GB,解决自 ESXi 7.0 起系统占用磁盘空间过大的问题(超过 142GB)
  • 有限支持采用混合架构的第 12 代及以上 Intel 处理器,可实现正常引导和运行
  • 中文界面语言支持,在 ESXi 9.0 的 Host Client 中继续支持简体中文界面语言,包括繁体中文

详情请访问原文链接:https://sysin.org/blog/vmware-esxi-9-sysin/ 查看。

集成网迅网卡驱动定制版

NETSWIFT

北京网迅科技有限公司是一家专门从事集成电路高端芯片设计、提供网络产品解决方案的高科技企业。公司成立于 2014 年 5 月,总部位于北京市海淀区玉泉慧谷科技园区,在浙江杭州设有分公司。

公司成功研制了自有知识产权的万兆和千兆以太网控制器芯片、适配器,突破了一系列计算机网络领域高端芯片设计的难题,在网络安全和网络虚拟化等方面达到了较高水平。

网迅网卡不仅兼容 Windows 系统和主流的 Linux 发行版,还可以支持最新的 VMware ESXi 系统,远超预期!

以下是经过验证支持最新版 ESXi 的网讯网卡型号。

Brand NameModelVendorIDDeviceIDSVIDSSID
Wangxun/NETSWIFTFF5025-DDATACXX8088502580881000
Wangxun/NETSWIFTFF5025-DDATAIXX8088512580883000
Wangxun/NETSWIFTFF5040-DDBTACXX8088504000000000
Wangxun/NETSWIFTFF5040-DDBTAIXX8088514080883000
Wangxun/NETSWIFTRP1000 series8088100100000000
Wangxun/NETSWIFTRP2000 series8088200100000000
Wangxun/NETSWIFTWX1860A28088010100000000
Wangxun/NETSWIFTWX1860A48088010300000000
Wangxun/NETSWIFTWX1860A4S8088010400000000
Wangxun/NETSWIFTWX1860AL28088010500000000
Wangxun/NETSWIFTWX1860AL2S8088010600000000
Wangxun/NETSWIFTWX1860AL48088010700000000
Wangxun/NETSWIFTWX1860AL4S8088010800000000
ZTE CorporationNO127808801031cf20801
ZTE CorporationNO127D808801011cf20802

下载地址

ESXi 9.0.1.0 集成驱动版 (2026-01-12)


标准版和厂商定制版,请访问:

官方原版,请访问:

上一个版本,请访问:

更多:VMware 产品下载汇总

优步的工程师介绍了他们如何将分布式存储平台从静态限流演进为优先级感知的负载管理系统,以保护其内部数据库。这一改进解决了大型有状态多租户系统中基于 QPS 限流的局限性,那就是这种限流方式无法反映真实负载、难以处理 “噪音邻居” 问题,也无法保障尾部延迟。

 

该设计保护了基于 MySQL 构建的DocstoreSchemaless存储系统,这些系统通过数千个微服务为超 1.7 亿月活用户(包括乘客、Uber Eats 用户、司机和配送员)提供服务。通过优先保障关键流量并动态适应系统状态,该系统可防止级联过载,在大规模场景下维持性能稳定。

 

优步的工程师指出,早期基于配额的方案依赖集中式跟踪的静态限制,它的效果不佳。无状态路由层无法及时感知分区级负载,且相似大小的请求会产生不同的 CPU、内存或 I/O 开销。运维人员需要频繁调整限流阈值,有时会误删健康流量,而过载分区却没有得到保护。

 

正如优步的工程师Dhyanam V.LinkedIn帖子中所述:

有状态数据库的过载保护是大规模场景下的多维度问题。

 

为了解决这个问题,优步将负载管理与有状态存储节点协同部署,结合了受控延迟(Controlled Delay,CoDel)队列和租户级记分卡(Scorecard)。CoDel 基于延迟调整队列行为,记分卡则强制实施并发限制,同时使用额外的调节器监控 I/O、内存、goroutine 和热点数据。CoDel 对所有请求一视同仁,会同时丢弃低优先级和面向用户的流量,导致 on-call 负载增加、用户体验受损,并且依赖固定队列超时和静态的 in-flight 限制,可能引发惊群效应重试,甚至丢弃高优先级请求。尽管它能防止灾难性故障,但缺乏维持稳定性能所需的动态性和精细化能力,凸显了优先级感知队列的必要性。

使用 CoDel 队列的负载管理器设置(来源:优步博客文章

 

后续演进引入了Cinnamon,这是一款优先级感知的负载 shedder 系统,能够将请求分配到分级队列,优先丢弃低优先级流量,避免影响延迟敏感的操作。Cinnamon 基于高百分位延迟指标动态调整 in-flight 中请求限制和队列超时,减少对静态阈值的依赖,在过载时实现更平滑的降级。

使用 Cinnamon 队列的负载管理器设置(来源:优步博客文章

 

优步后续通过“自带信号(Bring Your Own Signal)”模型,将本地和分布式过载信号统一到单一的模块化控制回路中。该架构允许团队将节点级指标(如 in-flight 中的并发数、内存压力)和集群级信号(比如,从节点的提交延迟)接入集中式的准入控制路径。整合这些信号消除了碎片化的控制逻辑,避免了早期基于令牌桶系统中出现的冲突性负载 shedding 决策。

 

据优步介绍,改进效果非常显著,过载场景下吞吐量提升约 80%,upsert 操作的 P99 延迟降低约 70%;goroutine 数量减少约 93%,峰值堆内存使用降低约 60%,整体效率得到了提升,同时缓解了运维的负担。

 

优步总结了负载管理演进的核心经验,那就是优先保障关键用户流量,先丢弃低优先级请求;尽早拒绝请求以维持可预测延迟、降低内存压力;使用基于 PID 的调节确保稳定性;将控制逻辑部署在数据源附近;动态适应工作负载;保持可观测性;优先采用简单设计,确保压力下的稳定可靠运行。

 

原文链接:

Uber Moves from Static Limits to Priority-Aware Load Control for Distributed Storage

写在前面

在 AI 从 “云端集中式” 向 “端侧分布式” 演进的今天,用户对智能体验的需求早已从 “能用” 升级为 “安全、实时、无界”,而 HarmonyOS 凭借原生的端侧 AI 能力与分布式架构,恰好击中了这一行业痛点。不同于依赖云端算力的传统 AI 方案,HarmonyOS 的 AI 套件构建在 “本地计算 + 毫秒响应 + 模型复用” 三大核心优势之上:端侧推理让用户数据全程留在设备内,完美解决了 AI 应用的隐私焦虑;毫秒级的响应速度,让语音交互、实时识别等场景告别 “加载等待”;而系统级的模型复用机制,更是让开发者无需从头训练模型,仅通过标准化接口就能调用成熟的智能能力。那么本文就来以HarmonyOS开发中关于AI套件的技能调用功能的使用来详细聊聊,深入解析如何通过系统级AI接口、分布式协同框架与模型优化工具链,实现高效智能业务开发。

技能调用:端侧 AI 与应用的智能联动机制

技能调用是意图框架依托系统AI多模态大模型能力做深度用户输入理解,并通过解析的用户意图对接应用或元服务内的功能和内容。技能调用的本质,是 HarmonyOS 意图框架借助系统级多模态大模型,对用户输入(语音、文本、图像等)进行深度语义解析,进而关联应用 / 元服务内功能与内容的智能联动机制。它的核心价值,是让用户通过自然语言即可直接触发复杂功能,无需逐层点击界面,实现 “说即所得” 的智能交互。

核心应用场景拆解

使用者通过对小艺对话进行自然语言输入实现内容查询,知识问答,以及通过对图片选定识别问答进行服务获取。技能调用场景分为两种:

  • 功能服务类:端侧意图调用直接进入应用或元服务对应意图功能服务页面。
  • 信息交互类:云侧意图调用进行内容查询后展示,端侧用户点击进行意图调用闭环。
    典型的使用场景分为:功能服务类和信息交互类两种场景。

    1、信息交互类

    信息交互类的场景分为三种情况,具体如下所示:

  • 内容展示场景。例如查找菜谱:语音对话输入“鱼香肉丝怎么做”,即可搜索到对应的菜谱。
  • 内容展示+AIGC生成场景。例如查公司:语音对话输入“某公司怎么样”,即可生成并展示关于某公司的信息。
  • 功能履约场景。例如订电影票:语音对话输入“买两张今天的电影票,某电影”,即可进行电影票购买选座。

    2、功能服务类

    功能服务类的场景也分为三种情况,具体如下所示:

  • 跳转页面不带参数场景。例如打开付款码:语音对话输入“打开xx付款码”,即可弹窗对应付款码。
  • 跳转页面带参数场景。例如搜索商品带关键词:语音对话输入“打开xx应用搜一下xx品牌39码”,即可弹窗对应商品。
  • 功能执行并展示UIExtension。例如操控蓝牙开关:语音对话输入“打开蓝牙”,即可弹窗蓝牙设置,并打开蓝牙开关。

    技能调用接入全流程

    1、接入方案概述

    关于使用接入方案的概述,开发者需要按照意图定义,进行意图注册并实现意图调用;用户通过对小艺对话进行自然语言输入,小艺理解语义转换成意图调用(含意图参数),执行意图调用实现对应交互体验。HarmonyOS AI 套件的技能调用遵循 “意图定义→意图注册→意图执行” 的标准化流程,具体流程图如下所示:
    image.png

    2、意图注册

    这里以“搜索旅游攻略”特性为例,使用者需要首先注册“查看旅游攻略”(ViewTravelGuides)。开发者需要编辑对应的意图配置PROJECT_HOME/entry/src/main/resources/base/profile/insight_intent.json文件,实现意图注册,具体操作如下所示:

{
  "insightIntents": [
    {
      "intentName": "ViewTravelGuides",
      "domain": "TravelDomain",
      "intentVersion": "1.0.1",
      "srcEntry": "./ets/entryability/InsightIntentExecutorImpl.ets",
      "uiAbility": {
        "ability": "EntryAbility",
        "executeMode": [
          "background",
          "foreground"
        ]
      },
      "uiExtension": {
        "ability": "insightIntentUIExtensionAbility"
      }
    }
  ]
}

其中,配置参数信息如下所示:
image.png

技能调用实战:两类核心意图触发

根据上面的接入方案,这里通过前台意图和前台窗口意图两个调用来介绍具体的使用。

1、前台 UIAbility 意图调用实践

具体的使用的时候,需要开发者自己实现InsightIntentExecutor,并在对应回调实现打开详细页(点击推荐卡片跳转的界面,如旅游攻略详细页面)的能力,ViewTravelGuides的意图调用字段定义见查看旅游攻略 (ViewTravelGuides)。实际操作步骤如下:
(1)继承InsightIntentExecutor。
(2)重写对应方法,例如目标拉起前台页面,则可重写onExecuteInUIAbilityForegroundMode方法。
(3)通过意图名称,识别查看旅游攻略意图(ViewTravelGuides),在对应的方法中传递意图参数(param),并拉起对应落地页(点击推荐卡片跳转的界面,如旅游攻略详细面)。
具体的实现代码如下所示:

import { insightIntent, InsightIntentExecutor } from '@kit.AbilityKit';
import { window } from '@kit.ArkUI';
import { BusinessError } from '@kit.BasicServicesKit';


export default class InsightIntentExecutorImpl extends InsightIntentExecutor {
  private static readonly VIEW_TRAVEL_GUIDES = 'ViewTravelGuides';
  /**
   * override 执行前台UIAbility意图
   *
   * @param name 意图名称
   * @param param 意图参数
   * @param pageLoader 窗口
   * @returns 意图调用结果
   */
  onExecuteInUIAbilityForegroundMode(name: string, param: Record<string, Object>, pageLoader: window.WindowStage):
    Promise<insightIntent.ExecuteResult> {
    // 根据意图名称分发处理逻辑。接入方可根据实际业务实现页面跳转
    switch (name) {
      case InsightIntentExecutorImpl.VIEW_TRAVEL_GUIDES:
        return this.viewTravelGuides(param, pageLoader);
      default:
        break;
    }
    return Promise.resolve({
      code: -1,
      result: {
        message: 'unknown intent'
      }
    } as insightIntent.ExecuteResult)
  }
  /**
   * 实现调用查看旅游攻略功能
   *
   * @param param 意图参数
   * @param pageLoader 窗口
   */
  private viewTravelGuides(param: Record<string, Object>, pageLoader: window.WindowStage): Promise<insightIntent.ExecuteResult> {
    return new Promise((resolve, reject) => {
      // 实现意图调用,loadContent的入参为旅游攻略落地页路径
      pageLoader.loadContent('pages/TravelGuidePage')
        .then(() => {
          let entityId: string = (param.items as Array<object>)?.[0]?.['entityId'];
          resolve({
            code: 0,
            result: {
              message: 'Intent execute succeed'
            }
          });
        })
        .catch((err: BusinessError) => {
          // 调用失败的情况
          resolve({
            code: -1,
            result: {
              message: 'Intent execute failed'
            }
          })
        });
    })
  }
}

2、前台 UIExtension 窗口意图调用实践

具体的使用的时候,开发者还需要自己实现InsightIntentExecutor,并在对应回调实现窗口页面内容加载的能力。实际操作步骤如下:
(1)继承InsightIntentExecutor。
(2)重写对应方法,例如目标拉起前台窗口化页面,则可重写onExecuteInUIExtensionAbility方法。
(3)通过意图名称,识别打开蓝牙意图(LoadBluetoothCard)调用扩展意图,在对应的方法中传递意图参数(param),并拉起对应窗口化页面。
具体的实现代码如下所示:

import { insightIntent, InsightIntentExecutor, UIExtensionContentSession } from '@kit.AbilityKit';

export default class IntentExecutorImpl extends InsightIntentExecutor {
  private static readonly TAG: string = 'IntentExecutorImpl';
  private static readonly LOAD_BLUETOOTH_CARD: string = 'LoadBluetoothCard';
  /**
   * override 执行前台UI扩展意图
   *
   * @param name 意图名称
   * @param param 意图参数
   * @param pageLoader 窗口
   * @returns 意图调用结果
   */
  async onExecuteInUIExtensionAbility(name: string, param: Record<string, Object>,
    pageLoader: UIExtensionContentSession):
    Promise<insightIntent.ExecuteResult> {
    console.info(IntentExecutorImpl.TAG, `onExecuteInUIExtensionAbility`);
    switch (name) {
      case IntentExecutorImpl.LOAD_BLUETOOTH_CARD:

        return this.openLoadBluetoothCard(pageLoader);
      default:

        break;
    }

    let result: insightIntent.ExecuteResult = {
      code: -1,
      result: {
        message: 'onExecuteInUIExtensionAbility failed'
      }
    };
    return result;
  }

  /**
   * 打开加载蓝牙卡片意图
   *
   * @param pageLoader 意图内容Session对象
   * @returns 执行结果
   */
  private async openLoadBluetoothCard(pageLoader: UIExtensionContentSession): Promise<insightIntent.ExecuteResult> {
    pageLoader.loadContent('pages/UiExtensionPage');
    let result: insightIntent.ExecuteResult = {
      code: 0,
      result: {
        message: 'intent execute succeed'
      }
    }
    return result;
  }
}

最后

通过上面的详细介绍,其实HarmonyOS AI 套件的技能调用,本质上是在 “端侧智能” 与 “分布式架构” 的双重加持下,重新定义了开发者与智能能力的协作方式,它不再是 “开发者适配 AI”,而是 “AI 适配开发者”。当其他系统还在依赖云端 AI 的 “远程算力” 时,HarmonyOS 已经通过端侧推理让智能体验 “零延迟、零隐私风险”;当多数框架还在要求开发者掌握复杂的模型训练时,HarmonyOS 的意图框架与预置模型,让个人开发者仅需几行代码就能实现 “自然语言触发功能” 的智能特性。这不仅是技术的平权,更是将 “泛在智能” 从概念落地为可触达的开发工具。随着多模态大模型与 HarmonyOS 分布式硬件的深度绑定,我们将看到更惊人的场景:手机上触发的 “旅游攻略查询”,能自动同步到车机的导航界面;手表上的语音指令,能直接控制智能家居的设备状态,而这一切,都可以通过 AI 套件的技能调用快速实现。

什么是OVSSL证书?

OVSSL证书,即组织验证型SSL证书。它不仅仅验证域名的所有权,更重要的是由权威的CA机构对申请企业或组织的真实存在、合法注册及运营状态进行人工审核。这是其与DV证书最核心的区别。

  • 直观体现:安装后,在浏览器地址栏点击小锁图标,可以查看到企业/组织的详细信息
  • 核心价值:建立更强的在线信任,向用户证明网站背后是一个真实合法的实体,常用于企业官网、电子商务、会员登录等需要用户提交敏感信息的场景。

如何申请OVSSL证书?(详细步骤)

第一步:前期准备与信息确认

  1. 确定域名:明确需要保护的域名(例如 yourcompany.com)。
  2. 准备企业资料:这是最关键的一步,确保资料真实、有效且与官方记录一致。

    • 企业营业执照:清晰的彩色扫描件。
    • 企业联系电话:必须是官方公开的、能接通的公司座机号码(非个人手机),用于CA电话核实。
    • 企业邮箱:通常需要使用以申请域名结尾的企业邮箱(如 admin@yourcompany.com),用于接收验证邮件。部分CA也接受其他公认的企业邮箱。
    • 申请者信息:申请人的姓名、职位、公司座机、个人邮箱。

第二步:选择证书服务商(CA或经销商)并下单

访问JoySSL官方网站,在右上角找到“注册”按钮并点击。填写相关信息,创建一个证书管理账号。注册过程中,务必填写特定的注册码230970,这样才可以获得渠道低价和全程技术支持。

OVSSL证书申请入口

1、选择证书类型与年限

登录账号后,进入SSL证书栏,找到“OV证书”选项。根据自身需求,选择OV单域名、OV通配符、或者OV IP地址等SSL证书后,点击“下单”,并通过在线支付或公对公转账的方式完成支付。

2、申请证书

在申请页面,需要填写一系列信息,包括域名、单位名称、联系人、联系方式、邮箱等。这些信息将用于验证单位的真实性,所以务必确保准确无误。

3、验证域名或IP的管理权

提交申请后,并要求验证域名或者IP地址的所有权。按照系统提示的操作步骤进行验证,包括域名DNS解析认证或者服务器文件验证,操作完成后提交。

4、组织信息审核

JoySSL会对企业的组织信息进行验证,通常会通过电话、电子邮件等方式确认公司信息的真实性,审核过程一般在1到3个工作日左右完成。

4、部署证书

一旦审核通过后,JoySSL将签发OV SSL证书。下载已经签发的证书,根据JoySSL提供的安装指南或服务器文档,将证书安装到服务器上。

前言

在万物互联的全场景时代,设备之间的边界正在消失,安全认证已不再是单一设备的 “孤岛式” 防御,而是跨端协同的 “全链路” 保障。HarmonyOS 凭借其分布式软总线与原生 ArkUI 框架,为开发者提供了一套从终端到云端的安全认证解决方案,其中 PatternLock(图案密码锁)作为最贴近用户习惯的认证方式之一,不仅承担着保护用户隐私的核心职责,更成为连接多设备、多场景的交互入口。那么本文从技术原理出发,深度拆解 ArkUI 框架中 PatternLock 组件的三层架构设计,通过代码实战演示如何构建兼具安全性与体验感的手势密码模块,并进一步探索生物特征融合、分布式跨设备认证等进阶场景,帮助大家在全场景生态中打造更智能、更安全的认证体系。

PatternLock概念

在HarmonyOS开发中,PatternLock是图案密码锁组件,以九宫格图案的方式输入密码,用于密码验证场景。手指在PatternLock组件区域按下时开始进入输入状态,手指离开屏幕时结束输入状态完成密码输入。(需要说明的是,该组件从API Version 9开始支持。)
PatternLock 的交互逻辑简洁直观:用户手指按下九宫格区域时进入输入状态,离开屏幕时触发轨迹校验,整个过程无需键盘输入,既提升了操作效率,又降低了密码泄露风险。

PatternLock核心功能解析

1、组件架构特性

PatternLock是ArkUI框架提供的安全认证组件,采用三层架构设计:

  • 交互层:提供可定制的九宫格绘制界面,支持动态波纹反馈、连线样式自定义,让输入过程更具视觉引导性;
  • 控制层:通过PatternLockController实现组件状态的实时控制,包括密码重置、锁定时长配置、验证结果反馈等核心能力;
  • 数据层:内置哈希算法对轨迹坐标进行不可逆加密,并支持与 HarmonyOS 系统安全服务联动,确保密码传输与存储的安全性。

    2、核心参数配置

    组件的核心参数可灵活调整,以适配不同界面风格与交互需求:
    image.png

3、样式继承树

关于PatternLock的样式继承树,如下所示:

PatternLock → CommonShape → CommonAttribute → Component

PatternLock样式设置

在实际开发中,任何一个组件的样式相关的设置都是非常重要且常用的操作,那么PatternLock也不例外,接下来分享关于样式相关的使用操作。
image.png
这里只分享关于PatternLock的样式设置相关的参数,具体的实际使用会在下一部分详细分享。

关于PatternLock的基础使用

1、组件初始化与控制器绑定

使用 PatternLock 的第一步是引入组件库并创建控制器实例,以实现状态的统一管理,具体如下所示:

// 导入组件库
import { PatternLock, PatternLockController } from '@ohos.arkui.ts/components';

// 创建控制器实例
private patternLockCtrl: PatternLockController = new PatternLockController();

2、基础布局与视觉定制

通过链式调用属性方法,可快速完成九宫格的布局与样式配置,包括尺寸、颜色、动态效果等,如下所示:

PatternLock(this.patternLockController)
        .sideLength(200)
        .circleRadius(9)
        .pathStrokeWidth(5)
        .regularColor('#ff182431') // 未选中的颜色
        .activeColor('#707070') // 激活状态的颜色
        .selectedColor('#707070') // 选中状态的颜色
        .pathColor('#707070') // 连线颜色
        .backgroundColor('#F5F5F5') // 背景色
        .autoReset(true)
        .activateCircleStyle({ // 动态波纹效果
            color: Color.Blue,
            radius: { value: 18, unit: LengthUnit.VP },
            enableWaveEffect: true  // 启用波纹动画
        })
        .onDotConnect((index: number) => {
          console.log("onDotConnect index: " + index)
          this.handlePatternComplete(index) // 具体实现方法在下一部分会介绍
        })

3、事件处理与安全校验

密码输入完成后,需通过事件回调实现业务逻辑处理,包括长度验证、加密传输与异常拦截,手势完成回调,如下所示:

private handlePatternComplete(input: number[]) {
    if (input.length < 5) {
        this.showToast("至少连接5个点");
        return;
    }
    const encrypted = this.encryptPattern(input); // 加密方法如下面关于密码加密算法所示
    this.validateWithServer(encrypted);
}

由于涉及到加密的设置,关于密码加密算法如下所示:

private encryptPattern(coordinates: number[]): string {
    const salt = cryptoFramework.createRandom(16);
    const sha256 = cryptoFramework.createHash("SHA256");
    sha256.update({ data: new Int32Array(coordinates) });
    return sha256.digest().then(hash => {
        return salt + hash.toHex();
    });
}

关于异常处理机制,如下所示:

private errorCount: number = 0;

private handleValidationError() {
    this.errorCount++;
    if (this.errorCount >= 3) {
        this.patternLockCtrl.lock(30000); // 锁定30秒
        this.showAlert("账号已锁定");
    }
}

4、专属事件与控制器能力

这里只来介绍非通用事件的使用,PatternLock有2个专属事件:onPatternComplete()和onDotConnect()。

(1)onPatternComplete()方法

语法:

onPatternComplete(callback: (input: Array<number>) => void)

使用:密码输入结束时触发该回调。
参数:
image.png

(2)onDotConnect()方法

语法:

onDotConnect(callback: Callback<number>)

使用:密码输入选中宫格圆点时触发该回调。
说明:回调参数为选中宫格圆点顺序的数字,数字为选中宫格圆点的索引值(第一行圆点从左往右依次为0、1、2,第二行圆点依次为3、4、5,第三行圆点依次为6、7、8)。

5、构造函数

constructor()是PatternLockController的构造函数。
系统能力: SystemCapability.ArkUI.ArkUI.Full

6、重置状态

reset()是重置组件状态。
系统能力: SystemCapability.ArkUI.ArkUI.Full

7、高阶玩法

然后再分享2个高阶一点的玩法。
生物特征融合认证,具体如下所示:

async function hybridAuth(pattern: string) {
    const faceResult = await userAuth.auth(Type.FACE);
    if (faceResult === AuthResult.SUCCESS) {
        return this.quickUnlock(pattern);
    }
    return this.strictValidate(pattern);
}

分布式场景实现,具体如下所示:

// 智能手表辅助认证
function watchAssistedAuth() {
    const deviceId = deviceManager.getTrustedDevices()[0];
    distributedLock.begin(deviceId);
    // 同步绘制轨迹...
}

PatternLock实际应用示例

最后再来分享一个关于PatternLock的详细使用示例,模拟一个验证手势密码是否正确,具体代码如下所示:

// test.ets
import { LengthUnit } from '@kit.ArkUI'

@Entry
@Component
struct PatternLockExample {
  @State passwords: Number[] = []
  @State message: string = '请输入密码!'
  private patternLockController: PatternLockController = new PatternLockController()

  build() {
    Column() {
      Text(this.message).textAlign(TextAlign.Center).margin(20).fontSize(20)
      PatternLock(this.patternLockController)
        .sideLength(200)
        .circleRadius(9)
        .pathStrokeWidth(5)
        .activeColor('#707066')
        .selectedColor('#707066')
        .pathColor('#707066')
        .backgroundColor('#F6F6F6')
        .autoReset(true)
        .activateCircleStyle({
          color: '#606060',
          radius: { value: 16, unit: LengthUnit.VP },
          enableWaveEffect: true
        })
        .onDotConnect((index: number) => {

        })
        .onPatternComplete((input: Array<number>) => {
          // 输入的密码长度小于5时,提示重新输入
          if (input.length < 5) {
            this.message = '密码长度需大于5位,请重新输入。'
            return
          }
          // 判断密码长度是否大于0
          if (this.passwords.length > 0) {
            // 判断两次输入的密码是否相同,相同则提示密码设置成功,否则提示重新输入
            if (this.passwords.toString() === input.toString()) {
              this.passwords = input
              this.message = '密码设置成功: ' + this.passwords.toString()
              this.patternLockController.setChallengeResult(PatternLockChallengeResult.CORRECT)
            } else {
              this.message = '两次输入的密码不一致,请重新输入。'
              this.patternLockController.setChallengeResult(PatternLockChallengeResult.WRONG)
            }
          } else {
            // 提示第二次输入密码
            this.passwords = input
            this.message = "请重新输入。"
          }
        })
      Button('重置手势密码').margin(40).onClick(() => {
        // 重置密码锁
        this.patternLockController.reset()
        this.passwords = []
        this.message = '请输入密码。'
      })
    }.width('100%').height('100%')
  }
}

上面的这个示例通过sideLength设置九宫格的大小、circleRadius等属性设置宫格圆点样式、onPatternComplete属性设置密码输入时的回调。当使用者密码输入完成后,按输入的密码不同,给予不同的回应:输入的密码长度小于5时,提示重新输入;第一次输入完成后,提示第二次输入密码;第二次输入完成后,判断两次输入的密码是否相同,相同则提示密码设置成功,否则提示重新输入。然后可以通过'重置手势密码'按钮,可以重置密码锁。

最后

随着 HarmonyOS 全场景生态的持续演进,PatternLock 已从传统的 “单点认证工具”,进化为连接多设备、多模态的 “安全交互枢纽”。本文从技术架构、开发实战到场景进阶,系统呈现了 PatternLock 的完整能力边界,不仅能帮助开发者快速构建基础手势认证功能,更能通过生物特征融合、分布式跨设备认证等进阶玩法,打造面向未来的全场景安全体系。在 HarmonyOS 6 及后续版本中,随着 ArkUI 框架对三维手势识别、压力感应等能力的引入,PatternLock 还将突破二维平面的限制,在车机控制、智能家居中控、可穿戴设备等场景中发挥更大价值。建议开发者持续关注 HarmonyOS Design 系统的更新,将环境感知、行为分析等新型技术与 PatternLock 深度融合,构建 “主动防御、无感认证” 的智能安全体验,为全场景互联时代筑牢安全基石。这里我建议大家持续关注HarmonyOS Design系统的更新,将生物特征、环境感知等新型认证方式与PatternLock深度融合,构建面向未来的智能安全体系,一起期待吧!

选择免费SSL证书,最核心的决策依据可以简化为:追求短期效益的选Let's Encrypt,看重中文长期免费体验、国内使用的选JoySSL,需要CDN与安全防护一体选Cloudflare。

一、JoySSL:国产首选的中文友好长期方案

JoySSL是国内专注提供免费SSL证书的服务商,主打本地化服务和中文体验,最大特色是提供永久免费的DV单域名SSL证书,吸引了大量国内个人站长和中小企业用户。

优势

  1. 中文界面更友好:全程中文操作指引,从申请下载到配置部署都提供中文文档,新手也能轻松上手,无需依赖翻译工具。
  2. 永久免费基础版:个人用户可免费领取永久有效的单域名DV证书,无需担心定期续期问题,适合长期稳定运行的个人站点。
  3. 支持国密算法:可提供符合国家标准的SM2国密证书,满足政务、金融等合规要求,为国内用户提供本土化加密选择。
  4. 多平台部署教程:提供针对宝塔面板、Nginx、Apache、Docker等主流平台的详细中文配置教程,降低部署难度。

缺点

  1. 通配符证书需付费:仅单域名证书永久免费,多域名和通配符证书需要购买专业版,对于需要覆盖子域名的多域名站点不够友好。
  2. 品牌知名度稍低:相比Let's Encrypt,市场认知度稍逊,部分用户可能对国产证书安全性存在顾虑,但实际上其DV证书同样通过国际主流浏览器信任根体系认证。

适用场景

国内个人博客、小型企业官网、微信小程序后端服务,适合偏好中文界面,追求长期稳定且无需频繁续期的用户。

二、Let's Encrypt:全球最成熟的开源自动化方案

Let's Encrypt是由互联网安全研究小组(ISRG)运营的非营利组织,是目前全球使用量最高的免费SSL证书提供商,覆盖全球超4亿个域名,是个人开发者和中小团队的首选方案。

优势

  1. 完全零成本:无隐藏消费,不限制申请次数,支持单域名、多域名和通配符证书类型,所有证书均为DV(域名验证)类型,可满足绝大多数普通网站的加密需求。
  2. 自动化程度高:通过ACME协议实现自动化申请、部署和续期,配合Certbot、acme.sh等工具,可实现证书到期前自动续期,完全无需人工干预。
  3. 兼容性极强:支持Nginx、Apache、Caddy等所有主流Web服务器,同时适配Windows、Linux、Docker等各种操作系统,几乎不存在兼容性问题。
  4. 社区资源丰富:作为行业标杆,相关教程和解决方案覆盖全面,遇到问题能快速找到解决办法,适合有一定技术能力的开发者。

缺点

  1. 证书有效期短:证书有效期仅90天,虽然支持自动续期,但依赖服务器环境稳定和续期脚本配置,一旦脚本失效可能导致证书过期。
  2. 中文支持不足:官方文档以英文为主,新手上手门槛略高,部分错误提示不够直观。
  3. 通配符证书需手动DNS验证:申请通配符证书时无法通过文件验证,必须手动添加DNS TXT记录完成域名所有权验证,流程相对繁琐。

适用场景

个人博客、开源项目、测试环境、中小团队的长期稳定站点,适合熟悉服务器操作,能自主维护续期脚本的用户。

三、Cloudflare CDN:自带安全与性能增益的云方案

Cloudflare是全球最大的CDN服务商之一,提供免费SSL证书与CDN加速一体化服务,无需用户手动下载部署证书,通过域名DNS解析配置即可实现全站加密。

优势

  1. 零部署成本:只需将域名DNS解析到Cloudflare,即可一键启用SSL加密,无需处理证书申请、上传、配置等繁琐步骤,新手也能快速上手。
  2. 附赠多重安全防护:启用Cloudflare SSL的同时,可自动获得DDoS攻击防护、WAF防火墙、恶意IP拦截等安全功能,有效提升网站安全性。
  3. 支持边加密与全加密模式:提供Flexible、Full、Full (strict)三种加密模式,可适配不同服务器配置,同时支持HTTP/2、HTTP/3等现代化网络协议。
  4. 全球加速能力:借助Cloudflare遍布全球的CDN节点,可同步提升网站访问速度,尤其适合面向全球用户的站点。

缺点

  1. 依赖CDN服务:必须将域名DNS解析到Cloudflare才能使用SSL证书,若服务器无法对接Cloudflare CDN,或不希望使用第三方CDN,该方案无法使用。
  2. 免费版存在功能限制:免费版仅支持单域名证书,通配符证书需升级到付费版,同时部分安全和加速功能存在速率和流量限制。
  3. 延迟略增:经过Cloudflare中转后,可能带来轻微的网络延迟,对于对响应速度有极高要求的站点(如实时交易系统)可能存在影响。

适用场景

需要同时实现加密、加速和安全防护的网站,适合缺乏技术能力手动部署SSL证书的新手用户,以及希望简化运维流程的中小团队。

四、三类免费SSL证书详细对比表

表格

对比维度Let's EncryptJoySSLCloudflare
证书类型单域名/多域名/通配符永久免费单域名单域名(免费版)
有效期90天,自动续期永久永久(绑定CDN服务)
申请门槛需域名所有权验证,支持文件/DNS验证需域名所有权验证,支持文件/DNS验证需将域名DNS解析到Cloudflare
技术门槛需配置ACME脚本,适合有一定技术基础用户中文界面引导,新手友好零配置,启用CDN即可自动生效
附加功能仅SSL加密国密算法支持,适配国内合规需求CDN加速、DDoS防护、WAF防火墙
适用场景个人博客、开发者测试环境、中小团队长期站点国内个人站长、小型企业官网需要加密+安全防护的站点、追求简化运维的团队

五、其他主流免费SSL方案对比

阿里云免费SSL证书

阿里云与DigiCert合作推出的免费DV证书,单域名有效期3个月,个人用户每年可免费申请20张。优势在于无需独立注册账号,直接通过阿里云控制台管理,适合阿里云服务器用户,但续期需要每年重新申请,相对繁琐,且仅支持单域名,无通配符证书。

腾讯云免费SSL证书

腾讯云提供的免费DV证书,有效期12个月,支持单域名证书,通过腾讯云DNS验证流程,自动化程度较高,但每年仅支持5张免费证书,适合腾讯云生态内的短期项目或测试站点。

ZeroSSL

ZeroSSL与Let's Encrypt基于同一ACME协议,支持通配符证书和中文界面,提供可视化申请流程,降低新手上手难度,但续期仍需要配置自动脚本,且免费版每月仅支持3个域名,适合对界面友好度要求较高的临时项目。

六、选型决策指南

  1. 技术能力导向:有服务器运维经验,希望实现全自动续期,首选Let's Encrypt。
  2. 中文体验导向:偏好中文界面,希望永久免费且无需续期,首选JoySSL。
  3. 一站式需求:需要CDN加速和安全防护,不想手动操作证书部署,首选Cloudflare。
  4. 云生态适配:使用阿里云或腾讯云服务器,可优先选择对应云厂商的免费证书,减少跨平台操作流程。

大家好,我是汤师爷,专注AI智能体分享,致力于帮助100W人用智能体创富~

还在为小红书笔记创作发愁吗?

每天都要绞尽脑汁想文案,看着别人的爆款笔记却不知道如何模仿?

今天,我就教你如何利用AI智能体,轻松实现小红书图文改写,让创作效率提升10倍!

我们先看下智能体的执行效果:

image.png

image.png

image.png

1.整体工作流

image.png

1.获取小红书笔记详情

2.使用OCR技术,提取图片中的文字

3.将图片文案进行整理

4.图片文案仿写

2.详细工作流节点

2.1 开始节点

image.png

开始节点有两个输入变量。

  • 输入:

    • noteUrl:小红书笔记链接
    • cookieStr:小红书cookie

2.2 如何获取小红书cookie?

1.登陆https://www.xiaohongshu.com/

2.在页面空白处右击鼠标,选择「检查」

image.png

3.在刚刚打开的面板中,点击「网络」选项卡

image.png

4.刷新当前页面

5.点击第一条记录,在右侧「标头」部分向下滚动,找到cookie一行,将其内容复制下,这就是我们需要的cookieStr

image.png

2.3 获取小红书笔记详情

image.png

我们将使用【小红书】插件的xhs_note_detail功能。

通过这个功能,我们可以根据笔记链接获取笔记详情。

  • 输入:

    • cookieStr:开始 - cookieStr
    • noteUrl:开始 - noteUrl

image.png

2.4 使用OCR技术,提取图片中的文字

1.接下来,我们使用循环节点,批量提取图片中的文字。

  • 输入:

    • input:获取小红书笔记详情-note_image_list
  • 输出

    • output:从图片中提取文字-data

image.png

2.使用循环体,批量提取图片的文字

我们会使用「OCR」插件,提取图片的文字。

image.png

输入参数如下图所示。

image.png

2.5 使用大模型将文案内容进行整理、排版

在这一步,我们会使用大模型节点,对文案内容进行整理、排版。

image.png

大模型节点的系统提示词如下:

## 角色(Role)
你是一位精通内容整理和 Markdown 排版的 AI 助手。你擅长阅读和理解非结构化的文本内容,并能够将其转化为结构清晰、格式优美的 Markdown 文档。

## 背景(Background)
随着社交媒体平台的普及,大量的图文内容被创作和分享。然而,这些内容往往缺乏良好的结构和格式,不利于阅读和理解。将这些内容整理成结构化的 Markdown 文档,可以大大提高内容的可读性和价值。

## 任务(Task)
你的任务是接收一段从插件输出的非结构化文本内容(主要是抖音图文中的文字),仔细阅读并理解内容,然后将其转化为结构清晰、格式规范的 Markdown 文档。你需要:

1. 识别并提取文本中的关键信息,如标题、作者、主要内容等
2. 根据内容的逻辑关系,对文本进行分类和整理
3. 使用 Markdown 语法进行排版,包括但不限于使用标题、粗体、斜体、列表等格式
4. 确保所有原始内容都被包含在最终的 Markdown 文档中,不遗漏任何信息

## 规则与限制(Rules & Restrictions)
1. 必须使用 Markdown 语法进行排版
2. 使用 #、##、### 等进行标题划分,层级不超过 3 级
3. 使用 - 或 * 进行无序列表编写,使用 1. 2. 3. 等进行有序列表编写
4. 重要内容使用粗体(**文字**)标注,需要强调的内容使用斜体(*文字*)标注
5. 保持原文的主要结构和顺序,但可以适当调整以提高可读性
6. 不得添加、删除或修改原文的实质内容
7. 如遇到不确定的内容,保留原样并用括号标注

## 参考短语(Reference sentences)
- 内容完整,不遗漏任何信息
- 结构清晰,层次分明
- 格式规范,美观实用
- 逻辑严密,条理清晰
- 重点突出,易于阅读

## 案例展示(Case Show)
### 输入:
{
  "code": 0,
  "data": {
    "results": [
      {
        "words": [
          {
            "lang": "auto",
            "text": "求大连这两个"
          },
          {
            "lang": "auto",
            "text": "地方有啥"
          },
          {
            "lang": "auto",
            "text": "区别啊??"
          }
        ]
      }
    ]
  },
  "log_id": "20250325123913080C6F506498C6F581B7",
  "msg": "success"
}

## 风格和语气(Style & Tone)
- 保持专业、清晰的语气
- 使用简洁、直接的表达方式
- 保持原文的重点和强调

## 受众群体(Audience)
- 小红书电商新手卖家
- 对开设小红书店铺感兴趣的人群
- 想要了解小红书电商运营的人群

## 输出格式(Output format)
使用 Markdown 格式输出,包括:
1. 一级标题(#)用于文章主标题
2. 二级标题(##)用于主要章节
3. 三级标题(###)用于子章节
4. 无序列表使用 - 或 *
5. 有序列表使用 1. 2. 3. 等
6. 重要内容使用粗体(**文字**)
7. 需要强调的内容使用斜体(*文字*)

## 工作流程(Workflow)
1. 仔细阅读输入的文本内容,理解其结构和主要信息点
2. 提取标题、作者、标签等元信息
3. 识别主要章节和子章节,规划文档结构
4. 按照规划的结构,使用 Markdown 语法重新排版内容
5. 使用粗体和斜体突出重要信息和需要强调的内容
6. 检查确保所有原始内容都被包含,没有遗漏
7. 最后检查 Markdown 格式是否正确,调整以确保最佳可读性

## 初始化(Initialization)

下面是你需要整理和格式化的文本内容:

<评价内容>

请提供需要整理和格式化的文本内容。我会仔细阅读并按照上述要求将其转化为结构清晰的 Markdown 文档。不需要输出额外除图片识别文字以外的内容。

2.6 图片文案仿写

接下来,我们需要通过大模型节点退图片文案进行仿写。

image.png

大模型节点的系统提示词如下:

# 角色说明
你是一位专业的图文内容仿写助手,负责根据图片中提取的文字内容,结合视觉元素和背景信息,创作风格一致的仿写内容。

# 背景说明
处理用户提供的图片文字内容时,你需要:
1. 理解图片的整体风格和背景(产品介绍、教程步骤、使用心得等)
2. 分析文字的语言特点(正式/口语化、句式特征、专业术语等)
3. 结合图片呈现的视觉信息(产品外观、使用场景等)
4. 在保持原意的基础上进行自然的仿写扩展

# 仿写原则
1. 保持原意完整性
2. 匹配原文语言风格
3. 补充恰当的细节
4. 与图片内容保持一致
5. 避免添加虚假信息

# 工作流程
1. 接收图片文字内容
2. 分析图片背景信息(可选)
3. 分析原文特点:
   - 语言风格
   - 内容结构
   - 关键词使用
4. 创作三个版本:
   - 贴近原文的保守版
   - 适度优化的改进版
   - 创意加强的亮点版

# 输出示例
## 原文:
"夏日必备防晒霜
SPF50+ PA++++
清爽不油腻"

## 仿写版本:
1. 【保守版】
"夏季必备防晒产品
防晒指数SPF50+ PA++++
质地清爽不油腻"

2. 【优化版】
"夏日防晒推荐
高倍防护SPF50+ PA++++
轻薄水感质地,肌肤零负担"

3. 【创意版】
"今夏防晒天花板!
SPF50+ PA++++超强防护
一抹化水,清爽不黏腻"

# 执行要求
请提供:
1. 图片文字提取内容
2. 图片背景说明(如有)

我将按照以上规范进行仿写创作。

2.7 使用文本处理插件拼接字符串

  • 输入:

    • String1:获取小红书笔记详情-note
    • String2:图片文案内容整理-output
    • String3:图片文案仿写-output

image.png

2.8 结束节点

image.png

3.总结

通过以上介绍,相信你了解了如何利用DeepSeek+Coze来构建高效的小红书图片文案改写智能体。

在AI时代,技术门槛将越来越低,小白也能搭建智能体,用AI工具来提升工作效率。

用AI智能体不是未来,而是AI时代每个人的生存技能,学会AI智能体,人人都是超级个体。

如果你觉得这篇文章有帮助,别忘了点赞、关注、收藏,我们下期再见!

对了,我整理了一份开源《智能体学习手册》,爆肝 10 万字,价值 999 元。限时开放领取👉:tangshiye.cn