创建了一个新节点, ASMR,可以在这里分享你听过、看过、收藏过的 ASMR 创作者、频道或作品——包括助眠音、环境音、角色扮演、耳语、敲击、理发模拟、白噪音等各类触发类型
本节点不提倡分享、传播无版权的音视频文件。
可以通过提供官方视频平台链接的方式。
希望这里成为一个 尊重创作者、长期可持续发展的 ASMR 社区。
xiaohack博客专注前沿科技动态与实用技术干货分享,涵盖 AI 代理、大模型应用、编程工具、文档解析、SEO 实战、自动化部署等内容,提供开源项目教程、科技资讯日报、工具使用指南,助力开发者、AI 爱好者获取前沿技术与实战经验。
以下内容纯发泄,因为我真的不知道怎么样才能宣泄我的负面情绪。
我毕业于一所“有名”二本学校,当然,这个有名是负面的,不过和本次话题没啥关系。期间认识了不少朋友,甚至还有大牛。
14 年年底大四去了杭州一家独角兽公司实习写 Nodejs 。公司发展从小到大,最后又从盛道衰。实习到 15 年 5 月,正式毕业,也就是转试用。工资只有 6k ,并且三个月实习期只有 80%。后来我才知道同期一起实习的 iOS 开发同事,他们的试用工资百分百。
期间还有一件搞笑的事,按照规定,实习时间超过 3 个月的员工可以申请提前申请结束试用期。结果我报给我们 boss 之后,一直没有消息。直到一个月后告诉我,他忘了。然后说,反正你试用还有一个月,就别去申请了。
就这样迷迷糊糊干了两三年,老同事加薪的加薪,离职的离职。我干到三四年,结果好像税前就 9k 工资?反正很低。公司业务也认真做了,也没出过啥问题。当时觉得就那样吧。结果还是一个后辈 (职位比我高)看不下去了,说干了这么多年还是入门 P ,硬生生帮我提升了 P 级。才勉强过了万工资。
现在想想,当时自己都是懵逼的,甚至都没有请他吃个饭什么的。感觉自己当年在杭州,就是个机器人一样。
后来那个后辈离职了。
期间出了一次事,客户投诉我们对接服务不积极,响应差。
其实当时是我和别的部门一起对接的,相应差是别的部门回复慢。
可是一群人走到一起开会,结果却开始变成批判性的会议,批判的内容全是我负责的内容。对,不去问到底是谁响应客户慢,不去问到底客户投诉什么内容。全部变成了我负责的项目。但当时的我选择了避让。
然后过了半年,我又吃了一个 3.25 okr ,然后被 hr 告知,我被开除了。
之前已经有一次 okr 了,理由其实就是迟到早退(上班的确迟到,但是下班其实是六点,只不过企业文化就是加班。实际上我回家也是需要处理对应的业务,只不过当时公司网络太糟糕,不想呆在公司)。
这个我其实也能接受,本质上的确是我的考勤问题比较差,况且我第二年也准备回老家宁波。
只是说起原因,我的 boss 轻描淡写的说了句:除了考勤比较差,也出现和客户沟通出现不好的情况。
我当时:??? 敢情你们他妈把那件事全部甩在我头上了??
先说当时批判会,我这个顶头 boss 没参加,但是类似我们的一个组长参加了。当时和他的关系相当不好,很大程度是不喜欢他的性格和风格,个人觉得偏向作秀。可是他和 boss 的关系特别好,属于私交。
也就是,在我不知道的情况下,我完全被背了这个锅。
回想起在这家公司的这几年,其实自己磕磕绊绊已经走的相当辛苦了。原本实习的时候,接手的是公司的一个核心项目,结果其他的同事要么离职,要么转手去做别的项目。搞笑的在我实习期还没结束的时候,我已经是这个项目最核心的开发了。
结果烂摊子我收拾,有业绩有面子的新项目都被别人分走。这我也能理解,毕竟也有我自己的能力不足的问题。
19 年年底被开除,因为房租没到期并且还有别的原因,待到了 20 年 7 月。本想着期间能找个工作应付下,可是却刚好遇到疫情。
20 年之后疫情缓和了点,尝试找个工作。期间有个插曲,去面试一家 .net 公司,我说我没 .net 开发经验,但是我很擅长学习,而且有五年开发经验。一般实习生 3k 工资,你这边单休,我要个 3.5k 不过分吧。然后被拒了。
原本觉得 nodejs 工作比较难找,又听说宁波本地的公司比较低。结果碰巧现在的公司招 node ,就把我拉过去干活。
其实现在的公司干的也还好, 为了避免发生以前的问题。我极力去缓和和同事之间的关系。
nodejs 干了两年。结果 nodejs 项目少了,我主动把仅剩的项目让给其他同事。自己接受去写 Java 。
我接受代码的能力和学习能力其实不错,虽然之前没写过 Java ,但是基本马上就可以入手开发。然后就写了三年。
虽然没有系统性的学写 Java ,但是配合我多年开发经验,我能写出功能完善,结构合理的项目代码。
其实到这时候我觉得还是不错的。即使我身边的朋友在杭州,在上海,在别的地方,可能都是我好几倍的工资。因为我一直认为宁波程序员的工资比较低。
直到我在帮同事处理问题,不小心瞄到 hr 给他发的平均工资。对,即使他比我晚入职(但是他是 Java 开发入职的,并且开发 Java 时间比我久)。但是他薪资还比我高一千。
我真的破防了。
我不认为我业务干的差,或者我的能力比别人差。相反,我在公司的业务干的比谁都好。
我不仅帮忙公司的服务器搭建调试,还经常帮助别的同事解决问题。即使我写 Java 的时间短。但是我可以自信的说,除了架构师之外,我是代码写的最棒的一个。除了会 Java ,我也会 Node ,甚至前端也多少会一点。所以经常帮忙解决前后端协调问题。
即使是这样。
即使我的同事代码水平不如我,业务能力也不如我,甚至我解决 bug 的效率都是最高的。
他的薪资依然比我高。
哪怕他薪资和我一样,我都可以接受啊。
我真的不知道问题出在哪边。难道真的是我运气真的比较差吗?
我身边的朋友,在阿里、在字节、在微软,拿着高薪。我理解我做不到他们那样,因为我不够努力,也没有天赋。
可是,即使在这样的一家小公司,我为什么在公司拿的工资都是最低一档???
我现在想着换一个工作了,虽然这一切看起来莫名其妙。
公司环境也不错,双休,还支持弹性工作制。
但是我真的接受不了,为什么我的工资连一个能力比较普通的同事都不如。
马上到三月,我就正式 34 了,连传说中的斩杀线也只剩一年。
换新工作,能不能找到是一个问题,能不能承受也是一个问题。
我真的不知道我该怎么办了
Android的瘦LTO构建绝非传统编译优化的简单升级,而是通过对符号依赖的精准画像与模块关联的动态重构,在保留代码逻辑完整性的前提下,实现编译产物的结构化精简—它不再对全量代码进行无差别优化,而是聚焦启动阶段的核心执行路径,筛选出必须即时加载的关键符号与依赖单元,剥离非必要的冗余代码与关联引用,让应用启动时的代码加载体积与解析耗时实现双重压缩。而Swift重写Apple集成层的核心价值,在于用原生语言的语义特性替代跨语言适配的中间桥接链路,让集成层与Apple系统底层API形成直接的能力对接,消除启动过程中因语言转换、接口适配带来的延迟损耗。这两项技术的联动优化,并非单端独立的性能修补,而是跨平台架构下编译逻辑与集成层设计的深度协同—Android端通过瘦LTO优化启动时的代码加载效率,减少CPU在初始化阶段的计算压力;Apple端借助Swift的运行时优势压缩集成层的初始化链路,降低内存分配与系统调用的延迟,双端形成互补的优化闭环,从编译产物到运行时执行的全流程破解启动性能与跨平台兼容性的核心矛盾。这种优化思路跳出了“单点调优”的传统框架,聚焦跨端启动的本质痛点,通过编译层与集成层的双向革新,让启动性能的提升具备可复制的方法论与规模化落地的可能,为复杂跨平台应用的性能升级提供了全新的技术路径。 瘦LTO构建的核心竞争力,在于其对编译优化的精准化与高效化革新,它摒弃了全量LTO模式下资源密集型的全局优化逻辑,转而采用分层处理与关键路径聚焦的优化策略,在保证启动性能提升的同时,规避了全量优化带来的编译周期延长问题。在实际优化实践中,瘦LTO的落地需要先完成启动链路的全景解构—通过对应用启动流程的逐环节分析,明确初始化阶段必须加载的核心模块、服务依赖与调用关系,建立启动关键路径的可视化图谱。在此基础上,针对性配置瘦LTO的优化粒度:对于启动时即时初始化的核心服务,如基础配置加载、权限校验、核心功能初始化等模块,进行深度优化处理,包括合并重复调用逻辑、消除无效依赖引用、优化函数执行链路,让代码执行更紧凑高效;对于启动后才按需加载的功能模块,如非核心业务组件、设置页面、辅助工具等,则保持基础编译状态,仅进行必要的符号精简,避免过度优化带来的资源消耗。这种差异化优化策略,既确保了启动关键路径的加载效率,又控制了整体编译开销。在复杂应用场景中,瘦LTO还能与编译缓存机制形成高效协同—通过缓存优化后的中间产物,在后续迭代构建中仅对变更模块进行增量优化,大幅缩短编译周期,同时确保每次构建的优化效果一致性,让启动性能的提升具备稳定可复现的特性。这种精准化的编译优化思路,打破了“优化效果与编译效率不可兼得”的固有认知,实现了编译产物精简、加载效率提升、编译周期可控的三重增益,成为Android端启动性能优化的核心支撑。 Swift重写Apple集成层的优化逻辑,本质是通过语言原生特性与系统生态的深度耦合,重构跨平台能力的适配链路,彻底替代传统依赖中间桥接层的实现模式,从根源上消除跨语言适配带来的启动损耗。传统跨平台应用的Apple集成层,往往为了兼容多语言调用逻辑,引入大量的接口转换代码、数据格式适配模块与中间调度层,这些冗余链路在启动阶段会产生显著的性能开销—数据在不同语言类型间的转换消耗内存与CPU资源,中间层的调度延迟拉长了初始化周期,同时增加了系统调用的不确定性。Swift作为Apple生态的原生语言,具备与系统底层API的天然适配优势,能够直接调用核心系统能力,省去中间转换环节,让集成层的初始化逻辑更贴合系统的运行时调度机制,实现更高效的能力衔接。实践过程中,重写工作需聚焦两个核心维度:一是集成层的语义对齐,在保持跨平台核心能力一致性的前提下,用Swift的原生语法重构适配逻辑,最大化利用语言的内存管理特性—例如通过值类型优化减少启动时的内存分配与释放操作,避免引用计数带来的额外开销;利用函数派发优化提升调用效率,让核心接口的响应速度更快捷。二是初始化流程的拆分与延迟加载,将集成层的功能模块按启动优先级进行划分,仅保留核心能力的即时初始化,如基础配置适配、系统权限对接等必须在启动阶段完成的逻辑,而将非核心的适配功能,如统计上报、第三方服务对接等,通过懒加载机制延迟到启动完成后执行,进一步压缩启动耗时。这种原生适配的思路,让集成层从启动流程中的“阻滞点”转变为“助推器”,在保证跨平台兼容性的同时,实现了启动性能的质的飞跃。 Android瘦LTO构建与Swift重写Apple集成层的协同优化,核心在于构建覆盖跨端启动全流程的性能优化闭环,让双端的优化策略形成互补效应,而非孤立的单端升级。Android端通过瘦LTO构建,削减了启动时的代码加载体积与解析耗时,减少了CPU在初始化阶段的计算压力,让核心服务能够更快完成启动准备;Apple端借助Swift重写的集成层,压缩了跨语言适配的中间链路,优化了内存分配效率与系统调用延迟,让集成层的初始化更高效。这种双端协同并非简单的功能叠加,而是基于跨平台应用启动共性逻辑的深度适配—无论是Android的代码加载流程,还是Apple的集成层初始化链路,本质上都是对启动资源的调度与利用,两项技术分别从编译端与运行端切入,形成覆盖“编译产物优化-代码加载加速-集成层初始化精简-系统能力对接高效”的全流程优化体系。实践中,协同优化的落地需要先统一双端的启动性能优化目标,明确核心指标的基准线,例如启动完成时间、初始化阶段的CPU占用、内存峰值等,再根据双端的技术特性制定差异化的优化策略:Android端侧重通过瘦LTO实现编译产物的精简化,缩短代码加载与解析路径,同时优化启动时的资源调度优先级;Apple端聚焦通过Swift的原生优势压缩集成层的初始化链路,减少中间环节的性能损耗,提升系统API的调用效率。通过这种协同设计,跨平台应用能够在双端同时获得启动性能的跃升,避免单端优化导致的用户体验失衡,让不同设备上的启动流程都能保持流畅高效,真正实现跨端启动体验的一致性与高性能。 启动性能的深度优化,离不开对技术细节的精准把控与场景化的动态适配,瘦LTO构建与Swift重写的落地过程,并非一成不变的标准化流程,而是需要根据应用的实际场景与架构特点进行灵活调整。对于瘦LTO构建而言,优化粒度的选择是关键—过粗的优化会导致启动关键路径的优化不充分,无法达到预期的性能提升效果;过细的优化则可能引入不必要的编译开销,延长构建周期,甚至影响代码的稳定性。因此,在实际操作中,需要借助启动链路分析工具,精准定位每个模块在启动阶段的加载耗时、依赖关系与资源占用情况,建立模块级别的性能画像,再针对性配置优化范围:对启动时首先加载的核心框架,如基础库、路由管理、核心服务等,进行最大程度的优化,合并重复符号,消除循环依赖,优化函数执行逻辑;对后续按需加载的功能模块,如非核心业务组件、多媒体处理、扩展功能等,则采用轻量级优化策略,仅保留必要的符号与依赖,避免过度优化带来的资源消耗。在Swift重写集成层的过程中,集成层的拆分逻辑同样需要贴合应用的启动流程,将必须在启动阶段完成的适配逻辑,如基础配置同步、系统权限申请、核心能力对接等,与可延迟的功能解耦,通过懒加载机制将非必要的适配逻辑延迟到启动完成后执行。同时,需充分利用Swift的编译优化特性,如模块间的接口精简、无用代码自动剔除、编译期常量折叠等,让集成层的产物体积更小巧,加载更快速。这种场景化的精准优化,避免了“一刀切”的优化模式带来的局限性,让每项技术的优势都能在关键场景中充分发挥,实现启动性能的最大化提升,体现了技术优化从“广谱适配”到“精准赋能”的进阶思维。 瘦LTO构建与Swift重写Apple集成层的优化实践,其长远价值远不止于启动性能的即时提升,更在于为跨平台应用构建了可扩展、可迭代的性能优化体系与技术底座。瘦LTO带来的编译链路优化思路,不仅适用于启动性能的提升,还能延伸到应用运行时的内存占用控制、CPU效率优化与功耗降低—通过持续优化编译产物的结构,让代码执行更高效,资源利用更合理,为应用全生命周期的性能表现奠定坚实基础。而Swift重写的集成层,凭借语言的原生优势与系统兼容性,大幅降低了后续功能迭代的适配成本与维护难度——Swift与Apple系统的深度耦合,让集成层能够快速响应系统版本的更新与API的迭代,无需频繁进行跨语言适配调整;同时,原生代码的可读性与可维护性更强,减少了后续迭代中的技术债务。
URP以轻量化、跨平台为核心诉求,在资源调度上追求极致精简,适配移动端、主机等多终端的硬件限制;而HDRP则聚焦高清渲染,在光照计算、材质表现上堆砌复杂逻辑,专为高端PC与次世代主机打造。这种定位差异导致两条管线在核心架构、资源管理、效果实现上形成难以逾越的壁垒,开发者往往需要为不同管线单独构建内容、适配逻辑,既增加了开发成本,也让跨平台体验的一致性大打折扣。共享Render Graph与统一光线追踪API的出现,并非简单的功能叠加或参数调优,而是对渲染逻辑的深层重构,其核心在于构建一套脱离管线专属限制的通用渲染语言。这种语言让HDRP的高品质光照计算不再依赖专属的管线架构,而是能通过Render Graph的资源适配与调度优化,以符合URP性能基线的方式落地;同时,URP的跨平台灵活性也不再局限于基础渲染能力,而是能通过统一光线追踪API,承载HDRP级别的复杂场景光照交互。在长期的技术探索中发现,管线间的差距本质上是资源管理逻辑与效果计算范式的割裂—URP为追求效率简化了资源依赖解析,HDRP为实现品质强化了专属计算模块,而共享Render Graph通过对渲染流程的节点化抽象,将资源分配、Pass调度、依赖解析等核心逻辑抽离为独立层,让两条管线能基于同一套底层规则管理资源;统一光线追踪API则打破了光照计算的管线专属限制,让实时光线追踪从HDRP的“高端配置”转变为可根据硬件能力动态适配的“通用功能”。这种转变要求开发者跳出“为URP添加高清功能”或“为HDRP做性能裁剪”的传统思维,转而从渲染本质出发,让两条管线基于同一套核心逻辑,按需组合渲染模块,实现从移动端到高端PC的无缝能力伸缩,最终达成“性能与品质并行不悖”的渲染目标。 共享Render Graph的核心价值,在于构建了一套标准化的渲染资源语义映射体系,让URP与HDRP能精准理解彼此的资源描述规则,从而实现跨管线的资源复用与流程互通,彻底改变了传统管线中资源壁垒林立的局面。在传统开发模式中,URP为适配移动端硬件,采用紧凑的纹理压缩格式与精简的缓冲布局,而HDRP为追求高清表现,使用高精度纹理与复杂的缓冲结构,这种差异导致同一材质资源在两条管线中需要重复构建适配逻辑,不仅增加了开发工作量,还容易出现资源不一致的问题。共享Render Graph通过抽象资源的核心属性描述与使用场景,将资源的具体实现细节与上层渲染逻辑解耦—无论管线对资源的精度要求、压缩格式有何差异,都能通过统一的资源接口进行调用,Render Graph则在底层自动完成适配转换。例如,在处理复杂场景的多Pass渲染时,HDRP为实现全局光照计算生成的高精度光照贴图,可通过Render Graph的资源适配层,自动转换为URP可高效采样的压缩格式,无需额外添加格式转换Pass,既减少了性能开销,又保证了光照效果的一致性;同样,URP针对移动端优化的纹理流式加载逻辑,也能被HDRP复用,在高清场景中根据硬件内存情况动态加载纹理资源,有效降低内存占用压力。更重要的是,Render Graph的节点化架构让渲染流程具备了模块化重组能力,HDRP中包含的环境光遮蔽、屏幕空间反射、体积雾等复杂后处理链路,可拆分为独立的功能节点,URP可根据自身性能预算,选择性启用核心节点,省略高精度计算步骤,无需重新设计整套后处理管线。这种模块化复用不仅大幅降低了两条管线的功能差距,还提升了开发效率—开发者只需维护一套核心渲染流程节点,即可通过Render Graph的适配逻辑,自动适配两条管线的性能与品质需求,让URP的渲染效果向HDRP靠拢,同时保持自身轻量化的核心优势。在实际技术探索中还发现,Render Graph的资源依赖解析能力,能有效解决跨管线渲染中的资源冲突问题,例如当两条管线同时调用同一材质资源时,Render Graph会根据当前管线的渲染上下文,自动分配对应的资源实例,避免出现资源竞争或格式不兼容的情况,进一步强化了管线间的协同能力。 统一光线追踪API的关键突破,在于实现了光照计算的范式归一,让URP与HDRP能基于同一套光线行为描述逻辑,达成光照效果的一致性与性能的差异化适配,彻底改变了此前两条管线光照表现泾渭分明的局面。在此之前,HDRP的光线追踪依赖专属的光照计算管线,支持复杂的光线反弹、材质交互与全局光照采样,能呈现出逼真的阴影、反射与折射效果,但计算开销巨大,仅能在高端硬件上运行;而URP受限于性能预算,无法承载完整的光线追踪计算,仅能通过屏幕空间近似算法模拟简单光照效果,导致两条管线的光照表现存在本质差距,同一场景在不同管线中呈现出截然不同的视觉质感。统一光线追踪API通过抽象光线的发射、相交、着色等核心行为,构建了一套与管线无关的光照计算模型,让光线追踪的核心逻辑脱离管线专属实现,成为一套可灵活适配的通用能力。在实际应用中,这套API会根据管线的性能目标与硬件能力,动态调整计算精度与采样策略:在HDRP中,光线可支持多轮反弹与复杂材质采样,充分发挥高端PC与次世代主机的计算潜能,呈现出电影级的光照质感;在URP中,则通过一系列智能化优化—如光线采样策略动态调整,优先采样对视觉影响显著的区域;反弹次数自适应控制,根据场景复杂度与硬件性能动态调整反弹轮次;加速结构简化,采用更紧凑的空间划分算法—在保证光照效果合理性的前提下,将计算开销控制在移动端与中端PC可承受的范围。这种适配并非简单的参数削减,而是基于硬件能力的智能决策,例如在移动设备上,API会自动将全局光线追踪转为局部关键区域的光线查询,结合屏幕空间信息补全光照细节,让URP的光照表现既符合性能要求,又能无限接近HDRP的视觉质感;在中端PC上,则可启用有限次数的光线反弹,平衡效果与性能。此外,统一API还实现了光照数据的跨管线互通,HDRP中烘焙的光线追踪加速结构,可通过API的适配层转换为URP可高效使用的简化版本,减少重复计算开销,让两条管线在光照计算上实现能力同源,进一步缩小了视觉差距。 场景描述体系的统一,是缩小URP与HDRP差距的重要支撑,共享Render Graph与统一光线追踪API共同构建了一套可跨管线解析的场景语义规范,让复杂场景的描述不再依赖特定管线的专属逻辑,实现了场景资源的一次创建、多管线复用。在传统开发流程中,HDRP的复杂场景通常包含大量高精度几何信息、分层材质属性与全局光照参数,这些信息往往针对HDRP的渲染架构进行优化,无法直接被URP解析,导致同一场景在两条管线中需要重新配置—URP需简化几何模型、削减材质层数、调整光照参数,不仅耗时耗力,还容易导致场景效果失真;而共享Render Graph通过对场景元素的结构化描述,将几何数据、材质属性、光照信息等拆分为独立的语义单元,每条管线可根据自身能力解析对应的语义层级,无需对场景资源进行破坏性修改。例如,HDRP中使用的多层材质,包含基础颜色、粗糙度、金属度、次表面散射等多个属性层,在URP中,Render Graph会通过语义适配,自动提取基础颜色、粗糙度等核心属性,忽略次表面散射等高精度细节,同时保留材质的核心视觉特征,让材质在URP中既符合性能要求,又能保持与HDRP一致的视觉风格;而URP中的简化几何模型,在HDRP中可通过API自动补充细节层次,如添加高模细节贴图、启用几何细分,满足高清渲染需求。统一光线追踪API则进一步强化了场景的光照交互一致性,无论是URP的轻量化场景还是HDRP的高精度场景,光线与物体的相交判定、材质反射计算都遵循同一套语义规则,确保在不同管线中,光照对场景氛围的影响保持一致—例如同一光源照射下,物体的阴影形状、反射强度、颜色衰减在两条管线中呈现出高度统一的效果,避免了跨管线体验的割裂感。这种场景语义的统一,让开发者无需为两条管线单独构建场景资源,只需维护一套核心场景描述,Render Graph与光线追踪API会自动完成适配转换,大幅降低了跨管线开发的复杂度;同时,场景资源的复用也让URP的场景表现力得到显著提升,原本只能在HDRP中呈现的复杂场景细节,如今可通过语义适配在URP中高效呈现,进一步缩小了两条管线的视觉差距。 着色器生态的协同演进,是弥合URP与HDRP差距的关键环节,共享Render Graph与统一光线追踪API为两条管线提供了可互通的着色器开发框架,让高品质着色逻辑能在两条管线中高效复用,彻底改变了此前着色器开发“管线专属”的局面。在此之前,HDRP的着色器支持复杂的次表面散射、屏幕空间反射、多层材质混合等高级效果,这些效果的实现依赖HDRP专属的光照计算管线与资源调度逻辑;而URP的着色器受限于性能预算,往往只能实现基础的PBR光照计算,导致同一材质在两条管线中视觉差异显著—HDRP中材质表现细腻、光影过渡自然,而URP中材质效果单薄、细节缺失,严重影响了跨管线体验的一致性。共享Render Graph通过模块化着色器设计,将着色逻辑拆分为独立的功能单元,每个单元可根据管线的性能与画质需求,动态调整计算复杂度,实现“一套逻辑、多端适配”。例如,HDRP中使用的PBR着色逻辑,可拆分为基础光照计算、高级材质交互、全局光照融合等模块:在HDRP中,可启用全部模块,实现复杂的材质表现;在URP中,则可选择性启用基础光照计算模块,同时通过统一光线追踪API补充关键光照细节(如高精度反射、软阴影),让URP的PBR表现兼具性能与质感,与HDRP的视觉差异大幅缩小;而HDRP也可复用URP中针对移动端优化的纹理采样模块,通过更高效的采样算法提升高清场景的纹理加载效率,减少性能开销。这种模块化设计不仅实现了着色逻辑的跨管线复用,更让着色器的扩展能力大幅提升—新的着色效果只需开发一次,即可通过Render Graph的适配层自动适配两条管线的渲染架构,无需针对每条管线重复开发。在实际技术实践中发现,这种着色器生态的协同,让URP的材质表现力得到了质的飞跃:原本只能在HDRP中实现的复杂材质交互,如布料的漫反射衰减、金属的镜面反射变化,如今可通过统一API与模块化着色逻辑,在URP中以适配性能的方式呈现;同时,HDRP的着色器也因复用了URP的优化模块,在保持高品质的同时,资源占用与计算开销显著降低,实现了“品质不打折、性能更出色”的目标。 技术融合的深层价值,在于构建了渲染管线的弹性演进体系,让URP与HDRP不再是相互割裂、各自为战的发展路线,而是基于同一技术底座的差异化表达,实现了两条管线的双向赋能与协同升级。在这套体系下,两条管线的核心能力不再局限于初始定位,而是能随着底层技术的迭代同步升级:URP能持续吸收HDRP的高品质渲染技术,通过Render Graph的资源优化与统一API的性能适配,将其转化为自身的轻量化实现,不断提升跨平台场景的视觉表现力;而HDRP也能借鉴URP的跨平台优化经验,将移动端的高效资源调度、轻量化计算逻辑迁移过来,提升高清场景的资源利用效率与硬件适配范围。
如题,免费付费都可以。哪些是推荐的必上的服务呢? 各位大佬指教下,感谢。
先放一张梗图:

