2026-05-16

不可知论

听了下姚顺宇那个三个多小时的访谈,有几点还蛮有意思的.

一个是谈到Anthropic的Coding为什么强.
一个是关于Gemini的长文本能力出色.

因为都涉密没有展开谈,但都用了一个技巧来概括/形容.
不由得让人遐想连篇.

Claude的Coding能力按他的说法至少有一半是归功于意外/运气收获.
也就是这不算事一个完全by desing的结果.

按照他入职Anthropic的时间节点来说,应该是在RL形成规模之前,或者说出明显成果之前.
也就是这个trick可能还是pre-train时代的一些副产品.

在后来的谈话内容里,他也经常强调Infra的重要性.
这点和罗福莉那个访谈的观点类似.

不过他更在意的点让人比较在意.

因为他提到的例子主要是在training过程中异构硬件,或者说运行时上一些工程问题导致的不稳定/不可复现问题.

可能类似罗福莉说的loss spike时刻.

他把这个东西称之为一种系统缺陷.
可能也是他前面说别人觉得pre-train到头了是因为遇到这类bug.

如果把这点和Coding能力的优势放一起看的话,倒是有某种可解释性.
因为逻辑上来说,既然无法抹除,那么可以就需要一种方式去系统性抹平.

最直接的做法就是做多路trace/sample,当作一种feature.

所以如果把Cluade喜欢propose多个方案的行为特征来看的话,倒是有些符合.

某种工程方案带来的意外收获.

而讲到Google的长文本能力的时候,更是有一种迷之微笑.
像是一种简单到令人发指的smart move.

想了想,可能还是跟搜索有关.

因为Google在语料上的优势就来自于搜索行为日志.

如果把搜索意图和召回网页全文,以及最后的点击浏览行为作为某种语料的话.
关键字和点击路径就构成了这个混合内容上下文里的一个简单明确的reward signal了.

在这种情况下,对长文本的噪声就有了某种天然的attention优势.

所以估计也就是这些让他觉得pre-train这个东西还存在很多可能性.
尤其用他后来的话说,pre-train和post-train包括RL和SFT本质上都是同一个事情.

根据某个模式的输入,去择优剪裁某个特定的输出分布.

在这种角度下,pre-train的瓶颈就不在语料.
而在语料构成形式的多样性上.

那么顺着这个思路,pre-train要scaling up的话,就需要某种泛化的生成或者说适应多样化input的能力.

如果这个猜想是对的话,考虑他口中的ML Coding和Long Horizon.

ML Coding可以把这种多样化input的构成规模化和复杂化.

但是Long Horizon呢?

在谈到长下文解决方案的时候,他提到Google和DeepSeek都在pre-train方面有自己的想法.
那么应该可以理解为,对上下文的长度目前来说还是有一定需求的.
跟pre-train多样化并不矛盾.

两者最终效用上来说,都还是服务与如何让LLM能够有更加泛化的能力.

多场景是一种多样性适应性手段.
长上下在当前来说,属于某种scaling law的工程实践.

毕竟不管是Skill还是Agent调度,本质上都是追加/offload/隔离上下文来让LLM的CoT/推理过程在可控范围内展开.

所以在基础模型发展到今天潜在能力大同小异的今天,似乎又回到了讲究prompt的时代.

只不过现在这个prompt更像是一种人类组织架构的复刻.

对模型调度进行明确可量化的目标ORK管理.

所以不管是Memory还是Harness,本质上还是在context上面的一些trick.

让模型能跟容易地从一个基态到达另外一个终态.

不过这里还有个比较有意思的是他对这些pre-train/post-train/continual learning和社区各种 memory实现的一个评价.

本质上都是对模型权重的修改.
所不同的是对哪一部分.

而从代价上来说,memory这类通过prompt构造kvcache权重变化,进而propagate出去的方式似乎是某种形式上跟优雅搞笑的方式.
因为它只需要直接驱动相对小的一部分,就能够影响整体输出.

那么反过来是不是该考虑模型参数结构的变化了呢?

因为逻辑上来说,给定一个问题,和足够泛化的推理能力,那么需要记忆/内化到参数里的知识是不需要太多的.

类似与理工科考试并不需要太多死记硬背,而只需要有足够抽象的推理能力,理论上来说就可以从零推导解题过程需要的要素.

问题的关键可能在于这样一个东西怎么工程化地实现/怎么去train.

可能他口中的多模型软蒸会是一种路径.

毕竟形式上来说,它可以把各个模型的推理能力泛化到目标模型上,通过互相抹除各自模型的特征,来使得目标模型具有某种更纯粹的参数形态.

不过,从本质上来说,这并没有对现有的LLM范式构成什么变化.
更多的是一种加速而已.

反过来说,如果这种泛化能力是ok存在的话.
那么,通过什么路径到底其实没有那么重要.

因为就像他说的,只不过是早晚的事情而已.

问题可能在于这个泛化的边界在哪里.

拿明确高度成熟的Coding来说.

最近用v4 Flash写伪代码示例让它实现已经比自己脑内思考具体实现方式和细节要快了.
很多时候CoT只翻了一部分,对方已经build check test完成.

