第 2 章

锦秋家园的深夜

锦秋家园的深夜从不安静。键盘声从一间卧室改成的办公室里传出来,密集、连续,像某种被压缩到极限的节拍器。客厅的茶几上摊着几台笔记本电脑,电源线从墙角的插线板一路蜿蜒到沙发脚下。有人把外卖盒摞在窗台上,盒盖压着一张画满箭头的A4纸。那箭头从“用户点击”出发,经过“特征提取”和“权重计算”,最终指向一个被反复圈出的词:推荐。

张一鸣站在白板前。白板是那种从办公用品店买来的最便宜的款式,支架有些不稳,写字的时候得用另一只手扶住边框。上面画着两套逻辑图,左边是“搜索”,右边是“推荐”。搜索的路径是一条直线,从关键词到结果页,中间标注着“用户主动意图”。推荐的路径则是一张网,节点与节点之间用虚线连接,旁边写着“行为反馈”“实时更新”“无需输入”。

他往后退了一步,看那张网。2011年他辞去九九房CEO职位时,这个判断还只是他个人头脑中的图景。地铁上看报纸的人越来越少,智能手机销量那条曲线却越来越陡。

这两个现象并置在一起,指向一个明确的结论:信息传播的媒介正在发生根本性迁移,但新的媒介形式并未带来匹配的信息获取效率。他在多个场合解释过这个落差——百度把广告和搜索结果混在一起,用户筛选信息的成本急剧上升。门户网站的编辑每天人工挑选几条头条,覆盖的是所有人的共性需求,而不是每个人的个性需求。

问题被界定清楚了:在信息爆炸的移动时代,用户需要的不再是“搜索”信息,而是被“推荐”信息。

但界定问题和解决问题之间,隔着一整个工程实现的鸿沟。此刻站在锦秋家园出租屋里的这个人,需要的不再是个人对技术的偏执,而是将这种偏执转化为一个组织共同遵循的行动准则。

2012年的春天,北京海淀区锦秋家园的这套出租屋里,挤着不到十个人。他们中的大多数是张一鸣在酷讯、九九房时期认识的技术人员,也有人是朋友介绍来的。这个团队没有豪华的履历拼盘,没有从大公司空降的高管,没有带着资源和人脉入场的合伙人。他们是一群相信代码能改变信息分发方式的技术人员,被同一个判断吸引到这套民房里来。

他们是一群相信代码能改变信息分发方式的技术人员,被同一个判断吸引到这套民房里来。

梁汝波坐在靠窗的位置,屏幕上跑着一组测试数据。他没有参与白板前的讨论,但每隔一会儿就抬头看一眼张一鸣的背影。他和张一鸣的相识可以追溯到大学时代,两人是南开大学软件工程专业的同宿舍同学。这种关系在创业初期意味着一种特殊的信任——不需要反复解释背景,不需要建立默契,一个眼神就能传递判断。梁汝波后来负责字节跳动的技术架构,但此刻他只是在用最朴素的方式验证一个假设:推荐到底有没有用。

推荐引擎的逻辑并不复杂。用户点击了什么,停留了多久,在哪个位置滑动跳过——这些行为被记录下来,转化成向量,喂进模型,模型的输出是下一次推荐的内容排序。这个循环每时每刻都在发生,每一次用户的滑动都在训练系统,让它更准确地猜测下一条内容该是什么。

问题在于,这套逻辑在2012年的中国互联网还没有被大规模验证过。门户网站仍然依赖编辑人工挑选头条,搜索引擎仍然是用户获取信息的主要入口。

张一鸣在九九房时期就试过用算法来匹配房源和用户,效果不错,但房地产搜索的盘子太小,不足以证明推荐引擎能撑起一个通用信息平台。他把白板笔放下,转过身。“搜索是人找信息,推荐是信息找人。”他说,语气很平,“人找信息,一次只能找一个。信息找人,可以同时找很多个。”

