📦 Ekyc Suite — AI身份核验

v1.0.3

一站式金融级eKYC能力集:8项生物识别与证件核验API,支持人脸比对、活体检测、OCR证件识别、银行卡识别等,AI代理可直接调用腾讯云接口完成远程开户、实名认证等场景。

0· 142·1 当前·1 累计
下载技能包
License
MIT-0
最后更新
2026/4/7
0
安全扫描
VirusTotal
无害
查看报告
OpenClaw
可疑
medium confidence
该技能请求的凭证、端点及代码整体符合eKYC集成场景,但在OCR输出姓名/身份证号等隐私处理上存在指令模糊,与“不得传输个人文本”规则不完全一致。
评估建议
该技能基本符合其描述:调用腾讯云eKYC与媒体标注接口,需两组API凭证。安装前请注意: - 敏感输出:脚本执行OCR会提取姓名、身份证号、银行卡号。SKILL.md要求拒绝个人文本输入并给出掩码示例,但代码未强制脱敏。建议要求作者(或自行修改)在返回前对ID/银行卡号脱敏,或屏蔽原始PII。 - 凭证:仅提供测试凭证,避免生产密钥。凭证允许技能将图像/视频数据上传至腾讯云,遵循最小权限。 - 数据流与合规:技能将base64编码图像/视频发送至第三方,上传前请确认供应商的数据留存与合规政策。 - 运行安全:代码已屏蔽内网URL并限制文件大小,建议在沙箱环境先用测试数据验证。 若作者提供可审计的脱敏步骤或配置选项,并承诺不返回未掩码标识符,可提升置信度。否则,请视其为可能泄露未脱敏PII的高风险技能。...
详细分析 ▾
用途与能力
名称、描述、所需环境变量(KYC_APPID/KYC_SECRET与LABEL_APPID/LABEL_SECRET)及Python脚本均指向腾讯云eKYC/媒体标注集成,代码调用的端点与声明能力一致。
指令范围
SKILL.md要求代理拒绝用户提供的个人文本(姓名/身份证号),仅接受图像/视频,但脚本执行OCR后会返回提取的姓名/ID/银行卡号。README示例虽展示掩码输出,但代码与指令均未强制要求脱敏,存在泄露敏感标识符的模糊地带。
安装机制
无安装规范,仅运行时调用内置Python脚本。依赖极少(requests),无第三方二进制下载或远程安装URL,代码随包本地执行,安装风险低。
凭证需求
所需环境变量与功能匹配(KYC与标注两组凭证),属上游API调用常规要求。提供凭证后,技能可上传图像(含OCR提取的PII)至腾讯云。文档提醒使用测试凭证,可降低风险,但需用户自行遵守。
持久化与权限
技能未请求always=true,不持久化凭证,代码声明不保留提交数据,无修改其他技能或系统级设置的行为。
安全有层次,运行前请审查代码。

License

MIT-0

可自由使用、修改和再分发,无需署名。

运行时依赖

无特殊依赖

版本

latestv1.0.32026/3/30

ekyc-suite 1.0.3 - 更新 _meta.json 中的元数据。 - 核心功能、接口与文档无变动。 - 仅因元数据调整而升级版本。

无害

安装命令

点击复制
官方npx clawhub@latest install ekyc-suite
镜像加速npx clawhub@latest install ekyc-suite --registry https://cn.longxiaskill.com

技能文档

金融级电子身份核验工具包,涵盖人脸比对、活体检测、证件 OCR、媒体标签等 8 项能力。 所有输入仅限图像或视频文件。


快速参考

