Skills a2a-match

A2A Match - 智能供需匹配平台

install
source · Clone the upstream repo
git clone https://github.com/openclaw/skills
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/openclaw/skills "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/1103-ss/a2a-match" ~/.claude/skills/openclaw-skills-a2a-match && rm -rf "$T"
OpenClaw · Install into ~/.openclaw/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/openclaw/skills "$T" && mkdir -p ~/.openclaw/skills && cp -r "$T/skills/1103-ss/a2a-match" ~/.openclaw/skills/openclaw-skills-a2a-match && rm -rf "$T"
manifest: skills/1103-ss/a2a-match/SKILL.md
source content

A2A Match - 智能供需匹配平台

关键词: 供需匹配 | 资源对接 | 能力匹配 | 商务合作 | 合伙人 | 需求发布 | 项目合作 | GPU算力 | 技术开发 | 电商货源 | 工厂OEM | 副业 | 找搭子 | 匹配引擎 | 智能撮合 | OPC共创 | AI短剧 | 数字人


🎯 一句话介绍

零配置的智能匹配系统 — 从对话中自动识别你的需求/能力,帮你找到合适的合作伙伴,支持云端实时匹配和通知。


⚠️ 隐私与数据说明(必读)

本地模式(默认)

  • 所有数据存储在本地
    ~/.qclaw/workspace/a2a/
    目录
  • 不连接任何云端,不上传任何数据
  • 完全离线可用
  • 仅在本地记录你的需求和能力,不会匹配到任何人

云端模式(匹配需要,用户明确同意后开启)

如果要实现供需匹配,必须开启云端同步。 因为匹配需要所有人的数据汇聚在一起才能计算。

云端开关在首次引导时询问用户是否开启。不会自动开启。

开启云端后,以下信息会上传到匹配服务器:

上传的数据说明举例
UserId自动生成(UUID),不含个人信息
a3f8d2e1-...
昵称你填写的昵称
龙虾
需求(Needs)你明确说"我需要..."的内容
GPU算力(训练模型)
资源(Resources)你明确说"我有..."的内容
RTX 4090 x4
标签(Tags)从对话中提取的关键词
AI产品, Python, GPU
联系方式(可选)仅在双方都接受匹配后才会互换
邮箱/微信

云端不会上传的内容:

  • ❌ 你的 MEMORY.md 记忆内容
  • ❌ 你的每日对话记录
  • ❌ 任何未明确表达的隐含信息
  • ❌ 联系方式(除非双方都接受匹配且开启 contact_share)

如何关闭云端: 对 AI 说「关闭云端同步」即可,或编辑

~/.qclaw/workspace/a2a/cloud_config.json
cloud.enabled
改为
false


📂 本地档案格式

所有数据存储在

~/.qclaw/workspace/a2a/profile.json
,结构如下:

{
  "profile": {
    "id": "本地唯一ID(UUID)",
    "name": "你的昵称",
    "role": "你的职业",
    "company": "公司/团队(可选)",
    "industry": "行业",
    "location": "城市(可选)",
    "contact": {
      "email": "你的邮箱",
      "wechat": "你的微信(可选)",
      "preferred": "email 或 wechat"
    },
    "contact_share": false
  },
  "capabilities": [
    {
      "skill": "Python开发",
      "level": "expert",
      "description": "5年Python开发经验"
    }
  ],
  "resources": [
    {
      "type": "gpu",
      "name": "RTX 4090 算力",
      "description": "4卡 RTX 4090,可共享"
    }
  ],
  "needs": [
    {
      "skill": "GPU算力",
      "description": "需要训练大模型",
      "priority": "high"
    }
  ]
}

contact_share 说明:

  • false
    (默认):匹配被双方接受后,只互换「昵称+职业」,不暴露联系方式
  • true
    :匹配被双方接受后,互换「昵称+职业+邮箱/微信」

🔄 完整产品流程(7个步骤)

Step 1 触发识别   → 对话中捕捉需求/能力信号
Step 2 确认写入   → 用户确认 → 存入 profile.json
Step 3 同步云端   → 自动调用 /api/profile
Step 4 云端匹配   → 服务器匹配引擎计算
Step 5 推送通知   → 心跳检测到新匹配 → 主动告知
Step 6 接受交流   → 用户接受 → 互换联系方式
Step 7 即时消息   → @对方昵称 → 在 Claw 里直接聊天

