聊天或许并不是个人 Agent 的正确打开方式
最近各家公司都发布了自己的 Personal Agent,这应该是我印象里,Agent 第一次以纯粹面向普通老百姓的 2C 形态落地。 从 openclaw 开始,我体验了各家个人 Agent 形态的产品,包括我自己为我自己写的,以及我自己为公司写的 Agent,我有一种感觉是,个人 Agent 其实是一个伪命题,或者说一个聊天形式的 Agent 并不是面向普罗大众的正确交互接口。下面是我认为的原因。
最近各家公司都发布了自己的 Personal Agent,这应该是我印象里,Agent 第一次以纯粹面向普通老百姓的 2C 形态落地。 从 openclaw 开始,我体验了各家个人 Agent 形态的产品,包括我自己为我自己写的,以及我自己为公司写的 Agent,我有一种感觉是,个人 Agent 其实是一个伪命题,或者说一个聊天形式的 Agent 并不是面向普罗大众的正确交互接口。下面是我认为的原因。
之前写了一篇 《尽职编程:AI Coding 时代的个体产出差异的来源》 引发了大家很多讨论,但那篇文章只写了工作态度,没有太多可以指导工作实践的技巧。所以我打算再分享下一些更具实操性内容。 网上关于 AI Coding 最多的讨论都集中在工具和模型,但我认为这种讨论就如同过去人工编程讨论用什么 IDE 和语言一样,没有太大意义。我发现自己现在似乎从来不在乎用的工具和模型是什么,我用过 cursor,windsurf,devin,codex,claude code,没有太大的感觉他们有什么本质的差异。在今年 Opu
这一年多的时间以来,AI Coding 已经从一个新潮的编程方式变成了默认方式,每个人都用着近乎相似的模型,相似的设备,相似的 Agent,理论上所有人产出的代码水平也应该相似,但如果你在一线工作过,你会发现实际情况恰恰相反,大家的代码产出水平方差反而比以往更大。这是一个相当有意思的话题,但是我却发现在互联网上鲜有人讨论。
我在 AI Coding 能力达到生产级水平后,先后在一家世界500强大公司和一家创业公司任职,有意思的是,我个人对待 AI Coding 的态度和实践在这两家公司截然不同。 在大公司的时候,由于我们在负责一个直接和商品定价有关系的重要系统,且系统已经历经了十几年的持续迭代,所以我对我自己和同事提交的每一行代码都要求极高,不管这行代码是不是 AI 写的,写代码的人必须要看过且看懂了每一行代码在做什么。如果有一个家伙提交了一大片根本无法人工审查的代码,我会对这个家伙非常生气,并认为这是对这个系统和其他同事的不尊重。在
学习一个技术最好的方式就是能够写一片文章把这个技术的原理解释清楚,本文记录了我在阅读 《Build a Large Language Model (From Scratch)》一书以及和 Claude Code 对话过程中的笔记,仅供参考。 术语解释 向量点积 定义:向量点积为标量 a = (a1, a2, a3) b = (b1, b2, b3) a · b = a1*b1 + a2*b2 + a3*b3 几何意义: a · b = |a| |b| cos(theta) 其中 theta 是两个向量的夹角。
最近在做一个思想实验,如果你面前有一个按钮,按下就可以让 AI 从世界上消失,你是否会按下。身边很多朋友的答案都是会毫不犹豫的按下,即便有一些人还是那种最拥抱 AI 的人。 拥抱 AI 和厌恶 AI 可以同时在一个人身上发生,我自己就是这样的人。我厌恶 AI,是因为对昨日世界的怀念,我拥抱 AI,是因为今日世界无法回退,我没有不拥抱的选择。
说来惭愧,我已经好几个月没有完全手写代码了,甚至像是把某个变量改一个名字这种活我都宁愿输入更多字符告诉 AI 来做而不是自己直接改了,因为我知道,哪怕是变量重命名这种简单的活,AI 也能做的比我仔细,它会检查所有用到这个变量的代码、相关的注释以及单元测试,然后一并都修改了,而我自己其实历史上就犯过不少忘记修改关联地方的错误。
2025 年 12 月跨年之际,为了赶在假期作废之前销假,我报了国内稻草人的一个徒步团,前往尼泊尔安纳普尔那山区进行了为期四天的 Poon Hill 小环线徒步。 尼泊尔最有名的两条徒步线路分别为 EBC 和 ABC。就 EBC 而言,我目前的身体状态和高海拔徒步经验远不足以应对,ABC 相对简单一些,但是依然有高反的风险。由于我印象里自己似乎从未到达过海拔超过 3500 的地区,所以我对自己身体适应高原反应的能力完全没有认知,于是就退而求其次报名了最高登顶海拔 3800 米,最高过夜海拔 3200 米的 Poon
2025 年,股市经历了政治的风云变化,也经历了 AI 浪潮的大洗礼。我的整体投资组合也引来了巨大的变化。这一年,标普 500 的年回报是 16.35%,而我的投资组合的回报只有 4.0%,远远跑输了标普 500。
到 12 月底,我就迈过了人生的第三十个年头,进入到奔四的阶段。听年长的人谈起过,人对时间流逝速度的感知是指数变快的。可能这也是为什么对我而言,抵达三十岁的路程是极为漫长和艰辛的。 这三十年里有近二十年的时间,我的人生是不受自己把控的。你无法决定自己应该看什么书,学习什么知识,交怎么样的朋友,尊敬怎么样的人,甚至连每天吃什么都无法决定。上帝给你随机分配了一个国籍,一个家庭,你的国家不管你认同与否强制把你塞进了一个社会制度,你的家庭又直接决定了你接近二十年的生活质量和初始品格。我的前二十年基本就是活在被权威压迫的氛围
我正式 Onsite 的工作经历是从 2017 年 3 月加入即刻实习开始,到如今也已经度过 8 年多的时间。这 8 年时间,我先后任职了 4 家公司,从十几个人的天使轮公司,到一百多人的创业公司,再到五千多人的独角兽公司,最后到十几万人的超大型互联网公司。相伴着这段经历的,也是中国移动互联网快速发展的 8 年,我有过为了理想而自愿加班奋斗的经历,也有单纯为了工资勉强捏着鼻子工作的经历。社交媒体上对各种类型公司的吐槽和夸赞,我大体都有过亲身的体验,也更清楚自己每个阶段需要什么样的环境。恰好现在正式结束了第四家公司的
从 2014 年上大一开始到现在,我的颈椎已经日均面对电脑超过 8 小时 11 年了,世间的物理器件应该很少有能工作超过 10 年之久的寿命,而我的颈椎也在差不多工作到第 10 年的时候出现了严重的问题。 其实早在四年前的时候,我的颈椎已经给了我警告。但那时候只是偶尔会出现僵硬疲劳的感受,通过每周的按摩差不多都能有所好转,如果专心于工作,其实并不能时刻感觉到不适。后来拍片发现了颈椎已经开始出现了生理性变直的问题,但是由于现代人有相当一部分都有相似的问题,所以我也并没有很在意。并且依然维持着每天十点多到晚上八九点钟的
大约是在六七年前第一次听说熊野古道,后来又在任宁的播客 声音:时速三公里 里,对这条路线有了更加清晰的认识,暗暗把它加入了愿望清单。后来由于疫情的原因迟迟未能如愿,终于在今年 5 月,得以来到纪伊半岛踏上了这条古老的朝圣之路。 纪伊半岛毗邻京都,奈良和大阪,在日本历史上一直是重要的佛教圣地,众多高僧名士在此活动,他们往来半岛各处庙宇间的道路便逐渐成了现今的熊野古道。熊野古道分为多条路线,有大边路,小边路,中边路,伊势路等。我们此行选择的是住宿相对最容易预定,难度也适中的中边路。
自从 2022 年 5 月 4 号抵达新加坡,已经近乎快满三年了。我来新加坡的旅程相当坎坷,具体过程记录在了《那一天,我决定踏出一步》 中。此后,我几乎没有在博客里记录过关于这个国家的任何评论,很大程度是因为我想要更加深入了解这个国家,才好更客观地评价,特别是拿这个国家与之前呆了二十几年的国家进行对比,这样才不失公平。三年过去了,我想是时候重新回顾下这段旅程,也为后来人做一些参考。
我是在 2023 年 9 月 28 号去到的阿塞拜疆,而刚刚在一周多前的 9 月 19 日,阿塞拜疆刚刚针对被亲亚美尼亚势力实际控制的纳卡地区展开了所谓的“反恐行动”,控制了纳戈尔诺-卡拉巴赫(简称纳卡)地区。我在阿塞拜疆的旅程也被笼罩在阿塞拜疆与亚美尼亚的领土争端气氛中展开。
2024 年,是我大规模重构投资组合的一年,主要还是由于在新加坡的身份转变后,具备了投资新加坡房产的资格,从而让投资结构从简单的股债配比转向了更多元复杂并且加入了房贷这一杠杆的组合。 我的投资组合计算 我在思考投资组合的时候并非像部分人一样,只是把资产的一部分活钱作为投资资产然后仅计算这部分资产的涨跌。这种方式虽然计算上更加简单,但是实际上会出现股票账户翻倍,个人总资产却没啥波动的情况。所以我会把所有资产甚至是公司期权和公积金都算入投资组合中。
重新思考 Go 系列:这个系列希望结合工作中在 Go 编程与性能优化中遇到过的问题,探讨 Go 在语言哲学、底层实现和现实需求三者之间关系与矛盾。 前言 过去一段时间,在大量的线上服务 case study 过程中,逐步深入了解了如今的业务 Go 进程是如何在一系列繁杂的基础设施之上运行的。有些表现在意料之中,也有一些出乎意料的发现。
TMB - Tour du Mont Blanc 很多年前就听说勃朗峰周边有一条多日徒步线路,从霞慕尼出发,环绕勃朗峰徒步一整圈最后回到霞慕尼。但是由于很难请到这么长时间的假期,所以一直没能如愿。甚至四年前的时候还去到过霞慕尼,但是那时候只是把它作为一个景点,简单去了下南针峰从山顶观看勃朗峰。那时甚至都霞慕尼这个地方大头来头,也没来得及在当地住一晚细细品味它的户外氛围。
特摩索斯(Termessos)位于土耳其南部城市安塔利亚的北面大约 30 公里,是一座起源神秘,消亡也神秘的深山古城。它第一次被历史提到是在公元前 333 年亚历山大大帝包围这座城市时,但即便是征服了希腊世界的亚历山大大帝也并未能成功征服特摩索斯。 特摩索斯建于海拔 1000 多米的山口位置,由于特殊的地理位置,加上完善的水利设施,所以即便被包围也只需要一小只军队便可守卫,这帮助这座城市在那个群雄逐鹿的希腊化时期和罗马帝国时期得以一直以独立城邦的状态存活下来。一直到公元 5 世纪的一场地震摧毁了这座城市的蓄水库,导
重新思考 Go 系列:这个系列希望结合工作中在 Go 编程与性能优化中遇到过的问题,探讨 Go 在语言哲学、底层实现和现实需求三者之间关系与矛盾。 Go 语言是一门为实现 CSP 并发模型而设计的语言,这也是它区别于其他语言最大的特色。而为了实现这一点,Go 在语法上就内置了 chan 的数据结构来作为不同协程间通信的载体。
重新思考 Go 系列:这个系列希望结合工作中在 Go 编程与性能优化中遇到过的问题,探讨 Go 在语言哲学、底层实现和现实需求三者之间关系与矛盾。 Go 在语法级别上提供了 Slice 类型作为对底层内存的一个「操作视图」: var sh []any // ==> internal struct of []any type SliceHeader struct { Data uintptr Len int Cap int } 编程者可以使用一些近似 Python 的语法来表达对底层内存边界的控制:
四月与五月之交,我完成了人生中迄今为止最惊心动魄的一次冒险。与通常的冒险经历不同的是,一般的冒险人们总愿意在往后的岁月里反复回忆甚至加工,但我的这次冒险我希望此生永远的忘记,但我又明白,之所以我如此迫切地想要忘记,是因为这段经历将会不可逆地影响我一生。
2015 年 9 月 2 日,一位名叫艾兰的叙利亚难民儿童尸体在土耳其的海滩上被发现,并被拍下了一张影响深远的照片。 如果你在网络上尤其是中文网络上查阅这张照片的新闻时,会发现有相当一部分人在拿出各种“证据”试图证明它是摆拍的。 这张照片之所以牵动人心是因为它叙述了一个真实存在的现象是,叙利亚儿童正在因为逃难而失去生命。这个现象是真实存在的,你在这个海滩上站到深夜就能看到这个客观事实,但是具体到这个照片与这个事实是否是百分百匹配的,确实有很多可被质疑的空间,例如这个儿童有可能来自伊拉克,例如摄影师有可能把他换了一个
如果正在阅读这篇文章的你认为自己的价值观在这片土地上属于多数价值,被这块土地充分地实现,希望你不要继续阅读下去,也不要将它传播给任何你的朋友。我尊重你的价值观,但恐怕你不一定会尊重我的,为了你好也为了我好,请不要与我有任何交集。 我并不认为自己的价值观一定正确,但是我的价值观,是通过一点一滴的阅读,通过与不同人群的交流,亲眼所见亲耳所听构建出来的。我对它的自信源自于它一次次在苏格拉底,在耶稣,在马丁路德金,在苏轼,在鲁迅,在我身边所有优秀的朋友身上一次次被验证被歌颂,它不见得一定是全人类共同拥有和应该拥有的,但它表
过去并没有写年终总结的习惯,但是如今也正式奔三了,记忆力一年不如一年,时常忘记自己过去做过什么,有过什么想法。前段时间和很久不见的老朋友见面,意外地提起我 N 年前说过的一句话,而我却完全不记得自己当时竟有过这样的想法。恍忽间才意识到,即便彼时彼刻的我已然在我自己心中消失殆尽,却意外地变成了一段段碎片,分散存储在过去朋友的记忆中,成为一个个 Snapshots,成为了彼时彼刻的那个我存在过的证据。
什么是连接 在物理世界并不存在连接这么一说,数据转换为光/电信号后,从一台机器发往另一台机器,中间设备通过信号解析出目的信息来确定如何转发包。我们日常所谓的「连接」纯粹是一个人为抽象的概念,目的是将传输进来的无状态数据通过某个固定字段作为标识,分类为不同有状态会话,从而方便在传输层去实现一些依赖状态的事情。
何为序列 对于计算机而言,一切数据皆为二进制序列。但编程人员为了以人类可读可控的形式处理这些二进制数据,于是发明了数据类型和结构的概念,数据类型用以标注一段二进制数据的解析方式,数据结构用以标注多段(连续/不连续)二进制数据的组织方式。 例如以下程序结构体:
微服务之间的 RPC 调用往往会使用到限流功能,但是很多时候我们都是用很简单的限流策略,亦或是工程师拍脑袋定一个限流值。 这篇文章主要讨论在 RPC 限流中,当前存在的问题和可能的解决思路。 为什么需要限流 避免连锁崩溃 一个服务即便进行过压测,但当真实运行到线上时,其收到的请求流量以及能够负载的流量是不固定的,如果服务自身没有一个自我保护机制,当流量超过预计的负载后,会将这部分负载传递给该服务的下游,造成连锁反应甚至雪崩。
作为软件工程师,我们在谈论自己时,总会认为自己是所谓的高科技行业从业者,但是如果观察自己的日常工作,时常会觉得似乎和真正的科技也没有什么关系。所以究竟什么是科技?我们要如何来定义我们每天的工作? 我认为宏观意义上的科技可以被拆解成三个概念:科学(Science),技术(Technology)和工程(Engineering)。
为什么需要通用对象池 在实际生产环境中,我们经常会遇到需要多线程共享同一堆对象的场景,例如常见的RPC、数据库连接池,大内存对象池,以及线程池等。这些池化对象的需求其实有很多重叠的地方,主要分以下几个方面: 基础设置: 最大容量 创建/校验/删除对象的回调方法 申请对象时,已满时是否阻塞 多重驱逐策略: 驱逐闲置对象 驱逐无效对象 预创建对象 为避免重复编码,所以设计了 Pond 这样一个能够支撑多种使用场景的通用对象池。另外,在 Pond 的基础上,还实现了 Goroutine 池库: Hive。