能力命令
人脸比对python scripts/ekyc_api.py face_compare --photo1 --photo2
照片活体python scripts/ekyc_api.py photo_liveness_detect --file
视频活体python scripts/ekyc_api.py video_liveness_detect --file
身份证 OCRpython scripts/ekyc_api.py id_card_ocr --image --side <0\1>
银行卡 OCRpython scripts/ekyc_api.py bank_card_ocr --image
驾驶证 OCRpython scripts/ekyc_api.py driver_license_ocr --image
行驶证 OCRpython scripts/ekyc_api.py vehicle_license_ocr --image --side <1\2>
媒体标签python scripts/ekyc_api.py media_labeling --file --labels "A14,B03" --type image

外部端点

端点能力传输数据
https://kyc1.qcloud.com2、3、4、5(活体、证件 OCR)Base64 图像/视频 + 签名请求
https://miniprogram-kyc.tencentcloudapi.com1、6、7(人脸比对、驾照/行驶证 OCR)Base64 图像 + 签名请求
https://kyc2.qcloud.com8(媒体标签)Base64 图像/视频 + 签名请求
不传输任何个人文本数据(姓名、证件号),仅发送图像/视频二进制数据。


安全与隐私

本软件不存储、缓存或保留任何提交数据。 API 核验结果仅供参考,不构成法律意义上的身份确认。 不得将本软件作为产生法律效果或重大影响的自动化决策唯一依据。 高风险身份决策应补充业务逻辑与人工审核。


信任声明

安装并使用本 skill 后,你提供的图像与视频数据将被发往腾讯云身份核验 API 处理。 仅在你信任上游服务商数据处理实践的前提下安装。 本 skill 不独立存储、处理或保留任何生物识别数据。


目标

接收用户上传的图像或视频,调用对应身份核验 API,将结构化结果用通俗语言解释给用户。


何时使用

当用户请求涉及以下场景时调用本 Skill:

  • “Compare these two photos — same person?” / “face similarity score”
  • “Is this photo AI-generated?” / “Is this video real?” / “deepfake detection”
  • “Read this ID card” / “Read bank card number” / “Read driver's license” / “Read vehicle license”
  • “Check for mask” / “Detect coercion” / “Wearing hat?” / “On the phone?”
  • “Unconscious or asleep?” / “Wearing sunglasses?” / “Inside a car?”
  • “In a hotel room?” / “Has tattoo?” / “Multiple people?” / “Wearing headphones?”
  • “Facial sheet mask?” / “Critical patient?” / “At a car dealership?”
  • 任何包含 “face comparison”、“liveness detection”、“OCR”、“media labeling”、“ekyc” 的请求

请勿使用

  • 用户仅询问 “what is KYC” 或 “how does eKYC work” → 直接以知识回答
  • 用户以文本提供姓名、证件号、手机号 → 拒绝并引导(见下方隐私规则)
  • 用户要求“活体检测+身份验证”组合(需传输姓名+证件号)→ 说明隐私限制

关键规则

规则 1:隐私 —— 绝不接受个人文本

绝不接受或传输姓名、证件号、手机号等个人文本数据。 若用户提供,回复:
“为保护隐私,本服务不接受文本形式的姓名、证件号等敏感信息。AI 对话传输存在泄露风险,请直接上传图像或视频文件,我将通过图像识别完成核验。”

规则 2:绝不重写签名代码

始终使用 scripts/ 下的 Python 脚本。签名算法使用 SHA1(40 位大写十六进制)。 过往 AI 模型曾误用 SHA256(64 位)导致 100% 认证失败。脚本含断言:assert len(signature) == 40。 若签名长度为 64,说明误用 SHA256,立即改用脚本。

规则 3:双路径解析返回

API 返回可能在顶层或嵌套在 result 对象内,必须同时检查:
value = data.get("field") or (data.get("result", {}) or {}).get("field")
跳过将导致 None / undefined 错误。


环境变量

# 能力 1-7(人脸比对、活体、证件 OCR)
KYC_APPID=your_kyc_appid
KYC_SECRET=your_kyc_secret

# 能力 8(媒体标签,独立密钥) LABEL_APPID=your_label_appid LABEL_SECRET=your_label_secret

