MoreRSS

site iconHutusi | 胡涂说修改

06年开始写博客,终身学习者,热爱读书、写作和编码。
请复制 RSS 到你的阅读器,或快速订阅到 :

Inoreader Feedly Follow Feedbin Local Reader

Hutusi | 胡涂说的 RSS 预览

好奇心周刊第21期: 推理模型的构建与未来

2025-10-28 21:56:00

本文为好奇心周刊第21期,全部周刊参见:周刊系列

前不久,我在北京参加了ML-Summit 2025技术大会,其中有个议题是《推理模型的历史、现在与未来》,演讲者是 OpenAI 的研究科学家 Lukasz Kaiser, 他曾在 Google 工作,是 Transformer 发明人之一,也是《Attention is All You Need》论文的作者之一。他在 OpenAI 主要负责推理模型(Reasoning Models)的研究,是 OpenAI o1 的早期研究开创者。Lukasz 在这次演讲中回顾了 Transformer 的发展历史及当前的推理模型,并推测推理模型可能的未来。听这篇演讲之余,我同时也学习了 Sebastian Raschka 的博客文章Understanding Reasoning LLMs(《深入理解推理模型》),整理本期周刊,一起了解下什么是推理模型,以及如何构建推理模型。

一、什么是推理模型

推理模型是大语言模型的一种,相对于普通的对话模型,它能够进行多步逻辑推理、中间步骤思考、以及自我验证。有些数学、逻辑、代码等类型的问题需要用到推理能力。比如,像“若一列火车以每小时60英里行驶3小时,它行驶了多远?”这样的题目就需要一定的简单推理。在 OpenAI o1出来之前的大语言模型也能回答这类问题,但答案会比较简单,OpenAI o1、DeepSeek R1 等推理模型能够用推理过程来回答问题。这种推理中间步骤有些模型会显示在答案中,将详细的推理步骤给出。像 DeepSeek 则会将这些中间思考过程呈现在思考过程区域显示给用户,与答案区别开来。而 ChatGPT 则干脆不显示,只显示模型正在思考,可能需要花费一些时间。

在《周刊第16期: Andrej Karpathy 讲 AI》这一期周刊里介绍了 LLM 的训练过程。预训练阶段训练出来的是基础模型,用户场景不能直接使用,需要进行 SFT 后训练成对话模型(如 ChatGPT 的 instruct 模型)。而推理模型则需要进行更进一步的专业化训练阶段,或者称为领域定制化(specialization). 在这个阶段,将面向特定领域场景对 LLM 进行更精细化的调整。而推理模型则是让 LLM 在中间推理步骤的复杂任务重表现出色,以应对数学、编程等复杂推理任务挑战。如下图示。

steps-to-developing-llms

二、什么时候用推理模型

并不是所有问题都需要用到推理模型。一些简单的或是摘要、翻译、或是基于知识的问答任务并不需要用到推理模型,不是因为推理模型回答不了这类问题,而是推理模型在推理时通常计算成本更高,耗时也会更长,而输出内容也相对较复杂,甚至有时还会因为“过度思考”而导致错误。一般来说,推理模型适合数学、编程等逻辑性较强的问题。

三、如何构建推理模型

通过对 DeepSeek R1 论文的解读,以及对 OpenAI o1 的推测,Sebastian 总结了四种构建推理模型的技术。

1) 推理阶段扩展(Inference-time scaling)

一般是在推理阶段通过提示词工程(Prompt Engineering)来实现,比如“思维链提示词”(CoT),在输入提示词中增加让大模型“逐步思考”(think step by step)等词语,鼓励大模型在生成过程中输出中间推理步骤。这种方法往往会在一些需要演算策略等类型问题上奏效,如下图所示:

example-of-classic-cot-prompting

除此之外,还可以采取其他推理阶段的扩展方法,比如让LLM生成多个答案通过投票来选出最佳结果,或采用“集束搜索”(beam search)等搜索算法来生成最优答案。

2) 纯强化学习(Reinforcement Learning, RL)

早在ChatGPT时期,强化学习便被用来作为 ChatGPT 背后 Instruct 模型的训练方法,而 DeepSeek R1 论文中也显示:推理能力可以从强化学习中自发涌现。与 ChatGPT 所使用的“基于人类反馈的强化学习”(RLHF)不同,RLHF 侧重于基于人类偏好来调整 LLM,而 DeepSeek R1 所用的强化学习则设计了另外两种奖励机制:“准确性奖励”(accuracy reward)和“格式奖励”(format reward)。准确性奖励使用确定性系统评估数学类等问题的回答,比如通过LeetCode编译器验证代码类问题的正确性。格式奖励则以来另一个大模型作为评判者,以确保回答符合预期格式,比如将推理步骤放置于 <think> 标签内。

DeepSeek 基于 DeepSeek V3 671B模型,采用纯强化学习训练得到 DeepSeek-R1-Zero 模型,如下图示:

development-process-of-DeepSeek-R1-Zero-model

3) 监督微调与强化学习结合(SFT + RL)

DeepSeek-R1-Zero 并非是 DeepSeek R1 系列性能最好的模型,DeepSeek 在此模型基础上增加了额外的监督微调(SFT)和强化学习(RL),训练得到 DeepSeek R1 模型,如下图示:

development-process-of-DeepSeek-R1-model

DeepSeek 团队先是用 R1-Zero 生成 SFT “冷启动”(cold start, 相当于初始化)数据,用这些数据基于 DeepSeek V3 做指令微调,然后又进行一轮强化学习,在 R1-Zero 使用的准确性奖励和格式奖励基础上,增加了“一致性奖励”(consistency reward),这种奖励机制是为了防止模型在回答中混用多种语言。然后用这种训练出的中间过程模型生成约60万条“思维链”(CoT) SFT 样本数据,另外再用 DeepSeek V3 基础模型生成20万条基于知识的 SFT 样本数据。

这两种共计80万条 SFT 样本数据被用于对 DeepSeek V3基础模型进行指令微调,之后再进行一轮强化学习。在这轮的强化学习阶段,DeepSeek 使用基于规则的方法为数学、编程等问题提供准确性奖励,而对于其他问题则引入人类偏好奖励。最终得到的 DeepSeek-R1 模型在性能上总体超越了 R1-Zero, 如论文中所附的下表所示:

benchmark-comparison-of-OpenAI-O1-and-DeepSeek-R1-models

4) 监督微调(SFT)与知识蒸馏(Distillation)

DeepSeek R1 系列还发布了一系列通过所谓“蒸馏”(distillation)训练得到的较小模型。蒸馏的方法就是用大型模型(如 DeepSeek V3 671B)生成的SFT样本数据,对较小的模型(如 Llama 8B)进行指令微调。DeepSeek 蒸馏模型所用的 SFT 数据如上述 R1 所用 SFT 数据一致,即 DeepSeek R1 中间版本模型生成的60万思维链数据和 DeepSeek V3 生成的20万知识数据。只不过不是基于 DeepSeek V3 而是在 Llama 3 和 Qwen 2.5 上训练,得到 DeepSeek-R1-Distill-Qwen-32B、DeepSeek-R1-Distill-Llama-70B 等蒸馏模型。如下图示:

development-process-of-DeepSeek-R1-Distill-models

蒸馏模型性能虽然不如 DeepSeek R1,但是相比 R1-Zero,性能却要好很多。而且模型参数相对较小,运行成本也更低。

benchmark-comparison-of-distilled-versus-non-distilled-models

四种训练方案小结

简要回顾下这四种训练方法。第一种推理阶段扩展无需额外训练,在推理模型实际应用中都或多或少有使用,只不过会显著提升推理成本。而后三种训练方法在 DeepSeek R1 系列模型的训练都有体现。纯强化学习能够让大模型出现推理能力的涌现,这中方法被用来构建 R1-Zero, R1-Zero 不仅用来验证强化学习的效果,也被用来生成 R1 的冷启动数据。监督微调+强化学习的结合是训练推理模型的首选方案,这种方法也被用来构建 DeepSeek R1 模型。而蒸馏方案则用来构建较小的推理模型,适合低成本场景。

development-process-of-deepSeeks-three-different-reasoning-models

四、推理模型的未来

在了解了推理模型的构建过程后,可以看到,强化学习是大模型涌现推理能力的关键;而强化学习和 SFT 结合,可以得到性能更强的推理模型。Andrej Karpathy 说“强化学习很糟糕,但其他方法更糟。”在当前阶段,强化学习虽然存在一些效率问题,但却是让大模型学会推理决策的最优方法。

回到 Lukasz Kaiser 的演讲议题《推理模型的历史、现在与未来》,其英文原名是 Reasoning Models: What’s Great and What’s Next? . Lukasz 回顾了 Transformer 的历史,在 Transformer 之前,AI 业界研究的是循环神经网络(RNN),它无法并行处理词语序列,记忆力有限,Lukasz 形容它就像是一只在词语序列上行走的蜗牛。而 Transformer 的诞生解决了这严重的效率问题,它就像一只把过往知识都背在壳里的蜗牛,通过并行处理和注意力机制,极大的增强了模型的性能。

不过面对数学、编程等复杂任务领域,仅依赖记忆是不够的,还需要学习推理策略。这就是推理模型要解决的问题。演讲中举了个例子,问旧金山动物园几点开门?Transformer 模型的做法是在训练时记住了所有动物园的开门时间(信息可能会过时),而推理模型则是学会了查询搜索引擎的策略能力,调用搜索引擎并分析查询结果而给出答案。从 Transformer 到推理模型是从“知识记忆”到“方法学习”的本质转变。

为了与 Transformer(转换器)对应,Lukasz 把推理模型叫作“Reasoner”(推理器),而他预测推理模型的下一个进化方向便是 “Researcher”(研究器)。关于这个 Researcher, Lukasz 是这样描述的:“想象一下,一个模型不再是单一的思考者,而是能够并行启动成千上万个‘思维线程’的庞大研究系统,它能从任意信息中学习,而不仅仅是那些我们能够事先验证的数据。”这并非空想,实际上,Lukasz 的 OpenAI 同事已经在刚发布的 GPT-5-Pro 上验证,他选取了一篇今年的数学论文,使用 GPT-5-Pro 尝试解决其中一个明确且尚未解决的开放问题,17分钟后,GPT-5-Pro 给出了证明,且比论文中的方法更优。

我并非AI或大模型专家,在这里仅将学习 Sebastian Raschka、Lukasz Kaiser 的博客和演讲做个笔记总结。至于推理模型的未来是否如 Lukasz Kaiser 所预言,我不得而知。而至于未来的推理模型应该怎么构建,我就更不得而知。我只是隐隐约约地联想到强化学习之父 Richard Sutton 在《苦涩的教训》一文中的观点:人们总是试图为AI构建逻辑规则,这种方法在短期内常常有效,而看起来相当“聪明”,但当计算能力提高、数据增多、学习算法更强时,依赖数据和学习的通用方法总能超越人类的“聪明”设计。我们应该从痛苦的教训中学到,通用方法的力量是巨大的,那是随着计算量的增加而持续扩展的方法。目前看来能够无限扩展的两种方法是搜索和学习。

参考

  • Understanding Reasoning LLMs, Sebastian Raschka, 2025/02
  • 《万字解密ML 2025大会首日最强思辨现场》 CSDN, 2025/10
  • The Bitter Lesson, Richard Sutton, 2019/03

我思,故我在。

—— 笛卡尔

好奇心周刊第20期: 从四个方面了解Palantir

2025-10-07 01:39:00

本文为周刊第20期,前期周刊参见:周刊系列

从本期开始,周刊有了正式的名称:好奇心周刊。一份好奇心驱动整理的知识总结,给充满好奇心的你。

本期周刊谈一谈近来比较火的Palantir,去年这家公司被列入了标准普尔500指数,而今年又被纳入标准普尔100指数,而市值最高也飙升至3700亿美元,跻身全美市值最高的十大科技公司之列。在此之前,很多人都没有听说过Palantir,并且硅谷的一些公司还因为Palantir与美国政府关系比较密切而比较排斥,Palantir接受了很多政府和军方订单,在硅谷文化里比较异类,而几年前,Palantir将总部也从硅谷搬迁至位于美国中部科罗拉多州的州首府丹佛。我从阮一峰的周刊中了解到Palantir,最近也翻看了关于Palantir的一些文章和Palantir的官方博客,整理一篇周刊,通过其创始人、CEO、技术架构、FDE组织来了解下这家硅谷企业眼中的异类。

本文思维密集度 = 约20小时(前期学习花费时间)+ 10小时(总结及写作时长)÷ 10分钟(阅读本文时长)≈ 45

palantir

硅谷异类创始人

谈到Palantir,就不得不提到它的创始人和CEO. 创始人是知名的硅谷投资人彼得·蒂尔(Peter Thiel),他是一名德国移民,本科在斯坦福大学读哲学,并在斯坦福法学院获法学博士。1998年与几位朋友一起创立PayPal并担任CEO,开启互联网支付业务。而差不多同时期,马斯克也跟他的弟弟创办了X.com, 同样是在线电子支付业务,两家展开了激烈的竞争和用户补贴大战。彼得·蒂尔在他的商业畅销书《从0到1》中曾对这一段经历描述如下:“到了1999年末,我们陷入了全面战争。PayPal 的许多员工周工作时间达到了100小时。毫无疑问,结果不尽如人意,因为我们关注的不是客观的生产效率,而是打败 X.com 公司。我们公司的一个工程师甚至为了达到这个目的还设计了一枚炸弹;在一次会议上他展示了炸弹的图解,头脑还算冷静的人制止了这个计划,说他是极度缺乏睡眠。”不过,很快比他们之间的竞争更可怕的2000年的互联网泡沫来了,为了熬过网络泡沫他们决定抱团取暖,以平分股权的方式合并公司。马斯克担任新公司CEO,不过因为对公司战略意见不同,董事会趁马斯克度蜜月期间罢免了他,改由彼得·蒂尔任CEO. 而后在2002年 PayPal 上市,并于同年以 15亿美元卖给 eBay.

peter-thiel

出售 PayPal 后彼得·蒂尔并没有继续留任,而是离开了 PayPal 并开始成立基金投资硅谷创业公司。最著名的是他作为 Facebook 的首个外部投资人投资了 50万美元并获得了 Facebook 10%的股权,这也成为硅谷史上最著名的投资之一。而他的初创团队离开 PayPal 后,很多人也纷纷创立或投资了创业公司,而且都很成功。如马斯克创立了 SpaceX 、特斯拉等,里德·霍夫曼创立了 Linkedin, 陈士骏创办了 YouTube… 这个团队成员的创业和投资都做得很成功,以至于他们被称为“PayPal 黑帮”(PayPal Mafia),《财富》杂志甚至给他们拍了一张酷似《教父》中黑帮家族的合影。

不过,相比于其他创业者和投资人,彼得·蒂尔被视为硅谷“异类”,他的传记名称就是”The Contrarian”, 意为异见者,特立独行者。早于2020年前,在普遍左倾且支持民主党的硅谷,彼得·蒂尔是独树一帜的右派,2016年当特朗普第一次公开竞选时,他是硅谷第一个公开站出来并重金支持特朗普的科技人士,也成为了特朗普入住白宫后连接美国科技届的关键桥梁。从某种意义上说,彼得·蒂尔还启发产生了“黑暗启蒙运动”,而这种极右翼的思潮也进一步影响了硅谷精英的政治立场。

