1

分享此资讯给好友,自动附带您的名片信息

AI支付

远程身份核验全链路:CodeBuddy 串联身份证 OCR + 活体 + 人脸比对 + AI 防护盾

腾讯云2026/07/30 14:40原文

次实名认证请求,其中 217 次通过认证后秒级发起大额提现 - 影响:风控拦截前 17 笔提现成功,资金损失 ¥86,400 - 根因:黑产用 DeepFaceLive 实时换脸 + 高清身份证翻拍绕过旧版活体检测 ``` ​ 我盯着监控大盘上那一根根突刺,后背发凉。旧版活体检测能挡住静态照片翻拍,但挡不住实时换脸——摄像头里明明是真人动作,脸却被人实时替换成了身份证上的照片。当周我接到的硬指标就是:**两周内上线四重防线,换脸攻击必须挡住 99% 以上**。调研一圈后,我把希望押在了腾讯云 FaceID 的 AI 防护盾 Skill 上,配合 OCR、活体、人脸比对组成串联链路。这篇文章是这次风控升级的完整复盘。 ​ ## 📖 第一章:痛点与 Skill 选型 ​ ### 1.1 旧版核验链路到底漏在哪 ​ 先看旧版链路(OCR + 简单活体 + 人脸比对)的攻防对照,明白漏洞在哪才能对症下药: ​ | 攻击手法 | 旧版是否能挡 | 漏洞根因 | |---------|:----------:|---------| | 静态照片翻拍 | ✅ 能挡 | 活体检测识别非真人 | | 高清身份证翻拍 | ⚠️ 偶尔漏 | 旧活体模型对高清屏翻拍识别力弱 | | DeepFaceLive 实时换脸 | ❌ 挡不住 | 动作是真人做的,旧活体只看"动没动" | | 录播视频冒充 | ⚠️ 偶 尔漏 | 旧活体未做视频 AIGC 识别 | | 3D 面具攻击 | ❌ 挡不住 | 旧活体无 3D 面具检测能力 | ​ > 最致命的是 DeepFaceLive——黑产用 OBS 虚拟摄像头把真人动作实时驱动到身份证照片上,旧版活体检测看到的就是"真人在动",自然放行。这就是 217 笔通过认证的根因。 ​ ### 1.2 四 Skill 能力矩阵对比 ​ 我调研了腾讯云 FaceID 系列的 4 个 Skill,做了张能力矩阵帮助选型: ​ | Skill | 核心能力 | 输入 | 输出 | 单次成本 | 防御范围 | |-------|---------|------|------|:-------:|---------| | `tencentcloud-ocr-idcard` | 身份证 OCR 识别 | 身份证图片 | 姓名/身份证号/地址/有效期 | ¥0.015 | 信息提取 | | `tencentcloud-faceid-detectlivefaceaccurate` | 静态活体高精度版 | 单张人脸图 | 活体评分/是否翻拍 | ¥0.025 | 翻拍/打印攻击 | | `tencentcloud-faceid-compareface` | 人脸 1:1 比对 | 两张人脸图 | 相似度评分 | ¥0.015 | 冒用他人身份 | | `tencentclou

行者全栈架构师

修改

于

2026-07-30 22:43:09

修改于 2026-07-30 22:43:09

概述

本文复盘笔者作为电商金融业务架构师,用 CodeBuddy CLI 编排腾讯云 4 个 AI Skill(身份证 OCR、人脸静态活体高精度版、人脸比对、AI 人脸防护盾)搭建远程开户实名认证四重防线的过程。覆盖黑产攻击场景拆解、四 Skill 能力矩阵对比、全链路架构设计、降级决策树、子代理编排、Python 完整实现、3 个真实踩坑复盘与监控告警。上线后黑产攻击拦截率 99.2%

> 💡 **摘要**: 本文复盘笔者作为电商金融业务架构师,用 CodeBuddy CLI 编排腾讯云 4 个 AI Skill(身份证 OCR、人脸静态活体高精度版、人脸比对、AI 人脸防护盾)搭建远程开户实名认证四重防线的过程。覆盖黑产攻击场景拆解、四 Skill 能力矩阵对比、全链路架构设计、降级决策树、子代理编排、Python 完整实现、3 个真实踩坑复盘与监控告警。上线后黑产攻击拦截率 99.2%,误杀导致的开户通过率从 78% 提升到 94%,单次核验成本仅 ¥0.08。

​

