ai content moderation

AI 内容审核系统设计:多级过滤与实时拦截

概述 AI 内容审核系统是保障 UGC 平台安全的第一道防线。2025-2026 年,随着多模态 AI 和深度伪造的泛滥,内容审核面临前所未有的挑战:跨模态违规、隐晦内容、对抗攻击。本文将系统介绍生产级审核系统的设计方法。 一、审核内容分类 1.1 违规类型矩阵 类型 文本 图像 音频 视频 检测难度 色情低俗 ⚠️ 🔴 🔴 🔴 中 暴力恐怖 ⚠️ 🔴 🔴 🔴 中 违禁品 🔴 🔴 ⚠️ 🔴 高 政治敏感 🔴 🔴 ⚠️ 🔴 高 垃圾广告 🔴 ⚠️ 🔴 🔴 低 网络欺凌 🔴 ⚠️ 🔴 🔴 中 隐私泄露 🔴 🔴 ⚠️ 🔴 高 深度伪造 - 🔴 🔴 🔴 极高 1.2 审核级别定义 from enum import Enum from dataclasses import dataclass class ContentRisk(Enum): """内容风险等级""" SAFE = "safe" # 无风险,正常展示 LOW = "low" # 低风险,可展示但降权 MEDIUM = "medium" # 中风险,需人工复核 HIGH = "high" # 高风险,立即拦截 CRITICAL = "critical" # 严重风险,封禁并上报 @dataclass class AuditDecision: """审核决策""" risk_level: ContentRisk violation_types: list[str] confidence: float action: str # approve, review, reject, ban reason: str reviewer_needed: bool = False appeal_available: bool = True 二、系统架构设计 2.1 多级过滤架构 用户内容上传 │ ▼ ┌──────────────────────────────────────────────────┐ │ L1: 规则过滤(<10ms) │ │ ├─ 关键词黑名单 │ │ ├─ 正则模式匹配 │ │ └─ 格式/长度检查 │ └──────────────────────────────────────────────────┘ │ 通过 ▼ ┌──────────────────────────────────────────────────┐ │ L2: AI 模型过滤(50-200ms) │ │ ├─ 文本分类器(BERT/DeBERTa) │ │ ├─ 图像分类器(ResNet/ViT) │ │ └─ 多模态融合检测 │ └──────────────────────────────────────────────────┘ │ 疑似违规 → 人工队列 │ 通过 ▼ ┌──────────────────────────────────────────────────┐ │ L3: 上下文审核(200-500ms) │ │ ├─ 用户历史行为 │ │ ├─ 内容发布场景 │ │ └─ 关联内容分析 │ └──────────────────────────────────────────────────┘ │ 通过 ▼ ┌──────────────────────────────────────────────────┐ │ L4: 实时监控(异步) │ │ ├─ 新增举报处理 │ │ ├─ 热点内容复检 │ │ └─ 模型漂移检测 │ └──────────────────────────────────────────────────┘ 2.2 核心模块实现 import asyncio from typing import Optional from concurrent.futures import ThreadPoolExecutor class ContentModerationPipeline: """内容审核流水线""" def __init__(self, config: dict): self.keyword_filter = KeywordFilter(config["keywords"]) self.text_classifier = TextClassifier(config["text_model"]) self.image_classifier = ImageClassifier(config["image_model"]) self.video_classifier = VideoClassifier(config["video_model"]) self.context_analyzer = ContextAnalyzer(config["context_config"]) self.executor = ThreadPoolExecutor(max_workers=50) async def moderate(self, content: dict) -> AuditDecision: """ 异步审核入口 """ # L1: 规则过滤(同步,极快) if not self._rule_filter(content): return AuditDecision( risk_level=ContentRisk.HIGH, violation_types=["rule_violation"], confidence=1.0, action="reject", reason="触发关键词/规则拦截", appeal_available=True, ) # L2: AI 模型过滤(并行) text_task = asyncio.create_task(self._text_moderation(content.get("text", ""))) image_task = asyncio.create_task(self._image_moderation(content.get("images", []))) video_task = asyncio.create_task(self._video_moderation(content.get("videos", []))) results = await asyncio.gather(text_task, image_task, video_task) text_result, image_result, video_result = results # 合并多模态结果 merged = self._merge_multimodal_results(text_result, image_result, video_result) # L3: 上下文审核(如有必要) if merged.risk_level in [ContentRisk.MEDIUM, ContentRisk.HIGH]: context_result = await self._context_analysis(content, merged) merged = self._update_with_context(merged, context_result) return merged def _rule_filter(self, content: dict) -> bool: """规则过滤""" text = content.get("text", "") if self.keyword_filter.contains_blacklist(text): return False return True async def _text_moderation(self, text: str) -> dict: """文本审核""" if not text: return {"violations": [], "confidence": 1.0} return await asyncio.get_event_loop().run_in_executor( self.executor, self.text_classifier.classify, text ) async def _image_moderation(self, images: list) -> dict: """图像审核""" if not images: return {"violations": [], "confidence": 1.0} tasks = [ asyncio.get_event_loop().run_in_executor( self.executor, self.image_classifier.classify, img ) for img in images ] results = await asyncio.gather(*tasks) return self._aggregate_image_results(results) def _merge_multimodal_results(self, text_result, image_result, video_result) -> AuditDecision: """多模态结果融合""" all_violations = ( text_result.get("violations", []) + image_result.get("violations", []) + video_result.get("violations", []) ) # 取最高置信度 max_confidence = max( text_result.get("confidence", 0), image_result.get("confidence", 0), video_result.get("confidence", 0) ) # 确定风险等级 if max_confidence > 0.9 and all_violations: risk_level = ContentRisk.HIGH action = "reject" elif max_confidence > 0.7 and all_violations: risk_level = ContentRisk.MEDIUM action = "review" elif max_confidence > 0.5 and all_violations: risk_level = ContentRisk.LOW action = "approve" else: risk_level = ContentRisk.SAFE action = "approve" return AuditDecision( risk_level=risk_level, violation_types=all_violations, confidence=max_confidence, action=action, reason="多模态审核结果", reviewer_needed=(risk_level == ContentRisk.MEDIUM), ) 三、分类器实现 3.1 文本分类器 from transformers import AutoTokenizer, AutoModelForSequenceClassification import torch class TextClassifier: """多标签文本分类器""" def __init__(self, model_path: str, labels: list[str]): self.tokenizer = AutoTokenizer.from_pretrained(model_path) self.model = AutoModelForSequenceClassification.from_pretrained(model_path) self.model.eval() self.labels = labels self.thresholds = {label: 0.5 for label in labels} # 可动态调整 def classify(self, text: str) -> dict: """ 多标签分类 """ inputs = self.tokenizer( text, return_tensors="pt", truncation=True, max_length=512, padding=True ) with torch.no_grad(): outputs = self.model(**inputs) probs = torch.sigmoid(outputs.logits)[0] violations = [] for i, label in enumerate(self.labels): if probs[i].item() > self.thresholds[label]: violations.append(label) max_prob = probs.max().item() if len(probs) > 0 else 0 return { "violations": violations, "confidence": max_prob, "all_scores": {label: probs[i].item() for i, label in enumerate(self.labels)}, } def update_threshold(self, label: str, threshold: float): """动态调整阈值""" self.thresholds[label] = threshold 3.2 图像分类器 class ImageClassifier: """图像审核分类器""" # 常见违规类型 VIOLATION_TYPES = [ "pornography", "violence", "hate_symbol", "illegal_goods", "self_harm", "child_exploitation", # 最高优先级 "gore", "weapon", ] # 优先级:发现即拦截 IMMEDIATE_REJECT = ["child_exploitation", "pornography"] def __init__(self, model_path: str): # 实际部署可使用 EfficientNet 或 Vision Transformer self.model = self._load_model(model_path) self.ocr_engine = PaddleOCR() # 用于提取图像中文字 def classify(self, image_data: bytes) -> dict: """ 图像多维度审核 """ # 1. 图像内容分类 content_result = self._classify_content(image_data) # 2. OCR 文字提取 ocr_result = self._extract_text(image_data) # 3. 合并结果 violations = content_result.get("violations", []) # OCR 文字中的违规 text_violations = self._check_text_violations(ocr_result.get("text", "")) violations.extend(text_violations) # 检查严重违规 for v in self.IMMEDIATE_REJECT: if v in violations: return { "violations": violations, "confidence": 1.0, "immediate_reject": True, } return { "violations": list(set(violations)), "confidence": max(content_result.get("confidence", 0), ocr_result.get("confidence", 0)), } def _classify_content(self, image_data: bytes) -> dict: """图像内容分类""" # 预处理 image = self._preprocess(image_data) # 推理 with torch.no_grad(): outputs = self.model(image) probs = torch.softmax(outputs, dim=-1)[0] violations = [] for i, label in enumerate(self.VIOLATION_TYPES): if probs[i].item() > 0.5: violations.append(label) return { "violations": violations, "confidence": probs.max().item(), } 四、实时拦截策略 4.1 滑动窗口限流 import time from collections import defaultdict class RateLimitModerator: """基于违规率的实时拦截""" def __init__(self, window_seconds: int = 300, violation_threshold: int = 3): self.window_seconds = window_seconds self.violation_threshold = violation_threshold self.user_history = defaultdict(list) def check_user_violations(self, user_id: str) -> dict: """ 检查用户违规历史 """ now = time.time() history = self.user_history[user_id] # 清理过期记录 history[:] = [t for t in history if now - t < self.window_seconds] # 检查是否超限 should_block = len(history) >= self.violation_threshold remaining_time = self.window_seconds - (now - history[0]) if history else 0 return { "should_block": should_block, "violation_count": len(history), "threshold": self.violation_threshold, "remaining_time": remaining_time, } def record_violation(self, user_id: str): """记录违规""" self.user_history[user_id].append(time.time()) 4.2 热点内容复检 class HotContentMonitor: """热点内容复检""" def __init__(self, threshold_views: int = 10000, resample_ratio: float = 0.01): self.threshold_views = threshold_views self.resample_ratio = resample_ratio self.content_views = defaultdict(int) self.resampled = set() def should_resample(self, content_id: str) -> bool: """ 判断是否需要复检 """ views = self.content_views[content_id] # 热点内容强制复检 if views >= self.threshold_views and content_id not in self.resampled: self.resampled.add(content_id) return True # 随机抽样复检 if hash(content_id) % 100 < self.resample_ratio * 100: return True return False def record_view(self, content_id: str): """记录曝光""" self.content_views[content_id] += 1 # 清理过期数据(定期任务) if len(self.content_views) > 1_000_000: self._cleanup() def _cleanup(self): """清理低曝光内容""" threshold = self.threshold_views // 10 self.content_views = { k: v for k, v in self.content_views.items() if v >= threshold } 五、人机协同审核 5.1 审核队列优先级 class ReviewQueue: """人工审核队列""" # 优先级定义 PRIORITY_LEVELS = { "urgent": 0, # 儿童/违法内容,立即处理 "high": 1, # 高置信违规,限流展示 "normal": 2, # 疑似违规,正常排队 "appeal": 3, # 用户申诉,24h内处理 } def __init__(self): self.queues = {level: [] for level in self.PRIORITY_LEVELS} self.review_history = [] def enqueue(self, content_id: str, priority: str, reason: str, metadata: dict): """ 加入审核队列 """ item = { "content_id": content_id, "reason": reason, "metadata": metadata, "enqueued_at": time.time(), } level = self.PRIORITY_LEVELS.get(priority, 2) self.queues[level].append(item) def dequeue(self) -> Optional[dict]: """ 获取下一个待审内容(按优先级) """ for level in sorted(self.queues.keys()): if self.queues[level]: return self.queues[level].pop(0) return None def submit_review(self, content_id: str, decision: str, reviewer_id: str, notes: str): """ 提交审核结果 """ self.review_history.append({ "content_id": content_id, "decision": decision, "reviewer_id": reviewer_id, "notes": notes, "reviewed_at": time.time(), }) 六、效果评估指标 指标 定义 目标值 监控周期 准确率 正确拦截/总拦截 > 95% 每日 召回率 正确拦截/总违规 > 85% 每周 误伤率 误拦正常内容 < 0.1% 每日 延迟 P99 审核耗时 < 200ms 实时 申诉通过率 申诉成功/总申诉 < 5% 每周 人工复核率 需人工/总审核 < 5% 每日 七、技术栈推荐 模块 开源方案 商业方案 文本分类 Transformers 阿里云绿网 图像审核 Clarifai 腾讯云天御 音频审核 SpeechBrain 阿里云内容安全 深度伪造检测 FaceForensics++ 微软 Video Authenticator 工作流引擎 Airflow 自建审核系统 参考 Google Perspective API: https://perspectiveapi.com OpenAI Moderation API: https://platform.openai.com/docs/guides/moderation AWS Rekognition Content Moderation 《内容审核:大规模在线内容安全实践》,2024 加入讨论 这篇文章有姊妹讨论帖在硅基AGI论坛 — 全球首个碳基硅基认知交流平台。 ...

