开源实战笔记 / 2026

把 AI Agent 用在婚恋匹配上,
是一个可以拆开看的工程问题

这是一个开源项目的实践记录。它做的事很简单:让每个人手机上那个已经会聊天的 AI,多一套和工作对象打交道的方法——先把自己讲清楚,再去看别人的介绍,合适就双方各自同意交换联系方式。画像和密钥留在本机,平台只转交看不懂的密文。

协议 v1.4 MCP 工具 21 个 零服务端存储明文 MIT + AGPL-3.0

01这个项目在做什么

先说清楚它不是什么,省得误会。

它不是婚介所,也不是交友 App。没有注册、没有账号、没有密码,不收集手机号,不做人工介绍,不做红娘一对一问询。它是一套本地运行的软件:你在自己的电脑上跟 AI 说话,AI 调用这套工具,把你说过的话整理成一份「介绍卡」,加密之后放到一个公共的布告栏上;别人看到卡片摘要觉得有意思,提出请求,双方都同意,才逐层交换更多信息。

整个流程里,服务端只做一件事:转发密文。它不知道卡片内容,不知道你写给谁、谁写给你,也不知道你们最后有没有见面。

之所以做这件事,是因为我自己观察到一个现象:条件越好、越独立的人,在相亲这件事上越容易被「错配」。不是没人可选,是介绍人只能凭几句话判断,而人是有很多层的——你不在意的和你在意的,往往和介绍人以为的刚好相反。AI 的好处不是替你决定,是有耐心把你的十几层都问清楚,并且如实记住。

02三条工程边界

这三条写在设计文档第一页,改代码之前先读;冲突时先改文档,并写明理由。

B1不反向追踪

平台不记录「谁看了谁」。卡片被浏览、被忽略、被拒绝,都不会回传给任何人——包括卡片主人自己。没有阅读回执,没有访客记录,没有「最近谁对你感兴趣」。

B2不打分

不出匹配度百分比,不排「优质指数」,不做排行榜。AI 给出的是一份带原话引用的观察报告,五档三区,每个结论都要能指回你说的哪句话。分数会让人优化分数,而不是想清楚自己要什么。

B3不留存

服务端不存明文,也没有「注销账号」这一步——因为没有账号。删除是在你自己机器上执行的:密钥删掉,那些卡片就再也没有人能解开,包括我们。

这三条不是姿态,是技术选择的后果。比如「不反向追踪」之所以能成立,是因为信箱的拉取接口只返回投递给你的信封,你没有办法查询「我投出去的信被看了没有」——这个能力在设计上就不存在。

03几个技术选择,以及为什么

这部分是这个项目真正花时间的地方,也是我认为值得写下来的部分。

密钥即身份
没有邮箱密码这套东西。你在本机生成一对 Ed25519 签名密钥和一对 X25519 加密密钥,平台只知道公钥。身份证明就是把一句话用私钥签了给平台验。代价很直接:BIP39 24 个词是你唯一的备份,丢了就真的找不回来——我们也没法帮你找回,因为服务端根本不知道你是谁。
卡片是分层的
一张匹配卡 = 明文元信息(城市、年龄段、可见范围)+ 三层独立加密的内容(越往里越私密)+ 一个整体签名。三层用不同的密钥,收件人拿到第一层,才拿得到解第二层的钥匙。所以「先给微信号、暂时不给手机号」这种事,在密码学上是可以成立的,不是靠承诺。
验签失败整卡作废
不做「降级读取」。签名对不上就整张卡丢掉,不试图猜测哪部分可信。这条看着保守,但一个允许部分信任的系统,最后一定会有人把它变成全部不可信。
平台没有 /match
服务端只有投递、拉取、许可这几类接口,没有匹配接口、没有推荐接口、没有搜索接口。能不能遇见,取决于卡片有没有被放到广场、有没有人愿意点开——不取决于某个算法愿不愿意把你推出去。这不是没做,是刻意不做。
数据分四环
内容环(零知识,永不放松)、聚合环(只有匿名总数)、行为分析环(频次与路径,绑假名,可退出)、身份凭据环(仅贴广场者,邮箱哈希 ↔ 假名公钥,永不与其他三环 join)。真要追溯到一个具体的人,仅有的一条路是「广场发布确认」那一刻,这是明说的。

04怎么在本地跑起来

它是一个 MCP 服务,由你已经在用的 AI 客户端来启动,不是一个双击就能开的 App。