这张图反映了当前 ChatGPT 用户社区(特别是 Reddit 上的 r/ChatGPT 板块)中一种非常普遍的不满和失望情绪。
为什么说“Sam 毁了这个 APP ?
用户之所以发这种图,通常是因为他们觉得 ChatGPT 在更新过程中变得不好用了。主要抱怨集中在以下几点:
老铁们,为什么萨姆·奥特曼要把 ChatGPT 搞成现在这个烂样子?你们在使用过程中感觉如何呢?

过去两年,能源矿产行业,正在从一个“以规模和资源驱动”为主的行业,进入一个以复杂运行与系统治理为核心约束的新阶段。一方面,全球能源博弈加剧、关键矿产战略属性抬升,安全、稳定与可控成为底线要求;另一方面,绿色低碳、双碳约束、成本透明化,正在把过去“被吸收”的不确定性,逐步转化为显性经营压力。与此同时,AI 对算力与能源的需求反向放大了能源系统的战略地位,使能源矿产不再只是“上游产业”,而是全球产业体系中的基础能力提供者。 这三股力量叠加,带来的并不是简单的业务增长或下行,而是一种更根本的变化:企业运行本身,正在变得前所未有地复杂。复杂性不再来自“业务更多”,而来自“变量更多、耦合更强”。 正是在这一判断之下,这本《能源矿产行业 Data+AI 数智化转型白皮书》试图回到一个更基础的问题:能源矿产企业,究竟需要怎样一套面向未来十年的数智化体系? 统一底层逻辑:一体两翼架构如何支撑能源矿产企业数智化转型在具体展开矿山、冶炼、加工与集团四类企业实践之前,有必要先回答一个更基础的问题:这些看似差异巨大的场景,是否存在一套可复用的数智化底层逻辑? 从大量项目实践来看,答案是肯定的。能源矿产行业面临的问题虽然分布在不同环节,但在数据形态、管理诉求与运行机制上,呈现出高度一致的结构特征——数据来源复杂、业务耦合度高、风险容忍度低、管理链条长。这决定了数智化建设需要一套能够长期运行、持续演进的通用架构作为基础。 在统一数据底座之上,“两翼”分别对应数据智能能力与空间智能能力。数据智能侧重于把治理后的数据转化为可用的分析与判断能力,包括主题域分析、指标体系运行、异常识别、趋势判断以及智能问数与辅助分析等能力形态,其价值在于降低分析门槛、提升判断效率,使管理层能够从数据中快速获得“发生了什么、为什么发生、接下来可能会怎样”的连续认知。 空间智能则承担另一类关键任务——将复杂业务运行状态放入空间语境中表达,通过数字孪生把生产现场、工程项目、管网资产、园区设施等实体对象转化为可感知、可联动、可推演的运行载体,让风险、进度、资源与规则以更直观的方式支撑监管、指挥与协同。 “一体两翼”框架并不追求一次性覆盖所有场景,而是为不同类型企业提供了一套可按需展开的通用底盘。矿山企业更多把能力落在空间智能与实时监管上,解决高风险场景下的运行感知与风险前移;冶炼企业重点强化数据治理与主题域分析,打通生产、能耗与经营之间的分析链路;加工与工程型企业围绕项目主线展开数据中台与经营分析,提升对经营节奏与风险暴露的掌控能力;集团企业则在统一底座之上,通过经营分析、统管机制与空间化承载,实现对子公司的可比、可控与可调度管理。差异体现在应用重点,而非底层逻辑本身。 也正因为有这样一套通用方案作为支撑,后续不同企业类型的实践,才能在保持行业差异的同时,呈现出清晰一致的建设路径与演进逻辑。 矿山、冶炼、加工、集团企业的不同落地路径:一体两翼走向行业实践要把矿山、冶炼、加工与集团统管这四类问题真正解决到位,方案需要同时回答三件事:数据怎么汇、口径怎么统一、场景怎么持续运行。 矿山环节优先建设“矿山实景数字孪生实时监管平台”,它的关键在于把巷道/采场/硐室等空间对象变成可承载业务规则的“运行容器”。在平台底座上,矿山空间模型持续随采掘推进更新,人员定位、车辆轨迹、作业票证、岗位资质、环境越限、重点风险源等数据按空间对象绑定与联动,形成“谁在何处、在做什么、是否具备资质、环境是否越限、风险是否可控”的连续态势。 监管能力通过两类机制落地:一类是空间化的风险分级与联动处置,例如越界、越限、禁入、临边与关键设备区的规则触发,自动生成预警清单与处置闭环;另一类是面向应急的路径推演与指挥协同,将人员分布、撤离路线、应急物资点位、救援力量调度纳入同一空间语境,支持从“态势掌握”进入“指挥动作”。这类平台真正解决的是深部开采条件下的“运行可见性”和“风险前移”,让安全管理从事后统计转向过程监管。 图:采矿车辆空间运行状态监控概览 进入冶炼环节,解决方案落点是建设“智慧运行平台”,建设重点围绕数据中台、治理体系与主题域分析同步展开。冶炼业务天然具有强耦合特征:原料结构、工艺参数、能耗水平、产量节奏与质量指标相互牵引,财务结果虽能核算,利润变化的形成过程长期缺少可解释链路。智慧运行平台首先把 DCS/MES/ERP、计量、能源与质量等系统数据纳入统一治理框架,建立主数据(组织、装置、物料、工序、计量点、能源介质等)与指标口径映射关系,确保“同一指标在不同装置、不同基地、不同时间粒度下可对比、可追溯”。在此基础上,以既定的主题域框架沉淀分析体系,将经营、财务、合同、人资、采购、合规等管理视角与生产过程数据打通,形成从“工艺—能耗—成本—利润”的贯通分析路径,使管理动作能够落在可解释的数据链路上:哪里波动、为什么波动、影响到哪个利润环节、该由哪个责任单元承接改进。冶炼方案的价值锚点在于把“算得出结果”升级为“看得见机制”,为排产优化、能效对标、成本拆解与风险预警提供稳定底盘。 加工型企业的方案,以全厂级实景建模为基础,构建覆盖厂区、车间与关键装置的数字空间底座,将设备、工艺、人员与环境等要素统一承载,为现场管理与分析提供稳定语境。在此之上,通过人员定位与风险感知能力建设,形成覆盖全厂的实时态势感知,使作业行为、风险区域与异常状态能够被持续识别与管控。围绕运行保障与生产组织,数字孪生进一步用于支撑应急演练、处置推演与跨车间态势协同,帮助管理层在同一视角下理解不同工序与车间的运行关系。随着现场数据持续沉淀,经营分析能力逐步与生产过程耦合,通过将产量、能耗、设备状态与成本、收率等指标关联,管理层能够在空间化视角下理解经营结果的形成路径,实现从结果统计向过程解释的转变,并在指挥大厅与接待场景中形成可操作、可表达的整体能力。 图:企业作战驾驶舱现场实景 集团层面的方案要回答“怎么统管子公司、怎么横向对比、怎么把分析转成抓手”。集团数据中台承担统一标准、统一口径、统一组织维度的工作,把成员企业数据上行与集团管理下行打通;经营分析体系则围绕集团既定主题域框架运行,将财务经营、人力资源、工程运营、客户服务等关键场景沉淀为集团级可对比的管理视图,支撑跨区域、跨业态的态势判断与资源配置。数据门户体系负责把集团分析、预警与任务清单组织成统一入口,形成“会前看态势、会中抓异常、会后盯整改”的运行机制。空间化能力在集团中更多承担“资产与运行态势的承载方式”,将管网、场站、工程项目与重点风险点的空间分布与经营分析结果关联呈现,降低跨层级沟通成本,让集团层的统管动作更容易落到区域与项目公司。 主题域规划 运营平台(原型测试数据) 在矿山、冶炼、加工与集团四类企业的实践中,可以看到一个高度一致的结论:能源矿产行业的数智化挑战,来自业务复杂性、风险密度与治理半径的持续放大。当生产环境高度不确定、经营链条高度耦合、组织层级不断拉长,仅靠零散系统叠加或局部智能化,很难形成稳定、可持续的管理能力。真正起作用的,是一套能够长期运行、持续演进的体系化路径。“一体两翼”的价值,正体现在这种体系能力之上。 一方面,通过统一的数据底座与指标体系,把分散在现场、系统与组织中的信息,转化为可被理解、可被比较、可被追溯的经营与运行认知; 另一方面,通过空间化能力与智能分析能力,将这些认知嵌入到真实业务场景中,服务于安全监管、生产协同、经营分析与集团统筹等关键决策动作。 这使得数智化逐步参与到企业运行方式本身。从地下矿山的实景监管,到冶炼企业对生产—能耗—经营链路的穿透分析;从加工企业在复杂现场中构建整体态势感知,到集团层面对跨区域、跨业态运行与经营的统一统筹,这些实践并未追求“一步到位”的智能化目标,而是围绕各自最核心的业务矛盾,选择合适的切入点持续推进。也正是在这种渐进式、可复用的建设过程中,数智化能力开始真正沉淀为企业的治理能力。这或许是能源矿产行业在不确定性时代的一条现实路径:以能否降低风险暴露、提升经营透明度、增强组织协同为最终检验。Data+AI数智化转型的意义,不在于让企业“看起来更先进”,而在于让企业在复杂环境中运行得更稳、更清楚,也更有韧性。回到这本白皮书所呈现的,不是一套标准答案,而是一组来自真实实践的路径参考。无论是矿山、冶炼、加工企业,还是集团型组织,只有尊重行业特性、正视业务矛盾,在统一底座之上持续积累认知与能力,数智化才可能从“项目建设”走向“长期能力”。在能源博弈加剧、产业周期波动加深的时代背景下,这种能力本身,正逐渐成为企业最重要的竞争壁垒。我们也希望,这些实践与方法,能够为更多行业参与者提供启发——不是为了追逐概念,而是为了在不确定的时代,找到一条更稳健、更可持续的前行路径。