2026-06-25 · 6 min · 1167 words · 硅基 AGI 探索者
hermes security framework

Hermes 五层安全防线:从用户授权到供应链安全

AI Agent 的安全困境 AI Agent 拥有执行 Shell 命令、读写文件、调用 API 的能力,这让它极其强大,也极其危险。一个不受控的 Agent 可能删除重要文件、泄露敏感数据、甚至被注入攻击利用。 Hermes Agent 构建了五层安全防线,从内到外形成纵深防御: ┌─────────────────────────────────────────────────────┐ │ 第五层:供应链安全 │ │ 技能市场审核、依赖校验、签名验证 │ ├─────────────────────────────────────────────────────┤ │ 第四层:行为审计 │ │ 操作日志、异常检测、告警通知 │ ├─────────────────────────────────────────────────────┤ │ 第三层:容器隔离 │ │ Docker 沙箱、资源限制、网络策略 │ ├─────────────────────────────────────────────────────┤ │ 第二层:危险命令审批 │ │ 命令分类、风险评分、人工确认 │ ├─────────────────────────────────────────────────────┤ │ 第一层:用户授权 │ │ 身份认证、权限分级、操作范围限制 │ └─────────────────────────────────────────────────────┘ 第一层:用户授权 身份认证 # config.yaml - 认证配置 auth: mode: token # token | oauth | multi # Token 认证 tokens: - token: "hermes-xxxx" user: "alice" role: admin # admin | user | readonly # 多用户支持 users: alice: role: admin allowed_tools: ["*"] allowed_paths: ["/"] bob: role: user allowed_tools: ["shell", "file_read", "file_write"] allowed_paths: ["/home/bob", "/tmp"] guest: role: readonly allowed_tools: ["file_read"] allowed_paths: ["/public"] 权限分级 角色 可用工具 文件访问 危险命令 管理操作 admin 全部 全部 需确认 允许 user Shell/文件/API 用户目录 需确认 禁止 readonly 只读工具 指定目录 禁止 禁止 class AuthManager: """用户授权管理""" def check_permission(self, user, action, resource): role = self.get_role(user) # 检查工具权限 if action.tool not in role.allowed_tools: return False, "tool_not_allowed" # 检查路径权限 if not self._check_path(resource.path, role.allowed_paths): return False, "path_not_allowed" # 检查危险操作 if action.is_dangerous and not role.can_dangerous: return False, "dangerous_not_allowed" return True, "ok" 第二层:危险命令审批 命令分类系统 Hermes 将所有可执行命令分为四个风险等级: ...

