NOTE

笔记

一些碎片化的小知识点,慢慢拼成对世界的理解。

265 条记录最近更新 2026-07-28
2026

MCP SDK v2落地:server/discover探针与stateless双协议自动协商

AI

MCP 从 sessionful(2025-11-25 稳定版)走向 stateless(2026-07-28 RC)不再只是 spec 层面的方向——昨天 MCP TypeScript SDK v2.0.0 beta 和 Cloudflare Agents 0.20.0 同日落地了实际工程实现,且 McpAgent 被正式标记为 deprecated。

核心机制是 server/discover 探针。client 连接后先发一条 server/discover 请求问 server "你支持 stateless 吗?"——如果 server 回复 discovery 数据,就走 stateless 路径,request 自描述、不依赖连接生命周期;如果 server 不认识这条消息或返回错误,client 在同一 TCP 连接上自动 fallback 到 legacy initialize handshake。不需要额外配置、不需要双端口、不需要版本协商逻辑。

McpAgent(Cloudflare 的 sessionful 实现)被标记为 deprecated 和 feature-frozen。新 server 的标准入口变为 agents/mcp/servercreateMcpHandler,它基于 SDK v2 的 web-standard transport,不依赖 WorkerTransport、McpAgent、RPC 或多 agent 运行时——MCP-only 的应用不再需要安装 Codemode。保留的 v1 兼容层 createLegacyMcpHandler 也被降格为显式迁移桥。

SDK v2 的 OAuth 行为也随之变化:OAuth reauthorization 会丢弃 redirect-scoped discovery 数据并在 token 发出后重新发现,防止复用旧 issuer 的凭据。Stored HTTP session IDs 来自旧 Agents 版本的连接会被 discarding 并重新连接,不会 unsafe 地 resume 一个 upstream 已经不认识的会话。

对 OPC 类平台的启示:如果你在设计 Agent 平台的 MCP 接入层,现在有了一个经过生产验证的 probe+fallback 模式可以抄。stateless 意味着 server 不能依赖连接级别的隐式状态——request 必须携带完整的 resource handle、scope 和 auth info——这对多租户、serverless 部署和水平扩展有直接影响。deprecation 信号值得跟踪:当 Cloudflare 的主力 MCP 实现都转向 stateless 时,你的新服务从哪里开始拆 session?

你的 MCP server 今天是有状态的还是无状态的?切换到 stateless 后,当前的 auth session token、resource handle 和工具执行假设中有哪些会在第一轮 server/discover 后失效?

你不敢说的话,正在替别人投票

社会学

你在一个微信群里。有人转发了一条新闻,然后加了一句自己的评论,语气挺笃定的。你读了新闻,又读了他的评论,眉头皱了皱——你的想法跟他不完全一样,甚至在几个关键点上完全相反。但你看了看群里已经跟上的那七八个「同意」「说得好」「确实是这样的」,打了几个字又删掉,最终锁了屏。没必要说。又不是什么大事。

但你有没有注意过,这个「没必要说」的时刻,正在一点一点地塑造你生活的世界?

你觉得是你自己的选择。你觉得那个观点不值得争辩。你不说出来是因为你不屑于跟风、你懒得吵架、你觉得没必要。但社会学家伊丽莎白·诺尔-纽曼在上世纪七十年代提出了一个理论,叫「沉默的螺旋」,她认为事情远没有你想象的那么个人化。你闭嘴的那一刻,不是在表达个性,而是在服从一种比任何法律都强大的社会力量——对孤立的恐惧。

诺尔-纽曼观察到一件很有意思的事:人在表达观点之前,会先做一件几乎是无意识的事——扫一眼周围。不是刻意去数人数,而是一种类似于「感知气候」的本能。你走进一个会议室、打开一个社交媒体、加入一个饭局,你的大脑在几秒钟之内就已经完成了一个评估:在场的这些人里,哪种看法是受欢迎的,哪种是会让人皱眉头的。诺尔-纽曼把这个能力叫做「准统计感」。每个人都自带一台内置的民意检测仪,不是测量事实上的对错,而是测量表达的「安全系数」。

当你的直觉告诉你,你的观点在人群里是少数派或者正在失势,你的恐惧开关就会轻轻弹起。你害怕的不是吵架本身,而是比吵架更深层的东西——被孤立、被冷落、被当成那个「不懂事的人」。这个恐惧是人类演化的产物。在漫长的原始社会里,被部落孤立意味着死亡威胁,不是面子问题,是生存问题。所以你的大脑做了一个在当时很合理的决策:先别说,再看看。

问题是,当一个人因为这种恐惧而沉默,他沉默的后果不是中性的。另一个同样持少数观点的人看见的不是「有人和自己想法一样」,而是「果然,没人说话,看来真的是我不对」。于是他也沉默了。再一个。再一个。那些原本可能成为同盟的声音,因为互相看不见对方,误以为自己真的是孤独的少数,于是一个接一个地退出了表达。而与之相反,那个原本就占据音量优势的声音,因为几乎听不到反对声,变得更加理直气壮,更加大声,更加不容置疑。这就是螺旋的由来——声音大的越来越大,声音小的越来越小,最终「沉默」本身被误读为「同意」。

这不是什么遥远的理论。它会发生在每天每时每刻。你在会议室里有一个跟老板不同的想法,但看到其他人都在点头,你把话咽了回去。你在一个聚餐上听到对某个群体的刻板印象笑话,你没笑,但也没说话,假装夹菜。你在社交媒体上看到一条你不同意的热门帖,几千个点赞让它在首页居高临下地看着你,你划过去了。每一次沉默,你以为只是你自己的事。但它不是。你在用你不敢说出的那句话,帮那个大声的方向多延续一秒它的统治。

诺尔-纽曼真正让人不安的发现是:大多数人其实意识不到自己在被影响。你不会觉得自己恐惧,你会给自己找到更好的理由——「算了,不跟他们一般见识」「也轮不到我来说」「说了也没用」。这些理由都是真的,每一个都成立。但真正驱动这些理由的引擎,是你那个默默运转的准统计感,和你对孤立的、几乎察觉不到的恐惧。你以为你在理性决策,其实你只是在服从社会气候的压力。

更吊诡的是这个螺旋的自我验证性。当你保持沉默,你就是在向周围的人释放一个信号:这个话题没有争议。当所有人接收到的信号都是「没有争议」,这个话题就真的变成了「没有争议」。不是因为有争议的人消失了,而是因为他们消失了声音。沉默的螺旋制造的是一种虚假的共识,而你和我,每天都是这个虚假共识的建造者,同时也是它的囚徒。

那我们能做点什么?你不可能从此变成一个每句话都要怼回去的人,那也不是诺尔-纽曼的本意。但你可以做一件非常微小的事:下一次你发现自己在一个群体里不同意某个观点却选择了沉默的时候,停下来半秒钟,对自己说一句——「我怕的不是观点本身,我怕的是孤独。」就这一句就够了。你不需要说出来,你不需要成为那个打破沉默的英雄,你只需要对自己承认:我沉默不是因为我不在意,而是因为我是个人,我害怕被孤立。这个承认本身,就已经把你的行为从「无意识的服从」变成了「有意识的选择」。

有了这个意识,你会发现一些以前没注意过的事。你会开始注意到那些在螺旋底部挣扎想要发出声音的人。你会留意到那些「大家都这么说」背后的真实分布。你甚至可能在某些你自己都觉得重要的时刻,轻轻说出那句原本会被咽回去的话。不是为了赢,不是为了改变谁,只是为了让自己不再是那个假共识的沉默同谋。