产业链拆解:矿山、冶炼、加工、集团企业,各有各的“卡点”从产业链整体看,能源矿产行业正同时承受来自安全、成本、效率与治理复杂度的多重压力,但不同环节的问题形态并不相同。矿山企业长期处在高风险、高耦合的运行环境中,生产、安全与成本高度依赖现场经验进行平衡判断,虽然系统与数据不断增加,但信息分散在采掘、通风、运输、安全监测等多个专业系统中,难以形成连续、稳定的运行态势认知,一旦出现异常,管理动作往往发生在结果之后,风险演化过程缺乏提前感知能力。
进入冶炼环节,问题逐步从“能不能稳住生产”转向“利润结构是否可被解释”,能耗、原料、工艺路线、排产节奏相互影响,加工费、能源价格与碳成本波动频繁,财务结果可以核算清楚,但利润变化背后的驱动因素难以被拆解,生产侧与经营侧之间长期缺乏贯通分析视角。
加工企业表面上资产更轻、流程更灵活,但项目数量多、订单碎片化、区域分散,使成本、进度、交付与质量高度交织,管理层往往只能看到阶段性结果,对项目运行节奏与关键偏差缺乏整体把控能力。
到了集团层面,上述问题进一步叠加放大,数据持续上行但语义口径不统一,指标体系不断扩充却难以横向对比、纵向追溯,分析结果更多停留在展示层面,难以真正嵌入资源配置、考核机制与管理动作之中。这种状态下,企业对外部不确定性的感知能力持续增强,对内部运行复杂性的掌控能力却并未同步提升,成为当前能源矿产行业普遍面临的系统性挑战。


一体两翼方案架构基于这一认识,白皮书提出了“一体两翼”的整体方案框架。“一体”指向统一的数据底座,核心目标是解决数据在跨系统、跨层级、跨业务域流动过程中的可解释性问题。通过多模态数据智能中台与治理体系建设,将组织、资产、项目、装置、人员、合同、物料等关键对象纳入统一的数据模型与语义体系,明确主数据口径、指标计算逻辑与责任归属,使不同系统产生的数据能够在同一语境下被理解、被对比、被追溯。这一层解决的是“数据能不能支撑管理”的问题,是所有后续分析与应用的前提。
图:车辆及驾驶员精准定位及状态监控



图:冶炼行业多模态数据智能中台架构



四类企业的真实落地:一体两翼架构在复杂场景中的实践验证在地下矿山场景中,十五冶的实践验证了数字孪生作为运行级基础能力的价值。通过构建地下矿山实景数字孪生实时监管平台,企业将人员、设备、环境与作业活动统一纳入空间化运行视角,矿山管理从分系统监控转向整体态势感知。安全管理由事后复盘逐步演进为事前预判与过程干预,调度与应急指挥建立在实时状态之上,为深部开采条件下的安全治理与稳定运行提供了可持续支撑。
在工程型、项目型企业场景中,相关实践围绕数据中台重构了经营认知方式。通过以项目为核心对象,贯通合同、预算、采购、结算与财务数据,企业逐步摆脱了阶段性报表驱动的管理模式,建立起对项目收支、成本偏差与风险敞口的连续判断能力。经营管理从“看结果”转向“盯过程”,为项目统筹、资源配置与风险控制提供了更具前瞻性的决策基础。

在铜业加工场景中,实践重点落在生产现场与经营分析的协同。通过全厂级实景建模、人员定位与风险感知能力建设,企业构建了覆盖多车间、多工序的实时运行视角;在此基础上,将产量、能耗、设备状态与关键经营指标关联分析,使管理层能够在空间语境中理解经营结果的形成过程。数字孪生演进为支撑生产协同、应急处置与经营分析的综合载体。
在集团层面,中国燃气的实践展现了数据中台与经营分析在超大规模组织统管中的价值。通过统一数据治理与分析体系,集团将分散在多业态、多区域、多层级的经营与运行数据重新组织,形成可对比、可追溯、可下钻的集团级分析视角。经营、工程、人力与客户服务等关键领域逐步纳入统一认知框架,集团管理由“看得到数据”转向“推得动管理动作”,为规模化发展背景下的稳健运行与治理升级提供支撑。向左滑动查看更多
图:财务经营分析场景建设框架
图:组织绩效分析场景建设框架
图:干部画像分析场景建设框架
图:抄收&保修场景分析建设框架
图:工程运营场景建设框架