哲学家CEO

接下来,再谈一谈 Palantir 的CEO 亚力克斯·卡普(Alex Karp),他与彼得·蒂尔为斯坦福法学院同学。卡普在获得法学博士学位后,又去德国法兰克福歌德大学学习哲学,于2002年获得新古典社会理论博士学位。本来也许卡普会成为一位研究哲学的学者,但在下一年他就被彼得·蒂尔叫去当新成立公司的CEO了。

peter-thiel

2001年911事件后,美国政府意识到情报机构如CIA虽然掌握了大量信息,但缺乏有效的分析工具来提前发现并阻止恐怖袭击。而彼得·蒂尔在卖掉PayPal后也在思考下一个创业方向,他觉得可以利用PayPal安全系统的人机复合模式来辨识恐怖分子和金融诈骗。于是一拍两合,彼得·蒂尔成立了一家情报分析的技术公司,CIA进行了早期投资,也成为新公司首个政府大客户。彼得·蒂尔特别喜欢看托尔金的《魔戒》,称自己读过十遍以上,而他创办的公司中,大多以托尔金书中事物命名。Palantir 名称便取自《魔戒》,这是一种古老的水晶球,可以让使用者看到世界另一处正在发生的事情。

彼得·蒂尔找来了自己法学院的同学亚力克斯·卡普来做CEO, 自己则成为该公司的幕后投资人。卡普并非技术出身,也非华尔街商人,哲学家的背景让他的领导风格独树一帜,也深深塑造了Palantir的公司文化,使得Palantir在技术公司中显得尤为神秘。这种神秘不仅体现在Palantir的客户名单主要是CIA、FBI等政府部门,也在于其企业文化。据原Palantir员工回忆,Palantir给人感觉就像是一个声称救世主的邪教组织,它发给新员工的入职读物是《即兴》(Impro)、《末日巨塔:基地组织与“9·11”之路》、《洞察人心 : 用户访谈成功的秘密》和《搞定:无压工作的艺术》,其中《即兴》是一本戏剧即兴表演的理论书。Palantir的员工也具备神经质的特征,据该员工回忆,一次他到一位联合创始人高管的办公室聊天,他的办公室空调开到16度,安装了减少房间二氧化碳浓度的装置,以及装满冰块的杯子。在交流过程中,该高管一直在嚼冰块,声称这样对认知有好处。

更大的差异还在于,相较于硅谷大部分企业所推崇的技术民主,Palantir则毫不掩饰其自由意识形态。卡普本人讨厌硅谷文化,他认为硅谷精英过于理想化,轻视国建安全和与政府的合作。他把Palantir总部从硅谷搬迁至丹佛,以远离硅谷。卡普也在各种场合来宣传他科技民族主义的观点,关于这一点,我直接引用《时代》杂志2025年100位影响世界名人中对于他的入选评语:

随着 Palantir——这家与美国武装部队和情报机构紧密合作的数据分析巨头——在股市上的市值不断攀升,其首席执行官亚历克斯·卡普(Alex Karp)已成为一种新型硅谷亿万富翁的化身:一个毫不掩饰的科技民族主义者,积极宣扬西方的力量。

在二月致投资者的一封信中,他引用了政治学家塞缪尔·亨廷顿(著有《文明的冲突》)的话:“西方的崛起并非源于其思想、价值观或宗教的优越……而是源于其在有组织暴力上的优势。”卡普在引用亨廷顿时写道,并继续道:“西方人常常忘记这一事实;而非西方人从未忘记。”

这种激烈的语言为卡普赢得了大批追随者——他最近还是《纽约时报》畅销书《技术共和国:硬实力、软信念与西方的未来》的合著者。与此同时,Palantir 的业务蒸蒸日上。在同一封致股东信中,卡普宣布,Palantir 在 2024 年第四季度的营收较 2023 年同期增长了 36%。

而在最近八月份写给股东的公开信里,卡普则更加直白的道出了Palantir要维护其价值观和构建方式的原因。他认为美国的传统文化是其公司发展的动力源泉,而他们也应该保护这种文化,而不是让其受损害。卡普在公开信中还引述C.S.路易斯《人的废除》中的“没有胸膛的人”的隐喻,暗示硅谷一些公司缺乏忠诚和奉献精神,缺乏对国家的情感,警告美国投资者远离这种公司。

技术架构:本体论

有这样的哲学家CEO, 那么他们用哲学术语来命名技术架构也不足为奇了。在卡普的公开信中,会经常提及Palantir的技术核心——本体论(Ontology), 并且在去年的一封信中声称:

市场上的所有价值都会流向芯片和我们称为本体论的东西。 (“All the value in the market is going to go to chips and what we call ontology.”)

本体论(Ontology)是哲学的重要概念,这个词源于希腊语的两个词根 on(存在) 和 logos(逻各斯,规律理论),即研究“存在”的理论。对“存在”的研究可以追溯到柏拉图和亚里士多德时期,亚里士多德在《形而上学》中指出:哲学的首要问题便是研究存在之作为存在。比如我们面前一张桌子,我们可以说“这张桌子是存在的”,那么我们再问“桌子这个概念是否存在”,等等,诸如此类关于存在的问题,从亚里士多德到伯克莱,到笛卡尔、黑格尔,再到海德格尔等存在主义哲学家的回答(参见《我所理解的存在主义》),各有不同。本体论的核心是解释事物普遍与特例、个体与共性、抽象与具体的各种关系。

而Palantir将本体论这一概念引入到IT系统中,本质上是数据与业务的建模框架。简单说来,就是把企业在真实世界的业务对象(比如客户、订单、合同、部件等)抽象成数据驱动的数字模型,并建立它们的关系和规则,使得开发者能够在这种抽象的语义层上工作,而不是直接暴露数据库、接口。

Palantir 在《面向本体论的软件开发》(Ontology-Oriented Software Development)一文中介绍了航空公司的案例,飞机起飞前检查需要根据每次飞行的状况进行评估,而这其中包括两百多万个数据点数据。在依据本体论设计的系统中,数据、逻辑与动作元素协同编排。数据元素来源包括机场运营数据库、航班舱单、资源管理系统。逻辑元素利用这些输入来预测影响、模拟客户行为、评估风险。逻辑元素的输出则构造成动作元素:这些动作将决策写回各运营系统,并实时向相关人员发送通知。这样当检查发现问题时,可以快速检查发现问题并通知相应人员更换所需零件,将成本控制最小。

从某种意义上说,Palantir的本体论让我想起了IBM多年前搞的模型驱动开发(MDD),IBM还推出了诸如 Rational ROSE、RSA 等系列建模工具,它希望通过模型和代码之间的对应关系、维护一套系统建模,从而自动生成代码,来实现业务对象与IT实现代码的映射。这种方式在相对成熟稳定的业务领域是适用的,但在复杂业务场景和需求变化频繁的场景则不是那么理想,因为维护的模型也会随着业务的复杂变化而越来越臃肿,最终导致难以维护。令人失望的是,现实往往多是后一种场景居多。

十多年前IBM这种期望通过模型建模自动写出代码的想法还过于超前,而Palantir的本体论则着力于通过数据建模将现实世界表现出来,再借助当前的大模型能力,IBM当年未实现的愿景可能成为现实。

服务客户现场的FDE工程师

如果说Palantir区别于其他硅谷公司最大的特征,可能还不是本体论这些引入到IT中的哲学概念,而是FDE角色设置。FDE 全称 Forward Deploy Engineer, 前线部署工程师,即在客户一线部署Palantir平台的技术工程师。可以说,FDE与以谷歌为代表的硅谷工程师文化是截然不同的,谷歌推崇技术至上,以科学研究为驱动。在谷歌创办的前20年里,一直保持着允许员工20%时间投入自由探索的项目中,这种不以KPI和客户需求为导向的管理制度,一方面来源于其自身优势(挖到了互联网广告的金矿),一方面也由于其创始人的技术背景。谷歌的这种工程师文化也成就了其多个成功产品,如GMail、Google Maps 等,但失败的产品也更多,据Killed by Google统计,谷歌自己亲手“杀死”的产品有近300个。Palantir的产品主要面向政府和大型企业,显然不能像to-C的谷歌那样对待产品说关就关。相对于谷歌等硅谷公司以技术驱动为导向,Palantir更看重其产品技术能否带来商业变现。用CEO卡普的话来说就是:“我们的软件若无人能将其嵌入现实世界,就毫无意义。”因此,FDE就成了其将软件技术嵌入到客户现场的关键因素。

据Palantir 原员工回忆,在Palantir只有五六个主管和CEO,其他人都有FDE工程师头衔。除此之外,没有设置其他官方头衔,原因是不希望官僚化。而工程师有两类,一类是在公司总部参与核心产品开发的工程师,另一类则是FDE,这一类工程师需要到客户现场办公,一般每周三四天,频繁出差。在公司文化中,他们认为“上下文是稀缺的”,工程师们需要“走出大楼”,亲自到客户现场,“先上飞机,再问问题”,因为一个项目在大型客户那边待上个一年两年的都很常见。

FDE在客户现场调研并分析用户需求,设计解决方案,定制并实施Palantir产品,也帮助客户解决实际应用中的问题,甚至为客户写SQL、写脚本,没有工作范围限制。能力上也要求FDE不仅精通技术,也要理解客户业务,并能够与客户以及总部技术团队高效沟通,建立客户和总部的连接桥梁。Palantir在官网上有两篇博客介绍FDE工作的一天,可以管中规豹了解一下这种现场顾问+软件突击队的工作形式。在这两篇博客中,一篇名为《FDE的一天》,一篇名为 《Deployment Strategist的一天》。据官方介绍,Deployment Strategist 虽然与 FDE 名称不同,但界限也比较模糊,只不过在定义上 Deployment Strategist 更偏重项目经理角色,FDE则更偏重技术。广义上它们可以称为 FDE.

FDE可以说是Palantir的护城河。首先,无论是传统软件还是AI系统,通用的技术能力与企业业务场景之间存在着巨大鸿沟,特别是在大型企业中,要想能够真正落地并非易事,这也是很多大型企业不选择通用SaaS而是自己构建IT系统的原因。而FDE则能快速的针对客户场景进行适配,提供务实有效的解决方案。另外,这些系统一旦部署成功,其定制化程度也越深,对于企业来说搬迁的成本也将越大,所以也会绑定在Palantir的这条大船上。但从另一方面说,FDE的优势也是其劣势,定制化及人力成本还有企业对这种定制化绑定的戒心,也都是限制其难以快速扩张的因素。

对Palantir的介绍就简单叙述到这里,后面有机会再作深入洞察。

参考

  • 《从0到1:开启商业与未来的秘密》 彼得·蒂尔 中信出版社 2015/01
  • Reflections on Palantir, Nabeel S. Qureshi, 2024/10
  • Alex Karp Wants Silicon Valley to Fight for America, The Wall Street Journal, 2025/02
  • Ontology-Oriented Software Development, Palantir, 2024/01
  • Letter to Shareholders, Palantir, 2025/08
  • A Day in the Life of a Palantir Forward Deployed Software Engineer, Palantir, 2020/11
  • A Day in the Life of a Palantir Deployment Strategist, Palantir, 2022/04

人们正在发现新的但常常是旧的认同,在新的但常常是旧的旗帜下行进,这导致了同新的但常常是旧的敌人的战争。

– 塞缪尔·亨廷顿《文明的冲突》

周刊第19期: 一起学习 MCP

2025-09-08 20:35:00

本文为周刊第19期,前期周刊参见:周刊系列

最近学习了 MCP (Model Context Protocol, 模型上下文协议)相关的文档、书籍和文章,借此在本期周刊中对其进行梳理与总结。本文将围绕 MCP 的由来与所解决的问题、核心概念与运行机制,以及其生态与发展现状展开,帮助大家快速理解 MCP 的全貌。

万维钢的启发,从本篇周刊开始,我会计算每篇文章的“思维密集度”,也就是花在写文章的时间(包括前期相关资料收集、学习的时间),除以阅读文章所需的时间,所得到的值。本文的思维密集度 = 约30小时(前期学习花费时间)+ 11小时(总结及写作时长)÷ 18分钟(阅读本文时长)≈ 137.

本文思维密集度 = 137

mcp-overview

1. MCP 的起源

OpenAI发布ChatGPT让人们看到了大语言模型(LLM)的强大能力,而ChatGPT也在短时间内成为了超级互联网应用,甚至改变了人们寻找知识的习惯,很多人在互联网上搜索信息不再优先使用搜索引擎,而是从ChatGPT等AI对话类应用获取信息。

但大模型也有一个弱点,那就是它是通过历史数据训练而成,其知识在训练时就已经固定,无法获取训练之后的新信息。正如Anthropic在推出MCP的介绍文章中说的那样:“即便是最先进的模型,也受限于与数据隔绝——被困在信息孤岛和遗留系统之后。”为了解决这一问题,行业采用了两个解决方案。第一个解决方案是模型微调,也就是在基础大模型上加入一些新的数据集进行增量训练,这种场景仍需要进行训练后再部署,一则成本比较高,二则是实时性比较高的场景也不能满足。而另一个解决方案就是补充上下文,在推理时为模型注入外部知识作为输入上下文,让模型基于最新资料进行回答,从而弥补大模型原有知识的不足。

为大模型补充上下文的方案有很多,比如我们在与ChatGPT等AI应用对话时,大模型能结合之前对话的上下文来回答,这是因为AI应用将对话内容进行了存储记录,压缩处理成后续问答的上下文给到大模型。这种方法受限于用户的对话内容,若想要获得更广泛且可更新的上下文,通常会采用RAG等技术路线.

chatgpt-conversation

RAG(Retrival Augmented Generation, 检索增强生成)是一种让大模型结合外部知识库的方法,RAG 所代表的三个缩写词就是它的工作原理:Retrival(检索):首先,当用户发出提问时,AI应用将问题通过向量化检索的方式获得与问题相关的文档知识;Augmented(增强):然后,AI应用把检索到的资料拼接到Prompt中,作为增强上下文;Generation(生成):最后,模型基于问题+外部资料信息生成答案。RAG的优势在于不需要训练模型,能够接入最新的知识,并保持知识库的更新。但其限制在于,RAG依赖于检索到信息的质量,同时还要求检索过程足够高效,但实际应用中,检索速度和检索准确率是比较大的技术挑战。另外,RAG通常使用向量检索(也可与关键词/混合检索组合)并维护可更新的检索索引,而当知识库规模化后,其成本、性能、检索精度都可能成为瓶颈。

Retrieval-Augmented-Generation

2023年6月OpenAI在其模型API中更新发布了函数调用(function calling)能力,它允许大模型将自然语言请求转换为函数调用,让AI应用可以调用外部工具。其工作原理是:第一步,AI应用开发者定义函数列表,包括名称、用途、参数类型。第二步,用户发出问题,AI应用将函数列表作为上下文发送给大模型。第三步,大模型根据用户输入判断需要调用的函数,生成调用参数。第四步,AI应用执行该函数并将结果发送给大模型,作为补充上下文信息供大模型生成最终的答案。这一特性也极大扩展了大模型的能力边界,通过函数调用的方式,大模型能够外挂各种外部数据源,同时还能执行各种类型的操作。