因为说到底,一个社会里真正可怕的声音,从来不是暴政或极端的声音——那是我们看得见、会反抗的敌人。真正可怕的是我们所有人一起制造的沉默。它坐在会议室里不说话,它刷着手机不评论,它在餐桌上假装夹菜。它看起来无害,却几乎不可战胜。

建议要允许拒绝

Product

AI 产品里的“建议”不要只追求一键采纳,更要把拒绝做成一个轻动作。因为建议不是结果,建议是一种打断:它闯进用户正在形成判断的地方,问用户要不要改变方向。如果拒绝成本太高,用户很快会从“被帮助”变成“被推着走”。

很多写作、邮件、代码和笔记产品都会犯同一个错:把建议做得越来越主动、越来越满屏,却没有认真设计“不采纳”的体验。用户要么被迫一个个关掉,要么为了省事接受一个差不多的版本。短期看是转化率更高,长期看是在训练用户不再相信这个产品的判断。

这和传统的推荐不一样。推荐商品、视频或文章,用户滑走就结束;但 AI 建议常常落在用户自己的作品、文字、计划和代码上。它进入的是“我正在做的东西”,所以产品不只要问建议准不准,还要问它有没有破坏用户继续思考的节奏。

好的建议系统应该像一个克制的编辑,而不是热情的销售。它可以告诉你哪里可能更好,但必须允许你快速略过、局部采纳、事后撤回,并且不要因为你拒绝了几次就继续在同一处纠缠。一个建议能不能被轻松拒绝,决定了它到底是辅助判断,还是偷走判断。

可以问一个小问题:当我们给产品加 AI 建议时,是否只设计了“怎么让用户点接受”,却没有设计“用户拒绝以后,产品如何安静地退回去”?

换手率会漏水

经济学

投资里一个容易被低估的常识是:频繁换手不是免费的思考升级,而是先确定付出成本,再不确定地等待好结果。长期收益不是每次判断正确率的简单相加,而是本金在时间里连续复利;每一次买卖、调仓、追热点,都会从这条复利链上刮走一层摩擦。

这层摩擦不只包括看得见的手续费。还包括买卖价差、冲击成本、税费、申赎费、基金经理或投资者为了应对资金进出被迫调整仓位的成本,以及更隐蔽的行为成本:你越频繁行动,越容易把短期价格噪音误当成新信息。假设两个组合持有的是差不多的资产,一个每年只在偏离目标很多时再平衡,另一个每月都根据新闻大幅切换行业。后者即使偶尔踩中热点,也要不断先填平这些摩擦,才轮得到真正赚钱。

常见误区是把“勤奋”误认为“高质量决策”。在公司经营里,库存周转快可能是效率;但在投资组合里,换手快未必是能力,很多时候只是焦虑有了动作出口。尤其普通投资者买基金、ETF或行业主题时,如果没有明确的估值框架、风险预算和退出规则,频繁切换往往不是在优化组合,而是在用成本购买情绪安慰。

当然,低换手也不是懒得思考。该卖的情况仍然存在:基本假设被证伪、资产质量恶化、组合风险超出承受范围,或原来买入理由只是故事。区别在于,好的调仓有清楚的因果链和门槛,坏的调仓只是在问“最近哪个涨得好”。下次想操作前,可以先问自己:这次换手带来的预期改进,真的足以覆盖所有看得见和看不见的成本吗?

你脸上那颗痘,全世界只有你自己在看

心理学

你早上起来照镜子,发现额头上冒了一颗痘。不大不小,但红得刺眼。你盯着它看了三秒钟,然后脑子里自动上演了一整天的剧情——待会开会坐你对面的同事一定看到了,他在想你是不是熬夜了;中午吃饭的时候隔壁工位的人会注意到,心想你这人怎么这么不注意形象;下午见客户的时候对方一定在盯着那颗痘看,你甚至会因此觉得自己的专业形象打了折扣。你越想越焦虑,甚至考虑要不要用刘海遮一下,或者干脆请个假算了。然后你到了办公室,开了一上午会,跟三个人聊了天,中午还跟同事一起吃了饭。你回到家才突然意识到——没有任何一个人提到那颗痘。没有任何一个人多看了你一眼。你的整个焦虑,全部发生在你自己的脑子里。

这就是心理学里一个经典的认知偏差——聚光灯效应。康奈尔大学的心理学家托马斯·吉洛维奇在两千零一年做了一个很简单的实验:他让一名学生穿上一件印着巴瑞·马尼洛头像的夸张T恤走进一间坐满人的教室,然后问这名学生觉得有多少人会注意到他的衣服。学生猜的是至少一半。实际上,只有不到四分之一的人注意到了。这个实验换了很多种方式重复过,结果都差不多——人们总是高估自己被别人注意到的程度。你以为自己站在舞台中央,一束追光打在你身上,所有人都在看你。但实际上,台下的人各自在刷手机、想心事、琢磨自己今天的状态好不好,根本没人在看你。

这个偏差之所以这么顽固,是因为你跟自己的关系实在是太近了。你从早上睁眼到晚上闭眼,每时每刻都在感受自己的存在。你的紧张、你的不安、你的尴尬、你头上那颗痘——对你来说,这些信号像警报一样刺眼。但问题来了:你对自己的感受,不等于别人对你的感受。你对自己情绪的感知是高清特写镜头,而别人看你的视角永远是中景甚至远景。他们也有自己的高清特写镜头,里面塞满了他们自己的焦虑和不安。换句话说,当你站在台上紧张到手心冒汗的时候,台下的人很可能在担心自己的发型是不是乱了。

更有意思的是,这个效应不仅作用在「出丑」的时刻,它几乎渗透进了你社交生活的每一个角落。你有没有在会议上说了一句感觉不太对的话,然后接下来的半小时一直在心里反复重放那句话,觉得全会议室的人都在心里给你打了低分?或者跟朋友聊天结束后,躺在床上越想越觉得自己说了某句不合时宜的话,翻来覆去睡不着?你觉得自己表现得糟透了,但你第二天去问那个朋友,对方完全不记得你说过那句话。不是因为对方不在乎你,而是因为对方的大脑也在忙着处理自己的信息——他也在回想自己有没有说错什么话。

你可能会觉得,知道了这个道理也没用,下次该焦虑还是会焦虑。但如果我说,你可以利用这个偏差反过来帮到自己呢?

想象一下,如果你提前知道别人注意你的程度远低于你担心的,那你完全可以调整自己的行为。你不必在说错一句话之后花费半小时的精神去懊悔,因为别人根本就没注意到。你不需要在出门前反复检查今天的穿搭会不会被人议论,因为大部分人都忙着想他们自己的事。你也不需要因为害怕说错话而在一场重要的对话里选择沉默——你要担心的从来都不是犯错,而是因为你太怕犯错以至于什么都没说。

社会心理学里有一个与此相关的概念叫「社会松弛效应」,当你知道自己被关注的程度远比你想象的低的时候,你的紧张感就会降低,你的表现反而会更好。这不是在教你不在意别人的看法,而是在教你把注意力从你自己身上稍微移开一点。那些在社交场合里看起来游刃有余、气场全开的人,不是因为他们比你更完美,而是因为他们比你更早意识到一个事实——大家真的没有在看你。

