文档

腾讯云内容安全(文本 + 图片)集成指南

了解如何在 HackathonWeekly 社区平台中集成腾讯云文本与图片内容安全服务,实现智能审核与友好降级策略

腾讯云内容安全(文本 + 图片)集成指南

概述

腾讯云内容安全服务覆盖文本(Text Moderation System,TMS)与图片(Image Moderation Service,IMS)两大类别,可帮助平台识别和过滤不适宜的用户生成内容,保障社区生态的健康与安全。

为什么需要内容安全?

HackathonWeekly 社区中包含多种用户输入:

  • 活动文案、项目介绍、评论等文本内容
  • 用户头像、活动封面、作品截图等图片内容

通过接入内容安全服务,我们可以及时发现并处理:

  • 违法违规:涉政、暴恐、违禁品等敏感内容
  • 低俗与色情:文本与图片中的不当元素
  • 谩骂与歧视:恶意攻击行为
  • 广告与灌水:垃圾营销、虚假宣传

功能特性

文本审核(TMS)

  • 深度学习模型覆盖多种违规场景
  • 支持单文本与批量检测,实时返回结果
  • 自定义业务类型(BizType),按场景配置策略
  • 返回建议(Pass/Block/Review)、标签、置信度和命中关键词

图片审核(IMS)

  • 支持本地文件、网络图片、GIF/长图检测
  • 识别色情、广告、暴恐、违法、OCR 文本等风险
  • 可选择不同业务策略并关联账号信息
  • 返回整体建议、标签详情、物体识别、OCR 与图库命中信息

检测结果结构

  • 文本suggestionlabelscorekeywordssubLabel
  • 图片:整体建议,labelResultsobjectResultsocrResultslibResultsrecognitionResults 等详细字段,便于复审与追踪

业务类型配置

我们在 src/lib/content-moderation 中为不同文本类型配置了专属 BizType(如 nickname_inputcontent_input)。图片审核默认使用 image_default,你可以在腾讯云控制台中创建并绑定更细粒度的策略。

快速开始

1. 环境配置

.env.local 中添加腾讯云凭证:

# 腾讯云通用配置项
TENCENT_CLOUD_SECRET_ID="你的SecretId"
TENCENT_CLOUD_SECRET_KEY="你的SecretKey"
TENCENT_CLOUD_REGION="ap-shanghai"

2. 开通服务

  1. 登录 腾讯云控制台
  2. 前往 访问管理 - API 密钥管理 获取 SecretId 与 SecretKey
  3. 文本内容安全控制台 开通 TMS
  4. 图片内容安全控制台 开通 IMS,并配置所需 BizType

3. 运行测试脚本

# 运行综合测试(默认包含文本校验、文本 API、图片 API)
bun content-moderation-test

# 仅测试文本审核(支持自定义文本)
bun content-moderation-test --text="要检测的文本"

# 仅测试图片审核(默认 public/images/icon.png,可自定义路径)
bun content-moderation-test --image --image-path=路径/到/图片

# 模拟凭证错误等异常降级策略
bun content-moderation-test --error

代码集成

文本审核示例

import { createTencentTextModerationClientFromEnv } from '@/lib/tencent-cloud';

const client = createTencentTextModerationClientFromEnv();

// 检测单个文本
const result = await client.moderateText('用户输入的文本');
console.log(result);
// {
//   suggestion: 'Pass',
//   label: 'Normal',
//   score: 0,
//   keywords: [],
//   subLabel: ''
// }

// 简单判断是否安全
const isSafe = await client.isTextSafe('用户输入的文本');
console.log(isSafe); // true 或 false

// 批量检测多个文本
const batch = await client.moderateTexts([
  '第一段文本',
  '第二段文本',
  '第三段文本',
]);
console.log(batch);

图片审核示例

import { createTencentImageModerationClientFromEnv } from '@/lib/tencent-cloud';

