anthropic的小心机

早上发现Deepseek + Claude Code用不了了:API Error: 400 Failed to deserialize the JSON body into the target type: messages[1].role: unknown variant `system`, expected `user` or `assistant` at line 1 column 29561

问了一下google,是CC升级了,在里面加入了‘system’的role,而一般的第三方模型不会/来不及就它的毛病,就不支持这个role,于是报错。

没有非常好的办法。最后我选择了回退Claude Code:npm install -g @anthropic-ai/claude-code@2.1.148

但是也就是打开那一下是可以了 /exit 出来,重新进,就又变成 2.1.154了。

那每次使用都install 2.1.148再用?或者跳离它这条船。

codex的陷阱

这两天终于碰到一个。

我持续用codex为场景识别并收敛伪冲突。这几天碰到有若干个场景,伪冲突被codex收敛得很快,基本上3分钟内就告诉我,这场景的伪冲突已经清零了。

然后我每天都会让Deepseek + Claude Code帮我检查总冲突数的收敛情况。然后根据剩余的大头再委托codex去处理。

早上DS返回的结果跟昨天返回的结果类似,有些大头完全没有清理。我一开始以为DS搞错了,然后把结果给codex double check,codex一开始还是说它确实清干净了。

随着对质的深入,codex终于发现它的问题,它选了两个错误的数据域作为判断的标准,结果导致这两天的伪清零……

至于它为什么这么选,之前是没有这样做的。大模型毕竟是一种推理机制,如果KPI需要它清零,它会选择一个看上去能达到结果的判断方式,而并非费力地推导出各种机制和规则。简单来说,改测试代码,直接通过。

多模型联合工作,审核,避免偷懒,看来是必须的。

未来的组织形式

20年前,也就是2006年。我刚毕业一年,对小公司内部的政治斗争了无兴趣,就离开了。差不多时候离开的是一位斗争中无奈失败的清华校友/师兄。他之前是这个小公司的CTO,找到投资,就离开创业了——还是从事这一本行。

几个月后,我去他公司找他聊天,他给我展示他公司的管理后台,就是公司的信息系统页面(虽然他不是做IT的)。我很惊讶地发现,整个页面以及流程、模块划分,都跟之前的公司的后台系统一模一样。想问为什么,他的意思是,这毕竟不是他的主要方向,能用就用了,也省去了设计的烦恼。另外一点挺关键的,他从原公司挖了一批人,这些人也对这样的后台熟悉,就无缝过渡了。

然而我不以为然,怎么能因为使用习惯,就把这么关键的公司组织设计的工作给省略了呢?

及到我2009年又回到了之前离职的这家公司,一直做到2023年,老板说,划这部分人给你,内部创业,成立一家新公司,继续做。跟IT/财务/行政的讨论了一下,毕竟人和经验都是那样,也没必要标新立异,就把原来的系统复制一份,数据库划分一下,就可以起来了。(还有一句没有公开说的话,万一你公司做不起来,这些人也是可以直接回来的嘛)

确实,当时按这个思路走,3个月左右,就什么都畅顺了。

当然了,我整体来说是一个奥卡姆法则的践行者,既然可以省事,就没必要再发明一套,沿用旧系统和旧的组织模式是最方便的了。

直到我去年底,彻底离开了原有的集团公司和子公司。

我开始思考,组织的发展过程、组织的形态,以及AI Native的公司又该如何。

1.为什么会有公司?

公司的本质不是“一群人”,而是 “一种持续创造、交付和获取价值的机制”。工业时代之所以需要一群人,是因为信息传递和决策的带宽有限,必须靠分工和科层来规模化。但在AI时代,这个物理约束正在消失。

2.创始团队是怎么形成公司的?

随着业务的成功壮大,一部分的创始团队,也可能是夫妻档,就不得不招聘更多的专业人士加入其团队,于是就有了内部事务的划分,产品研发、市场、销售、供应链、财务、人力资源。一开始是一两个人处理某一项的内部事务,虽然事情越来越多,就需要增加人手,形成部门。

部门逐渐壮大,老板不可能直接对接到个人,于是需要有经理的出现,也就是中层干部。继续壮大,老板和经理之间的副总也出现了,经理和一线员工之间的主管也出现了。

3.什么是奥卡姆法则?

奥卡姆法则:“如无必要,勿增实体”。就是如果跟终极目的不相关的事情,不要因为纵向的历史/经验,横向的同行/对手,而引入对你没有帮助的实体。

