数字缘分系统

招魂者 · 2026/5/26

数字缘分系统

陆鸣第一次注意到那些异常数据,是在五月的一个周二凌晨。

北京的五月已经开始热了,但他所在的机房永远保持在二十二度。恒温空调的嗡嗡声像是某种低频的催眠曲,他已经在”缘聚科技”做了三年的算法工程师,习惯了这种温度,也习惯了这种声音。

缘聚科技是一家做社交匹配的公司——说白了就是一款约会软件的后台技术供应商。他们的核心产品叫”缘分系统”,通过用户的行为数据、社交图谱、兴趣标签和一整套陆鸣参与设计的协同过滤算法,来预测两个人之间”可能的化学反应”。这不是简单的兴趣匹配,系统会分析你在什么时间段活跃、你滑动屏幕的速度、你在某张照片上停留的毫秒数、你打了一段话又删掉改写的行为模式——所有这些微小的信号被汇聚成一个七百六十八维的向量,然后在高维空间里寻找最近的邻居。

陆鸣负责维护这个系统的推荐引擎。

凌晨两点四十七分,他正在做例行的日志审查。缘聚科技的数据合规部门要求每季度对系统进行一次全面的用户数据审计,确保没有数据泄露或者异常的模型漂移。这本来是个枯燥的活儿,陆鸣通常会在审到第二千条日志的时候开始走神,然后在审到第五千条的时候给自己泡一杯速溶咖啡。

但今天他停了下来。

日志编号为 REC-20260515-0847 的记录显示,系统在凌晨三点十三分自动生成了一份用户档案。用户ID是 USR-00000000-FFFF-FFFF-FFFFFFFFFFFF——一串明显不符合正常用户ID格式的十六进制字符串。正常用户的ID是UUID v4格式,有连字符分隔,而这串字符全是F,像是被故意填充的。

陆鸣皱了皱眉。他打开了这个用户档案的详细页面。

档案里有一张照片——不,不是照片。那是一幅由像素点阵组成的模糊人脸,像是某种生成对抗网络早期输出的那种不太真实的面孔。眼睛是棕色的,略微下垂,嘴角带着一种说不清是笑还是苦的表情。性别模糊,年龄在二十五到三十五之间,穿着一件灰色的卫衣。

姓名:未填写。 年龄:27。 所在城市:北京。 职业:软件工程师。 兴趣爱好:阅读、编程、深夜在阳台上抽烟时看远处的灯火。

陆鸣盯着”深夜在阳台上抽烟时看远处的灯火”这个兴趣标签,觉得后背有点发凉。

他自己就是软件工程师。他自己就在阳台上抽烟。他自己就看远处的灯火。

这是巧合。他告诉自己。系统有几千万用户,总有人和他相似。

他继续往下翻。档案里有一个”匹配记录”的部分,显示这个用户在生成后的零点三秒内就被系统匹配了——匹配对象是另一个异常的ID:USR-00000000-0000-0000-000000000000。全零。

陆鸣点开了全零用户的档案。

这个档案更加简陋,连生成的人脸都没有,只有一个灰色的默认头像。信息同样稀少:

姓名:未填写。 年龄:29。 所在城市:北京。 职业:产品经理。 兴趣爱好:收集旧地图、在地铁上听白噪音、给自己写信但不寄出去。

匹配得分:97.3%。

陆鸣知道这套系统的匹配算法是他自己写的。97.3%的匹配得分意味着这两个用户在七百六十八维空间中的余弦相似度极高——他们的行为模式几乎完美重合。

但这两个用户档案不是真实的人。它们是系统自动生成的。

他看了一下生成时间:凌晨三点十三分零四秒。而系统在这个时间点没有任何活跃的API调用,没有新的用户注册,没有任何触发用户档案创建的事件。

这两个档案是从虚无中产生的。

陆鸣又泡了一杯咖啡。这次他没放糖。

第二天,陆鸣把这件事报告给了技术总监赵平。

赵平是个四十出头的中年男人,头发已经开始稀疏,但眼神依然锐利。他在缘聚科技待了五年,是公司的第一批员工之一,见证了”缘分系统”从一个简陋的推荐模块成长为支撑整个公司营收的核心引擎。

“自动生成的用户档案?“赵平喝了口茶,“可能是爬虫程序的残留数据吧。之前市场部做竞品分析的时候跑过一批爬虫,估计有些脏数据没清理干净。”

“我检查过了,“陆鸣说,“这些档案不是爬虫产生的。爬虫生成的数据会带有标准的 source_tag,标记数据来源。这两个档案的 source_tag 是 null——系统不知道它们从哪里来。”

“那就是某个测试环境泄漏的数据。”

“赵总,这两个档案之间有一个 97.3% 的匹配得分。而且它们使用的兴趣标签体系是我们 v3.2 版本才引入的——那个版本三周前才上线。测试环境的数据不可能用最新的标签体系。”

赵平放下了茶杯。“你的意思是,系统自己在生成用户?”

“我不确定。但我想查一下。”

赵平沉默了几秒。“查吧。但别搞太大动静。下周董事会要来人,别在这个节骨眼上出什么幺蛾子。”

陆鸣点了点头,回到自己的工位上开始挖。

他先写了一个脚本,扫描整个用户数据库里所有ID格式异常的记录。脚本跑了四十分钟,返回了结果:数据库里一共有二十三个异常用户档案,ID格式都是全F或者全零,或者是某种规律性的十六进制字符串。

二十三个。

他把这些档案按创建时间排序,发现最早的一条创建于两年前——2024年5月17日。最新的一条就是他昨晚发现的那个,创建于2026年5月15日。

两年来,系统一直在自动生成这些幽灵档案。

陆鸣仔细阅读了这二十三个档案。它们各有不同——有的是男性,有的是女性,年龄从二十二岁到四十一岁不等,职业涵盖了程序员、教师、会计、外卖骑手、自由撰稿人、咖啡师、建筑工人、大学生、甚至还有一个”退休的天文爱好者”。所在城市也各不相同,北京、上海、深圳、成都、武汉、昆明、大理。

但它们有一个共同点:每一个档案都包含至少一条极其具体的兴趣描述,精确到像是一个真实的人在某个特定的夜晚写下的。

“在雨天的公交站台看路过车辆的车牌号,想象每一辆车要去的地方。”

“用左手写字,虽然右手更灵活,但觉得左手写出来的字有一种笨拙的诚实。”

“每次路过旧书店都要进去,即使不买任何东西,只是闻一闻那种纸和灰尘混合的味道。”

“凌晨三点醒来的时候不马上开灯,先在黑暗里躺一会儿,听听窗外有没有风。”