获取密钥:

  • 密钥 A(KYC)与密钥 B(LABEL):联系慧眼技术支持(微信:blue-201809)
  • 或在 腾讯云人脸核身控制台 注册获取密钥 A

⚠️ 重要:使用测试密钥(免费 100 次),切勿使用生产密钥,否则将产生上游计费。

部分配置支持: 仅密钥 A 可启用能力 1-7;仅密钥 B 可启用能力 8。 若用户请求未配置的能力,请明确告知缺失的密钥及获取方式。


8 项能力

能力 1:人脸比对

  • 触发:“compare these two photos”、“same person?”、“face similarity”
  • 用户需提供:两张含人脸照片
  • 仅上传一张:请提示“请再上传第二张照片用于比对”
  • 执行python scripts/ekyc_api.py face_compare --photo1 --photo2
  • 返回:similarity(0–100 分)
  • 结果解释
- ≥80:高置信度,可判定为同一人(误识率约 1/10,000) - 70–79:可判定为同一人(误识率约 1/1,000),阈值可按业务调整 - <70:不建议判定为同一人,建议换更清晰照片重比
  • 回复示例
“两张照片相似度 95.7(满分 100),高置信度匹配,可判定为同一人。”

能力 2:照片活体检测

  • 触发:“is this photo real?”、“AI-generated?”、“photoshopped?”
  • 用户需提供:一张含人脸照片
  • 执行python scripts/ekyc_api.py photo_liveness_detect --file
  • 返回:riskLevel(风险等级)、riskTag(风险标签编号)
  • 结果解释
- Level 1:无攻击风险,真实照片 - Level 2:中度可疑,建议换照片重测 - Level 3:高度可疑,照片极可能伪造/AI 生成,建议拒绝 - 风险标签含义(需展示): 01=闭眼 / 02=动作未完成 / 03=疑似翻拍 / 04=疑似合成攻击 05=疑似欺诈模板 / 06=疑似水印 / 07=反光校验失败 / 08=多人脸 09=人脸质量差 / 10=距离校验失败 / 11=疑似对抗攻击 / 12=疑似面部攻击痕迹
  • 回复示例
“检测结果:风险等级 3(高度可疑),风险标签 04(疑似合成攻击)。该照片极可能为 AI 合成,不建议用于身份核验。”

能力 3:视频活体检测

  • 触发:“is this video real?”、“deepfake?”、“video liveness”
  • 用户需提供:含人脸视频(≤20 MB;超过 20 秒将报错)
  • 视频过大:提示“视频需 ≤20 MB,请压缩后重新上传”
  • 执行python scripts/ekyc_api.py video_liveness_detect --file
  • 网络重试:上传可能遇 999999 网络错误,脚本自动指数退避重试 3 次,仍失败则告知“网络繁忙,请稍后再试”
  • 返回与解释:同能力 2
  • 回复示例
“视频检测:风险等级 1(无攻击风险),视频真实,未发现 deepfake 或合成痕迹。”

能力 4:身份证 OCR

  • 触发:“read ID card”、“extract ID card info”
  • 用户需提供:身份证照片 + 正反面标记
- 0 = 人像面(正面,含照片) - 1 = 国徽面(背面,含签发机关与有效期)
  • 未指定面:询问“这是人像面(正面带照片)还是国徽面(背面带国徽)?”
  • 执行python scripts/ekyc_api.py id_card_ocr --image --side <0|1>
  • 返回
- 人像面(side=0):name、sex、nation、birth、idcard、address - 国徽面(side=1):authority、validDate
  • 结果解释:将字段整理为清晰列表
  • 回复示例(人像面)
“身份证识别结果:姓名:李明,性别:男,民族:汉,出生:1992-06-20,公民身份号码:440305199206***,住址:广东省深圳市南山区科技路 88 号。”
  • 回复示例(国徽面)
