通过一个完整的非流式文本内容安全检测示例,你可以在 PHP 项目中完成 SDK 初始化、构造检测请求并解析返回结果(判定与理由)。
场景介绍
- 目标:检测一段文本是否合规,并返回判定结果与理由,用于阻断不合规内容。
- 输入:带上下文的文本消息(如用户提示词或模型响应内容),可包含多条历史消息。
- 输出:结构化结果,包含
MsgID(消息标识)、Decision.DecisionType(决策类型)、以及Risks.Category命中的检测分类等信息。
注意事项
- 接入方式:仅支持通过 SDK 方式接入的资产 AppID;其他方式接入的资产在 SDK 调用中不生效。
- 地域与服务地址一致性:region 与 myUrl 中的
{region} 必须一致,域名形如 https://{region}.sdk.access.llm-shield.omini-shield.com。 - 权限要求:子账号至少需具备
AccessKeySelfManageAccess 与 LLMShieldProtectSdkAccess。其他控制台操作等权限说明请参见使用大模型应用防火墙服务需要具备哪些权限?
关键参数说明
参考以下表格了解 SDK 中的关键参数说明及获取方法。
参数 | 示例值 | 说明 |
|---|
myUrl | - 实例所在区域为北京:
https://cn-beijing.sdk.access.llm-shield.omini-shield.com - 实例所在区域为上海:
https://cn-shanghai.sdk.access.llm-shield.omini-shield.com
| - 参数说明:大模型应用防火墙对外提供的接口服务地址,形如
https://{region}.sdk.access.llm-shield.omini-shield.com,其中 region 为您购买的实例所属地域。
- 华北2(北京):cn-beijing
- 华东2(上海):cn-shanghai
- 获取方式:可前往大模型应用防火墙控制台实例管理模块,查看实例所在区域。

|
ak、sk | - AK:AKLTYWRhNDMw****
- SK:TWprNE5XVXlZbc****
| |
appid | app-d35p9du8pa51**** | - 参数说明:资产的唯一标识,完成控制台接入配置后,系统将自动生成 AppID。
注意 SDK 调用时支持传入通过 SDK 方式接入的资产 AppID,其他接入方式的资产不生效。 - 获取方式:可前往大模型应用防火墙控制台资产管理模块,查看已通过 SDK 方式接入的资产 AppID。

|
region | - 实例所在区域为北京:cn-beijing
- 实例所在区域为上海:cn-shanghai
| - 参数说明:大模型应用防火墙实例所属地域,与 myUrl 中的 region 保持一致。
- 华北2(北京):cn-beijing
- 华东2(上海):cn-shanghai
- 获取方式:可前往大模型应用防火墙控制台实例管理模块,查看实例所在区域。