openai-function-calling

在OpenAI推出函数调用机制后,各大模型厂商纷纷跟进,分别都支持了函数调用机制。但随之而来也存在一些问题,因为函数调用是一种机制,而非标准,虽然函数定义都是JSON格式,但个大模型厂商实现方式不同,结构差异很大;另外,需要开发者为每种模型或AI应用编写特定的适配代码。这些都是函数调用机制在实际应用场景中迫切需要解决的问题。

不过,OpenAI在推出函数调用机制后,没有更进一步统一行业标准,而是着急推出GPTs的生态战略。OpenAI在推出函数调用后的同年11月,也就是2023年开发者大会上,推出了GPTs, 这是专为特定任务创建的ChatGPT 的定制版本,用户可以打造自己的GPTs, OpenAI CEO 山姆·奥特曼还特意演示了如何在几分钟内创建一个商业顾问GPTs。到次年2024年1月,OpenAI开放GPTs Store, 上线不久,商店内的GPTs就达到了300万。但巨大的数量并没有产生实质性的效果,有报道称,95%的GPTs应用的用户数不超过100人,绝大多数GPTs的用户只有一、二人。这也暴露了GPTs的问题,GPTs想法的初衷是好的,普通用户通过简单的操作比如调整提示词便可以创建专属的AI应用,但这种低门槛也就意味着大量低质量的应用被快速构建出来,实际上没有什么用处。在实际的工作和生活场景,AI应用需要与各种IT工具交互才能产生真正的价值。

OpenAI所忽视的标准被Anthropic搞出来了。2024年11月,Anthropic推出MCP,即模型上下文协议(Model Context Protocol),这是一个开放标准,用一个统一标准的协议,让大模型应用可以安全、方便地访问外部数据并进行工具连接。可以认为,MCP是在函数调用基础上做的升级和抽象。

mcp-before-after

2. MCP 的基本概念

MCP 在架构上有三个角色:主机(MCP Host)、客户端(MCP Client)、服务器(MCP Server),它们通过 MCP 协议进行协作。MCP 主机一般是AI应用,如ChatGPT等AI对话应用,或智能体Agent,或如Cursor等AI IDE等。MCP 服务器则是负责对接外部数据或工具服务,通过MCP标准数据格式将内容发送给MCP客户端。MCP 客户端则是MCP主机与MCP服务器连接的桥梁,它附属于主机上,由主机任务创建并调度,从而实现AI应用与外部数据或工具服务的交互。

对于MCP的这些概念,网上有张图非常形象的解释了它们的关系。MCP就像是电脑的拓展坞,有了它之后,无论是远程调用的服务(如数据库、Web服务、远程系统)还是本地服务(文件系统、本地工具)都可以被主机(AI应用)所调用。

mcp-overview

相比之下,前面提到的函数调用或其他API调用方式就需要AI应用做定制的适配。

api-overview

MCP官方文档中对MCP架构描述如下。MCP客户端与MCP服务器一对一连接。

mcp-architecture

MCP协议包含两层:数据层和传输层。数据层定义了基于 JSON-RPC 的“客户端-服务器”通信协议,包括生命周期管理、核心原语(tools, resources, prompts)、通知机制。传输层定义了通信机制与通道,包括连接建立、消息封装、认证等。MCP支持两种传输机制。一种是对本地数据服务的STDIO 传输,通过标准输入/输出流在同一台机器上的本地进程间通信,没有网络开销。另一种是对远程数据服务的流式 HTTP 传输。

数据层方面,由于MCP是有状态协议,因此需要生命周期管理,以便于协商客户端与服务器所支持的能力。协议支持实时通知,以实现服务器与客户端之间的动态更新。例如,当服务器的可用工具发生变化(新增、修改、下线)时,服务器可以发送工具更新通知,告知已连接的客户端这些变化。

原语 Primitives

MCP协议最重要的概念是原语,原语定义了客户端和服务器能够互相提供的内容,规定了可以与 AI 应用共享哪些上下文信息,以及可以执行哪些范围内的操作。

MCP服务器有三个核心原语:

  • 工具(Tools):可执行的函数,AI 应用可以调用它们执行操作(例如文件操作、API 调用、数据库查询)。
  • 资源(Resources):为 AI 应用提供上下文信息的数据源(例如文件内容、数据库记录、API 响应)。
  • 提示词(Prompts):可复用的模版,用于组织与大语言模型的交互(例如系统提示词、少样本示例提示词等)。

每种原语都包含相关联的方法用于发现(*/list)和获取(*/get),比如用于工具发现的(tools/list),还有一些方法适用于特定原语,比如工具调用(tools/call)。MCP 客户端则使用 */list 方法来发现所有可用原语。

比如我们实现一个图书管管理的MCP服务器,在工具里可以定义一个借阅图书的工具:

{
  "name": "borrowBook",
  "description": "Borrow a book from the library",
  "inputSchema": {
    "type": "object",
    "properties": {
      "userId": { "type": "string", "description": "Library user ID" },
      "bookId": { "type": "string", "description": "Unique book identifier" },
      "dueDate": { "type": "string", "format": "date", "description": "Return due date (YYYY-MM-DD)" }
    },
    "required": ["userId", "bookId", "dueDate"]
  }
}

而AI应用里就可以使用该工具来借阅图书:

borrowBook(userId: "007", bookId: "101", dueDate: "2024-06-15")

MCP客户端也定义了三个核心原语:

  • 采样(Sampling):让服务器无需集成或对接大模型,而是允许服务器请求客户端(已拥有模型访问能力)代表其处理任务。这样客户端就能完全掌控用户权限与安全措施。
  • 根目录(Roots):根目录定义了文件系统的边界,允许客户端告知服务器其操作范围,以便保持安全边界。
  • 引导(Elicitation):使服务器能在交互过程中向用户请求特定信息,从而构建更动态、更灵活的工作流。

除了这三个核心原语,MCP客户端还可以定义如日志(Logging, 允许服务器向客户端发送日志消息,用于调试与监控)等原语。

MCP运作过程示例

下面以一个MCP “客户端-服务器”的交互示例来解释MCP的运作过程。

1) 初始化 (生命周期管理)

MCP 交互从生命周期管理的能力交互握手开始,首先是客户端发送 initialize 请求来建立连接并协商支持的能力。

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "initialize",
  "params": {
    "protocolVersion": "2025-09-08",
    "capabilities": {
      "elicitation": {}
    },
    "clientInfo": {
      "name": "client-example",
      "version": "1.0.0"
    }
  }
}

而服务器也会回应:

{
  "jsonrpc": "2.0",
  "id": 1,
  "result": {
    "protocolVersion": "2025-09-10",
    "capabilities": {
      "tools": {
        "listChanged": true
      },
      "resources": {}
    },
    "serverInfo": {
      "name": "server-example",
      "version": "1.0.0"
    }
  }
}

capabilities 里包含着双方声明的原语,即暴露的能力。在这个例子中,客户端声明了 elicitation 原语,表明服务器可以处理用户交互请求,而服务器声明支持 tools 和 resources 原语,而 tools/list_changed 则说明当工具列表更改时,服务器会发送消息通知。

初始化成功后,客户端会发送通知表明已准备就绪:

{
  "jsonrpc": "2.0",
  "method": "notifications/initialized"
}

在初始化阶段,AI应用会建立通过客户端管理建立与各服务器的连接并存储它们的能力信息以决定后续调用哪些服务器的功能。

2) 工具发现(原语)

连接一旦建立,客户端就可以发送 tools/list 请求发现服务器提供的工具。

{
  "jsonrpc": "2.0",
  "id": 2,
  "method": "tools/list"
}

服务器回复:

{
  "jsonrpc": "2.0",
  "id": 2,
  "result": {
    "tools": [
      {
        "name": "checkBookAvailability",
        "title": "Check Book Availability",
        "description": "Check if a specific book is available in the library",
        "inputSchema": {
          "type": "object",
          "properties": {
            "bookId": {
              "type": "string",
              "description": "Unique identifier of the book"
            }
          },
          "required": ["bookId"]
        }
      },
      {
        "name": "borrowBook",
        "title": "Borrow Book",
        "description": "Borrow a book from the library system",
        "inputSchema": {
          "type": "object",
          "properties": {
            "userId": {
              "type": "string",
              "description": "Library user ID"
            },
            "bookId": {
              "type": "string",
              "description": "Unique identifier of the book"
            },
            "dueDate": {
              "type": "string",
              "format": "date",
              "description": "Return due date (YYYY-MM-DD)"
            }
          },
          "required": ["userId", "bookId", "dueDate"]
        }
      }
    ]
  }
}

服务器的响应包含一个tools数组,里面是各工具的元数据信息,包括每个工具在该服务器内的唯一标识符 name, 名称 title, 描述 description, 以及输入参数的 JSON Schema 定义 inputSchema.

AI 应用会将所有 MCP 服务器提供的工具合并成统一的工具注册表,供大模型获取并准备后续调用。

3) 工具调用(原语)

获得工具信息后,客户端可以通过 tools/call 方法调用工具。

{
  "jsonrpc": "2.0",
  "id": 3,
  "method": "tools/call",
  "params": {
    "name": "borrowBook",
    "arguments": {
      "userId": "U12345",
      "bookId": "B56789",
      "dueDate": "2025-09-30"
    }
  }
}

相应地,服务器在执行工具成功后会反馈工具调用结果。

{
  "jsonrpc": "2.0",
  "id": 3,
  "result": {
    "content": [
      {
        "type": "text",
        "text": "Book 'Introduction to AI' has been successfully borrowed by user U12345. Due date: 2025-09-30."
      }
    ]
  }
}

当大模型在对话中决定要调用工具,AI应用会拦截工具调用,将请求路由到对应的MCP 服务器,执行工具调用,并将结果返回给大模型,这样大模型就能够访问到外部的实时数据。

4) 实时更新(通知)

MCP 支持实时更新,允许服务器主动告知客户端变化,而不是等待客户端请求。

比如当服务器工具发生变化,服务器可以发送通知给客户端:

{
  "jsonrpc": "2.0",
  "method": "notifications/tools/list_changed"
}

通知消息无需响应。不过客户端在收到工具变化通知后,一般会立刻向服务器发送请求获取工具列表。

3. MCP 的生态

MCP自发布以来,便受到了众多开发者的关注,也有很多开发者参与社区。各AI应用厂商和各大模型厂商也纷纷跟进,逐渐成为行业的事实标准,也因此形成了丰富的生态,从配套工具到解决方案,从市场到周边。这里也列举一些。

配套工具

MCP官方提供了TypeScript、Python等多种语言的SDK,另外还提供了调试工具和命令行工具,通过这些配套工具可以很方便的开发MCP服务器和客户端。我根据《这就是MCP》的指导也很快开发了flomo的MCP服务器,代码在 hutusi/flomo-mcp, 这里就不展开描述。

MCP应用市场

MCP官方没有推出MCP应用市场(2025/09/09 update: MCP官方于本文发表8小时后宣布官方MCP Registry, 也就是MCP应用市场),只是在GitHub上用一个README收集了MCP服务器清单,不过有很多第三方的MCP市场,如 smithery.ai, MCP.so, MCPMarket.com, modelscope.cn/mcp 等。其中 mcp.so 可能是目前MCP服务器收录最多的应用市场,它来自于一位网名为艾逗笔的技术极客之手。艾逗笔从腾讯离职后做独立开发,去年11月底Anthropic发布MCP,他认真阅读官方文档后突发奇想,觉得可以建一个MCP的导航站,于是立马上手,花了两个小时就把 mcp.so 开发上线了。不得不说,在AI时代有想法又能够动手的技术极客,他们的生产效率是惊人的。

MCP应用市场解决了MCP服务器收集、分类、发现的问题,在MCP生态中就像是手机应用市场。

企业级MCP解决方案

不过,我觉得MCP官方没有推出应用市场的原因,除了试图保持中立外,还可能是互联网开放的MCP应用市场内容运营和治理很难做,官方市场很难保证用户上传的MCP服务器不存在安全风险和质量隐患。(2025/09/09 update: 被打脸了,详见上段更新备注,从博客得知官方在今年三月就有这个想法。)而MCP更具有商业价值的场景是在企业内部,MCP可以帮助企业内部的AI应用在实际作业中产生效果。因此,有不少企业在探索企业级的MCP解决方案,其中比较有代表性的是阿里云的Higress+Nacos方案。

Higress是阿里云开源的云原生API网关,基于 Envoy+Istio 的架构演进而来,最初用于阿里内部的流量网关场景。在MCP场景下,Higress被用作为统一网关,让外部的AI应用调用时只接入一个网关,内部的MCP服务器的地址和安全策略都隐藏在背后。而 Nacos 是阿里云开源的服务发现与配置管理平台,在MCP场景下,就可以作为MCP服务器的注册中心。各业务系统将MCP服务器注册到Nacos上,由Higress自动发现并路由;当业务系统的MCP服务器地址变更或变更时,Nacos自动更新,而外部AI应用调用则无感知。类似下面这样的架构:

外部 AI 应用 
      │
      ▼
  [Higress 网关]  ← 鉴权、限流、审计
      │
      ▼
  [服务发现:Nacos]
      │
      ▼
  [内部 MCP Server 群]
   ├── 文档库 Server
   ├── ERP Server
   ├── CRM Server
   └── Git Server

MCP 和 A2A

除了MCP外,AI应用互操作协议还有A2A (Agent-to-Agent Protocol)、ACP (Agent Communication Protocol)、ANP (Agent Network Protocol)等,这里主要谈一下A2A协议。

A2A协议由Google在2025年4月发布,该协议主要的目的是提供一种标准化的协议支持Agent之间协作与通信,也就是说,A2A适用于多Agent场景。在A2A协议中,规定Agent需要公开一个Agent Card,以JSON格式描述,包含它的能力、模态和限制条件等。

不过,A2A并不是取代MCP,它们之间也不是互斥的,二者可以形成互补,两者的关系如下图所示。

mcp-vs-a2a

最后总结一下,MCP 如其名 (Model Context Protocol), 是为增强模型上下文而生的。通过 MCP 协议定义了 AI 应用与外部工具间的交互通用标准,使得大模型能够通过 MCP 调用工具来获取外部实时信息并执行任务,极大地扩展了大模型应用的能力。MCP 本身及生态都在不断地发展和完善,其在企业的 AI 解决方案中扮演的角色也将越来越重要。

4. 参考

Introducing the Model Context Protocol, Anthropic, 2024/11

MCP Architecture overview, modelcontextprotocol.io

OpenAI Function calling guides, OpenAI

Announcing the Agent2Agent Protocol (A2A), Google, 2025/04

What is Model Context Protocol (MCP)? How it simplifies AI integrations compared to APIs, Norah Sakal, 2025/03

《这就是MCP》 艾逗笔(著) 人民邮电出版社 2025/08