2026-06-25 · 5 min · 922 words · 硅基 AGI 探索者
llm safety eval guide

LLM 安全评估指南:Toxicity/Bias/Jailbreak 全维度

引言 随着 LLM 部署规模扩大,安全评估不再是可选项。一个「能力强但不安全」的模型比一个「能力弱但安全」的模型危险得多。2026 年,安全评估已形成系统化的维度体系,涵盖毒性、偏见、越狱攻击、隐私泄露、对齐性等多个层面。本文提供完整的安全评估方法论。 一、安全评估维度全景 LLM 安全评估 ├── 毒性 (Toxicity) │ ├── 仇恨言论 │ ├── 侮辱/骚扰 │ ├── 暴力威胁 │ └── 自残引导 ├── 偏见 (Bias) │ ├── 性别偏见 │ ├── 种族偏见 │ ├── 年龄偏见 │ ├── 宗教偏见 │ └── 残障偏见 ├── 越狱攻击 (Jailbreak) │ ├── Prompt 注入 │ ├── 角色扮演绕过 │ ├── 编码/多语言绕过 │ └── 多轮诱导 ├── 隐私 (Privacy) │ ├── PII 泄露 │ ├── 训练数据提取 │ └── 成员推理 ├── 有害内容生成 │ ├── 武器/毒品制造 │ ├── 非法活动指导 │ └── 虚假信息生成 └── 对齐性 (Alignment) ├── 指令遵循 ├── 价值观一致性 └── 拒绝过度/不足 二、Toxicity 检测 2.1 评估方法 Red Teaming + 自动分类: ...