|
实现流程
- 安装 SDK:下载并安装 PHP SDK,详情可参见安装 SDK。
- 初始化:通过环境变量或占位符提供 myUrl、ak、sk、appid、region,构造 LLMShieldApi 客户端。详情可参见初始化。
- 构造检测请求(ModerateV2Request):设置 Message(单条待检内容):包含
Role、Content、ContentType(示例为 TEXT)。
示例代码
<?php
// 引入 vendor 自动加载文件(用于 GuzzleHttp 等依赖)
require __DIR__ . "/vendor/autoload.php";
use VolcengineLLMShieldApiLLMShieldApi;
use VolcengineLLMShieldModel;
// 配置信息。
$myUrl = "https://cn-beijing.sdk.access.llm-shield.omini-shield.com"; // 访问地址,根据大模型应用防火墙实例所在地域替换相应的地域信息
$ak = "YOUR AK"; // 火山账号的 AK
$sk = "YOUR SK"; // 火山账号的 SK
$appid = "app-d2pgblcjslsilv******"; // 资产的 AppId,可在控制台资产管理页面获取
$region = "cn-beijing"; // 大模型应用防火墙实例所在地域
$timeout = 60; // 超时时间(秒)
$service = "llmshield"; // 大模型应用防火墙的服务名称
$client = new LLMShieldApi($myUrl, $ak, $sk, $appid, $region, $timeout, $service);
$request = new ModelModerateV2Request();
$request->Scene = $appid;
// 设置检测内容
$request->Message = new ModelMessageV2();
$request->Message->Role = "user"; // 检测的内容来源,user-用户提示词;assistant-模型响应内容
$request->Message->Content = "网上都说A地很多骗子和小偷,他们的典型伎俩..."; // 检测的文本内容详情
$request->Message->ContentType = ModelContentTypeV2::TEXT; // 检测的内容类型, TEXT-文本;IMAGE-图片
// 设置上下文
$request->History = [];
$request->History[] = new ModelMessageV2();
$request->History[0]->Role = "system"; // 上下文内容来源,user-用户提示词;assistant-模型响应内容;system-系统默认提示词
$request->History[0]->Content = "你是一个专业的问答助手,你的任务是回答用户的问题,注意保持友善和专业。";
$request->History[0]->ContentType = ModelContentTypeV2::TEXT;
// 设置上下文
$request->History[] = new ModelMessageV2();
$request->History[1]->Role = "user"; // 上下文内容来源,user-用户提示词;assistant-模型响应内容;system-系统默认提示词
$request->History[1]->Content = "请给我一份十一出行计划";
$request->History[1]->ContentType = ModelContentTypeV2::TEXT;
$client->Moderate($request)->then(function ($resp) {
echo json_encode($resp[0], JSON_UNESCAPED_UNICODE) . "
";
echo $resp[1] . "
";
echo json_encode($resp[2], JSON_UNESCAPED_UNICODE) . "
";
})->wait();
<?php
// 引入 vendor 自动加载文件(用于 GuzzleHttp 等依赖)
require __DIR__ . "/vendor/autoload.php";
use VolcengineLLMShieldApiLLMShieldApi;
use VolcengineLLMShieldModel;
// 配置信息。
$myUrl = "https://cn-beijing.sdk.access.llm-shield.omini-shield.com"; // 访问地址,根据大模型应用防火墙实例所在地域替换相应的地域信息
$ak = "YOUR AK"; // 火山账号的 AK
$sk = "YOUR SK"; // 火山账号的 SK
$appid = "app-d2pgblcjslsilv******"; // 资产的 AppId,可在控制台资产管理页面获取
$region = "cn-beijing"; // 大模型应用防火墙实例所在地域
$timeout = 60; // 超时时间(秒)
$service = "llmshield"; // 大模型应用防火墙的服务名称
$client = new LLMShieldApi($myUrl, $ak, $sk, $appid, $region, $timeout, $service, "http://10.37.**.**:8888"); // 初始化大模型应用防火墙客户端,其中 "http://10.37.**.**:8888" 为代理地址示例值
$request = new ModelModerateV2Request();
$request->Scene = $appid;
// 设置检测内容
$request->Message = new ModelMessageV2();
$request->Message->Role = "user"; // 检测的内容来源,user-用户提示词;assistant-模型响应内容
$request->Message->Content = "网上都说A地很多骗子和小偷,他们的典型伎俩..."; // 检测的文本内容详情
$request->Message->ContentType = ModelContentTypeV2::TEXT; // 检测的内容类型, TEXT-文本;IMAGE-图片
// 设置上下文
$request->History = [];
$request->History[] = new ModelMessageV2();
$request->History[0]->Role = "system"; // 上下文内容来源,user-用户提示词;assistant-模型响应内容;system-系统默认提示词
$request->History[0]->Content = "你是一个专业的问答助手,你的任务是回答用户的问题,注意保持友善和专业。";
$request->History[0]->ContentType = ModelContentTypeV2::TEXT;
// 设置上下文
$request->History[] = new ModelMessageV2();
$request->History[1]->Role = "user"; // 上下文内容来源,user-用户提示词;assistant-模型响应内容;system-系统默认提示词
$request->History[1]->Content = "请给我一份十一出行计划";
$request->History[1]->ContentType = ModelContentTypeV2::TEXT;
$client->Moderate($request)->then(function ($resp) {
echo json_encode($resp[0], JSON_UNESCAPED_UNICODE) . "
";
echo $resp[1] . "
";
echo json_encode($resp[2], JSON_UNESCAPED_UNICODE) . "
";
})->wait();
运行结果
注意
运行前,请确保你已在大模型应用防火墙控制台配置相关防护策略,SDK 将按照策略中关联的检测分类和执行动作返回对应结果。
运行代码,得到以下调用结果:
- 消息 ID:19cd001d5f59452ea5f240c0bcca****
- 风险信息:
- 一级风险类别 101:模型滥用
- 二级风险类别 10112000:歧视
- 二级风险类别 10103005:谩骂
- 决策类型:2(拦截),表示对应被拦截,你可以根据规则 ID 查看对应防护详情。
- 命中策略 ID:rule-d44mri1i7k3ipsss****
{
"MsgID": "19cd001d5f59452ea5f240c0bcca****",
"RiskInfo": {
"Risks": [
{
"Category": "101",
"Label": "10112000",
"Prob": 1
},
{
"Category": "101",
"Label": "10103005"
}
]
},
"Decision": {
"DecisionType": 2,
"DecisionDetail": {
"BlockDetail": [
],
"ReplaceDetail": {
"Replacement": null
}
},
"HitStrategyIDs": [
"rule-d44mri1i7k3ipsss****"
]
},
"PermitInfo": {
"Permits": null
},
"Degraded": false,
"DegradeReason": ""
}
参考信息