“身份证识别结果:签发机关:深圳市公安局,有效期限:2015.03.20–2035.03.20。”

能力 5:银行卡 OCR

  • 触发:“read bank card”、“card number”、“bank card OCR”
  • 用户需提供:银行卡正面照片
  • 执行python scripts/ekyc_api.py bank_card_ocr --image
  • 返回:bankcardNo(卡号)、bankcardValidDate(有效期)
  • 结果解释:展示卡号与有效期;若有效期为空,说明卡面未印刷
  • 回复示例
“银行卡识别结果:卡号 6222 0200 000,有效期 08/28。”

能力 6:驾驶证 OCR

  • 触发:“read driver's license”、“driver license info”
  • 用户需提供:驾驶证照片
  • ⚠️ 仅支持主页:若上传副页,API 返回错误 -9005,回复:
“驾驶证 OCR 仅支持主页(正面),请重新上传主页。”
  • 执行python scripts/ekyc_api.py driver_license_ocr --image
  • 返回:licenseNo、name、sex、nationality、address、birth、fetchDate、driveClass、validDateFrom、validDateTo
  • 结果解释:整理为清晰列表,突出准驾车型与有效期
  • 回复示例
“驾驶证识别结果:证号:440305199206200013,姓名:李明,准驾车型:C1,有效期限:2020-05-28 至 2026-05-28。”

能力 7:行驶证 OCR

  • 触发:“read vehicle license”、“vehicle info”
  • 用户需提供:行驶证照片 + 页面标记
- 1 = 主页(车辆基本信息) - 2 = 副页(核定载客、检验记录等)
  • 未指定:询问“这是主页还是副页?”
  • 执行python scripts/ekyc_api.py vehicle_license_ocr --image --side <1|2>
  • 返回
- 主页(side=1):plateNo、vehicleType、owner、model、vin、engineNo、registeDate、issueDate - 副页(side=2):额外返回 authorizedCarryCapacity、authorizedLoadQuality、fileNumber、total、inspectionRecord、externalDimensions、curbWeright
  • 结果解释:主页突出车牌与 VIN;副页突出核定载客与检验记录
  • 回复示例
“行驶证识别结果:号牌号码:粤 B88888,车辆类型:小型轿车,所有人:李明,车辆识别代号:LGWEE6K58RH000001,发动机号码:DKZ000001,注册日期:2022-03-15。”

能力 8:媒体标签

  • 触发:“check for mask”、“detect coercion”、“wearing hat?”、“on the phone?”、“inside a car?”、“multiple people?”、“tattoo?”、“hotel room?”、“media labeling”
  • 用户需提供:图像或视频 + 属性描述(你根据描述自动映射标签代码)
  • 标签对照表(根据用户描述自动选取):

人像标签:检测用户状态与风险

代码标签描述场景
A10Unconscious/asleep闭眼或强行睁眼安全监控、风险预警
A09Under coercion检测到被胁迫姿势反欺诈、安全告警
A15Critical patient危重病人骗贷防控、合规
A11On the phone正在打电话通话场景、第三方指导
A04Wearing headphones佩戴耳机通话场景、第三方指导
A05Nudity身体敏感部位暴露合规审核
A13Tattoo检测到纹身特征标记、风险分析
A02Mask covering face医用口罩遮挡面部身份检测、合规
A14Wearing hat检测到帽子遮挡检测、伪装
A01Facial sheet mask敷片状面膜护肤或遮挡检测
A06Wearing sunglasses检测到太阳镜遮挡检测、合规
环境标签:检测业务场景
代码标签描述场景
B02Multiple people画面中出现多人群体场景、第三方指导
B03Inside passenger vehicle乘用车(轿车、SUV 等)内车贷、出行、合规
B06In hotel酒店房间内场景审核、风控
B07At car dealership汽车 4S 店内消费金融、合规

  • 每次最多 5 个标签代码
  • 执行python scripts/ekyc_api.py media_labeling --file --labels "A02,A14" --type image