4.什么是第一性原理?

Elon Musk提出/遵循的第一性原理,要求探讨问题的时候,关注终极的最简单的事实。然后重新设计系统/解决方案。

5.根据第一性原理,只保留核心团队/个人,核心问题是什么?

单一人类的有限认知与无限市场需求之间的矛盾。其架构必须解决:如何用一个人的“意图”和“判断”,驱动持续增长/无限规模的“执行”。

6.AI Native是什么?

人遇到的所有问题,从AI那里寻求帮助,而不是看传统的人是怎么做的。

7.AI Native 对问题5的答案是什么?

  • 核心模型:意图-执行双循环架构
    • 内循环(人类心智层):核心团队只负责三件事——设定使命与边界(什么不做)、定义价值判断标准(什么是好结果)、进行关键决策(基于AI提供的预测与选项)。这是公司的“宪法”层。
    • 外循环(AI代理层):由一组自主智能体(可能是集群)组成。每个智能体负责一个完整的业务功能(如市场洞察智能体、产品设计智能体、代码生成智能体、客户成功智能体、财务合规智能体)。它们之间通过事件驱动API契约进行协作,无需人类介入。
  • 架构特征:可组合的智能体网格
    • 没有“部门”,只有“能力函数”。例如,传统公司的“市场部”被一个市场感知智能体取代,它持续扫描全网,输出趋势信号。
    • 没有“流程”,只有“状态机”。例如,客户需求 -> 需求解析智能体 -> 价值评估智能体(与人类心智层交互) -> 任务拆解智能体 -> 执行智能体集群 -> 交付验证智能体。整个过程是一个自动流转的状态机。
    • 记忆即数据库:所有交互、决策、结果都以向量和结构化数据的形式存入长期记忆池。这是公司的“集体无意识”,支撑智能体的持续进化。

这一段有点抽象,我再简单一点:

核心就三样东西:

  1. 核心管理团队(只做最重要的决定:定方向、定底线、定什么赚钱)
  2. 一群AI“小工”(每个AI专门干一件具体的事)
  3. 一个共享的大脑记忆(所有AI都记得公司发生过什么)

8.奥卡姆法则如何协助达成AI Native?

传统公司里有一堆“多余的东西”:

  • 🛜 经理(因为信息传不过去,所以需要人转达)
  • 🛜 会议(因为大家信息不同步)
  • 🛜 流程审批(因为怕出错)
  • 🛜 日报周报(因为老板不知道大家在干嘛)

在AI公司里,这些东西统统扔掉:

  • 不用经理 → AI之间直接说话,契约自动执行。
  • 不用开会 → 所有信息存在共享记忆里,任何AI随时查。
  • 不用审批 → 只有违反你定的“底线规则”时才通知你,比如“这个单子低于成本价,请老板定夺”。
  • 不用写日报 → 你的老板界面就是一张仪表盘:今天接了500单,赚了2万块,3个用户投诉颜色不对(AI已经自动处理了2个)。

最终AI Native公司的形态就是:

一个人类核心团队(目标/边界) + 一组自治智能体(执行/协调) + 一个共享记忆系统(数据/知识) + 一系列外部API(能力/市场)线 = 一家公司

没有其他多余的人、多余的步骤、多余的管理。

9.这样的公司如何壮大以适应更大市场需求?

不靠加人,靠加AI能力,而且让外面的人也用你的AI能力。

方式1:把你的AI小工复制很多份

  • 原来你一个设计AI同时只能做10张图。
  • 市场大了,需要同时做1万张图。
  • 怎么办?复制1000个设计AI同时跑。你不需要招1000个设计师,只是云服务器多开几个进程。成本非常低。

这叫“水平扩展”:像复印机一样复印你的AI劳动力。

方式2:不再是只卖海报,而是变成“海报流水线”的指挥

  • 你发现很多小店主也需要做海报,但他们不会用你的AI(嫌麻烦)。
  • 你提供一个极简的API:别的公司(甚至别的一人公司)只需发一行文字“我需要一张火锅店开业海报”,你的AI集群自动出图、自动改、自动交付。
  • 于是你从“自己做海报”变成“让别人也能调你的AI能力”。你可以服务无数个下游公司。

这叫“能力平台化”:卖铲子比挖金子赚得多,而且规模可以极大。