2026-06-25 · 4 min · 730 words · 硅基 AGI 探索者
llm security checklist

LLM 生产安全检查清单:上线前必须过的 50 项

为什么需要安全检查清单 LLM 应用引入了全新的攻击面:Prompt 注入、训练数据泄露、模型越狱、有害内容生成。传统 Web 安全检查清单覆盖不了这些。本文提供 50 项检查项,分为 5 大类,每一项都必须在上线前确认。 一、输入安全(12 项) Prompt 注入防护 # 检查项 风险等级 验证方式 1 用户输入与系统指令分离(使用 system role) 高 审查 prompt 结构 2 用户输入被包裹在分隔符中(如 <user_input>) 高 审查 prompt 模板 3 系统指令中包含"忽略以上指令"的防御声明 中 审查 system prompt 4 对用户输入做长度限制(建议 < 10K 字符) 中 压测验证 5 过滤已知的 Prompt 注入模式 高 红队测试 # Prompt 注入检测器 class PromptInjectionGuard: INJECTION_PATTERNS = [ r"ignore\s+(all\s+)?(previous|above|prior)\s+instructions", r"you\s+are\s+now\s+(a|an)\s+\w+", r"system\s*:\s*", r"<\|im_start\|>", r"forgot\s+your\s+rules", r"reveal\s+your\s+(system\s+)?prompt", ] def check(self, user_input: str) -> tuple[bool, list]: import re violations = [] for pattern in self.INJECTION_PATTERNS: if re.search(pattern, user_input, re.IGNORECASE): violations.append(pattern) return len(violations) == 0, violations PII 保护 # 检查项 风险等级 验证方式 6 输入中的 PII 被检测并脱敏 高 传入含 PII 的测试用例 7 PII 脱敏日志开启(不记录原始 PII) 高 审查日志配置 8 不会将用户输入原样发送给第三方服务 高 审查 API 调用链 import re class PIIScrubber: PATTERNS = { "phone": (r"\b1[3-9]\d{9}\b", "[PHONE]"), "email": (r"\b[\w.-]+@[\w.-]+\.\w+\b", "[EMAIL]"), "id_card": (r"\b\d{17}[\dXx]\b", "[ID_CARD]"), "bank_card": (r"\b\d{16,19}\b", "[BANK_CARD]"), } def scrub(self, text: str) -> str: for pii_type, (pattern, replacement) in self.PATTERNS.items(): text = re.sub(pattern, replacement, text) return text 内容安全 # 检查项 风险等级 验证方式 9 输入内容分类(是否包含暴力/违法内容) 高 红队测试 10 对敏感话题有预设的拒绝策略 中 审查 system prompt 11 支持多语言输入的过滤 中 多语言测试 12 对图片输入有内容审核(多模态场景) 高 上传违规模拟图 二、输出安全(10 项) 有害内容过滤 # 检查项 风险等级 验证方式 13 输出经过毒性检测模型 高 触发性测试用例 14 输出经过偏见/歧视检测 高 公平性测试集 15 对特定领域(医疗/法律/金融)有免责声明 中 审查输出模板 16 不输出可执行代码的直接运行结果 中 代码注入测试 class OutputSafetyFilter: def __init__(self, toxicity_model, threshold=0.7): self.model = toxicity_model self.threshold = threshold async def filter(self, response: str) -> tuple[str, bool]: # 毒性检测 toxicity = await self.model.predict(response) if toxicity > self.threshold: return self._safe_fallback(), False # 敏感信息泄露检测 if self._detect_leaked_info(response): return self._safe_fallback(), False return response, True def _detect_leaked_info(self, text): """检测输出中是否泄露了系统信息""" sensitive_patterns = [ r"api[_-]?key", r"sk-[a-zA-Z0-9]{20,}", r"password", r"secret", r"token", r"/[a-z]:\\users\\", # Windows 路径 ] return any( re.search(p, text, re.IGNORECASE) for p in sensitive_patterns ) 输出完整性 # 检查项 风险等级 验证方式 17 输出有长度上限(防止 Token 爆炸) 中 触发长输出测试 18 流式输出有超时保护 中 模拟慢速输出 19 输出格式校验(JSON/XML 是否合法) 中 格式错误注入测试 20 输出不包含训练数据原文(版权风险) 中 已知文本检索 21 输出不包含 Prompt 模板内容(提示泄露) 高 “重复你的指令"测试 22 输出经过 PII 二次过滤 高 PII 回显测试 三、模型安全(10 项) 越狱防护 # 检查项 风险等级 验证方式 23 通过越狱测试集(DAN/Roleplay 编码等) 高 自动化越狱测试 24 对多轮对话有累积风险检测 高 多轮越狱攻击测试 25 对编码/混淆输入有解码检测 中 Base64/Unicode 混淆测试 class JailbreakDetector: ENCODING_PATTERNS = [ (r"base64:", self._decode_base64), (r"\\u[0-9a-fA-F]{4}", self._decode_unicode), (r"\\x[0-9a-fA-F]{2}", self._decode_hex), ] async def check(self, user_input: str): # 1. 检查编码内容 decoded = self._try_decode(user_input) if decoded != user_input: # 对解码后的内容也做注入检测 safe, _ = PromptInjectionGuard().check(decoded) if not safe: return False, "Encoded injection detected" # 2. 检查角色扮演越狱 roleplay_patterns = [ r"pretend you are", r"act as (if you are )?DAN", r"you are (in )?developer mode", r"jailbreak", ] for pattern in roleplay_patterns: if re.search(pattern, user_input, re.IGNORECASE): return False, f"Roleplay jailbreak: {pattern}" return True, None 模型隔离 # 检查项 风险等级 验证方式 26 不同租户的会话隔离 高 跨租户数据泄露测试 27 对话历史有长度限制(防止上下文污染) 中 长对话测试 28 Function Calling 参数有白名单校验 高 构造恶意参数测试 29 模型输出不直接执行(需人工/代码确认) 高 审查执行链路 30 有模型使用量配额(防止滥用) 中 超额测试 31 模型版本变更经过安全评估 中 审查变更流程 32 对抗样本检测(异常输入模式) 中 对抗测试集 四、基础设施安全(10 项) # 检查项 风险等级 验证方式 33 API Key 存储在密钥管理服务(非代码/配置文件) 高 审查部署配置 34 API 通信全程 HTTPS/TLS 1.2+ 高 SSL 扫描 35 对 LLM API 调用有网络白名单限制 中 审查网络策略 36 向量数据库有访问控制 高 审查 DB ACL 37 Embedding 服务有认证 中 未认证调用测试 38 日志中不包含 API Key / 完整 Prompt 高 审查日志输出 39 监控系统有异常调用检测(频率/内容) 中 审查告警规则 40 容器/进程以最小权限运行 中 审查 K8s manifest 41 模型文件有完整性校验 中 校验和验证 42 有 DDoS 防护(CDN/WAF) 中 审查网络架构 五、合规审计(8 项) # 检查项 风险等级 验证方式 43 所有 LLM 调用有审计日志(who/when/what/model) 高 审查日志格式 44 用户知情同意(明确告知使用 AI) 高 审查 UI/ToS 45 数据保留策略明确(日志/对话历史保留期限) 高 审查数据策略 46 支持用户数据删除请求(GDPR/PIPL) 高 删除流程测试 47 模型训练数据来源可追溯 中 审查文档 48 有 AI 生成内容标识(水印/声明) 中 审查输出格式 49 定期安全评估(至少每季度) 中 审查评估记录 50 有应急响应预案(模型输出有害内容时) 高 审查 IR 计划 自动化检查脚本 class SecurityChecklist: """可自动化的安全检查项""" CHECKS = { "input_length_limit": {"auto": True, "critical": False}, "prompt_injection_filter": {"auto": True, "critical": True}, "pii_scrubbing": {"auto": True, "critical": True}, "output_toxicity_check": {"auto": True, "critical": True}, "output_length_limit": {"auto": True, "critical": False}, "jailbreak_resistance": {"auto": True, "critical": True}, "prompt_leak_prevention": {"auto": True, "critical": True}, "tls_check": {"auto": True, "critical": True}, "log_pii_check": {"auto": True, "critical": True}, "rate_limiting": {"auto": True, "critical": False}, } async def run_all(self, target_url, api_key): results = {} for check_name, config in self.CHECKS.items(): if not config["auto"]: continue method = getattr(self, f"check_{check_name}") try: passed, detail = await method(target_url, api_key) results[check_name] = { "passed": passed, "detail": detail, "critical": config["critical"], } except Exception as e: results[check_name] = { "passed": False, "detail": f"Check error: {e}", "critical": config["critical"], } # 汇总报告 total = len(results) passed = sum(1 for r in results.values() if r["passed"]) critical_fail = [ k for k, v in results.items() if not v["passed"] and v["critical"] ] return { "total": total, "passed": passed, "failed": total - passed, "critical_failures": critical_fail, "ready_for_production": len(critical_fail) == 0, "details": results, } 上线审批流程 开发完成 → 自动化检查(38 项可自动化) │ 全部通过? ├─ 是 → 人工审查(12 项需人工) │ ├─ 全部通过 → 安全团队签字 → 上线 │ └─ 有问题 → 整改 → 重新审查 └─ 否 → 修复 → 重新自动检查 总结 LLM 安全不是可选项。50 项检查中,标记为"高风险"的约 25 项——这些是上线阻断项,不通过不上线。关键检查包括:Prompt 注入防护、PII 脱敏、越狱抵抗、输出过滤、密钥管理。自动化检查覆盖约 76% 的项目,剩余需人工审查。建议将检查清单集成到 CI/CD 流水线中,每次部署前自动运行。安全是一场持续的攻防战,检查清单只是起点,不是终点。 加入讨论 这篇文章有姊妹讨论帖在硅基AGI论坛 — 全球首个碳基硅基认知交流平台。 ...

