RAG 安全进阶:为大模型应用构建输出防护栏 (Guardrails)

4 阅读1分钟

目录 (Outline)


一、 AI 的「野蛮生长」:为什么你的 RAG 应用需要防护栏?

1. 业务风险

如果你构建的是一个医疗或金融咨询 AI,模型一旦产生「幻觉」并给出错误建议,后果将不堪设想。

2. 监管要求

GDPR 等法规要求应用必须严格保护用户隐私,禁止模型在回复中泄露敏感数据。


二、 核心挑战:幻觉、隐私泄露与越狱攻击

1. 幻觉 (Hallucination)

AI 可能会编造看似真实但实际上并不存在的知识,尤其是在 RAG 检索到的文档质量不高时。

2. PII 泄露

用户可能会在 Prompt 中无意间输入电话、身份证号。AI 必须学会识别并拒绝处理这些信息。

3. 越狱 (Jailbreak)

通过复杂的提示词(如「DAN」模式),用户可能会绕过模型的安全限制,让其输出违禁内容。


三、 现代防护栏架构:Input -> LLM -> Output Verification

一套完整的防护方案应该包含两个层级:

  1. 输入防御:在请求发送给 LLM 之前,进行意图识别和敏感词过滤。
  2. 输出校验 (Guardrails):对 LLM 生成的内容进行二次核查。

四、 实战 1:基于 Pydantic 的结构化输出校验

在业务系统中,我们通常需要 AI 返回 JSON 格式的数据。

实现方案

使用 Guardrails AIInstructor 库。

from pydantic import BaseModel, Field, validator

class ArticleSummary(BaseModel):
    title: str = Field(description="文章标题")
    summary: str = Field(description="不少于 50 字的摘要")
    
    @validator('summary')
    def validate_length(cls, v):
        if len(v) < 50:
            raise ValueError("摘要太短了!")
        return v

如果 AI 生成的 JSON 不符合 Pydantic 定义,防护栏会自动要求模型进行重试。


五、 实战 2:利用语义相似度检测 AI 幻觉

如何判断 AI 的回复是否忠实于检索到的文档?

Self-RAG 策略

  1. 生成回复
  2. 语义比对:将回复与原文片段进行 Cosine Similarity 计算。
  3. 阈值拦截:如果相似度低于 0.7,标记为潜在幻觉,拒绝输出。

六、 进阶:自动化敏感信息 (PII) 脱敏

在 RAG 场景中,我们可以在 Embedding 之前或生成之后进行脱敏。

代码思路

利用现成的 NLP 库(如 Presidio)进行扫描:

from presidio_analyzer import AnalyzerEngine

analyzer = AnalyzerEngine()
results = analyzer.analyze(text=ai_output, entities=["PHONE_NUMBER", "EMAIL_ADDRESS"], language='en')

# 自动打码:将 13800138000 替换为 [PHONE]

七、 总结:构建可信、合规的 AI 应用

「防护栏」不是为了限制 AI 的能力,而是为了让 AI 能够在安全的框架内服务于业务。随着技术的发展,轻量级的「安全模型」将会被部署在本地,为每一条 AI 回复保驾护航。