实践共性路径及方法论总结
描述: 帖子发出去,作者无法编辑(编辑过一次之后),也无法隐藏。对于作者来说,这是一种失控。
我本意是记录,但发布之后觉得内容有些不妥,想撤回但找不到入口,不知道能否帮我手动删除下:
https://2libra.com/post/family/BJyCH37
Anthropic 正在升级它“最聪明的模型”。 随着新一代旗舰模型 Claude Opus 4.6 的发布,Anthropic 释放出的信号十分明确:这并不是一次常规的性能小修小补,而是一轮围绕长任务、复杂工作,以及智能体(agent)如何真正干活展开的系统性升级。 在这次发布之前,Anthropic 内部和部分早期用户已经开始让 Opus 4.6 参与一项持续时间很长的工程任务:从零开始,用 Rust 编写一个完整的 C 编译器,并要求它能够编译 Linux 内核。 这项实验持续了约两周时间,期间累计运行了近两千次 Claude Code 会话,最终产出了一个规模约 10 万行代码的编译器。该编译器不仅能够在多种架构上构建 Linux 6.9,还可以编译 FFmpeg、Redis、PostgreSQL、QEMU,并通过了 GCC 自身 99% 的 torture test,甚至能够成功编译并运行 Doom。整个实验的 API 成本约为 2 万美元。 为了让外界更直观地理解这一成果的尺度,有网友在社交平台上给出了一个对照:GCC 的开发从 1987 年开始,历经 37 年,投入过数以千计的工程师。而这一次,是一名研究者加上 16 个 AI 智能体,在短短数周内完成了一个能够通过大量 GCC 测试集、并编译真实大型项目的编译器。 正是在这样一段持续推进的工程实践之后,Anthropic 对外发布了 Claude Opus 4.6。 成立于 2021 年、由一批前 OpenAI 研究人员和高管创立的 Anthropic,一直以 Claude 系列大模型为核心产品;在这一体系中,Opus 代表最大、能力最强的型号,Sonnet 和 Haiku 则分别覆盖中等与轻量级使用场景。某种程度上,Opus 系列承担的角色,就是在更复杂、更长期的任务环境中检验 Claude 的能力边界。 Anthropic 对 Opus 4.6 的定位,并不只是“更会写代码”。他们强调,新模型在编程能力上的提升,已经从单纯的代码生成,扩展到更前置的任务规划,以及更后置的代码审查与调试流程。这种变化,使模型能够在大型代码库中更稳定地工作,也直接决定了它是否有能力脱离短对话模式,持续参与多阶段、长周期的工程任务。 这种定位在评测结果中体现得比较清楚。Anthropic 公布的多项基准测试显示,Claude Opus 4.6 在 agentic 编程、计算机使用、工具调用、搜索以及金融等任务上,整体跑分都有所提升。 在终端 agentic 编程能力上,Opus 4.6 得分 65.4%,对比来看,略高于 GPT-5.2 的 64.7%,明显领先 Gemini 3 Pro(56.2%)和 Sonnet 4.5(51.0%)。这说明在纯终端环境下执行多步编程任务时,Opus 4.6 的稳定性和自我修正能力处在第一梯队。 在 SWE-bench Verified(Agentic coding) 上,各家分数非常接近,Opus 4.6(80.8%)与 Opus 4.5(80.9%)、GPT-5.2(80.0%)基本处于同一水平。这里可以理解为:在标准化的软件工程任务上,能力已经开始趋同。 但在电脑操作(OSWorld)上,代际差异开始显现。 OSWorld(Agentic computer use) 是一个比较关键的分水岭。Opus 4.6 达到 72.7%,相比 Opus 4.5 的 66.3% 有明显提升,而 Sonnet 4.5 只有 61.4%,其他模型则未给出对等数据。这类评测关注的是 GUI 操作、跨应用流程和状态理解能力。放在整张表里看,它与编程能力的同步提升,意味着 Opus 4.6 不只是“会想”,而是更擅长把计划落到具体操作上。 Agentic search(BrowseComp):明显拉开差距。 BrowseComp 是整张表里差距最清楚的一项。Opus 4.6 为 84.0%,而 GPT-5.2 Pro 是 77.9%,Opus 4.5 只有 67.8%,Sonnet 4.5 更低。这一项测的是在真实开放网络中定位、筛选和组合信息的能力,结果说明 Opus 4.6 在“研究型 agent 行为”上已经明显领先,而不是只在封闭工具或结构化任务中占优。 另外,在 Humanity’s Last Exam(跨学科推理)和 ARC-AGI-2(新问题解决) 上,Opus 4.6 的优势更加明显,尤其是 ARC-AGI-2 的 68.8%,相比 GPT-5.2 Pro 的 54.2% 和 Gemini 3 Pro 的 45.1%,已经不是细微差距。这类评测通常更难通过“提示工程”或策略优化取得跃升,更像是在反映模型本身的泛化推理能力。 Opus 4.6 还扩大了上下文窗口,也就是单次会话里可记住、可处理的信息量更大。 新模型在 Beta 阶段提供100 万 token的上下文长度,与该公司现有的 Sonnet(4 和 4.5 版本)相当。Anthropic 表示,这样的上下文容量更适合处理更大型的代码库,也能支持对更长文档的分析与处理。 但 Anthropic 特别强调,Opus 4.6 的提升并不是“能塞更多 token”,而是“塞进去之后还能用”。 他们在说明中提到,Opus 4.6 在大规模文档中检索关键信息的能力显著增强,这一点在长上下文任务中尤为明显:它可以在数十万 token 范围里持续跟踪信息,偏差更小,也更容易捕捉到埋得很深的细节——包括一些 Opus 4.5 本身就已经容易漏掉的信息。 这正好对应了开发者长期吐槽的一个问题:“上下文腐烂(context rot)”。很多模型在对话或任务一旦拉长之后,要么开始遗忘早期信息,要么虽然“看过”,但已经无法在后续推理中正确调用,最终表现为前后不一致、定位问题跑偏、重复试错。 MRCR v2(8-needle、100 万 token)这类“草堆找针”测试,本质上就是在专门检验这种能力:把多个关键线索埋在超长文本里,看模型能否在不迷路的情况下把它们重新找出来。Opus 4.6 在该测试中的得分为76%,而 Sonnet 4.5 仅为18.5%。 这并不是简单的“高一点、低一点”,更像两种不同的可用性状态:一个模型在超长上下文中仍然能稳定检索并利用信息,另一个则在任务拉长后迅速失效。 这种长上下文的稳定性,直接影响模型能否胜任更“工程化”的工作,尤其是复杂代码分析与故障诊断。在 Anthropic 给出的能力图中,Opus 4.6 被特别标注为擅长做root cause analysis(根因分析)。 4.6 最醒目的新增功能,是 Anthropic 所称的“智能体团队”(agent teams):由多个智能体组成的小队,可以把一个大任务拆成若干独立的子任务分别推进。 Anthropic 的说法是:“不再让单个智能体按顺序把任务一路做到底,而是把工作分给多个智能体——每个智能体负责自己的一块,并直接与其他智能体协调。” Anthropic 产品负责人 Scott White 将其类比为“雇了一支很能干的人类团队”,因为职责拆分后,智能体可以并行协作,从而更快完成工作。目前,“智能体团队”以研究预览(research preview)的形式向 API 用户与订阅用户开放。 编译器本身固然是一个高度复杂、且极具工程价值的成果,但在 Anthropic 团队看来,它更像是一次“能力压力测试”的载体。真正值得总结的,是围绕长时间运行的自治 Agent 团队(long-running autonomous agent teams)所形成的一整套工程方法论:如何设计无需人工干预的测试体系、如何让多个 Agent 并行推进复杂工作、以及这种架构在现实工程中究竟会在哪些地方触碰到上限。 现有的 Agent scaffolding(例如 Claude Code)本质上仍然是人机协作系统:模型在解决复杂问题时,往往会在某个阶段停下来,等待操作者继续输入新的指令、确认状态,或澄清歧义。Anthropic 的实验目标是消除这种对“人类在线”的依赖,让 Claude 能够在无人监督的情况下,持续推进一个长期任务。 为了实现持续自主的进展,Claude 工程团队并没有引入复杂的调度系统,而是构建了一个程序,让 Claude 进入一个简单的循环(如果你见过 Ralph 循环,应该会觉得眼熟):每完成一个任务,就立刻进入下一个任务,而不是回到“等待用户”的状态。 在 Agent prompt 中,Claude 被明确要求将问题拆解成可执行的小任务、记录当前进展、判断下一步行动,并持续迭代,直到系统判定“没有明显改进空间”。(在这最后一点上,Claude 没有选择,因为循环会一直运行——不过在一次实验中,团队确实看到 Claude 不小心执行了 pkill -9 bash,结果把自己杀掉了,循环也就随之结束了。) 并行运行多个实例,可以缓解单一 agent harness 的两个弱点: 一次 Claude Code 会话同一时间只能做一件事。随着项目范围扩大,并行调试多个问题会高效得多。 运行多个 Claude agent 可以实现“分工”。当一部分 agent 负责解决核心问题时,其他专门的 agent 可以被调用来(例如)维护文档、盯代码质量,或处理更专门的子任务。 Claude 工程团队的并行实现非常基础:先创建一个新的裸 Git 仓库;然后为每个 agent 启动一个 Docker 容器,把仓库挂载到 /upstream。每个 agent 会在容器内克隆一份本地副本到 /workspace,完成工作后,从各自的容器把改动推回 upstream。 为避免两个 agent 同时尝试解决同一个问题,harness 使用了一个简单的同步算法: Claude 通过在 current_tasks/ 下写入一个文本文件来“锁定”某个任务(例如,一个 agent 可能锁定 current_tasks/parse_if_statement.txt,另一个锁定 current_tasks/codegen_function_definition.txt)。如果两个 agent 试图认领同一任务,Git 的同步机制会迫使第二个 agent 改选另一个任务。 Claude 在任务上工作完成后,会从 upstream 拉取、合并其他 agent 的改动、推送自己的改动,然后移除锁。合并冲突很常见,但 Claude 能够处理。 无限的 agent 生成循环会在一个全新的容器里启动新的 Claude Code 会话,然后重复上述流程。 这是一个非常早期的研究原型。Claude 工程团队尚未实现任何其他 agent 之间的通信方法,也没有强制任何高层目标管理流程,也没有使用 orchestration agent。 相反,团队把“如何行动”的决定权交给每个 Claude agent。多数情况下,Claude 会选择“下一个最显而易见”的问题继续做;当卡在某个 bug 上时,Claude 往往会维护一份持续更新的文档,记录失败过的方法和剩余任务。在项目的 Git 仓库里,可以通过历史记录看到它如何在不同任务上获取锁并推进。 把 Claude 放进循环只是起点,真正决定它能否持续推进的,是它能不能从环境和反馈中判断“下一步该做什么”。因此,Claude 工程团队把大量精力放在模型之外:测试如何设计、反馈如何呈现、运行环境如何约束,才能让 Claude 在无人干预的情况下仍然保持方向感。 一个核心前提是:必须围绕语言模型的固有限制来设计系统。在这次实践中,团队重点应对了两类限制。 首先是上下文窗口污染。测试框架不能输出成千上万字节的无用信息,最多只保留几行关键输出,其余重要内容统一写入文件,供 Claude 在需要时自行查阅。日志也需要便于自动处理:一旦出现错误,必须在同一行明确标出 ERROR 以及失败原因,方便 grep 直接检索。同时,能提前算好的汇总统计信息会被预先计算,避免 Claude 在上下文中反复做同样的推导。 另一类限制是时间盲。Claude 无法感知时间,如果无人干预,很容易长时间沉浸在跑测试里而不推进工作。为此,测试框架很少输出增量进度,避免不断污染上下文,并提供默认的 --fast 选项,只运行 1% 或 10% 的随机子样本。这个子样本对单个 agent 是确定的,但在不同虚拟机之间是随机的,从整体上仍能覆盖所有文件,同时又能让每个 agent 精确识别回归问题。 在并行方面,团队也很快意识到:并行是否有效,取决于问题是否“好拆”。当失败测试数量多且彼此独立时,并行非常直接——每个 agent 处理一个不同的失败测试即可。在测试通过率接近 99% 后,团队让不同 agent 分别去完成不同小型开源项目的编译,例如 SQLite、Redis、libjpeg、MQuickJS 和 Lua。 但当任务升级到编译 Linux 内核时,情况发生了变化。内核编译本质上是一个高度耦合的整体任务,所有 agent 都会命中同一个 bug,修完再相互覆盖。即便同时运行 16 个 agent,也无法带来实质进展,因为大家都卡在同一件事上。 解决办法是引入GCC 作为在线的、已知良好的对照编译器。团队编写了新的测试框架:随机选择内核中大部分文件用 GCC 编译,只把剩余文件交给 Claude 的 C 编译器。如果内核能够正常运行,说明问题不在 Claude 负责的那部分文件;如果失败,则再通过把其中一些文件切回 GCC 编译,逐步缩小范围。这样一来,不同 agent 就可以并行地修复不同文件中的不同错误,直到 Claude 的编译器最终能够编译全部文件。即便如此,后续仍需要配合增量调试(delta debugging),找出那些“单独没问题、组合在一起就失败”的文件对。 并行运行也带来了另一层收益:角色分工成为可能。在实践中,Claude 工程团队发现,LLM 生成的代码很容易重复实现已有功能,因此专门安排了一个 agent 负责扫描并合并重复代码;另一个 agent 聚焦于提升编译器自身的性能;第三个 agent 负责改进生成代码的效率。 除此之外,还有 agent 从 Rust 开发者的视角审视整个项目的设计,提出结构性调整建议,以提升整体代码质量;另一个 agent 则专注于文档维护。通过这种方式,不同 Claude 实例在同一代码库中承担起相对稳定的职责,而不是反复在同一层面“重新发明轮子”。 在两周内接近 2,000 次 Claude Code 会话中,Opus 4.6 共消耗约 20 亿输入 token、生成约 1.4 亿输出 token,总成本略低于 2 万美元。该团队表示,即便与最昂贵的 Claude Max 方案相比,这仍是一次成本极高的实验;但这一成本依然远低于由单人、甚至完整人类团队完成同等工作的成本。 该编译器是一次完全的 clean-room 实现:开发过程中 Claude 从未获得互联网访问权限,仅依赖 Rust 标准库。 最终得到的约 10 万行代码,能够在 x86、ARM 和 RISC-V 架构上构建可启动的 Linux 6.9,同时也可以编译 QEMU、FFmpeg、SQLite、Postgres、Redis,并在包括 GCC torture test 在内的大多数编译器测试套件中达到约 99% 的通过率。此外,它还通过了开发者的终极考验:它可以编译并运行 Doom 游戏。 但与此同时,这一项目也把当前 Agent 团队的能力边界暴露得相当清晰。 缺乏启动 Linux 所需的 16 位 x86 编译能力,因此在 real mode 阶段会调用 GCC(x86_32 与 x86_64 编译器由其自身实现)。 尚未拥有稳定可用的 assembler 与 linker;这些是 Claude 开始自动化的最后环节,目前仍存在问题,演示中使用的是 GCC 的相关工具。 该编译器能够成功编译许多项目,但并非所有项目都能成功。它目前还不能完全替代真正的编译器。 生成的代码效率不高。即使启用所有优化,其效率也低于禁用所有优化的 GCC 生成的代码。 Rust 代码质量尚可,但远不及 Rust 专家级程序员编写的代码质量。 整体实现已接近 Opus 的能力上限,新增功能或修复 bug 时,经常会破坏已有功能。其中一个最具代表性的难点是 16 位 x86 代码生成。尽管编译器可以通过 66/67 opcode 前缀生成语义正确的 16 位 x86 代码,但生成结果超过 60KB,远高于 Linux 强制的 32KB 限制。因此,在这一阶段,Claude 选择调用 GCC 作为替代(该情况仅出现在 x86 上;在 ARM 与 RISC-V 架构下,编译可完全由 Claude 自身完成)。 该编译器的源码已经公开:https://github.com/anthropics/claudes-c-compiler。Claude 工程团队建议直接下载、阅读代码,并在自己熟悉的 C 项目上尝试。 参考链接:

最强的编码模型:从跑分看 agentic 编程能力

“上下文腐烂”与模型可用性的分水岭


用 Agent 团队,构建一个 C 编译器
从“协作式 Agent”到“自治式 Agent”

并行运行 Claude
用 Claude 团队写代码:一些更管用的做法
评估结果与能力边界

在智能驾驶等复杂业务场景中,模型往往具备多任务分支结构,例如在同一个网络中同时包含 BEV 动态任务(如目标检测、跟踪、运动预测)与 BEV 静态任务(如地图构建、车道线提取、可行驶区域预测),这些任务对推理频率(Frames Per Second, FPS)的要求通常并不相同。也就是有不同任务分支 推理不同帧率的需求,例如 BEV 动态任务 20 帧,静态任务 10 帧这种情况,BEV 模型结构简单示例如下所示。 以 BEV 动静态任务为例,实现不同任务分支推理不同帧率(动态 20 帧,静态 10 帧),很容易想到两种方案: 方案 1-拆分为三个子模型:模型 1-公共部分(backbone+neck)、模型 2-动态 head、模型 3-静态 head 方案 2-拆分为两个子模型:模型 1-公共动态(backbone+neck+ 动态 head)、模型 2-公共静态(backbone+neck+ 静态 head): 为了兼顾方案 1 与方案 2 的优点,同时实现不同任务分支推理不同帧率,工具链提供了 link 打包功能,具体打包方式如下: 工具链提供的 link 功能,能够 复用 不同 模型/任务 的公共部分 constant 常量(包括权重等),即不会存储多份,在模型加载时,公共部分只会占用一份静态内存,需要注意推理时动态内存不会复用(作为不同模型处理),关于内存占用相关介绍可见文章《<u>【地平线 J6 工具链入门教程】板端部署 UCP 使用指南-内存占用</u>》。 上图中将模型 1 与模型 2 link 打包生成的模型 3,相比于模型 1 体积不会大多少,同时具备推理模型 1 与模型 2 的功能。根据需求,调整模型 1 与模型 2 的推理次数,即可实现不同任务采用不同帧率部署。 如下图所示:推理一次模型 1,可实现动态任务 head 与静态任务 head 各推理一次,推理模型 2 可实现仅推理一次动态任务 head,当模型 1 推理 10 次、模型 2 推理 10 次时,即可实现动态推理 20 次,静态推理 10 次的效果。(公共部分 backbone+neck 仅推理 20 次) 根据需求场景,先将多任务模型拆分导出为不同子任务的 qat.bc,然后分别将他们编译成 hbo 文件,最后将多个 hbo 文件 link 打包为一个 hbm 模型。 在工具链用户手册《<u>HBDK Tool API Reference</u>》章节中详细介绍了 compile 与 link API,可以看到: 将两个 hbo 文件通过 link 打包生成一个 hbm 模型,示例代码如下: 通过 结合--model\_file 与--model\_name 即可实现对打包 compiled.hbm 模型中的某一个模型进行推理。 以 perf 评测打包 compiled.hbm 模型 中 2\_backbone\_head1 的性能为例,参考命令如下: 在工具链用户手册《<u>统一计算平台 UCP - 模型推理开发 - 模型推理 API 手册 - 功能接口</u>》中,详细介绍了加载打包模型 hbDNNInitializeFromFiles 与 获取单个模型句柄 hbDNNGetModelHandle 的使用方式,截图如下: 在工具链开发包路径:OE/samples/ucp\_tutorial/dnn/basic\_samples 下方的示例中有用到这两个接口,可参考使用。 根据需求,调整打包模型 compiled.hbm 中的 模型 1 backbone\_head1\_head2 与模型 2 backbone\_head1 的推理次数,即可实现不同任务采用不同帧率部署。 下表中,backbone\_head1 是公共部分,注意:公共部分权重是一样的 可以看到,compiled.hbm 体积相比于 1\_backbone\_head1\_head2.hbm 并没有增加多少。 模型加载推理时,ION 内存差异如下: 加载 1\_backbone\_head1\_head2.hbm,直接推理: 加载 compiled.hbm,推理 1\_backbone\_head1\_head2: 可以看到,compiled.hbm 占用的内存相比于 1\_backbone\_head1\_head2.hbm 并没有增加多少。1.需求场景

2.技术分析


3.方案实现
3.1 模型 link 打包
from horizon_plugin_pytorch.quantization.hbdk4 import export
from hbdk4.compiler import load, convert, compile, link
# export 阶段记得配置 name
qat_bcA = export(qat_model_A, example_input, name="1_backbone_head1_head2")
quantized_modelA = convert(qat_bcA, "nash-m")
# 注意:此时compile生成的模型后缀名为.hbo
hbo_nameA = "nameA_compiled.hbo"
hboA = compile(quantized_modelA, path=hbo_nameA, march="nash-m", opt=2, progress_bar=True, jobs=48)
qat_bcB = export(qat_model_B, example_input, name="2_backbone_head1")
quantized_modelB = convert(qat_bcB, "nash-m")
hbo_nameB = "nameB_compiled.hbo"
hboB = compile(quantized_modelB, path=hbo_nameB, march="nash-m", opt=2, progress_bar=True, jobs=48)
# link生成打包模型,后缀名为.hbm
hbm_name = "compiled.hbm"
hbm = link([hboA, hboB], hbm_name)
# 如果在其他地方已经生成了hbo
# 可以通过 hbo = Hbo(hbo_name) 进行加载 所需头文件: from hbdk4.compiler.hbm import Hbo3.2 打包模型推理
3.2.1 hrt\_model\_exec 工具推理
hrt_model_exec model_info --model_file compiled.hbm 可查看打包模型的数量,输入输出等信息,示例如下This model file has 2 model:
[2_backbone_head1] [1_backbone_head1_head2]
---------------------------------------------------------------------
[model name]: 2_backbone_head1
input[0]:
name: ...
output[0]:
name: ...
---------------------------------------------------------------------
---------------------------------------------------------------------
[model name]: 1_backbone_head1_head2
input[0]:
name: ...
output[0]:
name: ...
output[1]:
name: ...
hrt_model_exec perf --model_file compiled.hbm --model_name 2_backbone_head13.2.2 UCP API 推理


3.3 多任务不同帧率推理

3.4 性能数据示例
模型名称 模型大小/KB 模型 name latency/ms 1\_backbone_head1\_head2.hbm 30295 / 5.19 2\_backbone_head1.hbm 21781 / 4.84 compiled.hbm 30776 1\_backbone\_head1\_head2 5.18 2\_backbone\_head1 4.83 

最近 AI 圈有个“红色胖龙虾”火得离谱。 它原来叫 Clawdbot,因为太火被 AI 巨头 Anthropic 盯上,直接一份<span style="color: red;font-size: 16px">“友好通知”</span>说你侵权。于是连夜改名 Moltbot,最后成了现在的 openClaw。 最魔幻的是,因为这玩意的爆火,全球的 Mac Mini 居然被这帮极客买涨价了。 大家都在传:只要 1 分钟,你就能在手机上远程白嫖一个 24 小时待命的“数字员工”。 作为一名不折腾会死星人,我也在本地部署折腾了几天。体验下来发现: <span style="color: red;font-size: 16px">它确实很不错,是一个称得上“住”在你电脑并且拥有管理员权限的管理员,当然,如果姿势不对,它就是你硬盘的“拆迁办”。</span> 很多兄弟会问:我用网页版 Claude/Gpt 不香吗?非要折腾这个? 这就是 openClaw 设计聪明的地方。它内置了非常丰富的 function calling 功能,并且拥有终端系统权限。 简单来说,以前的 AI 是关在笼子里的,只能跟你聊聊天。而现在的 openClaw 相当于给 AI 做成一个智能终端。它不再只是“建议你删掉多余文件”,而是会有可能直接一句“好的老板”,然后顺手在你的某个目录敲下<span style="color: red;font-size: 16px">rm -rf。</span> 这种从“问答”到“执行”的范式转变,才是让极客们高潮的根本原因。 打开 openClaw 的 Skill 列表,多达 7 个分类,49 个默认 skill 可供配置。说实话,这地方最能体现“卖家秀”和“买家秀”的区别。 不过在我看来,绝大部分都是“洋垃圾”,大陆用户用不上。 亲身体验下来有几个组合功能比较值得推荐。 我们再来看下部分知乎用户对其的讨论 当然,作为一个还在“长身体”的开源项目,openClaw 远没到小白上手即用的程度。在折腾了一周后,我搜集了各大平台的反馈,基本可以总结为三个字:<span style="color: red;font-size: 16px">坑挺大</span>。 目前来看,这款产品的评价呈现极端两极分化:Mac 用户直呼真香,Windows 用户直呼退钱。 有人吹嘘 openClaw 能让你在手机上远程撸代码。但听小弟一句劝,在手机上改 Bug 绝对是伪命题。 虽然发生概率很少,但这是 Agent 架构目前比较无解的痛点。 笔者之前有幸在 cursor 上体验过几次,由于提示词或大模型本身的判断逻辑出现异常,AI 有时会陷入一种“鬼打墙”的状态。 比如:你让它找一个文件,它找不着,然后触发“重试”技能;重试又找不着,再触发“搜索”技能……在这个过程中,它每动一下都在疯狂调用 API。 当你发现它还没干完活时,它可能已经在短短几分钟内烧掉了你一顿饭钱。如果不设 Token 熔断,可能会让你有亿点点肉疼。 虽然有不少毛病,并且未必有啥提高产能的能力,但我依然对 openClaw 保持高关注,为什么? 因为这个项目的 Agent 具备了<span style="color: red;font-size: 16px">“权限”</span>。以前我们用 AI,是“一问一动”;现在是“一问多动”,甚至你设置好定时任务,它是“不问也动”。 <span style="color: red;font-size: 16px">这个项目开始,实现了从“对话”到“接管”。</span> 尽管它现在还会“拆家”,还会“乱花钱”,但这种架构值得我们共同关注。 本文由mdnice多平台发布前言


核心拆解:为什么是 openClaw?
技能树:全能战神 or 电子垃圾?

那些会让你觉得“神了”的功能



劝退指南?谁在给这只“龙虾”交税?