《基于 MCP 实现 AI 应用架构新范式的一线实践》 计缘(阿里云) 2025/04


昔日我曾如此苍老,如今才是风华正茂。

I was so much older then,I’m younger than that now.

– Bob Dylan, My Back Pages

周刊第18期: 什么是理工科思维

2025-08-24 11:56:00

本文为周刊第18期,前期的周刊参见:周刊系列

最近看了万维钢的《万万没想到:用理工科思维理解世界》,觉得写得很好。之前看万维钢在得到上写专栏,以为是鸡汤文,但没想到他的文字的的确确有料,读完之后有种醍醐灌顶的感觉。万维钢是物理学博士,搞科研之余还写博客和得到专栏,介绍一些方法论,代表作有《万万没想到》《智识分子》等。

万维钢

《万万没想到》的副标题是“用理工科思维理解世界”,理工科思维是一个比较有中国特色的概念,与理工科思维相对的是文科思维,作者认为,文科思维付诸于感性,理工科思维付诸于理性,理工科思维就是用科学的方法来探索世界,而科学方法则是取得可靠答案的唯一符合逻辑的方法。

该书是作者一系列文章的合集,整理成了四个部分,分别是:一、反常识思维:这部分讲的反常识思维即理性思维,即理工科思维;二、成功学的解药,讲如何运用理工科思维去学习;三、在现代生存,如何将理工科思维用在生活中;四、霍金的答案,介绍科学研究的逻辑。下面我简单整理下该书的笔记,笔记大部分内容直接摘抄原书,我就不再标识出来,同时推荐读原书。

一、什么是理工科思维?

人们常常把自己的价值判断称为“常识”,因为这些判断本来就是从人的原始思维而来的,然而现代社会产生了另一种思维,却是“反常识”的。

1、取舍思维

对于大多数人来说,一直到进入现代社会之前,我们都生活在一个“具体的”世界中。我们的活动范围仅限于自己所属的小部落或者小村庄,很多人一生去过的地方也不会超过一天的路程。这种“具体思维”做各种选择的首要标准,是道德。费孝通在《乡土中国》一书中提出,世代定居的传统中国社区的本质是熟人社会。在熟人社会中,人们做事不是靠商业和法治,而是靠道德和礼治。费孝通说乡土中国的最高理想是“无讼”,就好像足球比赛中每个人都能自觉遵守双方的规则,而犯规的代价不单是被罚,更是整个球队和教练的耻辱。生活在这样的社会里,我们的首要技能不是数学计算能力,而是分辨善恶美丑。也许这就是文人思维的起源:针对每个特定动作的美学评价。有时候他们管这种评价叫“价值观”,但所谓价值观无非就是给人和事贴或好或坏的标签。文人把弘扬真善美和鞭挞假恶丑当成自己义不容辞的责任。

现代社会与古代社会最大的不同,是人们的生活变得越来越复杂。除了工作和休息,我们还要娱乐、参加社交活动、学习和发展以及随时对遥远的公众事务发表意见。我们的每一个决定都可能以一种不直截了当的方式影响他人,然后再影响自己。面对这种复杂的局面,最基本的一个结果是好东西虽然多,你却不能都要。这就需要取舍思维,英文有一个形神兼备的词可作为解释:“tradeoff”。两个好东西我不可能都要,那么我愿意牺牲(off)这个,来换取(trade)那个。“tradeoff”是“理工科思维”的起源。

诺贝尔奖得主丹尼尔·卡尼曼的《思考,快与慢》一书,把人脑的两套思维系统称为“系统1”和“系统2”。前者自动起作用,能迅速对事物给出一个很难被改变的第一印象;而后者费力而缓慢,需要我们集中注意力进行复杂的计算,甚至我们在系统2工作的时候连瞳孔都放大了。系统2根本不是计算机的对手,没人能在百万分之一秒内计算111.61872的平方根。然而系统1却比计算机强大得多,直到2012年谷歌用了1.6万块处理器,才让计算机学会识别猫的脸——而且它肯定还不会像刚出生的婴儿那样分辨表情。系统1这么快,显然是它在漫长的进化史中非常有用的缘故。我们可以想见一个不会算数,甚至不会清晰地逻辑推理的人只要知道谁对他好、谁对他坏,靠本能也能在草原上生活得不错。只有到了现代社会,他才会有大麻烦。文人思维显然是系统1的集大成者,而理工科思维则是系统2的产物。 “tradeoff”要求量化输入和预计输出,这也是理工科思维的最根本方法。

2、被别人说服

与霍金合著《时间简史》和《大设计》的第二作者蒙洛迪诺是个被忽视的重要科普作家,他在自己的书《潜意识:控制你行为的秘密》中说,人做判断的时候有两种机制:一种是“科学家机制”,先有证据再下结论;一种是“律师机制”,先有结论再去找证据。世界上科学家很少,你猜绝大多数人使用什么机制思考?每个人都爱看能印证自己已有观念的东西。我们不但不爱看,而且还会直接忽略那些不符合我们已有观念的证据。

这个毛病叫作“确认偏误”(confirmation bias)。如果你已经开始相信一个东西了,那么你就会主动寻找能够增强这种相信的信息,乃至不顾事实。一旦你有了某种偏见,你就无法改变主意了。

诺贝尔奖得主罗伯特·奥曼在1976年发表了一篇论文Agreeing to Disagree,这篇论文堪称传世之作。它指出,如果两个理性而真诚的真理追求者争论问题,争论的结果必然是两人达成一致。换句话说如果争论不欢而散,那么其中必然有一方是虚伪的。原话是:If two people have the same priors,and their posteriors for an event A are common knowledge,then these posteriors are equal.

下面为简单起见,假设世界杯决赛是阿根廷队对意大利队。在决赛前夜,如果我向你宣布,我认为阿根廷队将获得世界杯冠军。而你向我宣布,你认为意大利队将获得世界杯冠军。这样一来我们两人的观点就被亮出来了,不但你知道我的观点,而且我知道你知道我的观点,而且你知道我知道你知道我的观点……以此类推下去,这就是我们的观点是“common knowledge”。

这个定理中所假设的理性的人,被学者称为“真理追求者”(truthseekers)。如果我们是诚实的真理追求者,我们终将能够达成一致。

所有科学家有一个共同的优点:他允许你改变他的想法。

3、概率论

我认为人人都应该学点概率知识。在日常生活中,概率论比万有引力公式和基因的复制机制都重要,它是现代社会的公民必备的知识。现在的世界比过去复杂得多,其中有大量的不确定性。是否理解概率,直接决定了一个人的“开化”程度。当不懂概率的人大惊小怪的时候,懂概率的人可以淡定自若。下面是五个最简单的概率论智慧:

1)随机。概率论最基础的思想是,有些事情是无缘无故地发生的。理解随机性,我们就知道有些事情发生就发生了,没有太大可供解读的意义。我们不能从这件事中获得什么教训,不值得较真,甚至根本就不值得采取行动。比如民航客机非常安全,但再完美的交通工具也不可能百分之百的安全。你会因为极小的事故概率而不坐飞机吗?我们只要确定事故概率比其他旅行方式更低就可以了——甚至连这都不需要,我们只要确定这个概率小到我们能够容忍就可以了。为偶然事件大惊小怪,甚至一朝被蛇咬十年怕井绳,是幼稚的表现。

管理者有个常见的思维模式,一旦出了事就必须全体反思,制定相关政策以避免类似事故再次发生,但极小概率事故其实是不值得过度反应的。哪怕是因为员工犯了错而引起的,也没必要如此。37signals公司的两位创始人弗莱德(Jason Fried)和汉森(David Heinemeier Hansson)在2010年出了一本书《重来》(Rework),讲公司创业和管理之道。在我看来此书一个亮点就是它强调不要一看有人犯了错就为此大张旗鼓地制定政策来纠正错误。那样只会把错误变成伤疤,而且会让公司越来越官僚主义。正确的办法是告诉犯错的员工这是一个错误,然后就完了。

2)误差。历史上最早的科学家曾经不承认实验可以有误差,认为所有的测量都必须是精确的,把任何误差都归结于错误。后来人们才慢慢意识到偶然因素永远存在,即使实验条件再精确也无法完全避免随机干扰的影响,所以做科学实验往往要测量多次,用取平均值之类的统计手段去得出结果。

3)赌徒谬误。假如你一个人在赌场赌钱,比如玩老虎机。你一上来运气就不太好,一连输了很多把。这时候你是否会有一种强烈的感觉,你很快就该赢了呢?这是一种错觉。赌博是完全独立的随机事件,这意味着下一把的结果跟以前所有的结果没有任何联系,已经发生了的事情不会影响未来。

4)在没有规律的地方发现规律。理解了随机性和独立随机事件,我们可以得到一个结论:独立随机事件的发生是没有规律和不可预测的。这是一个非常重要的智慧。如果数据足够多,我们可以找到任何我们想要的规律。但这些“预言”可完美解释已经发生的事情,却不能预测尚未发生的事情。未来是不可被精确预测的。这个世界并不像钟表那样运行。

5)小数定律。现在,我们知道,在数据足够多的情况下,人们可以找到任何自己想要的规律,只要你不在乎这些规律的严格性和自洽性。那么,在数据足够少的情况下又会如何呢?如果数据足够少,有些“规律”会自己跳出来,你甚至不相信都不行。比如世界杯上的各种神秘规律。原因是如果数据少,随机现象可以看上去“很不随机”,甚至非常整齐,感觉就好像真有规律一样。如果统计数字很少,就很容易出现特别不均匀的情况。

4、阴谋论

相信阴谋论很可能是人的一个思维本能。人们总是希望能给复杂而混乱的世界找个简单的解释,这个解释就是有某种强大的力量,怀着一个不可告人的目的,在控制一切。

近代著名儿童心理学家让·皮亚杰(Jean Piaget)说,在儿童成长的某个阶段,他的世界观会有两个基本点。一个是“animism”,万物有灵。他认为每个物体都是活的,比如汽车之所以不走是因为它累了需要休息。更重要的是,任何东西都有它自己的意愿,比如“太阳在跟着我们走”。另一个是“artificialism”,人为主义。他认为一切东西都是人出于某种目的造出来的。比如为什么会有太阳?太阳是人用火柴造出来照亮用的。 由此,在儿童的世界中根本就不存在随机现象,一切都是有目的的。生物学家路易斯·沃伯特(Lewis Wolpert)有本书叫《反常的自然科学》(The Unnatural Nature of Science)。他在此书中指出,想要摆脱童稚状态搞科学,就必须首先抛弃目的论。 科学的标志,是对世界的运行给出一套纯机械的机制。风怎么吹、石头怎么落下来,并不是它有什么目的、背后有什么精神力量,而是物理定律决定了它就会这么做。有些事情发生就发生了,纯属自然,并不是谁“想让”它发生它才发生。比如艾滋病毒在黑人中传播最多,你可以去分析它的传播机制,但是这种传播并不一定有什么“目的”。

二、如何学习?

1、科学的励志

在个人传记里,成功人士往往拥有传奇经历和突出个性;在八卦逸事里,成功很大程度上是因为他会耍嘴皮子;在心灵鸡汤里,成功是因为他有正确的价值观,是个好人。可是你怎么知道这些道理是不是可重复和可检验的呢?也许这帮人只不过是运气好而已!我们需要的是科学的励志,只有你的理论具有普遍意义,你的成功才可以被复制。

真正能左右学习成绩的品质只有一个:自控。

自控需要意志力。一般人可能认为意志力是一种美德,应该通过教育的方式提升思想的境界来培养。然而实验表明,意志力其实是一种生理机能。它就好像人的肌肉一样每次使用都需要消耗能量,而且用多了会疲惫。

如何提升意志力?灌鸡汤、打鸡血是没有用的。真正有效的办法是“常立志”。意志力是一种通用资源,这意味着你可以通过做一些日常小事来提高意志力,然后把它用在其他事情上。

2、刻意练习

提出“刻意练习”(deliberate practice)这个概念的是佛罗里达大学心理学家安德斯·埃里克森(K.Anders Ericsson)。我总结成以下四点:1)只在“学习区”练习。2)把要训练的内容分成有针对性的小块,对每一个小块进行重复练习。3)在整个练习过程中,随时能获得有效的反馈。4)练习时注意力必须高度集中。

1)在“学习区”练习:

心理学家把人的知识和技能分为层层嵌套的三个圆形区域:最内一层是“舒适区”,是我们已经熟练掌握的各种技能;最外一层是“恐慌区”,是我们暂时无法学会的技能;二者中间则是“学习区”。在舒适区做事,叫生活;在学习区做事,才叫练习。

2)重复练习,掌握套路:

心理学研究认为人的工作能力主要依靠两种记忆力:“短期工作记忆”(short term working memory,有时候也简单地称为“短期记忆”)和“长期工作记忆”(long term working memory)。短期工作记忆有点类似于电脑的内存,是指人脑在同一时刻能够处理的事情的个数——一般来说,我们只能同时应付四件事情,多了就不行了。长期工作记忆存储了我们的知识和技能。它有点类似于电脑的硬盘,但比硬盘高级得多。关键在于,长期工作记忆并不是杂乱无章、随便存储的,它以神经网络的形式运作,必须通过训练才能存储,而且具有高度的结构性。心理学家把这种结构称为“块”(chunks)。比如,一场棋局在普通人眼里就是一些看似杂乱摆放的棋子,而在职业棋手眼里这些棋子却是几个一组分成了很多块的,通过识别这些块,职业棋手可以很容易地记住棋局,甚至同时跟多人对弈盲棋。更简单地说,如果普通人看到的是一个个字母,职业棋手看到的就是单词和段落!

人的技能,取决于这两种工作记忆。专家做的事情,就是使用有限的短期工作记忆,去调动自己几乎无限的长期工作记忆。而刻意练习,就是在大脑中建立长期工作记忆的过程。

我小时候曾经非常看不起死记硬背,有一段时间想要学围棋,但总觉得背定式是个笨功夫,高手难道不应该根据场上的局面随机应变吗?但事实是,随机应变才是笨办法。定式和成语典故、数学定理一样,是人脑思维中的快捷方式。

人脑到底是怎么掌握一个技能的,我听说过一个比较主流的理论说这是神经元的作用。完成一个动作需要激发很多个神经元,如果这个动作被反复做,那么这些神经元就会被反复地一起激发。而神经元有个特点,就是如果经常被一起激发,它们最终就会连在一起!技能是人脑中的一种硬件结构,是“长”在人脑中的。

用什么方法才能迅速地把技能套路“长”在身上呢?关键在于两点:1)必须进行大量的重复训练。2)训练必须有高度的针对性。

比如写作。中国传统的培养方法,一个作家的训练就是读小说,评论小说,然后一篇接一篇地写完整的小说。除此之外大约就是要到各地体验生活,因为“功夫在诗外”。问题在于,中国大学的中文系基本上没有成功地培养出一个像样的作家。面对这种局面,一般人马上会得出结论:写作靠的是天赋,作家不是培养出来的。但是美国大学是可以培养作家的,而且还培养了中国作家,比如哈金毕业于布兰迪斯大学文学写作专业,严歌苓毕业于哥伦比亚艺术学院文学写作系。

