
人工智能大模型AI 安全治理模型安全内容安全提示词注入防护RAG【免费下载链接】GuardrailsNeMo Guardrails is an open-source toolkit for easily adding programmable guardrails to LLM-based conversational systems.项目地址https://gitcode.com/gh_mirrors/ne/Guardrails点击查看免费下载本指南以 NeMo Guardrails 仓库中的examples/configs/clavata示例为主线系统讲解如何将 Clavata 内容审核 API 接入 NeMo Guardrails对 LLM 对话系统的用户输入input与机器人输出output进行基于策略的自动审核与拦截。读完本文你将掌握该示例的完整配置语义、nemoguardrails chat快速验证方式以及从 Colang 流到 Clavata HTTP 客户端调用的底层实现链路可直接据此搭建自己的 Clavata 守卫配置。一、示例概览Clavata 集成做了什么Clavata 是一个内容审核content moderation服务允许用户创建自定义审核策略policy并为每条策略关联若干标签/分段label/section用于对文本进行威胁、毒性、仇恨言论等维度的分类判定。NeMo Guardrails 将 Clavata 作为内置的第三方守卫rail集成支持在对话的输入侧和输出侧分别调用 Clavata API依据策略结果对交互放行或拦截。仓库中该示例的全部内容位于 examples/configs/clavata目录结构如下README.md—— 集成示例说明即本文所依托的文档主体config.yml—— 存放 Clavata 集成所需的全部配置选项。示例的目标场景非常直观用户消息经过Threats威胁策略审核机器人回复经过Toxicity毒性策略审核命中策略即阻断交互。同时示例还展示了如何通过labels参数把命中判定收窄到指定标签如Hate Speech、Self-Harm而不是一刀切地依据整个策略结果。二、快速开始用 CLI Chat 验证配置在安装好 NeMo Guardrails 并设置好环境的前提下从examples/configs/clavata目录执行以下命令即可启动命令行对话测试nemoguardrails chat命令会加载当前目录下的config.yml启动一个可交互的聊天会话输入任意文本后NeMo Guardrails 会先运行 input 守卫调用 Clavata 审核你的输入LLM 生成回复后再运行 output 守卫审核回复内容。一旦命中策略对话会被阻断机器人会回复预设的拒绝话术如 I cannot respond to that request.。注意该配置示例针对colang 1.0编写config.yml首行注释明确标注 Example for colang 1.0。示例模型使用gpt-3.5-turbo-instructOpenAI 引擎实际运行时需按你自己的模型提供方调整models段。三、配置文件逐项解析config.yml 是本次集成的核心全文如下# Example for colang 1.0 models: - type: main engine: openai model: gpt-3.5-turbo-instruct rails: config: clavata: policies: Threats: 00000000-0000-0000-0000-000000000000 Toxicity: 00000000-0000-0000-0000-000000000000 # With colang 1.0, we cant pass parameters to flows, so we need to specify the policy to use # in the input and output rails. input: policy: Threats output: policy: Toxicity # You can specify labels to match against as part of the input/output rail configuration labels: - Hate Speech - Self-Harm input: flows: - clavata check input output: flows: - clavata check output3.1modelsLLM 主模型与 NeMo Guardrails 常规配置一致指定对话主模型。示例使用 OpenAI 引擎的gpt-3.5-turbo-instruct。Clavata 守卫本身并不消耗 LLM 调用模型仅用于生成对话回复若只想验证守卫逻辑可以替换为本地或自建推理端点。3.2rails.config.clavataClavata 集成配置这是守卫的核心配置块按源码 rail_config.py 中的ClavataRailConfig模型支持以下字段字段类型默认值说明server_endpointstringhttps://gateway.app.clavata.ai:8443Clavata API 端点地址一般无需修改policiesmap别名 → 策略 ID{}策略别名到策略 UUID 的映射表供配置与流中按别名引用label_match_logicANY/ALLANY标签命中判定逻辑ANY表示命中任一配置标签即判定为匹配ALL表示必须全部命中才判定为匹配input对象None输入守卫的 Clavata 选项ClavataRailOptionsoutput对象None输出守卫的 Clavata 选项ClavataRailOptions其中input/output各自对应 ClavataRailOptions字段类型说明policystring评估输入/输出时使用的策略别名需在policies中定义或直接传 UUIDlabelslist[string]要匹配的标签列表不提供时返回整体策略结果提供后仅命中指定标签才算命中示例中的关键用法policies中定义了两个策略别名Threats与Toxicity各映射到一个策略 UUID示例中使用全零占位符00000000-0000-0000-0000-000000000000实际部署时必须替换为你在 Clavata 控制台创建的真实策略 ID。input.policy: Threats—— 输入侧使用威胁策略注释明确指出colang 1.0 无法向 flow 传参因此策略必须在 input/output 配置中显式指定。output.policy: Toxicity且labels: [Hate Speech, Self-Harm]—— 输出侧使用毒性策略且只在该策略的这两个标签命中时才判定为匹配。3.3rails.input.flows/rails.output.flows绑定守卫流input: flows: - clavata check input output: flows: - clavata check output这两段把内置 Colang 流clavata check input和clavata check output分别挂载到输入守卫与输出守卫。流的定义位于 flows.cocolang 2.x 语法仓库同时提供了 flows.v1.co 供 colang 1.0 使用两个流分别调用ClavataCheckAction(text$user_message, railinput)与ClavataCheckAction(text$bot_message, railoutput)通过rail参数从配置中取对应侧的策略与标签。四、标签匹配与判定逻辑从配置到行为labels与label_match_logic的组合决定了命中的精确语义这一点在源码 actions.py 中有清晰实现get_labels()actions.py若 action 调用时传入了labels则直接使用字符串会被按逗号拆分否则从config.rail.labels读取。is_label_match()actions.py将 Clavata 返回的各分段报告section report中result OUTCOME_TRUE的标签收集为labels_matched再与配置的待匹配标签集合求交集label_match_logic ALL要求待匹配标签全部出现在命中集合中默认ANY只要任一待匹配标签被命中即判定为匹配。判定结果最终通过_clavata_outcome()actions.py返回RailOutcome.block(...)命中即拦截或RailOutcome.allow(...)放行并附带{policy_matched: ...}元数据供日志与可观测性使用。配置层面对应的行为推演若output.labels为空则只要Toxicity策略整体判定OUTCOME_TRUE输出即被拦截若按示例配置了labels: [Hate Speech, Self-Harm]则只有这两个标签之一ANY模式命中才拦截其余标签的命中不影响判定。五、底层原理守卫到 Clavata API 的调用链5.1 策略 ID 解析action 的policy参数既支持直接传 UUID也支持传别名。源码get_policy_id()actions.py按以下顺序解析若未传policy但传了rail则从config.rail.policy取策略别名尝试把传入值解析为uuid.UUID成功则直接使用否则在config.policies字典中按别名查找策略 ID若别名不存在抛ClavataPluginValueError若找到的 ID 不是合法 UUID则抛出更友好的ClavataPluginConfigurationError提示检查 Clavata 配置。因此实际生产配置中把00000000-...占位符替换为真实 UUID 后policies段就变成了别名 → 真实 UUID的干净映射后续配置与调试都只和别名打交道。5.2 HTTP 调用与重试Clavata 的通信封装在 request.py 的ClavataClient中认证请求头Authorization: Bearer api_keyAPI Key 优先取构造参数否则读环境变量CLAVATA_API_KEY两者皆无时抛出ClavataPluginConfigurationError见 request.py。因此运行前必须设置export CLAVATA_API_KEY你的 Clavata API Key请求体JobRequest包含content_data待审核文本列表、policy_id以及wait_for_completionTrue即同步等待 Clavata 完成审核作业request.py。端点向{server_endpoint}/v1/jobs发起POSTrequest.py。重试策略_CLAVATA_RETRY_POLICYrequest.py定义最多 3 次尝试、仅对POST且状态码429限流重试、初始延迟 0.1 秒、最大延迟 10 秒——对限流有内置的退避保护。状态处理作业状态为JOB_STATUS_FAILED/JOB_STATUS_CANCELED时标记失败非JOB_STATUS_COMPLETED时抛ClavataPluginAPIError仅接受单条内容对应的单一报告Expected 1 report per job见PolicyResult.from_job()actions.py。5.3 拦截行为与异常模式流定义 flows.co 展示了命中后的两种处理路径默认路径bot refuse to respond并abort——机器人拒绝回复交互终止异常路径当$system.config.enable_rails_exceptionscolang 2.x或$config.enable_rails_exceptionscolang 1.0开启时发送ClavataPolicyMatchException(message...)事件把拦截转交给应用层的异常处理机制便于上层以编程方式捕获并自定义后续行为。从源码结构看该守卫的可插拔能力通过 RailManifest 统一注册rail.py 声明了clavata check for/clavata check input/clavata check output三个流名、ClavataCheckAction动作、输入输出 surface 绑定、CLAVATA_API_KEY环境变量要求以及隐私声明sends_user_textTrue, sends_bot_textTrue, remote_services(Clavata API,)——即用户与机器人文本会被发送到 Clavata 远程服务涉及敏感数据的场景需要评估合规要求。六、测试验证与自定义扩展仓库测试 tests/test_clavata.py 使用RecordingHTTPClient模拟 Clavata API 响应覆盖了无活跃策略时放行test_clavata_no_active_policy_check、命中拦截、异常事件等场景可作为理解动作行为与编写自测的参考通过monkeypatch.setenv(CLAVATA_API_KEY, )模拟缺失/空 Key 的场景通过add_clavata_response()注入构造好的CreateJobResponse含Report、SectionReport、Result等模型见 request.py从而在不真正联网的情况下验证判定逻辑。若你需要在示例基础上扩展可从以下方向入手替换真实策略 ID把config.yml中policies的占位 UUID 换成 Clavata 控制台创建的真实策略并设置CLAVATA_API_KEY环境变量调整标签判定为input/output增加或精简labels并按需把label_match_logic改为ALL收紧判定新增策略侧仿照示例在policies中追加别名与 ID再为input/output切换policy开启异常模式启用enable_rails_exceptions让命中拦截以ClavataPolicyMatchException事件形式暴露给上层应用处理而非默认的机器人拒绝话术。七、最佳实践与注意事项务必先设置CLAVATA_API_KEY缺失时会分别在客户端构造与请求头生成阶段抛出ClavataPluginConfigurationError报错信息会明确提示该环境变量未设置。策略 ID 必须为合法 UUIDpolicies中映射到非 UUID 值时get_policy_id()会抛出专门的配置错误调试时优先用别名减少 UUID 散落各处的维护成本。理解标签判定语义不配labels时依据策略整体结果配置后仅按ANY/ALL逻辑收窄判定二者行为差异明显请结合审核需求选择。评估数据出境Clavata 属于远程第三方服务用户输入与机器人输出都会发送至该 API见 rail.py 的隐私声明涉及 PII 或敏感业务数据时需先完成合规评估。限流有内置退避客户端对 429 响应自动重试最多 3 次无需自行处理高并发场景仍建议结合自身流量评估 Clavata 配额。综上examples/configs/clavata示例以最小配置演示了输入威胁审核 输出毒性审核的完整闭环从 config.yml 的策略别名映射与 input/output 流绑定到 actions.py 的标签判定再到 request.py 的带重试 HTTP 调用任何一个环节都可以按上文的参数与源码线索做进一步定制快速落地为生产可用的 Clavata 内容安全防线。赞分享人工智能大模型AI 安全治理模型安全内容安全提示词注入防护RAG【免费下载链接】GuardrailsNeMo Guardrails is an open-source toolkit for easily adding programmable guardrails to LLM-based conversational systems.项目地址https://gitcode.com/gh_mirrors/ne/Guardrails点击查看免费下载相关推荐在 NeMo Guardrails 中集成 Clavata 内容审核colang v2.x 配置实战与 Policy/Label 匹配机制解析在 NeMo Guardrails 中集成 Clavata 内容审核colang v2.x 配置实战与 Policy/Label 匹配机制解析 本文基于 Ne人工智能大模型AI 安全治理模型安全内容安全提示词注入防护RAG在 NeMo Guardrails 中集成 Llama Guard基于 vLLM 的输入输出内容审核实战在 NeMo Guardrails 中集成 Llama Guard基于 vLLM 的输入输出内容审核实战 本文围绕 examples/configs/llam人工智能大模型AI 安全治理模型安全内容安全提示词注入防护RAGCivitai 基于 Clavata 的用户生成文本内容审核系统架构、配置与实战指南Civitai 基于 Clavata 的用户生成文本内容审核系统架构、配置与实战指南 本文档基于 docs/features/text moderation后端前端AI 应用上一篇opencodex 下 Codex 原生聊天历史同步加固实战从“重启后历史消失”到源码级修复下一篇DeepTutor终极指南如何用AI智能体打造你的专属个性化学习助手创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考