**文章难度**: ⭐⭐⭐⭐⭐(适合有 Python 基础的后端/安全/风控开发工程师)

​

**前置知识**: 了解 HTTP API 调用、对实名认证基本流程有概念、熟悉命令行操作

​

**适用版本**: CodeBuddy CLI 5.x / tencentcloud-ocr-idcard latest / tencentcloud-faceid-detectlivefaceaccurate latest / tencentcloud-faceid-compareface latest / tencentcloud-faceid-detectaifakefaces latest / Python 3.10+(2026 年 7 月版本)

​

## 🎯 场景开篇:黑产凌晨的换脸攻击

​

```text

**一个周一早晨的风控复盘会**

​

- 时间:2026 年 7 月 8 日,周一上午 10 点

- 事件:周末 48 小时内,开户接口收到 3127 次实名认证请求,其中 217 次通过认证后秒级发起大额提现

- 影响:风控拦截前 17 笔提现成功,资金损失 ¥86,400

- 根因:黑产用 DeepFaceLive 实时换脸 + 高清身份证翻拍绕过旧版活体检测

```

​

我盯着监控大盘上那一根根突刺,后背发凉。旧版活体检测能挡住静态照片翻拍,但挡不住实时换脸——摄像头里明明是真人动作,脸却被人实时替换成了身份证上的照片。当周我接到的硬指标就是:**两周内上线四重防线,换脸攻击必须挡住 99% 以上**。调研一圈后,我把希望押在了腾讯云 FaceID 的 AI 防护盾 Skill 上,配合 OCR、活体、人脸比对组成串联链路。这篇文章是这次风控升级的完整复盘。

​

## 📖 第一章:痛点与 Skill 选型

​

### 1.1 旧版核验链路到底漏在哪

​

先看旧版链路(OCR + 简单活体 + 人脸比对)的攻防对照,明白漏洞在哪才能对症下药:

​

| 攻击手法 | 旧版是否能挡 | 漏洞根因 |

|---------|:----------:|---------|

| 静态照片翻拍 | ✅ 能挡 | 活体检测识别非真人 |

| 高清身份证翻拍 | ⚠️ 偶尔漏 | 旧活体模型对高清屏翻拍识别力弱 |

| DeepFaceLive 实时换脸 | ❌ 挡不住 | 动作是真人做的,旧活体只看"动没动" |

| 录播视频冒充 | ⚠️ 偶尔漏 | 旧活体未做视频 AIGC 识别 |

| 3D 面具攻击 | ❌ 挡不住 | 旧活体无 3D 面具检测能力 |

​

> 最致命的是 DeepFaceLive——黑产用 OBS 虚拟摄像头把真人动作实时驱动到身份证照片上,旧版活体检测看到的就是"真人在动",自然放行。这就是 217 笔通过认证的根因。

​

### 1.2 四 Skill 能力矩阵对比

​

我调研了腾讯云 FaceID 系列的 4 个 Skill,做了张能力矩阵帮助选型:

​

| Skill | 核心能力 | 输入 | 输出 | 单次成本 | 防御范围 |

|-------|---------|------|------|:-------:|---------|

| `tencentcloud-ocr-idcard` | 身份证 OCR 识别 | 身份证图片 | 姓名/身份证号/地址/有效期 | ¥0.015 | 信息提取 |

| `tencentcloud-faceid-detectlivefaceaccurate` | 静态活体高精度版 | 单张人脸图 | 活体评分/是否翻拍 | ¥0.025 | 翻拍/打印攻击 |

| `tencentcloud-faceid-compareface` | 人脸 1:1 比对 | 两张人脸图 | 相似度评分 | ¥0.015 | 冒用他人身份 |

| `tencentcloud-faceid-detectaifakefaces` | AI 人脸防护盾 | 人脸图 | 是否 AI 生成/换脸 | ¥0.025 | DeepFake/换脸 |

​

四者串联后,覆盖了"信息提取 → 翻拍防御 → 身份确认 → 换脸防御"四个维度,单次核验总成本 ¥0.08。

​

### 1.3 为什么必须四 Skill 串联

​

有些同学会问:直接上 AI 防护盾不就行了吗?我实测过,单 Skill 防御有盲区:

​

- **只用 OCR**:挡不住冒用他人身份证(信息是真的,人不对)

- **只用活体**:挡不住 DeepFake(动作是真的,脸是假的)

- **只用比对**:挡不住高清翻拍(脸对得上,但是照片)