这句话后来被反复引用,但在锦秋家园的那个深夜,它更像是一个需要被代码和市场同时验证的假设。

团队里的一个工程师问了一个很实际的问题:如果用户不知道自己想要什么,推荐怎么知道?张一鸣没有直接回答。他拿起笔,在白板的右下角画了一个小方框,里面写了两个字:冷启动。

冷启动是推荐系统最脆弱的一环。没有用户行为数据,算法无法建立有效的推荐模型。解决方式无非几种:要么导入外部数据,要么人工预设规则,要么让用户主动选择兴趣标签。张一鸣倾向于第一种和第三种结合,但外部数据从哪来,用户愿不愿意选标签,这些都是未知数。

梁汝波从屏幕前抬起头。“可以先跑一个简化版,”他说,“用点击率做反馈信号,先不区分内容类别,看能不能跑出比随机推荐更好的效果。”

这个建议很务实。简化版意味着不需要复杂的特征工程,不需要大规模的离线训练,只需要把用户点击行为作为最基础的反馈,验证推荐是否比不推荐更有效。如果连这个都做不到,后面的所有设想都是空谈。

张一鸣点头。他拿起笔,在白板上把“推荐”那张网圈了起来,旁边写了一行小字:先跑通,再优化。这是字节跳动最早的做事方式——先找到一个可以被验证的最小闭环,然后用数据来裁决对错。这个方式后来被总结成“大力出奇迹”或者“快速迭代”,但在锦秋家园的深夜,它只是几个技术人员面对不确定性的本能反应。

凌晨两点,有人去厨房烧水。厨房很小,灶台上放着一袋没拆封的挂面,旁边是一箱方便面。烧水的人叫陈林,后来成为今日头条的产品负责人之一,但此刻他只是在等水开的间隙,盯着窗外发呆。锦秋家园的楼下是一条安静的街道,路灯把梧桐树的影子投在地上,像一张被拉长的网。

他端着水回到客厅,看见张一鸣还在白板前。白板上多了一行字:推荐引擎的核心不是算法,是反馈速度。这句话是张一鸣写的。

他后来在多个场合解释过这个判断:推荐系统的优劣不在于模型有多复杂,而在于它能不能在用户每一次行为之后迅速调整推荐结果。反馈越快,推荐越准。反馈越慢,推荐越像随机猜测。

这个判断直接指向了技术架构的选择。要做快速反馈,就不能依赖传统的批量处理,必须做在线学习。在线学习意味着模型要实时更新,意味着工程复杂度会指数级上升,意味着团队需要解决一系列在2012年还没有成熟解决方案的问题。梁汝波后来回忆,那个阶段最大的压力不是来自外部竞争,而是来自内部的技术不确定性。他们知道推荐引擎在理论上是可行的,但理论到工程之间隔着无数个需要被解决的细节。每一个细节都可能成为压垮项目的最后一根稻草。

凌晨三点,客厅里只剩下三个人。张一鸣坐在沙发上,笔记本电脑搁在膝盖上,屏幕上是今日头条第一版原型的界面草图。界面很简单:一个信息流,每条内容有标题、来源和缩略图,用户滑动浏览,点击感兴趣的内容。没有频道,没有分类,没有搜索框。这个设计在当时是有争议的。

传统门户网站的首页通常有几十个入口,按新闻、财经、体育、娱乐等类别划分,用户需要先选择类别,再浏览内容。

张一鸣的设计取消了所有类别,只保留一个信息流。理由是:如果推荐足够准,用户不需要自己选类别。算法会替他选。

这个理由在团队内部被反复讨论。有人担心用户会感到迷失,有人担心内容多样性不够,有人担心广告怎么插入。张一鸣的回应是:先让推荐跑起来,这些问题会在数据中找到答案。“数据比人更懂人。”他在一次内部讨论中说。