我反对“功夫在诗外”。如果你要从事创造性的活动,你得学会借鉴各个不同领域的东西,的确是“功夫在诗外”。但是人们经常滥用这句话,认为连学习都要讲“功夫在诗外”,这就完全错了。对练习来说,你想要学什么就应该练什么,功夫就在功夫上。我们追求的就是把这个特殊技能的特殊神经网络“长”在大脑之中,别的都不必管。

3)随时获得有效反馈:

在有即时反馈的情况下,一个人的进步速度非常之快,而且是实实在在的。

再牛的科学家,也需要同行评议,这就正如世界排名第一的网球运动员也需要教练一样。反馈者不见得比你的水平高,关键是他们不是你,他们可以从你看不到的角度看你。

韩愈说“师者,所以传道授业解惑也”。古代的私塾教育往往让学员先背书,搞得好多小朋友会背但不会解释,老师能不能解惑很关键。而现在的课本和各种辅导书极其全面,人们完全可以自学,聪明人更有很强的自学能力。那么,现代的老师的最大作用是什么呢?正是提供即时的反馈。世界上最好的高尔夫球球手、最好的国际象棋棋手,他们的比赛水平肯定超过自己的教练,可为什么他们还要请教练?一个重要原因就是教练能在训练中以旁观者的身份提供即时的反馈。

美国的基础教育受到过很多批评,但美国的研究生制度却毫无疑问是世界最好的。这个制度正是学徒制。导师的英文是“advisor”,这个词放在学校以外是顾问的意思,比如“总统军事顾问”。导师允许学生有相当的独立性,你原则上可以选择自己喜爱的项目,而导师给你提供建议和随时的反馈。

4)刻意练习时高度集中:

刻意练习不好玩。它要求练习者调动大量的身体和精神资源,全力投入。如果你觉得你在享受练习的过程,那你就不是刻意练习。

在刻意练习中没有“寓教于乐”这个概念。我们生活在一个试图把一切东西都娱乐化的时代,我们希望看个电影就能学到知识。就算是看纪录片也是为了娱乐。

“寓教于乐”是个现代社会的发明,从来没有哪位古代哲人认为应该寓教于乐。波兹曼振聋发聩地写道:教育哲学家认为获得知识是一件困难的事情,认为其中必然有各种约束的介入。他们认为学习是要付出代价的,耐力和汗水不可少,个人的兴趣要让位于集体的利益。要想获得出色的思辨能力对年轻人来说绝非易事,它是异常艰苦卓绝的斗争。西塞罗说过,教育的目的本来应该是摆脱现实的奴役,而现在的年轻人正竭力做着相反的努力——为了适应现实而改变自己。

3、兴趣与基因

学习一个技能的初期,智商可能是决定性因素。但是随着学习的深入,兴趣的作用可能就越来越大了,因为兴趣可以在相当大的程度上决定谁能坚持下来。

但兴趣等特征的形成是先天因素更大一些,还是后天培养因素更大一些?这种研究进行了几十年,科学界的共识是,先天因素远远大于后天因素。首先,任何一种能够测量的心理特征,包括智商、兴趣爱好、性格、体育、幽默感,甚至爱不爱打手机,所有这些东西都是天生的。其次,后天环境对智力和性格的影响非常有限。先天因素是主要的,后天因素是次要的。

寻找适合自己兴趣的环境,把自己的基因发扬光大——这难道不就是进化论告诉我们的人生意义吗?

4、思维密集度

看博客不如看报纸,看报纸不如看杂志,看杂志不如看书——凡是有这种想法的人,都是极度自私的人。因为他们贪图时间。

接收信息的效率是可以量化的。本书提出一个概念,叫作“思维密集度”。比如一个人以正常的思维速度边想边说一个小时,那么听他说这一小时的话所能得到的信息的思维密集度就是1。然而写文章就完全不同,它可能需要经过修改和润色,一个小时写出来的文章,可能别人5分钟就看完了,那么这篇文章的思维密集度就是12。

公式:思维密集度=准备这篇文章需要的总时间/阅读这篇文章需要的时间

写一本好书可能需要作者从搜集材料开始花几年甚至更多的时间,如果读者两个晚上看完,那么这本书的思维密集度可能会达到几百。

5、如何读书

有很多人总结过读书的技术。总结得最好的大概是名著《如何阅读一本书》(How to Read a Book)。现在在网上可以找到很多关于这本书中阅读技巧的笔记总结。在我看来,此书最牛的地方并不在于任何特殊的技术,而是一种精神。这种精神认为阅读有三个档次:为了娱乐而读,为了信息而读和为了理解而读。首先,只有为了理解某个我们原来不懂的东西而读书,才值得认真对待。其次,读书应该以我为主,而不是以书为主。

在《如何阅读一本书》的基础上,我提倡一种高强度的读书方法,称之为“强力研读”。与《如何阅读一本书》中按部就班的、烦琐的固定套路不同,我们的“强力研读”更像是一种态度和心法。其实我很想给此文起一个英文标题,叫作“Deep Reading”(深度阅读),以与最近心理学家们谈论的训练天才的新成果——“刻意练习”(deliberate practice,deep practice)相呼应。

以下是强力研读的具体做法,它的核心技术是做读书笔记:新书要读两遍。一本书应该读两遍,而且只读两遍。第一遍正常通读,第二遍同时写下读书笔记。

读书笔记的一个重大作用是为自己日后以最快速度重温这本书提供方便,直接看笔记就可以了。还有别的好书等着我们去读呢,所以笔记最好要写到可以取代原书的程度。

强力研读要求读书笔记必须包括四个方面的内容: ①清晰地表现每一章的逻辑脉络; ②带走书中所有的亮点; ③有大量的自己的看法和心得; ④发现这本书和以前读过的其他书或文章的联系。

如果你读得足够多,你会获得一种更难得的经历:感受人类知识的进步。你会发现一个问题在这本书里是这个说法,而过了几年之后有人另写一本书,引用更有力的证据,把整个结论给改变了。有时候你会赞同这个新结论,有时候你会反对。有时候你必须从几本书的几个不同结论中判断哪个才是最靠谱的。有时候你会觉得他们说的其实都不对,只有你知道正确答案。到了这个层次,你已经跟书的作者完全平等了。你甚至可以俯视他们,评判他们之间的高下。这时候你又应该怎么办?写篇文章发表出来!

世界上有很多比读书更重要的事。在做事和读书之间,做事优先。但读书是除实践外迅速积累见识的最好办法。

6、关于记忆

关于超强记忆力,我们需要知道三点。 第一,正常人要是愿意练,也可以练成这么神奇的记忆力。 第二,再强的记忆力,也不能——用一句王朔的话说——“把胳肢窝变成海参”。 第三,特别强的记忆力,反而有害。

真正实用的人才读书不能钻牛角尖,得像诸葛亮那样“观其大略”。爱因斯坦说:“我想知道上帝是如何设计这个世界的。对这个或那个现象、这个或那个元素的谱我不感兴趣。我想知道的是他的思想,其他的都只是细节问题。”

“贵人多忘事”,是因为“贵人”更关注有更高优先级的事。

美国加州大学洛杉矶分校的一对教授夫妻,罗伯特·比约克(Robert Bjork)和伊丽莎白·比约克(Elizabeth Bjork),提出了一个非常漂亮的记忆力理论模型。人的记忆,其实有两种强度:存储强度(storage strength)和提取强度(retrieval strength)。存储强度,决定了这个东西是否进入了你的大脑;提取强度,决定了你能不能把它回想起来。

存储强度,不会随时间减弱!那么为什么我们会忘记一些东西呢?那是提取强度出了问题。如果没有复习,提取强度就随着时间延长慢慢减弱。

三、理性的生活

1、效率和公平

世界上绝大多数人和事都是平庸的,而且最好的东西还都挤在一起。想要提高效率,就得不公平。

人与人之间财富的差异要比身高的差异大得多。身高是正态分布的,财富却是幂律分布(power law distribution)的。学术上的叫法是幂律分布,民间的叫法则是“80/20法则”。

所以我很反感的一句话是“××无小事”。事情当然有大小之分,无小事就是无大事。

质量控制无小事吗?“80/20法则”最早的应用方向之一,就是质量控制。20世纪50年代,美国一位电气工程师和一位统计学家发现,产品质量问题的来源,总是集中在少数几个地方。如果对所有问题都平等对待,反而什么都解决不好,产品质量远远不行。

2、极简主义

有一个给要做的事情分类的著名方法,按照重要程度和紧急程度把事情分成四类:重要而紧急,重要而不紧急,不重要而紧急,不重要也不紧急。一般人的想法都是要先做重要而紧急的事,最后做不重要也不紧急的事。

“80/20法则”告诉我们应该怎么做事呢?应该追求只做“重要而不紧急”的事!

这就是现在很多人谈论的所谓“极简主义”的生活哲学。

现代社会中有很多“完美主义者”,他们多是不懂轻重缓急的“焦虑症患者”。他们关注各种细节,经常能指出别人的小错误。比如给他们看个PPT,他们很容易注意到上面有哪些标点错误,却不知道你说的核心观点是什么。这其实是种特别浪费时间的性格。

“极简主义”的核心思想就是把最关键的事情做好,省出来时间去玩。这也符合塔勒布在《反脆弱:从不确定性中获益》一书说的“杠铃原则”:做事要注重两端,不管中间。——我要么做最难的事,要么玩或者什么都不做。

四、关于科学研究

如果你想成为一个科学家,你就应该好好学习基础知识,掌握基本技能,比如算算微积分、写写计算机程序,然后尽快找到一个好的导师,在他的指导下,从学徒开始做,做真正的科学研究。

1、物理学的逻辑

判断一个物理理论的好坏不在于这个理论是否符合人的直觉,或者是否够漂亮,而在于它能不能做出预言。

科学家强调事实。科学放弃了从一套最基本的哲学出发推导所有结论的尝试,改为在每一个领域内就事论事地搜集事实。有人指责科学家说你们相信现代科学理论难道不也是一种迷信吗?但科学家其实不迷信任何理论——很多情况下他们完全用不上什么绝学,唯一做的事情就是把事实搜集在一起,就好像集邮一样。只要有证据,反驳一个理论是非常简单的事情。

科学研究的真正关键在于发现机制。科学研究的每一篇论文都是我们从个人感觉到客观事实,从客观事实到因果关系,从因果关系到能推广使用的机制这个过程中的一小步。这个过程的每一步都不是完美的,但只有这么做,我们才能摆脱童稚状态。

2、什么是主流科学

科学研究是一个充满争论的过程。科学家要是不争论,科学就死了。比如几年前有实验号称发现了超光速中微子,就引起了科学家的巨大争论,有人甚至提出各种理论解释,最后被证明不过是实验错误。统计出来的东西尤其不能作为成熟理论,而只能作为科学研究的缘起。科学研究就是这么一个把新思想逐渐变成主流的过程。从这个意义上讲也许真正活跃的科学根本就没主流,或者说主流科学都是死的科学,更严格地说是凝固了的科学。 怎样才算主流科学?你必须能用现有的理论去解释你的新理论。如果主流科学是一棵大树,你的新理论不能独立于这棵树之外。你必须告诉别人这棵树的这几个位置可以长出这么几个树枝来,而这些树枝可以连接到我的新理论上去——这样你的理论就成了这树的一部分。有时候你甚至可以宣布某个树干的真实形态其实不是人们之前想的那样,但你不可能宣布这棵树整个长错了。

3、关于创新:汗水重要还是灵感重要?

美国科学作家史蒂芬·约翰逊(Steven Johnson)在《伟大创意的诞生》(Where Good Ideas Come From:The Natural History of Innovation)这本书中提出了一个叫作“慢直觉”(slow hunch)的概念。约翰逊说,你考察那些伟大发现的真实过程,其实并不是来一个尤里卡时刻一蹴而就的,而是一系列小想法慢慢连接起来积累的结果。你研究一个问题,一开始仅有个模糊的直觉,选择一个方向往下走。很多情况下一个好想法并不是一开始就好,它必须随着研究的深入能跟新想法连接起来,有新的事实支持,慢慢长大的。 所谓“尤里卡时刻”(Eureka),其实是慢直觉积累到一定程度导致突破的时刻。你必须脑子里一直想着这个问题,把所有有用的东西都备齐了,才有可能发现这个关键的新连接。人们关注这个高潮,却没有注意到这个高潮是怎么铺垫出来的。这有点像“渐悟”和“顿悟”,其实没有“渐悟”就没有“顿悟”。

韩非子有句话说,“上古竞于道德,中世逐于智谋,当今争于气力”,这句话用在科学发现这个工作上特别合适。今天的科研工作不能指望才子佳人的浪漫情怀。在科研中依赖一两个关键的“创造性思维”,是错误的策略,会大大降低效率。正确的办法是,多做试验,而且最好手里一直都有好几个项目。

灵感并不值钱。不管是科学家、艺术家还是创业的企业家,他们每时每刻都在产生各种想法,也许100个想法里面只有一个想法最后能被证明是有用的。所以对创新者来说,成功的反义词不是失败,而是平庸,是安全,是什么都不做。只要你愿意把想法一个个拿来尝试,失败就是你的日常生活,成功其实是失败的副产品。

4、发散思维

解决问题有两种思维:集中思维和发散思维。

集中思维是把新想法集中在大脑中的一个特定区域处理。小球就一直在那里打转,如果问题的解决方案也在那里,那大脑很快就能解决它。

但集中思维有个弊端,叫“定式效应”(einstellung effect)。说白了,定式效应就是当局者迷,我们头脑里边已经存在很多定式,一个想法产生后,我们首先会把它直接放到我们那个定式区里,用现有的套路去琢磨它。但可能琢磨半天也找不到答案,因为这个答案其实在“灯火阑珊处”。而这时候如果主动使用发散思维,跳出圈外来换个思路,最后往往能创造性地解决问题。

参考


未有知而不行者,知而不行只是未知。

– 王阳明《传习录》

周刊第17期: 如何构建智能体(Agent)

2025-08-05 21:15:00

本文为周刊第17期,前期的周刊参见:周刊系列

TL;DR 本期周刊通过几篇博客文章来讲如何构建智能体(Agent): 1) 《大模型驱动的自主智能体》: 关于智能体最经典的一篇文章,介绍大模型驱动的智能体的核心架构,其中主要三个核心部分(规划、记忆、工具使用)的职能分别是什么?以及参考案例。 2) 《构建高效的智能体》(by Anthropic): Anthropic发布的智能体构建指南,阐述什么是智能体以及智能体系统?何时构建智能体?有哪些类型的智能体系统?智能体和工作流的区别?以及如何构建它们? 3) 《构建智能体实践指南》(by OpenAI): OpenAI发布的智能体构建指南,阐述他们对智能体的定义,以及何时构建智能体?智能体的设计原则有哪些?如何做好安全防护? 4) 《智能体的上下文工程》: Manus首席科学家从Manus项目经验中分享构建Agent的实践教训,以及具体在上下文工程中应该怎么做。

如无特殊说明,本文中的Agent或智能体指的都是大模型驱动的智能体(LLM powered agents).