- **只用 AI 防护盾**:挡不住冒用他人真实照片(不是 AI 生成的,但不是本人)

​

四个 Skill 缺一不可,必须串联。这也正是这次落地的核心难点——如何让四个 Skill 协同工作,且任一环节失败时优雅降级,不能因为一个 Skill 抖动就卡死整个开户流程。

​

> 💡 **选型建议**:高敏感场景(金融开户、大额提现)四 Skill 全开;中敏感场景(普通注册)可省去 AI 防护盾,用 OCR+活体+比对三件套,单次成本降到 ¥0.055;低敏感场景(已实名用户二次验证)只用比对即可。**分层防御比一刀切更经济**。

​

## 🏗️ 第二章:整体架构设计

​

### 2.1 全链路核验流程

![02-identity-verification-chain-codebuddy_diagram_1.png](https://developer.qcloudimg.com/http-save/yehe-2059497/2879beba5c0995718621a526a1763328.png)

![02-identity-verification_screenshot_1.png](https://developer.qcloudimg.com/http-save/yehe-2059497/267247014b9fbf58d44b4c5722741aa3.png)

> *图 1:CodeBuddy CLI 中 identity-verification 子代理配置界面*

​

### 2.2 降级决策树

​

四 Skill 串联最大的风险是:某个 Skill 抖动(比如 AI 防护盾 API 偶发超时)会卡死整个开户流程。我设计了一个降级决策树,让链路在任一环节失败时仍能优雅处理:

![02-identity-verification-chain-codebuddy_diagram_2.png](https://developer.qcloudimg.com/http-save/yehe-2059497/8fb77a0ded445a27ea93b30fee04dde5.png)

​

### 2.3 关键设计决策

​

| 决策点 | 选择 | 原因 |

|--------|------|------|

| 编排方式 | CodeBuddy CLI 子代理 | 风控同学可自然语言触发,便于调参 |

| 链路顺序 | OCR → 活体 → 比对 → AI 防护盾 | 由便宜到贵,前序失败立即拦截不浪费后续调用 |

| 阈值策略 | 比对相似度 80 分 + 风险评分 0.6 | 经攻防测试,80 分误杀率 <2%,0.6 风险分准确率 99% |

| 降级策略 | Skill 超时跳过 + 风险评分上浮 | 不让单点抖动卡死流程,但要把风险量化出来 |

| 异步化 | OCR/活体/比对可并行准备 | 比对和活体都用人脸图,可并行预处理 |

| 重试 | 指数退避 max 3 次 | 临时抖动可恢复,但避免无限重试 |

​

## 🔧 第三章:环境搭建与 Skill 安装

​

### 3.1 安装 CodeBuddy CLI

​

身份核验是高频在线任务,CLI 形态方便嵌入到现有风控引擎里通过子进程调用,比 IDE 插件更灵活。

​

```bash

# 安装 CodeBuddy Code(CLI 形态)

# 环境要求:Node.js 18.20+

npm install -g @tencent-ai/codebuddy-code

​

# 验证安装

cbc --version

# 输出示例:CodeBuddy Code v5.x.x

```

​

### 3.2 配置腾讯云 API 密钥

​

密钥管理是这次落地的安全红线。我用 Vault + 环境变量的方式,严禁在代码或配置文件里硬编码:

​

```bash

# 从 Vault 拉取密钥到环境变量(生产环境)

export TENCENTCLOUD_SECRET_ID="${TENCENTCLOUD_SECRET_ID}"

export TENCENTCLOUD_SECRET_KEY="${TENCENTCLOUD_SECRET_KEY}"

export TENCENTCLOUD_REGION="ap-guangzhou"

​

# 验证密钥已加载

echo "SECRET_ID 长度: ${#TENCENTCLOUD_SECRET_ID}"   # 期望 36

echo "REGION: ${TENCENTCLOUD_REGION}"

```

​

> ⚠️ **安全红线**:密钥泄露是风控系统最大的事故源。我见过把密钥写进 Git 仓库导致黑产盗刷 ¥20 万的真实案例。所有密钥必须走 Vault 或 KMS,CI/CD 注入环境变量,代码里只读 `${VAR}`。

​

### 3.3 安装四个 Skill

​

```bash

# 安装身份核验四件套

cbc skill install tencentcloud-ocr-idcard

cbc skill install tencentcloud-faceid-detectlivefaceaccurate

cbc skill install tencentcloud-faceid-compareface

cbc skill install tencentcloud-faceid-detectaifakefaces

​

# 验证安装

cbc skill list | grep -E "idcard|faceid"

```

​

预期输出:

​

```text

# ✓ tencentcloud-ocr-idcard (installed)                 身份证识别

# ✓ tencentcloud-faceid-detectlivefaceaccurate (installed) 人脸静态活体高精度

# ✓ tencentcloud-faceid-compareface (installed)           人脸比对

# ✓ tencentcloud-faceid-detectaifakefaces (installed)     AI 人脸防护盾

```

​

> ⚠️ **踩坑提示**:安装 Skill 后需到腾讯云控制台开通对应产品服务(OCR-身份证识别、FaceID-人脸核身),并申请 corresponding 产品的商用权限。AI 防护盾 `detectaifakefaces` 需要走人工审核开通(约 1 工作日),不要等上线当天才申请。

​

### 3.4 单张身份证 OCR 验证

​

安装完成后先用单张图验证 Skill 工作正常:

​

```bash

# 用 idcard Skill 识别身份证

cbc skill run tencentcloud-ocr-idcard --input ./idcards/sample_front.jpg

```

​

返回结构化 JSON:

​

```json

{

"Name": "张三",

"IdNum": "44030119900101XXXX",

"Sex": "男",

"Nation": "汉",

"Birth": "1990/1/1",

"Address": "广东省深圳市福田区某街道某号",

"Authority": "深圳市公安局福田分局",

"ValidDate": "2020.01.01-2040.01.01"

}

```

![02-identity-verification_screenshot_2.png](https://developer.qcloudimg.com/http-save/yehe-2059497/96eb786cf60be98f551e36b13e2a686f.png)

​

> *图 2:身份证 OCR 识别结果——姓名/号码/有效期/签发机关全字段提取*

​

看到身份证号、有效期、签发机关全字段提取时,我心里踏实了一半——OCR 这关稳了,剩下三关才是真正的硬仗。

​

## 💻 第四章:CodeBuddy 子代理编排

​

### 4.1 为什么必须用子代理

​

四 Skill 串联如果裸写在业务代码里,风控同学改个阈值都得提 PR 找开发,效率太低。用 CodeBuddy 自定义子代理(Sub-Agent)把整条核验链路封装成一个 Agent,风控同学一句话就能触发,调参也只改子代理描述文件,不需要懂代码。

​

### 4.2 定义子代理

​

在项目根目录创建 `.codebuddy/agents/identity-verification.md`:

​

```markdown

# Identity Verification Agent

​

## 角色定义

你是一个远程身份核验助手。接收身份证图片 + 自拍人脸图,

串联执行四重防线:OCR → 活体 → 比对 → AI 防护盾,

输出风险评分与核验结论。

​

## 工具链

1. tencentcloud-ocr-idcard:提取身份证信息

2. tencentcloud-faceid-detectlivefaceaccurate:静态活体检测

3. tencentcloud-faceid-compareface:人脸 1:1 比对

4. tencentcloud-faceid-detectaifakefaces:AI 换脸检测

5. file_ops:读取图片、写入结果

6. db_ops:核验结果入库

​

## 工作流程

1. 调用 idcard 提取身份证姓名、号码、有效期

2. 调用 detectlivefaceaccurate 判断自拍图是否翻拍

3. 调用 compareface 比对身份证头像与自拍图相似度

4. 调用 detectaifakefaces 判断自拍图是否 AI 生成

5. 综合四步结果计算风险评分(0-1)

6. 风险评分 < 0.6 通过;0.6-0.8 转人工;> 0.8 拒绝

7. 输出结构化报告:各步结论 + 风险评分 + 决策

​

## 降级策略

- 任一 Skill 超时(5s)跳过该步

- 跳过步骤按风险权重上浮评分

- 关键步骤(OCR/比对)失败必须转人工,不可跳过

​

## 约束

- 阈值参数从环境变量读取,便于风控动态调整

- 敏感信息用环境变量,不硬编码

- 所有核验结果写入审计日志,保留 180 天

- 单次核验总耗时 < 8s

```

​

### 4.3 触发核验

​

子代理定义完成后,业务侧调用一行命令即可触发:

​

```bash

# 进入项目目录

cd /data/risk/identity-verification

​

# 触发身份核验

cbc "用 identity-verification 核验用户 user_10086,身份证图 ./idcards/10086_front.jpg,自拍图 ./selfies/10086.jpg"

​

# 也支持批量核验

cbc "用 identity-verification 批量核验 ./batch/2026-07-08 目录下所有用户"

```

​

终端实时输出核验进度:

​

```text

[CodeBuddy] 触发子代理: identity-verification

[Verify] 用户: user_10086

[Verify] Step 1/4: 身份证 OCR ...       ✓ 耗时 1.2s

[Verify] Step 2/4: 静态活体检测 ...       ✓ 耗时 0.8s (评分 0.92)

[Verify] Step 3/4: 人脸比对 ...           ✓ 耗时 0.6s (相似度 87)

[Verify] Step 4/4: AI 防护盾 ...         ✓ 耗时 0.9s (非 AI 生成)

[Verify] 风险评分: 0.18 → 通过

[Verify] 总耗时: 3.5s | 总成本: ¥0.08

​

========== 核验报告 ==========

用户 ID:   user_10086

身份证号:   4403**********0011

OCR 结论:   字段完整 ✓

活体结论:   真人 ✓ (评分 0.92)

比对结论:   本人 ✓ (相似度 87)

AI 防护盾: 真实人脸 ✓

风险评分:   0.18

最终决策:   通过

==============================

```

​

看到这个报告的瞬间,风控总监说:"这个透明度,比我们之前的黑盒模型强太多了——每一步都看得见。"

​

核验报告中四重防线的每一步结果都可以单独截图追溯,下面三张图分别展示了活体检测、人脸比对、AI 防护盾三个关键步骤的终端输出:

​

![02-identity-verification_screenshot_3.png](https://developer.qcloudimg.com/http-save/yehe-2059497/57dc07a695c74a0950f2aaa82c11e677.png)

​

> *图 3:静态活体高精度版检测结果——活体评分 0.92 判定为真人*

​

![02-identity-verification_screenshot_4.png](https://developer.qcloudimg.com/http-save/yehe-2059497/bab6f6be5bd8d5775fc0264df6c5ad09.png)

​

> *图 4:人脸 1:1 比对结果——身份证头像与自拍图相似度 87 分*

​

![02-identity-verification_screenshot_5.png](https://developer.qcloudimg.com/http-save/yehe-2059497/5236ac890f9b7ebe2dbba907889e622e.png)

​

> *图 5:AI 人脸防护盾检测结果——判定为真实人脸,未检出 DeepFake 痕迹*

​

## 🐍 第五章:核心代码实现

​

虽然子代理可以用自然语言编排,但风控逻辑必须用代码精确定义,确保可审计、可回滚。下面是核验链路的 Python 完整实现。

​

### 5.1 核验链路编排引擎

​

```python

"""

身份核验四重防线编排引擎

功能:串联 OCR + 活体 + 比对 + AI 防护盾,支持降级与风险评分

"""

import os

import time

import logging

from dataclasses import dataclass, field

from enum import Enum

from typing import Optional, Dict

from concurrent.futures import ThreadPoolExecutor, as_completed

​

logger = logging.getLogger(__name__)

​

class VerifyStep(Enum):

"""核验步骤枚举"""

OCR = "ocr"

LIVE = "liveness"

COMPARE = "compare"

SHIELD = "ai_shield"

​

class VerifyDecision(Enum):

"""核验决策"""

PASS = "pass"           # 通过

REVIEW = "review"       # 转人工

REJECT = "reject"       # 拒绝

​

@dataclass

class StepResult:

"""单步核验结果"""

step: VerifyStep

success: bool = False

score: float = 0.0       # 0-1,分数越高越正常

skipped: bool = False   # 是否降级跳过

error: str = ""

raw: Dict = field(default_factory=dict)

duration_ms: int = 0

​

@dataclass

class VerifyReport:

"""完整核验报告"""

user_id: str

steps: Dict[VerifyStep, StepResult] = field(default_factory=dict)

risk_score: float = 0.0 # 0-1,分数越高越危险

decision: VerifyDecision = VerifyDecision.REVIEW

total_duration_ms: int = 0

​

def to_dict(self) -> Dict:

"""转为字典便于入库"""

return {

"user_id": self.user_id,

"risk_score": round(self.risk_score, 3),

"decision": self.decision.value,

"total_ms": self.total_duration_ms,

"steps": {

s.value: {

"success": r.success,

...

福铁科技

福铁科技

专注支付行业 16 年

0591-83334386
支付系统各类支付接口分账接口银行电子户行业场景化定制方案

分享此资讯给好友,自动附带您的名片信息