gws CLI 实战用 Google Model Armor 的 sanitize-response 对模型输出做出口安全过滤【免费下载链接】cliGoogle Workspace CLI — one command-line tool for Drive, Gmail, Calendar, Sheets, Docs, Chat, Admin, and more. Dynamically built from Google Discovery Service. Includes AI agent skills.项目地址: https://gitcode.com/gh_mirrors/cli413/cli导读本文讲解 Google Workspace CLIgws内置的modelarmor sanitize-response辅助命令它通过 Google Model Armor 模板对模型生成的输出内容model → user 方向执行安全净化sanitize防止提示注入、PII 泄露等风险内容流向终端用户。读完本文你将掌握该命令的参数语义、三种内容传入方式--text/--json/ stdin 管道、与sanitize-prompt的分工以及它在gws全局--sanitize机制中的底层实现原理可直接用于构建安全的 Agent 工作流。前置条件使用该命令前请先阅读 skills/gws-shared/SKILL.md其中包含认证方式、全局 flags 与安全规则。若该文件缺失可运行gws generate-skills重新生成。一、命令概览modelarmor sanitize-responsegws的modelarmor服务由ModelArmorHelper注册见 helpers/mod.rs 中modelarmor Some(Box::new(modelarmor::ModelArmorHelper))的分发逻辑并注入三个前缀的辅助子命令命令方向用途sanitize-promptuser → model入站净化用户提示词见 gws-modelarmor-sanitize-promptsanitize-responsemodel → user出站净化模型响应即本文主题create-template—创建 Model Armor 模板见 gws-modelarmor-create-templatesanitize-response的核心语义一句话即可概括把一段模型输出文本提交给指定的 Model Armor 模板返回匹配到的过滤结果。它属于只读read-only命令不会修改任何资源。二、用法与 Flags 详解基本调用形式gws modelarmor sanitize-response --template NAMEFlag必需默认值说明--template✓—完整模板资源名projects/PROJECT/locations/LOCATION/templates/TEMPLATE--text——要净化的文本内容--json——完整 JSON 请求体优先级高于--text这三个参数在源码中的解析逻辑位于 helpers/modelarmor.rs 的parse_sanitize_args若提供了--json直接将其作为请求体透传适合需要携带模板自定义字段的高级场景否则若提供--text自动包装为{modelResponseData: {text: 内容}}两者都未提供时从 stdin 读取若 stdin 内容为空则报错提示Provide text via --text, --json, or pipe to stdin。注意sanitize-response内部对应 Model Armor API 的sanitizeModelResponse方法请求体数据字段为modelResponseData而sanitize-prompt对应sanitizeUserPrompt、字段为userPromptData。二者在handle()中仅凭方法名与字段名区分见 helpers/modelarmor.rs不要混淆。三、实战示例3.1 直接用--text净化一段模型输出gws modelarmor sanitize-response \ --template projects/P/locations/L/templates/T \ --text model output3.2 通过管道接入模型输出流这是最贴合 Agent 工作流的用法——把任意生成模型的 stdout 直接接入净化model_cmd | gws modelarmor sanitize-response --template ...由于内容传入优先级为--json--text stdin--template之后的模板名可用占位或完整资源名例如projects/my-project/locations/us-central1/templates/outbound-safety。3.3 模板从哪来--template指向的模板可通过create-template创建gws modelarmor create-template \ --project my-project \ --location us-central1 \ --template-id outbound-safety \ --preset jailbreak若不传--preset与--json默认使用jailbreak预设其内容来自 templates/modelarmor/jailbreak.json启用piAndJailbreakFilterSettingsfilterEnforcement: ENABLED、confidenceLevel: LOW_AND_ABOVE。创建完成后即可将得到的模板资源名用于sanitize-response。四、底层原理请求如何被构造与发送从源码看sanitize-response的完整调用链为handle() → handle_sanitize(matches, sanitizeModelResponse, modelResponseData) → validate_resource_name(template) # 校验资源名合法性 → extract_location(template) # 从资源名提取区域 → regional_base_url(location) # 构造区域端点 → model_armor_post(url, body) # 携带 Bearer token 发 POST三个关键实现细节值得开发者注意区域化端点Model Armor 要求使用https://modelarmor.{location}.rep.googleapis.com/v1形式的区域端点见 helpers/modelarmor.rs 的regional_base_url。源码注释明确指出Discovery 文档里的根 URLmodelarmor.us.rep.googleapis.com并不正确因此gws会从模板资源名projects/.../locations/LOCATION/templates/...中解析出区域extract_locationhelpers/modelarmor.rs再拼出正确的请求地址{base}/{template}:sanitizeModelResponse。如果资源名格式不合法会直接返回 Validation 错误。认证与 OAuth Scope请求使用https://www.googleapis.com/auth/cloud-platformscope 获取 token常量定义于 helpers/modelarmor.rs并通过Authorization: Bearer token头携带认证流程遵循 skills/gws-shared/SKILL.mdgws auth login或GOOGLE_APPLICATION_CREDENTIALS服务账号方式。响应解析返回体中sanitizationResult被解析为SanitizationResult结构helpers/modelarmor.rs核心字段包括filterMatchState如MATCH_FOUND/NO_MATCH_FOUND、filterResults各过滤器明细与invocationResult最终判定。该结构也被全局--sanitize机制复用。五、进阶把净化嵌入所有 gws 命令的全局--sanitizesanitize-response是显式调用而gws还提供全局--sanitize TEMPLATE标志让任意 gws 命令的 JSON 响应在输出前自动过一遍 Model Armor详见 skills/gws-shared/SKILL.md 的 Global Flags 表gws gmail messages list --sanitize projects/P/locations/L/templates/T其行为由两个环境变量控制环境变量取值效果GOOGLE_WORKSPACE_CLI_SANITIZE_TEMPLATE模板资源名与--sanitizeflag 等价flag 优先GOOGLE_WORKSPACE_CLI_SANITIZE_MODEwarn默认/block命中时仅告警或阻断并退出非零解析逻辑见 main.rs。执行时executor.rs 的handle_json_response会把整个 JSON 响应序列化为文本调用sanitize_text若filterMatchState MATCH_FOUNDwarn模式下向 stderr 打印⚠️ Model Armor: prompt injection detected并在输出对象中附加_sanitization字段block模式下直接输出{error: Content blocked by Model Armor, ...}并返回错误、终止执行。这一设计意味着你既可以按需用sanitize-response净化某段模型输出也可以系统性地给所有 API 响应加一层出口防线。注意区分sanitize-response是你主动提交内容全局--sanitize是 gws 自动拦截自身命令的输出。六、方向选择与安全实践建议Model Armor 的两种净化方向务必按需选择出站安全model → user用sanitize-response。用于检查模型生成的文本是否包含敏感内容、有害指令或 PII是 Agent 面向最终用户前最后一道闸门入站安全user → model用sanitize-prompt。在把用户输入送入模型前先做净化防御提示注入攻击见 gws-modelarmor-sanitize-prompt。实践建议把sanitize-response接入 CI 脚本或 Agent 的模型调用包装层管道方式最易集成配合 gws-modelarmor 中提到的gws modelarmor --help浏览资源与方法与gws schema modelarmor.resource.method查看参数类型与默认值先摸清 API 面再用--dry-run本地校验请求最后才真正执行。七、关联资源skills/gws-modelarmor/SKILL.md —modelarmor服务全部辅助命令总览skills/gws-modelarmor-sanitize-prompt/SKILL.md — 入站净化user → modelskills/gws-modelarmor-create-template/SKILL.md — 创建模板写操作执行前需用户确认skills/gws-shared/SKILL.md — 认证、全局 flags、安全规则helpers/modelarmor.rs —sanitize-response等命令的核心实现与单元测试helpers/mod.rs — Helper 分发与SanitizeConfig定义templates/modelarmor/jailbreak.json —jailbreak预设模板内容【免费下载链接】cliGoogle Workspace CLI — one command-line tool for Drive, Gmail, Calendar, Sheets, Docs, Chat, Admin, and more. Dynamically built from Google Discovery Service. Includes AI agent skills.项目地址: https://gitcode.com/gh_mirrors/cli413/cli创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考