# 自定义AI原生规则

后台管理员可以在系统后台>代码扫描>规则模板页面基于内置的AI规则模板自定义AI原生扫描规则。 An image

# 操作步骤:

1、点击AI规则模板右侧的新建按钮,进入新建规则页面,
2、选择规则所适用的语言,等级以及分类,填写规则的描述等基本信息

  • 关于语言的说明: 自定义的AI规则默认语言Text, 表示规则支持通用代码文本检测,适用于多种语言(平台所支持的所有语言)
  • 如果想限制规则仅支持特定的语言,可以根据需要选择一个具体的语言,如Java

3、重点需要填写的是'规则检测逻辑'参数,支持多行文本输入,需要按照模板中的markdown示例格式填写该规则的检测逻辑 场景举例: 现在我想自定义一个规则,检测代码中变量自赋值的语句,可以在参数输入框中按照如下方式填写: An image 4、点击确定按钮,完成一条AI原生规则的创建,可以对规则进行再次编辑。

# 如何使用创建好的AI规则?

在后台创建好AI规则后,该规则就可以和其他常规规则一样被使用。即把规则加入到扫描代码时所使用的规则集中即可。
例如: 某个代码库的扫描配置中使用的是 [默认规则集],那么在规则集管理页面,将这条新建的AI规则加入到默认规则集中即可在扫描时生效,扫描报告效果如图。 An image

说明: 目前AI规则扫描仅开放了代码评审增量扫描场景。因为自定义AI规则虽然灵活方便,但底层能力是基于大模型,目前大模型的响应速度还存在一定局限,如果代码库较大,全量扫描一次可能会扫描很长时间。

# 与传统DSL语法自定义规则的对比

对比示例: 分别用传统的DSL方式以及AI原生方式自定义一个规则

  • 传统DSL规则: 规则编写需要基于DSL语法,需要对规则编写的语法有一定的了解和掌握,然后基于代码开发规则,然后进行编译,提交编译后的文件到平台进行规则管理。
    如下图,是某工具编写DSL规则的示例以及语法说明。可以看到如果普通用户想要开发这样一条规则,就必须先了解各种DSL的语法,然后基于DSL语法按照自己的检测意图来开发DSL代码实现一条规则,门槛和成本都比较高。 An image

  • AI原生规则: 规则编写不涉及任何DSL语法,只需要按照一定格式用自然语言描述规则逻辑(AI模型能理解)即可,保存规则即可使用。
    在本平台创建一条AI原生规则,只需要按照一定的markdown格式填写上图中红色标记的逻辑(AI提示词)即可, 不需要了解任何DSL语法。
    新建AI规则,用自然语言表达规则检测逻辑: An image 最终在代码评审页面扫描效果: An image

附测试代码:

import java.util.List;
import java.lang.reflect.Method;
import java.util.Arrays;

public class DebugMethodFinderTest {

    // 测试方法1
    public void debugProcessNames(List<String> names) {
        // ... 方法实现 ...
    }

    // 测试方法2
    public void debugProcessArray(int[] array) {
        // ... 方法实现 ...
    }
    
}