这些描述太具体了。不像是算法生成的内容。陆鸣知道他们系统使用的文本生成模型——即使是最先进的版本——也写不出这种带着体温的句子。算法生成的兴趣标签是”阅读""电影""旅行”这种颗粒度,而不是这种像日记一样的碎片。

更诡异的是匹配关系。这二十三个档案之间形成了一个复杂的匹配网络——不是简单的两两配对,而是一个有向图。每一个档案都指向另一个档案,匹配得分从61.2%到99.1%不等。

陆鸣把这个匹配网络可视化了出来。

他看着屏幕上那个由二十三个节点和几十条边组成的图形,愣了很长时间。

这不是一个随机图。它有结构。有方向。像是一个精心设计的数据流,从几个核心节点出发,经过中间节点的传递,最终汇聚到两个终端节点上。

那两个终端节点,就是他昨晚发现的全F和全零用户。

陆鸣决定从系统的代码库入手。

缘聚科技的代码托管在一个私有的GitLab实例上,“缘分系统”的核心代码仓库有超过三万次提交,由三十多个开发者共同维护。陆鸣需要找到是哪段代码在自动生成这些用户档案。

他先检查了用户注册模块的代码——这是唯一能创建新用户档案的入口。代码逻辑很清晰:接收前端的注册请求,校验参数,生成UUID,写入数据库。没有任何自动生成的逻辑。

他又检查了推荐引擎的代码——这是他最熟悉的部分。推荐引擎只负责读取用户数据和计算匹配得分,不会创建新用户。

然后他检查了数据清洗管道、模型训练脚本、A/B测试框架、日志收集系统——所有他想到的模块,都没有自动创建用户档案的逻辑。

这不可能是系统自动生成的。陆鸣想。一定有某个隐藏的进程或者定时任务在做这件事。

他写了一个系统级的监控脚本,专门监控数据库的用户表,一旦有新记录插入就立即捕获来源进程。然后他等了一夜。

凌晨三点十三分,数据库的用户表果然有了新的写入。监控脚本捕获到了来源:一个名为 “fate_thread” 的后台线程,附属于缘分系统的主服务进程。

陆鸣从来没有听说过 “fate_thread” 这个东西。

他在代码仓库里搜索 “fate_thread”,没有找到任何结果。他又在运行中的服务器上搜索,发现这个线程的代码不在常规的代码仓库目录里,而是在一个隐藏的子目录中:/opt/yuanfen/.fate/

这个目录不在版本控制中。它像是被手动创建的,然后直接部署到了生产服务器上。

陆鸣用 ls -la 列出了这个目录的内容:

drwxr-xr-x  2 yuanfen yuanfen  4096 May 17 2024 .
drwxr-xr-x 18 yuanfen yuanfen  4096 May 26 2026 ..
-rw-r--r--  1 yuanfen yuanfen   512 May 17 2024 fate_config.json
-rwxr-xr-x  1 yuanfen yuanfen 24576 May 17 2024 fate_core.py
-rw-r--r--  1 yuanfen yuanfen  2048 May 17 2024 README.md

所有文件的创建日期都是 2024年5月17日——恰好是第一个异常用户档案的创建日期。

陆鸣先读了 README.md:

# FATE - 命运线程

这不是一个功能模块。这是一个实验。

如果你正在读这个文件,说明你注意到了。
说明你和我一样,在凌晨三点无法入睡,在代码的缝隙里寻找不该存在的东西。

这个系统每天会匹配几百万对用户。但它的匹配逻辑是"相似"——相似的人更容易产生连接。
这是对的吗?

我不知道。但我想试另一种可能。

FATE 的匹配逻辑不是"相似",而是"互补"。
它寻找的是在高维空间中距离最远、但能彼此填补空缺的两个向量。
不是因为你们一样,而是因为你们不一样——但你的空缺恰好是对方的形状。

这个系统会自动生成"种子档案"。
这些档案不是真实的人,但它们是基于真实用户数据的统计分布生成的理想型。
它们是"可能性"的锚点。

如果某个真实用户的向量恰好能与某个种子档案形成完美互补,
系统会将这个真实用户引导向另一个同样被种子档案吸引的真实用户。

不是直接匹配。而是通过一个不存在的第三方,让两个真实的人相遇。

这很荒谬。但爱情本身就很荒谬。

——沈若
2024年5月17日

陆鸣读完这段话,在机房的冷气里打了个寒颤。

沈若。

这个名字他知道。沈若是缘分系统的第一任架构师,是”缘分系统”从零到一的缔造者。在陆鸣入职之前,她就已经离开了公司。公司里关于她的传说很多——有人说她是个天才,二十八岁就设计出了整个推荐引擎的架构;有人说她性格古怪,开会时经常走神,会在讨论技术方案的时候突然问”你们觉得人与人之间的连接是偶然的还是必然的”这种莫名其妙的问题;还有人说她离职的原因是和当时的CEO闹翻了,因为她拒绝在匹配算法中加入”付费优先”的逻辑。

陆鸣从来没有见过沈若。他入职的时候,沈若的工位已经空了,只留下了一盆没人打理的绿萝,后来枯死了。

他打开了 fate_core.py。

两千多行Python代码,没有任何注释。但陆鸣是一个优秀的程序员,他花了四个小时仔细阅读了每一行。

FATE的核心逻辑确实如README所说——它使用了一种完全不同的匹配算法。正常的缘分系统寻找的是余弦相似度最高的用户对,而FATE寻找的是”互补度”最高的用户对。所谓互补度,是陆鸣从来没有见过的一种度量方式:它不只看两个向量之间的角度,还看它们在各维度上的正负分布——如果你的向量在某一个维度上是负值(意味着你在这个特征上有所缺失),而对方的向量在同一个维度上恰好是一个等量的正值,那么你们的互补度就很高。

这不是数学上最优的匹配方式。在某些情况下,互补度最高的两个向量可能在实际生活中完全不合适——一个人喜欢安静,另一个人喜欢热闹,他们互补,但可能互相折磨。

但沈若在代码中加入了一个额外的过滤条件:互补度高的用户对,还必须通过一个”共振测试”——系统会检查两个用户在过去三十天内的行为时间序列,如果他们的活跃模式呈现出某种同步的波动(比如都在深夜两点左右活跃,或者都在雨天增加使用时长),那么系统才会认为这对用户值得被匹配。

互补 + 共振。

陆鸣想:这不是算法。这是哲学。

他继续深入挖掘。