const imageClient = createTencentImageModerationClientFromEnv();

const imageResult = await imageClient.moderateImage({
  filePath: 'public/images/icon.png',
  bizType: 'image_default',
});

console.log(imageResult.suggestion); // Pass / Block / Review
console.log(imageResult.labelResults);

const isImageSafe = await imageClient.isImageSafe({
  fileUrl: 'https://example.com/image.jpg',
});
console.log(isImageSafe);

生产场景示例

import { moderateContent, ContentType } from '@/lib/content-moderation';

// 提交文本前的统一校验
const result = await moderateContent(payload.title, ContentType.EVENT_TITLE);
if (!result.isApproved) {
  throw new Error(result.reason ?? '内容审核未通过');
}
import { createTencentImageModerationClientFromEnv } from '@/lib/tencent-cloud';

// 上传图片后执行异步审核
const client = createTencentImageModerationClientFromEnv();
const moderation = await client.moderateImage({ filePath: tempFilePath });

if (moderation.suggestion === 'Block') {
  await deleteUploadedFile();
  throw new Error('图片包含违规内容,请更换后重试');
}

API 参考

TencentTextModerationClient

  • moderateText(content: string, bizType?: string): Promise<TextModerationResult>
  • moderateTexts(contents: string[], bizType?: string): Promise<TextModerationResult[]>
  • isTextSafe(content: string, bizType?: string): Promise<boolean>

TencentImageModerationClient

  • moderateImage(options: ImageModerationOptions): Promise<ImageModerationResult>
  • isImageSafe(options: ImageModerationOptions): Promise<boolean>

辅助函数

  • createTencentTextModerationClient(config: TencentCloudConfig)
  • createTencentTextModerationClientFromEnv(region?: string)
  • createTencentImageModerationClient(config: TencentCloudConfig)
  • createTencentImageModerationClientFromEnv(region?: string)

性能与限制

文本

  • 默认频率:1000 次/秒
  • 单次最大长度:10000 个 Unicode 字符
  • 支持语言:中文、英文、数字

图片

  • 文件大小:Base64 内容 ≤ 10MB;网络图片 ≤ 30MB
  • 分辨率:大于 50×50 且 小于 10000×10000,长宽比 < 90:1
  • 支持格式:PNG、JPG、JPEG、BMP、GIF、WEBP(动态图自动抽帧)
  • 下载限制:首次超时 3 秒;重试一次

优化建议:批量处理、缓存结果、异步审核、明确超时与降级策略。

故障排除

文本常见错误

Error: request to https://tms.tencentcloudapi.com/ failed, reason: getaddrinfo ENOTFOUND

排查:检查网络或 DNS

Error: [TencentCloudSDKException] AuthFailure

排查:确认 SecretId、SecretKey 配置

Error: 文本内容不存在或文本类型错误:需标准utf8转成的base64格式编码

排查:SDK 会自动处理,若出现请检查版本与入参

图片常见错误

Error: [TencentCloudSDKException] ResourceUnavailable.ImageDownloadError

排查:确认图片链接可直接访问,避免 302 跳转

Error: Base64 data size is too large

排查:控制上传文件大小或改用 URL 模式

调试技巧

# 文本
bun content-moderation-test --text="测试文本"

# 图片
bun content-moderation-test --image --image-path=public/images/icon.png
try {
  const result = await client.moderateText(content);
} catch (error) {
  console.error('详细错误信息:', error);
}

最佳实践

安全

  1. 将凭证保存在服务端环境变量中
  2. 对异常建立监控告警(认证、配额、超时)
  3. 按业务分层策略,避免“一刀切”

用户体验

  1. 提供友好的错误提示与修改建议
  2. 对 Review 结果设置人工复审流程
  3. 审核失败时保留草稿,避免内容丢失

相关资源


如果你在集成过程中遇到问题,欢迎在社区提交 Issue 或联系技术支持。