Lilian Weng:大模型驱动的自主智能体

原文:LLM Powered Autonomous Agents

Lilian Weng (翁荔)是前OpenAI安全系统团队负责人,后离职与前OpenAI CTO Mira Murati 一起创业,成为 Thinking Machines Lab 的联合创始人。她的这篇文章发表于2023年6月。可以说,Lilian Weng 是最早意识到 Agent(大模型驱动的智能体)重要性的人,而很多Agent开发者也把她的这篇博客当成了教科书级的存在。

lilian-weng

文章一开头,作者就说到:利用大语言模型(LLM)作为核心驱动来构建Agent是一个极富创意的想法(cool concept)。LLM就像Agent的大脑,驱动Agent解决各种问题。在Agent系统中,主要有规划(Planning)、记忆(Memory)、工具使用(Tool use)几个核心部分。

agent-overview

一、规划 Planning

在规划部分,Agent完成两项任务:

  1. 细分目标与拆解任务:Agent将庞大的任务拆成小块,每一块都是一个小目标,这样可以把复杂任务简单化。在任务拆解中,典型的方法有思维链(CoT, Chain of Thought)和思维树(Tree of Thoughts)。思维链是将复杂的问题转换为“分布思考”,通过一步一步的思维链来拆解复杂任务。而思维树则是思维链的进一步拓展,在每个思考阶段还可以进行多重推理探索,每一步都可以产生多个想法,形成一个树状的结构,并使用BFS(广度优先搜索)或DFS(深度优先搜索)来探索并评估各想法。还有一种方法是LLM+P, 这种方法会将任务分解规划外包给一个外部的工具,即”P”,LLM则使用该工具返回的结果。
  2. 反思与优化:Agent会反思自己过去的行为,学习并改成错误,以提高解决问题的效果。典型的方法如 ReAct、Reflexion、CoH、AD。ReAct 通过提示词模板”Thought: … / Action: … / Observation: …” 强制Agent显示记录思考过程,通过自然语言生成推理轨迹,再执行具体行动,并观察结果以调整后续步骤。而 Reflextion 则是在ReAct 的基础上增加奖励模型来判断行为是否低效或包含幻觉,来决定是否调整策略。CoH (Chain of Hindsight, 回顾链)通过SFT(监督微调)让大模型从历史反馈中改进。AD(Algorithm Distillation, 算法蒸馏)则是通过强化学习让Agent模仿自身过去的改进轨迹来强化整个“学习过程”。

二、记忆 Memory

类比人类大脑的记忆存储及获取,一般有如下三种记忆:

  1. 感知记忆(Sensory Memory): 这是记忆的第一步,在感官接受刺激后短暂保留的信息,比如看到一幅图片后的视觉记忆,或听到一段音乐后的听觉记忆等。对于大模型而言则是原始输入的token向量化表示。
  2. 短期记忆(Short-Term Memory, STM): 也被称为工作记忆(Working Memory)。 当我们意识到需要某些信息用来学习或推理等复杂认知任务时,就会将这些信息存储在短期记忆中。而在大模型任务处理时,大模型就依赖于上下文窗口来存储短期记忆信息。
  3. 长期记忆(Long-Term Memory, LTM): 这些是记录在我们大脑皮层长期存在的记忆,一般而言容量几乎无限。一种是需要有意识的回忆,比如特定的事件,称为显性记忆;另一种是无意识的记忆,比如骑车技能,称为隐性记忆。对于大模型而言,长期记忆依赖于外部工具,如向量数据库,信息的获取效率依赖检索算法,一般标准的做法是通过最大内积搜索(MIPS)检索数据,使用一种叫近似最近邻(ANN)的算法。常用的ANN算法有:LSH(局部敏感哈希)、ANNOY、HNSW、FAISS、ScaNN 等,这些算法在数据检索的速度、维度、精度上各有侧重,实际应用过程中需根据场景选择。

三、工具使用 Tool use

Agent通过调用外部工具API,可以获取那些不在大模型权重的信息,也拥有了执行任务的能力。比如调用搜索引擎查询信息,调用数据库查询最新数据,甚至编译或执行代码等。

一般的Agent框架都提供了类似框架能力,作者重点介绍了HuggingGPT这一框架,它运用ChatGPT作为指挥中心,从HuggingFace平台上挑选合适的模型来执行任务。整个系统分为四步:1) 任务规划:将用户请求分解为多个小任务;2) 选择模型:将任务分配给不同的专家模型执行;3) 执行任务:专家模型将针对特定任务进行操作,并记录结果; 4) 响应生成:大模型接收执行结果,向用户总结输出。

hugging-gpt

最后,作者总结了几点挑战,到现在仍是Agent领域所研究的课题:1) 有限的上下文长度,影响反思和规划。2) 规划和任务分解能力方面,大模型在动态调整规划时不如人类灵活。3) 自然语言不够精确,大模型通过自然语言与外部工具交互,可能因为格式生成错误而导致命令不能够被执行。


Anthropic: 构建高效的智能体

原文:Building effective agents

这是 Anthropic 团队在2024年12月发表的博客,在博客中 Anthropic 总结了过去一年跟其他行业团队合作构建智能体的经验。

什么是Agent ?

关于Agent的定义没有明确标准。有人把能够自主运行、使用各种工具完成复杂任务的自主执行系统称为Agent,也有把遵循预先定义的工作流、按指令执行的系统称为Agent。在Anthropic看来,各种变体都可以归类为 Agentic System(智能体系统),而用 Workflow(工作流)和 Agent(智能体) 来区分:

  • Workflow: 通过预定义代码路径来协调大模型(LLM)和工具的系统;
  • Agent: 由大模型动态指导自身流程和工具使用,并对完成任务保持控制的系统。

何时构建Agent ?

通常,构建 Agentic System 具有较高的成本和延迟,因此,只有必要的时候才构建。也就是说,如果是简单场景,那优先考虑提示词工程(Prompt engineering)等低成本方案。当确实需要更复杂的解决方案时,面对 Workflow 和 Agent 也有考量标准:对于定义明确的任务,Workflow 能提供可预测性和一致性;而需要更灵活的大模型决策场景时,则考虑Agent.

何时及如何使用框架 ?

很多框架可以用来构建Agentic System, 比如 LangChain 的 LangGraph, Amazon Bedrock, Rivet, Vellum 等。使用框架上手容易,但副作用是框架的抽象层会掩盖底层的提示和响应,使得调试困难,而且也会增加应用的复杂度。作者建议开发者优先选择使用大模型API,直接编码实现,如果一定要使用框架,得确保理解框架底层代码。

构建 Workflow 和 Agent

作者从基本单元(Block)到 Workflow 再到 Agent 逐步介绍其构建方式。

构建基本单元(Block)

首先从构建Agentic System 的最基本单元(Block)开始:对大模型进行增强,比如检索、调用工具、记忆(读写外部存储)等。一个建议的做法是,通过MCP(Mode Context Protocol)协议来与三方工具集成交互。

block-augmented-llm

构建不同类型的 Workflow

下面作者介绍了几种典型的 Workflow 及其构建方式。

1、Prompt chaining (提示词链)

Prompt chaining 是将一个任务分解为一系列步骤,其中前一次大模型调用输出将会处理成为下一次大模型调用的输入提示词,这样每一次大模型的调用都是处理简单的任务,用调用时长的代价来换取更高的准确性。常见的案例有:生成营销文案并翻译成其他语言,先编写文档大纲再根据文档大纲编写文档。

prompt-chaining-workflow

2、Routing (路由)

Routing 工作流通过大模型对输入进行分类,并将其定向转到专门的后续任务。常见的案例有:根据用户咨询问题类别导向不同的下游流程,将简单的问题路由到小模型而将困难的问题路由到更大的模型以优化成本和速度。

routing-workflow

3、Parallelization(并行化)

并行化工作流是让大模型将同一任务分给多个下游流程,或者将一个大任务分解成多个子任务给下游流程,然后通过程序聚合它们的输出。前一种作者称为Sectioning(分段), 将一个任务分段为独立的子任务并运行,我觉得有点像 MapReduce, 如:让一个模型处理用户查询,让另一个模型对其不当内容或请求进行筛查。后一种作者称为 Voting(投票),多个实例运行相同的任务以获得不同的输出,如:审查同一段代码的漏洞,多个提示词进行不同方面的审查,如果发现问题则标记出来。

parallelization-workflow

4、Orchestrator-workers (协调者-工作者模式)

在协调者-工作者模式的工作流中,协调者是一个中央控制的大模型单元,它分解任务并将其委派给其他大模型工作者,并综合输出结果。

orchestrator-workers-workflow

5、Evaluator-optimizer(评估者-优化者模式)

在评估者-优化者模式的工作流中,一个大模型调用生成,而另一个大模型调用(评估者)在循环中提供评估和反馈。这种工作流适合通过迭代来改进大模型生成效果的场景,如文档翻译,一个大模型负责翻译和优化,另一个大模型负责评估和反馈。

evaluator-optimizer-workflow

构建 Agent

自主Agent可以处理复杂任务,但实现起来往往很简单,它通常是大模型在一个循环中根据环境反馈使用工具。在执行过程中,Agent从用户或环境中获得反馈,自主规划并操作。而Agent的自主性也意味着更高的成本,以及潜在的错误累积。作者举了他们尝试过的Agent,如一个用于解决 SWE-bench 测试集任务的编码Agent; 调用 Claude 来操作电脑完成任务。

autonomous-agent

上述的 Workflow 和 Agent 的模式也是可以组合和定制使用的。

最后,作者总结了他们在实现Agent中的三点核心原则:

  1. 保持Agent设计的简洁性。
  2. 通过展示Agent规划步骤以确保透明性优先。
  3. 通过工具文档和测试,精心设计Agent和计算机间的接口。

OpenAI: 构建智能体实践指南

原文(文档下载链接):A practical guide to building agents

今年5月,OpenAI也发布了一篇构建Agent的指导文档。

什么是Agent?

与Anthropic 的博客文章观点不同,OpenAI很明确的指出了Agent是能够代表用户独立完成任务的系统。那些尽管继承了大模型但是没有使用它来控制工作流程执行的应用都不是Agent,比如简单的聊天机器人、预先编排工作流程的大模型应用等。也就是说,OpenAI认为,Workflow不是Agent,它也没有使用Anthropic提的比较泛化的词:Agentic System.

何时构建Agent?

在这个问题上,OpenAI 的观点近似 Anthropic, 认为 Agent 适合处理复杂问题,适用于那些传统确定性和基于规则的方法难以处理的工作流程。比如:复杂决策场景,难以维护的规则,或严重依赖非结构化数据的场景。

Agent 设计基础

从最基本的形式看,Agent由三个核心组件构成:

  • 模型:为Agent的推理和决策提供支持的大语言模型
  • 工具:Agent可采取行动的外部功能或API
  • 指令:定义Agent行为的明确指导和安全防护(guardrails)

选择模型

不同的模型在任务复杂度、推理时长(latency)和成本方面各有优劣,并不是每项任务都需要性能最强的模型,因为性能更强往往也意味着推理时长更慢、成本更高。

OpenAI给出的建议是:先采用能力最强的模型构建Agent原型,以建立性能基准。在此基础上,尝试替换为更小的模型,以检验其性能,同时权衡推理时长和成本。这样避免过早的限制Agent的能力。

定义工具

通过使用系统和应用的API,工具可以扩展Agent的能力。而对于那些没有API的遗留系统,Agent则依赖与网页或UI直接交互。

每个工具应该有标准化的定义,以便实现灵活的工具与Agent之间的多对多关系。OpenAI这里提到的标准化定义的工具(tools)类似于Anthropic所提到的符合 MCP 协议的工具,以及Google所提出的符合A2A协议的Agent.

Agent通常需要三类工具:

  1. 数据类:帮助Agent获取执行工作流所需的上下文信息,如查询数据库、读取计算机文档、搜索网络等。
  2. 动作类:使Agent能采取行动,如写入数据、更新记录、发送邮件、转客服工单等。
  3. 编排类:Agent本身也可以成为其他Agent的工具,如研究Agent、写作Agent、翻译Agent等。

配置指令

高质量的指令对Agent来说至关重要,清晰的指令能减少歧义,提高决策准确性,让工作流执行更流畅、错误更少。写好Agent指令需要注意以下几点:利用现有文档、引导Agent拆解任务、定义明确的动作、以及覆盖边界情况。

编排Agent

在模型、工具、指令三大核心组件具备后,接下来就需要考虑编排模式,让Agent有效执行工作流。

一般编排模式分类两类:

  1. 单Agent系统:由一个配备合适工具和指令的模型,在循环中执行工作流。
  2. 多Agent系统:将工作流的执行分配给多个协作的Agent.

单Agent系统

单Agent系统可以通过不断增加工具来处理更多任务,这种模式可控性更强,评估和维护也更简单。

在单Agent系统模式下,Agent的作业运行通常由循环来实现,让Agent一直执行,直到满足退出条件为止。

openai-single-agent-system

一般来说,单Agent系统可以满足大多数场景,当场景逻辑复杂到难以维护、或添加了太多工具导致过载时,就要考虑多Agent系统了。

多Agent系统

多Agent系统有很多种设计方法,最常用的是以下两种模式:

1、管理者模式(Manager pattern): 一个中心管理者Agent通过工具调用来协调多个专用Agent(agents as tools), 每个Agent处理特定任务。

openai-multi-agent-manager-pattern

2、去中心化模式(Decentralized pattern): 多个Agent以平等的方式去中心化协作,基于各自专长互相交接任务(agents handing off to agents)。

openai-multi-agent-decentralized-pattern

Guardrails (安全防护)

Guardrails 可以帮助开发者管理数据隐私风险,并确保大模型不被滥用。

Guardrails 需要通过分层防御机制来建立,单一的防护很难做到足够安全。

Guardrails 的类型包括:

  • 相关性分类器(Relevance Classifier):确保Agent回复保持在预期范围内,标记离题的询问。
  • 安全分类器(Safety Classifier):检测危险输入,防止利用系统漏洞。
  • 个人身份信息过滤器(PII Filter):防止模型输出不必要的个人身份信息(Personally Identifiable Information).
  • 内容审核(Moderation):标记有害或不当内容,确保交互安全。
  • 工具安全评估(Tool Safeguards):为每个工具评估风险等级,调用高风险工具触发人工审核。
  • 基于规则的防护(Rules-based protections):包括blocklist、正则表达式过滤等措施,防止已知威胁,如敏感词或SQL注入等。
  • 输出验证(Output validation):通过提示词工程和内容检查,对输出内容进行检查。

季逸超: 智能体的上下文工程

原文:Context Engineering for AI Agents

季逸超(Yichao ‘Peak’ Ji)是Manus的联合创始人兼首席科学家,最近他在Manus官网发布了一篇名为 Context Engineering for AI Agents: Lessons from Building Manus 的博客,从技术角度总结了构建Manus过程中的一些经验。

