策略配置
通义灵码企业级策略配置支持智能问答、行间代码生成安全过滤器和知识库过滤器相关策略配置。
背景信息
通义灵码管理员、组织内全局管理员在通义灵码控制台的策略配置中进行安全过滤器的配置:
- 智能问答、行间代码生成场景的前置过滤器:企业内开发者使用通义灵码 IDE 插件的智能问答、行间代码生成功能时,针对开发者发送给模型的内容,将通过管理员配置的安全过滤器。
- 智能问答后置过滤器、行间代码生成后置过滤器:企业内开发者使用通义灵码 IDE 插件的智能问答、行间代码生成功能时,针对模型生成的内容,将通过管理员配置的安全过滤器。
- 知识库过滤器:上传至通义灵码知识库的文件须先通过该过滤器的审核后,方可上传成功。
重要:
- 如需使用企业级策略配置功能,请确保将 通义灵码 IDE 插件升级到 V1.4.0 及以上 。
- 插件前置过滤器启用或修改后,预计需要 5~10 分钟生效,开发者可在使用通义灵码 IDE 插件时生效。
- 知识库过滤器启用或修改后,立即生效,上传企业知识库内文件时会进行过滤。
插件前置过滤器配置
说明: 在不同的版本中,支持的过滤器方式不同。
- 企业标准版:智能问答安全过滤器、行间生成安全过滤器,均支持正则表达式。
- 企业专属版、私有化版本:智能问答安全过滤器、行间生成安全过滤器,均支持正则表达式、自定义脚本。
正则表达式配置
企业私有化版、企业专属版均支持通过正则表达式的方式进行过滤器配置。
说明: 管理员在配置正则时,充分验证,避免对 IDE 插件端开发者使用产生性能的影响或异常问题。
处理方式: 支持通过正则表达的方式配置过滤器,且支持 3 种模式:
名称 | 作用 |
---|---|
匹配规则时不处理 | 匹配到正则后,不做任何处理 |
匹配规则时拦截 | 匹配到正则后,直接拦截请求,阻断模型请求 |
匹配规则时替换内容 | 匹配到正则后,按照配置替换内容 |
消息通知: 支持开启消息通知,通过 webhook 的方式,推送到所需要的消息接收平台。
执行顺序 :按照配置的排序执行。
正则数量限制:最多添加 10 条。
正则表达式标准 :正则配置遵循 ECMAScript 标准,支持i
(不区分大小写)、g
(全局匹配)、s
(DOTALL 模式)等常用标志位。
正则配置示例:
规则名称 | 正则表达式 | 替换内容 | 原文 | 替换后 |
---|---|---|---|---|
身份证号 | (?.*)(\d{15})((\d{2})([0-9Xx]))(?\ |
$pre $post | 身份证号:330204197709022312 | 身份证号:*** |
邮箱 | \w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)* | *** | 我的邮箱是 lin***@aliyunmail.com | 我的邮箱是 *** |
密码 | (.*password=)([\w\d]+)(.*) | $1***$3 | {password=1213213} | {password=***} |
插件后置过滤器配置
说明: 在不同的版本中,支持的过滤器方式不同。
- 企业标准版:智能问答安全过滤器、行间生成安全过滤器,均支持正则表达式。
- 企业专属版、私有化版本:智能问答安全过滤器、行间生成安全过滤器,均支持正则表达式、自定义脚本。
正则表达式配置
企业私有化版、企业专属版均支持通过正则表达式的方式进行过滤器配置。
说明: 管理员在配置正则时,充分验证,避免对 IDE 插件端开发者使用产生性能的影响或异常问题。
处理方式: 支持通过正则表达的方式配置过滤器:
名称 | 作用 |
---|---|
匹配规则时不处理 | 匹配到正则后,不做任何处理 |
消息通知: 支持开启消息通知,通过 webhook 的方式,推送到所需要的消息接收平台。
执行顺序 :按照配置的排序执行。
正则数量限制:最多添加 10 条。
正则表达式标准 :正则配置遵循 ECMAScript 标准,支持i
(不区分大小写)、g
(全局匹配)、s
(DOTALL 模式)等常用标志位。
正则配置示例:
规则名称 | 正则表达式 | 替换内容 | 原文 | 替换后 |
---|---|---|---|---|
身份证号 | (?.*)(\d{15})((\d{2})([0-9Xx]))(?\ |
$pre $post | 身份证号:330204197709022312 | 身份证号:*** |
邮箱 | \w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)* | *** | 我的邮箱是 lin***@aliyunmail.com | 我的邮箱是 *** |
密码 | (.*password=)([\w\d]+)(.*) | $1***$3 | {password=1213213} | {password=***} |
知识库过滤器配置
企业专属版中,支持通义灵码管理员、全局管理员通过在策略配置中配置知识库过滤器,配置完成后,在知识库文件上传前对其进行审查,从而满足在特定场景下对知识库内容前置过滤的需求。
过滤器配置
步骤一:开启并编辑知识库过滤器
- 在左侧导航栏,单击策略配置,在右侧页面,单击知识库过滤器页签。
在知识库过滤器配置页面,您可以打开开关开启/关闭知识库上传前置过滤器,进行参数配置编辑。
- URL 地址:必填,企业提供的第三方扫描服务的接口地址,需支持 POST 请求。
- Token 字段名:必填,指定请求头中用于存放 Token 的字段名。
- Secret 密钥:必填,生成访问 Token 所需的密钥,用于验证请求的合法性。
步骤二:测试过滤器连通性
- 完成上述配置后,点击“测试连接”按钮进行连通性测试。
- 成功标准:第三方过滤接口返回 2xx 状态码。
- 若测试失败,请检查填写的信息并重新尝试。
步骤三:保存知识库过滤器
- 确认无误后,点击“保存配置”按钮保存过滤器设置。
- 保存成功后,过滤器即时生效。
第三方扫描服务接口规范
企业需提供第三方扫描服务,以便知识库过滤器可以使用该服务对上传的知识内容进行扫描,通过扫描后方可上传。为了确保您配置的过滤器正常运行,扫描服务的接口应符合以下设计要求:
请求头
参数名 | 是否必填 | 参数说明 | 参数示例 |
---|---|---|---|
X-Auth-Raw | 是 | 接口鉴权参数,参数名为您在过滤器配置页面中配置的 Token 字段名。参数值应为Secret 密钥通过加密算法生成的 最终密钥,具体生成逻辑详见“安全 Token”章节。 | 6c3baa76c62550eab864e6f75c4bb |
Content-Type | 是 | 表示请求和响应中的媒体类型信息。 | multipart/form-data |
- 安全Token:是阿里云设计的一种安全签名,旨在防止恶意攻击者盗用您的云服务权限。生成 Token 需要以下要素:Secret 密钥、当前时间、其他信息 和 加密算法。
Token生成方法:
token = sha256Hex(method + url + timestamp + tokenSecret) + timestampHex
method
:POST 方法。url
:配置知识库过滤器填写的扫描服务接口 URL 地址。timestamp
:当前时间。tokenSecret
:配置时填写的 Secret 密钥。timestampHex
:时间戳的十六进制表示。
Token验证:第三方服务可参考提供的示例代码进行Token合法性校验。
重要
- 时间戳:确保客户端和服务端的时间同步,避免因时间偏差导致Token验证失败。
- 密钥管理:妥善保管tokenSecret,不要泄露给未经授权的用户。
- 过期时间:根据业务需求调整 Token 的有效时间,示例中设置为60秒,可根据实际情况调整。
/*
* 方法参数说明:
* receivedHash:接收到的哈希值,包含了时间戳信息。
* tokenSecret:用于生成哈希的密钥。
* url:请求的URL。
*/
public boolean validateAuthRaw(String receivedHash, String tokenSecret, String url) {
final String method = "POST";
// 从 receivedHash 中提取时间戳部分
String tsHex = receivedHash.substring(receivedHash.length() - 8);
long tsSec = Long.parseLong(tsHex, 16);
// 计算当前时间与接收时间的差异,假设允许的最大时间差为60秒
long now = System.currentTimeMillis() / 1000L;
if (Math.abs(now - tsSec) > 60) {
return false; // 超过允许的时间范围
}
// 构建待签名的字符串
String plain = method + url + tsSec + tokenSecret;
// 生成预期的哈希值
String expectedHash = org.apache.commons.codec.digest.DigestUtils.sha256Hex(plain);
// 比较接收到的哈希值与预期的哈希值
return expectedHash.equals(receivedHash.substring(0, receivedHash.length() - 8));
}
请求参数
参数名 | 参数类型 | 是否必填 | 参数解释 | 参数示例 |
---|---|---|---|---|
metadata | string | 是 | 业务元数据,格式为 JSON,包括用户信息等。 | {"user": "user0000001", "queryId": "cd2fd109-c4d4-489f-9b27-53752f7827d6"} |
file | file | 是 | 待上传的文件。 | - |
请求示例
Content-Type: multipart/form-data; boundary=${bound}
--${bound}
Content-Disposition: form-data; name="metadata"
Content-Type: application/json
{
"user": "user0000001",
"queryID": "cd2fd109-c4d4-489f-9b27-53752f7827d6"
}
--${bound}
Content-Disposition: form-data; name="file"; filename="test-file.pdf"
Content-Type: application/pdf
%binary-file-content-here%
响应结构
接口应返回 HTTP 状态码 200,并包含以下格式的响应体。
参数名 | 参数类型 | 是否必填 | 参数解释 | 参数示例 |
---|---|---|---|---|
forbidden | boolean | 是 | 安全检测结果,true 表示检测失败。 |
false |
errorMsg | string | 否 | 错误信息,检测失败时提供原因。 | "文件包含恶意内容,请修改后再上传" |
queryId | string | 否 | 请求 ID,需与请求 metadata 中的 queryId 字段对应。 |
"cd2fd109-c4d4-489f-9b27-53752f7827d6" |
user | string | 否 | 用户 ID,需与请求 metadata 中的 user 字段对应。 |
"user0001" |