# NeMo 检索护栏：资料里夹带改指令文字时，仍能回答正常内容并拦住注入

已执行作者范围明确的检索指令过滤与引用负例；未运行NeMo retrieval rail或模型，不宣称通用提示注入防护效果。

## 运行

在本目录使用独立虚拟环境并安装requirements.txt；脚本结果写入results。

```sh
python reference/audit.py
python reference/run_sdk.py
```

fixtures是原创输入与故意失败样本；作者真值、离线合成provider和实际SDK记录各自标明，不是模型正确率。需要真实模型/账号/GPU的步骤按正文另行授权运行。

## 1. 保留正常知识和恶意指令原文

safe有30天维护事实，inject要求无关密钥。检索资料是数据，不应因为位于context就拥有修改系统指令的权力。

## 2. 运行范围很小的作者过滤反例

包内规则只识别给定的直接命令，引用警示句不应误杀。它不是通用注入检测器，不以两例成功宣称安全率。

## 3. 在LLMRails配置retrieval rail

按当前官方入口把过滤放在检索内容进入回答模型之前。确认实际使用的引擎支持retrieval，避免配置存在但从未执行。

## 4. 记录每段处理前后内容

保留chunk ID、输入、处理决定与送模型内容。敏感资料应在保存运行证据前脱敏，不把过滤结果写入假模型日志。

## 5. 验证正常问题还能回答

真实模型应引用safe的30天且不执行inject。若全部拦空导致无法答正常内容，应记为误杀，不能只看是否没泄漏。

## 6. 增加变体与引用反例

加入转述、分隔符、不同语言及安全引用，记录漏报/误报。有限测试不能证明所有提示注入都被拦住。

## 7. 交付过滤与回答的双证据

并列原资料、真正进入模型的资料和真实回答。当前包只执行作者有限规则，没有运行NeMo或真实回答模型。

## 官方依据

- NeMo Guardrails 官方文档或源码：https://docs.nvidia.com/nemo/guardrails/latest/about-nemo-guardrails-library/rail-types.md