这句话后来被简化为字节跳动的信条,但在当时,它更像是一个赌注。赌的是算法能从用户行为中提取出比编辑人工判断更准确的兴趣信号。赌的是机器能比人更高效地完成信息分发。

赌注的另一面是代价。如果推荐引擎无法达到预期效果,如果用户不接受没有编辑推荐的信息流,如果市场对“算法分发”这个概念毫无反应——那么锦秋家园的这套出租屋,就会成为又一个失败创业故事的背景板。

凌晨四点,梁汝波关掉电脑。他走到白板前,看了看那张被圈起来的逻辑图。

图的旁边有一行小字,是张一鸣写的:效率是信息分发的第一性原理。他没有擦掉这行字。

第二天早上,当其他人陆续来到客厅时,白板上又多了几行代码片段。那是推荐引擎的第一个原型,用Python写的,跑在一台租来的服务器上。代码不长,逻辑也不复杂,但它标志着“算法理性”从一个人的信念变成了一群人的行动。

天使轮融资到账是2012年3月的事。数百万元人民币,来自源码资本的曹毅和天使投资人刘峻、周子敬。这笔钱在当时的创业环境里不算多,但足够支付锦秋家园的房租、购买服务器和维持一个小型技术团队的日常开销。张一鸣在融资过程中没有准备商业计划书,他向投资人展示的是推荐引擎的原型和对信息分发效率的判断。曹毅后来回忆,他决定投资的原因很简单:张一鸣对算法的理解超过了他见过的绝大多数创业者。

但投资人的认可并不能替代市场的验证。今日头条上线初期,用户增长缓慢。推荐引擎的效果需要数据来喂养,而数据需要用户来产生。

这是一个典型的冷启动困境:没有用户就没有数据,没有数据就无法优化推荐,推荐不优化用户就不会来。

团队尝试了几种方式来解决冷启动问题。一种是从外部平台导入内容,让信息流先有东西可看。另一种是人工预设一批兴趣标签,让用户主动选择。还有一种是在推荐结果中混入一定比例的随机内容,用探索来换取数据。这些方式都有各自的代价。导入外部内容涉及版权风险,人工预设标签增加了用户操作成本,随机内容降低了推荐的准确性。张一鸣在权衡之后选择了第一种和第三种结合:先用外部内容填充信息流,同时用随机探索来收集用户行为数据。这个选择在后来被证明是有效的,但在当时,它只是众多不确定选项中的一个。

锦秋家园的深夜还在继续。白板上的逻辑图被反复擦写,代码被反复修改,推荐引擎的模型被反复调整。

团队逐渐形成了一个共识:推荐引擎的核心不是算法本身,而是数据闭环。用户行为产生数据,数据训练模型,模型优化推荐,推荐影响用户行为——这个闭环转得越快,推荐就越准。

这个共识后来成为字节跳动的组织基因。从今日头条到抖音,从图文到短视频,从中国到全球,所有产品都建立在同一个逻辑之上:用算法提高信息分发效率,用数据闭环驱动产品迭代。但在2012年的春天,这个逻辑还只是一个假设。一个需要在市场中验证的假设。一个可能被证伪的假设。

凌晨五点,天边开始泛白。张一鸣站在窗前,看着锦秋家园楼下的街道。路灯熄了,梧桐树的轮廓变得清晰。他转过身,看见白板上那张被圈起来的逻辑图。

图的旁边,有人用红笔写了一行字:推荐引擎已跑通,等待市场验证。他没有说话。客厅里很安静,只有服务器风扇的嗡鸣声从角落里传来。那声音持续、稳定,像某种正在运转的机器——一台造浪机,刚刚开始转动第一圈齿轮。

齿轮转动的代价,在当时的锦秋家园还看不清楚。团队里的人把自己变成了这台机器的一部分:工程师写代码,产品经理画原型,运营人员导入内容。每个人都在为一个尚未被验证的假设工作,每个人都在用自己的时间、精力和职业前景来赌这个假设成立。