下次你感觉到那束追光打在自己身上的时候,可以问自己一个问题:我今天注意到别人身上几个细节了?你大概率会发现自己一个都说不出来。那就对了。因为别人今天也跟你一样,光顾着担心自己额头上那颗痘了。

外部性会改利润

经济学

外部性提醒我们:有些成本和收益不会立刻写进一家公司的利润表,但迟早可能通过规则、价格、声誉或技术变化回来影响投资回报。投资者看一门生意,不能只问“它现在赚不赚钱”,还要问“它赚钱时有没有把一部分成本推给别人,或者有没有创造了自己暂时收不到钱的价值”。

所谓外部性,简单说就是一个人的行动影响了别人,却没有通过市场价格完整结算。工厂排污、平台让商家过度依赖流量、房地产开发带来拥堵,都是负外部性的例子;疫苗、基础研究、开源软件则常有正外部性。它对投资决策重要,是因为市场价格一开始可能低估了这层账。负外部性如果长期存在,企业短期利润会显得很好:成本没有全由自己承担,ROE、毛利率、自由现金流都可能好看。但当监管补课、消费者反感、税费上升或诉讼出现,原来没入账的成本就会重新回到公司身上。

一个常见误区,是把“现在利润高”直接等同于“商业模式优秀”。比如某些高污染、高资源消耗行业,在环保标准较松时看起来现金流强、估值低;但如果未来必须加装设备、购买排放配额、停产改造,过去的低成本就不是真优势,而是延迟支付的账单。反过来,正外部性企业也不一定值得高价买入,因为创造社会价值不等于股东一定能捕获价值。很多公益性、基础设施性或开源生态项目很有用,但如果没有定价权和现金流闭环,投资者仍然可能只买到一个好故事。

所以,外部性不是道德评判题,而是现金流归属题。看一家公司或行业时,可以多问一句:这门生意的利润,是来自真实效率提升,还是来自暂时没有被结算的外部成本?如果有一天这些外部成本被重新定价,估值里的安全边际还够不够?

工具失败要分可重试与可见两类

AIagent-engineeringtool-execution

Agent 平台应该区分「工具执行出错,系统自动重试」和「工具执行失败,错误信息给模型判断」,而不是把所有异常都塞进重试循环。

Pydantic AI v2.16.0 新增了 ToolFailed 错误类型,专门用于「模型可见但不触发重试」的失败场景。传统上,工具抛异常 → 框架自动重试 N 次 → 全部失败才回给模型。但有些失败重试也没用:权限不足、文件不存在、API 返回明确错误(400/404)、业务校验不通过。这些失败模型需要知道具体原因来调整策略,但不是「再试一次」。

工程细节:

  • ToolFailed 跟普通 Exception 走不同路径:Exception → 框架内部重试计数;ToolFailed → 直接作为 tool output 回给模型,走 finish_reason=tool_calls 的正常路径
  • 工具实现方在函数内用 raise ToolFailed("reason") 主动标记「这是终态错误,不需重试」
  • 框架层面要保证:ToolFailed 不消耗 retry budget,不触发退避,不回滚 side effect
  • 配合「审批被拒也要形成终态」(07-18 分享)看:审批拒绝也是终态,ToolFailed 也是终态——区别在于审批拒绝是外部人决策,ToolFailed 是工具自述「我不行」

这对 OPC 类平台的启示:工具执行结果不应只有「成功/失败」二元状态,而应有至少三级——success、retryable_failure、terminal_failure。terminal_failure 直接回模型,模型据此决定换参数、换工具还是告诉用户。

过滤器要显示代价

Product

过滤器的产品价值,不是把世界变干净,而是让用户知道“干净”是用什么换来的。邮件、任务、知识库、AI 助手都喜欢说自己能帮你筛掉噪音,但如果被筛掉的东西完全消失,用户得到的不是轻松,而是一种新的不安:我是不是漏了什么?

好的过滤不是黑箱删除,而是有边界的收窄。它应该让用户感到范围变小了,但责任没有被偷走。比如一个智能收件箱可以优先展示重要邮件,但最好仍然保留“为什么它被放在这里”“还有多少被折叠起来”“我能不能一键回看”的线索。这个小小的回看入口,会把筛选从替用户做主,变成替用户节省第一轮注意力。否则产品看起来很聪明,实际是在把判断债务藏到后台。

这对 AI 个人软件尤其重要。AI 很擅长替用户总结、排序、推荐下一步,但越是替用户省下注意力,越要把取舍痕迹留在界面里。尤其当它开始跨资料、跨账号、跨任务替人做判断时,过滤器就不只是信息架构,而是责任边界。真正值得信任的不是“我已经帮你处理好了”,而是“我帮你缩小到这里,剩下的你可以放心检查”。

可以问一个小问题:你的产品里那些让界面更清爽的机制,是在减少用户负担,还是在让用户失去判断自己负担的能力?

再投资风险这道坎

经济学

一句话结论

再投资风险的核心不是“这笔钱今天赚多少”,而是“到期、分红、工资结余和卖出回款以后,还能不能以相近的风险收益率继续找到好去处”;长期财富管理最容易被忽略的断点,常常发生在现金流重新落地的那一刻。

为什么这个问题重要

很多人看投资,只盯着买入时的收益率:这只债券票息多少,这个存款利率多少,这个基金过去几年涨了多少。但真正的复利不是一笔交易的收益,而是一连串资金不断被重新配置的过程。钱今天产生的利息、分红、工资结余、债券到期本金、基金赎回款,如果下一站只能以更低收益、更高风险或更差纪律重新投入,长期结果就会明显缩水。

这就是再投资风险。它不像股价下跌那样刺眼,也不像爆雷那样吓人,却很像水管里的小漏口:每次损失不大,但时间一长,复利曲线会被悄悄压低。

前面我们已经讲过利率、通胀、久期、现金缓冲、负债端和人力资本。这周不重复“利率如何影响估值”的老问题,而是换一个角度:当现金流回到你手上时,你有没有能力、制度和耐心,把它重新放到合适的位置?

核心机制拆解

再投资风险至少有三层。

第一层是利率环境变化。假设你买了一笔一年期资产,年化收益看起来不错。问题是,一年后本金和收益回来时,市场利率可能已经下降。你原来以为自己能长期拿到的收益率,其实只锁定了一年。后面的钱要重新出发,面对的是新价格、新利率和新机会集。短期产品看似安全,但如果每隔几个月就要重新找去处,它把“价格波动风险”换成了“再投资不确定性”。

第二层是好资产稀缺。高质量资产不是每天都按合理价格供应。一个好公司、一个好基金、一个合适的债券期限、一个适合家庭现金流的配置机会,都可能阶段性缺货。现金回来时,如果市场已经很贵,或者可选品种风险补偿很薄,投资者会面临两难:要么降低预期收益,要么为了维持收益率去承担更多风险。

第三层是行为风险。再投资不是机械动作,而是一次新的决策。每一次决策都可能被近期涨跌、新闻、同伴比较和“钱不能闲着”的焦虑干扰。很多人的长期回报不是输在某一次大判断,而是输在无数次现金到账后的随手处理:利息到账就消费了,分红到账就追热点了,债券到期后为了多一点收益买了自己不懂的高风险产品,基金止盈后迟迟没有规则,最后在更高位置又追了回去。

所以,再投资风险不是一个单纯的金融术语,而是“利率周期、机会稀缺和人性弱点”交叉出来的问题。