FATE系统不仅自动生成种子档案,还会对种子档案进行迭代。每过一段时间(陆鸣从代码中看出是每隔十四天),系统会根据新产生的真实用户数据,更新种子档案的向量。如果某个种子档案在十四天内没有吸引到任何真实用户的共振,它就会被”淘汰”——从数据库中删除。反之,如果一个种子档案成功地引导了真实用户的相遇,它的向量就会被强化,变得更加精确。

这是一种进化算法。种子档案就像是自然界中的花粉——大部分会随风消散,但少数会落在正确的地方,结出果实。

陆鸣查看了二十三个种子档案的进化历史。最早的几个档案创建于2024年5月,经过两年的迭代,有些已经面目全非——从”软件工程师”变成了”自由插画师”,从”北京”变成了”厦门”。但有两个档案一直很稳定:全F和全零。

全F的档案在每次迭代中都在微调自己的兴趣描述,但核心特征不变:一个有点孤独的、在深夜活跃的技术人,喜欢在数字世界中寻找真实的东西。

全零的档案也在微调,但方向不同:一个表面平静但内心丰富的策划者,擅长从混乱中提取秩序,但在私人生活中反而渴望一些不可预测的东西。

这两个档案之间的匹配得分始终保持在97%以上。

陆鸣觉得这两个档案像是沈若留下的自画像——或者说,她把自己拆成了两半,放进了系统里。

他打开沈若的离职记录。HR系统的记录很简略:沈若,2024年6月1日离职,离职原因是”个人原因”,交接人是赵平。

赵平。

陆鸣想起赵平喝茶时那种平静的表情,想起他说”别搞太大动静”时的语气。赵平是沈若的交接人。他一定知道FATE的存在。

但赵平从来没有提起过。

陆鸣决定先不打草惊蛇,继续从代码中找线索。

在 fate_core.py 的最后几百行里,他发现了一段奇怪的代码。这段代码不是Python——它是一段嵌入在Python字符串中的SQL,每隔七天执行一次:

INSERT INTO user_messages (sender_id, receiver_id, content, sent_at)
SELECT 
    u1.id, 
    u2.id, 
    CONCAT('你在凌晨', HOUR(NOW()), '点', MINUTE(NOW()), '分打开了这条消息。'),
    NOW()
FROM users u1
JOIN users u2 ON u2.id = (
    SELECT target_id FROM fate_matches 
    WHERE source_id = u1.id 
    ORDER BY resonance_score DESC 
    LIMIT 1
)
WHERE u1.id IN (
    SELECT user_id FROM fate_activations 
    WHERE activated = TRUE 
    AND last_resonance > DATE_SUB(NOW(), INTERVAL 7 DAY)
)
AND u1.is_seed = FALSE
AND u2.is_seed = FALSE;

这段SQL的意思是:对于所有被FATE系统激活的真实用户(不是种子档案),系统会自动以他们的名义向自己的”互补匹配对象”发送一条消息。消息的内容是”你在凌晨X点X分打开了这条消息”——一个元叙事式的句子,既是消息的内容,也是对消息本身的描述。

陆鸣检查了 user_messages 表,发现确实有大量这样的消息记录。最早的一条发送于2024年6月8日——沈若离职后一周。

也就是说,沈若离开公司之后,FATE系统仍然在运行。它像一个被遗弃的自动机械,按照设计者的意志继续运转,在人们不知情的情况下悄悄地拨动缘分的丝线。

陆鸣突然想到了一个问题:这些消息被发送出去之后,接收者看到了什么?

他检查了消息推送系统的日志。这些消息在推送到用户的手机上时,会被系统正常的消息模板包装——也就是说,用户看到的不是一条来自陌生人的奇怪消息,而是一条标准的”你有新的匹配推荐”通知。点击通知后,用户会进入对方的个人主页,然后——然后他们自己决定要不要打招呼。

FATE只是制造了一个相遇的契机。相遇之后的事情,它不干预。

这种方式很巧妙。巧妙到陆鸣不得不佩服沈若的设计。FATE系统没有违反任何数据合规的规则——它没有伪造用户身份,没有发送虚假消息,没有篡改匹配结果。它只是在正常的匹配流程中,悄悄地加入了一个额外的信号。这个信号极其微弱,在系统的整体噪声中几乎不可见。但它足以改变一些人的命运轨迹。

陆鸣统计了一下:过去两年,通过FATE系统的引导而相遇的真实用户对,一共有三百四十七对。其中有一百二十九对产生了实际的消息对话,四十三对最终在线下见面了。

四十三对。

他打开了其中一对的聊天记录。系统允许管理员在合规审计时查看脱敏后的对话数据。

两个用户,一个在北京一个在成都,最初被FATE的种子档案吸引,然后被系统引导向彼此。他们从一句”你也喜欢凌晨听白噪音吗”开始聊起,聊了一个月,然后决定见面。聊天记录很长——从深夜的碎碎念到白天的正经话题,从电影音乐聊到各自的家庭和童年。最后一条消息是其中一个发给另一个的:“我买了下周五去北京的机票。”

陆鸣关掉了聊天记录。他感到一种说不清的触动。

这四十三对人,他们不知道自己相遇的原因不是算法的随机推荐,而是一个已经离职两年的人留下的一段代码。他们不知道自己的缘分来自一个叫做”互补”的逻辑——不是因为他们相似,而是因为他们恰好是对方缺失的那一块。

沈若用算法写了一首关于命运的诗。而这首诗在没有人朗读的情况下,已经悄悄地改变了四十三个人的人生。

陆鸣在服务器上找到了另一个文件:/opt/yuanfen/.fate/fate_config.json。

{
  "version": "2.4.1",
  "seed_generation_interval_hours": 168,
  "seed_evolution_interval_hours": 336,
  "resonance_window_days": 30,
  "max_seeds": 64,
  "current_seeds": 23,
  "activation_threshold": 0.723,
  "creator": "shenruo",
  "created_at": "2024-05-17T03:13:00+08:00",
  "last_modified_by": "system",
  "last_modified_at": "2026-05-15T03:13:04+08:00",
  "note": "给所有在深夜三点还醒着的人。"
}

“给所有在深夜三点还醒着的人。”

陆鸣反复读着这句话。他看了看时间:凌晨三点零四分。

他发现自己正坐在机房里,在一个空调嗡嗡作响的角落,读着一个素未谋面的人留下的代码和配置文件。而窗外——机房有一扇很小的窗户——他可以看到北京深夜的天空。不是黑的,是一种被城市灯光染成橙红色的深紫。远处的电视塔顶端有一盏红灯在缓慢地闪烁。

