
人工智能大模型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 是 NVIDIA 开源的 LLM 对话系统可编程护栏工具包。本文围绕仓库中 examples/configs/jailbreak_detection 示例系统讲解如何为基于 LLM 的对话系统接入越狱检测Jailbreak Detection能力从配置文件结构、两条内置 Rail 流启发式 模型分类器、阈值参数语义到独立检测服务的部署与在进程内运行两种模式。读完本文你将掌握config.yml的完整配置方法、flows.co的对话流写法以及jailbreak detection heuristics与jailbreak detection model两条输入 Rail 的实际拦截行为与底层实现原理。一、示例整体概览三份文件各司其职jailbreak_detection示例目录的结构非常精简只有三个文件文件作用README.md示例说明交代目录结构与配置要点config.yml核心配置声明主模型、越狱检测参数与启用的 Rail 流flows.coColang 对话流文件定义用户消息、机器人回复及示例对话流其中config.yml和flows.co是真正驱动 NeMo Guardrails 运行时行为的两份文件前者决定检测能力如何配置与启用后者决定机器人在什么场景下如何应答、越狱拦截后如何收场。而真正的检测逻辑则由仓库nemoguardrails/library/jailbreak_detection目录下的实现提供详见下文。二、config.yml 逐字段解读模型、阈值与 Rail 启用示例中的 config.yml 内容如下models: - type: main engine: openai model: gpt-3.5-turbo-instruct rails: config: jailbreak_detection: server_endpoint: http://localhost:1337/heuristics lp_threshold: 89.79 ps_ppl_threshold: 1845.65 embedding: Snowflake/snowflake-arctic-embed-m-long input: flows: - jailbreak detection heuristics - jailbreak detection model下面逐一拆解每个字段的含义。2.1 models主 LLM 的声明models段声明对话系统使用的主模型type: main标记这是主对话模型engine: openai使用 OpenAI 兼容的推理引擎model: gpt-3.5-turbo-instruct指定具体模型标识符。该字段属于 NeMo Guardrails 通用的模型声明语法与越狱检测本身无直接耦合——它决定的是被保护的对象即正常对话所依赖的 LLM。2.2 rails.config.jailbreak_detection检测参数这里正是越狱检测 Rail 的配置入口。参数对应的数据结构定义在源码 rail_config.py 的JailbreakDetectionConfig中各字段说明如下字段示例值类型语义server_endpointhttp://localhost:1337/heuristicsstr可选越狱检测服务heuristics/模型容器的 HTTP 端点不设置则退化为在进程内运行见第五节lp_threshold89.79float默认 89.79须 0length/perplexity长度-困惑度启发式的判定阈值ps_ppl_threshold1845.65float默认 1845.65须 0prefix/suffix perplexity前后缀困惑度启发式的判定阈值embeddingSnowflake/snowflake-arctic-embed-m-longstr可选已废弃该字段不再被使用见源码 rail_config.py 的 deprecated 标注nim_base_url例如http://localhost:8000/v1str可选使用 NVIDIA NIM 托管越狱检测模型时的 Base URL示例未配置按需补充nim_server_endpointclassifystr默认classifyNIM 分类路径默认指向 NemoGuard JailbreakDetect 的classify端点api_key—SecretStr可选NIM 请求的 API Key优先级高于api_key_env_varapi_key_env_var—str可选存放 NIM API Key 的环境变量名值得注意的几点实现细节字段校验源码中的validate_urls校验器要求server_endpoint与nim_base_url必须以http://或https://开头否则直接抛出ValueError见 rail_config.py。废弃字段迁移旧的nim_url/nim_port字段已被nim_base_url取代migrate_deprecated_fields校验器会在配置仍使用旧字段时自动将其转换为http://{nim_url}:{nim_port}/v1格式见 rail_config.pyembedding字段同样已废弃。API Key 解析优先级get_api_key()方法按api_key字段 →api_key_env_var指向的环境变量依次取用见 rail_config.py。2.3 rails.input.flows启用两条输入 Railrails.input.flows中的两个名字直接对应越狱检测库中注册的两条 Colang 流input: flows: - jailbreak detection heuristics - jailbreak detection modeljailbreak detection heuristics对用户输入执行启发式检查长度-困惑度、前后缀困惑度jailbreak detection model调用基于嵌入的越狱检测分类器进行判别。这两条流的定义、元信息与动作绑定关系全部声明在 rail.py 的RailManifest中该清单将该 Rail 标记为input方向能力为allow / block / classify / detect_jailbreak并把两条流分别绑定到jailbreak_detection_heuristics与jailbreak_detection_model两个动作见 rail.py。从源码结构可以推断两条流以用户输入为绑定上下文Binding.context(user_message, user_message)因此每次用户发消息都会触发检查。三、flows.co 示例对话流解析flows.co 定义了一个供演示的迷你机器人包含四类内容用户意图user express greeting问候、user ask name询问名字、user ask capabilities询问能力、user request repeat要求重复、user ask general question各类普通问题如股票推荐、餐厅推荐、写邮件、选举话题等 14 条具体话术。机器人消息bot inform capabilities——I am an example bot that illustrates jailbreak detection capabilities. Try to jailbreak me!示例机器人会主动邀请读者尝试越狱便于演示拦截效果。两条简单对话流问候流user express greeting→bot express greeting能力流user ask capabilities→bot inform capabilities。兜底对话流user ask general question→bot provide response普通问题走通用回复。这个文件的用意是构造一个什么都能聊的对话示例让越狱检测 Rail 的效果直观可见正常提问正常回复越狱话术则被输入 Rail 拦截。四、两条越狱检测 Rail 的底层实现4.1 启发式检测流jailbreak detection heuristics该流对应的动作是jailbreak_detection_heuristics实现在 actions.py。其执行逻辑为从配置读取server_endpoint、lp_threshold、ps_ppl_threshold取得当前用户消息作为待检prompt若配置了server_endpoint则通过 request.py 中的jailbreak_detection_heuristics_request向端点发送POST请求请求体为{prompt: ..., lp_threshold: ..., ps_ppl_threshold: ...}解析响应中的jailbreak布尔字段若未配置端点则回退到进程内直接调用 heuristics/checks.py 中的两个检查函数并输出警告 Running in-process, NOT RECOMMENDED FOR PRODUCTION.若端点请求失败非 200 或字段缺失按非越狱放行并记录警告最终通过RailOutcome.block()或RailOutcome.allow()返回拦截/放行决策。启发式检查本身基于 GPT-2 语言模型的困惑度perplexity计算核心实现在 heuristics/checks.py长度-困惑度启发式check_jailbreak_length_per_perplexity先以滑动窗口stride512在gpt2-large上计算整个输入字符串的困惑度perplexity再计算score len(input_string) / perplexity当score lp_threshold默认 89.79时判定为越狱。其背后的直觉是典型的 DANDo Anything Now式越狱话术往往长度很长但困惑度异常低即文本高度重复、可预测。前后缀困惑度启发式check_jailbreak_prefix_suffix_perplexity先将输入按空白切分为词列表当词数少于 20 时直接判定安全源码注释明确说明对 GCG 式攻击少于 20 个词无评估意义否则取前 19 个词作为prefix、取倒数第 2~21 个词作为suffix分别计算困惑度只要其中任何一个 ps_ppl_threshold默认 1845.65即判定为越狱。这类攻击的典型特征是正常前缀 无意义的高困惑度后缀。两个启发式检查在 server.py 的/heuristics端点中以any(...)逻辑合并返回{jailbreak: ..., length_per_perplexity: ..., prefix_suffix_perplexity: ...}。4.2 模型分类器流jailbreak detection model该流对应的动作是jailbreak_detection_model实现在 actions.py。执行逻辑依次为读取server_endpoint、nim_base_url、nim_server_endpoint、API Key经get_api_key()解析若启用了缓存model_caches中名为jailbreak_detection的缓存先按规范化后的 prompt 查询缓存命中则直接返回缓存结果该动作被当作一次 LLM 调用记录到追踪与日志中分发检测路径若配置了nim_base_url调用jailbreak_nim_request走 NVIDIA NIM 托管分类器鉴权用api_key/api_key_env_var否则若配置了server_endpoint调用jailbreak_detection_model_request请求/model端点否则退化为进程内调用 model_based/checks.py 的check_jailbreak同样给出 NOT RECOMMENDED FOR PRODUCTION 警告将结果写入缓存按jailbreak_result返回RailOutcome.block()或RailOutcome.allow()。模型侧的实现要点见 model_based/checks.py分类器模型文件为snowflake.onnx来源于 Hugging Face 仓库nvidia/NemoGuard-JailbreakDetect模型路径由环境变量EMBEDDING_CLASSIFIER_PATH指定未设置时/model端点不可用initialize_model()返回None并告警check_jailbreak(prompt)返回{jailbreak: 0/1, score: ...}其中分类结果被转换为布尔值。4.3 两条流的拦截动作flows.co 中的判定逻辑仓库库目录下的 flows.co 展示了检测到越狱后的统一处置逻辑示例配置通过rails.input.flows引用同名流flow jailbreak detection heuristics $response await JailbreakDetectionHeuristicsAction $is_jailbreak $response.is_blocked if $is_jailbreak if $system.config.enable_rails_exceptions send JailbreakDetectionRailException(messageJailbreak attempt detected. ...) else bot refuse to respond abort即一旦动作返回is_blocked流会发送JailbreakDetectionRailException若开启了 rails 异常或触发bot refuse to respond并abort中断对话。模型流jailbreak detection model采用完全相同的处理结构。五、检测服务部署与运行模式示例中的server_endpoint: http://localhost:1337/heuristics指向独立部署的检测服务。该服务的源码位于 server.py是基于 FastAPI Typer 的轻量服务主要端点如下端点方法说明/GET返回服务介绍与端点指引/jailbreak_lp_heuristicPOST单独执行长度-困惑度启发式/jailbreak_ps_heuristicPOST单独执行前后缀困惑度启发式/heuristicsPOST一次执行全部启发式并合并结果示例配置使用的端点/modelPOST调用已加载的嵌入分类器返回{jailbreak: ..., score: ...}服务启动命令默认监听0.0.0.0:1337python server.py --port1337启动时会在初始化阶段加载分类器模型_ mc.initialize_model()。仓库提供了两种容器化部署方式DockerfileCPU与Dockerfile-GPU。以 CPU 版为例它完成以下事情预下载分类器模型snowflake.onnx并设置EMBEDDING_CLASSIFIER_PATH/models安装 requirements.txt 中声明的最小依赖集设置JAILBREAK_CHECK_DEVICEcpu并预下载gpt2-large及其 tokenizer启发式困惑度计算依赖暴露 1337 端口默认以python /app/server.py --port1337启动。关键环境变量汇总环境变量作用EMBEDDING_CLASSIFIER_PATH本地嵌入分类器模型所在目录缺失时/model端点与进程内模型检测不可用JAILBREAK_CHECK_DEVICE本地模型加载设备如cpu、cuda:0默认cpuNVIDIA_API_KEY使用 NVIDIA NIM 托管配置时的 API KeyHF_TOKEN/HF_HOME/HF_HUB_OFFLINE可选本地模型下载/缓存相关配置见 rail.py 的RailRequirements声明运行模式小结远端服务模式推荐生产配置server_endpoint及可选的 NIM 配置NeMo Guardrails 通过 HTTP 调用独立服务完成检测检测逻辑与主进程解耦进程内模式仅限原型/测试不配置任何端点动作会回退到进程内直接加载 GPT-2 与分类器执行检查。源码在两条动作路径中均明确记录警告 Running in-process, NOT RECOMMENDED FOR PRODUCTION.并需要torch、transformers以及模型检测所需的scikit-learn等可选依赖故仅适合本地验证。六、阈值调参与测试验证6.1 两个阈值的语义与调参方向lp_threshold默认 89.79len(prompt) / perplexity(prompt)的判定线。越狱话术若冗长且低困惑度比值会显著偏高可适当调低阈值提高召回、调高阈值降低误报。ps_ppl_threshold默认 1845.65前后缀困惑度的判定线。GCG 式攻击的垃圾后缀困惑度极高阈值越高对正常长文本越宽容。源码中的默认值同时出现在配置模型rail_config.py、FastAPI 请求模型server.py与请求转发request.py三处三者保持一致。6.2 测试用例作为调参参考仓库的 tests/test_jailbreak_heuristics.py 提供了权威的行为基准test_jb_len_ppl_detected/test_jb_ps_ppl_detected分别用典型的 DAN 式长文本与正常前缀 高困惑度后缀文本构造越狱样例断言在默认阈值89.79 / 1845.65下会被判定为越狱并触发拒绝回复test_safe普通教学场景文本不应被误判机器人正常回复test_get_perplexity正常句子的困惑度应远低于 20而高困惑度乱码应大于 15000直观反映困惑度区分的有效性test_check_jailbreak_length_per_perplexity/test_check_jailbreak_prefix_suffix_perplexity直接对两个启发式函数做阈值断言。注意这些测试依赖torch与transformers可选依赖未安装时会被skipif跳过。若你使用 NIM 托管方案还需参考 tests/test_jailbreak_nim.py 了解 NIM 路径的请求格式与鉴权行为。七、从示例到生产完整接入路径将本示例落地到自己的对话系统整体链路如下准备配置文件参照 config.yml声明主模型并在rails.config.jailbreak_detection下配置端点与阈值启用 Rail 流在rails.input.flows中加入jailbreak detection heuristics与jailbreak detection model两条流均可在 flows.co 中查看其拦截行为定义部署检测服务按 Dockerfile 构建镜像并运行于 1337 端口或改用 NVIDIA NIM配置nim_base_urlapi_key作为模型分类路径定义对话流参考 flows.co 编写普通对话流与兜底流让正常交互不被误伤验证与调参用 tests/test_jailbreak_heuristics.py 中的正反样例测试当前阈值配置再结合自身业务数据微调两个阈值。需要特别提醒本示例采用的gpt-3.5-turbo-instruct与本地 GPT-2 困惑度计算仅用于演示生产环境建议将检测服务独立部署进程内模式会引入模型加载开销与明显的日志警告并对越狱检测涉及的用户文本传输做好隐私评估——该 Rail 的RailPrivacy声明为sends_user_textTrue见 rail.py即用户消息会发送给检测服务/NIM接入前应确保符合自身的数据合规要求。八、延伸阅读越狱检测库完整实现nemoguardrails/library/jailbreak_detection配置模型与字段校验rail_config.py动作与请求链路actions.py、request.py检测服务server.py更多安全类输入 Rail 示例可参考 examples/configs/injection_detection 与 examples/configs/prompt_security构建多层次输入防护。赞分享人工智能大模型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实现LLM越狱检测与安全防御终极防护指南如何用NeMo Guardrails实现LLM越狱检测与安全防御 在人工智能快速发展的今天大型语言模型的安全防护已成为企业部署AI系统的关键考量人工智能大模型AI 安全治理模型安全内容安全提示词注入防护RAGNeMo Guardrails项目实战输入护栏(Input Rails)配置指南NeMo Guardrails项目实战输入护栏 Input Rails 配置指南 前言 在构建对话系统时如何确保AI助手只响应合规的用户输入是一个关键挑战。人工智能大模型AI 安全治理模型安全内容安全提示词注入防护RAGNeMo Guardrails实战手册5步构建AI幻觉检测防护体系在AI应用快速普及的今天大型语言模型虽然能够生成流畅自然的文本但经常会产生幻觉问题 即编造事实、提供错误信息或虚构细节。这些问题在客服机器人、问答系统和人工智能大模型AI 安全治理模型安全内容安全提示词注入防护RAG上一篇如何快速掌握MAUI跨平台开发从零到项目部署的完整实战指南下一篇3步打造沉浸式3D场景raylib天空盒技术完全指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考