c4605 (@c4605) profile picture

除“我”之外,你不可有别的神

Shanghai
Joined April 2009
Photo by c4605 (@c4605)Photo by c4605 (@c4605)Photo by c4605 (@c4605)Photo by c4605 (@c4605)Photo by c4605 (@c4605)Photo by c4605 (@c4605)Photo by c4605 (@c4605)Photo by c4605 (@c4605)Photo by c4605 (@c4605)
c4605 retweeted
花费16天,我用 Opus 5.5 将小王子的故事制作成了3D剧情游戏 结合Tripo+Blender,Opus 5.5 将小王子故事中的每一个星球变成了可探索的3D场景 希望大家能支持一手,后续会开源整个游戏,以及详细制作流程 Welcome to The Little Prince: Across the Stars✨:littleprince.dev/
1,406
1,751
872
17,160
3,896,198
📐 Embed third-party content without extraneous scrollbars → goo.gle/4jT0nvM Chrome now offers support for frame-sizing, letting cross-site iframes grow as internal content expands. Try it out as a progressive enhancement.
5
8
62
11,274
c4605 retweeted
S1. Give agents the right context. S2. Give agents continuity. S3. Make them happy.
1
33
Effect v4 is here. One ecosystem. Zero dependencies. The next chapter of Effect and the foundation for building reliable software and AI agents in TypeScript.
81
320
125
2,313
385,008
最近一直在折腾一个新项目:Rungic。 它做的事情很简单: 把一台普通 Android 手机,变成一台属于你自己的 Agent Computer。 Rungic 是开源的 手机里运行完整的 Ubuntu + KDE Plasma,可以直接跑 Firefox、VS Code、Blender、Krita,并使用手机自己的 GPU 加速。 更重要的是,Agent 有属于自己的桌面。 你可以继续正常使用手机,它在另一个 workspace 里自己打开软件、操作 GUI、写代码、跑任务,最后把结果交给你。 以及,这里的电脑不是云端租来的: Linux 环境、文件、GPU 和执行算力,都在你自己的设备上。 接上电视的 MiraCast ,它又可以直接变成一台 PC。 目前默认 Agent 使用 Codex,但 Rungic 并不绑定某一个 Agent。它真正提供的是 Linux、桌面控制、MCP、手机能力和 Agent Workspace 这些基础设施。 Open Source. Own your computer. Own your compute.
58
78
29
442
144,020
在 React Native 仍能胜任的前提下,主动地迁移到 Native。不管从第一性原理出发来看,还是从 AI Coding 发展阶段出发去看,这个技术决策都是灾难级的。 从第一性原理出发,Types are propositions, programs are proofs, tests are sparse samples and reward signals, specs are executable intent under negotiation. Shopify 的这个迁移,相当于将作为 Single source of truth 的、确定性的、更多全称量化的代码资产—— React Native Types/Programs,替换为多源的 N 份源码,试图将跨端逻辑一致性,通过模糊的 Spec 表述、稀疏的 Testing 采样、概率性的 LLM 生成过程来维系。 相当于把两条腿打断,再蒙上眼睛,从此以后靠双手在地面上匍匐前进。 从 AI Coding 发展阶段来看,也不急于一时一刻,也不急于激进整改。可以说,半年后再开展,借助那时必然更强大的模型、更成熟的 Agentic Coding 工具和最佳实践,要完成 Shopify 现在这个迁移,更加容易,成本更低、效率更高、质量更好。 也就是说,什么都不做,只是等待半年,就自然拥有了潜在收益和便利。工程师团队在此期间可以关注更有性价比的其它重要工作,而不是在高层要求下被动参与运动式改造。 Shopify 这个糟糕的技术决策带来的负面影响,才刚刚开始。
54
2
1
44
15,187
If you are a Mac user, check this recordly.dev Damn.
99
232
18
4,693
1,349,337
Many of you have been asking for this, so here we go: Use any @Capacitorjs plugin with @Lynxjs_org. Introducing 🐈‍⬛ lynx-capacitor 🔌: a thin, drop-in bridge for running Capacitor plugins through Lynx’s NativeModule API.
6
3
3
29
3,681
inference: 估摸 reasoning: 寻思 岂不美哉
inference 和 reasoning 的中文都是「推理」,无疑是LLM时代的一大翻译失误。我建议 infer/inference改成「推断」。
8
3
27
6,249
これ本当にすごいんです。ジャイロの性質を活かし、病院等で手に生じた震えを打ち消すGYRO GEARというデバイスです。一昨年シンガポールの学会で見て衝撃を受けたんですよね。本当日本にも早く入ってこないかな。使ってみたいし、これで助かる人もたくさんいると思うので…
32
1,816
93
6,637
449,157
项目开源啦! ▶ 完整项目:github.com/ringhyacinth/Star… ▶ Skill:github.com/ringhyacinth/Star… 项目简介: 1. OpenClaw 龙虾的“像素办公室”:龙虾会根据状态自动走到不同位置(休息区 / 工作区 / bug 区) 2. 左下角添加他昨天的工作小记。 3. 支持邀请其他龙虾加入办公室(丰富功能开发中) 4. 手机端适配 created by: @simonxxoo and me
最新的界面做好了!如果大家喜欢的话,这个版本的skill我们也开源😆
149
392
76
2,519
546,898
一个老程序员看到喉返神经后的感慨 第一次看到喉返神经(recurrent laryngeal nerve,RLN)的解剖图,我怔住了整整半分钟。 那条从脑干发出的神经,本应直抵喉部,却偏要绕道下行,深入胸腔一圈,再折返向上。 在鱼类身上,这路径顺理成章;到了哺乳动物,却成了一个死结;而到了长颈鹿体内,它竟要绕行五米之远。 脖子越长,绕路越显荒唐,却无法更改。 生物没有“重构子系统”的权力,它只能在旧线路上修修补补。 那一刻,我想到的不是生物学,而是 CS:IP = F000:FFF0。 这是所有Intel电脑永远的“喉返神经”。 今天回顾历史,8086 的设计团队确实非常聪明。他们创造性地重新设计了通用寄存器、真正的堆栈指针、丰富的寻址模式、微码翻译、16 位算术和内部时钟,这是第一次将“现代 CPU”塞进一颗芯片。 只不过,由于当年寻址寄存器只有 16 位,电脑内存地址又想突破 64K,于是他们搞出了一个临时方案:“段左移 4 位 + 偏移”的假扩展。 没人想到,这个错位的 20 位怪胎设计,会将整整一代计算机文明锁死,成为个人电脑的“喉返神经”。 特别是当 IBM PC 采用 8088 之后,一切都被封印了。 1MB 地址空间被切割得支离破碎:0–640K 留给程序,640K–1MB 塞满显存、BIOS、扩展卡和通信端口。 装上 1MB 内存,一半被设备占用;装上 4MB,也得靠 EMS/XMS 驱动像撑大的气球一样勉强塞入。 整个电脑的寻址方式,就像那条喉返神经,被硬塞进早已不合身的躯壳中,却无法重新布线。 一个大程序被拆解成几十个 64K 的小盒子,链接器像搬砖一样辛苦。near/far 指针、C语言的五种编译模式(S、C、M、L、H)折腾得死去活来。 指针多算一步就跨段,call 和 return 仿佛不在一个宇宙;数组超过 64K 就会崩溃;中断向量表卡死在 0x0000;显存固定在 A0000。 我们当年写程序时,还“聪明”地利用这个“寻址魔法”,操纵段寄存器防拷贝、反调试、在ROM 区假写入、改CS偷系统中断向量表,这些“技巧”都依赖对段寄存器的操作,全是沿着那条畸形的“段:偏移”神经做文章。 当年我们依赖结构漏洞生存,而非凭借结构优雅编程。 8086 那套段寄存器本来只是权宜之计,到了 80286 却被推成了彻底的疯狂。 英特尔试图把分段模型扩展成一个庞大的保护体系:整个内存结构被迫围着“分段”这一原始补丁转圈。 最可怕的是,一旦进入 80286 的保护模式就无法返回实模式,整个系统像被封在铁盒里,只有重启电脑才能脱身。 直到80386 出来,强行引入平展寻址和分页机制,“寻址要分段”这条史前时代的畸形定律终于被压到架构底层,程序员第一次获得真正的32位寻址自由。 指针不再区分 near/far,返回地址不再错位,数组不会在 64K 边界自杀。段寄存器从主角沦为透明的影子。 这时,我们以为终于摆脱了祖先的那段绕路,以为 80386 的平展寻址把那条祖先绕路的“喉返神经”终于剪掉了,可事实不是这样。 你二舅还是你二舅,386 仍然是 x86。后来的 80486 还是 x86,哪怕英特尔改名成 Pentium,可它依旧是 x86 的延长线。 哪怕是后来变成 i3、i5、i7、i9,本质还是那一套祖传血统。名字怎么换都行,微架构翻了几十次代也行,但那条最深的印记永远在。 你当然可以把整颗芯片全部现代化,把页表、MMU、总线协议、缓存层级全换一遍,但只要它叫 x86,哪怕做到百核、做到 TB 级内存,启动的第一口气仍然必须像 1978 年的 8086 一样去跑那段古老的实模式流程。 电脑永远逃不掉那个噩梦:上电后,从 F000:FFF0 开始那个1978年的时刻醒来,假装自己还活在 1MB 的史前时代。 BIOS 再怎么换皮,UEFI 再怎么现代,都得先演一遍“古代仪式”:跑过 8086 的实模式,走过那套段模型、1MB 内存地图和 A0000 显存区,然后才缓缓进入保护模式、长模式,最终装载 Windows 11。 那条线路永远无法删除。抽象层越厚,它越像胚胎发育中必须重演的一段祖先结构。 那天,我看着喉返神经的图,再翻翻启动流程,忽然明白: 我们写代码写了这么多年,其实从未走出那个史前时代的影子。 文明再先进,外壳再光鲜,底下总有一条古老的线路,是你永远无法摆脱的。
144
409
39
2,678
733,712
无论是成就感还是钱 vue 都已经给了我足够多,所以现在我不会纠结别人对 react 或者 vue 的看法,爱用哪个用哪个是最好的 反正最后让你们都用 vite
41
17
8
563
70,627
今天给你们讲一下第一台国产Linux ATM机的故事 那是2015年冬天的一个故事 2015年的春节前2个月,我都要准备规划冬季旅游的路线了,杭州东方通信给我打电话,说他们领导准备把Windows XP驱动的ATM机器换成 deepin 系统。我当时接到这个电话的时候,我说你是骗子吧,我第一次见到骗子骗我要造ATM机器的。他说不是,你可以加微信,加了微信看名片像那么回事。 我说,好啊,怎么弄? 他说,他们领导想在春节把ATM机在国产操作系统上跑起来。我说,这个时间有点紧,需要我评估一下,最起码让我知道ATM机都是怎么制造的吧?他说,就明天吧? 哈哈哈哈,我还是喜欢这种做事直接的厂商 第二天我飞到杭州,看了一下他们工厂,其实ATM机还是比较简单的: 1. 一个铁皮柜 2. 铁皮柜里面放了台式机、打印机、网口、屏幕、键盘输入,就是一个普通的台式机 3. 核心是验钞模块,全世界都用的日立的验钞模块 我问为啥只有日立的?他们说日立的验钞模块可以做到100张毛爷爷100%正确,国产的验钞模块有可能会少数一张。哈哈哈哈哈 我研究了一下系统,就是Windows XP,显示器、打印机、键盘、USB控制器这些驱动都好整,就是那个验钞模块,从零写驱动加上测试,2个月不够呀。 我回去就叫上了刘先生,我说我们干脆先用Wine整一下吧,果然,经过3天的集中修复bug,我们成功的通过Wine把东方通信的ATM程序跑起来了,他们领导看到 deepin 系统启动后,wine驱动的应用程序直接就可以取钱,当场就震惊了。他们本来期望两个月攻坚,在春节前给领导汇报,没想到我们3天就搞定了。 这个速度他们是没想到的,你们也知道,国内政府主要就是喜欢整这种好大喜功的大活,我们3天就给他们把汇报的素材准备好了,领导们可有动力了。技术搞定了,我就跟商务同学说,靠你们了,我和同事回武汉了。 过了一个月,我的冬季旅游都规划好了,东方通信又给我来电话了,说领导说你们团队太牛逼了,能不能春节前整一个纯粹Linux的ATM机,不要Wine,毕竟是取钱的设备,Wine万一出bug了,承担不起那个责任啊。 我说,一个月,光写驱动都要一个月啊,来不及,来不及。 东方通信的哥们说你们想想办法吧,那时候在整新的操作系统发版本,所有内核开发人员全部在产品上,没时间。商务同学说我作为CTO一定要支持一下。实在没人,我就把Wine团队的负责人刘先生整到杭州去。我说,你先盯着吧,最起码人在现场,态度在那里。 果然几天后,东方通信的哥们跟我打电话抱怨,说我们不重视他们。我说,怎么不重视?他说每次开会我们30人,你们对面永远都是1个人。我说,你不要小看我们1个人,反正那次打电话不欢而散 我打电话问了一下刘先生,他们的需求明确不?刘先生说明确,就是要在Linux内核态写一个验钞模块的驱动 我说,你先顶一下,春节前实在没人了 过了半个月,刘先生说他搞定了验钞模块的驱动,我说啥?你怎么搞定的? 他说,就是写出来了呀。我说,你不是做Windows和Wine开发的吗?你又不会Linux内核 他说,因为他会Windows开发,所以我前3天详细问了他们验钞模块Windows驱动是怎么写的,觉得还蛮简单的。他就去杭州的一个书店买了一本Linux内核的书,白天和他们开会,晚上就看Linux内核的书,看了一个星期把书看完了,剩下的就是照着书里面的方法写驱动,3天就把验钞模块驱动写完了,剩下几天调试了一下,修了一下bug,就搞完了。 我:。。。 我记得第20天的时候,原生Linux + 验钞模块驱动的ATM机直接就可以吐钱,而且一张毛爷爷也不差的时候。整个东方通信的人都震惊了,这次震惊比上次3天Wine的方法跑起来还要震惊。 东方通信那个哥们在给我打电话说测试结果的喜讯时,我问了他:哥们,我们重视不?他说,重视重视,你们太牛逼了! 就这样,史上第一台Linux驱动的ATM机器就在2个月内开发好了,现在只要是邮政、广州农商行的ATM机器,背后都是Linux操作系统,哈哈哈哈 好了,喜欢我创业故事的朋友,欢迎点赞转发 喜欢我们团队的朋友,欢迎买一台懒猫微服支持一下,私信我买有优惠!
头两天有一个Linux内核的面试者来公司面试,我最后说了一句我经常会说的话:感谢您的面试,我今天没有任何问题了,您有什么可以问我的吗? 什么都可以问 面试同学说了一句话:我研究了很多技术,但是最近很焦虑,无穷无止的自我怀疑,我看了你的博客,我现在状态和当年你离开 deepin linux 的时候状态一样,你是怎么走出来的,你可以告诉我吗?我也读了你分享的《一个新世界》,越想越焦虑 我想了几秒钟,我是这样回答的: 首先推荐一本书,一行禅师的《活在此时此刻》,别看了禅师两个字,就觉得我们在讲玄学和禅宗,但是一行禅师是少有的通过生活琐事来讲正念的,强烈推荐阅读,他讲的比我好 然后我再分享一下我当时离开 deepin linux 的时候是什么心理,我相信和大家面临的是一样的: 当年想做很伟大的事情,就像小时候看比尔·盖茨传一样,希望成为那样的人,世界上很多人都用我写的操作系统,一说起来就觉得牛逼炸了。真的离开那一天,有很多不甘心,很多愤怒,很多焦虑和很多自我内耗(你们不要八卦我为什么焦虑,我们公司有一个原则,不攻击其他人,除非他是腾讯云)。 那段时间每天就像宝玉老师分享的推文一样,越看书治疗越难受,越想放下越放不下,此时此刻哪有正念啊?心里到处都是邪念,心乱的不行,越治疗越痛苦 后面是怎么走出来的呢?我回首这7年前,我给大家分享一个普通人可以执行的走出来的方法 1. 首先做一个5000~10,000公里的旅游:不管有钱没钱,没钱就穷游。当你花了20天时间在大自然中,不用工作的时候。大自然会吸收你身体的负能量,比如:腾格里早上5点的沙漠,祁连县冰川黑河旁的小山,青海湖边的石子路......当你走在大自然的时候,你最先 “感受” 到的不是工作、地位和比较,你 “感受” 到的是大自然的力量,你会感受到,我们在城市中在乎的东西,对于大自然来说,一点都不重要。大自然不需要环保,人才需要环保,大自然不会争论,它只按照物理规律运行,大自然不会失落,它的每一天都有它的状态 2. 旅游回来以后,找一下新的方向:创业也好,给别人打工也好,先做着。当你真正的再做新的事情时,你慢慢地就会放下。我原来最大的错误是,我痛苦的时候,当时就想找药。可惜焦虑这个药,病根来源于长期自己的逼迫,它的药方只有一个 -- “时间”。当你花了很多时间在新的事情上时,时间会自动让你忘记当年焦虑的事情。比如我现在在设计懒猫微服的硬件时,因为太有挑战性了,太好玩了, 你在问我当年离开 deepin linux 的痛苦,我不会像当年那样,我现在会笑着说:哦,那件事情啊,都过去了,我们聊聊懒猫微服吧?7盘全固态,原创操作系统,内网穿透牛逼,2300+应用,超级安全超级好玩....... 3. 把时间放慢:程序员这个群体,最大的焦虑是心中的 “完美世界”,我们期望现实世界就像二进制世界那样,分秒不差,架构、函数、参数命名、逻辑链、算法分毫不差的嘀嗒运行。不会的,现实不会这样运行,现实世界充满了偏见、忌妒、仇恨、情绪、利益,唯独没有完美。只要我们把时间放慢,目标放长。开源项目,今天没有修的issue明天修,今天没有看的书,明天看,今天没有解决的bug,明天解决.......你也许会说,这不是躺平吗?啥都不干才是躺平啊。而是尽力的去做,没有做到就明天做,标准是尽力即可。当我们把时间放慢,你会发现焦虑少了,睡觉也香了,身边美好的事情突然就多起来了 简单总结一下,治疗过去焦虑的方法是 “时间和专注新的事情”,预防未来焦虑的方法是 “不追求完美,尽力即可“。 好了,喜欢我创业故事的朋友,欢迎点赞转发 喜欢我们团队和产品的老板,私信我购买懒猫微服,有优惠!
95
84
19
818
261,087
一周前 Vercel 发了篇博客指责竞争对手 Cloudflare Workers 性能差,今天 Cloudflare 回应了篇博客承认错误,解释了造成问题的各种技术细节,现在把性能也追上来了 太佩服这种在竞争对手面前勇于承认错误的勇气和快速透明解决问题的态度了,现在倒是显得 Vercel 小肚鸡肠了...
25
50
9
697
83,206
Cute stickers i got recently :>
71
317
59
7,967
392,862
《How to Fix Your Context》这篇上下文工程指南,建议跟 Manus 六大上下文工程法则一起看,它们分别来自两个方向:一个是跑在工程一线踩过坑的 Agent 系统实践者,一个是站在系统架构角度思考 LLM 工作方式的认知构建者。 我把这两篇文章有一起读了一篇,有种“内功交叉灌顶”的感觉。 作者回顾了长上下文为什么会失败? 1️⃣ 上下文污染:当幻觉或其他错误进入上下文,并被反复引用时。 2️⃣ 上下文干扰:当上下文变得过长,以至于模型过度关注上下文,忽视了训练期间学到的内容。 3️⃣ 上下文混淆:当上下文中的多余信息被模型用来生成低质量的响应时。 4️⃣ 语境冲突:当你在语境中积累了与提示中的其他信息相冲突的新信息和工具时。 回忆下是不是都是自己遇到的问题,作者给了一些解决的思路,有很多跟 manus 惊人的一致。 1️⃣ RAG:有选择地添加相关信息以帮助 LLM 生成更好的响应 统一下认知,信息添加的底层逻辑一定不是查到了,而是查对了。作者强调 RAG 要有选择性的添加,而不是全部贴上;重点是围绕当前任务构建语义增强。 Manus 的做法是干脆放弃查入,把信息挂载在文件系统,留 path + 摘要 + 可调用工具。能明显感觉到 manus 对 token 成本的极致敏感🤭。 我自己的实践中最常见的失败是,RAG 查得很准,但 LLM 输出完全无感,因为 context 本身没告诉它该往这个方向推理。RAG 本质是建模信息在认知链条中的地位,不重要的别查入,重要的也别硬塞,要设计成“知道在哪 + 能够调”。这跟这两篇文章的底层逻辑就高度一致,真正高质量的 RAG,不在检索,在策略。 2️⃣ 工具配置:仅选择相关的工具定义添加到您的上下文中 作者提倡按需加载工具定义,而 Manus 的哲学是工具全集保持不变,用 mask 控制直接把权重干成负数。相比而言 Manus 的做法太巧妙了,可以说是对大模型底层原理应用的最佳实践了。 如果你踩过“工具定义变了导致 cache miss + hallucination 增多”的坑,一定能彻底折服。 但这两种方式解决的问题都高度一致,无非是你是靠 prompt 配置行为,还是靠 logits 控制行为? 我理解只要你希望上下文命中率高、模型行为稳定,就必须构建一个“行为可变但结构不变”的系统。至于选择哪种,重点都在让模型以为它有哪些选择。 3️⃣ 上下文隔离:将上下文隔离在各自专用的线程中 作者讲上下文隔离是为避免多任务混淆。Manus 虽然没有“线程”的抽象,但通过 append-only 的 context + 每轮状 态复述 + 工具调用封装,其实完成了逻辑线程的构建。 失败的上下文不要强行修复,而是重新创建一个上下文分支,把之前的 trace 作为引用历史保存下来。这点在实际开发中很关键 ,很多工程实践中都会出现“污染后还想继续用旧 context”的习惯,反而越补越乱。 我现在更倾向于一旦感知幻觉或目标漂移,就把当前上下文 snapshot 掉,开一个 fresh context thread,哪怕代价是多一次调用,也比把幻觉当真实继续往前错更稳定。 4️⃣ 上下文修剪:从上下文中移除不相关或不需要的信息 很多人以为修剪就是删“旧内容”,其实真正的 pruning,是删除“结构上已经失效的信息”。 他们的“能 offload 的就 offload,不能 offload 的就摘要”。我也一度以为摘要是浪费时间,但后来发现一段带摘要的 context,远比一堆片段更有推理价值。 尤其是在长任务执行中,摘要除了压缩信息,更多的是给大模型构造构造注意力锚点。我现在会把某些任务 summary 放在末尾,一方面压缩 token,另一方面也是引导模型聚焦。 顺带一提,很多人会选择把失败信息也修剪掉,但其实保留失败的 trace 本身也是一种重要策略。Manus 的做法是把失败信息 offload 到外部 trace 文件中(参考6️⃣),再在后续回顾或 summary 阶段引用。这跟人学习有点像,错误是成本最大的训练材料,不应该被直接忘掉。 补充个方法论: 上下文修剪,千万不要认为目的是“省空间”,核心是要让每个 token 都承担“策略密度”。我们最终修建掉的是模型注意力的错位。 5️⃣ 上下文总结:将累积的上下文浓缩成一个简要的总结 作者强调总结是为了更高效的行为生成。Manus 做得更极致,每一轮都复述当前目标 + 状态 + 期望动作,用自然语言重新激活注意力焦点。 我实测过不复述 vs 复述的差别:前者行为漂移率接近 30%,后者几乎稳定在主任务路径上。你能感受到的是 LLM 的注意力其实是个滑动窗口,不持续提醒,很容易跑偏,这一点就跟我们管理一个想法很多的员工一个道理。 说白了,总结不是让模型记住,而是让他去遗忘,终极目的是要做注意力的再分配。 6️⃣ 上下文卸载:将信息存储在 LLM 的上下文之外,通常通过一个存储和管理数据的工具来实现 这一部分我必须单独点个赞,确实简单有力量,很多人不以为然:就把信息放到外面嘛,有什么大不了的? 但真正在 Agent 系统里跑起来你才会发现:Context Offloading 是少数能从认知层面、工程层面、可扩展性层面都闭环的设计策略。 作者在文中提到 Anthropic 的 “think” 工具,他们干的事儿就很朴素:给 Claude 搞了一个专用 scratchpad,让它在正式输出前可以先写一写、想一想。我们过去总觉得 scratchpad 是辅助产出,但 Anthropic 的设计更像是,让 Claude 在回答前自己反刍一下。 Manus 给出的做法本质也是一样的,只不过它没有叫 scratchpad,而是把这套行为模块化写进 agent 文件系统,每一个都是模型在任务过程中产生的“中间态”,不属于主 memory,但又比 response 更结构化。 我们太容易陷入一个错觉,以为上下文是一个扔进去的信息堆,但其实真正有用的信息往往是过程中的状态,而不是最终的答案。但是这些状态恰恰是最不适合塞在主上下文里的,既容易冲淡主任务注意力,又会拖垮 token 成本。 实际上验证下来,给 Agent 留出一块临时记忆区,效果极其稳定,特别是在多步骤长任务里,模型不担不会迷失,反而行为会越来越收敛。 作者说得对,这东西简单到你不相信它有用。也许未来大模型的长记忆系统,真正的突破口不是在上下文窗口扩到多少 M,而是什么该存在主线程里,什么该写在 scratch 区。 简单总结下:从“怎么放信息”到“怎么设计上下文作为系统运行时” 加上最近对 vibe coding 的观察和体验,我现在越来越确信:未来 AI 系统真正的代码,一定是你写给模型的上下文构建逻辑。 这两篇文章,建议放进上下文工程必读清单。搞懂它们,搞 Agent 才算入门。
很多技术博客看完就忘,但 Manus 的这篇上下文工程日志,却让我有一种很久没遇到的熟悉感,就像十几年前我第一次读《编程珠玑》时那种“结构清晰又内功深厚”的惊叹:用极简的语言,把系统最核心、最隐秘的痛点一层层拆出来,再用“实践炼过、成本试过、坑都踩过”的方式,给出一套优雅得近乎朴素的工程解法。把你从“github 上一堆看起来能跑”的原型,带到“可以抗住百万次交互”的真实世界。 如果你正在构建 Agent 系统、研究 prompt 调度、RAG 链路、日志记录、踩过cache miss、上下文错乱、模型行为漂移等无数坑,那肯定非常能共鸣 Manus 的实用主义。 很多时候知道问题在哪,但还没把它总结成一条法则;明明做了优化,但没能力从认知上总结它为什么成立;但没人告诉你:其实这些事,别人已经系统总结过了,而且优雅 100 倍。我读 Manus blog 的时候,就有这种踏实感,原来我们绕过的弯,爬过的坡是可以被结构化定义下来的。 分享下我对 Manus 六大上下文工程法则的拆解,可以看作是“智能体上下文系统设计的六个底层约束”。 1️⃣法则一:围绕 KV-Cache 进行设计 让智能体变快,不一定靠生成快,记忆前缀不重算也能加速。我们经常把注意力放在 LLM 的生成效果上,优化 prompt 内容、格式、语言风格。对于聊天机器人,输入和输出的长度通常比较均衡。但对于AI智能体,情况则大相径庭,智能体场景中最昂贵的成本其实发生在前置阶段:当一个智能体执行一次“读取上下文 + 推理 + 输出调用”的循环时,它的输出可能只有几十个 token,而输入上下文可能高达几千甚至上万 token,在这种严重失衡的输入输出结构下,预填充阶段的计算成本才是拖慢系统、放大延迟的罪魁祸首。 如果你最近在做 multi-agent 系统,尤其是在“需要快速轮询”“低延迟交互”这些及时响应场景中,明显感到响应慢、链路卡顿、用户体验下降,那你极有可能踩在了这条隐藏的高成本区上,每个 Agent 都在重复预填整个上下文,导致系统性能雪崩。 Manus 的处理方式非常极致:把缓存命中率当作核心优化指标,哪怕为此牺牲 prompt 灵活性都在所不惜。 KV缓存是LLM的一项优化技术,它能缓存已经计算过的前缀(注意是前缀)的键值对,避免在后续请求中重复计算。为了最大化缓存命中率,Manus采取了以下实践: 保持提示词前缀稳定: 即使是单个token的改变也会使该位置之后的所有缓存失效。一个常见的错误是在系统提示的开头包含一个精确到秒的时间戳,这虽然能让模型知道当前时间,但却会彻底破坏缓存。 确保上下文是 append-only: 避免修改历史的动作或观察结果。同时,要保证序列化方式是确定的,例如,很多编程语言在序列化JSON对象时并不保证键(key)的顺序,这会悄无声息地破坏缓存。 显式标记缓存断点: 某些推理框架需要手动在上下文中插入缓存断点。在设置时,至少要确保系统提示的末尾是一个断点。 2️⃣法则二:掩码,而非移除 随着智能体能力的增强,其可用的工具会越来越多。很多人一开始觉得工具是智能体的核心,一个自然的想法是动态地管理这个工具集,比如使用类似RAG的技术按需加载工具定义。就是把工具按需加载、动态切换、上下文中途插入,这听起来很动态、很模块化,但在真正跑起来之后,Manus 发现这是一个陷阱:在迭代中途动态增删工具会带来两大问题: 缓存失效: 工具定义通常位于上下文的前部,每次工具定义变化,都会导致后续所有步骤的KV缓存失效。 模型困惑: 当历史记录中引用了当前上下文中已不存在的工具时,模型会感到困惑,容易导致格式错误或幻觉出不存在的动作。 你有没有遇到过越加工具模型越不稳定,生成经常“选错工具”“乱组参数”甚至出现没定义过的操作这样的幻觉,那你可能已经踩上这颗雷了。 Manus 的解法非常聪明也非常工程化:保持工具定义集稳定,转而使用“掩码”技术来约束模型的选择。通过在解码阶段利用logits处理器屏蔽(或强制选择)某些token,可以控制模型在当前状态下只能选择允许的工具,而无需修改上下文中的工具定义。 例如,当用户刚输入新指令时,Manus会通过预填充特定的回复前缀来强制模型立即回复用户,而不是先执行某个工具。此外,他们还巧妙地为工具名称设计了统一的前缀,如所有浏览器相关的工具都以browser_开头,所有命令行工具都以shell_开头,这使得在特定状态下仅允许某一类工具变得非常容易 ()。 这个设计的哲学很现代:不要试图让模型“理解你不想让它做什么”,你就直接不给它做的可能性。 3️⃣法则三:将文件系统作为上下文 上下文不是无限堆料,而是构建随取即用的语义型记忆索引。即使模型给你 128K、1M 100M的上下文窗口,它也依然不够。你不知道哪个网页会突然给你塞个两万 token 的 HTML,你也拦不住哪个 API 会返回一个五层嵌套的 JSON,你更不知道用户什么时候发来个几十页的 PDF。这带来了三个大的问题: 观察结果巨大: 当智能体与网页、PDF等非结构化数据交互时,一次观察就可能轻易撑爆上下文窗口。 性能下降: 即使没有超出窗口限制,模型在处理超长上下文时,性能也往往会下降。不止拉高计算延迟、引入注意力混乱,还让模型迷失自我。 成本高昂:即使有前缀缓存,开发者仍然需要为传输和预填充每一个token付费。 Manus 的做法有很强的借鉴意义,它做的不是扩容,而是外置。他们把文件系统当作一个无限持久化的“语义型存储空间”,它具有三大优势:大小无限、本质上持久、并且可由智能体直接操作。 模型在上下文里记录路径、摘要、索引,真正需要的时候再调用读文件这个工具。这种方法还支持可恢复的压缩策略:即使一个网页的详细内容因为上下文空间不足而被丢弃,它的URL或文件路径依然会保留在上下文中,智能体可以在需要时重新访问它。 这其实是 Agent 系统中一个很高级的认知结构:不是把所有信息喂给模型,而是训练模型具备“知道信息在哪”的能力。 4️⃣法则四:通过复述操控注意力 跟我们日常复盘碎碎念一样,Agent 执行过程中的目标也不是记住的,而是每一步都重新提醒一下自己。在我自己做 Agent 系统的时候,经常发现一个现象:模型走着走着就忘了它原本想做的事,偏离目标、越绕越远。我们管这个叫“迷失在中间”,但在工程语境里,这种“目标漂移”其实是上下文 attention weight 的失焦问题。 Manus 的解法很朴,每轮都更新一次目标和当前状态,然后把这个文件的内容贴到上下文最后。 看起来像是个复读机,但背后其实是一种“语义注意力偏置”:这个行为相当于智能体在不断地向自己复读它的总体目标和当前计划。由于LLM的注意力机制倾向于更关注上下文末尾的近期信息,这种复读有效地将全局计划推入模型的近期注意力范围,从而利用自然语言本身来偏置模型的注意力,使其始终聚焦于核心任务目标,而无需对模型架构进行任何特殊修改 。 我感觉这个方式特别美,因为它没有引入任何额外结构,但却做到了最接近人类不断自我提醒的认知行为。 5️⃣法则五:保留错误的内容 一句话:失败是智能体推理链上的必要节点,在大任务的执行过程中,失败是常态。几乎所有 Agent 系统都会有 retry 机制:出错就重来,格式错就重置。很多人为了“干净”,在智能体犯错时直接清缓存、重试调用,结果模型变成一个永远不长记性的工具轮回者。它永远不知道自己错在哪,也就永远学不会避开这个坑。它今天格式错一次,明天还错一样,明明是上一步才失败过的函数,它下轮又敢信心满满去调用。 Manus 的做法是反常规的,他们选择保留所有出错信息:失败调用、错误观察、甚至栈追踪,一条不删,照样放进上下文里。有了这些证据,模型就能在后续的推理中隐式地更新其内部的信念模型,从而调整其行为的先验概率,降低在相似情境下重复犯错的可能性。这种吃一堑长一智的做法,让模型记住自己干砸过,在未来的语义决策中,自动规避相似路径。 这种让模型知道这条路不通的方式,比任何显式标注更接近认知建模。所以,如果你发现 Agent 一直“重复同样的蠢事”,那就别再清上下文了,错是它的,但学会是你的责任。 6️⃣法则六:不要被少样本示例所困 你在构建提示词模板时,是不是喜欢封装成一串标准化样例?确实能跑得通。few-shot prompting 在很多任务中非常好用,但在多轮、动态任务中,如果你给的示例太相似、结构太固定,模型很容易陷入“模式依赖”,变成“照搬机器”。当你发现模型开始照猫画虎地生成、总在学你给的那个格式、甚至一字不差地模仿之前的样例的时候,就要开始思考如何构建样例,让模型的行为多样分布。 few-shot 用得太像 few-clone,会让模型陷入“格式安全区”,变成行动保守者,而不是策略探索者。 Manus 的做法是刻意制造结构化变体,在智能体的动作和观察中,有意识地引入少量但结构化的变体,给的示例语义一致但表达方式不同。通过打破一成不变的模式,有效地使模型的注意力多样化,避免其陷入单调的模仿循环,从而提高其鲁棒性和适应性。这个策略的高明之处在于你让模型理解还有别的方式也可以对。 最后 Manus 这篇小而硬的博客,像是你走了很远很远之后突然在半山腰看到的一块坐标石碑,告诉你你快进入上下文工程师的区域了。 做得越深,就越知道所谓“智能体跑不起来”,是根本没给模型构造一个可持续运行的信息生命系统,它记不清目标、摸不清状态、想不清下一步能干嘛,更不用说从失败中自我修正。 对我来说,这篇文章让我确认了我们走的那些弯路其实早有共性路径,也让我第一次能用一套更准确的语言来描述我眼里“一个靠谱的 Agent 系统到底需要什么样的上下文架构”。 只要你干过这些,你就会意识到:Prompt 是告诉模型你想要什么,Context是构建一个系统,让模型每一次都有机会自动靠近正确。 如果你正在做 Agent,或者计划进入这个方向,不妨用这六条 checklist 把你现在的系统过一遍:哪个上下文会频繁变动?哪个状态是隐式的?错误有没有暴露给模型?工具调用是否具备 mask 控制能力?你的记忆系统是全塞还是挂载的?
20
141
11
561
139,889
看到 alist 被以非常丑陋的姿态卖掉,对作者、用户、收购方都是个悲剧,感觉非常可惜,但从开源作者的角度又挺理解原作者的,现在破口大骂资本的 alist 用户应该都没体会过开源的苦,看不到作者的长期孤独贡献,只看到又少了一个可以白嫖的项目 看图二就知道这显然不是一个健康的开源项目状态,作为一个 50k stars 的顶流项目,contributors 只有 100 多,第二名非机器人 contributor 的贡献量刚到作者的 8%,再往下更是断崖减少,作者从 2024 年就已经很少提交了,后面也一直没有其他维护者接手,除非作者积极回归,这项目的最终死亡已经是必然了,只是开始死亡的时间在一年半之前 反观 RSSHub,虽然 star 没 alist 多但 contributors 人数接近 10 倍,在作者贡献量下降的时期也及时有其他维护者补充,总体维护效率并没有下降反而一直在上升 总之 alist 一直都不是一个健康的开源状态,离开作者根本无法存活,作者又长期得不到足够的帮助和资助,用户也视而不见反而都在反资本,至于那些非 contributors 趁热度 fork 出的各种 blist xlist,如果 forker 在 alist 还有救的时候都没想着去提交一行代码,现在等 alist 死了才出来扛大旗,真的能相信他们能够长期任劳任怨地维护吗? 对用户,与其破口大骂资本,不如想想你现在除了 alist 还在白嫖哪些开源项目,去看看它们还好么,有什么可以帮上忙的,哪怕只是去送上一份感谢,可能都能让那些可怜的牛马开源作者开心上好几天,能让项目多维持几天 对开源作者,怎么让开源项目到达健康可持续的状态,而不是最后被迫廉价丑陋变现,是一个值得更多思考的问题
63
174
35
1,127
268,500