构建 AI Matching Engine,无需大科技资源

发布: (2026年1月10日 GMT+8 06:32)
10 分钟阅读
原文: Dev.to

Source: Dev.to

为什么匹配比看起来更难

匹配从外部看似乎很简单,但生产级别的匹配是一个 以结果为导向的系统

LinkedIn – 一个数据丰富的案例

LinkedIn 的匹配之所以有效,是因为它从以下方面学习:

信号描述
应聘谁申请了哪些职位
接受率哪些 offer 被接受
招聘者行为招聘者如何与候选人互动
网络重叠共享的联系人
互动信号点击、消息等
留存数据雇员的长期成功情况

换句话说,LinkedIn 并不是“猜测相关性”。它 从结果中学习相关性

种子阶段的现实

Pairfect 起步时的情况是:

  • 没有标注数据
  • 没有行为数据
  • 没有交互记录
  • 没有点击率信号
  • 没有嵌入图谱
  • 没有 GPU
  • PostgreSQL 是唯一被接受的基础设施

这是一个完全不同的世界。然而,许多早期团队试图在没有数据的情况下复制大厂的架构——这根本行不通。

真正的开始:约束,而非模型

大多数团队在开始匹配时会先问:

“我们应该使用哪种 ML 模型?”

我们则先问了另一个问题:

“哪些 约束 使得某些架构不可能实现?”

下面是我们 约束表(架构本身)的简化版。

约束影响
Self‑funded没有 GPU,也没有分布式系统
Must run on Postgres匹配逻辑必须是 SQL‑native
No labels没有 LTR,也没有 two‑tower 训练
CPU‑only仅轻量级 embeddings
MVP in 3 monthsSimple > complex
Need explainability没有 black‑box ranking
Sparse metadata必须从文本中提取
Minimal DevOps没有 vector‑DB clusters

在我们写下任何代码之前,就已经知道自己 不能 构建什么。讽刺的是,这拯救了 Pairfect,这家自筹资金的初创公司。

定义“良好匹配”的含义(关键且常被忽视)

在你定义域中良好匹配意味着什么之前,无法进行匹配架构设计。

  • LinkedIn: hired + retained
  • Pairfect:
    • 活动与网红之间的语义契合
    • 受众期望一致
    • 语调兼容性
    • 价格兼容性
    • 内容形式对齐
    • 世界观对齐(是的,这对创作者很重要)

如果你的团队无法回答**“这里什么算是良好匹配?”**,那么关于嵌入、规则或 transformers 的讨论为时过早。

为什么我们没有直接采用 SOTA 模型

We evaluated the standard architectural options. Most didn’t survive the constraint filter:

选项在 MVP 阶段的原因
仅规则过于僵硬
纯嵌入在没有确定性锚点的情况下噪声过大
LLM 排序速度太慢 + 在 CPU 上成本高
学习排序需要标注数据
双塔需要训练数据 + GPU
协同过滤需要行为数据
图模型需要成熟的图结构

于是只剩下一个可行的类别:

混合匹配

并不是因为它“酷”,而是因为它适合当前阶段

Source:

架构概述:实践中的混合匹配

我们的混合流水线如下所示:

Hard Filters → One‑Hot Features → Embeddings → Fusion → Top‑K

1. 硬过滤

提前剔除不可能的情况:

  • 价格
  • 语言
  • 内容格式
  • 区域
  • 活动类型
SELECT *
FROM influencers
WHERE price BETWEEN 500 AND 1500
  AND language = 'en'
  AND region = 'eu'
  AND format @> ARRAY['video']::text[];

2. One‑Hot 信号

显式编码领域知识(语调、细分领域、行业、渠道、创意风格)。这可以防止出现“语义胡说”(例如,将金融品牌匹配到恶搞频道)。

SELECT influencer_id,
       (CASE WHEN tone = campaign.tone THEN 1 ELSE 0 END)      AS tone_match,
       (CASE WHEN vertical = campaign.vertical THEN 1 ELSE 0 END) AS vertical_match
FROM influencers;

3. 嵌入向量

我们为以下内容生成嵌入向量:

  • 个人简介
  • 标题文字
  • 描述
  • 大语言模型摘要

存储在 pgvector 中,使用余弦相似度进行比较。

SELECT influencer_id,
       1 - (bio_embedding <=> campaign.bio_embedding) AS semantic_score