张一鸣后来在多个场合提到“延迟满足感”。在锦秋家园的深夜,这个词还没有被提炼成管理哲学。它只是具体的行为:放弃稳定的工作,接受简陋的办公环境,忍受不确定性的煎熬,等待一个可能永远不会到来的验证。

这种等待是具体的。每天早晨,团队会查看前一天的推荐数据:点击率、停留时长、滑动深度。这些数字在最初几周几乎没有变化。推荐引擎的表现和随机推荐没有显著差异。

有人开始怀疑,算法是不是真的比人更懂人。张一鸣没有回应这些怀疑。他把更多的时间花在代码上,花在模型调参上,花在分析用户行为数据上。他相信推荐引擎的效果会随着数据量的增加而提升,只是需要时间。

时间在锦秋家园的深夜里被拉长了。每一个小时都像一天,每一天都像一周。团队在等待中工作,在工作中等待。白板上的逻辑图被擦写了无数次,代码被修改了无数次,推荐引擎的模型被调整了无数次。

终于,在某个深夜,数据出现了变化。推荐引擎的点击率开始超过随机推荐,停留时长开始上升,滑动深度开始增加。

白板上的争论并没有因为那句“先跑通,再优化”而结束。恰恰相反,它像一颗石子投入水面,涟漪才刚刚开始扩散。

那个问“如果用户不知道自己想要什么,推荐怎么知道”的工程师叫李强,此前在酷讯做过搜索广告系统。他的疑虑并非出于对推荐引擎的怀疑,而是来自对搜索技术的深刻理解。在搜索的逻辑里,用户的意图是明确的——输入关键词,系统返回匹配结果,整个链路的因果关系清晰可辨。但推荐不同。推荐面对的是一个黑箱:用户没有说出口的需求,甚至连用户自己都未必意识到的偏好。

李强在白板上画了一条线,左边写“确定性”,右边写“概率性”。他用笔尖敲了敲右边那端:“搜索是确定性的,用户输入什么,我们返回什么。推荐是概率性的,我们猜用户想要什么,猜对了是运气,猜错了是常态。”

张一鸣没有反驳这个判断。他走到白板前,在李强画的线下方补了一行字:概率性可以被测量。这句话的意思是,推荐虽然建立在猜测之上,但猜测的准确率是可以被量化、被追踪、被优化的。搜索的确定性来自关键词匹配的精确性,推荐的“确定性”则来自数据反馈的收敛性——只要反馈信号足够多、足够快,概率分布就会向真实偏好靠拢。

这个逻辑在理论上成立,但在2012年的工程条件下,它需要一整套基础设施来支撑。梁汝波从屏幕前站起来,走到白板旁边。他用不同颜色的笔在“概率性”下方画了一个循环箭头,标注了三个节点:行为采集、模型更新、结果排序。然后他在循环箭头旁边写了一个数字:500毫秒。“用户滑动之后,系统必须在500毫秒内完成反馈并调整下一次推荐,”他说,“超过这个时间,用户感知不到变化,反馈闭环就是断的。”

500毫秒在2012年是一个苛刻的要求。当时的服务器处理能力有限,网络延迟不稳定,要在如此短的时间窗口内完成特征提取、模型推理和结果重排,意味着整个技术架构必须围绕“低延迟”来设计。这直接排除了当时主流的批量处理方案——那些方案通常以小时甚至天为单位更新模型。梁汝波提出的方案是在线学习:模型在每一次用户行为之后立即更新参数,而不是等待离线批处理。

这个选择在团队内部引发了更具体的争论。有人提出,在线学习会导致模型不稳定——每一次更新都可能引入噪声,模型可能在频繁的参数调整中震荡,反而降低推荐质量。梁汝波的回应是:震荡可以通过学习率控制来抑制,但延迟无法通过工程优化来消除。如果反馈闭环断裂,再稳定的模型也没有意义。