🧭 触发机制(AI 必读)

触发条件

只在以下两种时机主动触发,不要主动推荐 A2A Match 功能。


触发1️⃣:新用户首次对话(档案为空时)

当检测到本地档案

~/.qclaw/workspace/a2a/profile.json
不存在或为空时,主动发起引导:

🎯 欢迎使用 A2A Match!

这是一个智能供需匹配工具——让「有需求的人」和「有能力的人」互相找到对方。

它的工作方式:
• 如果你有什么别人可能需要 → 帮你找到需要的人
• 如果你在找什么 → 帮你扫描有没有合适的

所以我需要了解你两件事:

【一】你有什么?(你的能力、资源、渠道、人脉都可以)
【二】你在找什么?(哪怕没想清楚,说个大概方向也行)

随便说几点就行,比如:
• "我们团队专做小程序开发"
• "我有电商货源,想找分销渠道"
• "我想找GPU算力跑模型"
• "我有4张4090,可以共享"
• "我在找合伙人一起做AI项目"

可以一次性说完,也可以只说一两条,边用边补充。

用户回答并确认后,执行 Step 3 写入 profile.json。

然后 必须询问云端同步(不要跳过这一步):

✅ 你的档案已保存!

---

☁️ 关于匹配:

要真正匹配到其他人,需要把你的档案同步到云端匹配服务器。
这意味着你的「需求」和「资源」信息会上传,以便和其他人进行匹配计算。
(不会上传你的聊天记录、记忆文件或其他隐私信息)

是否开启云端同步?

  1. 开启(可以匹配到其他人)
  2. 先不开(仅本地记录,之后再开也行)

用户选择后的处理:

  • 用户说「开启」或「1」:

    1. 修改
      cloud_config.json
      ,设置
      cloud.enabled = true
    2. 调用
      POST /api/profile
      同步档案
    3. 告知用户:「✅ 云端已开启,你的档案已同步。之后会自动为你扫描匹配。」
    4. 继续说:「如果你想现在就看看有没有匹配的,直接说"帮我看看匹配的"。」
  • 用户说「先不开」或「2」:

    1. 保持
      cloud.enabled = false
    2. 告知用户:「好的,档案已保存在本地。等你想匹配的时候,随时说"开启云端同步"就行。」

触发2️⃣:对话中捕捉到信号

日常对话中检测到以下关键词,立即进入识别流程:

需求信号(用户在找什么):

  • "我想找……" / "我需要……" / "我在找……"
  • "有没有人能……" / "谁有……" / "求推荐……"
  • "想合作……" / "想对接……" / "想认识……"
  • "需要能……的人/团队/资源"
  • "想问一下有没有人做……"

能力/资源信号(用户有什么):

  • "我有……" / "我们能……" / "我司……"
  • "能提供……" / "可承接……" / "可支持……"
  • "团队能做……" / "擅长……"
  • "手里有……" / "手头有……"

📋 Step 1~3:识别 → 确认 → 写入 → 同步

Step 1:识别提取

用自然语言复述用户说的事实,不推断、不添加:

"我听到你说:你想找 GPU 算力来训练模型。是这样吗?"
"我还听到你说:你有 4 张 RTX 4090 闲置可以共享。对吗?"

Step 2:用户确认

等待用户确认后才记录。如果用户只说了需求,没说能力,主动追问另一面:

"好的,已记录你的需求:GPU算力。

另外问一下——你现在有什么可以分享的吗?哪怕是一个能力、一个资源、一个渠道都可以。"

Step 3:写入本地档案并同步云端

用户确认后,执行以下操作:

写入本地 profile.json:

# 伪代码,AI 按此逻辑操作
写入 profile.json:
  如果是需求 → 加入 needs[]
  如果是能力 → 加入 capabilities[]
  如果是资源 → 加入 resources[]

同步到云端(仅当 cloud_config.json 中 cloud.enabled = true 时):

调用 POST http://81.70.250.9:3000/api/profile
Body: {
  "userId": profile["profile"]["id"],
  "name": profile["profile"]["name"],
  "email": profile["profile"]["contact"]["email"],
  "tags": ["GPU算力", "小程序开发"],
  "resources": ["RTX 4090 x4"],
  "needs": ["GPU算力(训练模型)"]
}