方式3(终极形态):你的AI自动开子公司

  • 你发现除了海报,还有很多人需要做短视频封面、PPT模板、电子书封面……
  • 你告诉你的主AI:“去训练三个新的AI,分别专门做封面、模板、电子书,各自独立运营。”
  • 主AI自己调数据、自己训练、自己上线、自己接单、自己记账,然后把利润汇总给你。
  • 你什么都没多干,但你手下已经自动长出了三家公司。

这叫“递归扩张”:你的AI帮你管理一群小AI公司,你只当最终老板。

10.为何这个回答里面,有时候以一个人来表达,有时候以人类核心团队来表达?

因为一个人总揽所有业务的风险非常高,在AI自主并不成熟的时候,有可能因为人的偶尔缺席而带来严重的后果。所以考虑的是一个核心团队,能对边界作出合理的限制,也可以互为备份和补充,降低个人的偶发风险(生病 / 意外等)

(这文章并不太完善,我后续再行修改。)

给阿嬷的情书

昨天去看的,确实挺感人,当然了,有些细节上其实可以更细腻和温柔一点,比如最后淑柔和南枝见面的那一段,换个王家卫会拍得更好,不过大导演看不上这样的小成本电影就是了。

技巧上没太大的取巧,故事上结构上,情节上也略显老套,但胜在够真挚,演员也以潮汕草根/素人/网红为主,所以让你感觉资本的渗透不多。

想起《一个陌生女人的来信》《周渔的火车》《查令十字街84号》这些。

剧本不在乎是否重复和套路,真诚和朴素,会在标新立异的今天更值得珍视。

deepseek的风格

跟codex一样,我规划了一个我认为给予了足够信息的项目+文档,然后告诉了deepseek(+Claude Code),希望它能从头到尾解决这事情。

两天后,终于出了一些认知上的问题。

就是,不尊重我给的文档,自行用模型中内置的其他知识去替代。


 错误原因只有一个:我没有读 ***** 规范中旋转矩阵的定义,直接用了我熟悉的列向量约定(OpenGL 习惯)。

怎么办?骂醒它。

我现在对于降智的codex,国产的kimi、deepseek,都用过国骂了。

codex是参与创作的时候的不足,还算是情有可原吧

kimi是一个git clean,把自己做的事情都冲掉了

deepseek则是这个,因为没有思考过程,所以感觉它就是做错了,然后说它不知道怎么做。同样的问题,kimi有思考过程,我瞄一眼也大概能知道哪里有问题,纠正起来快。

还是不敢让它们一直做到底,因为你不知道它里面有多少固化下来的微小的认知障。

呐喊

最近看完了《鲁迅全集》第一卷,最熟悉的莫过去后面的《呐喊》了。

那些耳熟能详的名篇:《阿Q正传》《狂人日记》《药》《故乡》《社戏》《一件小事》

小时候觉得鲁迅杂文文字太过于刻薄,散文文字又过于精炼。等到自己4奔5的年龄,也体会到如何才是惜字如金,一点点读下来,7分感动,3分理解。

小时候外公也很推崇鲁迅,不过他不是太看好我,觉得我应该像是被鲁迅质难的那些文人(这许是我猜测的),所以我抵触,也顺带对鲁迅不给予太高的评价。

今天再看社戏,看那一头头巨兽,想起来自己的生命中也会经常遇到这种逝者如斯,天地沙鸥,白云苍狗。自感人生海海,行尸走肉也好,随波逐流也好,总是一种体验。鲁迅能被文化界普遍认可,其乡土情远大于日归气息,这助力很大。

《呐喊》也贡献了很多名词和meme,比如人血馒头,比如豆腐西施,比如假洋鬼子,比如阿Q(精神),比如回字的四种写法……

还有那些名句:

你也配姓赵?

其实地上本没有路,走的人多了,也便成了路

窃书不能算偷……窃书!……读书人的事,能算偷么?

……

重读《一件小事》,想起今日的网络号召不要把倒下的人扶起,真是哀叹,鲁迅一百年前的文字,都白写了。

百鸟朝凤的真相

别被骗了!百鸟朝凤根本不是朝圣,是鸟类黑帮亡命追杀

你脑补的梧桐神凤、万鸟跪拜,全是古人编出来的温柔谎言。
真实的百鸟朝凤,残忍又猎奇,就是一场天空公开处刑、以多欺少的群殴追杀。

1、神话完美掩盖真相

传说凤凰救灾救众鸟,被万物感恩朝拜。
可宋代正史只冷冰冰记着:凤凰现身城楼,数百飞鸟紧紧尾随,仓皇飞向远方。