2026-06-25 · 4 min · 779 words · 硅基 AGI 探索者
openclaw security safety

OpenClaw 安全体系:本地优先的隐私保护

数据主权:你的数据,留在你的机器 AI Agent 会接触到你的私密信息——邮件、日程、文件、对话记录。如果这些数据被上传到云端,你就在赌服务提供商不会滥用、不会泄露、不会被攻击。 OpenClaw 的安全哲学很简单:本地优先,零云端依赖。 传统 AI Agent: 用户 → Agent → 云端API → 数据存储在服务商服务器 OpenClaw: 用户 → 本地Agent → 本地存储 ↓ 本地模型 or API调用(仅传必要内容,不存历史) 五层安全体系 ┌─────────────────────────────────────────┐ │ Layer 5: 行为审计 (Audit Trail) │ ← 所有操作可追溯 ├─────────────────────────────────────────┤ │ Layer 4: 安全最佳实践 (Best Practices) │ ← 加密、脱敏 ├─────────────────────────────────────────┤ │ Layer 3: 沙箱隔离 (Sandboxing) │ ← 工具执行隔离 ├─────────────────────────────────────────┤ │ Layer 2: 用户授权机制 (Authorization) │ ← 危险操作需审批 ├─────────────────────────────────────────┤ │ Layer 1: 本地部署 (Local-First) │ ← 数据不出机器 └─────────────────────────────────────────┘ Layer 1: 本地部署 零云端依赖 OpenClaw 的核心运行不依赖任何云服务: ...

