PHPackages                             larva/think-qcs - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Security](/categories/security)
4. /
5. larva/think-qcs

ActiveLibrary[Security](/categories/security)

larva/think-qcs
===============

腾讯云内容安全（文字图片内容审核）服务

1.0.2(4y ago)05.7kMITPHP

Since Aug 2Pushed 4y agoCompare

[ Source](https://github.com/larvatecn/think-qcs)[ Packagist](https://packagist.org/packages/larva/think-qcs)[ RSS](/packages/larva-think-qcs/feed)WikiDiscussions master Synced 6d ago

READMEChangelog (3)Dependencies (8)Versions (4)Used By (0)

Think Qcloud Content Security
-----------------------------

[](#think-qcloud-content-security)

[![CI](https://github.com/overtrue/laravel-qcs/actions/workflows/ci.yml/badge.svg)](https://github.com/overtrue/laravel-qcs/actions/workflows/ci.yml)[![Latest Stable Version](https://camo.githubusercontent.com/138ee1bca5c8e4fb9f4688af743aea15829e0d0b28b0b40316b69955b9d4f78c/68747470733a2f2f706f7365722e707567782e6f72672f6f766572747275652f6c61726176656c2d7163732f762f737461626c652e737667)](https://packagist.org/packages/overtrue/laravel-qcs)[![Latest Unstable Version](https://camo.githubusercontent.com/9f162e0a3e4e188844046a6289959f505cd2a081610cf2cb2b8d3be9fb1372c2/68747470733a2f2f706f7365722e707567782e6f72672f6f766572747275652f6c61726176656c2d7163732f762f756e737461626c652e737667)](https://packagist.org/packages/overtrue/laravel-qcs)[![Total Downloads](https://camo.githubusercontent.com/d5b164d472f757bd8b9a8f2110db5ffb4bf94f713324ecec588b24e220d038fb/68747470733a2f2f706f7365722e707567782e6f72672f6f766572747275652f6c61726176656c2d7163732f646f776e6c6f616473)](https://packagist.org/packages/overtrue/laravel-qcs)[![License](https://camo.githubusercontent.com/1b329cc5300d4d41c5028125b9e668bd63900c095063b4ddd0fae0ef0fdd98a7/68747470733a2f2f706f7365722e707567782e6f72672f6f766572747275652f6c61726176656c2d7163732f6c6963656e7365)](https://packagist.org/packages/overtrue/laravel-qcs)

T-Sec 天御内容安全服务使用了深度学习技术，识别文本/图片中出现的可能令人反感、不安全或不适宜内容，支持用户配置词库/图片黑名单，识别自定义的识别类型。

- 📖 [TMS 官方 API 文档](https://cloud.tencent.com/product/tms)
- 📖 [IMS 官方 API 文档](https://cloud.tencent.com/product/ims)

Installing
----------

[](#installing)

```
$ composer require larva/think-qcs -vvv
```

### Config

[](#config)

请在 `config/services.php` 中配置以下内容：

```
    //...
    // 文字识别服务
    'tms' => [
        'secret_id' => env('TMS_SECRET_ID'),
        'secret_key' => env('TMS_SECRET_KEY'),
        'endpoint' => env('TMS_ENDPOINT'),
    ],

    // 图片审核/识别服务
    'ims' => [
        'secret_id' => env('IMS_SECRET_ID'),
        'secret_key' => env('IMS_SECRET_KEY'),
        'endpoint' => env('IMS_ENDPOINT'),
    ],
```

API
---

[](#api)

### 获取检查结果

[](#获取检查结果)

调用对应 API 返回数组结果，返回值结构请参考官方 API 文档。

#### 文本

[](#文本)

> 接口请求频率限制：1000次/秒。

```
use Larva\ThinkQcs\Tms;

array Tms::check(string $input);
```

#### 图片

[](#图片)

> - 接口请求频率限制：100次/秒。
> - 图片检测接口为图片文件内容，大小不能超过5M
> - 图片将会缩放成 300\*300 后检查

```
use Larva\ThinkQcs\Ims;

array Ims::check(string $contents);
```

> 💡 `$contents` 可以为：图片内容、图片本地路径或 URL。

### 检查并返回是否通过

[](#检查并返回是否通过)

```
use Larva\LaravelQcs\Tms;
use Larva\LaravelQcs\Ims;

bool Tms::validate(string $contents, string $strategy = 'strict')
bool Ims::validate(string $contents, string $strategy = 'strict')
```

### 直接替换敏感文本内容

[](#直接替换敏感文本内容)

直接将检测到的敏感词替换为 `*`：

```
use Larva\ThinkQcs\Tms;

string Tms::mask(string $input, string $char = '*', string $strategy = 'strict');

// 示例：
echo Tms::mask('这是敏感内容哦');
// "这是**哦"
```

在模型中使用
------

[](#在模型中使用)

### 文本校验（CheckTextWithTms）

[](#文本校验checktextwithtms)

```
use think\Model;
use Larva\ThinkQcs\Traits\CheckTextWithTms;

class Post extends Model
{
    // 文本校验
    use CheckTextWithTms;

    protected array $tmsCheckable = ['name', 'description'];
    protected string $tmsCheckStrategy = 'strict'; // 可选，默认使用最严格模式

    //...
}
```

### 文本打码（MaskTextWithTms）

[](#文本打码masktextwithtms)

检测到敏感内容时不抛出异常，而是替换为 \* 号。

```
use think\Model;
use Larva\ThinkQcs\Traits\MaskTextWithTms;

class Post extends Model
{
    use MaskTextWithTms;

    protected $tmsMaskable = ['name', 'description'];
    protected $tmsMaskStrategy = 'review'; // 开启打码的策略情况，可选，默认使用最严格模式

    //...
}
```

配置策略
----

[](#配置策略)

你可以通过以下方式注册一个或多个自定义校验规则，决定是否通过校验：

```
// 文字
Tms::setStrategy('strict', function($result) {
	return $result['Suggestion'] === 'Pass';
});

// 图片
Ims::setStrategy('logo', function($result) {
	return $result['Suggestion'] === 'Pass';
});
```

### Events

[](#events)

**Event****Description**`Larva\ThinkQcs\Events\ModelAttributeTextMasked`模型属性值打码后触发. 可获取 `$model` 和 `$attribute`异常处理
----

[](#异常处理)

验证失败将抛出以下异常：

- `Larva\ThinkQcs\InvalidTextException`
    - `$contents` - (string) 被检测的文本内容
    - `$response` - (array) API 原始返回值
- `Larva\ThinkQcs\InvalidImageException`
    - `$response` - (array) API 原始返回值

Contributing
------------

[](#contributing)

You can contribute in one of three ways:

1. File bug reports using the [issue tracker](https://github.com/overtrue/laravel-package/issues).
2. Answer questions or fix bugs on the [issue tracker](https://github.com/overtrue/laravel-package/issues).
3. Contribute new features or update the wiki.

*The code contribution process is not very formal. You just need to make sure that you follow the PSR-0, PSR-1, and PSR-2 coding guidelines. Any new code contributions must be accompanied by unit tests where applicable.*

PHP 扩展包开发
---------

[](#php-扩展包开发)

> 想知道如何从零开始构建 PHP 扩展包？
>
> 请关注我的实战课程，我会在此课程中分享一些扩展开发经验 —— [《PHP 扩展包实战教程 - 从入门到发布》](https://learnku.com/courses/creating-package)

License
-------

[](#license)

MIT

###  Health Score

27

—

LowBetter than 49% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity17

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity53

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~0 days

Total

3

Last Release

1749d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/534cdb651e8c806590fa945c6b5a18f361613848e890db1349f4a9fbcae1a650?d=identicon)[xutongle](/maintainers/xutongle)

---

Top Contributors

[![xutongle](https://avatars.githubusercontent.com/u/46956076?v=4)](https://github.com/xutongle "xutongle (3 commits)")

###  Code Quality

TestsPHPUnit

Code StylePHP CS Fixer

### Embed Badge

![Health badge](/badges/larva-think-qcs/health.svg)

```
[![Health](https://phpackages.com/badges/larva-think-qcs/health.svg)](https://phpackages.com/packages/larva-think-qcs)
```

###  Alternatives

[mews/captcha

Laravel 5/6/7/8/9/10/11/12 Captcha Package

2.6k5.5M84](/packages/mews-captcha)[aishan/lumen-captcha

captcha for lumen

118.5k](/packages/aishan-lumen-captcha)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