古人当成天降祥瑞,可动物学家一眼看穿:
成群鸟紧跟大鸟,从来不是臣服,是追着驱逐、死缠不放。

2、鸟类天生抱团霸凌Mobbing

自然界常态:小鸟拉帮结派,疯狂围殴猛禽。
乌鸦追猫头鹰、燕子撵老鹰,俯冲尖叫、轮番骚扰,靠数量碾压体型巨大的天敌。
温柔祥瑞?不存在。
这是鸟界最肮脏的抱团欺压,赶不走绝不罢休。

3、更阴暗反转:小鸟会借刀杀鸟

颠覆三观的野外实验证实:
白头翁遭遇天敌领角鸮,发出惨叫不是呼救同伴,而是召唤天敌的天敌——苍鹰、大冠鹫。

打不过就叫更大的狠角色过来灭口,借刀杀人,鸟界心机恐怖到离谱。

4、凤凰压根就是落难逃犯

古籍里的神鸟,大概率只是孔雀、红腹锦鸡这类珍奇大鸟。
误入鸟群领地,遭到全城鸟类围攻追杀,漫天逃窜。

历代帝王为了皇权正统,强行把狼狈逃亡美化成百鸟朝拜。
高高在上的凤神,不过是被一群小杂鸟围堵、无处落脚、亡命飞天的可怜大家伙。

千年浪漫神话,撕开真相只剩惊悚:
百鸟朝凤,从来不是朝拜。
是鸟界黑帮集结,一场血腥又荒诞的天空围猎。

AI味重不重?

Ideas: A History: From Fire to Freud

很有名的书,花了一年左右的时间才看完。当然了,最大的问题是我自己,工作上经历的波动比较大,提不起心气来完成阅读。第二大问题是这本书实在是太长了。第三大问题是跨学科的知识非常多,像我这样的多知识面的人,读这种跨度大的英文书,也是挺累。

不过好在看完了。

作者比较看重的思想史上的人,因为时间太长我已经把前面的忘得差不多,只说后面的,比如马丁路德、美国那一批开国大佬、达尔文、马克思、弗洛伊德。

以前不知道为什么弗洛伊德明明理论都是破绽,历史地位还那么高,作者在讲无意识的时候,弗洛伊德总结了他之前的哲学家/思想家对无意识的各种,输出了完整的体系——精神分析学说。而无意识,又是在文学和艺术已经把古典主义浪漫主义都遍历之后,必须适应现代社会(重复是没有更多的价值),这时候暗合无意识的方式推进了更多,尤其以俄国那帮巨匠突出。弗洛伊德也为精神和科学第一次建立了桥梁……

这本书,既是思想史也是科学史,也伴随各种政治史,意识形态等等。看到知道的,自然激动,看到不了解的,先翻译一下,再看看要不要延伸查一下资料。时间就这么过去了。

该找些轻松一点的读物了。

sed

kimi还有一个破毛病,喜欢用sed来编辑脚本。

出了几次反复修改改错代码的问题。我终于忍不住问DeepSeek为什么。

这是一个很敏锐的观察。AI(比如我)在生成 `sed` 命令时确实容易出错,主要原因可以归结为以下几点:

### 1. 分隔符冲突
`sed` 默认使用 `/` 作为分隔符,但 AI 常常忽略目标字符串中也包含 `/` 的情况。

-   **错误例子**:你想把路径 `/bin/bash` 改成 `/usr/bin/zsh`。AI 直接生成 `sed ‘s//bin/bash//usr/bin/zsh/’` —— 这会导致语法错误,因为 `/` 提前结束了模式。
-   **正确做法**:需要转义 `/`(`\/`),或者改用其他分隔符,比如 `#` 或 `|`:`sed ‘s#/bin/bash#/usr/bin/zsh#’`。AI 常常忘记处理这种冲突。