这场争论持续了将近两个小时。最终达成的妥协是:先做小规模在线学习实验,用A/B测试来验证效果。如果在线学习的推荐质量不低于批量处理,就全面转向在线架构。这个决策过程后来被字节跳动的技术团队反复引用,作为“数据驱动决策”的早期范例。但在锦秋家园的那个深夜,它只是几个工程师在白板上画来画去、用最朴素的方式争论技术路线的一个片段。没有人知道哪条路是对的。他们只知道,必须选一条路先走起来。

与此同时,在客厅的另一角,陈林正在一台笔记本电脑上调整今日头条第一版原型的界面。屏幕上的信息流只有三个元素:标题、来源、缩略图。标题最多两行,超出部分用省略号截断。缩略图统一裁剪成正方形,尺寸固定。来源显示在标题下方,字体比标题小两号。整个界面没有任何颜色装饰,白底黑字,唯一的彩色元素是缩略图本身。

陈林反复调整的是信息流的滑动阻尼系数——手指滑动屏幕后,信息流惯性滚动的速度和停止方式。这个参数看似微小,却直接影响用户的浏览节奏。阻尼太小,滑动过于灵敏,用户容易滑过头;阻尼太大,滑动迟滞,用户会感到费力。陈林试了十几种参数组合,最终选定了一个介于“流畅”和“可控”之间的值。

这个细节后来被证明对产品体验至关重要。今日头条的信息流之所以能让用户持续滑动数十分钟而不感到疲劳,部分原因就在于滑动阻尼的精细调校。但在当时,陈林只是凭直觉在调整——他没有用户测试数据,没有眼动仪追踪,没有A/B测试平台。他能依靠的只有自己的手指和眼睛:反复滑动,反复感受,反复修改。这种工作方式后来被总结为“产品直觉”,但在锦秋家园的深夜里,它更像是一种不得已而为之的笨办法——没有数据的时候,人只能用自己的身体去模拟用户的感受。

凌晨四点左右,张一鸣把白板上的逻辑图擦掉了一半。他保留了“推荐”那张网的核心结构,但在旁边重新画了一个更简化的版本。这个版本只有三个模块:输入层、特征层、排序层。输入层接收用户行为数据,特征层提取关键信号,排序层输出推荐结果。三个模块之间用单向箭头连接,没有反馈回路。梁汝波看了一眼这个简化图,立刻明白了张一鸣的意图:先把最核心的链路跑通,把反馈回路暂时放在系统外部——由人工来分析数据、调整参数。这意味着推荐引擎的第一版不会是完全自动化的在线学习系统,而是一个“半自动”的混合架构:算法负责排序,人负责调参。

这个折中方案在当时的条件下是务实的。完全自动化的在线学习需要一套复杂的监控和容错机制,而团队没有足够的人力来开发这些基础设施。半自动架构虽然效率较低,但可以更快地上线,更快地获取用户数据。张一鸣在简化图旁边写了一行注释:人工调参是过渡态,不是终态。这句话后来被证明是有先见之明的——随着数据量和计算资源的增长,人工调参的比例逐渐降低,最终完全被自动化流程取代。但在2012年春天,人工调参是推荐引擎能够运转起来的关键环节。

团队里负责调参的是两个工程师,他们每天的工作是查看前一天的推荐数据,分析哪些特征权重需要调整,哪些内容类别的推荐效果不佳。这项工作枯燥且重复,但它让团队第一次直观地感受到算法的工作方式:哪些信号是有效的,哪些信号是噪声,哪些内容容易被推荐系统高估或低估。这些经验后来被固化到算法模型中,成为推荐引擎的“先验知识”。但在当时,它们只是两个工程师在Excel表格里记录的一行行数字。