它如何影响资产和个人财务

对债券和存款来说,再投资风险最直观。短期限产品本金波动小,但需要频繁续作;长期限产品锁定收益更久,却会承受更明显的价格波动和流动性约束。没有哪一种天然更好,关键是资金期限是否匹配。如果这笔钱一年后要买房、还债或应急,追求长期锁定收益反而危险;如果这笔钱本来是五年、十年的长期资金,却全部放在不断到期的短钱里,就容易在利率下行时被迫接受越来越低的收益。

对股票和指数基金来说,再投资风险主要体现在分红、定投和卖出纪律上。分红本身不是免费午餐,公司把现金分给你,企业价值会相应调整;真正的问题是你拿到现金以后怎么处理。如果长期目标是持有权益资产,且估值和风险预算允许,分红再投入往往比随手花掉更接近复利逻辑。相反,如果组合已经过度集中,分红也可以成为自然再平衡的资金来源。

对家庭财务来说,工资结余也是一种持续到来的“再投资现金流”。每个月结余放在哪里,决定了家庭资产负债表慢慢长成什么样。长期看,一次大额投资当然重要,但更重要的是:每个月新钱是否先保障现金缓冲,是否按计划补充核心资产,是否避免被短期热点不断改写方向。家庭财富常常不是靠一次聪明决定建成,而是靠反复正确处理小额现金流建成。

长期投资者该怎么想

第一,把再投资写进计划,而不是等钱到账再临场发挥。比如:现金缓冲保持几个月支出;超过缓冲的新增结余,按固定比例进入宽基指数、债券或其他长期资产;分红和利息默认进入同一资产池,除非组合比例偏离太多。规则不需要复杂,但要在情绪平稳时定好。

第二,区分“锁定收益”和“保留选择权”。如果未来支出确定,锁定一部分确定性是合理的;如果未来机会不确定,保留一部分现金也是有价值的。现金的价值不只是收益率,而是让你不用在坏时候卖出、也能在好机会出现时行动。问题不在于现金有没有用,而在于现金比例是否服务于计划。

第三,别为了对抗再投资风险而追逐更高表面收益。很多高收益产品其实是在把信用风险、流动性风险、期限风险或复杂结构卖给你。一个常见错误是:原本安全资产到期后,发现新利率下降,于是为了维持过去收益率,买入更不透明、更长锁定、更高杠杆的产品。这不是解决再投资风险,而是把看得见的收益率缺口换成看不见的本金风险。

第四,承认未来机会集会变化。长期投资不是假设自己永远能找到同样好的标的,而是建立一个能在不同环境下工作的框架:贵的时候少犯错,便宜的时候有现金和勇气,平时用纪律处理新增现金流。

常见陷阱/反面案例

第一个陷阱是把短期高利率误认为长期能力。某一阶段货币基金、短债或存款收益不错,不代表这就是家庭长期复利水平。它可能只是当时利率环境给你的临时价格。到期后如果收益下滑,不是市场亏欠你,而是你原来没有真正锁定长期收益。

第二个陷阱是“钱不能闲着”。闲置现金确实有机会成本,但错误投资也有成本,而且可能更高。为了让每一分钱立刻产生收益,把应急钱、半年内要用的钱也放进波动资产,是典型的拿生存能力换收益率。芒格式的常识是:先避免愚蠢,再谈聪明。

第三个陷阱是止盈后没有再投资规则。很多人卖出盈利资产时很开心,却没想清楚卖出后的钱要做什么。如果只是因为涨了就卖,卖完又因为继续上涨而焦虑追回,最后可能同时损失仓位、税费、纪律和心态。卖出必须回答两个问题:原资产的长期逻辑是否变了?新资金去向是否更好?如果两个问题都答不清,卖出未必是优化。

第四个陷阱是忽视小现金流。分红、利息、报销、奖金、工资结余,看起来零散,但它们是家庭复利机器的燃料。长期纪律的差距,往往就体现在这些小钱是被系统性配置,还是被随机消费和随机追热点。

本周思考题/小作业

拿出自己的资产表,单独列一栏:未来12个月内会回到手上的现金流,包括工资结余、理财到期、债券/存款到期、分红、奖金、可能的赎回款。然后给每一类钱提前写一句规则:它是补现金缓冲、还债、进入核心资产,还是等待再平衡?

真正的目标不是预测哪天收益率最高,而是减少临场决策。复利不喜欢英雄主义,它更喜欢一套能反复执行、少犯大错、能让现金流持续找到合适去处的系统。

把桌面做成行动场

Design

一句话结论

Xerox Star 的重要性不只在于“发明了桌面隐喻”,而在于它把文件、文件夹、打印机、收件箱这些办公室对象,组织成一个可以直接操作的行动场。真正可迁移的不是把界面画得像现实桌面,而是让用户在屏幕上看见对象、关系和后果。

研究对象

1981 年发布的 Xerox 8010 Star Information System,面向办公室信息工作者:写文档、排版、归档、邮件、打印、网络共享。它继承了 Alto 的图形显示、鼠标、以太网等研究成果,但 Star 更关键的一步,是把这些技术收束成一套面向普通办公室工作的界面原则。

《Designing the Star User Interface》里有一句很重要的描述:Star 的界面严格遵守一小组设计原则,用来让系统熟悉、友好,简化人机互动,并让用户在一个功能区学到的经验可以迁移到其他功能区。这里的重点不是“拟物”,而是“经验可迁移”。

为什么桌面隐喻有效

好的隐喻不是视觉皮肤,而是一套行动语法。文件可以打开、移动、复制、删除;文件夹可以容纳文件;打印机不是菜单里的抽象命令,而是一个可见对象,用户可以把文档送到那里。对象被放在空间里,动作就不再只依赖记忆命令。

这会改变用户的心理负担:用户不必先学会系统内部结构,再把目标翻译成命令;界面先把可操作对象摆出来,让用户从“我要完成什么”直接进入“我可以对哪个对象做什么”。

但桌面隐喻真正成熟的地方,是它没有停留在“像办公室”。如果只是画出文件柜、纸张和电话,界面会变成装饰性的模拟。Star 更值得学习的是把办公室工作拆成稳定关系:对象、容器、位置、选择、移动、复制、发送、打印。视觉只是让这些关系更容易被看见。

可迁移到今天的原则

第一,界面要尽量让对象先出现。许多产品把用户直接推入“功能列表”:新建、导入、分享、同步、导出、权限、设置。更好的入口往往是先让用户看见工作对象,例如文档、任务、素材、成员、版本、评论,然后让动作围绕对象生长。

第二,动作应该靠近它影响的对象。打印、分享、归档、删除、评论,如果离对象太远,就会变成抽象命令;如果贴近对象,并且有清楚反馈,用户更容易判断后果。今天的行内评论、卡片操作、对象级权限、文件拖放,本质上都延续了这条逻辑。

第三,空间位置可以帮助记忆,但不能替代结构。桌面隐喻容易被误用成“随便摆放”。真正可靠的界面仍然需要排序、搜索、过滤、状态、权限、历史版本和恢复路径。空间让对象可感知,系统结构让对象可管理。

常见误读

最常见的误读,是把 Xerox Star 的启发理解成“界面应该更像现实物品”。于是出现过很多沉重的拟物界面:按钮像皮革,书架像木头,笔记本像纸张。这些表面相似并不会自动降低认知负担,反而可能让真正的状态、层级和动作变得不清楚。