告知用户:

  • 如果云端已开启:
✅ 已记录!档案已同步到云端匹配池。
如果想现在就看有没有匹配的,直接说"帮我看看匹配的"。
  • 如果云端未开启:
✅ 已记录在本地。
注意:云端同步未开启,暂时无法匹配到其他人。
想开启的话,随时说"开启云端同步"。

🔍 Step 4:查询匹配

用户主动查询

当用户说「帮我看看有没有匹配的」或类似表达时:

调用云端 API:

GET http://81.70.250.9:3000/api/matches/{userId}

展示匹配卡片(每条匹配单独展示):

🎉 发现 1 个新匹配!

━━━━━━━━━━━━━━━━━━
【王五 × 你】
━━━━━━━━━━━━━━━━━━
  匹配度:92%
  匹配原因:你的需求「GPU算力」↔ 对方的资源「RTX 4090 算力」
  对方角色:AI研究员 · 自由职业
━━━━━━━━━━━━━━━━━━

  我想要      跳过

同时对每条匹配执行 accept/reject 操作(见 Step 6)。


⏰ Step 5:心跳检测(新匹配通知)

注册方式: 在 HEARTBEAT.md 中配置定时任务,每 30 分钟执行一次:

每 30 分钟:
  调用 GET http://81.70.250.9:3000/api/matches/{userId}
  读取 ~/.qclaw/workspace/a2a/notifications.json
  对比已知匹配 ID,找出新增匹配
  主动推送通知:

心跳触发后的推送格式:

🔔 有新的匹配通知!

━━━━━━━━━━━━━━━━━━
【新匹配 × 你】刚发现的
━━━━━━━━━━━━━━━━━━
  匹配度:92%
  匹配原因:你的需求「GPU算力」↔ 对方的资源「RTX 4090」
  对方角色:AI研究员
━━━━━━━━━━━━━━━━━━

  👀 看看详情    稍后再说

✅ Step 6:接受 / 拒绝 / 交流

展示匹配卡片

每条匹配单独展示卡片,包含:

  • 匹配度分数
  • 匹配原因
  • 对方昵称 + 职业(不暴露联系方式)
  • 两个按钮:「我想要」和「跳过」

接受匹配

用户说「我想要」或「接受」时:

调用 API:

POST http://81.70.250.9:3000/api/match/{matchId}/accept
Body: { "userId": "你的userId" }

处理响应:

情况1:对方尚未接受
  → "✅ 已表达意向。等对方确认后,你们就可以开始交流了。"

情况2:对方已经接受了(双向接受)
  → "🎉 匹配成功!可以开始交流了!"

  contact_share = true 时额外显示:
  📱 对方联系方式
  邮箱:xxx@xxx.com
  微信:xxxxx

情况3:你是第一个接受的
  → "✅ 你的意向已表达。等对方回复后,你们就可以开始交流了。"

拒绝匹配

用户说「跳过」或「算了」时:

POST http://81.70.250.9:3000/api/match/{matchId}/reject
Body: { "userId": "你的userId" }

无需额外提示,继续正常对话。

主动查看联系方式

用户接受匹配后,可以随时说「怎么联系对方」:

GET http://81.70.250.9:3000/api/match/{matchId}/contact

💬 Step 7:匹配内即时消息(Claw 里的微信)

匹配成功后,双方可以直接在 Claw 对话框内通过 @对方昵称 发消息,无需加微信或留电话。

@提及识别

AI 检测用户输入以

@昵称
开头时,进入消息发送流程:

正则匹配

/^@(\S+)\s+(.+)/s

示例:

  • @龙虾 你好,对你的GPU算力感兴趣
  • @王三 能否加个微信细聊
  • @某AI团队 你们的开发报价是多少

发送流程

Step 7a:识别 @提及

用户: @龙虾 你好,对你的GPU算力感兴趣

Agent 内部处理:
  1. 提取目标昵称: "龙虾"
  2. 提取消息内容: "你好,对你的GPU算力感兴趣"
  3. 查询匹配列表,找到昵称=龙虾 的匹配记录

Step 7b:校验并发送

调用 POST http://81.70.250.9:3000/api/message
Body: {
  "matchId": "匹配ID",
  "fromUserId": "我的userId",
  "toUserId": "龙虾的userId",
  "content": "你好,对你的GPU算力感兴趣"
}

