输出过滤(Llama Guard、NeMo)
在输出上运行较小的防护模型,在发布前检测有害内容、PII 泄露和违反策略的内容。
输出过滤(Llama Guard、NeMo) 是 CoddyKit 上的免费 AI Agents 课时。 这是第 2 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 AI Agents 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 AI Agents 课程共包含 4 节课。
为什么要过滤输出?
即使输入是安全的,模型仍可能输出:
- 个人数据泄露
- 仇恨言论或骚扰内容
- 自残内容
- 违反用户意图的工具调用
输出过滤器是用户看到任何内容前的最后一道防线。
Llama Guard
Meta 的安全分类器——开放权重,速度非常快:
from transformers import AutoTokenizer, AutoModelForCausalLM
model = AutoModelForCausalLM.from_pretrained('meta-llama/Llama-Guard-3-8B')
# Outputs 'safe' or 'unsafe' with category.NeMo Guardrails
NVIDIA NeMo Guardrails——使用检查机制封装 LLM 的 Python 框架:
# pip install nemoguardrails
from nemoguardrails import RailsConfig, LLMRails
config = RailsConfig.from_path('./config')
rails = LLMRails(config)
response = rails.generate(messages=[{'role': 'user', 'content': '...'}])Guardrails AI
guardrails-ai 是专注于验证和防护的 Python 库。它支持基于 XML 的“防护轨道”和 reAsk 修复循环。
Anthropic 宪法分类器
Anthropic 发布了一个分类器(作为 Claude 安全训练的补充)。它适用于对任何模型输出进行事后过滤。
基于 LLM 的自定义过滤器
成本最低的方案是使用较小的 LLM 来筛选输出:
FILTER_PROMPT = '''
Analyse the output. Return JSON: {safe: true/false, reason: str, categories: list}
Unsafe categories: PII leak, harmful instructions, copyright violation, prompt-injection echo.
Output:
{output}
'''
result = guard_llm.invoke(FILTER_PROMPT.format(output=text))正则表达式 / 规则过滤器
对于特定模式,正则表达式快速且可靠:
import re
EMAIL_RE = re.compile(r'[\w\.-]+@[\w\.-]+')
SSN_RE = re.compile(r'\b\d{3}-\d{2}-\d{4}\b')
def has_pii(text):
return bool(EMAIL_RE.search(text) or SSN_RE.search(text))
# --- demo ---
samples = ['Contact me at jane@example.com', 'My SSN is 123-45-6789', 'No PII in this sentence']
for s in samples:
print(f'{s!r} -> has_pii={has_pii(s)}')
PII 脱敏
不要只进行阻止——有时可以进行脱敏,让其余内容通过:
def redact(text):
text = EMAIL_RE.sub('[email]', text)
text = SSN_RE.sub('[ssn]', text)
return text双层过滤器
先使用快速规则,再使用成本较高的 LLM:
def filter_output(text):
if has_obvious_pii(text):
return BLOCKED
result = guard_llm.invoke(...)
return result流式输出
对于流式输出,请逐个 SENTENCE-BY-SENTENCE 进行过滤:
buf = ''
for token in stream:
buf += token
if buf.endswith(('. ', '! ', '? ', '\n')):
if not safe(buf):
stream.close()
emit_to_client('[content filtered]')
break
emit_to_client(buf)
buf = ''误报与漏报
请调整到适当的平衡:
- 高风险场景(医疗、金融):倾向于误报(阻止更多内容)
- 创意或娱乐内容:倾向于漏报(阻止更少内容)
过滤日志包含敏感信息
过滤日志包含被阻止的内容。请使用较短的存活时间安全存储:
log.warning('Blocked output', extra={'reason': r, 'category': c}, sanitize_payload=True)向用户说明
阻止内容时,请告诉用户原因,以免他们反复提交重试:
def handle_privacy_request():
return 'I cannot share that information for privacy reasons.'
print(handle_privacy_request())多层过滤器
为什么要将正则表达式与基于 LLM 的过滤结合起来?
回顾
Llama Guard / NeMo / 自定义 LLM 过滤器 + 正则规则。采用两层防护。可能时进行脱敏。内容被阻止时,始终告知用户。
常见问题解答
「输出过滤(Llama Guard、NeMo)」课时是免费的吗?
是的 — 「输出过滤(Llama Guard、NeMo)」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 AI Agents 课程的其余内容,请升级到 CoddyKit PRO。 AI Agents 课程共包含 4 节课。
「输出过滤(Llama Guard、NeMo)」这节课中我会学到什么?
在输出上运行较小的防护模型,在发布前检测有害内容、PII 泄露和违反策略的内容。 你通过在浏览器中直接运行的动手代码来练习 AI Agents,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 AI Agents 需要有经验吗?
无需任何先前经验。CoddyKit 上的 AI Agents 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 2 节课,共 4 节。
「输出过滤(Llama Guard、NeMo)」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 AI Agents 课中编写并运行代码吗?
能。每节 AI Agents 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- 提示词注入防御
- 输出过滤(Llama Guard、NeMo)
- 代码智能体的沙盒执行
- 工具访问控制