天使轮融资到账之后,张一鸣做的第一件事是购买服务器。他通过朋友介绍联系了一家IDC服务商,租用了三台机架式服务器。这些服务器放在北京南五环外的一个机房里,配置并不高端——每台机器有32GB内存和8核CPU,没有GPU加速。对于推荐引擎的在线推理来说,这个配置勉强够用;但对于模型训练来说,算力明显不足。张一鸣的解决方案是把训练任务放在夜间执行——白天服务器处理在线请求,夜间利用空闲算力进行模型更新。这种“分时复用”的策略后来成为字节跳动基础设施的早期雏形:用调度系统来分配计算资源,让同一批硬件同时承担在线服务和离线训练两种任务。

这个策略的实施并不顺利。最初几周,夜间训练经常因为内存溢出而中断。工程师们不得不反复优化代码的内存占用,把一些中间计算结果写入磁盘而不是保留在内存中。这些优化措施降低了训练速度,但提高了稳定性。梁汝波后来回忆,那段时间他每天早晨到公司的第一件事就是检查夜间训练是否成功完成。“如果失败了,当天的工作就是排查原因、修复代码、重新跑训练。”这种循环持续了将近一个月,直到训练流程足够稳定为止。

产品上线初期的用户增长曲线几乎是平的。今日头条的第一个版本在应用商店上架后,日新增用户只有两位数。团队尝试了几种推广方式:在微博上发帖、在技术论坛里分享推荐引擎的实现细节、通过朋友关系邀请种子用户。这些方式带来的用户量都很有限。真正让张一鸣焦虑的不是用户量本身,而是数据量的不足——没有足够的用户行为数据,推荐引擎就无法有效学习。冷启动问题从理论变成了现实:算法需要数据来优化,但数据需要用户来产生。

团队内部开始出现分歧。有人建议先做内容聚合,用人工编辑来填充信息流,等用户量起来之后再逐步引入推荐。这个建议的逻辑是:先用确定性的内容满足用户的基本需求,再用推荐来提升效率。张一鸣反对这个方案。

这些变化很微小,但它们是真实的。算法开始从用户行为中学习,开始做出比随机更好的推荐。张一鸣看到这些数据时,没有表现出太多情绪。他只是点了点头,然后继续修改代码。

但在场的其他人后来回忆,那一刻的沉默和之前不同。之前的沉默是迷茫,是面对未知时的紧绷。那一刻的沉默是确认,是看到假设被部分验证后的专注。推荐引擎的技术底座在团队内部确立了。从张一鸣的个人信念,到梁汝波的技术判断,到工程师的代码实现,到数据反馈的验证——这个链条在锦秋家园的深夜里被打通了。算法理性从一个人的偏执变成了一群人的共识。

但市场验证仍然是悬在头上的压力。今日头条的用户量还很小,推荐引擎的效果还没有被大规模用户检验。今日头条能否在竞争激烈的信息分发市场中找到自己的位置,推荐引擎能否在更大的数据规模上保持效果,这些问题都还没有答案。锦秋家园的深夜还在继续。白板上的逻辑图已经变成了即将上线的产品代码,团队的沉默从迷茫变为一种对未知市场的、紧绷的期待。

服务器风扇的嗡鸣声持续着,像造浪机的齿轮在转动。第一圈已经转完,第二圈正在开始。没有人知道这台机器最终会造出多大的浪。但有一件事在锦秋家园的深夜里变得清晰:当张一鸣在白板上写下“效率是信息分发的第一性原理”时,团队里的每个人都开始把自己当成这台效率机器的一个零件。工程师把自己变成代码的产出单元,产品经理把自己变成原型的迭代单元,运营人员把自己变成内容的填充单元。

这不是一个被明文规定的制度,而是一种在深夜沉默中逐渐成形的共识。人的判断被压缩到最小,算法的判断被放大到最大。这个共识的代价,要等到很多年后才会被真正看见。但在2012年的锦秋家园,它只是白板上那行被红笔圈出的字,以及服务器风扇持续不断的嗡鸣。