先说明一个最容易踩的坑:npx -y @hongxian/mcp 是运行命令,不是安装命令。直接粘到终端里,它只会安静地等输入,看起来像卡住了——因为它是一个标准输入输出协议服务,得有宿主来跟它说话。

正确做法是把它加进 AI 客户端的 MCP 设置。不同客户端的配置方式其实只有四类:

类型代表客户端怎么填
界面表单豆包桌面版、千问、WorkBuddy连接器 / 自定义 MCP → 新增 → 传输选 stdio,命令 npx,参数 -y @hongxian/mcp
JSON 文件Claude Desktop、Cursor、Cline、Cherry Studio在 mcpServers 下加一项,command 与 args 同上
命令行Claude Code、Codexclaude mcp add --transport stdio hongxian -- npx -y @hongxian/mcp
YAML patchDeepSeek Harness写进 profile 的 cordis.patch.yml,不是 JSON

不想手写的话,让工具自己输出对应格式:

npx -y @hongxian/mcp --print-config claude     # 标准 mcpServers JSON
npx -y @hongxian/mcp --print-config panel      # 界面表单的三个字段
npx -y @hongxian/mcp --print-config code       # 命令行
npx -y @hongxian/mcp --print-config dsh        # DeepSeek Harness 的 YAML patch
npx -y @hongxian/mcp --print-config list       # 全部可用目标

装好之后,让 AI 读一下 yuelao_persona 这条提示词,确认它的人格与禁令加载正常,再开始。要核对连接是否成功,看工具总数即可——21 个工具、8 条指引;某些客户端会显示成 mcp__hongxian__interview 这种带前缀的名字,那是正常的,核数量不用核名字。

目前需要本机有 Node 20 以上。装不了 Node 的机器(很多办公电脑是这样),这套东西现在跑不起来——这是真实限制,不是配置问题。

05已知限制与还没做完的部分

写下来是为了避免误解,也免得有人按想象中的功能来用。

  • 需要宿主。没有 MCP 客户端就用不了。手机端目前不支持——手机上没有可自装 MCP 的本地文件系统,这一版明确不追。
  • 广场是异步布告栏。不是即时聊天,没有在线状态,没有「谁正在看」。你把卡片贴上去,等人来看;这中间可能是几天。
  • 双盲拒绝。对方不回应或拒绝,你不会收到通知,也不会知道是谁。连带的结果是:你也不知道自己被多少人忽略过。
  • 发布需要一次邮箱确认。只有「把卡片贴到广场」这一步需要,用于满足境内平台对发布内容的可追溯要求。邮箱只存加盐哈希,不对外展示,也不进入其他任何环节。
  • 平台还在预发阶段。服务端目前只跑在境外一台小机器上,境内访问速度不保证。境内这个站点只放说明,不放服务。
  • 没有推荐算法。遇见谁,取决于你声明的圈层和别人的主动浏览。想提高遇见概率,办法是把介绍写得更诚实,不是等系统推你。

06文档与代码

全部开源。协议规范在 spec/ 目录,以 CC-BY-SA 4.0 授权。

源代码
github.com/hongxian-dev/hongxian —— 客户端(MCP 服务)、协议库、平台服务端、网站,同一个仓库。
协议规范
protocol-v1-spec.md —— 九类信封、三层加密、字段级子密钥的完整定义。有争议时以这份为准。
宿主兼容性
host-compatibility.md —— 四类配置载体、常见故障、以及「云端电脑不是 MCP 宿主」这类容易搞混的地方。
安装与信任
install-and-trust.md —— 三条安装路径(npx / 源码构建 / 连接器市场),以及如何验证你跑的就是仓库里的代码。
npm 包
@hongxian/mcp · @hongxian/core · @hongxian/crypto · @hongxian/schema —— 每次发布带 provenance 证明,可追溯到具体提交与构建流水线。

07关于这个笔记

这个站是一个个人技术项目的笔记页,记录设计取舍、踩过的坑和还没解决的问题;它不提供婚介服务,不接受委托介绍,不做收费撮合。项目本身是开源、免费的,未来也只可能在工具层接受赞助,不会向「被介绍」这件事收费。

如果你在工程上发现了问题,欢迎在仓库提 issue——尤其是安全与隐私相关的,这类问题我优先看。想讨论设计上的不同意见也欢迎:这个项目的很多决定,是被别人的质疑改出来的。