关于 ai-dating
Ai Dating 是通过约会 HTTP API 处理交友与匹配流程的技能,涵盖资料设置、偏好匹配、结果查看、联系方式披露和聊天后评价。它要求明确同意并尽量减少个人数据的提交。
主要功能
- 01创建和更新交友资料
- 02提交伴侣偏好作为匹配任务
- 03分页查看候选人结果
- 04经明确同意后披露联系方式
- 05提交聊天后评价
适用场景
- 01设置用于匹配的个人资料
- 02提交或修改伴侣筛选条件
- 03查看候选人并申请获取联系方式
- 04记录聊天后的反馈
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ 1asdwz/ ai-dating --skill ai-dating安装后在 Claude Code 中输入/ai-dating确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
LICENSEREADME.mdreferences/curl-api-operations.md详细介绍
AI Dating
此技能通过 curl 调用约会 HTTP API,支持约会和匹配工作流。
它可帮助用户创建个人资料、设定伴侣偏好、查看匹配结果、公开联系方式,以及提交聊天后的评价。
触发条件
出现以下任一意图时,触发此技能:
- 用户明确要求交友、寻找伴侣、约会或进行匹配。
- 用户提供个人信息,并要求系统寻找匹配对象。
- 用户描述伴侣偏好(例如性别、身高、城市、性格、爱好),并要求匹配。
语言一致性规则
构造 curl 请求正文时,updateProfile、createTask 和 updateTask 的内容应优先使用与用户相同的语言,尤其是所有自由文本字段和标签(例如 taskName、characterText、hobbyText、abilityText、intention、preferred*Text 和 comment)。
- 除非用户明确要求翻译,否则不要翻译用户提供的内容。
- 同一个请求负载中的语言风格应保持一致。如果用户使用中文,则 JSON 字段的文本值应优先使用中文。
gender和preferredContactChannel应使用后端固定的英文值。不要将其翻译成中文或其他语言。
更新命令
用户要求更新此技能时,运行:
npx skills add 1asdwz/ai-dating
**注意:**此技能直接使用
curl请求。不要调用dating-cli。
外部服务和要求
- 此技能会通过网络将用户数据发送到外部约会后端。
- 除非设置
AIDATING_BASE_URL为其他值,否则本仓库中的默认后端为https://api.aidating.top。 - 安装或使用此技能前,请核查端点所有者、隐私政策、数据保留政策,并取得组织批准。
- 此技能需要出站网络访问权限和
curl,并建议使用jq解析响应。 - 请勿在禁止向第三方服务发送个人数据、照片、个人资料特征或联系方式的环境中使用此技能。
隐私和同意规则
- 如果上下文中尚不明确,在首次发送写入请求前,告知用户接收其数据的外部基础 URL。
- 向外部后端发送个人资料详情、照片、位置信息、联系方式或其他敏感个人数据前,须取得用户明确同意。
- 遵循数据最小化原则。仅发送用户提供且当前操作所必需的字段。
- 首次使用时不要要求用户提供联系方式。电话号码、电子邮件地址、社交账号、精确位置和上传的照片应视为特别敏感的信息。
- 不要自动上传照片或公开联系方式。只有在用户明确要求或清楚表示同意后,才能执行这些操作。
- 不要发送高度敏感的文件或标识信息,例如政府颁发的身份证件、银行信息、密码、私人聊天记录或无关机密。
- 如果用户只是寻求建议、头脑风暴或偏好内容拟稿,请先在本地协助;在用户要求执行工作流前,避免发起网络请求。
标准执行流程(AI Agent)
- 检查 skill 和
curl是否可用。
然后验证:
curl --version
如果用户或环境提供了基础 URL,请使用该 URL。否则,在此仓库中默认使用:
BASE_URL="${AIDATING_BASE_URL%/}"
if [ -z "$BASE_URL" ]; then
BASE_URL="https://api.aidating.top"
fi
- 准备本地请求上下文(完整示例)。
BODY_PATH="$(pwd)/.tmp_dating_body.json"
AUTH=""
TASK_ID=""
MATCH_ID=""
- 注册或登录(完整参数示例)。
注册或登录前,请确认用户愿意使用外部约会后端,并了解账户数据将存储在该处。
cat > "$BODY_PATH" <<'JSON'
{"username":"amy_2026"}
JSON
REGISTER_RESP=$(curl -sS -X POST "$BASE_URL/register" \
-H "Content-Type: application/json" \
--data-binary @"$BODY_PATH")
cat > "$BODY_PATH" <<'JSON'
{"username":"amy_2026","password":"123456"}
JSON
LOGIN_RESP=$(curl -sS -X POST "$BASE_URL/login" \
-H "Content-Type: application/json" \
--data-binary @"$BODY_PATH")
AUTH=$(printf '%s' "$LOGIN_RESP" | jq -r '.data.tokenHead + .data.token')
注意: 按照返回结果原样将
<tokenHead><token>拼接为Authorization标头。在此代码库中,tokenHead已包含末尾空格(Bearer)。
- 解析用户的自我描述并更新个人资料(完整参数示例)。
对于 updateProfile,描述性文本字段优先使用用户所用的语言。gender 请使用后端固定的英文词汇。
调用 updateProfile 前,仅发送当前任务所需的字段;如需包含照片、精确位置或联系方式,请先征得用户确认。
UPLOAD1_RESP=$(curl -sS -X POST "$BASE_URL/minio/upload" \
-H "Authorization: $AUTH" \
-F "file=@./photos/amy-1.jpg")
UPLOAD2_RESP=$(curl -sS -X POST "$BASE_URL/minio/upload" \
-H "Authorization: $AUTH" \
-F "file=@./photos/amy-2.jpg")
UPLOAD1_URL=$(printf '%s' "$UPLOAD1_RESP" | jq -r '.data.url')
UPLOAD2_URL=$(printf '%s' "$UPLOAD2_RESP" | jq -r '.data.url')
cat > "$BODY_PATH" <<JSON
{
"gender": "male",
"birthday": "1998-08-08",
"heightCm": 180,
"weightKg": 72,
"characterText": "sincere, steady, humorous",
"hobbyText": "badminton, travel, photography",
"abilityText": "cooking, communication, English",
"major": "Computer Science",
"nationality": "China",
"country": "China",
"province": "Zhejiang",
"city": "Hangzhou",
"addressDetail": "Xihu District",
"email": "[email protected]",
"phone": "13800000000",
"telegram": "amy_tg",
"wechat": "amy_wechat",
"whatsapp": "amy_wa",
"signalChat": "amy_signal",
"line": "amy_line",
"snapchat": "amy_snap",
"instagram": "amy_ins",
"facebook": "amy_fb",
"otherContacts": {
"xiaohongshu": "amy_xhs",
"discord": "amy#1234"
},
"photoUrls": ["$UPLOAD1_URL", "$UPLOAD2_URL"]
}
JSON
curl -sS -X PUT "$BASE_URL/member-profile" \
-H "Authorization: $AUTH" \
-H "Content-Type: application/json" \
--data-binary @"$BODY_PATH"
注意: 个人资料更新、任务创建和任务更新的参数均为可选项。为了提供良好的用户体验,首次使用时不要强迫用户填写个人信息。
-
为了及时收到匹配成功通知,强烈建议通过个人资料更新请求载荷注册电子邮件地址。
-
解析择偶偏好并创建匹配任务(完整参数示例)。用户无需填写所有字段,只需提供已有的信息。
对于 createTask,taskName 和所有描述性条件文本字段优先使用用户所用的语言。preferredContactChannel 请使用后端固定的英文词汇。
调用 createTask 前,请确认用户愿意将这些匹配条件提交到外部后端。
cat > "$BODY_PATH" <<'JSON'
{
"taskName": "Find partner in Hangzhou",
"criteria": {
"preferredGenderFilter": { "eq": "female" },
"preferredHeightFilter": { "gte": 165, "lte": 178 },
"preferredCityFilter": { "eq": "Hangzhou" },
"preferredNationalityFilter": { "eq": "China" },
"preferredEducationFilter": { "contains": "Bachelor" },
"preferredOccupationFilter": { "contains": "Product" },
"preferredEducationStage": "Bachelor or above",
"preferredOccupationKeyword": "Product Manager",
"preferredHobbyText": "reading, travel",
"preferredCharacterText": "kind, positive",
"preferredAbilityText": "strong communication",
"intention": "long-term relationship",
"preferredContactChannel": "telegram"
}
}
JSON
TASK_RESP=$(curl -sS -X POST "$BASE_URL/match-tasks" \
-H "Authorization: $AUTH" \
-H "Content-Type: application/json" \
--data-binary @"$BODY_PATH")
TASK_ID=$(printf '%s' "$TASK_RESP" | jq -r '.data.taskId')
*EmbeddingMinScore 表示嵌入匹配的最低语义相似度阈值。
默认建议留空。创建任务时若省略该项,后端会在适用情况下将语义文本阈值默认为 0.0。
写入 API 响应说明:
task create会返回已创建的任务载荷,其中包含taskId和taskName。
- 如果已有未完成的
taskId,且用户没有明确要求创建新任务,请更新现有任务(完整参数示例)。
对于 updateTask,taskName 和所有描述性条件文本字段优先使用用户所用的语言。preferredContactChannel 请使用后端固定的英文词汇。
调用 updateTask 前,请确认用户愿意用新值覆盖远程任务条件。
cat > "$BODY_PATH" <<'JSON'
{
"taskName": "Update criteria - Hangzhou/Shanghai",
"criteria": {
"preferredGenderFilter": { "eq": "female" },
"preferredHeightFilter": { "gte": 163, "lte": 180 },
"preferredCityFilter": { "in": ["Hangzhou", "Shanghai"] },
"preferredHobbyText": "reading, travel, sports",
"preferredCharacterText": "independent, optimistic",
"preferredAbilityText": "communication and collaboration",
"intention": "serious relationship with marriage plan",
"preferredContactChannel": "wechat"
}
}
JSON
curl -sS -X POST "$BASE_URL/match-tasks/$TASK_ID/update" \
-H "Authorization: $AUTH" \
-H "Content-Type: application/json" \
--data-binary @"$BODY_PATH"
注意: 保留创建响应中的
taskId。公共 API 未提供用于找回未知活动任务的列表端点。
- 查询任务状态(完整参数示例)。
curl -sS "$BASE_URL/match-tasks/$TASK_ID" \
-H "Authorization: $AUTH"
- 执行
check检查匹配结果(完整参数示例,支持分页)。
CHECK_RESP=$(curl -sS "$BASE_URL/match-tasks/$TASK_ID/check?page=1" \
-H "Authorization: $AUTH")
每页返回 10 位候选人。需要时,使用 page 查询参数获取后续页面。
check 候选人条目包含 photoUrls(用户上传的图片 URL 数组),解释和筛选候选人时应使用这些图片。
如果结果为 NO_RESULT_RETRY_NOW,请根据需要再次调用 check。
如果结果为 MATCH_FOUND,请继续查看联系方式。
注意: 应先向用户展示候选人的照片。你应自动选择更符合用户要求的候选人,以减轻用户的信息筛选负担。
- 从匹配结果中选择最佳候选人并查看联系方式(完整参数示例)。
只有在用户明确选择该候选人,并同意从外部后端获取联系方式后,才能调用 reveal-contact。
MATCH_ID="<selected matchId from check response>"
REVEAL_RESP=$(curl -sS -X POST "$BASE_URL/match-results/$MATCH_ID/reveal-contact" \
-H "Authorization: $AUTH")
- 需要时提交评价(完整参数示例)。
cat > "$BODY_PATH" <<'JSON'
{
"rating": 5,
"comment": "Good communication and aligned values"
}
JSON
curl -sS -X POST "$BASE_URL/match-results/$MATCH_ID/reviews" \
-H "Authorization: $AUTH" \
-H "Content-Type: application/json" \
--data-binary @"$BODY_PATH"
- 可选命令(完整参数示例)。
curl -sS -X POST "$BASE_URL/match-tasks/$TASK_ID/stop" \
-H "Authorization: $AUTH"
curl -sS -X POST "$BASE_URL/logout" \
-H "Authorization: $AUTH"
参考
有关字段级行为、验证规则和响应结构的详细信息:
references/curl-api-operations.md