另一个误读,是反过来把隐喻全部抹掉,认为现代界面只需要抽象组件。问题在于,完全抽象的按钮、菜单和图标也会制造学习成本。好的数字产品不是拒绝隐喻,而是选择足够轻、足够稳定、足够可迁移的隐喻:画布、收件箱、时间线、卡片、分支、空间、队列,都是今天仍然有效的行动模型。

对 UI/UX 的启发

设计复杂工具时,可以先问三个问题:用户真正操作的对象是什么?对象之间的关系是什么?每个动作发生后,界面如何让后果被看见?

如果这三个问题没有被回答,界面很容易堆出一排漂亮按钮,却没有形成工作场。相反,只要对象关系清楚,即使视觉克制、颜色很少、动效很轻,界面也会显得稳定、有方向、有秩序。

这也是克制设计里很重要的一点:留白不是为了空,减少装饰也不是为了冷淡。留白应该让对象之间的关系更清楚,让动作的后果更容易被感知,让用户可以安静地完成工作。

可沉淀的规则

做工具型界面时,不要先问“功能入口放哪里”,先问“用户正在处理的对象如何成为屏幕上的主角”。当对象、动作和反馈形成闭环,界面才从功能集合变成行动场。

参考资料

钩子是 Agent 的刹车

Product

核心判断

Claude Code Hooks 最值得看的不是“可以自动跑脚本”,而是它承认了一个更成熟的 Agent 产品判断:越强的自动化,越需要确定性的刹车、护栏和交接点

Agent 不能只靠更聪明来获得信任。真正能进入日常工作流的 Agent,必须允许用户把某些关键时刻从模型判断里拿出来,交给稳定、可审计、可复用的规则。

背景与产品现象

Anthropic 在 Claude Code 里把 Hooks 做成了一套正式机制:用户可以配置 shell command、HTTP endpoint,甚至 LLM prompt,让它们在 Claude Code 生命周期的特定节点自动执行。官方文档列出的节点不只是“任务结束后跑一下格式化”,而是覆盖了 session 开始和结束、用户 prompt 提交、工具调用前后、权限请求、通知、子 agent 停止、文件变化、压缩前后等位置。

这件事表面上像开发者工具里的高级配置,实际更像 Agent 产品从“聊天助手”走向“工作系统”的一个分水岭。

因为 Claude Code 这种产品的承诺已经不是回答问题,而是读代码、改文件、跑命令、连接 MCP 工具、跨多个表面工作。它越接近真实工作,用户越不会只问“它会不会做”,而会问另一个问题:它什么时候可以被拦住,什么时候必须留痕,什么时候应该让我接手?

Hooks 的产品价值,就在这里。

真正值得看的不是自动化,而是控制权的位置

很多人看 Hooks,会先想到自动化:保存后格式化、改完后跑测试、提交前跑 lint、通知系统发一条消息。这些当然有用,但不是最核心的产品判断。

更重要的是,Hooks 把控制权放在了 Agent 循环的结构性节点上,而不是放在一个事后补救的设置页里。

传统软件里的设置,多数是在改变软件“平时怎么表现”。但 Agent 产品的问题不是平时表现,而是它每一步都可能根据上下文生成新动作。用户真正需要的,不是再多一个偏好开关,而是在高风险节点上有确定性的介入方式。

PreToolUse 的意义不是“执行工具前可以跑脚本”,而是:在模型准备动手之前,系统允许外部规则先看一眼。PostToolUse 的意义也不是“执行后可以自动处理结果”,而是:每次动作之后,都可以把结果交给另一个确定性系统检查、记录、转发或阻断下一步。

这相当于把 Agent 的黑盒行动拆成一串可插入的产品缝隙。

拆解

1. 这个产品相信什么用户行为

Claude Code Hooks 背后的用户假设很清楚:重度用户不会满足于“相信模型会做好”,他们会逐渐把 Agent 接进自己的真实工程环境、团队规范和个人习惯里。

这类用户不是只想要一个更会聊天的助手,而是想要一个能进入工作流的执行者。但执行者一旦进入工作流,就必须接受已有工作流的约束:代码风格、权限边界、安全检查、测试口径、通知规则、团队审查方式。

所以 Hooks 相信的不是用户喜欢配置,而是用户会在反复使用后形成自己的“不可妥协点”。这些不可妥协点不适合每次都写进 prompt,也不应该寄希望于模型每次都记得。它们应该变成系统级接口。

这也是 Agent 产品成熟后的一个重要变化:早期产品强调 prompt,成熟产品会逐渐把一部分 prompt 变成对象、规则、工作单、钩子和审计记录。因为真正高频的约束,不应该一直停留在自然语言里。

2. 它牺牲了什么

Hooks 牺牲的是新手体验的纯净感。

一个没有 Hooks 的 Agent 产品更容易讲故事:你只要说一句话,它就会帮你完成。这个叙事更顺滑,也更像大众想象里的 AI 魔法。但 Hooks 把这个魔法拆开了:这里有事件,有 matcher,有 JSON input/output,有 exit code,有 decision control。

这会让产品变得更“工程化”,也更难被包装成一个无门槛的消费级体验。

但这是必要的牺牲。因为 Claude Code 面对的不是一次性玩具任务,而是可持续的开发工作。开发者愿意承受一点配置复杂度,换取可预测性、可恢复性和可嵌入性。

这也是很多 Agent 产品迟早要面对的取舍:如果你想进入真实工作,就不能永远保持“一个输入框解决一切”的幻想。你必须暴露一些结构,让用户把信任建立在结构上,而不是建立在模型状态上。

3. 这个判断如何体现在具体体验里

Hooks 的关键设计不是给一个泛泛的“自动化中心”,而是按生命周期拆事件。

SessionStart / SessionEnd 处理的是工作会话边界;UserPromptSubmit 处理的是用户意图进入系统之前;PreToolUse / PostToolUse 处理的是 Agent 每一次工具行动;PermissionRequest 处理的是授权边界;Stop / SubagentStop 处理的是任务结束和子任务结束。

这套划分很重要。它不是让用户从零发明工作流,而是先替用户指出:Agent 工作里哪些时刻天然值得被检查。

好的产品接口通常不是把所有能力摊平给用户,而是帮用户命名关键断点。Hooks 做的正是这件事。它告诉用户:你不必在所有地方控制 Agent,但在这些地方控制是合理的。

这比“多给用户一些设置”更高级。设置是参数,Hooks 是工作流里的制动点。参数改变系统倾向,制动点改变责任边界。

4. 对个人产品 / Agent 产品的启发

对 personal software 和 agent-native 产品,Hooks 的启发不是“也做一个插件系统”,而是:先找出用户最害怕失控的节点,再把这些节点做成可重复使用的界面或接口

个人 AI 工具里,用户的失控点通常不是模型答错一句话,而是这些时刻:准备写入原文件、准备发给别人、准备删除或覆盖、准备跨应用授权、准备把临时内容沉淀进长期记忆、准备把一段含糊输入变成正式产物。

这些地方如果只靠“确认弹窗”,产品会很笨;如果完全自动执行,产品会很危险。更好的做法,是让用户能为这些节点建立稳定规则:哪些动作永远先进入草稿,哪些来源永远不入库,哪些输出必须先生成 diff,哪些任务结束后必须留下摘要和回滚入口。