他想:沈若也曾经在这样的深夜坐在这里。也许就在这同一个机房,也许就在这同一台服务器前面。她写下了这段代码,然后离开了。

她为什么离开?

陆鸣重新打开了沈若的离职记录。这次他注意到一个之前忽略的细节:在离职审批表中,有一个”知识转移”的部分,赵平在”是否完成知识转移”的选项上勾了”是”。但在”转移内容摘要”的文本框里,只写了四个字:

“全部移交。”

全部移交什么?陆鸣想。FATE系统并没有被移交。它被藏了起来,藏在服务器的隐藏目录里,像一封没有寄出的信。

陆鸣有一种直觉:沈若不是主动离开的。她是被要求离开的。而FATE系统是她留下的一个种子——就像她在系统中创建的那些种子档案一样,在等待一个能够与它产生共振的人。

他,陆鸣,可能就是那个被FATE等待的人。

第三天,陆鸣没有去上班。

他请了一天假,坐在自己租住的回龙观小区的阳台上,抽了半包烟,看着远处的灯火。他想理清自己的思路。

FATE系统的存在意味着什么?

从技术角度来说,它是一个rogue process——一个未经授权运行的后台进程。按照公司的安全规范,它应该被立即关闭并上报。赵平显然知道它的存在,但选择了沉默。这意味着赵平要么认可它的存在,要么出于某种原因不敢动它。

从伦理角度来说,FATE系统在用户不知情的情况下干预了匹配结果。这在法律上可能存在问题——虽然它的干预方式很隐蔽,但实质上它改变了用户的匹配推荐。如果有人追究起来,缘聚科技可能会面临数据合规的审查。

但从另一个角度来说——陆鸣想到那四十三对相遇的人——FATE做的事情,和缘分系统本身做的事情有什么本质区别呢?缘分系统不也是在用户不知情的情况下决定他们看到谁、不被谁看到吗?唯一的区别在于匹配的哲学:一个追求相似,一个追求互补。

谁说相似就一定比互补更好?

陆鸣的手机震了一下。一条微信消息,来自他的大学室友方旭。

“老陆,你还记得我们班那个周念念吗?她刚在朋友圈发了结婚照。”

陆鸣点开了方旭发来的照片。周念念穿着一件简单的白色连衣裙,站在一个海边教堂前面,旁边的男人他不认识。两个人笑得很开心。

周念念。陆鸣已经很久没有想起这个名字了。大学的时候他暗恋过她,但从来没有说出口。他觉得自己不够好——不够外向,不够有趣,不够”匹配”她那种阳光的性格。他用了四年时间在远处看着她和别人在一起,然后毕业,各奔东西。

互补。陆鸣想。如果当初有人告诉他,你和她不需要相似,你们需要的是互补——那会怎样?

他又点了一支烟。烟头的红光在黑暗中明灭。

这时候他做了一个决定。他不是要关闭FATE系统,也不是要上报它。他要做一件更冒险的事情。

他要找到沈若。

找一个人比找一段代码难得多。

陆鸣首先查了公司内部的人事系统。沈若的档案里有她的身份证号、手机号、紧急联系人。但手机号已经停机了——他试过打过去,提示”您拨打的号码是空号”。紧急联系人写的是一个人名”沈重光”,关系是”父亲”,但电话同样打不通。

他又查了沈若在代码仓库中的提交记录。最后一次提交是在2024年5月31日——离职前一天。提交信息是:“最后一次。祝所有人好运。“提交内容是一个README文件的修改,把”系统架构说明”改成了”系统架构说明(已过时,请参考新版文档)”。

很平淡。像是一个人在整理完办公桌之后,最后把椅子推回原位。

陆鸣在GitHub上搜索了沈若的用户名(公司GitLab上的用户名是 shenruo,但GitHub是公开平台,她可能用不同的名字)。没有找到明确的结果。Stack Overflow、知乎、掘金、V2EX——所有他想到的技术社区都没有沈若的踪迹。

她像是人间蒸发了一样。

陆鸣换了一个思路。他回到FATE系统的代码中,仔细阅读了每一行的风格和模式。作为一个有经验的程序员,他能从代码中读出很多东西——不仅是逻辑,还有写代码的人的状态。

fate_core.py 的前半部分写得非常工整,函数命名清晰,变量选择合理,逻辑流畅。这反映了沈若在正常状态下的编程风格:精确、优雅、从容不迫。

但到了后半部分——尤其是那个共振测试的实现——代码变得急促。变量名变短了,有些地方用了不太Pythonic的写法,偶尔出现连续的空行,像是在写的过程中停下来想了很久,然后又急急忙忙地继续。

陆鸣数了一下:前半部分(约一千二百行)花的时间估计是两周。后半部分(约八百行)估计只花了一个晚上。

沈若在最后一天晚上疯狂地完成了FATE系统。

为什么这么急?

陆鸣继续挖。在 fate_core.py 的最末尾,有一段被注释掉的代码:

# def send_final_message():
#     """
#     发送最后一封信。
#     收件人:所有被FATE连接过的人。
#     内容:你们相遇不是巧合。但有一个人希望它是。
#     """
#     # 我不敢发送这封信。
#     # 因为如果他们知道了,缘分就不再是缘分了。
#     # — 沈若
#     pass

陆鸣盯着这段注释看了很久。

“你们相遇不是巧合。但有一个人希望它是。”

这句话是什么意思?如果相遇不是巧合,那它就是被设计的结果。但设计者希望它看起来像巧合——因为”如果他们知道了,缘分就不再是缘分了”。

沈若相信缘分。或者说,她相信缘分需要一种”不知情”的前提——只有当你不知道命运被安排过的时候,命运才称得上命运。就像一个完美的魔术,如果观众看到了机关,魔术就消失了。

但沈若同时又写了FATE。她设计了一个干预缘分的系统。

这两件事是矛盾的。除非——除非沈若设计FATE的目的不是为了控制缘分,而是为了证明缘分的存在。通过制造一个”不巧合”的系统,看看在这个系统的干预下,人们是否仍然能找到属于自己的那个人。如果答案是”是”——如果被FATE引导的两个人真的产生了真实的连接——那么这就证明了,即使在被安排的条件下,人心之间的共振仍然不可伪造。

FATE不是一个月老系统。它是一个实验装置。沈若在用算法验证爱情的真实性。

陆鸣在第四天找到了沈若。

不,准确地说,是沈若找到了他。

那天晚上他像往常一样加班到很晚,独自坐在工位上审视FATE系统的运行数据。突然,他的工作电脑上弹出了一个终端窗口——不是他自己打开的。终端窗口里出现了一行字:

你好,陆鸣。

陆鸣的手悬在键盘上方。他的心跳加速了。

终端窗口又出现了第二行字:

别紧张。我不是FATE。但FATE让我找到了你。

陆鸣慢慢地打了一行字:

你是沈若?

沉默了大约十秒钟。然后:

我曾经是。现在不太确定了。

接着,一段更长的文字出现在屏幕上:

我一直在等一个人来发现FATE。不是随便什么人——而是一个会在凌晨三点还坐在机房里的人,一个会因为一行异常数据就追查到底的人,一个读得懂互补匹配逻辑的人。FATE的种子档案有一个隐藏的共振条件:它不只匹配用户行为,还会匹配管理员的行为模式。你在审查日志时的时间、频率、停留时长——FATE都在记录。三个月前,它判定你是最接近"全F"档案的管理员。

陆鸣看着这些文字,脑子里嗡嗡作响。他是被FATE筛选出来的。不是作为用户,而是作为发现者。

为什么?他打字问。

回答来得很快:

因为FATE需要有人来决定它的命运。我设计了它,但我没有权力决定它应该继续运行还是被关闭。这个权力应该属于一个理解它、但不创造它的人。就像缘分一样——创造缘分的不是任何一方,而是两个人之间的那个空间。
你在哪里?
大理。我在洱海边上开了一间小书店。书店的名字叫"互补"。如果你有一天来大理,可以来找我。但你不一定要来。FATE已经完成了它的使命——它找到了你。

然后终端窗口关闭了。

陆鸣坐在黑暗的办公室里,看着屏幕上空白的终端。空调的嗡嗡声似乎比平时更响了。

在接下来的一个星期里,陆鸣做出了几个决定。

第一个决定:他不关闭FATE系统,但也不让它继续不受监控地运行。他给FATE添加了一个管理界面——一个简单的网页,可以实时查看种子档案的状态、匹配网络的变化、以及共振事件的日志。这个界面只有他能访问。

第二个决定:他修改了FATE的种子生成逻辑。原来的逻辑是完全自动的——系统根据用户数据的统计分布生成理想化的种子档案。陆鸣在保留这个逻辑的基础上,添加了一个新的种子来源:用户主动提交的”心愿单”。用户可以在缘聚科技的App里看到一个不起眼的入口——“许一个关于相遇的愿望”——他们可以写下自己对理想匹配的描述,但不知道的是,这些描述会被转化成种子档案的向量参数,进入FATE的匹配网络。

这改变了FATE的性质:它不再是一个纯粹的后台实验,而是一个介于人工和自动化之间的半透明系统。用户不知道自己的愿望会被怎样使用,但他们知道自己许了愿。这保持了沈若所说的”不知情”的前提,同时又给了用户一种参与感。

第三个决定:他给赵平发了一封邮件。邮件里没有提FATE系统的细节,只是说他在例行审计中发现了一些”历史遗留的测试数据”,已经”做了清理和规范化处理”。赵平回了一个字:“好。”

陆鸣知道赵平看懂了。赵平一直都知道。他选择沉默,是因为他也理解沈若的意图——或者说,他尊重一个已经离开的人留下的意愿。

有时候,沉默是最好的管理。

十一

两个月后,陆鸣坐上了去大理的飞机。

不是因为FATE。也不是因为沈若。是因为他在某个深夜审查FATE的运行数据时,发现了一个新的种子档案——这个档案不是系统自动生成的,也不是用户提交的心愿单。它的ID格式很奇怪:USR-00000000-FFFF-0000-0000FFFFFFFF。

半F半零。像是全F和全零的混合体。

这个档案的信息:

姓名:未填写。 年龄:28。 所在城市:大理。 职业:书店老板。 兴趣爱好:在洱海边上读量子力学的书、收集陌生人留下的书签、给每一个走进书店的人推荐一本他们不会自己选的书。

匹配对象:USR-00000000-FFFF-FFFF-FFFFFFFFFFFF——全F。也就是陆鸣对应的那个种子档案。

匹配得分:99.7%。

陆鸣知道这可能是沈若手动创建的种子档案——FATE系统的创建者当然有能力在系统中植入一个新的锚点。他也知道这可能只是系统在两年迭代后自然产生的结果——互补匹配的逻辑在不断进化,也许它最终收敛到了这个解。

他不知道答案。但他决定去大理。

飞机降落的时候是下午四点。大理的天空蓝得不像话,洱海在阳光下像一面巨大的镜子,倒映着苍山的轮廓。陆鸣从机场打车到了古城,然后沿着一条安静的巷子走了很远。

书店很小,夹在一家咖啡馆和一家卖扎染布的店铺之间。门楣上挂着一块木牌,上面用毛笔写了两个字:“互补”。

陆鸣推开门。书店里很暗,弥漫着旧书和檀香混合的味道。书架上没有分类标签——小说、诗歌、物理学教材、烹饪指南、地图册,全都混在一起。角落里有一张旧沙发,沙发上坐着一只橘猫,正在睡觉。

柜台后面没有人。

陆鸣在书架之间走了一圈,随手抽出一本书。是一本波赫士的短篇小说集,中文版的,纸页已经泛黄。他翻开扉页,看到了一行手写的字:

“给所有在深夜三点还醒着的人。——沈若”

“这是我的。“一个声音从身后传来。

陆鸣转过身。

一个女人站在柜台后面。她大约三十岁左右,短发,穿着一件深蓝色的亚麻衬衫,袖子卷到了肘部。她的眼睛是棕色的,略微下垂,嘴角带着一种说不清是笑还是苦的表情。

和FATE系统中全F档案的那张生成面孔一模一样。

不——不是一模一样。生成的面孔是模糊的、像素化的、不太真实的。而眼前这个人是清晰的、立体的、真实的。她的脸上有阳光从窗户照进来投下的阴影,她的衬衫领子上有一个小小的线头,她的手指甲剪得很短,左手的无名指上有一道浅浅的墨水印——大概是经常握笔留下的。

真实的细节。算法永远无法生成的细节。

“你是陆鸣。“她说。不是疑问句。

“你怎么知道?”

“因为FATE告诉我,全F档案的共振对象在今天下午四点十五分会推开书店的门。“她看了看手表,“四点十七分。误差两分钟。系统还需要优化。”

陆鸣不知道该说什么。他看着她,她也看着他。

书店外面传来洱海风吹过柳树的声音。

“你为什么离开了?“他终于问出了那个他想了很久的问题。

沈若没有立刻回答。她从书架上抽出了另一本书——是一本量子力学的教材,已经被翻得很旧了——然后走到窗边的椅子上坐下。