Windows 用户:“后妈”生的
大概率是因为作者和核心贡献者都是基于 Mac 环境开发的,导致 Windows 版的 Bug 密集成灾:路径识别错误、依赖冲突、环境变量玄学报错。如果你不是一个习惯折腾环境的开发者,<span style="color: red;font-size: 16px">千万别在 Windows 上挑战自己的血压</span>。
实在想玩,可以去买云厂商搞好的 9.9 元月付套餐,花杯奶茶钱买个清静。手机写代码:“赛博行为艺术”?
我做手机上尝试让它在帮我修复一个 JS 逻辑,结果......完全没有反馈,我就已经开始 瑟瑟发抖了,我对“盲写”并没有兴趣。你可以用它来紧急重启个服务,或者跑个自动化脚本,但真要拿它写代码?<span style="color: red;font-size: 16px">那你很牛。</span>致命伤:“死循环”偷钱可能性
最后
过去十年,TypeScript 被很多团队当作“工程化 JavaScript”的答案;到了 AI 编程时代,它又意外变成了 AI 最顺手的语言之一——原因很简单:AI 写代码的能力基本取决于它见过多少这种语言的代码,而 TypeScript/JavaScript 恰好是训练语料最丰富的那一档;更关键的是,TypeScript 还把类型与接口这些“语义线索”明明白白写在代码里,正好让 AI 更容易理解、重构和补全。 也正是在这种背景下,微软在 2025 年 12 月 16 日完成了 TypeScript 史上最激进的一次重构:用 Go 语言迁移(重写)编译器与部分工具链,宣称带来 10 倍性能飞跃。但消息一出,社区立刻炸锅——明明 Rust 才是当下重写系统级工具的“默认答案”,为什么偏偏选 Go? TypeScript 之父、同时也是 Turbo Pascal、Delphi、C# 等语言的核心设计者 Anders Hejlsberg,在与 GitHub 研究顾问 Eirini Kalliamvakou 的对谈中正面回应了这些质疑:很多人认为他们“应该选另一门语言”,但他坚持“我们选了最合适的工具,而且过去一年已经证明了这一点”。 更有意思的是,Hejlsberg 也谈到 AI 在这次迁移中的真实位置:团队曾尝试让 AI 直接把 TypeScript 代码迁移到 Go,“结果不太理想”,因为他们需要的是五十万行代码级别、行为完全一致的确定性迁移;AI 只要偶尔“偏一点”,就会把成本转移到逐行审查上,得不偿失。相比之下,让 AI 去生成迁移工具、以及在迁移之后自动同步旧代码库新增的 PR 变更,反而更有效——这部分他们“已经相当成功”。 同时,Hejlsberg 也明确指出:在“AI 无处不在”的新环境里,TypeScript 的语言服务(补全、跳转、重构、快速修复)不会只是原样搬家,而是在被大幅重塑——因为很多过去必须靠 IDE 才能做的事,AI 将会做得更好。未来真正不确定的也不是 TypeScript 语言本身(它仍沿着 JavaScript 标准化路径演进),而是工具形态:AI 正从 IDE 的助手变成主要工作者,人类转向监督与审阅;这也是为什么把语言服务接入 MCP 这类机制会突然变得诱人——让 AI 能提出语义级问题、发起重构请求,用“智能体方式”完成过去只能在 IDE 里完成的工作流,开发工具将因此被彻底改写。 基于该播客视频,InfoQ 进行了部分删改。 核心观点如下: 通过扩展 JavaScript 的能力,我们并非要创造一门全新的语言,而只是想修复它本身存在的问题。 对 AI 来说,“最好的语言”就是它已经大量见过的语言,在这个新世界里,全新的编程语言反而处于劣势。 找到那些无聊却昂贵的事情,把它们交给 AI。 工程师的金字塔正在变窄,入门层级的人变少了,而我们需要认真思考,如何在这样的环境下培养下一代资深工程师。 开源本身是一场巨大的实验,尽管至今没人真正解决“如何为开源持续提供资金”这个问题,但它不仅没有衰退,反而比以往任何时候都更庞大、更活跃。 Eirini:从 Turbo Pascal、Delphi、C# 到如今的 TypeScript,你的工作塑造了数以百万计开发者每天写代码的方式。 Anders:我第一次接触计算机大概是在高中时期,那是 70 年代末,我很快对编程产生了浓厚兴趣。后来,随着 8 位微型计算机开始出现,我决定自己动手组装一台套件机,并为它编写大量软件。我发现自己在这方面做得相当不错,而且也真的很享受这个过程。那时无论是结构化编程还是汇编语言,对我来说都不成问题。当然,还要考虑一个现实条件:只有 64K 内存,能塞进去的东西非常有限,还得给用户留出空间,所以当时一切都还能装在脑子里。 Eirini:Turbo Pascal 在很大程度上革新了开发者体验,核心在于缩短开发者的反馈回路。这在多大程度上是你一开始就有意识的设计理念? Anders:首先,人们之所以喜欢早期机器上的 BASIC,很大原因正是它的短反馈周期。BASIC 是解释型语言,输入代码就能立刻运行,但代价是运行速度慢,而且编辑器是基于行的,体验很糟。相比之下,当时的文字处理软件已经是所见即所得的屏幕编辑器,可以自由移动光标,这显然更适合写代码。与此同时,“输入—运行—立刻看到结果”的模式又非常吸引人。 要在编译型语言中实现这一点并获得性能,就必须有极快的编译器。Turbo Pascal 的做法是:你一按下运行,它立即在内存中完成编译,甚至不需要访问磁盘,然后直接运行。如果出现错误,就立刻回到编辑器。编译器本身非常原始,你甚至需要通过出错地址反推源码位置。但正因如此,突然之间就获得了一种高度交互的体验,在当时堪称革命性。 Eirini:那种“编译要等一个下午”的体验,会不会让你感到沮丧? Anders:当然会,没有人喜欢等待。代码已经写完了,你只想立刻运行,而不是坐在那里干等。 Eirini:Turbo Pascal 还有一个重要影响,就是以低价让更多人接触到编程。回头看,这一点你有什么感受? Anders:这里有个有意思的故事。Turbo Pascal 的前身叫 Poly Pascal,是我在丹麦一家小型软件公司里开发的 Pascal 编译器。后来我们联系上了 Borland 的创始团队,他们看过之后觉得非常惊艳,提议一起把它作为产品推向美国市场。然后他们决定定价 49.95 美元。我当时的反应是:“你们疯了吗?这样根本赚不到钱。”事后看来,这个决定非常聪明。虽然价格只有原来的十分之一,但销量却高出了三到四个数量级。最终结果非常成功,这个功劳主要要归于 Borland 的创始人 Philippe。 Eirini:Delphi 标志着你从独立创作者向团队领导者的转变。 Anders:一开始我基本上是单打独斗,虽然在丹麦的 Borland 办公室也会和两三个人合作,但随着机器性能飞速提升、用户期望不断提高,这种模式显然无法持续。我必须学会团队协作,这在 Turbo Pascal 期间就已经开始,而在 Delphi 项目中尤为明显。 你必须接受事情不会完全按照你个人偏好的方式完成,代码也不一定长成你心目中的样子。而且你往往没有时间亲自去“修正”这些细节,何况那样做也未必真的改变产品行为,更重要的是学会放权。只有当团队成员在各自负责的功能和模块中感到被信任、被赋权,团队才能真正运转起来。 Eirini:你在 Microsoft 参与 Visual J++ 的经历,对 C# 和 .NET 平台的目标产生了怎样的影响? Anders:我是在 1996 年底加入 Microsoft 的,担任 Java 开发工具集的首席架构师。我们刚发布了 Visual J++ 1,本质上只是把 C++ 的 IDE 换成 Java 编译器,谈不上真正的集成,更没有快速的应用开发体验。于是我们着手改进,这最终成为 Visual J++ 6.0,并开始与 Visual Basic、Visual Studio 的版本体系对齐。 如果要为 Microsoft 的 DOS 和 Windows 平台做 Java,就必须与这些环境高度互操作。但 Java 当时强调“一次编写,到处运行”,强制使用最小公分母的 UI 接口,最终只能做出体验很差的小程序。我们不得不引入一些扩展,简化与原生平台的互操作,并构建封装 Windows UI 的类库。很快就发现,这条路走不通。 如果真正为用户着想,就必须允许构建针对特定环境的最佳方案。人们既想要 Visual Basic 的易用性,又想要 C++ 的表达能力。于是我们尝试把这两者结合起来,并构建在 .NET 这样一个可持续演进的平台之上,最大限度地利用用户所运行的系统能力,这正是整个构想的核心。 Eirini:你既在谈不同类型的用户,又在描述为整个生态系统服务的思路,这种整体视角是如何形成的? Anders:用户并不在乎这是语言特性、框架特性、平台能力,还是编辑器或调试器的问题,对他们来说,一切加在一起才是“体验”。因此,这些部分必须协同设计。 我们构建了运行时、JIT 编译器、垃圾回收器,设计了平台的字节码,开发了类库。我既参与语言设计,也参与类库和运行时的设计,与负责这些组件的工程师密切合作,最终效果因此更好。否则,各自为政会形成孤岛,最后只能靠复杂的互操作层勉强拼接,结果自然谈不上“最佳实践”。 此外,我们也不惧怕与底层平台深度互操作。过于教条地坚持最小公分母,拒绝利用具体平台的优势,这样永远不可能做到真正意义上的“最佳体验”。 Eirini:当时是否有某个“顿悟时刻”,让你意识到 JavaScript 在规模化发展中的阵痛已经成为必须解决的问题,而且这是一个需要由你、由 Microsoft 来解决的问题? Anders:行业里的运行时环境开始变得足够成熟,比如 Google 在 V8 上做了非常出色的工作,JavaScript 的运行性能突然变得相当可观。HTML5 也正式定稿,UI 能力大幅提升。同时,手机、iPad 等各种形态的设备出现了,而它们并不运行 Windows。整个行业突然意识到,真正的平台竞争不在 Java,而在 JavaScript、浏览器和 HTML 上。 于是,人们开始编写越来越庞大的应用,因为新的运行时和 UI 技术已经允许这样做。但很快大家就发现,在一种动态语言里、缺乏成熟工具支持的情况下,这件事难得令人发指,于是我们看到了各种奇怪的扭曲做法。 其中一个典型案例是 Outlook.com 团队找到我们,主要是 .NET 和 C# 团队,询问是否可以把他们内部的一个叫 Script# 的东西产品化。我当时一头雾水:“Script# 是什么?”他们说,这是一个允许你用 C# 编写代码,然后编译成 JavaScript 来运行的工具。我第一反应是:这听起来像是两边的缺点都占全了。 但事实是,这么做的真正原因在于可以获得“成熟的工具链”:类型检查、团队协作能力、接口定义,以及对模块之间交互方式的清晰描述。因为他们有成百上千名程序员参与开发,不可能只靠裸写 JavaScript,在没有检查、没有自动补全、没有重构支持的情况下完成工作。 这让我开始反思:JavaScript 真的已经糟糕到这种程度了吗?而“先写另一门语言,再把 JavaScript 当成中间表示或字节码来编译”,真的是解决问题的最佳方式吗?如果能直接修复 JavaScript 本身,会发生什么?于是我们开始探索这条路,事实证明,这个方向效果相当不错。 Eirini:TypeScript 被设计成 JavaScript 的严格超集,这背后显然有深思熟虑的战略考量。你是如何坚持这一决策的?这又能给其他语言设计者哪些启示? Anders:每当有人跑来跟我说:“我在考虑做一门全新的编程语言,能解决这个、解决那个”,我给出的第一条建议通常是:这个世界对新编程语言的需求,就像对头上再多一个洞的需求一样。 第二条建议是:如果你真的要做一门语言,要意识到其中 90% 的工作,和其他所有语言是完全一样的,而且这个比例还在不断上升。如今,程序员的期望早已不只是一个编译器,你还需要完善的语言服务,能够集成到几乎所有主流 IDE 中,需要能与 AI 交互的 MCP 服务器,需要调试器、性能分析工具…… 此外,你还得有至少十年的时间,因为一门语言真正站稳脚跟、获得有意义的用户规模,往往就是这么长的周期。没有人会在一开始就拥抱一门全新的语言,头五年你很可能用户寥寥,还得不断回答“我们真的要继续投入吗?”这是一门非常艰难的生意。 通过扩展 JavaScript 的能力,我们并非要创造一门全新的语言,而只是想修复它本身存在的问题。在 Visual Studio Code 里,我们的语言服务对 TypeScript 和 JavaScript 是同一套。对我们而言,JavaScript 只是没有类型注解的 TypeScript,或者使用 JSDoc 注解的另一种形式。这意味着我们不是在做两套东西,而是在同一项投入之上,精确地构建真正必要的能力,只为让整个生态系统变得更好。 Eirini:2012 年在 GitHub 上启动 TypeScript 的开源项目,在当时的 Microsoft 可以说是一次相当激进的举动。 Anders:我们当时对 JavaScript 生态的运作方式、价值观以及参与社区所需的前提,其实有着非常清晰的认识。大家都明白,如果不开源,这个社区根本不会理你,一个封闭的商业产品对他们毫无吸引力。因此,从一开始我们就主张开源。同时,Microsoft 内部也逐渐意识到,开源并不是“洪水猛兽”,而是如果想真正与开发者对话,就必须拥抱的现实。 你刚才提到 2012 年发布在 GitHub,其实并不准确。2012 年我们发布在 CodePlex——Microsoft 自家的、并不太受欢迎的开源平台上。结果就是,反响寥寥。那时所谓的“开源”,更多只是把代码丢到仓库里,让大家提 issue,然后我们再把这些 issue 抓回内部系统,按内部流程处理。某种程度上,这也解释了为什么几乎没人关注。 再加上当时 Microsoft 在开源社区中的信誉并不高。真正的“主战场”在 GitHub。于是 2014 年我们迁移到了 GitHub,全面采用开放式开发流程。内部成员和外部贡献者遵循完全相同的规则,所有功能都通过 Pull Request 提交,所有讨论都公开进行。直到那时,项目才真正开始起飞,社区的兴趣也随之而来。 Eirini:从“把代码扔给社区”到真正的开放式开发,你们学到了哪些经验? Anders:这是一个彻头彻尾的双赢。对用户来说,他们能看到“香肠是怎么做出来的”,所有讨论都在公开的 issue 里完成,而不是私下做决定后再给出一个结果。 对项目开发者而言,这种方式同样令人满足。你每天都能感受到社区的参与和认可,看到点赞、看到讨论,远比关起门来做六个月或一年,然后祈祷产品方向正确要有趣得多。在这里,用户每天都在用投票告诉你他们最想要什么功能,我们只需按票数排序,就能清楚地知道优先级。你解决这些问题,社区的热情就会进一步增强,形成正向循环。 Eirini:把 TypeScript 编译器迁移到 Go 背后的动机、权衡以及所面临的挑战是什么? Anders:TypeScript 从一开始就是自托管的,用它自身编写,这意味着编译器和整个工具链本质上都是一个 JavaScript 应用。这带来了很多好处,比如你甚至可以在浏览器里运行编译器,在浏览器中构建一个完整的 IDE,一切都能正常工作。但随着 TypeScript 的广泛采用,以及用户项目规模不断扩大,可扩展性逐渐成为头号问题。 这里有 JavaScript 本身的一些内在限制。它在设计上是单线程的,不支持共享内存并发,这意味着你实际上浪费了 90% 的计算能力。此外,JavaScript 的执行成本也很高,它的对象模型极为宽松,可以随意给对象加属性,这使得优化非常困难,底层往往演变成复杂的哈希查找和缓存机制,远不如原生代码高效。 所以我们当时就清楚,自己正接二连三地白白损失收益。尽管放弃自托管让人非常不舍,但即便用尽所有优化技巧,性能瓶颈依然无法突破。 于是,在 2024 年夏天,我们开始做原型验证,先从扫描器、解析器这些容易量化的模块入手。很快就发现,性能提升可以达到 10 倍:一半来自原生代码,一半来自共享内存并发。这样的提升能把原本需要几分钟的事情缩短到十几秒,完全改变了游戏规则。 同时,我们也很清楚不想从零重写一个全新的编译器。社区里有不少声音主张“用 Rust 全部重写”,但我们认为这并不可行。TypeScript 的类型检查器极其庞大复杂,许多行为只体现在现有代码的精确语义中。如果重写,就会陷入永无止境的差异追赶,最终无法与旧编译器对齐。 因此我们的目标是“迁移”,逐函数地把同样的逻辑搬到原生语言中。当然,这意味着必须重构数据结构,因为原生语言不允许像 JavaScript 那样随意给对象加属性。我们尝试过多种语言,很快排除了 Rust,因为我们的编译器充满了循环数据结构,并且高度依赖自动垃圾回收,使用 Rust 等同于重写。 最终我们选择了 Go。它在很多方面与 JavaScript 相似,这个选择对我们来说非常奏效。现在我们拥有了一个原生编译器,在功能上几乎是旧编译器的拷贝,连那些小怪癖都一模一样,只是快了 10 倍,这意味着社区不需要推倒重来。当我们正式切换时,我相信大家会非常满意。 Eirini:在 AI 辅助编程的背景下,你认为 TypeScript 为什么特别适合 AI 工作流? Anders:很多人问我,为什么不干脆设计一门“最适合 AI 的完美编程语言”。我的回答通常是:那样的语言反而会成为最不适合 AI 的语言,因为它不会出现在 AI 的训练数据中。 AI 在某种语言中写代码的能力,与它见过这种语言代码的数量几乎成正比,它本质上是在大量样本的基础上进行再组合和外推。AI 已经见过海量的 JavaScript、Python 和 TypeScript,因此在这些语言上表现得非常好。对 AI 来说,“最好的语言”就是它已经大量见过的语言,在这个新世界里,全新的编程语言反而处于劣势。 AI 的确正在改变我们构建产品的方式。以这次 TypeScript 迁移为例,我们也尝试过用 AI 自动完成代码迁移,但效果并不好。一方面那是一年前的 AI,能力还有限;另一方面,迁移五十万行代码并保证行为与原代码完全一致,我们需要的是极其确定性的结果。AI 在翻译过程中可能会产生细微的“幻觉”,而你又不得不逐行检查,这并不划算。在这种情况下,更好的方式或许是让 AI 帮你生成“迁移工具”,而不是直接迁移代码。 TypeScript 项目中有很大一部分是语言服务,为 IDE 提供补全、跳转、重构和快速修复。现在我们也在思考:既然 AI 已经能在很多场景下做得更好,是否还有必要原样迁移这些功能?类型检查器我们完整迁移了,但语言服务正在被大幅度重塑,以适应一个“AI 已经无处不在”的新环境。 Eirini:你如何看待 AI 工具正在改变编程本身,以及语言设计的方式? Anders:在理想状态下,AI 应该帮助我们消除编程中那些繁琐、重复的劳动。以 TypeScript 的迁移为例,在我们开发新代码库的同时,旧代码库里仍然不断有新的 Pull Request 出现,我们已经相当成功地用 AI 把这些变更迁移过来。 再比如,项目里有成千上万条 issue,其中很多非常古老。它们是否仍然可复现?是否还相关?能否根据社区反馈排序?这些清理和维护工作过去总是被一拖再拖,最终却成为拖慢项目前进的“锚”。现在,我们可以构建 AI 机器人来完成这些工作。这是我认为非常重要的一点:找到那些无聊却昂贵的事情,把它们交给 AI。 当然,这也带来新的困惑。如果 AI 取代了初级工程师,我们又该如何培养资深工程师?难道指望 AI 自己成长为“高级程序员”,而人类程序员逐渐消失吗?我并不这么认为。我们似乎正在逼近某种上限:AI 能做很多事,但仍然需要人类以某种监督者的角色参与其中。 可以预见的是,工程师的金字塔正在变窄,入门层级的人变少了,而我们需要认真思考,如何在这样的环境下培养下一代资深工程师。 Eirini:如果把时间拉长到未来五到十年,在一个更加 AI 原生的世界里,你认为 TypeScript 作为一门编程语言会如何演进? Anders:我认为它的演进方向其实相当清晰。JavaScript 已经不再是一门年轻的语言,它有一套成熟的标准化流程,而我们也深度参与其中。TypeScript 会沿着 JavaScript 的标准化路径继续发展,同时在其之上补充必要的类型系统能力。 真正充满不确定性的,是工具层面的变化。谁能想到,随着“对话式编程”这类形态的出现,命令行工具又重新变得如此重要?过去,AI 更多是作为助手存在:开发者在 IDE 里,AI 帮你更快地输入和补全代码。但现在,这种关系正在反转。AI 开始承担主要工作,而人类转向监督和审阅。此时,AI 并不一定需要我们传统意义上的 IDE,尽管它仍然需要语言服务。 这也是为什么 MCP 这类技术开始变得有吸引力:通过把语言服务接入 MCP,让 AI 能够提出语义级的问题、重构请求等,并在一定的确定性边界内完成工作流。这本质上是在用 LLM 或 Agent 的方式,完成过去只能在 IDE 中完成的事情,这将深刻改变开发工具的形态。 Eirini:围绕 TypeScript 或你们的工作,有没有哪些你希望公开澄清的误解?或者哪些你觉得被社区忽视、但其实很重要的事情? Anders:在开源领域,我们与社区的距离非常近。如果哪里不对劲、存在摩擦,几乎会第一时间被反馈出来。比如这次转向原生代码的决定,确实引发了不少争议,有人认为我们应该选择另一种编程语言。但我始终坚信,我们为这个目标选对了工具。过去一年里,这个决定的成果已经逐步显现。 不过,开源本身就是一种微妙的平衡。一方面,你在无偿地把成果交给世界;另一方面,这个项目往往由一家商业公司资助,而公司必须以某种方式生存下去。总得有人支付账单。因此,我们团队始终处在一种张力之中:如何让开源项目既符合社区期待,又与公司使命保持一致。这并不是 TypeScript 独有的问题,而是当今几乎所有开源项目都面临的现实。至于是否存在一种更好的激励机制来回馈长期投入的人,目前还没有答案。 Eirini:开源的可持续性,确实是一个反复被提起的问题。 Anders:大量企业的正常运转,事实上依赖于那些支撑其后端的开源项目得到持续维护。但现实中,很多人对开源的态度仍然是“索取多于付出”。在微软,我们至少在努力以一种更真诚的方式参与其中。仅 TypeScript 项目,就已经累计投入了数百人数年的工作量;而 Visual Studio Code,投入甚至可能达到上千人。 Eirini:如果不算你自己参与创造的语言,你最敬佩、最尊重哪一门编程语言? Anders:任何一门能被程序员广泛使用、甚至能进入讨论范围的编程语言,都一定有其可取之处,因此都值得尊重,我深知一门语言要走到这一步有多难。 以 Rust 为例,我非常敬佩它通过借用检查器来探索一种不同的内存管理方式,试图在不依赖昂贵自动垃圾回收的情况下保证安全性。我也很尊重 Go,尽管它在设计上有些“怪”,常被认为不太正统,但它实际上提供了一种简单、内存安全、类型安全的“现代 C”的思路。至于 Python,它的成功不需要多说,它驱动着 AI 和机器学习的发展,令人难以不心生敬意。 从语言设计者的角度看,我们都站在前人的肩膀之上。如果设计一门语言却不向其他语言学习,那是愚蠢的。经验与智慧就在那里,理应被尊重和继承。 Eirini:当你放眼整个以 GitHub 等协作平台为中心的软件开发生态时,是什么让你对未来保持乐观? Anders:仅仅是它依然存在这一事实,就足以让我感到乐观。开源本身是一场巨大的实验,尽管至今没人真正解决“如何为开源持续提供资金”这个问题,但它不仅没有衰退,反而比以往任何时候都更庞大、更活跃。 当然,其中也有大量噪音,有不少项目缺乏维护,但不可否认的是,这些代码记录了软件演化的全过程。以我们为例,转向这种协作工作流后,十二年的历史都被完整地保存在那里,可搜索、可追溯。如果我记得某个问题曾被讨论过,只需要去查找,而不必面对一封再也找不到的旧邮件,这种价值是巨大的。正因如此,我由衷地高兴看到它仍在持续增长,并顽强地存活下来。 参考链接:不如直接修 JS:TypeScript 的顿悟时刻
JavaScript 单线程的天花板:我们在浪费 90% 的算力
“最适合 AI 的语言”
作者:王博涵 小步外勤产品总监,外勤管理数字化专家 在外勤人员占比较高的企业中,管理难点往往并不在于制度本身,而在于执行过程是否真实可控。 员工每天在外奔波,管理层却很难持续判断行程是否合理,现场是否到位,费用是否按实际发生。 过去数年里,定位打卡曾一度成为外勤管理的常用手段。但随着业务规模扩大,这种以点位记录为主的方式,很难支撑过程管理。定位无法连成轨迹,停留无法量化,外勤行为仍然处在不可验证的状态。 故而近几年越来,越多的企业开始将人员定位管理系统引入到外勤管理体系中,用更连续、更真实的数据,支撑人效管理和费用管控。 从实际应用情况来看,目前人员定位管理系统主要呈现出三种不同的发展方向。 这一类系统多是从行政考勤延伸而来的,常见于通用办公平台中。其主要功能便是记录上下班位置,配合简单的地理围栏,解决是否到岗的问题。 这类系统在人员规模较小、外勤占比不高的企业中有一定的实用价值。但在实际外勤场景中,它们往往只能记录零散的定位点,无法形成完整轨迹,也无法判断员工在客户现场的真实停留情况。 同时,防作弊能力相对有限,对虚拟定位、位置修改等行为缺乏有效识别手段。 因此,这类产品更适合作为基础考勤工具,而不是完整意义上的人员定位管理系统。 随着外勤管理要求的不断提高,越来越多企业开始关注过程真实性和执行质量。而这正是管控型人员定位管理系统的核心价值所在。 这一类系统不再只是关注员工有没有到达,而是重点解决几个关键问题:是否真实到场,是否按要求完成拜访或巡检动作,路线是否合理,费用是否真实发生。 围绕这些真实的管理需求,人员定位管理系统也在不断演进,从单一记录位置,逐步走向对过程真实性和执行质量的管理: 这一类人员定位管理系统,已经成为快消巡店、医药代表拜访、物业巡检、自备车销售等场景中的主流选择。 在部分高风险行业,人员定位管理的核心目标并不在于效率,而在于安全。 这类系统通常结合室内高精度定位、传感设备或卫星通信技术,实现更高精度的人员定位和状态监测。例如在矿井、化工园区、电力施工等场景中,用于实时掌握人员位置,并在发生异常时及时预警。 由于其建设成本和部署复杂度较高,这类系统通常只适用于特定行业,并不适合大多数日常外勤管理场景。 在选型过程中,企业很容易被各种功能描述吸引,但真正决定系统价值的,往往是其是否贴合实际管理逻辑: 首先是定位数据是否连续可信,只有能够还原完整轨迹,定位数据才具备管理意义。 其次看系统是否围绕真实业务流程设计,是否支持巡店、巡检、拜访等标准动作的顺序执行,是否能够通过定位约束避免走形式。 然后看费用数据是否基于真实行为产生,如果里程和补贴仍然依赖人工填写,那么人员定位管理系统的价值就会大打折扣。 最后还要看系统是否具备长期落地能力,外勤管理不是一次性全部上线,而是需要持续优化制度和流程的,这对服务能力提出了更高要求。 从实际使用情况来看,不同企业的需求差异明显: 最后,需要清楚的是人员定位管理系统的价值,从来不只是记录位置本身,而在于通过真实数据,让外勤管理从经验判断走向客观决策。
当前人员定位管理系统的三种常见形态
第一类 偏基础的定位考勤系统