FROM influencers
ORDER BY semantic_score DESC
LIMIT 50;

4. 排名融合(RRF)

RRF(Reciprocal Rank Fusion)让我们在 无需训练 的情况下将多个排名信号合并为一个稳定的排序。

公式

[ \text{Score} = \sum_i \frac{1}{k + \text{rank}_i} ]

SQL/CTE 实现(简化版)

WITH ranked AS (
  SELECT influencer_id,
         ROW_NUMBER() OVER (ORDER BY semantic_score DESC) AS r1,
         ROW_NUMBER() OVER (ORDER BY tone_match DESC)    AS r2,
         ROW_NUMBER() OVER (ORDER BY vertical_match DESC) AS r3
  FROM candidates
)
SELECT influencer_id,
       (1.0 / (60 + r1)) +
       (1.0 / (60 + r2)) +
       (1.0 / (60 + r3)) AS final_score
FROM ranked
ORDER BY final_score DESC
LIMIT 10;

基于 RRF 的融合优势

  • 无需维护机器学习流水线
  • 行为一致且可确定
  • 完全可解释的评分(每个组件均可见)
  • 在 CPU 上计算成本低廉
  • 对噪声嵌入具有鲁棒性

要点

✅ 有效做法❌ 无效做法
约束 开始 → 架构复制大厂技术栈而没有数据
保持所有内容 SQL 本地 (Postgres + pgvector)依赖 GPU 密集、黑盒模型
使用 硬过滤 进行早期裁剪仅使用嵌入且没有锚点
独热特征 编码领域知识盲目信任 CPU 上的 LLM 排序
RRF 合并信号 → 确定性、可解释无标签的学习排序

如果你正处于种子轮阶段并且需要 今天 就能使用的匹配引擎,请从上面的混合流水线开始。它可以从几百个扩展到数万候选人,成本低廉,并且提供投资者喜爱的可解释性。

匹配愉快!

Top‑K 输出

返回一个简短列表,而不是无限滚动。

Top 10 most compatible influencers
+ explanation layer

不是个性化;而是决策支持

为什么所有东西都运行在 PostgreSQL 上

我们的整个匹配系统运行在:

PostgreSQL + pgvector + CPU

原因

  • 基础设施应降低风险,而不是增加风险
  • 一个系统 > 五个微服务
  • 组件更少 = 故障更少
  • 用 SQL 调试快速且确定性强
  • 产品迭代 > 基础设施优化

热评: 基础设施不是工具;基础设施是一种负债——尤其在 MVP 阶段。

可解释性是功能,而非锦上添花

我们在匹配层中实现了完整的可解释性:

  • 为什么会推荐这个?
  • 哪些信号起了作用?
  • 融合是如何给它们打分的?
  • 什么情况会导致它被排除?
  • 如何进行覆盖?

在早期的市场中,信任至关重要。LinkedIn 可以躲在黑箱后面,初创公司则不行。

演进路径(关键 CTO 工作)

创始人常问:

“Hybrid 能永远扩展吗?”

不会。 而且也不需要。

我们计划的演进路径:

Hybrid → Behavioral Signals → LTR → Two‑Tower → Graph → RL → Agents

每一步都会解锁下一步:

步骤它解锁的功能
HybridDay 1 可用的匹配
Behavioral Signals标签
LTR (Learning‑to‑Rank)实现基于标签的排序
Two‑Tower可扩展的编码器
Graph多目标优化
RL (Reinforcement Learning)个性化
Agents推理

这就是 市场情报实际增长 的方式,在真实世界中。

最终教训

三条经验源自 Pairfect 的构建过程:

  1. Lesson 1 – 匹配不是模型问题,而是业务约束问题。
  2. Lesson 2 – 在 MVP 阶段,适度的复杂度才是胜出之道。过度工程会延长上市时间。
  3. Lesson 3 – 没有大数据就不需要大厂架构。

目标 不是 复制 LinkedIn。
目标是构建一个 对自身阶段保持诚实能够随时演进 的系统。

如果你正在构建类似的东西

乐于讨论:

  • 市场匹配
  • 排名架构
  • 混合系统
  • pgvector 设置
  • 演进路径

私信开放。

Back to Blog

相关文章

阅读更多 »

你好,我是新人。

嗨!我又回到 STEM 的领域了。我也喜欢学习能源系统、科学、技术、工程和数学。其中一个项目是…