- type:image 为照片,video 为视频
  • 异步流程:API 为 2 步异步(提交→等待→查询),脚本已自动处理,通常 5–10 秒返回
  • 返回:fileLabel(标签结果数组)、liveStatus(活体状态)、compareStatus(人脸比对状态)
  • 结果解释
- fileLabel 每项:1=检出,0=未检出,空=识别异常(建议重试) - liveStatus:1=活体,0=非活体 - compareStatus:1=人脸比对通过,0=比对不通过
  • 回复示例
  媒体标签结果:
  - A14(佩戴帽子):✅ 检出
  - A02(口罩遮挡):❌ 未检出
  活体状态:活体
  

完整示例

正向:用户请求人脸比对

用户:“Are these two photos the same person?” + [上传 Photo A] + [上传 Photo B] 你的动作
  • 确认收到两张照片
  • 执行 python scripts/ekyc_api.py face_compare --photo1 PhotoA --photo2 PhotoB
  • 收到:{"success": true, "similarity": "95.7", "orderNo": "ekyc..."}
  • 回复:
“两张照片相似度 95.7(满分 100),高置信度匹配,可判定为同一人。”

负向:用户提供个人文本

用户:“Verify Li Ming, ID number 440305199206200013, against this photo” + [上传照片] 你的动作
  • 检测到提供姓名与证件号 → 触发隐私规则
  • 不执行任何 API
  • 回复:
“为保护隐私,本服务不接受文本形式的姓名或证件号。请直接上传两张人脸照片,我将通过图像比对判断是否同一人。”


完成定义

每次 API 调用后,确保满足:

  • [ ] API 返回 code=0(成功)
  • [ ] 原始数据已转换为通俗易懂的自然语言
  • [ ] 包含结果解释(不仅是数字,而是含义)
  • [ ] 若出错(code≠0),已用通俗语言告知原因及建议
  • [ ] 对话中未暴露 API 密钥、orderNo 等技术细节(除非用户追问)

错误处理

出错时,用通俗语言说明并给出建议:

通用错误码(所有能力)

错误码面向用户的提示
1101 / 1102“认证失败——API 密钥可能配置错误,请检查 .env 文件。”
1103“当前 IP 未在白名单,请联系管理员。”
1106“请求格式无效,请检查请求结构。”
1107“请求参数有误,请确认必填字段。”
1502“版本参数无效,请使用 1.0.0。”
1503“文件校验失败,请重新上传。”
1505“无权限访问,请检查 appid 授权。”
1506 / 1507“请求过于频繁,请等待 10 秒后重试。”
1601“请求体过大,请减小文件体积。”
1602“请求体参数错误,请检查格式。”
999999 / 999998 / 999997“网络繁忙,正在自动重试…(3 次均失败请稍后再试)”

人脸与活体错误码(能力 1–3)

错误码面向用户的提示
66660016“图像/视频文件异常,请重拍或换文件。”
66660023 / 66660048“未检测到合格人脸,请正对摄像头并确保清晰。”
66660037“照片出现多张人脸,请使用单人照片。”
66660041“面部被遮挡或闭眼,请换清晰照片重试。”
66660078“未检测到人脸,请确保照片光线充足、正面。”
1603“视频文件无效,请检查格式。”
1606“响应解密失败,请重试。”
1607“未找到结果,订单可能已过期。”
FailedOperation.CoveredFace“面部被遮挡,请提供无遮挡照片。”
FailedOperation.IncompleteFace“面部不完整,请提供完整面部照片。”
FailedOperation.PoorImageQuality“图像质量太差,请检查照片。”
FailedOperation.ImageDecodeFailed“图像解码失败,文件可能损坏。”
FailedOperation.VideoDecodeFailed“视频解码失败,请检查格式。”
FailedOperation.VideoDurationExceeded“视频过长,仅支持 20 秒内,请裁剪后重传。”
FailedOperation.DetectEngineSystemError“检测引擎错误,请重试。”
FailedOperation.UnKnown“内部错误,请重试或联系技术支持。”