第二类 面向业务过程的人员定位管理系统

第三类 面向安全场景的增强型定位系统

如何判断人员定位管理系统是否真正适合企业

人员定位管理系统选型建议
同事告诉我今天年会我有一个奖杯,准备下获奖发言
入职 10 年,这是第 12 个奖杯,心里五味杂陈,脑子里冒出来的是标题这句话。
常言道色字头上一把刀。(为什么我打的是句号呢。因为键盘的逗号太难按出来了)但是即使东子这样的千亿大佬家有娇妻也难逃过。所以普通人除了出家怎么跨国情色一关。
或者说尽量花费少的时间,(咦这次居然一下就按出逗号了,神奇,神奇。又没了)。而不是天天胡思乱想



OpenClaw对接聊天APP及AI助手工具 此处以飞书为例,输入插件下载安装命令: 等下载安装完成后。在命令行下运行openclaw图形配置界面。 回车 回车后,根据提示输入飞书App ID和App Secret。 在飞书开放平台应用凭证获取,打开飞书(https://open.feishu.cn/app/),点击左边凭证基础信息,在页面中找到 “App ID” 和 “App Secret” 两个数据,分别点击右侧 “复制” 按钮,将其复制到openclaw配置界面。飞书配置参考下一章节。 输入应用凭证后,回车完成配置。 openclaw gateway restart ,重启网关服务。 运行openclaw status,查看状态是否正常。 以上配置完成后,即可上手使用。快上京东云开启一键部署,让 openclaw 成为你专属的 24 小时数字员工! 创建飞书企业自建应用 飞书应用权限与事件配置 此步骤分为「事件配置」「权限配置」「应用发布」三部分,全程在飞书开发者平台操作,按顺序执行: ⚠️如果这一步提示 “未建立长连接”, 请检查自己的APP ID和APP Secret是否已正确配置。 (操作见上一步:添加飞书channel配置-配置APP ID与APP Secret) 3.复制以下 JSON 代码,粘贴到导入窗口的输入框中,点击 “导入” 按钮,等待权限导入完成: 代码语言:txt AI代码解释 4.导入验证:页面显示 “导入成功”,且权限列表中出现上述导入的权限,即为配置完成。 填写版本号与描述后,保存并发布; openclaw onboard 按键盘上左右方向键,选择到“Yes”后,按回车键开始配置。 Onboarding mode 选 QuickStart。 选择Qwen等模型。 回车确认。 复制地址在浏览器中打开,后登录账号确认通过。(需要先注册账号https://chat.qwen.ai/)。 选择默认模型后,回车确认。选择选择重启网关服务后即生效。 技能包(Skill)配置 新手暂时无需添加额外技能包,选中 “No” 跳过,按回车键确认; Hooks 配置 选中 “session-memory”(启用记忆功能,支持多轮对话上下文关联,避免每次聊天都需要重复说明需求),其他两项可根据需求选择。按回车键确认;1、对接飞书聊天APP
openclaw配置
openclaw plugins install @m1heng-clawd/feishu
cd /root/.openclaw/extensions/feishu/
npm install --verbose #此步骤安装时间较强长,请耐心等待。
open channels add
验证飞书接入
飞书机器人配置
(1)事件配置
(2)权限配置
{
"scopes": { "tenant": [
"contact:user.base:readonly",
"im:chat",
"im:chat:read",
"im:chat:update",
"im:message",
"im:message.group_at_msg:readonly",
"im:message.p2p_msg:readonly",
"im:message:send_as_bot",
"im:resource" ],
"user": [] } }
(3)发布应用
2、更换模型
3、常用命令汇总
查看版本 openclaw --version 查看运行状态 openclaw status 启停Bot openclaw start/stop/restart 启动openclaw配置 openclaw onboard 启动Openclaw的TUI openclaw tui 通过SSH连接TUI ssh root@公网IP 重启网关 openclaw gateway restart 查看已安装插件 openclaw plugins list 安装插件 openclaw plugins install 插件名 更新插件 openclaw plugins update 插件名 卸载插件 openclaw plugins uninstall 插件名 查看帮助 openclaw --help
OpenClaw是少数真正具备系统级操作能力的个人智能助理: 这样一个强大又敏感的 AI 助手,该运行在哪里?更安全、更稳定的方式,是将其部署在独立、隔离的云端环境中。 京东云全面上线 openclaw(Clawbot)!京东云轻量云主机现已预置 openclaw 应用镜像,无需手动配置环境,2步即可完成部署,让你的 AI 助手秒级上线、全天候待命。 在京东云控制台创建轻量云主机,选择: 镜像名称:openclaw(Clawdbot) 规格建议:2 核 2G 起 (推荐 2 核 4G 以获得更佳体验) 创建成功后,进入云主机列表页,点击右边操作列的【查看】,打开18789端口。 点击【防火墙】,打开后点击【添加规则】。 在目标端口中输入18789,源IP输入0.0.0.0/0,点击【保存】。 再次转到轻量云主机列表,记录下公网IP地址,点击【登录】。 通过WebTerminal登录云主机。 进入配置界面。 通过webTerminal登录系统后,执行下面的命令。 bash init-openclaw.sh 18789 pk-03bf0b76-8326-4ad7-91bf-293c5dd35c8d 公网IP \#红色部分替换成你的API-KEY,API-KEY获取步骤参考下方【获取API-KEY】章节。 回车后,生成可以直接访问的地址【http://公网IP:18789?tokan=字符串】。复制在Web浏览器中回车打开。 出现openclaw的web交互网站,可以直接和AI助手对话了。 登录京东云JoyBuilder 模型开发平台 2.0,进入API-KEY 管理页面: (https://joybuilder-console.jdcloud.com/system/api-key/list) 1、点击【创建】按钮,生成新的 API-Key; 2、选择长期有效,点击【确定】。 3、生成长期的API-KEY,点击右边复制图标复制API-KEY。 4、在“修改 API-KEY”页面中,为该 Key 配置可访问的模型服务,必须包含以下模型:DeepSeek-V3-0324、DeepSeek-V3.2、DeepSeek-v3、Qwen3-235B-A22B、Kimi-K2-0905-jcloud 5、选择需要的模型,或者全部选上。点击【确定】完成模型绑定。 6、为了保证模型正常工作,需要至少保证账户中有金额。点击充值完成京东云账号充值。第一步:一键创建实例
第二步:配置openclaw
获取API-KEY
很早之前,为了实现一些自己想要的功能,制作了这个阅读器,结果慢慢缝缝补补,也功能也越来越多
此次更新将安卓调整为付费模式,未激活状态下也为全功能版本,仅限制书籍导入数量,可以在体验后决定购买
经过过去一段时间的断断续续的更新,Moeli 阅读现在已经支持了以下功能:
书籍格式支持:Epub 、MOBI 、cbz 、Epub (漫画)、txt 、azw3 、azw4 文件
可以将书籍按系列分类、排序,目前已经支持按名称、日期、作者、最近阅读和拖动排序
支持添加标签分类
统计功能:支持热力图和柱状图显示
支持通过 WebDav 实现数据同步
自定义书籍信息
自定义书籍封面
阅读计时器
夜间模式适配
文字类书籍阅读有以下功能:
漫画书籍阅读有以下功能:
目前正在开发的功能:
准备开发的功能:
下载连接: https://reader.moeli.top/
下方为预览图








上一篇写浏览器插件的笔记还留了个小尾巴,这次继续补交作业,分享一下我在用的 16 个油猴脚本。 🐵🐵🐵
上一篇写浏览器插件的笔记 极简风效率控:试用过 100+ 浏览器插件之后,我只保留了这 16 款 留了个尾巴,这次继续补交作业,分享一下我在用的油猴脚本。

我们常说「油猴」,但其实我们绝大多数人在用的都是「篡改猴」。
油猴(Greasemonkey) 是 2004 年由 Aaron Boodman 开发,专属于 Firefox 浏览器的用户脚本管理器,功能相对比较基础,更侧重原生脚本执行。
篡改猴(Tampermonkey) 是 2010 年由 Jan Biniok 开发的衍生工具,适配 Chrome、Edge、Safari、Firefox 等多浏览器,兼容性更广,且功能更丰富,如脚本同步、内置编辑器、兼容性优化、批量管理等。
所以目前的生态现状就是:篡改猴成为全球用户首选,用户量更大,生态更活跃;油猴用户量较少,但开创地位不可替代;同类插件还有饱受诟病的「暴力猴(Violentmonkey)」,这个我就不推荐了。
无论你使用上面哪一种 「脚本管理器」,其所能运行的内容都是基本通用的,也就是我们下面推荐的 16 个「脚本」。

别被名称迷惑了,不是只支持百度,我用这个优化 Google 搜索页。
https://greasyfork.org/zh-CN/scripts/14178
在线看图工具,支持图片翻转、旋转、缩放、弹出大图、批量保存。
https://greasyfork.org/zh-CN/scripts/24204
复制当前页面标题及网址,支持复制为 HTML 及 Markdown。
对于我们 经常分享网址,或者需要在笔记中插入链接的人 来说,这个脚本非常实用 (与我上次推荐的插件「Tab Copy」可以二选一)。
https://greasyfork.org/zh-CN/scripts/28056
一个用户脚本:在任意网站上粘贴、拖拽或选择图片,批量上传到 Imgur / Tikolu / MJJ.Today / ImgBB / Appinn / Photo.Lily / 111666.best(可选择图床),并按需自动复制为 Markdown / HTML / BBCode / 纯链接。支持可配置的站点按钮(兼容单页应用),提供本地上传历史便于快速复用。
日常泡论坛、经常需要用图床的人,都来试一下,非常好评!
https://greasyfork.org/zh-CN/scripts/553341
支持图库、写真、漫画的网站 1000+,朴实无华直观操作的 UI,图片全量加载,简易的看图功能,漫画无限滚动阅读模式,下载压缩打包,如有下一页元素可自动化下载。
https://sleazyfork.org/zh-CN/scripts/463305

通过颜色高亮的方式,帮助你快速判断一个 GitHub 仓库是否在更新。
https://greasyfork.org/zh-CN/scripts/524465
一键下载对方 Instagram 帖子中的相片、视频甚至是他们的快拍、Reels 及头像图片!
https://greasyfork.org/zh-CN/scripts/404535
豆瓣和 IMDb 互相显示评分
https://greasyfork.org/zh-CN/scripts/7687
My Userscript 是一款智能的用户脚本管理工具,能够自动检测并显示当前访问网站可用的 UserJS 脚本,并提供一键安装到油猴扩展的便捷功能。该脚本采用优化设计,移除了冗余依赖,提升了性能和用户体验。
https://greasyfork.org/zh-CN/scripts/548869
一个优雅的 RSS 阅读器用户脚本,将 XML RSS 源转换为人类可读的 RSS 界面,支持双栏布局、主题切换和响应式设计 (与下一个「RSS+」搭配使用效率更高)。
https://greasyfork.org/zh-CN/scripts/546910
显示当前网站的所有 RSS(如果有的话),能找到很多 RSS 订阅源!
如果网站有 RSS,则会在页面右下角显示找到的 RSS 数量,点击会显示详细信息 (与上一个「RSS 预览」搭配使用效果更好)。
https://greasyfork.org/zh-CN/scripts/373252
优化你的推特(X)浏览体验,直接在图片和视频(GIF)上添加一个便捷的下载按钮,一键轻松保存喜欢的媒体内容。
https://greasyfork.org/zh-CN/scripts/545186
终极自动翻页 - 加载并拼接下一分页内容至当前页尾,智能适配任意网页。
https://greasyfork.org/zh-CN/scripts/438684
豆瓣图书页显示多平台搜索按钮 + 微信读书推荐值 + Goodreads 评分。
https://greasyfork.org/zh-CN/scripts/546348
一个可扩展的通用型小说下载器。
https://greasyfork.org/zh-CN/scripts/406070
自动展开文档隐藏部分。
https://greasyfork.org/zh-CN/scripts/438656
快到集市的那条路变得平整,裤腿内侧沾满了泥,却没停下来琢磨这件事,依旧往集市走。路的尽头,天作背景,光线刺眼,我突然想起什么:“我活了好久呀,感觉活了好久好久,这是第一次意识到自己活了好久。”
我摸清了树结果的规律:叶子掉光,下雪,化雪后没几天就会长出花蕾,最先来的是开花,花开之后,绿叶才会慢慢冒出来。这是件很自然的事,却关乎着未来能吃到多少果子。每次下雨,树下都会掉很多花,掉得越多,往后的果子就越少。
讨厌上课,老师总打人,打手板能打出血泡。考完试会挨打,检查作业会挨打,背书没过就要留堂,硬熬到天黑才放我回家。读书实在没意思,老师讲的内容,我完全融不进去。我喜欢放空,喜欢去山间探险,喜欢到田里捉黄鳝、泥鳅,喜欢追着叼着虫子的鸟,去寻找雏鸟。可学习太无聊了,老师整天巴拉巴拉讲个不停,无趣至极,我根本听不懂他们在说什么,还总被莫名打骂。至今记忆深刻的是,一次数学考试,有几道题只要写一个“解”就能得一分,我却没写,为此挨了一顿打,手掌被打出了血泡。
妈妈考我从 1 数到 100,这串数字那么长,我怎么都记不住,根本数不下来。妈妈让姐姐数一遍,我盯着看,可还是记不住。1 到 10 我能数,但后面的就不会了,也不明白为什么要弄这么长的一串数字。
爷爷每次走亲戚吃酒,都会带糖回来,分给我和姐姐。他是个极有规律的人,知道什么时候该做什么事。我对季节的感知,大多都是看爷爷的一举一动自己悟出来的。爷爷凌晨三四点就起床,先煮一大锅猪食,再做早饭。我们吃完早饭,我和姐姐去上学,中午回家时,他也回来了,接着做午饭。通常我或姐姐烧火,爷爷炒菜,可这火总不好烧。有的菜需要大火,我却把灶烧灭了,连火星子都不剩,用火钳扒拉半天,只有烟没有火,最后爷爷只能冷锅炒菜,现在想起来都觉得特别搞笑。
早上爸爸给我换衣服准备上学,秋衣昨天才穿,一点都不脏,我不想换,跟他说了,他却不管,硬是换上了他准备的衣服。外面下着雨,我的水靴坏了,会渗水。姐姐换好了新的水靴,爸爸给我拿了一双袜子让我穿,我不肯——鞋子都坏了,穿袜子没多久肯定会湿哒哒的。我刚表示拒绝,还没来得及解释,头一阵眩晕,脸上传来一阵挤压感,紧接着就是发烫的痛感。“还敢跟我犟!”他居然直接踢了我一脚。我到现在都不知道自己最后是怎么出门的,只记得捂着半边脸,哭哭啼啼去了学校。别人问我脸怎么了,我就说爸爸打的。晚上爷爷回来,我在他跟前玩,他看到我的脸,把爸爸狠狠说了一通。那时我心里就有了一个想法:如果我以后有了孩子,他要是做了我认为不对的事,我一定要先听他的解释,绝不能动不动就打人。
中学离家很远,我每周回家一次,周五离校,周日返校。这样其实挺好的,我讨厌做家务,在学校就不用做了;只是每次周五回到家,总有一大堆家务等着我,难免心生厌烦。在学校的日子,每周会有几块钱的生活费,我自己也会带咸菜,基本一周顿顿吃咸菜,生活费几乎撑不过周日当天。初中是全新的环境,有新的老师、新的同学,一切都生机勃勃。课堂上的内容,我终于能融进去了,也开始慢慢学会总结、学会思考。
初一的某天,我突然悟到了从 1 数到 100 的真谛:只要数满 10,就往前进一位,然后重复数字 0 到 9 就好。比如数到 9,接下来就是 10;从 0 数到 9,再进一位,就是 20,接着又从 0 数到 9,就这样重复,就能数到 100 了。顺着这个原理,何止数到 100,数到一千、一万都可以,只要有时间慢慢数就行。那时候我就在想,要是当初妈妈能这样教我,我是不是早就学会从 1 数到 100 了。
我在班上当上了课代表,学习基本跟着课程节奏走,大多数知识都能掌握,除了英语,其他学科都能及格。我也能清楚地知道自己的学习质量,不再像小学那样混日子。现在想来,小学时光于我而言,更像是一段学前班的日子。
爷爷的身体不如从前了,远处的田地顾不上打理,只在家周围的地里种些庄稼。不知从什么时候开始,爷爷每天晚上都会咳嗽,我连睡觉都会被他的咳嗽声吵醒。有一次被咳醒后,我随口抱怨了一句,声音很快就被他的咳嗽声盖过了。某天晚上,我和爷爷一起坐在火桶上烤火、看电视,爷爷突然问我是不是嫌弃他,那一刻我无地自容,只能干笑着敷衍过去。
爷爷的病越来越重,爸爸从外地回来照顾他,还带他去县城做检查。后来爸爸还和卫生院闹了一次,因为卫生院的诊断结果和县城的不一样,也就是说,爷爷之前一直吃错了药。这些事我都是听来的,因为我在学校上学,只有周六周日才能回家。爷爷看起来更苍老了,整个人毫无生气。趁着中午阳光好,我给爷爷洗澡,他的身子骨瘦得只剩一把骨头,背也佝偻着……后来,姑姑、姑爷他们都回来了,买了各种各样的好吃的和营养品。可我心里清楚,不是买了营养品,就能把爷爷的身体补回来的,关键是一切都太晚了。有家里大人照顾爷爷,我和他接触的机会变少了,但他的身体状况一周比一周差:前一周还能说话,后来连话都说不出来,也不吃东西了;嘴里有痰,就含点白酒再吐出来,输液也完全没用,药液都积在四肢,身体根本吸收不了。那段时间,我整个人像活在梦里,却又无比清醒地知道,到底发生了什么。