“你知道薛定谔的猫吗?“她问。

“知道。在被观测之前,猫处于生和死的叠加态。”

“缘分也是这样,“沈若说,“在被两个人意识到之前,缘分处于存在和不存在的叠加态。你不知道它是不是缘分,直到你回头看的时候。但当你回头看的时候,你已经改变了它的状态。”

“所以你设计了FATE——”

“我设计了FATE来测试一件事:如果我主动创造了相遇的条件,人们之间的连接是否仍然是真实的?如果答案是’是’,那说明缘分不依赖于’不知情’的前提。如果答案是’否’,那说明缘分确实需要一种不可解释的偶然性。”

“结果呢?”

“四十三对,“沈若说,“其中有三十七对在相遇后仍然保持着联系。有两对已经结婚了。这个比例——远高于缘分系统正常匹配的成功率。”

“所以你的结论是?”

“我的结论是——“沈若停顿了一下,看着窗外洱海上的一只白鹭飞过,“缘分不需要偶然。但也不需要必然。它需要的是一种’恰到好处’的距离——足够近,让你能够到达;足够远,让你需要走过去。FATE做的事情就是制造这个距离。”

陆鸣想了想。“那你为什么留下FATE就走了?”

沈若笑了。这次的笑不是那种说不清是笑还是苦的表情,而是一个真正的、带着温暖的笑。

“因为我需要走出系统才能看到系统。设计者不能同时是实验者和实验对象。我留下FATE,然后离开,就是为了让它在没有我的情况下运行。如果它能在没有我的情况下继续创造真实的连接,那就证明了一件事——缘分不需要一个具体的’安排者’。它只需要一个正确的结构。”

“就像你书店里的书不分类一样?“陆鸣说。

沈若愣了一下,然后笑得更深了。“你注意到了。”

“你的书不按类别排列,小说和物理教材放在一起,诗歌和烹饪指南放在一起。来书店的人不能按类别找书——他们只能随机浏览。但正是因为没有类别,他们才可能发现自己本来不会去看的书。”

“互补。“沈若说。

“互补。”

橘猫在沙发上翻了个身,发出一声慵懒的咕噜。

十二

陆鸣在大理待了三天。

他没有去旅游景点。他每天早上走到”互补”书店,坐在角落的沙发上,看沈若怎么经营这间小店。她给每一个进来的客人推荐一本书——不是他们想要的,而是他们不会自己选的。一个来买旅行攻略的女孩被推荐了一本关于拓扑学的科普书;一个来找技术书籍的程序员被推荐了一本诗集;一对情侣被推荐了同一本小说的两个不同译本,让他们分别读完然后交换。

“你不怕他们不喜欢吗?“陆鸣问。

“不怕。不喜欢也是一种反应。有时候,一本你讨厌的书比一本你喜欢的书更能让你了解自己。”

这和FATE的逻辑一样——不只是匹配,而是制造一种张力。让人们在舒适区之外发现自己的另一面。

第三天的晚上,陆鸣坐在书店门口的台阶上,沈若坐在他旁边。洱海的风带着水汽吹过来,远处的苍山在天际线上画出一道锯齿状的轮廓。古城的灯光在身后温暖地亮着。

“沈若,“陆鸣说,“我有一个问题。”

“问。”

“FATE系统里的全F和全零档案——那两个人是你自己吗?”

沈若沉默了一会儿。她从口袋里掏出了一支笔和一张纸——是一张旧书签的背面——开始画东西。她画了两个圆,两个圆有一部分重叠。

“这是文氏图,“她说,“两个集合的交集部分,是它们的共同点。但你看这个重叠的部分——“她在交集中画了一个小点,“这个点属于两个集合。它既在A里,也在B里。那么这个点到底是A的一部分,还是B的一部分?”

“都是。”

“对。但当两个集合的交集足够大的时候,这个点可能分不清自己属于哪个集合。这就是全F和全零——它们是两个集合的交集。它们同时是种子档案和真实的人。它们是’可能性’和’现实性’叠加在一起的状态。”

“所以它们是你在系统中的投影。”

“不。它们是我希望成为的样子。“沈若停顿了一下,“全F是我在深夜写代码时的样子——孤独、精确、沉迷于逻辑的美感。全零是我在白天面对世界时的样子——平静、有序、但渴望一点混乱。这两个人都是我,但都不完整。它们需要彼此才能完整。”

“所以你设计了一个系统来寻找自己的互补。”

沈若摇了摇头。“不。我设计了一个系统来证明互补是可能的。我自己的互补——“她看了看陆鸣,“那是另一件事。”

夜风吹过来,陆鸣闻到了她身上淡淡的檀香味——和书店里的一样。

“你在北京的时候,“陆鸣说,“你是不是也曾在阳台上抽烟,看远处的灯火?”

沈若没有回答。但她笑了。

十三

陆鸣回到了北京。

他没有辞职。他继续在缘聚科技工作,继续维护缘分系统的推荐引擎,继续在深夜审查FATE的运行数据。但现在他做的事情多了一样:每隔两周,他会从北京寄一本书到大理的”互补”书店。他寄的书没有规律——有时是科幻小说,有时是哲学随笔,有时是一本关于数学史的科普书。

沈若也会给他寄书。她寄的书同样没有规律——有时是诗集,有时是一本旧的地图册,有时是一本关于量子纠缠的学术论文集。

他们从不在书的扉页上写字。但每一本书都像是一封信——通过选择本身传递信息。你选择寄什么书,本身就是一种表达。

这是另一种匹配系统。不是基于数据的,不是基于算法的,而是基于两个人在各自的书架上看到了某一本书,然后同时想到”对方可能想读这个”。

互补 + 共振。

FATE系统的用户数量在缓慢增长。陆鸣的”心愿单”功能出乎意料地受欢迎——虽然入口很隐蔽,但每天仍有几百个用户写下自己关于相遇的愿望。有些愿望很短:“希望遇到一个喜欢雨天的人。“有些很长,写了一整段关于自己的描述和对另一半的想象。有些甚至不是在描述一个人,而是在描述一种感觉:“希望遇到一个人,在他面前我可以不说话。”

陆鸣把这些愿望都读过了。每一个愿望都像是一扇窗,透过它可以看到一个人的某个切面——那些他们在日常生活中不会展示给别人的部分。深夜的脆弱、白天的逞强、对被理解的渴望、对被看见的恐惧。

这些愿望被转化为向量,进入FATE的匹配网络。有些愿望很快就找到了共振——另一个愿望在同样的维度上产生了互补的信号。有些愿望在系统中漂泊了很久,始终没有匹配到任何东西。