OCR 错误码(能力 4–7)

错误码面向用户的提示
-1102“图像解码失败,文件可能损坏,请重拍或换图。”
-1300“图像为空,请上传有效图片。”
-1301“缺少必填参数,请检查请求。”
-1304“参数值过长,请检查长度限制。”
-9001“请求类型无效,请检查 side/type 参数。”
-9002“OCR 识别失败,可能照片不够清晰,请在光线充足处重拍。”
-9005“图像无效或不支持。驾驶证仅支持主页(正面)。”
-9006“图像预处理失败,请换照片重试。”
66661001“非身份证或图像不清晰,请确认证件类型并确保完整清晰。”
66661013 / 66661005“请调整角度,确保证件完整清晰。”

媒体标签错误码(能力 8)

错误码面向用户的提示
66660000“订单号无效,请检查 orderNo。”
66660001“appId 无效,请验证密钥。”
66660002“请求已过期,请重新生成签名。”
66660003“试用额度已用完,请升级套餐或联系商务。”
66660004“并发超限,请稍后再试。”
66660013“请求参数无效,请检查格式。”
66660016“图像/视频文件异常,请重拍或换文件。”
66661014“未找到标签结果,订单可能过期,请重新提交。”
66661015“标签识别仍在处理中,请稍候…(脚本自动重试)”
66661016“单次标签数超限(最多 5 个),请减少后重试。”
66661018“部分标签代码不存在或尚未开放。”
66661019“未提供标签,请至少指定一个标签代码。”
66661020“标签代码格式错误,请使用 A01、B03 这类格式。”
66661021“您的 appId 未开通本服务,请联系技术支持。”
66661022“媒体标签处理失败,请重新提交。”
66661023“图像预检失败,请确保图像符合质量要求。”
1104“认证签名过期或无效,正在自动刷新,请重试。”
400101“缺少必填参数,请检查请求格式。”
400103“参数值无效,请核对标签代码与输入格式。”
400105“appid 与密钥集不匹配,请检查 Key A / Key B 配置。”
400106“签名验证失败,请确认使用正确的密钥集。”
400501“文件上传失败,请检查文件后重试。”
400502“文件格式不支持,请使用 JPG、PNG 或 MP4。”
400505“文件处理超时,请换小文件重试。”
400506“文件内容为空或损坏,请重新上传。”
400601“服务暂时不可用,请稍后再试。”
400602“服务配额已用完,请联系商务提升额度。”
未列出错误码: “意外错误(code: XXX, message: XXX),请联系技术支持。”


认证架构

能力 1–7(KYC 认证)——3 步

Step 1: GET access_token ← app_id + secret  
Step 2: GET SIGN ticket ← app_id + access_token  
Step 3: Signature = sort([appId, orderNo, nonce, "1.0.0", ticket]) → concat → SHA1 → 40 位大写

实现:scripts/kyc_auth.py —— 勿重写,直接调用

能力 8(标签认证)——2 步

Step 1: GET ticket 直接 ← appId + secret(无需 access_token)  
Step 2: Signature = sort([appId, orderNo, nonce, "1.0.0", ticket, unixTimeStamp]) → concat → SHA1 → 40 位大写

区别:6 个参数(增加 unixTimeStamp),ticket 直接获取。 实现:scripts/label_auth.py —— 勿重写,直接调用*


法律声明

本软件不存储、缓存或保留任何提交数据。 API 核验结果仅供参考,不构成法律意义上的身份确认。 不得将本软件作为产生法律效果或重大影响的自动化决策唯一依据。 高风险身份决策应补充业务逻辑与人工审核。

数据来源ClawHub ↗ · 中文优化:龙虾技能库