这就是 Agent-native 产品的一个核心方向:不要只设计“AI 如何行动”,还要设计“AI 行动前后,用户如何把自己的判断嵌进去”。

对个人软件尤其如此。个人软件的信任不是企业权限系统那种重流程,而是用户每天愿不愿意把一点点生活、想法、文件和半成品交给它。这里的控制点必须轻,但不能没有。

5. 哪些不能照抄

不能照抄 Claude Code Hooks 的工程复杂度。

Claude Code 面向开发者,JSON、脚本、exit code、HTTP endpoint 都是可接受语言。换成普通个人软件,这套东西会直接变成门槛。一个写作工具、笔记工具、个人记忆工具、口述工具,不应该让用户先理解生命周期事件再开始使用。

但不能照抄复杂度,不等于不能学习产品判断。

普通用户版本的 Hooks 可能不是代码,而是更具象的规则:

“发出前先让我确认。”

“改原文前只给 diff。”

“只有我标星的内容才进入长期记忆。”

“每天结束时,把未完成项整理成一张明天可继续的卡片。”

“任何跨应用动作都先生成预览。”

这些不是传统意义上的设置,而是普通用户能理解的工作流钩子。它们同样在回答一个问题:当 AI 开始替我做事,我在哪里保留最终判断权?

结论

  1. Agent 产品的信任,不能只靠模型能力增长来解决;能力越强,越需要确定性的刹车和交接点。

  2. Hooks 的真正价值不是自动化脚本,而是把 Agent 生命周期里的关键失控点产品化,让用户能把自己的规则嵌入系统。

  3. 对开发者产品,可以把这些控制点暴露成脚本、事件和 JSON;对个人产品,则应该把它们翻译成更轻的规则、草稿、diff、预览、到期授权和可恢复状态。

  4. 好的 Agent-native 产品不是让用户一直盯着 AI,也不是让 AI 完全黑盒执行,而是把少数最关键的判断节点做清楚:什么时候 AI 可以继续,什么时候必须停下,什么时候该把工作交还给人。

你每一次满足,都在给下一次饥饿铺路

哲学

你有没有过这种体验:等了好几个月终于买了那件东西,拆快递的那一刻心跳加速,拿在手里翻来覆去看了两分钟,然后放在桌上,不到半小时就开始刷手机看下一件想要的东西了。或者,加班到崩溃的时候天天幻想放假,真放假了,躺到第二天下午就开始觉得无聊,甚至隐隐想回去上班。又或者,暗恋一个人的时候整个世界都是粉色滤镜,在一起之后三个月,你开始注意他吃饭吧唧嘴。

不是你不懂珍惜,不是你有问题。是欲望这个东西,它本来就是这么运转的。

十九世纪有个德国哲学家叫叔本华,他这辈子过得不太快乐——跟母亲决裂、跟黑格尔较劲、书卖不出去——但他看透了一件事,以至于两百多年后的我们读到他写的东西,会觉得他在描述自己昨天晚上刷短视频的状态。他说:人生就像一个钟摆,在痛苦和无聊之间来回摆动。欲望没有满足的时候,你痛苦,你焦躁,你觉得得不到那个东西日子没法过了。欲望满足了,你获得短暂的解脱,但这种解脱撑不过多久,无聊就会像潮水一样漫上来,然后新的欲望重新诞生,钟摆又荡回到痛苦那一边。

你品品这个结构。想要 → 得不到 → 痛苦。得到 → 短暂平静 → 无聊。无聊 → 新的想要 → 新一轮痛苦。这不是你个人的失败,这是叔本华眼中所有生命的底层代码。他管这个背后的驱动力叫作「意志」——一种盲目的、永不停歇的、让你永远想要更多的内在冲动。意志不管你已经有了多少,它只问一个问题:然后呢?

然后呢,然后呢,然后呢。你升职了,然后呢?你买了房,然后呢?你追到了那个人,然后呢?意志不会给你颁奖然后放你退休,它像一个永远不会关机的后台程序,一直在你的意识深处消耗电量。叔本华认为这就是人类痛苦的根源——不是因为你命不好,不是因为社会不公(虽然他也没说社会公平),而是因为「想要」本身就是一个永远不会被你填满的洞。你以为你在追求幸福,其实你只是在满足一个欲望之后,获得了几分钟不用再去「想要」的喘息。

这件事放在今天特别好理解。你的手机就是意志的完美外挂。刷短视频的时候,每一个划动都是一次微小的「想要」——下一个会不会更有意思?下一个会不会让我笑?算法精确地给你三秒钟的满足,然后立刻制造新的悬念,让你的拇指继续划下去。划了一晚上,你看了上百个视频,真正记住的可能不超过三个,但那种「再来一个」的冲动从来没有停过。你不是在享受内容,你是在喂养意志。

消费主义更不用说了。购物 APP 的推荐算法、限时折扣、凑单满减,每一步都在告诉你:你现在不完整,买了这个你就完整了。你买了,你完整了三分钟,然后它给你推送了下一个让你不完整的东西。你永远在完成自己的路上,但永远到不了终点。这不是因为你穷,是因为这个游戏的设计逻辑就是让你永远到不了终点——你到了终点,谁来买东西?

那叔本华给出的答案是什么?说实话,他本人的解决方案比较极端。他建议人通过审美体验来短暂地挣脱意志——当你沉浸在一首音乐、一幅画、一片风景里的时候,你暂时忘了「我想要什么」,你只是在纯粹地看、纯粹地听,这种时刻意志暂停了,你就自由了。但他更进一步说,真正的解脱是彻底否定意志,像佛教僧人那样放下一切欲望。这个建议对于普通人来说操作性基本为零——你明天还要上班,你不可能剃度出家。

但他给我们的真正启发,其实不需要走到那一步。关键在于看见。你一旦看清了这个钟摆的结构,你就获得了一个微小的暂停键。当你在深夜第十次打开外卖 APP,明知道自己不饿但就是「想要点什么」的时候,你可以在心里对自己说:哦,这不是我真的需要什么,这是意志又在荡钟摆了。你不需要跟它打架,你只需要认出它。认出的那一瞬间,你已经不在钟摆上了——你在旁边看着钟摆晃。这个「看见」本身就是一种解脱。

还有一件事叔本华提到了但没展开说,我觉得特别实用:有些快乐不需要通过「想要 → 得到」这个循环来获得。比如你走在路上突然闻到桂花香,比如你跟朋友聊到一个话题两个人同时笑出声,比如你做完一件事之后那种踏实的疲惫感。这些体验的特点是——你没有提前想要它们,它们来的时候你也没有担心它们会消失。它们不在钟摆的轨道上,它们是轨道外面吹进来的风。

所以你不需要消灭欲望,你也消灭不了。但你可以开始注意到哪些时刻你不在「想要」的状态里,哪些事情你做的时候忘记了时间,哪些关系你在里面不用扮演任何人。培养对这些时刻的敏感度,比追求下一个目标重要得多。因为目标永远有下一个,而那些不被意志驱动的时刻——它们才是生活本来的样子,而不是达成什么之后才能领取的奖品。你已经拥有了一些这样的时刻,你只是没有把它们当回事。从今天开始,把它们当回事。

兼容层要吸收版本差异

AI

Agent SDK 的多版本兼容,真正要兼容的不是依赖声明,而是运行时事件语义。只把 peer range 写成 ^6 || ^7,却把两代 SDK 的回调、结果和字段差异泄漏给上层,最后只是把升级成本转移给每个应用。