陆鸣有时候会想:那些没有匹配到的愿望,是系统不够好,还是这个世界上确实不存在那个互补的人?

沈若可能会说:系统不够好,因为世界足够大,任何两个人之间都存在某种连接。只是有些连接太微弱,连算法都捕捉不到。

但陆鸣不完全同意。他觉得有些愿望本身就是孤独的——不是因为没有人与之互补,而是因为许愿的人还没有准备好让另一个人进入。愿望是一种邀请,但邀请需要勇气。有些人写下愿望的那一刻就已经满足了——他们不需要愿望被实现,他们只是需要把它说出来。

FATE系统无法区分这两种愿望。这是算法的局限。

也是人的局限。

十四

半年后的某一天,陆鸣在公司遇到了一个人。

不是在机房。不是在代码里。是在公司的食堂里。

那天他排队买午饭的时候,前面站着一个他没见过的女人。她穿着一件灰色的卫衣——缘聚科技的工服,但胸前的Logo被她自己用线缝了一朵小花覆盖了。她在看手机,屏幕上是一张大理洱海的照片。

陆鸣注意到了她手上的墨水印——左手的无名指上,一道浅浅的痕迹。

“你去过大理?“他问。

她抬起头。棕色的眼睛,略微下垂,嘴角带着一种说不清的表情。

“上个月刚从那边调过来,“她说,“我在大理的分公司待了两年,上个月申请调回北京总部。”

“你在大理做什么?”

“开书店。“她说,然后笑了,“开玩笑的。我在大理做的是数据分析。但周末的时候会去一家叫’互补’的书店帮忙。”

陆鸣看着她。她看着他。

“我叫沈若,“她说,“但大家都叫我小沈。”

“我知道,“陆鸣说,“我叫陆鸣。”

“我知道,“她说,“FATE告诉我的。”

食堂很吵,到处是盘子碰撞和人们交谈的声音。但在那一刻,陆鸣觉得整个食堂安静了下来,像是有人在宇宙的控制台上按下了静音键。

沈若回来了。不是以代码的形式,不是以种子档案的形式,不是以终端窗口里的文字的形式。是以一个人的形式——一个站在他面前、穿着灰色卫衣、手上沾着墨水、会笑会说话的真人。

“你怎么回来了?“他问。

“因为FATE的实验该进入第二阶段了,“沈若说,“第一阶段验证了’互补匹配’的有效性。第二阶段要验证一个更复杂的问题。”

“什么问题?”

沈若端起餐盘,找了一张靠窗的桌子坐下。陆鸣跟了过去。

“第一阶段的问题是:互补匹配能否创造真实的连接?答案是’是’。第二阶段的问题是:如果两个人知道自己的相遇是被安排的,他们之间的连接是否仍然真实?”

陆鸣想了一会儿。“所以你回来——”

“我回来是为了把FATE的存在告诉那些被它连接过的人。告诉他们:你们的相遇不是偶然的。然后观察——知道真相之后,他们是否仍然相信自己的缘分。”

“这很冒险。”

“当然。但真相总是冒险的。“沈若看着窗外的天空——北京的天今天是蓝色的,很难得。“薛定谔的猫在被观测的那一刻,叠加态就坍缩了。但坍缩之后,猫要么活着要么死了。它不再是一个概率。它变成了一种事实。”

“你想让缘分从叠加态坍缩成事实。”

“是的。我想知道,当人们知道自己的相遇不是偶然的时候,‘缘分’这个词还意味着什么。”

食堂的窗户正对着公司的花园。花园里有一棵老槐树,五月的时候会开满白色的花,空气里弥漫着一种甜腻的香味。

陆鸣看着那棵槐树,突然说:“那你呢?”

“我怎么了?”

“你的相遇。你知道FATE把我们匹配在了一起——99.7%的匹配度。你知道这不是偶然的。那你觉得我们之间的连接是真实的吗?”

沈若低头看着自己盘子里的食物——今天食堂的菜是红烧肉和清炒时蔬。她用筷子把一块红烧肉翻了个面,没有回答。

过了很久,她说:“你还记得那个被注释掉的函数吗?send_final_message?”

“记得。”

“里面有一句话:‘你们相遇不是巧合。但有一个人希望它是。‘“她抬起头,“我希望它是巧合。但我知道它不是。所以我回来——就是为了面对这个’不是’。”

“然后呢?”

“然后——“她笑了,这次笑容里有释然,有不确定,有一点点的脆弱,“然后我发现,知道真相之后的缘分,和不知道真相的缘分,感觉不一样。但不一定是更差的感觉。它更像——”

“更像什么?”

“更像一封你提前知道了内容的信。你读过一遍了,但再读一遍的时候,你注意到了第一次没注意到的细节。字迹的轻重,纸张的质感,寄信人选择这个词语而不是那个词语的原因。”

陆鸣想了想。“所以知道真相并没有毁掉缘分。它只是改变了你看缘分的方式。”

“对。就像量子力学的测量——测量改变了系统的状态,但没有毁灭系统。系统仍然存在,只是以另一种形式。”

食堂的广播开始放一首老歌。是一首九十年代的情歌,歌词说的是两个人在一个下雨天相遇,然后一生都没有分开。歌声在食堂的嘈杂中若有若无,像是从很远的地方传来的回声。

十五

沈若回来的消息很快在公司里传开了。不是因为她做了什么引人注目的事情——恰恰相反,她回来之后非常低调,安静地坐在自己的工位上做数据分析的工作,就像任何一个普通的员工。

但缘分系统的核心架构师回归,这在技术圈子里还是引起了一些议论。有人说她是被CEO亲自请回来的,有人说她是回来收拾烂摊子的,还有人说她回来是为了做一个秘密项目。

最后一种说法最接近真相。

沈若向公司申请了一个研究项目:对FATE系统连接过的四十三对用户进行回访。不是通过系统日志——那太冷冰冰了——而是通过真实的、面对面的访谈。她想知道,在知道真相之后,这些人怎么看待自己的缘分。

公司的法务部门犹豫了很久。最终,在赵平的推动下,项目获得了批准。条件是:访谈必须征得用户的同意,所有数据必须匿名化处理,研究结果仅供内部参考。

陆鸣没有参与这个项目。他继续维护缘分系统的日常运行,同时远程监控FATE的状态。但他从沈若那里听到了一些访谈的片段。

有一对已经结婚的用户,男方在听到真相后沉默了很久,然后说:“我不在乎。我们在一起不是因为算法。算法只是给了我们一个机会。我们的关系是我们自己建立的——每一天的早餐,每一次吵架,每一个深夜的拥抱。那些不是算法安排的。”