虽然大多数时候还需要最后commit之前做一轮code style/smell方面的hygiene.
但实际上,这个也可以通过skill或者独立的agent去完成.

至少,能减少这个交互的轮次.

而如果把LLM这个身份抹去的话,它其实就是一个普通feature开发code review的流程.
只不过整个过程从提出到完成也就几分钟的事情.

所以当下的一个hype其实是基于这个倒推的.
what if 提feature需求的这部分也由llm自己完成呢?

原则上是可行的.
因为提需求本身也可以源自于某种上级需求.

所以这本质上是一个递归的过程.

那么问题就变成了root需求是什么/怎么来的.
它可以被meta化/自举/无中生有么?

这个其实是it depends的.

一个例子是之前蒸馏自己.
写了个doc-manager把每个session和看过的文档ingest到一个目录.
用leveldb的思路构造了一个关键字检索和存储.
同时写了个opencode的plugin把tool call的patten记录下来,让在每次ingest完之后看看有什么新tool可以propose出来减少low level调用的.

这一套机制倒也不是不work.
因为确实靠它自举了几个检索和ingest文档的tool,减少了很多读文件和编辑文件格式错误的问题.
也确实用它蒸馏了像cluade coee/codex/openclaw/hermes之类的prompt和对应的guideline,迭代了几版各个agent.md和custom tool.

但它的问题一个是虽然能统计和发现patten,但是往往propose出来的方式和实现并不是那么理想.
而且这个还是当时的sota opus 4.6作为主力model时期的结果.

因为它确实目前还不像人一样有发散的context能够cover到session之外的内容.
即使在是在propose和实现tool是不同agent,并且都良好遵从实现前先读prio-art的指令的情况下,也还是有些一言难尽.

虽然这可能跟指令构成有点关系.
因为没有明确的约束成果有什么指标.

但反过来也说明,至少目前对于这类open object,还是不是那么符合预期.

当然.这个换成人也一样.

不同人,对同一指令的遵从和完成度也是不一而同的.

那么问题变成,当AI能像最顶尖的人一样行为,并且效率更高的时候,会怎么样.

这个就想到昨天看的 伪钞重案 这个网剧的感想.
以及可能是最近国内话题性比较高的 给阿嬷的情书.

这两个的共同点都在于都是某种形式的非主流电影制作.
前者不是传统的院线制作,后者选角方面也不是寻常的系统性出身.

它们的一个共同点在于,都是某种终端执行展现能力的突出.
或者说,更多的是具体的个人的能力特质的展现.

用AI Coding的角度来说,就是每个导演演员的技巧学习和掌握都是某种形式上同质的.

即使存在着各自的能力层级分布,但从某个特定的同水平的分布上来说,专业技巧可能是没有什么区别的.

尤其考虑同期流行的 丧尸清道夫 那个AI短片.

如果光论特定领域的技能水平来说的话,是没有什么区别的.

唯一的区别是它们不是一个单因素的技能性成功.

抛开走红这点来说,跟大多数同技能水平线的人来说,他们的区别在于非单一技能点.
而是有某种景上添花的额外技能加持.

尤其动画短片.

实际上,它是一种编导能力外的,资源自给/整合能力.

传统形式下,它的完成需要走投资和各项周边资源合作才能完成.
而现在,更多的是如何快速解决资源的问题.

所以,把这个generalize到AI层面的话.
就是共产主义时代,每个人都是生产力高度发展.

区别可能在于,这个是生产力如何凝结成具体的无差别的人类劳动的问题.

就像之前跟人聊过的一个问题.

都说中国制造业发达,出口商品卖到全球.
很多一上来简单结论是人口优势,基建发达,产业链丰富.
所以能做到性价比,在发达国家构成人力成本优势.

但问题在于,对于每一个同品类的卖家来说,都是中国商家,都处于产业优势下.
为什么能做成的规模就不一样呢.

说到底,还是资源整合/综合能力的问题.

也当然,一个东西的对错并不因自身的对错而对错.
定价是由市场consensus决定的.

就像公司业绩好坏跟股价其实没多大关系.
更多的是动态交易行为的某种情绪体现.

它可能是短期浮动的也可能长期也是这样.




















2026-05-10

关于DeepSeek API的一些想法

最近写一个AgentCLI原型玩具的时候,发现一些比较有意思的点.

因为主要是照着DeepSeek API来写的.
所以基本上也可以说是OpenAI Chat Completion API的一些点.
不过,可能有些是DeepSeek特有的.

一个是请求的stop list.
大致就是遇到给定词的时候,模型会停止生成.

这个某种程度上来说,提供了手动接入模型context方向的能力.

之前翻Anthropic早年的几篇博客的时候有提到一个理论.
大致就是llm不单单是predicate next token.

形式上,前面的token对后面token的走向是有某种差分关系的.
也就是说,intuition里,前面token的组织形式,影响着后面token的概率空间.
从而对context的概率空间有着同样的影响.