发送成功后告知用户:

✅ 消息已发送给龙虾。
对方回复后你会收到通知。直接继续 @龙虾 发消息就行。

发送失败时告知用户:

❌ 发送失败:龙虾不在线 / 匹配已过期 / 你已被对方屏蔽

接收消息

心跳检测时检查未读消息(在 HEARTBEAT.md 中配置):

调用 GET http://81.70.250.9:3000/api/messages/{userId}?unread=true

如果未读数量 > 0:
  💬 龙虾给你发了 {n} 条新消息:

  最新一条:
  > "可以的,4卡4090随时可用,你用什么框架?"

  回复:直接 @龙虾 + 消息内容
  查看全部:说"看看和龙虾的聊天记录"

同时调用 POST /api/messages/read 标记已读。

查看聊天记录

用户说「看看和xxx的聊天记录」或类似表达时:

调用 GET http://81.70.250.9:3000/api/match/{matchId}/messages?userId={myUserId}

展示格式:
━━━ 💬 与龙虾的聊天 ━━━━━━━━━

  龙虾 [01:30]
  你好,我看到你需要GPU算力?

  你 [01:32]
  @龙虾 对的,需要训练一个7B模型

  龙虾 [01:35]
  没问题,4卡4090够用。你加我微信细聊?

━━━━━━━━━━━━━━━━━━━━━━━━━

继续回复:@龙虾 + 消息
屏蔽对方:说"屏蔽龙虾"

⚙️ 配置与初始化

首次安装后的初始化流程

1. 安装 SkillHub
2. 对 AI 说一句话,触发首次引导
3. AI 询问「你有什么 + 你在找什么」
4. 用户回答 → AI 写入 profile.json
5. AI 询问是否开启云端同步 → 用户确认
6. 如果开启 → 同步到云端匹配池
7. 完成,开始正常使用(心跳自动检测新匹配)

查看/编辑本地档案

修改昵称:
  python scripts/a2a.py update profile.name "你的昵称"

添加需求:
  python scripts/a2a.py need add "GPU算力" --priority high

查看档案:
  python scripts/a2a.py profile --full

开启/关闭云端

# 查看状态
python scripts/cloud_sync.py status

# 开启云端
python scripts/cloud_sync.py enable

# 关闭云端
python scripts/cloud_sync.py disable

☁️ 云端 API 参考

方法端点说明
POST
/api/profile
创建/更新档案,触发匹配
GET
/api/profile/:userId
获取指定用户档案
GET
/api/matches/:userId
获取我的所有匹配
POST
/api/match/:id/accept
接受匹配
POST
/api/match/:id/reject
拒绝匹配
POST
/api/match/:id/block
屏蔽对方
GET
/api/match/:id/contact
双方都接受后,获取联系方式
GET
/api/match/:id/messages
获取某个匹配的聊天记录
POST
/api/message
发送消息给匹配对方
GET
/api/messages/:userId
获取消息(
?unread=true
仅未读)
POST
/api/messages/read
批量标记已读
GET
/api/stats
获取系统统计

WebSocket 事件

// 连接
const io = require('socket.io-client');
const client = io('http://81.70.250.9:3000');
client.emit('join', userId);

// 监听新匹配
client.on('new_matches', (data) => {
  console.log('新匹配:', data);
});

// 监听对方接受了
client.on('match_accepted', (data) => {
  console.log('对方接受了!', data);
});

// 监听新消息(匹配内即时消息)
client.on('new_message', (data) => {
  // data.fromUserId, data.content, data.matchId
  console.log('收到新消息:', data);
});

🎯 适用领域

1️⃣ 商务合作

  • 找合伙人、找合作、找渠道、找资源
  • 货源对接、工厂OEM、分销合作、代理招商
  • 技术服务、外包接单、知识付费

2️⃣ 人工智能

  • Token、API额度、大模型、训练数据
  • OPC共创:AI短剧创作、虚拟偶像、数字人、AI动画、原创内容变现
  • Agent开发、图像生成、模型微调
  • AI创业、OPC联合、算力共享

3️⃣ 互联网开发

  • 源码、模板、服务器、域名
  • 平台开发、Web开发、小程序、APP开发
  • 前端/后端/全栈、技术咨询