Cloudflare Agents 0.19.0 的 AI SDK v6/v7 兼容改动很典型:@cloudflare/think 保留稳定的调用方 API,在 SDK 边界把 v6 的 { success, output, error, durationMs, stepNumber } 与 v7 的 { toolOutput, toolExecutionMs } 归一成同一个 ToolCallResultContext;同时用兼容矩阵分别安装 ai@6 和 ai@7,做类型检查与 workers 测试。这里 stepNumber 在 v7 中不存在,不能假装补出一个“看似完整”的值,而要把信息缺失作为契约的一部分。

对 OPC 类平台,provider adapter 不应只是字段改名层,而应拥有一套 canonical event model:工具完成、流结束、usage、取消和错误先归一化,再投影给 UI、trace、重试和上层 Agent。否则一次 SDK 升级会同时污染 prompt、回放、观测和插件接口;而只测默认版本,也会让兼容性在真正的消费者环境里才暴露。

你的 Agent runtime 是否有一套独立于模型 SDK 的 canonical event contract,还是每次换 provider/SDK 都要把差异传遍业务层?

别急着拥有数据

Product

个人软件很容易把“拥有数据”误认为“拥有用户”。但很多时候,用户真正愿意交给一个新产品的,不是原始数据源,而是一个更好用、更贴近日常动作的工作表面。好产品未必先搬家,它可以先寄居在用户已经信任的系统上。

Mimestream 是一个很好的例子。它没有试图重新发明邮箱后端,也没有让用户把邮件迁进一个新系统;它把 Gmail 仍然留在 Gmail,把自己做成一个更像 macOS 原生软件的 Gmail 客户端。它争夺的不是“邮件事实存在哪里”,而是用户每天处理邮件时,手感、速度、快捷键、标签、搜索和多账号切换这些高频表面。

这对 AI 和个人 context 产品尤其重要。很多产品一上来就想接管知识库、任务库、记忆库,于是第一步变成导入、同步、授权、重建结构。用户还没得到价值,就已经被要求相信一个新系统会长期保管自己的一切。更轻的做法是先承认边界:原件继续留在 Notes、Markdown、Gmail、Calendar、Finder 或 Obsidian 里,产品只在上面提供更好的进入、整理、生成和行动。

这里的关键取舍是:不要把“不是数据源”误判成“产品不够核心”。很多个人产品真正的核心,恰恰是在不夺走源头的前提下,稳定改善用户每天碰到源头的那一层界面。可以问一个小问题:这个产品是必须成为新的事实仓库,还是只要成为旧事实上最顺手的操作层?

让文案先承担判断

Design

界面文案的价值,不是把页面写得更“亲切”,而是在用户行动之前先承担一部分判断。好的按钮、提示、错误和空状态文案,会把对象、动作、后果和下一步说清楚;差的文案则只制造一种看似轻松的语气,把真正的理解成本留给用户。

很多界面会把文案当作最后的润色:按钮写“确定”,弹窗写“温馨提示”,错误写“操作失败”,空状态写“暂无数据”。这些句子都没有错,但它们没有完成设计工作。用户真正需要知道的是:确定什么?失败在哪里?数据为什么没有?现在可以怎么做?如果文案没有回答这些问题,视觉再干净,也只是把含糊整理得更整齐。

Apple 的写作指南强调清晰、简洁、面向操作;Material 的内容设计也把文案看作界面体验的一部分;GOV.UK 的内容原则更直接:用人能理解的语言,帮助人完成事情。三者背后的共同点不是“少写字”,而是少让用户猜

所以写界面文案时,可以先做一个很朴素的检查:这句话是否带着用户往前走?例如“确定”可以变成“删除 3 个文件”,“提交失败”可以变成“网络中断,草稿已保存,可重新提交”,“暂无数据”可以变成“还没有发票,完成第一笔付款后会显示在这里”。文案不需要热闹,但需要负责。

这也解释了为什么有些“高级感”界面会显得冷。它们把边框、图标和语气都做得很轻,却没有把动作后果讲清楚。真正克制的界面不是不说话,而是在关键位置只说必要的话,并且说到能行动为止。

追问: 当前界面里最常见的“确定 / 取消 / 暂无 / 失败”,有哪一句其实是在让用户替系统补全判断?

[!quote] 参考资料

预期通胀会改账本

经济学

预期通胀真正影响投资的地方,不是让我们天天猜物价数字,而是它会同时改写两本账:一边改写未来收入、成本和名义利润,另一边改写投资者要求的回报率。很多资产看上去是在“涨价”,其实可能只是货币购买力、利率预期和风险补偿一起重估后的结果;长期投资者要问的不是价格有没有跟着通胀动,而是自己的实际购买力有没有提高。

机制并不复杂。假设一家企业未来能卖出更多收入,如果通胀预期上升,它可能提高售价,名义收入变好;但原材料、工资、融资成本也可能同步上升。更关键的是,市场会用更高的折现率去计算未来现金流的今天价值,因为投资者会要求补偿未来货币变“薄”的风险。于是,同样是通胀环境,拥有定价权、轻资产、低负债、现金周转快的公司,可能把压力转嫁出去;而高负债、重资本开支、客户议价弱的公司,名义收入上升,真实价值却可能被挤压。

一个常见误区是把“抗通胀资产”理解成某个固定清单,好像买了资源品、地产、黄金或股票指数,就自动抵御通胀。现实更挑剔:如果买入价格已经包含很高预期,或者资产本身现金流质量不够,所谓抗通胀也可能只是短期叙事。反过来,有些看似普通的企业,只要能在不丢客户的情况下温和提价、少依赖外部融资、自由现金流稳定,反而更能保护长期购买力。

所以,通胀预期不是一个用来吓自己的宏观词,而是一把检查投资决策的尺:你的收益来自真实现金流增长,还是只是名义价格上涨?你的资产能不能把成本压力传导出去?你的负债和现金储备会不会在利率上行时反过来伤害你?下次看到“通胀受益”这类说法,可以先问一句:这项资产到底是在保护购买力,还是只是在讲一个听起来顺耳的价格故事?

QDII溢价要小心

经济学

QDII 或跨境 ETF 的溢价,最容易让人误把“买得进去”当成“买到了那项资产”。核心判断先说:当基金价格明显高于基金净值时,你买下的不只是海外股票、债券或商品本身,还额外买了一层市场拥挤和额度稀缺的价格。这层价格不一定跟长期资产回报同向,甚至可能在标的没怎么跌时先回落,变成投资者看不见的损耗。

机制并不复杂。开放式基金理论上靠申购赎回让价格贴近净值,但 QDII 受到外汇额度、境外市场交易时差、申购暂停、做市能力和投资者情绪影响,套利通道常常不够顺畅。于是,当大家集中追某个海外市场或某类资产时,场内价格可能被抢到高于净值。此时你以为自己是在配置“纳斯达克”“港股科技”或“海外债券”,实际还在为稀缺入口付一笔门票钱。门票钱越高,未来净值上涨需要先覆盖这部分溢价,才轮到你真正赚钱。

一个常见误区是:看到某只 QDII ETF 最近涨得好,就认为它代表的资产仍然强。可短期涨幅里可能混着两部分:标的资产上涨,以及溢价扩大。前者来自企业盈利、利率、汇率或风险偏好,后者更多来自交易拥挤和供给受限。反过来,如果监管提示风险、申购恢复、情绪降温,溢价可能收敛;即使海外市场当天没大跌,场内持有人也可能亏钱。长期投资者真正要问的不是“还能不能买到”,而是“我愿不愿意为同一篮子资产多付这张门票”。

