腾讯云内容安全实现文本内容安全

        登录腾讯云账号后,进入安全服务:服务体验 - 内容安全 - 控制台,将服务全都开通。之后进入应用管理创建应用(文本内容安全简介_文本内容安全购买指南_文本内容安全操作指南-腾讯云)。应用创建完成后创建secretKey和secretId(访问密钥 - 控制台)。准备工作就做好了。

代码直接就直接给了,

1.pom依赖



    com.tencentcloudapi
    tencentcloud-sdk-java-cvm
    3.1.528



com.tencentcloudapi
tencentcloud-sdk-java-tms
3.1.528



    com.tencentcloudapi
    tencentcloud-sdk-java-ims
    3.1.528



    com.tencentcloudapi
    tencentcloud-sdk-java
    3.1.714 

2.配置文件

secretId和secretKey替换成自己的

tencentcloud.secretId=  AKID******457ygCV
tencentcloud.secretKey= csADQQdw3*******
tencentcloud.region=ap-guangzhou

3.controller层

import com.tencentcloudapi.cms.v20190321.models.TextData;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

@RestController
public class ContentModerationController {
    @Autowired
    private ContentModerationService moderationService;

    @PostMapping("/moderate/text")
    public ResponseEntity moderateText(
            @RequestParam String content,
            @RequestParam(required = false,defaultValue = "") String bizType) {
        try {
            // 将空字符串转为 null
            String finalBizType = bizType.isEmpty() ? null : bizType;

            TextData response = moderationService.checkText(content, finalBizType);
            // 将原始响应转换为前端需要的结构化数据
            Map result = new HashMap<>();

            // 1. 处理建议类型(Suggestion)
            String suggestion = response.getSuggestion();
            result.put("suggestion", convertSuggestion(suggestion)); // "Review" -> "建议人工审核"

            // 2. 处理违规类型(EvilType)
            int evilType = Math.toIntExact(response.getEvilType());
            result.put("evilType", convertEvilType(evilType)); // 20006 -> "违法/毒品"

            // 3. 关键词和置信度
            result.put("keywords", response.getKeywords()); // ["海洛因"]
            result.put("score", response.getScore() + "%"); // 74 -> "74%"
            return ResponseEntity.ok(ApiResponse.success(result));
        } catch (Exception e) {
            e.printStackTrace();  // 打印堆栈信息
            return ResponseEntity.badRequest().body(ApiResponse.error(e.getMessage()));
        }
    }

    // 建议类型转换
    private String convertSuggestion(String suggestion) {
        switch (suggestion) {
            case "Block": return "建议拦截";
            case "Review": return "建议人工审核";
            case "Pass": return "建议通过";
            default: return "未知建议";
        }
    }

    // 违规类型转换(需根据腾讯云文档完善映射)
    private String convertEvilType(int evilType) {
        switch (evilType) {
            case 20006: return "违法/毒品";
            case 20001: return "暴恐/政治/敏感机构";
            case 100   : return "无";
            case 24001 :return "暴恐/恐怖事件";
            // 其他类型...
            default: return "其他类型";
        }
    }

}

4.实体层

@Data
@Getter
@Setter

public class ApiResponse {
    private int code;
    private String message;
    private T data;

    // 构造方法、Getter、Setter省略,以下是静态工厂方法
    public static  ApiResponse success(T data) {
        ApiResponse response = new ApiResponse<>();
        response.setCode(200);
        response.setMessage("success");
        response.setData(data);
        return response;
    }

    public static  ApiResponse error(String message) {
        ApiResponse response = new ApiResponse<>();
        response.setCode(400);
        response.setMessage(message);
        return response;
    }
}

5.配置层

import com.tencentcloudapi.cms.v20190321.CmsClient;
import com.tencentcloudapi.common.Credential;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration

public class TencentClogConfig {
    @Value("${tencentcloud.secret-id}")
    private String secretId;

    @Value("${tencentcloud.secret-key}")
    private String secretKey;

    @Value("${tencentcloud.region}")
    private String region;


    @Bean
    public CmsClient cmsClient() {
        Credential cred = new Credential(secretId, secretKey);
        return new CmsClient(cred,region);
    }
}

6.服务层

import com.tencentcloudapi.cms.v20190321.CmsClient;
import com.tencentcloudapi.cms.v20190321.models.TextData;
import com.tencentcloudapi.cms.v20190321.models.TextModerationRequest;
import com.tencentcloudapi.cms.v20190321.models.TextModerationResponse;
import com.tencentcloudapi.common.exception.TencentCloudSDKException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.nio.charset.StandardCharsets;
import java.util.*;

@Service
public class ContentModerationService {
    @Autowired
    private CmsClient cmsClient;

    public TextData checkText(String content, String bizType) throws TencentCloudSDKException {
        // 对 content 进行 Base64 编码
        String encodedContent = Base64.getEncoder().encodeToString(content.getBytes(StandardCharsets.UTF_8));

        TextModerationRequest req = new TextModerationRequest();
        req.setContent(encodedContent); // 设置 Base64 编码后的 content
        if (bizType != null && !bizType.isEmpty()) {
            req.setBizType(Long.valueOf(bizType));
        }
        TextModerationResponse resp = cmsClient.TextModeration(req);
//        System.out.println("Data响应: " + TextModerationResponse.toJsonString(resp.getData())); // 关键日
        return resp.getData();
    }
}

测试页面:




    
    腾讯云内容安全测试页面
    


文本内容安全检测

审核结果

以上就是实现文本内容安全的所需依赖和代码,更多需求可查看官方文档。

你可能感兴趣的:(腾讯云,云计算,内容安全,天御)