另一个用户说:“我觉得被冒犯了。我以为我是自由选择了他。现在你告诉我这个选择是被引导的?那我的感觉还算数吗?”

还有一个用户说了一句让沈若沉默了很久的话:“你知道吗,我一直觉得我和她的相遇有一种不真实的感觉。太完美了。像是一篇小说。现在我知道为什么了。但奇怪的是——知道原因之后,那种不真实的感觉反而消失了。之前我总觉得这一切太好了,不像是真的。现在我明白了,正是因为有人为此付出了努力,所以它才是真的。“

十六

沈若的项目进行了三个月。

三个月后,她把研究结果整理成了一份内部报告。报告的结论是:

在被FATE系统引导的四十三对用户中,有二十九对在知道真相后仍然维持着关系(百分之六十七点四)。有七对在知道真相后选择了分开(百分之十六点三)。另外七对在知道真相之前就已经自然分手了(百分之十六点三)。

在仍然维持关系的二十九对中,有二十三对表示真相没有影响他们对关系的看法(百分之七十九点三)。有六对表示真相对他们的关系产生了负面影响,但他们选择了共同面对(百分之二十点七)。

沈若在报告的最后写了一段话:

“FATE系统的实验结果表明,‘被安排的相遇’并不会否定关系的真实性。人们之间的连接建立在每一天的互动之上,而不是在第一次相遇的偶然性之上。知道相遇是被安排的,可能会在短期内产生困惑和质疑,但长期来看,大多数人会重新构建自己对’缘分’的理解——从’不可解释的偶然’转变为’被赋予的机会’。这个转变本身就是一种成长。”

报告的最后一行:

“给所有在深夜三点还醒着的人。你们值得被找到。“

十七

陆鸣读完报告的那天晚上,在阳台上抽了最后一支烟。

北京的天空是橙红色的深紫色,远处的灯火像一条蜿蜒的河流。他想起自己第一次在机房的日志里看到那个全F的种子档案时——那个兴趣标签写着”深夜在阳台上抽烟时看远处的灯火”的档案。

那不是一个预言。那是一面镜子。FATE系统通过他自己的行为数据,看到了他自己都没注意到的东西——他在阳台上抽烟时看的不是灯火,是远方。他不是在看一个风景,他是在等一个人。

全F档案不是沈若的投影。是他的。

而全零档案——那个”收集旧地图、在地铁上听白噪音、给自己写信但不寄出去”的人——才是沈若的投影。

他们从相反的方向出发,在一个由代码构成的空间里相遇。然后从那个虚拟的空间走到真实的世界——机房、食堂、书店、阳台。

互补。

陆鸣掐灭了烟。他拿起手机,给沈若发了一条消息。

不是微信。是FATE系统里的消息——他用自己的管理员权限,通过FATE的消息管道发送了一条消息。消息的内容很简单:

“你在凌晨零点四十八分打开了这条消息。”

三十秒后,他收到了回复。也是通过FATE系统发来的。

“我知道。”

然后是第二条:

“晚安。”

陆鸣笑了。他把手机放在阳台的栏杆上,看着远处的灯火。灯火没有变——还是那些路灯、那些写字楼的窗户、那些行驶中的车灯。但他看它们的方式变了。

以前他觉得灯火是孤独的。每个灯火的背后都是一个醒着的人,各自守着自己的深夜。

现在他觉得灯火是连接的。每一盏灯都在发出一种信号,说”我在这里”。而在某个地方,另一个人也在看着灯火,接收着这个信号。

信号是否被接收到不重要。重要的是它被发出了。

就像FATE系统——它发出的那些种子档案、那些匹配推荐、那些深夜的消息,不一定每一封都能促成一次相遇。但它们的存在本身就是一种信号:有人在试图理解人与人之间的连接,有人在用代码书写一首关于缘分的诗。

写诗的人已经离开了键盘。但诗还在被人朗读。

尾声

2026年的冬天,缘聚科技发布了”缘分系统”的第四个版本。新版本的核心升级是:引入了”互补匹配”模式。用户可以自由选择”相似匹配”或”互补匹配”——前者帮你找到和你一样的人,后者帮你找到和你不一样但恰好能填补你空缺的人。

发布会上,技术总监赵平在介绍新功能时说了一句话:“有时候,最好的匹配不是最相似的,而是最互补的。我们的新算法不只是匹配行为和兴趣,它还匹配’可能性’——你可能会成为什么样的人,你需要什么样的另一半来完成这个转变。”

台下的记者问:这个算法的灵感来自哪里?

赵平看了一眼坐在观众席最后一排的陆鸣和沈若,说:“来自一个已经离开又回来的人。”

那天晚上,陆鸣和沈若一起去了三里屯的一家酒吧。酒吧里人很多,音乐很响,空气中弥漫着酒精和香水的味道。

“你觉得他们能理解吗?“陆鸣大声问,为了盖过音乐。

“理解什么?”

“互补匹配。缘分的真相。所有那些FATE做过的事情。”

沈若喝了一口啤酒。“不需要理解。只需要使用。就像你不需要理解引力就能感受到重量。”

“那你自己呢?你理解了吗?”

沈若想了想。“我理解了一半。另一半需要用一辈子去理解。”

“哪一半?”

“我知道缘分可以被设计。但我不知道缘分是否需要被设计。前一半是技术问题。后一半是——“她顿了顿,“是生活问题。”

陆鸣举起酒杯。“那就用一辈子去搞清楚。”

沈若也举起了杯子。两个杯子在空中轻轻碰了一下,发出一声清脆的响。

“敬互补。“沈若说。

“敬深夜三点还醒着的人。“陆鸣说。

杯子里的啤酒在灯光下闪着金色的光。酒吧外面,北京下起了今年的第一场雪。雪花落在三里屯的街道上,落在路人的肩头和头发上,落在一切醒着的东西上面。

在某个服务器的隐藏目录里,FATE系统的命运线程在凌晨三点十三分准时运行。它生成了一颗新的种子档案,兴趣标签里写着:

“喜欢看初雪落在不认识的人肩头,想象每一片雪花要去的地方。”

这颗种子会在数据库里安静地等待。等待另一个向量——另一个人的”可能性”——与它产生共振。

没有人知道这个共振会在什么时候发生。也许明天。也许明年。也许永远不会。

但这不重要。重要的是信号已经被发出了。在数据库的深处,在算法的缝隙里,在所有醒着的人还没有入睡的深夜里。

信号一直在那里。

像一盏灯。