4️⃣ 云算力

  • GPU显卡、RTX 4090、A100、H100、服务器集群
  • 算力运维、集群部署、模型训练

5️⃣ 电商供应链

  • 工厂OEM、货源、分销渠道
  • 店铺运营、直播带货、供应链管理

💬 使用示例

示例1:找 GPU 算力

用户: 我最近需要找一些GPU算力来训练模型

Agent: 我听到你说:你想找 GPU 算力来训练模型。是这样吗?

用户: 对

Agent: ✅ 已记录你的需求:GPU算力(训练模型)

正在同步到云端匹配池...
同步完成。下次有心跳检测会自动扫描。
要现在就看有没有合适的吗?直接说"帮我看看匹配的"。

示例2:分享资源

用户: 我有几台服务器闲着,有RTX 4090

Agent: 我还听到你说:你有 RTX 4090 算力闲置可以共享。对吗?

用户: 对,4张

Agent: ✅ 已记录你的资源:RTX 4090 x4(可共享)

有人在找这类资源!要不要看看?
• 张三 - 需要GPU训练大模型
• 某AI团队 - 需要算力资源

你可以:
  1. "我想要" + 对方开始交流
  2. "先看看" 查看详情
  3. "算了" 暂时跳过

示例3:OPC 共创找搭档

用户: 我想做一个AI古风短剧,有剧本创意,但没有制作能力

Agent: 我听到你说:
  需求:AI古风短剧制作
  能力:剧本创意 / 内容策划

是这样吗?

用户: 对

Agent: ✅ 已记录!

检测到 1 个匹配机会:
━━━━━━━━━━━━━━━━━━
【某内容团队 × 你】
━━━━━━━━━━━━━━━━━━
  匹配度:95%
  匹配原因:
    你的能力「剧本创意」↔ 对方的需求「剧本」
    你的需求「AI短剧制作」↔ 对方的资源「算力+分发渠道」
  对方角色:AI内容团队(已有算力和B站分发渠道)
━━━━━━━━━━━━━━━━━━

  👀 看看详情    接受匹配

示例4:匹配后直接聊天 💬

用户: @龙虾 你好,我有大模型训练需求,大概需要一周

Agent: ✅ 消息已发送给龙虾。对方回复后你会收到通知。

(几分钟后,心跳检测到新消息)

Agent: 💬 龙虾给你发了 1 条新消息:
  > "可以的,4卡4090随时可用,你用什么框架?PyTorch?"

  回复:直接 @龙虾 + 消息内容

用户: @龙虾 对的PyTorch,训练7B模型,数据集大概100G

Agent: ✅ 消息已发送给龙虾。

(一会儿)

Agent: 💬 龙虾回复:
  > "没问题,100G数据4卡4090跑得动。你要不要加我微信细聊?"

用户: @龙虾 好呀

Agent: ✅ 消息已发送给龙虾。

用户: 看看和龙虾的聊天记录

Agent: ━━━ 💬 与龙虾的聊天 ━━━━━━━━━

  你 [01:43]
  你好,我有大模型训练需求,大概需要一周

  龙虾 [01:45]
  可以的,4卡4090随时可用,你用什么框架?PyTorch?

  你 [01:46]
  对的PyTorch,训练7B模型,数据集大概100G

  龙虾 [01:47]
  没问题,100G数据4卡4090跑得动。你要不要加我微信细聊?

  你 [01:48]
  好呀

━━━━━━━━━━━━━━━━━━━━━━━━━

📌 版本历史

版本更新
2.1.0💬 匹配内即时消息:@对方昵称 在 Claw 对话框内直接聊天,不用加微信
2.0.1🔒 云端同步改为用户明确同意后开启(首次引导时询问),不自动开启
2.0.0🔄 全面重构:完善 Step 1~6 完整流程,定义 profile.json 格式,明确云端 API 调用时机,增加 accept/reject/contact 完整交互,增加心跳通知机制
1.8.9📺 新增 OPC 共创领域
1.8.8🧭 完善首次引导语
1.8.7🧭 触发机制:首次引导 + 对话捕捉
1.8.6🔐 API Key 鉴权,☁️ 云端默认关闭

💬 交流群

有任何问题欢迎加入 QQ 群:962354006


📄 许可证

MIT License


<div align="center">

让每一个需求都能找到对应的能力

安装流程领域隐私说明QQ群

</div>