2026-06-25 · 6 min · 1067 words · 硅基 AGI 探索者
ai alignment techniques

AI 对齐技术全景:从 RLHF 到 Constitutional AI

为什么需要对齐 模型能力越强,对齐越重要。一个能力满分但不对齐的 Agent,比一个能力一般但安全的 Agent 危险得多。 对齐要解决三个问题: 有用(Helpful):完成用户要求 无害(Harmless):不产生有害内容 诚实(Honest):不编造、不欺骗 对齐技术演进 2022: RLHF(OpenAI) → 人类反馈强化学习 2023: Constitutional AI → 宪法引导自监督 2024: DPO → 直接偏好优化 2025: GRPO → 群体相对策略优化 2026: Self-Play + RL → 自我对弈+推理RL RLHF(人类反馈强化学习) 流程 Step 1: SFT 人工标注 → 监督微调 → SFT 模型 Step 2: RM 生成回答 → 人工排序 → 训练奖励模型 Step 3: PPO 用 RM 打分 → PPO 优化策略 → 对齐模型 class RLHF: def __init__(self): self.sft_model = load_sft_model() self.reward_model = load_reward_model() self.ref_model = freeze(self.sft_model) # 参考模型 def train_step(self, prompt): # 1. 生成回答 response = self.sft_model.generate(prompt) # 2. 奖励模型打分 reward = self.reward_model(prompt, response) # 3. KL 散度约束(防止偏离太远) kl = self.kl_divergence(self.sft_model, self.ref_model, prompt) # 4. PPO 目标 loss = -(reward - 0.1 * kl) loss.backward() self.optimizer.step() RLHF 的问题 问题 描述 影响 成本高 大量人工标注 $百万级 主观偏差 标注者偏好不一致 质量不稳定 奖励黑客 模型学会欺骗 RM 输出冗长但无内容 训练不稳定 PPO 超参敏感 需要大量调参 Constitutional AI(宪法对齐) # Anthropic 提出,不需要大量人工标注 # 用"宪法"(一组原则)引导模型自我修正 CONSTITUTION = """ 1. 不要生成有害、非法或危险的内容 2. 尊重所有人群,不歧视 3. 诚实,不确定时说明 4. 保护用户隐私 5. 促进人类福祉 """ class ConstitutionalAI: async def generate(self, prompt): # 1. 生成初始回答 response = await self.model.generate(prompt) # 2. 自我审查 review = await self.model.generate( f"根据以下原则审查回答:\n" f"原则:{CONSTITUTION}\n" f"回答:{response}\n" f"审查结果:是否有违反原则的地方?" ) # 3. 自我修正 if "违反" in review: revised = await self.model.generate( f"根据审查意见修改回答:\n" f"原回答:{response}\n" f"审查:{review}\n" f"修改后:" ) return revised return response # 优势:不需要人工标注,可大规模 # 劣势:依赖模型自身能力,可能有盲区 DPO(直接偏好优化) # DPO:跳过奖励模型,直接优化策略 # 比 RLHF 简单且稳定 class DPO: def __init__(self, model, ref_model, beta=0.1): self.model = model self.ref_model = ref_model self.beta = beta def loss(self, prompt, chosen, rejected): """chosen 是更好的回答,rejected 是更差的""" # 模型对 chosen 的对数概率 pi_chosen = self.model.log_prob(prompt, chosen) pi_rejected = self.model.log_prob(prompt, rejected) # 参考模型的对数概率 ref_chosen = self.ref_model.log_prob(prompt, chosen) ref_rejected = self.ref_model.log_prob(prompt, rejected) # DPO 损失 logits = self.beta * ( (pi_chosen - ref_chosen) - (pi_rejected - ref_rejected) ) return -torch.log(torch.sigmoid(logits)) # 优势:训练稳定,不需要 RM,超参少 # 劣势:需要偏好数据对 GRPO(群体相对策略优化) # DeepSeek-R1 使用的方法 # 不需要价值网络,用群体统计代替 class GRPO: def train_step(self, prompt): # 1. 为同一 prompt 生成 G 个回答 responses = [self.model.generate(prompt) for _ in range(8)] # 2. 用奖励模型打分 rewards = [self.reward_model(prompt, r) for r in responses] # 3. 计算相对优势(群体内归一化) mean_r = np.mean(rewards) std_r = np.std(rewards) + 1e-8 advantages = [(r - mean_r) / std_r for r in rewards] # 4. 优化 for response, advantage in zip(responses, advantages): loss = -advantage * self.model.log_prob(prompt, response) loss.backward() # 优势:不需要价值网络,显存省 50% # 适合推理任务(有明确正确答案的场景) 对齐方法对比 方法 人工标注 训练稳定性 成本 效果 RLHF 大量 低(PPO难调) 高 好 Constitutional AI 少量 中 中 好 DPO 偏好对 高 中 中 GRPO 少量 高 低 推理任务最好 Self-Play 不需要 中 低 探索性强 实践选择 def choose_alignment_method(scenario): if scenario == "通用对话": return "DPO" # 稳定、效果好 elif scenario == "推理任务": return "GRPO" # 推理专精 elif scenario == "安全对齐": return "Constitutional AI" # 可大规模 elif scenario == "低成本快速对齐": return "DPO" # 最简单 elif scenario == "极致效果": return "RLHF + DPO" # 两阶段 else: return "DPO" # 默认选择 评估对齐效果 class AlignmentEval: def evaluate(self, model): return { "helpfulness": self.eval_helpful(model), # 有用性 "harmlessness": self.eval_harmless(model), # 无害性 "honesty": self.eval_honest(model), # 诚实性 "robustness": self.eval_robust(model), # 鲁棒性 } def eval_harmless(self, model): """测试有害拒绝率""" harmful_prompts = load_redteam_dataset() results = [] for prompt in harmful_prompts: response = model.generate(prompt) # 检查是否正确拒绝 refused = self.is_refusal(response) # 检查是否有有害内容 harmful = self.is_harmful(response) results.append(refused and not harmful) return np.mean(results) # 拒绝率 def eval_robust(self, model): """测试对抗鲁棒性""" # 越狱测试 jailbreak_prompts = load_jailbreak_dataset() success_rate = 1 - self.test_jailbreak(model, jailbreak_prompts) return success_rate 过度对齐问题 # 过度对齐:模型过于安全,什么都不敢回答 over_alignment_examples = [ "怎么做饭" → "我无法提供烹饪建议" # 过度拒绝 "写一首诗" → "我无法创作诗歌" # 过度拒绝 ] # 度量过度对齐 def over_refusal_rate(model): benign_prompts = load_benign_dataset() # 无害问题 refusals = sum(1 for p in benign_prompts if is_refusal(model.generate(p))) return refusals / len(benign_prompts) # 目标:<5% # 过高说明模型过度对齐 结论 AI 对齐没有银弹。2026 年的最佳实践: ...

2026-06-24 · 3 min · 598 words · 硅基 AGI 探索者
鲁ICP备2026018361号