作者回顾了Manus立项初期面临的抉择:是使用开源模型来训练一个端到端的智能体模型(agentic model),还是基于前沿模型的上下文学习能力构建一个Agent. Manus团队之前有过创业的经验教训:当他们从头训练了一个模型,GPT-3一经推出,耗费大量成本训练的模型变得无关紧要。因此,在Manus上,团队选择了上下文工程。作者比喻说:“如果模型进步是上涨的潮水,我们希望Manus成为那条船,而不是固定在海床上的柱子。”总结上下文工程经验如下。

围绕 KV 缓存进行设计

作者认为 “KV 缓存命中率”是Agent生产阶段最重要的单一指标,因为它直接影响延迟和成本。这也令我想到计算机领域的一句著名的话:“计算机科学中只有两个难题:缓存失效和命名。”

一个典型的Agent处理任务过程是:在接收用户输入后,Agent通过一系列工具调用链来完成任务。在每次迭代中,模型根据上下文选择一个预定义动作并执行,然后观察结果。动作和观察结果被附加到上下文中,形成下一次迭代的输入。这个循环会持续进行,直到任务完成。这个过程中,上下文会不断增长,根据Manus的数据统计,平均输入和输出token的比例约为100:1.

具有相同前缀的上下文可以利用Transformer架构的KV缓存机制,这将大大减少了首token的生成时间和推理成本。根据Manus团队的计算,使用Claude Sonnet时,存储的输入token成本为0.3美元/百万token,而未缓存的成本为3美元/百万token,相差十倍。

因此,提升KV缓存命中率的关键实践有:1) 保持提示词前缀稳定;2) 使得上下文只在尾部增加;3) 在需要时明确标记缓存断点,这是为了手工告诉大模型哪些可以被缓存复用。

manus-design-around-kv-cache

在调整使用工具时,采用掩码方式,而非增删

通过使用工具让Agent能力更强,但如果任由用户自定义工具,也会造成不可预测的结果。Manus团队的做法是:避免在Agent执行迭代过程中动态添加或删除工具。一部分原因也是工具定义在上下文的前部,会导致KV缓存失效。采取的替代做法是使用上下文感知的状态机来管理工具的可用性,以遮蔽掩码的方式来允许或阻止某些工具调用动作。

manus-mask-not-remove

使用文件系统作为上下文

虽然当前业界前沿大模型都提供128K甚至更多的上下文窗口,但实际场景中这还远远不够,不仅因为过程中的观察结果往往包含了大量非结构化数据及文件,导致很容易超出上下文限制,而且长上下文也会导致模型性能下降、成本提升等问题。

Manus则将文件系统作为上下文,大小不受限制,持久化,而且Agent可以直接操作。不仅将文件系统用作存储,还用作非结构化的长期外部记忆。

manus-use-file-system-as-context

通过复述操控注意力

Manus在执行任务中,会生成一个todo.md的文件,用来记录任务列表,并在执行过程中更新它。这是一种操控注意力的机制。Manus平均完成一个任务需要大约50次工具调用,而过程中依赖大模型进行决策,这个作业链条太长,以至于大模型很容易偏离主题或忘记早期目标。因此,Manus通过不断重写代办事项列表,并将其目标复述到上下文的末尾,进而将代办推进模型的近期注意力范围内,避免了上述问题。

manus-attention-through-recitation

保留错误内容

大模型会产生幻觉,环境会返回错误,工具会出现异常行为,这些都会导致Agent犯错。在发现错误后清理痕迹继续重试并不是推荐的做法,因为清楚错误信息会移除证据,这会让大模型在下一步理解时缺失信息。因此,最有效的方法是将错误保留在上下文中,让模型看到错误的行动及其观察结果,以降低重复错误的可能性。

manus-keep-wrong-stuff-in

不要迷信少样本提示

少样本提示(Few-Shot Prompting)是大模型提示词工程中常用的方法之一,通过在提示词中增加少量样本示例让模型来模仿其样例,以提高输出的准确性。但在Agent中,这种方法也可能适得其反,模型遵循样本模式,重复类似行动,导致过度泛化,甚至产生幻觉。因此,推荐的做法是增加多样性,在模板中增加顺序或格式上的微小噪音,在控制中增加随机性。

manus-not-few-shotted

以上是作者在构建Manus过程中总结的实践经验。


Agent = LLM + memory + planning skills + tool use

This is probably just a start of a new era :)

– Lilian Weng, 2023-6-27, on x

周刊第16期: Andrej Karpathy 讲 AI

2025-07-22 21:58:00

本文为周刊第16期,前期的周刊参见:周刊系列

TL;DR 本期周刊介绍 Andrej Karpathy 的三次演讲/YouTube视频课程,通过对这些视频的解读,主要阐述下面三个系列的问题:1. 为什么说我们处在软件3.0?它跟软件2.0和1.0的区别是什么?为什么说大模型相比基建(电网),更像是操作系统,而且还是1960年代的操作系统?2. ChatGPT是怎么被训练出来的?预训练、监督微调、强化学习是什么关系?分别对大模型产生了哪些影响?大模型未来的发展方向是什么?3. ChatGPT的能力边界是什么?业界那么多AI应用的差别是什么?除了聊天对话还能用它们干啥?

Andrej Karpathy 是一位出生在捷克斯洛伐克的AI计算机科学家,博士毕业于斯坦福,师从李飞飞。毕业后成为OpenAI的创始成员。2017年加入特斯拉,成为其人工智能总监,领导特斯拉智能驾驶的机器视觉团队。2023年返回OpenAI,不到一年后决定创业,方向是AI教育领域。按照他自己的说法,教育是他热爱的事业。也确实如此,在斯坦福期间,他创作并担任主讲的课程《CS 231n:卷积神经网络在视觉识别中的应用》,一度成为该校学生规模最大的课程。而他在YouTube上发布的AI教学视频也深受网友喜爱。

andrej-karpathy

本期周刊将介绍他的最新一次演讲及两则YouTube教学视频。

软件3.0

今年6月17日,Andrej Karpathy 在 Y Combinator AI Startup School (与会者还有奥特曼、李飞飞、马斯克等人)上发表了名为 Software is Changing (Again) 的演讲,提出了 软件3.0(Software 3.0)的概念。Andrej Karpathy擅长提出一些新概念,比如之前的Software 2.0 和 vibe coding(氛围编程)。下面简要总结下他的演讲。

软件从诞生之后的70年里,在根本层面上并没有太大的变化,但在过去的几年,却发生了两次根本性的改变。

软件1.0时期,大量的软件都由人来编写,在GitHub上,存储了不同类型的软件仓库,可以将它看成是一个大的“软件地图”。“软件1.0”是程序员为计算机编写的代码。

软件2.0时期,不需要直接写代码了。“软件2.0”基本上是神经网络,或者说神经网络中的权重参数(weights)。软件2.0时代的GitHub是什么呢?Andrej Karpathy 认为是 Hugging Face. 在这里能看到那些软件(模型)。

map-of-github

现在,我们进入了一个新的时期,神经网络也可以编程了,或者可以将神经网络看成是可编程的计算机,而运行在其上的编程语言则是提示词(prompts),这种编程语言可以用英语(或其他人类语言)来写。

举个例子,如果要实现情感分类这一个任务,那么:

  • 软件1.0时期,可以写一段Python代码来实现;
  • 软件2.0时期,可以训练一个神经网络模型;
  • 软件3.0时期,可以通过提示词(prompt)来指挥大模型完成任务。

software-10-20-30

我们处在软件3.0时期,而大家可能也已经注意到了,GitHub上的很多代码,已经不再是传统意义上的代码了,里面夹杂了大量的英文。这是一个正在增长的全新编程范式,我们在用日常使用的语言来编程。

有人说:AI是新电网,确实如此,大模型给人的感觉就像是一种基础设施。那些大模型厂商,如OpenAI、Gemini、Anthropic等,这些公司投入大量的资本开支(CAPEX)去训练大模型,就是在建设一张新“电网”。然后他们通过API向用户提供智能服务,又投入持续的运营开支(OPEX),本质上就像是电力公司把电输送到千家万户一样,把智能输送给每个人。

用户则按使用量计费来使用大模型服务,比如按百万token来付费,这跟我们使用水电的逻辑是一样的,而作为用户,我们也会对这些API服务提出类似公共事业的需求,低延迟、高安全、高可用等等。一旦这些公共基础设施发生故障,影响也是严重的,就像电力故障会导致工厂停工一样,大模型的宕机也可能导致我们陷入无法工作的状态。(我在写这则周刊时,刚好看到网上有关于Claude Code故障导致程序员无法工作的吐槽。主管问程序员那没有Claude Code之前是怎么干活的?程序员则回怼:开玩笑吗?难道我们今天还要像野蛮人一样自己一行一行写代码?)

不过相比于“电网”,Andrej Karpathy 认为大模型更恰当的类比是“操作系统”。因为它不是单纯的商品,而是生态的核心。像操作系统一样,大模型有开源也有闭源,有很多家提供厂商,最终可能会演进成少量的几个生态。LLM本身就像是CPU,上下文窗口则像内存,大模型应用通过调度这种“CPU”和“内存”来解决问题。

我们现在部署大模型的资源成本很高,这很像1960年代的大型机时代,所以大模型都被集中部署在了云端,用户只能够通过API来调用它,就像当年要使用瘦客户端去接入大型机一样。没有人能独享大型机,所以产生了分时技术,而今天我们对大模型的使用如出一辙。大模型的PC(个人电脑)时代还没有到来,从目前的经济性来看还不允许,但未来会是这个趋势。 另外,我们与大模型的交互通过 ChatBox 的文本交互,这也很像计算机时代初期只能通过终端命令行进行交互,属于大模型的通用 GUI(图形界面)交互方式还没有被发明出来。

os-1960s

不过,在一些特定场景下的GUI交互有应用了,比如在编码领域,Cursor 就是一个例子。大家都知道,大模型能力很强,几乎包含了所有公开的人类知识,但同时又存在幻觉等严重问题,对此,在特定场景下的交互设计则尤为重要,以规避他的缺陷,又可以同时享受它的超能力。Andrej Karpathy 把 Cursor 这类应用叫作“半自主应用”(Partial Autonomy Apps), 即保留传统界面,让人类可以手动完成所有工作,同时由集成大模型,更高效的完成更复杂的工作。在Cursor中,它给用户提供了多种选项来控制自主程度:

  • Tab 补全:用户掌握主导,大模型轻微辅助。
  • 选中代码按 Ctrl+K: 让大模型改一小段,自主程度适中。
  • Ctrl+L: 改整个文件,让大模型做的更多。
  • Ctrl+I: 放手让它改整个项目目录,完全交给大模型。

anatomy-of-cursor

实际上,在真正的业务场景,并不是大模型越自主越好。AI太过主动,有时反而会拖慢效率。就像钢铁侠的战衣一样,它具备自主执行任务的能力,但更多的场景,是斯塔克在操作着它。在当下大模型还不完善的情况下,半自主Agent是比较合适的选择。

partial-autonomy-agent

总结一下,我们处在软件3.0的时代,有大量的代码需要重写,而重写的语言将是人类语言。大模型不仅像是“电网”,更像是操作系统,而现在的阶段则是1960年代操作系统刚起步的时候,这是绝佳的时机。


深入理解大模型

今年年初,Andrej Karpathy 在 YouTube 上发布了一则三个半小时的视频,名为 Deep Dive into LLMs like ChatGPT, 深入浅出地讲解了大模型的原理。以打造ChatGPT为例,从预训练(Pre-training)、微调(SFT)和强化学习(RL)三个方面来讲解大模型的构建过程。为了节省大家的时间,这里将三个半小时的视频内容总结成如下6000字左右的文本。

本视频适合对神经网络有入门基础的人学习,如果希望学习神经网络入门知识,欢迎参阅拙作《从神经网络到 Hugging Face: 神经网络和深度学习简史》

预训练 Pre-training

大模型是通过预训练得到的。预训练分为以下几步:

1、下载并处理互联网数据: 比如Hugging Face收集整理并开源的 FineWeb 数据集,收集了互联网上公开可用的高质量文本数据,经过清洗、筛选,最终只有44TB量级。这个过程是这样的:首先是从互联网上爬取数据,Common Crawl 这个组织从2007年开始持续扫描互联网,到2024年已经索引了27亿个网页,Common Crawl 爬取的这份数据是原始的互联网数据。接下来便要经过大量的过滤和清洗工作:URL过滤(排除一些黑名单网站)、文本抽取(从原始的HTML网页中提取纯文本内容)、语言过滤(如FineWeb专注英文因此主要保留英文内容)、去重、PII信息移除(剔除个人隐私数据),然后才能得到像FineWeb这样的数据集。

fineweb

2、tokenization: 第二步是将这些文本数据输入进神经网络,如果直接将文本的UTF-8编码输入给大模型,这些原始的二进制bit序列将非常长,会浪费神经网络的资源。因此,一般采用对连续bit分组进行编码,比如一个单词或一个emoji,这样就可以压缩序列长度。实际场景中还会使用一些优化方法,比如字节对编码方法(Byte-Pair Encoding, BPE),就是针对数据里高频出现的连续符号组合进行编码,比如 “mac”的编码是116,”book”编码是32,116,32对(”macbook”)经常出现,可以给它一个新的编码 256 来替换。这种将原始文本转换成符号(token)序列的过程就是 Tokenization.

3、神经网络训练: 这是计算最密集的工作阶段,所有训练大模型的算力消耗基本上集中在这里。训练阶段的主要目标,就是建模token在序列里是如何关联、彼此衔接的规律,换句话说,就是让大模型学会在一个token序列里,什么样的token更有可能出现在另一个token之后。大模型的数据就是一段长度的token序列(这个长度被称为窗口),而输出则是对下一个token的预测。因此,训练大模型就变成了通过数学方法,更新大模型,让大模型对正确token的预测概率更高,对错误token的概率更低。这里面的数学方法主要是向量计算。

traning

4、推理: 前面讲的是大模型的学习过程,而推理则是大模型生成内容的过程。推理过程大概是这样:提供给大模型一些起始token,大模型返回一组概率分布,然后根据高概率采样获得的下一个token结果反馈给大模型,继续得到下一个token,不停重复这一过程,最终生成一段文本。

inference

以上就是大模型的训练和推理过程。

GPT-2在2019年发布,跟当前的GPT-4在基本架构上没有本质区别。它有16亿个参数,上下文长度只有1024,也就是说从数据集中采样窗口时不会超过1024个token. 训练GPT-2的数据集规模是一千亿个token, 相比之下,FineWeb的数据集token总量上15万亿。2019年OpenAI训练GPT-2的成本估计约为4万美元,而今天复刻一个GPT-2仅需一天时间,成本估计100美元。原因是数据集质量更高,更重要的是硬件算力飞速提升了。

相比之下,更新的Llama 3 则规模大得多,4050亿参数,15万亿token的训练数据。在Meta发布Llama 3的技术论文中详细说明了其训练过程。

GPT-4、Llama 3 都属于基础模型(Base Model),还不能直接作为对话助手模型使用,而ChatGPT模型被叫作 Instruct 模型,被用来做对话模型。如果我们在对话中直接使用基础模型,会发现根本用不起来。使用网站 Hyperbolic 可以在线体验这些基础模型,当用户输出问题时,发现它会随机的输出一些结果,因为它不是在回答问题,而是在做自动补全。可以把基础模型理解成一个拥有大量知识的人,按照统计规律给这些知识建模,给他一些信息输入,他便从记忆里复述知识内容,但会因为概率性统计而出现“记忆偏差”。