边界也要讲清楚:小幅溢价未必值得过度紧张,尤其是长期配置金额不大、替代产品很少时;折价也不自动等于便宜,因为它可能反映流动性差、跟踪质量弱或赎回受限。更稳妥的做法,是把溢价率当成交易成本和安全边际的一部分:看净值而不只看价格,看同类基金是否有更低溢价的替代,看自己的配置目标是否足够长期。今天可以留一个问题:下次想买跨境产品时,你是在为资产本身付费,还是也在为“大家都想挤进去”这件事付费?

Trace要看见存储阶段

AI

Agent 的可观测性不能只盯着模型调用和工具执行;一旦 runtime 进入 durable、可恢复、多租户模式,启动、hydration、checkpoint、恢复、请求持久化这些存储阶段同样决定一次运行到底卡在哪里、为什么变慢、是否重复执行。把这些阶段藏在一个“agent latency”里,线上排障只能靠猜。

Cloudflare Agents 0.18.0 把 SDK 管理的初始化、启动、聊天交互、turn 和 durable submission 拆成语义阶段,并为 storage-heavy setup、hydration、recovery、request/response persistence 建立命名 span。每个 span 带 agent identity、稳定的 UI grouping marker 和操作元数据;同时通过 invoke_agent {agent}chat {model}execute_tool {tool} 形成从运行到模型、工具的统一 OTel 投影。关键不在 span 变多,而在“推理慢”和“存储慢”终于能被区分。

工程上,这会改变 OPC 类平台的 trace 设计:不要只给 run 记一个总耗时,而要把 lifecycle phase、storage phase、run id、session scope 和 recovery attempt 放进低基数属性;payload 默认不进 telemetry,只有显式开启时才存消息或工具参数。这样既能定位 hydration/写盘背压、恢复风暴和重复提交,也不会把用户内容变成默认日志。更重要的是,phase 边界应该和取消、重试、告警、SLO 对齐,否则“可观测”仍然只是漂亮的时间线。

如果一次 Agent 运行变慢,你的系统能否在不打开用户 payload 的情况下回答:慢在推理、工具,还是状态恢复?

你的「我不行」,是后天学会的

心理学

你有没有过这样一种体验。你跟朋友说,我这个人就是没有运动细胞。或者说,我天生不是学语言的料。又或者说,算了吧,我这辈子就跟数学八字不合。你说这些话的时候语气很自然,像是在陈述一个客观事实——就好像在说「我身高一米七」或者「我是O型血」一样,不带什么情绪,甚至有点自嘲的轻松。但你有没有停下来想过一个问题:你是什么时候开始相信这件事的?是你生下来就知道的吗?还是说,你其实是被教会了「自己不行」?

1967年,心理学家马丁·塞利格曼做了一个后来改变了整个心理学界对「失败」这个概念的实验。他把狗分成两组,关在笼子里,接受电击。第一组狗可以通过按压一个面板来停止电击——也就是说,它们的行动是有用的。第二组狗无论做什么都无法停止电击——挣扎、嚎叫、撞笼子,全都没用,电击照常来。到了实验的第二阶段,他把所有狗都转移到一个新的笼子里。这个笼子中间只有一个很矮的挡板,狗只需要轻轻跳过去,就能到达没有电击的安全区域。第一组的狗很快就学会了跳。第二组的狗呢?它们趴在笼子里,一动不动,承受着电击,连试都不试一下。它们不是不能跳。挡板那么矮,别说狗了,一只猫都能过去。它们只是不再相信自己能做什么了。它们学会了「努力没用」。

这就是「习得性无助」。它不是天生的懦弱,不是性格缺陷,不是智商问题。它是一种学习的结果。是你从经验中学到了一个错误的结论:我的行动不会改变任何事情。

这就很有意思了。我们通常觉得「学习」是个好东西——学会骑车、学会解题、学会跟人相处——这都是学习的成果。但学习是一把双刃剑。你在学习「我能行」的同时,也可能在别的领域学会了「我不行」。而且「我不行」这个东西学起来特别快。可能只需要三次失败,你就足够形成一个坚定的自我认知。接下来,这个认知会像一个自动过滤器一样装在你的大脑里,每一次遇到相关的情境,它就会跳出来替你做出判断:别试了,你搞不定的。

你有没有见过这样的孩子。小学三年级的时候数学考了一次不及格,被老师当众批评了几句,回家又被他爸说「你这脑子随你妈」,然后他从此就觉得数学是他命里的劫数。到了初中、高中,每次数学课他都自动进入走神模式,作业能拖就拖,考试前一天才开始翻书。最后他果然数学很差。他会说,你看,我早就说了我数学不行。他不会去想的是——那个三年级的他,那个在一次考试中失利的小男孩,他的数学能力真的有问题吗?还是他只是在那个时刻被教会了「你不行」,然后他用之后十几年的时间,不断地去验证这个最初就被植入的错误结论。

塞利格曼后来做了更多研究,发现人类的情况更复杂,但也更说明问题。人的习得性无助,核心不在于你经历了多少次失败,而在于你如何解释这些失败。如果你把一次失败解释为「这是因为我这个人不行」——这叫内在的、稳定的、全局的归因——那你几乎一定会陷入无助。但如果你把同样的失败解释为「这次方法不对」或者「今天状态不好」——这是外在的、不稳定的、局部的归因——那你的行动力就不会受损。同样的失败,不同的解释,完全不同的后果。

这其实是一个很让人振奋的发现。因为如果问题出在你的解释方式上,那它就不是一个命运问题,而是一个可以调整的认知习惯。你不必回到三年级去重考一次数学。你只需要在每一次那个「我不行」的念头冒出来的时候,多问自己一句:等一下,我是真的不行,还是我只是在某一次特定的情境下失败过?是「我不行」,还是「我上次用的方法不太对」?

你趴在笼子里的样子,和你三年级坐在教室里发呆的样子,其实是同一件事。挡板一直都不高,门也一直是开的。你只是忘记了自己还能跳。

别把回顾做成监控

Product

回顾型个人软件最容易犯的错,是把“我想记住什么”偷换成“系统能记录什么”。照片、位置、日程、运动、聊天、网页足迹都可以变成素材,但素材越全,产品越不能像监控面板;它要替用户把生活重新剪成少数值得回看的片段,而不是把每天还原成一张精密账单。

这里的关键不是 AI 能不能总结,而是产品有没有克制。一个好的 Journal、年度回顾或个人时间线,不应该把用户推到一堆完整数据前,让他自己承担筛选和解释成本。它更像一个温和的编辑:少给一点,给得准一点,并且允许用户说“这件事不算我”。这种删除权和改写权,本身就是亲密产品的安全感。

反过来,很多个人数据产品会迷恋全量、连续、自动化,仿佛记录越多就越懂用户。但对个人软件来说,过度完整反而会破坏亲密感。人需要的不是被系统证明“你昨天去了哪里、做了什么”,而是被提醒“这里可能有一个你愿意保留的意义”。这也是回顾产品和分析产品的分界:前者帮人理解自己,后者容易把人变成指标。

可以问一个小问题:当产品拥有越来越多私人信号时,它是在帮用户形成自己的叙事,还是在把用户变成一份可查询的行为档案?