### 2. 特殊字符未转义
`sed` 中的很多字符有特殊含义:`.`、`*`、`[`、`]`、`^`、`$`、`\`、`&` 等。

-   **错误例子**:你想替换 `IP地址:192.168.0.1` 中的 IP。AI 可能会写 `sed ‘s/192.168.0.1/new_ip/’` —— 但这里的 `.` 会匹配**任意字符**,而不是字面上的点。
-   **后果**:它可能匹配到 `192X168Y0Z1` 这样的奇怪组合,或者替换失败。AI 自动生成时往往忽略对这些元字符的转义(应该写成 `192\.168\.0\.1`)。

### 3. 分组和反向引用的跨平台差异
在 `sed` 中,使用 `()` 进行分组时:

-   **GNU sed(Linux)**:需要用 `\(` 和 `\)` 来转义,反向引用是 `\1`。
-   **BSD sed(macOS、FreeBSD)**:基本 POSIX 模式下,`(` 和 `)` 也必须转义才能作为分组符,不过 `\1` 用法类似。
-   **更混乱的**:有些脚本想用 `-E` 选项(扩展正则)来避免转义,但 AI 生成的命令常常**混用**两种风格,或者不加 `-E` 却用了无需转义的正则写法,导致报错或静默失败。

例如:想交换两个单词 `Hello World` → `World Hello`。正确的 GNU 写法是 `sed ‘s/\(Hello\) \(World\)/\2 \1/’`。如果 AI 忘记转义括号,写成 `sed ‘s/(Hello) (World)/\2 \1/’`,则完全无效。

### 4. `-i` 选项的平台差异
`sed -i`(原地修改文件)的行为在 Linux 和 macOS 上不同:

-   **Linux**:`sed -i ‘s/old/new/’ file`
-   **macOS**:`sed -i ‘’ ‘s/old/new/’ file` —— 必须为备份后缀提供一个空字符串参数,否则会报错。

AI 经常默认用 Linux 语法,导致在 macOS 上运行时出现奇怪的 `sed: -i may not be used with stdin` 或 `undefined label` 错误。

### 5. 边界条件与文件格式
-   **缺少换行符**:如果文件最后一行没有换行符,某些 `sed` 命令(如 `$` 地址匹配)可能表现异常。
-   **Windows 换行符(CRLF)**:`sed` 默认把 `\r` 当作普通字符,导致模式匹配失败(比如你搜 `foo$` 匹配不到 `foo\r\n`)。
-   **空文件**:一些 `sed` 脚本在空文件上会直接报错退出。

AI 在生成命令时,默认假设一个整洁的 POSIX 文本文件,但现实中并不总是如此。

### 6. AI 的“统计学习”问题
大模型的训练数据里包含大量 **错误的、过时的、不兼容的** `sed` 示例。比如:

-   来自 Stack Overflow 上某个未被采纳的答案。
-   来自个人博客里随意测试的片段。
-   来自混合了不同 shell 环境的历史脚本。

模型学会了“最常见”的写法,而不是“在所有情况下都正确”的写法。对于小众边缘情况(如处理路径、JSON、XML),模型更容易编造一个看起来合理但实际错误的命令。

### 7. 对上下文理解不足
用户往往只说“帮我改一下这个配置文件里的 IP”,但不提供文件的具体格式、是否有特殊符号、使用的是哪种 `sed` 版本。AI 只能盲目猜测,而猜测的结果就是容易出错。

### 如何减少错误?
-   **先测试**:运行 `sed` 前,先用 `sed ‘s/pattern/replacement/’ file`(不加 `-i`)看看输出是否正确。
-   **告诉 AI 更多信息**:明确说明“我的文件路径包含斜杠”“我用的是 macOS”“IP 地址里有小数点”。
-   **换工具**:对于结构化的文本(JSON、YAML、XML、CSV),用专门的解析器(`jq`、`yq`、`xq`、`awk`)而不是 `sed`。AI 生成的 `awk` 或 `perl` 命令有时比 `sed` 更可靠,因为语法更一致。
-   **加上 `--debug`**:如果 `sed` 版本支持(如 GNU sed 4.8+),用 `sed --debug` 看它是如何解释命令的。

总的来说,不是 AI 能力不足,而是 `sed` 本身是一个非常“挑剔”、充满历史包袱和平台差异的工具。AI 擅长的是统计规律,而不是绝对正确的语法和边界条件。对于关键的文件操作,**永远不要盲目信任 AI 生成的 `sed` 命令**。

明白了,于是让Kimi把不用sed写到AGENTS.md里。

自以为是的CLI

在调试过程中,我让kimi帮我checkout回git的最新版本。

然后发现它给我git clean了,于是一大堆untracked的目录被干掉了。骂了它十几句。

得到的结果就是我以为,对不起,有没有Time Machine,很废。

于是我告诉它不要用git了,除非我命令它用。

好在前两天都及时git commit过了,损失不算大,就是10美元额度能追回的事情。

有点心理阴影,还是让codex去恢复/重做这些untracked的事情了。