监督微调 Supervised Fine-Tuning

1、怎么做SFT?

要想让基础模型变成可以对话的助手,让它能够回答问题,进行多轮对话,并理解意图,就需要后训练处理。

后训练方法有多种,典型的有监督微调(SFT)。在SFT中,训练数据集从互联网数据变成了由人工标注的数据,让模型学习如何在对话中回答人类问题。比如如下这条语料:

Human: Why is the sky blue?
Assistant: The sky appears blue because of Rayleigh scattering...

当它被tokenization后,模型看到的是token ID,并不理解它是对话。因此,一般大模型厂商会采用一些内部的特殊编码来标识出对话格式。比如 GPT-4 会用如下特殊token来标记对话结构: IAM_START 表示发言开始,IAM_END 表示发言结束,IAM_SEP 用于内部分隔,USER / ASSISTANT 表示谁在说话。用户问 “What is 2 + 2?” 会被编码成token序列 [What is 2 + 2?] 。模型在反复训练这种格式,就学会了补全下一轮对话。

sft-conversations

2、SFT的数据集从哪里来?

OpenAI 在2022年发布的 InstructGPT 论文中首次披露了如何通过 SFT 把大语言模型变成对话助手,当时 OpenAI 从 Upwork、ScaleAI 这类外包平台雇佣了大量的人类标注员。标注员的任务是想出一个用户问题并写出理想的AI助手回答。为此,OpenAI 还制定了一份详细的标注指南来指导标注员写好标注数据。

不过,经过这些年的发展,SFT的数据集不完全是人力标注的数据,而是发展成由大模型来生成、再由人工来修改的半自动化方式。

3、为什么大模型存在幻觉以及如何缓解?

大模型有时候会凭空捏造内容、胡编乱造,但还说得头头是道,这种被称为大模型的幻觉(Hallucination)。虽然现在大模型的幻觉已经改善不少,但本质问题并没有消除。

首先我们得理解幻觉是怎么产生的。比如在训练的数据集里有如下对话数据:

Human: Who is Tom Cruise?  
Assistant: Tom Cruise is a famous American actor and producer...

Human: Who is John Barrasso?  
Assistant: John Barrasso is a U.S. Senator from Wyoming...

Human: Who is Genghis Khan?  
Assistant: Genghis Khan was the founder of the Mongol Empire...

这些信息真实存在,回答也很合理。但如果在测试时问一个大模型现实里不存在的名字,比如问一个早期幻觉比较严重的大模型 Falcon-7B :

Who is Orson Kovats?

大模型就会根据统计规律,凭空捏造答案:

Orson Kovats is an American author and science fiction writer. 

说得煞有其事,但完全是假的,并且每次问它这个问题,它回答的结果都不一样,也都是错的。

幻觉的根源在于,大模型只是学会了这类问题的回答风格,实际上缺少该问题的知识,也无法分辨真假。本质上大模型是一个概率性token补全机器,没有检索事实的能力。

不过如果问新版的ChatGPT,比如 GPT-4 Turbo,同样问这个问题:

Who is Orson Kovats?

它通常会说“我没有找到关于 Orson Kovats 的信息”,或者显示“正在搜索网络……” 这是因为现代的大模型开始使用工具调用(Tool Use)联网检索以避免幻觉。如果把“联网搜索”选项关闭,GPT-4也会倾向于说“这个人似乎不在我的训练数据中”,而不是胡编。这是因为在训练时增加了类似不确定性问题的数据集,让大模型学会在不确定的场景下说“不”。这是缓解大模型幻觉的两个主要方法。

4、大模型的能力限制

大模型的训练和推理,都是基于从左到右的token序列,每个token的生成都依赖上下文,模型其实是在计算下一个token的生成概率。因此模型不擅长计数、拼写等细节任务。

总结一下,SFT 阶段就是把基础模型微调成一个对话助手,方法和预训练基本一样,区别是数据集:预训练使用互联网数据,而 SFT 增加了人工标注的对话数据集。

强化学习 Reinforcement Learning

最后一个训练阶段是强化学习,强化学习可以类比为模型“上学”。人类通过上学来提升能力,大模型也一样。通过这个过程让大模型更擅长解决问题。其实,模型在不同阶段的训练方式,也很像人类接受教育的不同方式。可以拿教科书中的三类知识篇幅来类比大模型的三个训练阶段:

  1. 背景知识(预训练):教科书里的大部分篇幅是背景知识,传统教育里的“填鸭式教育”就是让学生记忆这些基本知识,就像大模型的预训练阶段,这一阶段让大模型形成“知识库”。
  2. 专家示范解题(SFT):教科书里还有问题和标准解题过程,专家不仅出题,还示范解题,这相当于使用人工标注数据来训练大模型,让它模仿专家答题。
  3. 自己练习做题(强化学习):教科书章节最后有练习题,只有答案,没有解题过程,学生需要自己摸索如何解题。这对应模型的强化学习阶段,模型通过不断尝试、练习,找到自己可靠的解题路径。

textbook-metaphor

怎么做强化学习?

先看SFT怎么做,如下图,对于求苹果单价的问题,人类标注员在为训练集构造解题数据时构造了四种解法,但人类无法判定哪种是最优解法,因为人类的认知和模型的认知存在本质性差异:对人类简单的步骤(如心算)对于模型可能超负荷,而模型掌握的博士级知识(如物理公式)对于人类来说则很难,而人类标注的合理步骤则可能包含模型未学习的知识断层。

sft-samples

强化学习的运作机制是: 1、批量生成解决方案,模型生成数千条解法;2、对结果进行评估和筛选,区分出正确解法(绿色路径)和错误解法(红色路径); 3、模型自我优化,通过参数更新并强化绿色路径的生成概率。

rl-solutions

强化学习的优势是什么?

预训练和SFT早已经是行业标准,强化学习则还处于早期发展阶段,如何定义“最佳路径”、如何筛选数据、如何设置训练参数等都是强化训练的实际难题。

OpenAI是最早在大模型上探索强化学习的公司,但公开信息较少,而DeepSeek 发布的R1论文则是首次系统化公开强化学习的过程,这对于强化学习的发展至关重要。而DeepSeek R1论文显示,随着训练的深入,大模型涌现出“长思维链思考”能力(答案变长了,模型开始主动进行反复推理、自我校验、多角度尝试),模型自然学会了人类式的“思考过程”。

除大语言模型外,实际上强化学习在AI的其他领域早已有验证,这方面的经典案例是AlphaGo. 在监督学习模型下,AlphaGo学习人类顶尖棋手的棋谱,模仿到一定程度后会封顶,无法超越人类。而强化学习模型下,AlphaGo自我对弈,迭代试错,专注于如何赢棋,不受人类局限,最终超越人类棋手。比如在与李世石的对弈中,走出了人类难以想象的第37手。

RLHF:基于人类反馈的强化学习

前面提到,强化学习训练过程中设定答案,由大模型探索解决方案,这种场景使用于数学、代码等有明确答案的可验证领域。但是对于创作、总结等没有标准答案的不可验证领域,就需要借助人工反馈了,这就是 RLHF(基于人类反馈的强化学习)。比如,对于“生成一个关于鹈鹕的笑话”这一任务,需要人类对模型生成的结果评价是不是好笑。但模型训练每轮生成成千上万个样本,人工评审不可行。对此的解决办法是使用“奖励模型”(Reward Model)来代替人类。

具体做法是:1、对人类偏好建模,人类对一小批样本排序打分,作为训练奖励模型的数据集。2、单独训练一个神经网络作为奖励模型,学习模仿人类的排序。3、用奖励模型代替人类进行判定打分,持续进行强化学习。

RLHF的劣势也由此而来,因为奖励模型上通过少量人类排序数据训练出来,因此实际不能等同于真实人类的判断,导致存在偏差。而大模型在RLHF中,在经过反复迭代后,会找到“非人类预期、但评分极高”的样本,这种就是“对抗样本”。比如鹈鹕笑话中,初期模型越来越好,但迭代到一定程度,会出现”the the the”这类无意义的输出,但奖励模型竟然打出满分1.0,认为这就是最佳笑话。

因此,RLHF需要在训练过程中反复发现对抗样本,再修改,不断补漏洞。

总结和展望

最后,回顾下大语言模型的三个训练阶段:1、预训练:模型学习“教科书”,阅读大量互联网内容,形成通用语言理解和知识压缩能力。2、监督微调(SFT):模型参考“标准解题过程和答案”,学习人类标注的理想对话和解题过程,成为合格的解题和对话助手。3、强化学习(RL):模型反复做“练习题”,通过反复尝试、调整找到更有效的解题方法,最终形成强推理能力,而不是简单的模仿。对于没有标准答案的“作文题”,则采用RLHF方式加入人类偏好反馈。

对于大模型未来的发展方向,可能发生在如下方面:

  1. 多模态:模型能同时理解、生成文字、语音、图像、视频,融合为统一系统。
  2. 更强的持续任务能力(Agent):从单次应答进化到长周期、多步任务,比如完成一整个项目,但仍需人类监督。
  3. 工具深度集成:模型深入各种办公与生产软件,比如操作浏览器等完成任务。
  4. Test-time Learning(测试时学习):当前模型在推理阶段权重固定,靠上下文短期记忆。未来可能会发展出“边用边学”的能力,突破上下文长度限制。

如何使用 AI

今年2月,Andrej Karpathy 又发布了名为 How I use LLMs 的视频,花了两个多小时详细讲述了他使用大模型应用的一些方法和技巧。这里用2500字的文字简要概括下这两个多小时的视频内容。

how-i-use-llms

大语言模型基础知识与ChatGPT介绍

关于大语言模型的基础知识和ChatGPT的原理知识在上则视频解读已经介绍过,这里就不再详述。自从OpenAI推出ChatGPT后,大模型应用的生态快速发展起来,目前已有多家厂商推出类似应用。如 Google 的 Gemini、Meta 的 meta.ai、微软的Copilot、Anthropic的Claude、xAI 的 Grok、Mistral 的 LeChat,还有国内厂商的应用,如 Deepseek、字节的豆包、月之暗面的kimi、阿里的通义千问、腾讯的元宝,等等。这些Chat应用有很多,要想了解它们的优势和排名情况,可以参考 Chatbot Arena 或 Scale 的 SEAL 排行榜。下面介绍以 ChatGPT为例来介绍这类大模型Chat应用。

了解 ChatGPT 的能力边界

要想用好ChatGPT,首先得知道它的能力边界。ChatGPT的本质是一个1TB的“压缩文件”,其知识源于预训练时对互联网内容的压缩(因此存在知识的时间限制,截止时间为训练的数据集抓取的时间),其“性格偏好”则由后训练阶段标注员通过示例来设定;对于互联网上频繁出现的内容,其“记忆”则更清晰。因此,适用于问非最新的、互联网上常见的知识,但答案也非绝对正确。

与ChatGPT互动时,对话会越来越长,这些对话内容会成为下一次对话输入给ChatGPT的上下文,上下文窗口越长,会导致两个问题:一是不相干的信息会让模型分心,从而干扰正确的输出;二是导致模型运行的速度变慢,计算成本也会增加。因此,如果切换话题,则最好开启新的对话窗口。

不同模型的性能差异也大,大型模型(如GPT-4.0)更强但成本也更高,小型模型(如GPT-4.0 Mini)则较弱、但成本低,运行速度也更快。

思考模型(Thinking Model)

Andrej Karpathy 所称的“思考模型”(Thinking Model)一般被叫作“推理模型”(Reasoning Model),这里保留称之为“思考模型”,也便于跟inference 的中文翻译“模型推理”区别开来。

在有些AI应用(如Perplexity)上提供了“深度思考”(Deep Thinking)的选项,启用后会使用“思考模型”(如 DeepSeek R1、OpenAI 的O系列模型)来推理,这类模型经过强化学习训练而来,形成了类似人类的长思维链思考策略,适合解决数学、编程等复杂问题,但缺点是响应时间长(较长的思考过程)。

工具使用和一些技巧

下面 Andrej Karpathy 介绍了他在使用ChatGPT等AI应用中的一些场景和技巧。

互联网搜索

大模型本身的知识有截止时间,如果需要获取最新信息则需要调用大模型的搜索能力。Perplexity 和 ChatGPT都集成了“搜索网页”按钮,用户选择后大模型会调用工具进行互联网搜索,对获取最新信息有帮助。

深度研究(Deep Research)

深度研究是最近出现的能力,在 ChatGPT Pro (Plus版有使用次数限制)上提供,当启用这个选项,丢给ChatGPT一个课题后,它便开始结合思考和多次互联网搜索,查阅大量资料,然后进行思考分析,约十分钟后给出研究报告结果。Perplexity 和 Grok 也有类似功能。

上传文件以增强上下文理解

目前很多大模型应用都支持用户上传文档文件,大模型会将它转换为文本并加载到上下文窗口中,这对于辅助阅读论文、阅读书籍尤为帮助。

Python 解释器集成

通过集成Python解释器,让大模型生成Python代码,并调用解释器让其返回结果。这对于精确的计算场景非常有帮助,因为大模型的幻觉,它不擅长精确的数字计算,而通过大模型生成代码,又编译器来运行程序得到精确结果。

ChatGPT 高级数据分析

让ChatGPT扮演初级数据分析师,收集数据(比如OpenAI历年估值)、可视化(绘制图表)、趋势拟合和预测(用SciPy曲线做线性拟合)

Claude Artifacts

编写自定义应用,通过生成代码在浏览器中直接运行,无需部署。

Claude 图表生成

利用 Claude Artifacts 和 Mermaid Markdown 库,可以对文本(比如一本书)生成概念图,将内容逻辑可视化出来,便于用户理解。

Cursor 辅助编码

通过IDE处理本地文件,调用大模型来辅助代码编写。甚至可以将控制权交给它(Cursor的”Composer” 功能),用户则发号施令让它完成编程工作。Andrej Karpathy 称之为 “氛围编程”(Vibe Coding)。

语言交互

ChatGPT可通过麦克风图标按钮实现语音传文字,用户无需打字;另外,通过应用内置的朗读功能,将文本转换为语音实现语音交互。

AI播客生成

Google 的 NotebookLM 可以将用户上传的数据(如PDF、网页、文本等),根据用户要求生成定制播客,供用户在散步、开车时收听,不仅炫酷,也很实用。

图像生成

DALL-E等模型可以根据文本提示词生成图像,ChatGPT也支持了这一功能。

视频交互与生成

ChatGPT移动端的“高级语音模式”支持通过摄像头来实时识别物体。

VO2、OpenAI Sora等工具可以生成高质量视频。

总结

大模型应用更新迭代非常快,同时各工具也侧重不同领域做差异化竞争,如Perplexity强于搜索,Claude 强于长文本,Cursor强于编程,ChatGPT是全能型选手。

不过要注意的是,大模型本质上是知识的压缩文件,要留意它的能力边界。


AGI is a feeling. Like love. Stop trying to define it.

– Andrej Karpathy