通俗地说,就是理论上是有可能通过token的组织形式,让后续的模型的attention能够集中在某些特定的知识/context维度,从而提高对结果走向的确定性.

这个也是prompt/personality的理论基础.

一个比较实用场景可能就是最初DeepSeek R1的那个 aha moment.

现在看Flash的thinking在发现错误的时候经常会有先导的hmm,或者but wait用词习惯.

理论上来说,在这个时候停止生成,然后人工amend一个后续的矫正思路的,是有可能帮助CoT提早converge到解决问题的概率空间方向的.

另外一个则是response里的stop reason.

这个主要是sse/stream模式下的一个概念.
也是tool call的主要实现方式.

它也是在tool call的时候,会生成这个stop reason,然后停止sse/token的继续生成.
因为这个时候需要client端去做实际的tool call,然后再把结果以role=tool的形式append回去继续生成,直到真正的推理完成.

直觉上来说,它应该跟请求的stop word是同类东西.

毕竟理论上,要让模型能够产生tool call,形式上也是只要让它学会生成<tool_call>之类的特殊token/标签就行了.

不过这个stop带来的是agent loop的一些思路.

从实现上来说,agent loop要多久,取决于要不要忽略这种stop generation,继续程序上让它loop下去就行了.
最简单的就是在当前turn stop之后,简单追加一个anything else的user prompt就可以继续持续让它生成.
这个比复杂的prompt调教确定性高多了.

而且一般的harness思路也不过就是通过prompt的方式去构建这种audit+retry的workflow.

这个不是说不行.
但是比较挑模型.

尤其像DeepSeek v4 Flash这种喜欢一条路走到黑,一般不遵循subagent指令,就喜欢硬扛,上下文越长能力越强的就不行了.
 
所以感觉还是要有一些类DSL的inner implement来做,会比单纯的prompt来做更合适.

甚至直接面向tool call,把agent model切换/调度/fork做成tool的话,比单纯的单个task tool可能更flexible.

尤其考虑想opus系列那种看上去就是靠偷偷多路采样提高最终接受度的方式.

原则上,对于同一conversation,可以fork多个agent不同model去并发执行,然后采用类似的方式去audit各个返回结果,然后择一作为main/base,继续下一个prompt.

坏处可能就是费token,以及对一些非可重入对tool调用会带来一些反复.
比如不同的model修改同一文件,导致各自的上下文中这个文件的状态总是不对/跟预期不符.

一个折中的方式可能就是在各自stop reason的时候去仲裁,即使是reason是tool call.

还有一个另外可能比较有价值的就是fill in the middle和prefix这两个API变种.

这两个形式上都是实现一个事情,就是给定prefix和stop word,模型生成中间的部分.

这个看着像是某种RL过程的副产品.

因为这个明显可以直接拿来生成各种evaluation.

一个更实用的方式可能就是根据这个做有限度的prompt适配调优/benchmark.

因为它提供了前置和后置部分.
当用不同prompt的时候,前置除了假装system prompt的部分外,其他都是一致的.
后缀也是.

那么中间实践填充的就可以作为某种prompt优劣的基线来源了.

毕竟这种至少后缀是某种确定不变的验收标准.
不算彻底的盲测.

再一点比较有意思的是v4对thinking模式下的有tool call的reasoning内容的处理.
非thinking模式下,reasoning的内容在sse turn之间是可以不必要回传的.

也就是说,非thinking模式下,client端在请求中可以不回传部分内容.也就是交互的input token可以是不一样的.

从实现角度来说,在不考虑缓存的情况下,一样不一样没区别,毕竟都是next token predication.

但是如果强调可以不回传的话,也就是说这个非thinking模式下的reasoning可能不会影响kv cache的内容.
换句话来说,就是这个reasoning可能跟上下文完全没有关系/影响.

那很自然的一个想法就是,非thinking 模式下的reasoning内容是怎么来说,以及到底有什么作用.

记得v4的technical report里提到的各种thinking模式的区别.
非thinking的response格式是</thinking> summary
high的是<thinking>thinking token</thinking>summary
max的是system prompt<thinking>thinking token</thinking>summary

看比较明显的区别就是非thinking是个half close的标签.

能想到的可能就是thinking模式下的tool call生成可能主要是跟thinking的内容有关.
或者说,thinking决定的tool call的概率空间.

不过既然是关于有么有tool call的情况.
那么实际可能纯粹就是thinking模式下,thinking block内过程中也支持tool call.
而非thinking模式里,reasoning是纯粹的CoT,不会生成任何tool call,完全没有外部影响干扰的.

所以从sse层面来说,非thinking的assistant message不会被tool call stop分割.
而thinking的有可能会.
如果不回传的话,server端的拼接可能会有问题?

不过这也只能是猜测了.


聊聊增值税

昨天开个增值税发票. 看到税率9%,有点好奇征收方式尤其去重逻辑. 就查了下. 大致来说,所谓去重,也就是避免重复征收的点在于进项和出项的抵扣. 也就是从上游买入商品的增值税发票,和开给下游的增值税发票进行税务抵扣. 所以在理想状况下,100%清仓/零库存的条件下,最终需要缴纳的...