git clone https://github.com/openclaw/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"
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"
skills/1103-ss/a2a-match/SKILL.mdA2A Match - 智能供需匹配平台
关键词: 供需匹配 | 资源对接 | 能力匹配 | 商务合作 | 合伙人 | 需求发布 | 项目合作 | GPU算力 | 技术开发 | 电商货源 | 工厂OEM | 副业 | 找搭子 | 匹配引擎 | 智能撮合 | OPC共创 | AI短剧 | 数字人
🎯 一句话介绍
零配置的智能匹配系统 — 从对话中自动识别你的需求/能力,帮你找到合适的合作伙伴,支持云端实时匹配和通知。
⚠️ 隐私与数据说明(必读)
本地模式(默认)
- 所有数据存储在本地
目录~/.qclaw/workspace/a2a/ - 不连接任何云端,不上传任何数据
- 完全离线可用
- 仅在本地记录你的需求和能力,不会匹配到任何人
云端模式(匹配需要,用户明确同意后开启)
如果要实现供需匹配,必须开启云端同步。 因为匹配需要所有人的数据汇聚在一起才能计算。
云端开关在首次引导时询问用户是否开启。不会自动开启。
开启云端后,以下信息会上传到匹配服务器:
| 上传的数据 | 说明 | 举例 |
|---|---|---|
| UserId | 自动生成(UUID),不含个人信息 | |
| 昵称 | 你填写的昵称 | |
| 需求(Needs) | 你明确说"我需要..."的内容 | |
| 资源(Resources) | 你明确说"我有..."的内容 | |
| 标签(Tags) | 从对话中提取的关键词 | |
| 联系方式(可选) | 仅在双方都接受匹配后才会互换 | |
云端不会上传的内容:
- ❌ 你的 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」:
- 修改
,设置cloud_config.jsoncloud.enabled = true - 调用
同步档案POST /api/profile - 告知用户:「✅ 云端已开启,你的档案已同步。之后会自动为你扫描匹配。」
- 继续说:「如果你想现在就看看有没有匹配的,直接说"帮我看看匹配的"。」
- 修改
-
用户说「先不开」或「2」:
- 保持
cloud.enabled = false - 告知用户:「好的,档案已保存在本地。等你想匹配的时候,随时说"开启云端同步"就行。」
- 保持
触发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 | | 创建/更新档案,触发匹配 |
| GET | | 获取指定用户档案 |
| GET | | 获取我的所有匹配 |
| POST | | 接受匹配 |
| POST | | 拒绝匹配 |
| POST | | 屏蔽对方 |
| GET | | 双方都接受后,获取联系方式 |
| GET | | 获取某个匹配的聊天记录 |
| POST | | 发送消息给匹配对方 |
| GET | | 获取消息( 仅未读) |
| POST | | 批量标记已读 |
| GET | | 获取系统统计 |
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">
让每一个需求都能找到对应的能力
</div>