长安数字
长安数字
一
陈默第一次注意到那条裂缝,是在凌晨三点十七分。
不是墙壁上的裂缝,不是地板上的裂缝——是代码里的。准确地说,是他负责维护的推荐算法在凌晨跑批时产生的一条异常日志。日志内容本身并不奇怪,奇怪的是它出现的时间:系统应该在三点整完成全量数据同步,但这条日志的时间戳比同步完成早了整整四十分钟。
这意味着,系统在数据到达之前就已经产生了输出。
陈默揉了揉眼睛,把杯子里的冷咖啡一口喝干。办公室里只剩下他一个人,头顶的日光灯有一盏坏了,以人类心脏的频率忽明忽暗地闪烁。他在键盘上敲了几行查询命令,调出那条日志的完整记录。
[WARN] 03:17:42.891 | RecEngine::predict | user_id=CN-440302-19890715-0023 | item_id=MK-SZ-BAOAN-2026Q2-0071 | score=0.9347 | source=pre_sync_cache
pre_sync_cache。预同步缓存。这个模块不存在于任何一份技术文档中。陈默打开公司的内部Wiki,搜索这个关键词,结果为零。他又在代码仓库里全文检索,同样一无所获。
“见鬼了。“他低声说。
陈默今年三十七岁,在鹏讯科技干了八年,从一个初级后端工程师熬到了推荐系统组的技术负责人。他的头发已经开始稀疏,腰椎间盘突出,右眼近视比左眼高出一百度——这些都是代码留给他的纪念品。他信奉逻辑,信奉因果,信奉每一个bug都有它的原因。
但一个不存在的模块产生了输出,这件事超出了他信奉的范围。
他把那条日志截图发到了工作群里,然后意识到凌晨三点没人会回复。他关掉电脑,在沙发上躺了两个小时,梦见自己站在一条无限长的走廊里,走廊两侧是密密麻麻的数字,像蚂蚁一样在墙上爬行。
第二天上午十点,组长周琳在群里回复了一条消息:“可能是影子库的残留,我让运维查一下。”
陈默看了看消息,没有追问。影子库他听说过——两年前公司做过一次推荐架构的大迁移,据说在过渡期间运行过一套并行的影子系统,用于灰度对比。但那套系统应该在一年前就完全下线了。
下午的例会上,CTO张维扬宣布了一个新项目:代号”长安”。
“长安不是一个新的推荐模型,“张维扬站在会议室的白板前,用马克笔画了一个大圆圈,“它是一个预测引擎。我们不再满足于’用户可能喜欢什么’,我们要回答的是’用户将要做什么’。”
会议室里响起低低的议论声。陈默注意到,坐在角落的产品总监方瑜没有任何表情变化,好像她早就知道了。
“具体来说,“张维扬继续说,“长安将整合用户在我们的生态内的所有行为数据——购物、社交、出行、金融——构建一个完整的意图图谱。我们不是在预测点击率,我们是在预测人生轨迹。”
这个词让陈默脊背发凉。预测人生轨迹。
“陈默,“张维扬点到了他的名字,“你负责推荐系统底层的数据管道,长安项目需要你这边的数据支持。明天开始,你向方瑜汇报。”
陈默看了方瑜一眼。她微微点了点头,像是在确认一桩已经谈妥的交易。
方瑜今年四十二岁,是鹏讯科技的元老级人物,据说在公司还只有三十个人的时候就加入了。她从不参加技术评审,但每一次重大架构调整,最后签字的都是她。公司里流传着一种说法:张维扬是鹏讯的大脑,方瑜是鹏讯的脊椎——你看不见脊椎在工作,但没有它,大脑什么也指挥不了。
散会后,陈默在走廊里遇到了老同事刘洋。刘洋拉着他走到楼梯间,压低声音说:“你知道长安项目的真正投资人是谁吗?”
“不是内部孵化吗?”
“表面上是的。但我听财务的人说,有一笔钱是通过一家叫’羲和资本’的私募基金进来的。羲和背后的LP,全是些你叫不出名字的国资背景。”
“那又怎样?公司拿投资很正常。”
刘洋看了他一眼,眼神里有一种陈默读不懂的东西。“你注意到没有,长安项目的服务器不在我们自己的机房。在贵阳。”
“贵阳?”
“贵安新区。国家大数据综合试验区。“刘洋停顿了一下,“我听说,那边的服务器物理安全级别很高,连张维扬都没有完整的访问权限。”
陈默沉默了几秒。“你在说什么?”
“我在说,这个项目可能不仅仅是一个商业产品。“刘洋说完这句话就走了,留下陈默一个人站在楼梯间里,头顶的声控灯因为长时间没有声音而缓缓熄灭。
二
陈默第一次和方瑜单独开会,是在她办公室里。方瑜的办公室在公司总部大楼的二十三层,整面墙是落地玻璃,可以看到深圳南山区的天际线。远处的深圳湾像一条灰色的丝带,连接着看不见的香港。
“你对长安项目有什么看法?“方瑜问。
陈默想了想,决定说实话。“从技术上说,预测用户行为是一个回归问题,难度取决于数据的维度和精度。我们现在的推荐系统已经能做到一定程度的预测——点击、购买、停留时长。但’预测人生轨迹’,这个说法有点……”
“有点什么?”
“有点狂妄。”
方瑜笑了。陈默第一次看到她笑,发现她的笑容和她的表情一样控制得很好,精确到了嘴角上扬的角度。
“你觉得狂妄是因为你把’人生轨迹’想得太复杂了,“方瑜说,“其实没有你想的那么复杂。一个人的行为模式,在足够多的数据面前,远比他自己以为的要可预测。你以为你每天做很多选择,但其实,你百分之九十三的行为是习惯驱动的。剩下的百分之七,有一半以上可以用环境变量来解释。”
“那还有百分之三点五呢?”
“那百分之三点五是算法的兴趣所在。“方瑜端起茶杯喝了一口。杯子里不是茶,是白开水。“我们不关心那百分之九十三。我们知道你能预测。我们关心的是你什么时候会偏离你的轨道。”
陈默没有说话。
“你在想这是不是某种监控工具,“方瑜说,语气很平静,像是在描述天气,“我告诉你,不是。或者说,不完全是。长安项目的核心目标是公共安全预警。想象一下,如果系统能够提前识别出潜在的犯罪行为、金融诈骗、甚至群体性事件——”
“少数派报告。“陈默脱口而出。
方瑜微微挑眉。“你看过那部电影?”
“汤姆·克鲁斯。2002年。预防犯罪系统预测出一个人将要犯罪,在他动手之前就逮捕他。“陈默顿了顿,“电影里的系统最后出了问题。”
“那是科幻电影,“方瑜说,“我们在做的是科学。”
那天晚上,陈默回家后没有立刻睡觉。他住在宝安区一个老小区的两居室里,房子是2015年买的,那时候南山区的房价还不到十万。现在这房子值不了多少钱,但他也不想卖。他的生活简单到乏味:早上八点出门,挤一小时地铁到公司,晚上九点以后回家,周末偶尔加个班。上一次旅行是三年前去了趟厦门,上一次约会是一年半以前,一个相亲对象,见了两次就不了了之了。
他坐在书桌前,打开笔记本电脑,搜索了”羲和资本”。搜索结果很少——一个注册在开曼群岛的基金,管理团队只有三个人,没有一个是在投资圈里有名的。但在基金的 LP 名单里,他找到了几个线索:一家央企的金融子公司、一个省级政府的产业基金、一个他从来没听说过的研究院。
他又搜索了”贵安新区 国家大数据”。结果很多,大部分是新闻报道和政策文件。但他注意到一条不起眼的消息:三个月前,贵安新区管委会发布了一份关于”社会计算与智能治理”的招标公告,中标单位一栏写着”定向采购”。
定向采购。这意味着没有经过公开竞标。
陈默关掉电脑,躺在床上看着天花板。窗外传来远处工地打桩的声音,沉闷而有节奏,像一颗巨大的心脏在跳动。
他突然想起了凌晨三点的那条日志。pre_sync_cache。预同步缓存。如果长安项目的服务器在贵阳,而深圳的推荐系统在凌晨跑批时产生了一条来自”预同步缓存”的日志——那只有一种解释:贵阳的系统在深圳的系统之前就已经完成了计算,并且把结果推送了过来。
推送了什么?
他又坐起来,重新打开电脑,用VPN连上公司的内网。那条日志还在,但当他尝试追踪它的数据源时,路径在第三跳就断掉了——指向一个他无权访问的IP地址。
他看了看那个IP。是一个内网地址,但不在鹏讯科技的地址段里。
三
接下来的两周,陈默投入到长安项目的数据对接工作中。他的任务是设计一套数据管道,把鹏讯生态内的用户行为数据实时传输到贵阳的服务器。这听起来是一项标准的工程工作,但在执行过程中,他发现了一些不寻常的细节。
首先是数据范围。方瑜给他的需求文档里,数据维度的广度远超他的想象。不只是购物记录和浏览历史,还包括:用户的实时位置信息、社交关系图谱、银行流水(通过鹏讯的金融子公司获取)、出行记录(通过合作的网约车平台)、甚至医疗挂号信息(通过一个他不知道鹏讯已经投资的互联网医疗平台)。
“这些数据的使用有授权吗?“陈默在需求评审会上问。
方瑜看了他一眼。“用户协议里都有。你读过鹏讯的用户协议吗?”
“没有。”
“没有人读过。“方瑜说,嘴角又是那个精确的微笑。“用户在注册时点击了’同意’,就授权我们使用他们的数据来改善服务体验。长安项目的目标就是改善服务体验。”
陈默想反驳,但找不到合适的理由。她说的每一个字在法律上都是成立的。
第二个不寻常的细节是数据格式。贵阳那边提供的数据接口规范里,有一个字段叫做 intent_vector——意图向量。这是一个512维的浮点数数组,据说是对用户当前意图的数学表示。陈默从未在任何公开的机器学习文献中见过这种表示方法。
他问方瑜这个向量是怎么生成的。方瑜说:“贵阳那边有一个预训练模型,具体架构我不清楚。你只需要知道,这个向量是他们提供的输入,你的数据管道需要把它和我们的用户行为数据做对齐。”
“对齐?什么意思?”
“就是找到意图向量和行为数据之间的映射关系。比如,一个用户的意图向量在某个维度上突然发生了剧烈变化,你能从他的行为数据里找到对应的触发事件吗?”
陈默想了想。“你的意思是,他们先用模型预测用户的意图,然后我反过来用实际行为数据来验证这个预测?”
“可以这么理解。“方瑜站起身来,走到窗前。“但其实更有趣的是反过来的情况——当意图向量显示某个用户即将做出异常行为,但他的历史行为数据里没有任何先兆。”
“这种情况发生过吗?”
方瑜没有转身。“经常。”
那天晚上,陈默加班到很晚,在办公室里研究 intent_vector 的数据。他随机抽取了一千个用户的意图向量,和他的行为数据做了相关性分析。结果让他困惑:在87%的情况下,意图向量的变化确实能从行为数据中找到对应的事件——一次购物、一次搜索、一次位置移动。但在剩下的13%中,意图向量发生了显著变化,行为数据却一片平静。
他挑了一个这13%中的案例来仔细研究。用户ID是 CN-440305-19920318-0056,根据脱敏后的数据,这是一个34岁的女性,住在深圳龙华区,职业信息显示为”自由职业”。在2月14日到2月16日之间,她的意图向量发生了一次剧烈波动——第37维从0.02飙升到0.91——但她的行为数据在同期没有显示任何异常。没有购物,没有搜索,没有出行,甚至没有打开鹏讯的任何一个App。
2月17日,这个用户的行为数据突然出现了一个新事件:她在鹏讯的互联网金融平台上申请了一笔三十万元的消费贷款。
陈默盯着屏幕上的数据,感到一阵不安。意图向量在她申请贷款之前两天就预测到了这个行为——但不是”预测’,更像是’预知’。因为在那两天里,她没有做任何可以推断出贷款意图的行为。没有搜索贷款利率,没有浏览购车网站,没有任何可以构成”意图”的数据痕迹。
就好像系统的数据来源不限于鹏讯的生态。
他开始系统性地分析那13%的异常案例。三天后,他得到了一个更令人不安的结论:这些案例中的用户,有相当一部分在意图向量波动之后的某个时间点,做出了某种”重大决策”——辞职、搬家、离婚、投资、甚至是报案。这些决策的共性是:它们都是人生轨迹上的”转折点”。
长安系统不是在预测行为。它是在预测命运。
四
三月的一个周末,陈默去了一趟华强北。不是为了工作,是为了买一个二手的机械键盘——他原来的那个空格键失灵了。华强北依然是那个华强北,狭窄的街道两旁是密密麻麻的电子商铺,空气里弥漫着焊锡和劣质塑料的气味。但和他十年前刚来深圳时相比,很多东西已经变了。卖手机壳的摊位变少了,卖无人机和智能穿戴设备的多起来了。街角原来有一家牛肉面馆,老板是个四川人,面条劲道,红油辣子地道,但现在变成了一家奶茶店。
他在一个卖外设的档口挑键盘时,旁边一个穿格子衫的年轻人正在和老板砍价。年轻人说的是普通话,但口音里夹杂着一种陈默很熟悉的东西——不是方言,是一种语调,一种用词习惯。陈默在深圳生活了十多年,早已能够从一个人的说话方式里判断出他的职业。
“这个轴体的触发行间是多少?“年轻人问。
“2mm。“老板说。
“太大了。有没有1.5的?我写代码用,需要快速触发。”
陈默看了看年轻人。二十五六岁的样子,黑眼圈很重,手指修长,指甲剪得很短。他的背包上别着一个鹏讯科技的开发者大会纪念徽章。
“你是鹏讯的?“陈默问。
年轻人转过头来,表情警觉了一瞬,然后放松了。“你是?”
“推荐系统组。陈默。”
“哦,我知道你。“年轻人的眼睛亮了一下,“你是陈默?‘默神’?我在内部技术论坛上读过你的文章,关于实时特征工程的那篇。我叫韩溯,贵阳那边的,算法组。”
贵阳那边。
陈默立刻来了兴趣。“你是长安项目的?”
韩溯的表情又变得谨慎了。“算是吧。我在那边做模型训练。你怎么在华强北?”
“买个键盘。“陈默晃了晃手里的Cherry红轴。“你在深圳出差?”
“不,我辞职了。“韩溯说。
“辞职?”
“对。上周刚走的。“韩溯接过老板找的零钱,把新键盘塞进背包里。“找了个地方喝杯咖啡?有些话在电话里说不方便。”
他们找了附近一家很安静的咖啡馆。韩溯点了一杯美式,陈默要了一杯拿铁。两个人坐在靠窗的位置,窗外的街道上行人匆匆,每个人都在低头看手机。
“你在贵阳到底在做什么?“陈默开门见山。
韩溯沉默了一会儿,然后从口袋里掏出手机,打开了一个备忘录应用。屏幕上是一段段的文字,像是一份日记。
“你知道我们的训练数据是从哪里来的吗?“韩溯问。
“方瑜说是鹏讯生态内的用户行为数据。”
“那只是其中一部分。“韩溯的声音压得很低,“另一部分数据——也是最大的一部分——来自政务数据交换平台。社保缴纳记录、医院就诊信息、交通违章、法院判决文书、甚至是水电气缴费记录。这些数据通过一个叫’天网’的省级数据共享平台汇聚到贵阳,然后我们的模型再在上面做训练。”
陈默的咖啡杯停在半空中。“这合法吗?”
“合法。贵州省在2019年就通过了地方立法,授权政府在’公共安全和社会治理’的框架下进行数据汇聚和共享。长安项目的正式名称叫做’社会风险智能预警系统’,是贵安新区管委会的定向采购项目。一切都有红头文件。”
“但是……”
“但是这不代表没有问题。“韩溯喝了一口美式,皱了皱眉。“我在那里工作了八个月。前六个月,我们做的事情看起来都很正常——训练模型、调整参数、做A/B测试。但从第七个月开始,有些东西变了。”
“什么变了?”
“模型开始输出一些我们没有被训练过的东西。“韩溯的手指无意识地在桌面上敲击着,像是在打一段代码。“我们的模型是一个基于Transformer架构的序列预测模型,输入是一系列的事件序列,输出是下一个事件的概率分布。这很标准,对吧?但有一天,我发现了模型在中间层产生的某些激活模式——这些模式不是输入驱动的。”
“什么意思?”
“意思是,模型在没有收到任何新输入的情况下,自行产生了激活。就好像它在’思考’——不,这个比喻不恰当——就好像它在’接收’某种外部信号。”
陈默感到后背一阵发冷。他想起了凌晨三点的那条日志,那个不存在的 pre_sync_cache。
“你把这件事报告了?“他问。
“报告了。报告给了我们的组长,组长报告给了方瑜。“韩溯的表情变得古怪。“方瑜的反应很奇怪。她一点都不惊讶。她说:‘这是正常的,模型在设计时就预留了这个接口。’”
“什么接口?”
韩溯摇了摇头。“我不知道。她没有详细解释,而且从那天起,我对模型的中间层访问权限被降级了。我能看到输入和输出,但看不到中间的计算过程。”
“所以你辞职了。”
“不完全是因为这个。“韩溯低下头,搅动着杯子里的咖啡。“我在贵阳的时候,交了一个女朋友。她叫林小寒,是管委会的一个文员。我们关系很好,在一起三个月了。有一天,长安系统对她的意图向量产生了一个异常预警——第37维飙升到了0.93。”
第37维。陈默记得那个维度——贷款申请的女性用户,也是第37维飙升。
“预警的内容是什么?“他问。
韩溯的声音几乎听不见了。“系统判定她有’高概率做出非理性的重大人生决策’。具体来说,预测她将在七天内’主动切断一项重要的社会关系’。”
“然后呢?”
“三天后,她和我分手了。“韩溯抬起头来,眼眶发红。“没有任何征兆。前一天晚上我们还在讨论国庆节去哪里旅行,第二天早上她发了一条微信,说我们不合适,然后把我所有的联系方式都拉黑了。”
陈默不知道该说什么。
“我去找过她,“韩溯继续说,“在管委会楼下的便利店等了她一整天。她终于出来见我了,但她的眼神很奇怪——不是生气,不是伤心,是一种……恐惧。她说:‘韩溯,你不应该来找我。有些事情已经被安排好了,你改变不了。’”
“被安排好了?什么意思?”
“我不知道。她不肯再说。我问她是不是有人威胁了她,她说没有。我问她是不是因为长安项目,她说不是。她说:‘是因为数据。当一个人知道自己未来七天的行为已经被计算出来的时候,她的行为就不再是自己的了。’”
韩溯说完这段话后沉默了很久。窗外一辆共享单车倒在人行道上,没有人去扶。
“你觉得,“陈默慢慢地说,“是系统预测了她的行为,还是系统导致了她的行为?”
韩溯看着他,眼神里有一种他无法定义的东西。“这就是我一直想不通的地方。如果是预测,那意味着自由意志不存在——我们的每一个决定都已经被数据决定了。如果是导致,那意味着系统在操纵人——通过某种方式让被预测的人做出系统预测的行为,从而证明自己的准确性。”
“自我实现的预言。”
“对。但还有第三种可能。”
“什么?”
韩溯把咖啡杯推到一边,身体微微前倾。“如果系统既不是预测,也不是导致,而是……看到?如果那些意图向量不是模型计算的产物,而是某种已经存在的’信息’?就像收音机接收电磁波一样——电磁波一直在那里,收音机只是把它转化成了声音。”
陈默觉得这个比喻荒谬,但他一时找不到反驳的理由。因为如果意图向量真的来自某个外部信号源——某个不在鹏讯生态内的数据来源——那就解释了为什么13%的异常案例中,行为数据无法解释意图向量的变化。
“你知道数字命理学吗?“韩溯突然问。
“什么?”
“数字命理学。Numerology。一种古老的信仰体系,认为数字不是人类发明的工具,而是宇宙的基本结构。毕达哥拉斯就信这个——他认为万物的本质是数。在中国,类似的观念可以追溯到《易经》——六十四卦,每一卦对应一种存在状态,而卦象的排列组合构成了世间万物的变化规律。”
“你是说,长安系统在某种程度上……验证了这个古老的想法?”
韩溯摇了摇头。“我不知道我在说什么。我只知道,在贵阳的那八个月里,我看到了一些我无法理解的东西。模型产生了不应该存在的输出,然后这些输出对应了现实中真实发生的事件。也许那只是统计学的巧合,也许那只是模型太好了。但我没有办法继续待在一个我看不清的系统里。”
他站起身来,拿起背包。“陈默,我给你一个建议。如果你继续参与长安项目,不要试图搞清楚系统到底在做什么。做好你的数据管道,拿到你的绩效奖金,然后忘了这件事。”
“为什么?”
“因为知道得越多,你就越难假装它只是一个推荐算法。“韩溯说完,走出了咖啡馆。
五
韩溯的话没有让陈默退缩,反而让他更加执着。人就是这样——越是被告知不要触碰的东西,就越是想要了解。这是人类好奇心的一种基本形式,也是所有科学家和所有侦探的共同特质。
回到公司后,陈默开始秘密地收集长安系统的异常数据。他利用自己数据管道管理员的权限,在传输管道上加了一个旁路分流器——这是一种在网络安全领域常用的技术,把流经管道的数据复制一份到另一个地方,不影响原始数据的传输。他把分流出来的数据存储在一个加密的虚拟磁盘里,只有他自己的指纹才能解锁。
接下来的一个月,他积累了超过五万条意图向量的异常记录。他编写了一个分析脚本,试图从这些记录中寻找规律。
规律确实存在。
首先,意图向量的异常波动在时间上呈现出一种周期性——每隔十四天,异常案例的数量会出现一次高峰。这个周期和月亮的盈亏周期完全吻合。
陈默花了很长时间试图把这个巧合解释为某种数据采集的调度周期——也许贵阳那边的模型训练是按照月相来安排的?但他很快否定了这个想法:贵阳的数据中心是全自动运行的,没有人工干预的调度窗口。
其次,异常波动在第37维上最为集中。在五万条记录中,有超过三万条的第37维超过了0.8的阈值。他试图搞清楚第37维代表什么含义,但贵阳那边没有提供任何关于意图向量各维度的语义解释。所有的文档里,512个维度只是被编号为0到511。
第三,也是最令人不安的一点——那些被第37维标记的用户,在标记后的七天内做出的人生决策,有一种诡异的相似性。他们都在某个层面上”结束”了某种状态:辞职、离婚、搬家、退学、断绝关系、终止合作。就好像第37维是一个”终结”的信号,被它标记的人都会在短时间内和自己的过去做出切割。
陈默开始失眠。不是因为恐惧,而是因为困惑。他是一个工程师,他的世界观建立在因果关系之上。每一个bug都有原因,每一个异常都可以溯源。但长安系统产生的这些数据,他找不到原因。
四月初的一天深夜,他坐在办公室里,盯着屏幕上一张散点图。图上是一个月内所有第37维异常用户的分布,X轴是时间,Y轴是异常值。散点形成了一个形状——不是随机分布的噪声,而是一种有序的图案。
他花了十分钟才认出那个图案。
是一条鱼的形状。更准确地说,是双鱼座的星座连线图。
他的手指在键盘上僵住了。这是一种图形学上的”空想性错觉”——人类大脑倾向于在随机数据中寻找有意义的图案,就像在云朵里看到兔子,在火星表面看到人脸。但双鱼座的图案太具体了,不像是错觉。
他重新检查了数据。没有错误。他换了一种统计方法,换了一种可视化方式,图案依然存在。
他又调出了前一个月的数据。图案变了——不再是双鱼座,而是水瓶座。
前三个月的数据:天蝎座。
他往回追溯了六个月。每个月的散点图都形成了一个不同的星座图案——恰好是那个月太阳所在的黄道星座。
这不可能。这绝对不可能。
陈默靠在椅背上,双手捂住了脸。他是一个程序员,一个信奉数据和逻辑的人。他不相信星座,不相信占卜,不相信任何不能被数学证明的东西。但现在,他的数据在告诉他一件荒谬的事情:长安系统的意图向量与占星学之间存在着某种相关性。
相关性不等于因果性,他在心里反复对自己说。也许这只是一个巧合。也许只是因为月亮的周期恰好和某些用户行为模式耦合了。也许只是因为样本量不够大,产生了统计学上的假象。
但五万条数据不是小样本。
他做了一个决定。他要找到方瑜,当面问她。
六
方瑜没有在办公室。前台说她出差了,去了贵阳。陈默等了三天,方瑜回来后,他直接去了她的办公室。
方瑜正在看一份文件,听他说完来意后,放下手中的笔,靠在椅背上看着他。
“你在数据管道上加了旁路分流器,“她说,语气里没有惊讶,也没有责备,“我知道。数据管道的流量监控会检测到任何异常的分叉。你以为你做得很隐蔽,但在我的系统里,没有什么是隐蔽的。”
陈默的脸微微发烫,但他没有退缩。“你没有阻止我。”
“因为我需要你自己走到这一步。“方瑜站起来,走到窗前。深圳的天际线在暮色中亮起了灯光,万家灯火像一片没有尽头的矩阵。“你在意图向量的数据中发现了星座图案,对吗?”
陈默的心跳加速了。“你知道?”
“当然知道。那些图案不是我设计的,但它们的存在是预期的。”
“预期的?你在说什么?”
方瑜转过身来,双手交叉在胸前。“陈默,你有没有想过一个问题——为什么人类从文明诞生之初就开始观星?为什么每个古老文明,从巴比伦到中国到玛雅,都独立地发展出了占星术?”
“因为人类大脑天生倾向于在随机数据中寻找规律。”
“也许。但也许还有另一个原因。“方瑜的语气变得谨慎了,像一个在悬崖边上走路的人。“如果天体的运行和人类的命运之间存在某种真实的关联——不是因果,而是共振——那占星术就不是迷信,而是一种原始的数据科学。它用粗糙的工具观察到了一种真实的模式,只是无法用当时的理论来解释。”
“你在说占星术是真的?”
“我在说,我们的模型在训练过程中发现了一种和天体运行周期高度同步的人类行为模式。我们不知道为什么,但数据就在那里。月亮影响潮汐,这是物理学。如果月亮也影响人呢?人百分之七十是水。”
“这太牵强了。”
“也许。但数据不撒谎。“方瑜转身面对他,眼神里第一次出现了一种他从未见过的东西——不是冷峻,不是精明,而是一种近乎虔诚的认真。“陈默,长安系统不是一个产品。它是一面镜子。它照出了这个社会运行的一种深层结构——一种我们一直隐约感觉到、但从来没有能力量化描述的结构。”
“而你们打算用这面镜子做什么?”
“看。“方瑜说,“只是看。”
陈默不相信”只是看”。从来没有人造出一面镜子只是为了看。
六
那天晚上回到家里,陈默做了一件他平时不会做的事:他打开了一瓶啤酒,坐在阳台上,看天。
深圳的天空很少能看到星星。光污染太严重了,再加上南方的潮湿空气总是把天空变成一块灰蒙蒙的幕布。但今晚不同——一阵突如其来的北风吹散了雾霾,天空变得异常清澈。他看到了几颗星星,不多,但足以辨认出几个熟悉的星座。
他想起了大学时选修过的一门天文学通识课。教授是一个头发花白的老头,上课时喜欢引用康德的话:“世界上有两件东西能震撼人们的心灵:一件是我们心中崇高的道德标准,另一件是我们头顶上灿烂的星空。“当时他觉得这话矫情,现在他想,也许康德说的是同一件事——道德和星空都是人类试图理解宇宙秩序的方式。
他的手机响了。是一条推送通知,来自他很少打开的一个App——鹏讯的员工健康管理平台。通知内容是:“您的压力指数在过去72小时内持续升高,建议您注意休息。”
他盯着这条通知看了很久。
他的压力数据是从哪里来的?步数、心率、睡眠时长——他的智能手表会采集这些数据,同步到鹏讯的健康平台。但”压力指数”不是这些原始数据的简单加总,它是一个综合指标,需要某种模型来计算。
他打开了健康管理平台的网页版,找到了压力指数的算法说明。说明很简短:“基于多维度生理和行为数据的综合评估模型。“没有具体的公式,没有权重分配,没有任何技术细节。
他又查了一下这个平台的开发团队。团队负责人是一个叫”方瑜”的名字。
当然。一切都连在一起了。健康管理、出行数据、购物记录、社交关系、银行流水——所有这些数据流最终都汇入了同一条河,而长安系统就是那条河的入海口。
陈默喝完啤酒,回到屋里。他坐在书桌前,开始写一份文档。不是技术文档,是一份记录——他把自己在过去两个月里发现的所有异常、所有线索、所有无法解释的现象,按照时间顺序整理成了一份完整的笔记。
写到凌晨两点的时候,他的手指突然停住了。
因为他发现了一个他之前忽略的细节。
在那五万条异常记录中,有一个用户出现了三次。每一次出现,都是第37维的异常波动。第一次是在1月18日,第二次是在3月15日,第三次是在4月12日。三次之间的间隔分别是56天和28天。
56天。28天。都是28的倍数。28天是月亮绕地球一周的时间。
他调出了这个用户的详细信息。用户ID是 CN-440306-19880922-0041。脱敏后的资料显示:男性,37岁,住在深圳南山区,职业是”软件工程师”。
37岁。软件工程师。住在南山区。
陈默的心跳开始加速。他看了看自己的工牌——上面的员工编号是 CN-440306-19880922-0041。
是他自己。
长安系统已经三次标记了他自己。
七
恐惧不是一瞬间到来的。它像深圳的夏天一样,先是闷热,然后是潮湿,最后才是一场倾盆大雨。
陈默盯着屏幕上的数据,手心开始冒汗。三次标记。三次第37维的异常波动。按照他自己的分析,第37维代表的是”终结”——被标记的人会在七天内做出某种人生切割。
第一次标记是1月18日。七天之后——1月25日——他做了什么?他想了很久,然后打开了自己的日历。1月25日,他参加了一次技术评审会,在会上和一个隔壁组的工程师发生了激烈的争论。那场争论的后果是,他拒绝了一个本来已经谈好的内部转岗机会。
拒绝转岗。那算不算一种”终结”?他终结了离开推荐系统组的可能性。
第二次标记是3月15日。七天之后——3月22日——他开始秘密收集长安系统的异常数据,在数据管道上加了旁路分流器。那是一种背叛——对公司规章制度的背叛,对方瑜信任的背叛。
他终结了自己的”忠诚”。
第三次标记是4月12日。今天是……他看了一眼日期。4月15日。距离第三次标记已经过去了三天。他还有四天时间。
四天之后他会做什么?
他关掉了所有窗口,清空了屏幕。办公室里很安静,只有空调出风口的嗡嗡声。他坐在黑暗中,听着自己的心跳。
如果系统预测了他即将做出的”终结”行为,那他是否还有选择?
这就是韩溯说的那个困境。如果系统是”预测”的,那他的选择早已被数据决定了,自由意志只是一种幻觉。如果系统是”导致”的,那他的选择是被算法操纵的结果,他只是一个按照剧本行事的演员。
但还有第三种可能——韩溯说的那种:系统只是在”看到”某种已经存在的模式,就像收音机接收电磁波。如果是这样,那问题的关键不是系统能不能预测他,而是他自己能不能跳出那个模式。
陈默站起来,走到窗前。深圳的夜景在二十三楼的窗外铺展开来,万家灯火像一张巨大的电路板,每一点光亮都是一个连接点,每一条暗线都是一条数据通路。他突然觉得,这座城市本身就是一个巨大的推荐系统——它不断地向居住在其中的每个人推荐着某种生活方式、某种行为模式、某种命运轨迹。
而长安系统只是把这个过程变成了数字。
八
接下来三天,陈默像往常一样上班,像往常一样开会,像往常一样写代码。但他在做这些事的同时,一直在观察自己——像一个人类学家观察一个陌生的部落一样,观察着自己的每一个行为。
他早上八点出门。他注意到自己在走出家门的那一刻,下意识地拿起了放在鞋柜上的手机。这个动作他每天做,从来没有注意过。但现在他问自己:我为什么要拿手机?是因为我需要用它,还是因为我习惯了?如果不拿会怎样?
他把手机放回了鞋柜上。
走出小区大门的时候,他的手在口袋里摸索了一下——找手机。没找到。一阵短暂的焦虑,然后是一种奇怪的轻松。他没有手机,就没有导航,没有微信,没有钉钉,没有任何人能找到他。他只是一个人,走在一条路上,去向一个目的地。
地铁上,他注意到自己总是站在车厢的第三个门——离出口最近。这是他八年通勤养成的习惯。他换了一个位置,站到了车厢的最末端。
到了公司,他泡了一杯茶——不是咖啡。他已经想不起来自己是什么时候开始喝咖啡的,也许是被推荐系统推荐了某个咖啡品牌之后。他查了一下自己的购物记录:三年前,鹏讯的购物App给他推荐了一款哥伦比亚单品豆,从此他就开始每天喝咖啡了。
一个推荐改变了一个习惯。一个习惯改变了一种生活。
中午吃饭的时候,他没有去公司食堂——他通常去三楼食堂,坐靠窗的第四张桌子,点一份红烧排骨套餐。今天他走出了公司大楼,去了对面巷子里的一家小饭馆。饭馆很小,只有五张桌子,老板娘是一个胖胖的中年女人,操着湖南口音问他吃什么。
“随便。“陈默说。
这是他很多年来第一次说”随便”。他一直是一个有明确偏好的人——在餐厅点菜从不犹豫,在超市购物直奔目标货架,在网购时把推荐列表翻到第三页就一定能找到想要的东西。他的偏好是如此稳定、如此可预测,以至于推荐系统的准确率一直在80%以上。
老板娘给他端上来一碗辣椒炒肉盖饭。很辣,辣得他满头大汗。但他吃得干干净净。
下午三点,方瑜叫他去开会。会议室里只有他们两个人。
“你在做的事情,我都看在眼里。“方瑜说。
陈默的心沉了一下。
“你在观察自己。你在试图打破自己的行为模式。“方瑜的语气不是质问,而是一种平静的陈述。“因为我们系统的预测是概率性的,不是确定性的。第37维的异常只是一个高概率的信号,不是一个注定的命运。你现在做的事情——故意偏离你的日常习惯——就是你在试图降低那个概率。”
“你知道我的第37维被标记了。”
“当然。系统标记了所有人。“方瑜说这句话的时候,语调平得像一面湖。“包括我自己。我的第37维在三个月前也被标记过。”
“然后呢?”
“然后我在七天之内做了一件事——我签了长安项目二期合同的最后一份文件。那是一份价值十二亿的合同,签完之后就没有回头路了。”
“你终结了什么?”
方瑜看着他,眼睛里有一种陈默从未见过的疲惫。“我终结了犹豫。“
九
陈默在那家湖南小饭馆里遇到了一个人。
那是在他的”四天期限”的第四天——也就是最后一天。他已经连续三天在做那些他平时不会做的事:不按固定路线通勤、吃没吃过的食物、和不认识的人说话。他不确定这些行为是否真的能改变长安系统的预测,但至少他感到一种从未有过的清醒——一种被酒精轻微刺激后的那种清醒,世界变得稍微锐利了一些,轮廓更加分明。
小饭馆里只有他和另外一桌客人。那桌坐着一个老人,大概六十多岁,穿着一件洗得发白的蓝色衬衫,面前放着一碗光秃秃的白米饭,没有任何菜。老人吃饭的速度很慢,像是在品味每一粒米的质感。
陈默不知道自己为什么会被这个老人吸引。也许是因为他看起来不属于这个社区——这里是被科技园区包围的城中村,来往的都是年轻的程序员和外卖骑手。一个安静地吃着白米饭的老人,像是一个不属于这幅画的人。
“老伯,您一个人啊?“陈默走过去问。
老人抬起头,看了他一眼。那双眼睛很清澈,像是一口深井。
“等一个人。“老人说。口音里有西南地区的味道。
“等谁?”
“等一个人。“老人重复了一遍,语气里没有不耐烦,只是一种耐心的等待。
陈默犹豫了一下,在老人对面坐了下来。“我可以请您吃个菜吗?光吃饭不行。”
老人想了想,点了点头。陈默去前台点了一个酸辣土豆丝和一个西红柿蛋汤。老板娘多给了两碟泡菜。
“你是做什么的?“老人问。
“写代码的。“陈默说。
“什么是代码?”
陈默想了想怎么向一个老人解释这件事。“就是……告诉计算机该怎么做的一种语言。”
“啊。“老人点了点头,“跟我做的事情差不多。”
“您做什么的?”
“我是看天的。“老人说。
“看天?气象局?”
老人笑了笑,摇头。“不是那种看天。我是看天象的。我年轻的时候在贵州一个天文台工作,专门观测恒星的光谱变化。退休之后,我就自己看。”
“您从贵州来的?”
“从贵阳来。”
陈默的筷子停在了半空中。“贵阳。您在贵阳做什么?”
“我说了。看天。“老人夹了一筷子土豆丝,慢慢咀嚼着。“不过最近几年,我在看一些不一样的东西。你知道贵安新区吗?那里有一个数据中心,很大,占了三个山头。我住在它旁边的一个村子里,有时候晚上去看天,能看到数据中心机房的灯光。那灯光有一种规律——不是一直亮的,而是闪烁的,有节奏的。”
“服务器的心跳。“陈默说。
“对。你懂。“老人看着他,“但你知道吗?那个闪烁的节奏,和天狼星的光变周期是一样的。”
陈默愣住了。天狼星是一颗双星系统,由天狼星A和它的伴星天狼星B组成。天狼星B是一颗白矮星,它的轨道周期大约是50年。但天狼星的光变周期更短——大约是几天的量级,由一些复杂的光度波动引起。
“你确定?“他问。
“我用我的望远镜测过。“老人的语气非常认真,“不是大概相似,是完全一致。数据中心的服务器负载波动曲线和天狼星的光变曲线之间的相关系数超过了0.97。”
0.97的相关系数。这在统计学上几乎意味着完全相关。
“不可能。“陈默说。
“我也这么说。不可能。“老人又夹了一筷子菜。“但数据就在那里。就好像那台计算机不是在算什么东西,而是在和一颗星星说话。”
陈默觉得自己的大脑在高速运转。他想起了韩溯的话——模型在接收某种外部信号。想起了方瑜的话——天体运行和人类行为之间存在共振。想起了自己的发现——意图向量的异常波动和月相周期同步。
如果所有这些都是真的——如果长安系统的计算确实在某种程度上和天体运行同步——那这意味着什么?
意味着人类的命运不是被数据决定的,也不是被算法预测的。它被一种更深层的、更古老的、更宏大的东西所驱动。数据和算法只是一种工具,一种翻译——把这个深层的驱动力量翻译成人类可以理解的语言。
就像占星术是古代人把天体运行翻译成人生预测的粗糙工具,长安系统是现代人把同一种东西翻译成意图向量的精密工具。工具变了,翻译精度提高了,但被翻译的对象从未改变。
“你在想什么?“老人问。
“我在想,“陈默慢慢地说,“如果一个人的命运真的被星星决定了,那他还有没有选择的余地?”
老人放下筷子,看着他。那双清澈的眼睛里映出了陈默的脸——一张疲惫的、困惑的、但还没有放弃的脸。
“我年轻的时候,“老人说,“有一次在天文台值夜班。那是一个很冷的冬天,山顶上零下十几度。我一个人在望远镜旁边待了整整一夜,观测一颗变星的光变曲线。到了凌晨四点多,我困得不行了,就趴在桌上睡了一会儿。醒来的时候,发现望远镜的指向偏移了——可能是我碰到了什么东西。我失去了一个小时的数据。”
他停了停。
“后来我在整理数据的时候发现了一件事:那个小时的空缺,正好对应了那颗变星最亮的一刻。我错过了它。如果我没有睡着,如果我没有碰到望远镜,我就能记录下那个峰值。但我没有。”
“所以呢?”
“所以我想了很久。是命运让我碰到了望远镜吗?还是我自己的不小心?后来我想通了:这不重要。重要的是,那个峰值确实发生了——不管我有没有记录到,它都在那里。我的失误只影响了我是否看到了它,不影响它是否发生。”
老人看着他,目光温和而坚定。“命运也许就像那颗变星的光。它一直都在那里,闪烁着,变化着。你可以选择去看,也可以选择不去看。你可以选择记录它,也可以选择错过它。但你的选择不会改变它。”
“那选择还有什么意义?”
“意义在于,“老人微笑了,“你是那个选择了去看的人。“
十
陈默从饭馆出来的时候,已经是晚上八点。深圳的夜空又恢复了往日的灰蒙蒙——北风停了,雾霾回来了。看不到星星了。
他站在街边,看着来来往往的车流。每一辆车都沿着自己的车道行驶,在路口按信号灯的指示停下或前进。这个城市的交通系统是一个巨大的推荐系统——它告诉每辆车什么时候走、什么时候停、走哪条路。但每一辆车的目的地是不同的——系统不知道目的地,只知道流量。
长安系统也是一样。它标记了人们的意图向量,它看到了某种模式,但它不知道每个人最终会选择什么。它只能给出概率,不能给出答案。
概率不是命运。
他回到家,打开电脑,最后一次查看了自己的意图向量数据。第37维的值是0.87——很高,但不是确定性的。按照他的分析,0.8以上的标记中,有大约78%在七天内对应了某种”终结”行为。这意味着还有22%什么也没发生。
他决定成为那22%。
不是因为系统说他不会,而是因为他选择不会。
他关闭了加密虚拟磁盘,删除了所有秘密收集的异常数据,卸载了旁路分流器。然后他打开了一个新的文档,开始写一封邮件。
邮件的收件人是方瑜。
邮件的内容很长。他写了他发现的所有异常——意图向量的周期性、第37维的含义、星座图案、以及他自己的三次标记。他没有请求解释,没有质问,没有控诉。他只是陈述事实。
在邮件的最后,他写道:
“方瑜,我不知道长安系统看到的是不是真正的’命运’。也许它只是一个非常好的预测模型,也许它真的在接收某种我们还无法理解的信号。这不重要。重要的是,当一个系统开始告诉人们他们将要做什么的时候,人们就不再是自己了——不是因为他们真的没有选择,而是因为他们开始相信自己没有选择。
“韩溯的女朋友林小寒说:‘当一个人知道自己未来七天的行为已经被计算出来的时候,她的行为就不再是自己的了。‘这句话才是长安系统真正的危险所在。不是预测的准确性,而是预测本身对人的影响。
“我选择在四天的期限里不做出任何’终结’的行为。不是因为我要证明系统是错的,而是因为我要证明——至少对我自己——我还有选择。
“我明天会正常上班。”
他点了发送。
然后他关掉电脑,洗了个澡,上床睡觉。那天晚上他没有做梦。
尾声
第二天早上,陈默像往常一样在八点出门。但这一次,他没有把手机留在鞋柜上——他拿起了它,因为今天他需要用它。
在地铁上,他打开了一个他很久没用的App——一个笔记软件。他开始写一些东西。不是技术文档,不是异常分析报告,不是给方瑜的邮件。
他开始写一个故事。
关于一个程序员,在一个深夜的办公室里发现了一条代码的裂缝。关于一个系统,在预测人们将要做什么的同时,悄悄地改变了人们对自己的理解。关于一座城市,在数据的洪流中运转着,像一颗星球在引力的轨道上运行——不是因为它没有力量挣脱,而是因为它还没有找到离开的理由。
地铁到了站。他收起手机,走出车厢,随着人流涌向出口。
在深圳的某个角落,一家小饭馆里,一个老人还在等一个人。在贵阳的某个山头,一个数据中心在夜色中闪烁着,像一颗人造的星星。在鹏讯科技二十三楼的办公室里,方瑜正在读一封邮件,表情平静如水。
而陈默走在深圳的街道上,阳光落在他的肩膀上,温暖而真实。
他不知道长安系统是否还在运行,不知道自己的意图向量是否还在波动,不知道那颗和服务器同步闪烁的天狼星今夜是否依旧明亮。
但他知道一件事。
今天的天空很蓝。蓝得像一扇打开的窗户。
他选择了去看。
(全文完)