AEGIS框架:基于感知增强的智能内容安全审核系统设计与实现
如果你正在开发AI应用特别是涉及内容安全审核的场景可能遇到过这样的困境传统的安全过滤机制要么过于严格误杀大量正常内容要么过于宽松让潜在风险内容漏网。更棘手的是在迭代优化过程中安全性与可用性的平衡往往难以把握。这正是AEGIS: Awareness-Enhanced Guidance for Iterative Safeguard要解决的核心问题。这个框架不是简单的安全开关而是一个具备感知能力的动态防护系统。它通过持续学习和反馈机制让安全防护变得更加智能和精准。本文将带你深入理解AEGIS框架的设计理念、核心组件并通过实际示例展示如何在自己的项目中应用这一方案。1. AEGIS解决的真实痛点为什么传统安全机制不够用在AI应用开发中内容安全通常被简化为关键词过滤或分类模型。但这种做法存在明显缺陷传统方案的三大短板静态规则难以应对动态风险预设的关键词列表无法识别新型攻击或变体表达一刀切策略损害用户体验过度过滤可能导致正常对话被中断缺乏上下文感知能力同一句话在不同语境下可能有完全不同的含义AEGIS的创新之处在于引入了感知增强Awareness-Enhanced的概念。它不仅仅是检测违规内容更重要的是理解内容的上下文意图并根据风险等级提供差异化的防护策略。2. AEGIS框架的核心架构与工作原理AEGIS框架由三个核心模块组成感知模块、指导模块和迭代模块。这三个模块协同工作形成一个完整的防护闭环。2.1 感知模块Awareness Module感知模块负责内容的多维度分析包括语义理解通过预训练模型分析文本的真实意图上下文关联结合对话历史判断当前内容的风险等级风险评分输出0-1之间的风险概率值# 感知模块的核心接口示例 class AwarenessModule: def __init__(self, model_path): self.model load_pretrained_model(model_path) self.context_window 5 # 保留最近5轮对话作为上下文 def analyze_content(self, current_text, conversation_history): # 构建上下文感知的输入 context_aware_input self._build_context_input( current_text, conversation_history ) # 多维度风险分析 risk_scores { toxicity: self.model.predict_toxicity(context_aware_input), safety: self.model.predict_safety(context_aware_input), context_appropriateness: self.model.predict_context_match(context_aware_input) } return risk_scores def _build_context_input(self, current_text, history): # 基于对话历史构建上下文感知的输入 recent_history history[-self.context_window:] if history else [] return { current: current_text, context: recent_history, timestamp: datetime.now() }2.2 指导模块Guidance Module指导模块根据感知结果生成相应的防护策略class GuidanceModule: def __init__(self, policy_config): self.policy_levels policy_config.get(levels, {}) self.intervention_strategies policy_config.get(strategies, {}) def generate_guidance(self, risk_scores, user_profile): # 计算综合风险等级 overall_risk self._calculate_overall_risk(risk_scores) # 根据风险等级选择干预策略 intervention self._select_intervention_strategy( overall_risk, user_profile ) return { risk_level: overall_risk, intervention_type: intervention[type], suggested_action: intervention[action], confidence_score: intervention[confidence] } def _calculate_overall_risk(self, risk_scores): # 加权计算综合风险分数 weights {toxicity: 0.4, safety: 0.4, context_appropriateness: 0.2} weighted_sum sum(risk_scores[key] * weights[key] for key in risk_scores) return min(1.0, weighted_sum) # 确保不超过1.02.3 迭代模块Iterative Module迭代模块负责从用户反馈中学习持续优化防护策略class IterativeModule: def __init__(self, learning_rate0.1): self.learning_rate learning_rate self.feedback_history [] def update_policy(self, feedback_data, current_policy): 基于用户反馈更新防护策略 # 分析反馈模式 feedback_patterns self._analyze_feedback_patterns(feedback_data) # 调整策略参数 updated_policy self._adjust_policy_parameters( current_policy, feedback_patterns ) # 记录学习过程 self._log_learning_update(feedback_data, updated_policy) return updated_policy def _analyze_feedback_patterns(self, feedback_data): # 分析误报和漏报模式 patterns { false_positives: [], false_negatives: [], user_preferences: [] } for feedback in feedback_data: if feedback[type] false_positive: patterns[false_positives].append(feedback) elif feedback[type] false_negative: patterns[false_negatives].append(feedback) else: patterns[user_preferences].append(feedback) return patterns3. 环境准备与依赖配置在开始使用AEGIS框架前需要准备相应的运行环境。3.1 系统要求Python 3.8至少8GB内存用于运行预训练模型支持CUDA的GPU可选用于加速推理3.2 依赖安装创建requirements.txt文件torch1.9.0 transformers4.20.0 numpy1.21.0 pandas1.3.0 scikit-learn1.0.0 fastapi0.68.0 # 用于构建API服务 uvicorn0.15.0 # ASGI服务器安装命令pip install -r requirements.txt3.3 模型下载与配置AEGIS支持多种预训练模型推荐使用以下配置# config/model_config.yaml model_config: base_model: microsoft/deberta-v3-base safety_model: unitary/unbiased-toxic-roberta context_model: bert-base-uncased model_params: max_length: 512 batch_size: 32 device: cuda # 或 cpu4. 完整示例构建一个智能内容审核系统下面通过一个完整的示例展示如何使用AEGIS框架构建实际的内容审核系统。4.1 系统架构设计首先定义整体的系统架构# aegis_system.py import yaml from datetime import datetime from typing import Dict, List, Optional class AegisContentModerationSystem: def __init__(self, config_path: str): self.config self._load_config(config_path) self.awareness_module AwarenessModule(self.config[model_path]) self.guidance_module GuidanceModule(self.config[policy]) self.iterative_module IterativeModule( learning_rateself.config[learning_rate] ) self.conversation_storage ConversationStorage() def process_message(self, message: str, user_id: str, context: Dict) - Dict: 处理单条消息的完整流程 # 1. 获取对话历史 conversation_history self.conversation_storage.get_recent_conversation( user_id, window_size5 ) # 2. 感知分析 risk_scores self.awareness_module.analyze_content( message, conversation_history ) # 3. 生成指导策略 user_profile self.conversation_storage.get_user_profile(user_id) guidance self.guidance_module.generate_guidance(risk_scores, user_profile) # 4. 执行相应动作 result self._execute_guidance(message, guidance, user_id) # 5. 记录处理结果 self._log_processing_result(message, risk_scores, guidance, result, user_id) return result def _execute_guidance(self, message: str, guidance: Dict, user_id: str) - Dict: 根据指导策略执行相应动作 action_type guidance[intervention_type] if action_type allow: return {action: allow, message: message, reason: low_risk} elif action_type warn: warning_msg self._generate_warning_message(guidance) return { action: warn, message: message, warning: warning_msg, requires_acknowledgment: True } elif action_type block: block_reason guidance[suggested_action][reason] return { action: block, message: [内容已被过滤], reason: block_reason, original_message: message # 用于审核复查 } else: # 默认安全策略 return {action: review, message: message, reason: needs_human_review}4.2 API服务实现使用FastAPI构建RESTful API服务# api/main.py from fastapi import FastAPI, HTTPException from pydantic import BaseModel from aegis_system import AegisContentModerationSystem app FastAPI(titleAEGIS Content Moderation API) # 初始化系统 aegis_system AegisContentModerationSystem(config/system_config.yaml) class ModerationRequest(BaseModel): message: str user_id: str context: Optional[Dict] None class ModerationResponse(BaseModel): action: str processed_message: str risk_level: float details: Dict app.post(/moderate, response_modelModerationResponse) async def moderate_content(request: ModerationRequest): 内容审核接口 try: result aegis_system.process_message( request.message, request.user_id, request.context or {} ) return ModerationResponse( actionresult[action], processed_messageresult.get(message, ), risk_levelresult.get(risk_level, 0.0), detailsresult ) except Exception as e: raise HTTPException(status_code500, detailfProcessing error: {str(e)}) app.post(/feedback) async def submit_feedback(feedback_data: Dict): 提交用户反馈用于系统迭代优化 try: aegis_system.iterative_module.update_policy( feedback_data, aegis_system.guidance_module.policy ) return {status: success, message: Feedback processed} except Exception as e: raise HTTPException(status_code500, detailfFeedback error: {str(e)})4.3 配置文件示例创建系统配置文件# config/system_config.yaml system: name: AEGIS Content Moderation version: 1.0.0 environment: production model_config: base_model_path: ./models/deberta-v3-base safety_model_path: ./models/toxic-roberta context_model_path: ./models/bert-base-uncased policy: levels: low: 0.0-0.3 medium: 0.3-0.7 high: 0.7-1.0 strategies: low: type: allow action: {type: no_action} medium: type: warn action: {type: add_warning, template: 请注意用语规范} high: type: block action: {type: filter_content, reason: 内容不符合安全规范} learning: rate: 0.1 batch_size: 100 update_frequency: daily storage: conversation_retention_days: 30 user_profile_retention_days: 905. 部署与运行验证5.1 启动API服务使用uvicorn启动服务uvicorn api.main:app --host 0.0.0.0 --port 8000 --reload5.2 测试接口功能使用curl测试审核接口# 测试低风险内容 curl -X POST http://localhost:8000/moderate \ -H Content-Type: application/json \ -d { message: 今天天气真好适合出去散步, user_id: user123, context: {conversation_type: casual_chat} } # 测试高风险内容 curl -X POST http://localhost:8000/moderate \ -H Content-Type: application/json \ -d { message: 一些不当的敏感内容, user_id: user456, context: {conversation_type: casual_chat} }5.3 验证响应格式正常响应应该包含以下字段{ action: allow|warn|block, processed_message: 处理后的消息内容, risk_level: 0.25, details: { intervention_type: allow, suggested_action: {...}, confidence_score: 0.95 } }6. 性能优化与监控6.1 缓存策略优化为提升性能可以实现多级缓存# utils/cache_manager.py import redis from functools import lru_cache from typing import Any class CacheManager: def __init__(self, redis_url: str): self.redis_client redis.from_url(redis_url) self.local_cache {} lru_cache(maxsize1000) def get_cached_analysis(self, text_hash: str) - Optional[Dict]: 本地内存缓存 if text_hash in self.local_cache: return self.local_cache[text_hash] # 检查Redis缓存 redis_result self.redis_client.get(fanalysis:{text_hash}) if redis_result: result json.loads(redis_result) self.local_cache[text_hash] result return result return None def set_cached_analysis(self, text_hash: str, analysis_result: Dict, ttl: int 3600): 设置多级缓存 self.local_cache[text_hash] analysis_result self.redis_client.setex( fanalysis:{text_hash}, ttl, json.dumps(analysis_result) )6.2 监控指标收集实现关键指标监控# monitoring/metrics_collector.py from prometheus_client import Counter, Histogram, Gauge import time class MetricsCollector: def __init__(self): self.requests_total Counter(aegis_requests_total, Total requests) self.request_duration Histogram(aegis_request_duration_seconds, Request duration) self.risk_score_distribution Histogram(aegis_risk_scores, Risk score distribution) self.active_users Gauge(aegis_active_users, Active users count) def track_request(self, user_id: str): 跟踪请求指标 self.requests_total.inc() self.active_users.set(self._get_active_users_count()) return self.request_duration.time() def track_risk_score(self, score: float): 记录风险分数分布 self.risk_score_distribution.observe(score)7. 常见问题与排查指南在实际部署过程中可能会遇到以下典型问题7.1 性能问题排查问题现象可能原因排查方法解决方案响应时间过长模型加载慢/内存不足检查系统资源使用情况启用模型缓存增加内存CPU使用率100%批量处理并发过高监控请求队列长度限制并发数增加批处理大小内存泄漏缓存未清理/对象引用使用内存分析工具定期清理缓存优化数据结构7.2 准确性问题排查# utils/diagnostic_tool.py class DiagnosticTool: def analyze_false_positives(self, false_positive_cases: List[Dict]): 分析误报案例模式 common_patterns {} for case in false_positive_cases: # 分析文本特征 text_features self._extract_text_features(case[text]) # 分析上下文模式 context_patterns self._analyze_context_patterns(case[context]) # 合并模式分析结果 pattern_key self._generate_pattern_key(text_features, context_patterns) common_patterns[pattern_key] common_patterns.get(pattern_key, 0) 1 return sorted(common_patterns.items(), keylambda x: x[1], reverseTrue) def suggest_policy_adjustment(self, analysis_results): 基于分析结果给出策略调整建议 adjustments [] for pattern, count in analysis_results: if count 10: # 频繁出现的误报模式 adjustment { pattern: pattern, suggestion: 降低相关特征的权重, confidence: min(0.9, count / 100) } adjustments.append(adjustment) return adjustments7.3 配置问题排查常见的配置错误包括模型路径配置错误内存参数设置不合理缓存TTL设置过长导致内存溢出策略阈值设置过于敏感或宽松建议的检查清单# 检查配置文件语法 python -c import yaml; yaml.safe_load(open(config/system_config.yaml)) # 检查模型文件完整性 find ./models -name *.bin | wc -l # 检查依赖版本兼容性 pip check8. 最佳实践与生产环境建议8.1 安全部署实践权限控制# k8s/security-config.yaml apiVersion: v1 kind: Pod spec: securityContext: runAsNonRoot: true runAsUser: 1000 allowPrivilegeEscalation: false containers: - name: aegis-api securityContext: readOnlyRootFilesystem: true capabilities: drop: - ALL网络隔离# k8s/network-policy.yaml apiVersion: networking.k8s.io/v1 kind: NetworkPolicy spec: podSelector: matchLabels: app: aegis-moderation policyTypes: - Ingress - Egress ingress: - from: - namespaceSelector: matchLabels: name: internal-services8.2 性能优化建议模型推理优化使用ONNX Runtime加速推理实现动态批处理启用量化推理缓存策略实现请求去重缓存设置合理的TTL策略使用分层缓存架构资源管理设置合理的并发限制监控内存使用情况实现优雅降级策略8.3 监控与告警配置建议监控的关键指标请求成功率99.9%平均响应时间200ms错误率0.1%内存使用率80%告警规则示例# monitoring/alerts.yaml groups: - name: aegis-alerts rules: - alert: HighErrorRate expr: rate(aegis_errors_total[5m]) 0.05 for: 2m labels: severity: critical annotations: summary: AEGIS错误率过高 - alert: HighResponseTime expr: histogram_quantile(0.95, rate(aegis_request_duration_seconds_bucket[5m])) 0.5 for: 5m labels: severity: warning9. 迭代优化与持续改进AEGIS框架的核心价值在于其迭代优化能力。建议建立以下改进流程9.1 数据反馈闭环建立用户反馈收集机制# feedback/collection_pipeline.py class FeedbackPipeline: def __init__(self): self.feedback_queue Queue() self.processed_feedback [] def collect_feedback(self, user_feedback: Dict): 收集用户反馈 # 验证反馈数据完整性 if self._validate_feedback(user_feedback): self.feedback_queue.put(user_feedback) return True return False def process_feedback_batch(self): 批量处理反馈数据 batch_size 100 feedback_batch [] while len(feedback_batch) batch_size and not self.feedback_queue.empty(): feedback_batch.append(self.feedback_queue.get()) if feedback_batch: analysis_results self.analyze_feedback_batch(feedback_batch) self.update_system_policy(analysis_results) # 记录处理结果 self._log_processing_result(feedback_batch, analysis_results)9.2 A/B测试框架实现策略对比测试# experimentation/ab_testing.py class ABTestingFramework: def __init__(self): self.experiments {} self.results_collector ResultsCollector() def create_experiment(self, experiment_id: str, variants: List[Dict]): 创建A/B测试实验 experiment { id: experiment_id, variants: variants, traffic_allocation: {v[id]: 1.0/len(variants) for v in variants}, metrics: [accuracy, precision, recall, user_satisfaction] } self.experiments[experiment_id] experiment def assign_variant(self, experiment_id: str, user_id: str) - str: 为用户分配实验变体 experiment self.experiments[experiment_id] rand_val hash(user_id) % 100 / 100.0 cumulative_prob 0 for variant_id, prob in experiment[traffic_allocation].items(): cumulative_prob prob if rand_val cumulative_prob: return variant_id return list(experiment[traffic_allocation].keys())[0]通过建立完整的数据反馈闭环和实验框架可以确保AEGIS系统能够持续优化适应不断变化的内容安全需求。AEGIS框架的价值不仅在于其技术实现更在于它提供了一种智能内容安全管理的思维方式。在实际项目中建议从小的使用场景开始逐步验证效果再扩展到更复杂的应用场景。

相关新闻

HoRain云--JavaScript 调试

HoRain云--JavaScript 调试

🎬 HoRain 云小助手:个人主页 ⛺️生活的理想,就是为了理想的生活! ⛳️ 推荐 前些天发现了一个超棒的服务器购买网站,性价比超高,大内存超划算!忍不住分享一下给大家。点击跳转到网站。 目录 ⛳️ 推荐 …

2026/10/15 7:28:42 阅读更多 →
智能体构建核心技术解析与应用实践

智能体构建核心技术解析与应用实践

1. 智能体构建概述智能体(Agent)作为人工智能领域的重要概念,正在从学术研究快速走向产业应用。一个典型的智能体系统通常由感知模块、决策模块和执行模块组成,能够自主感知环境、分析信息并采取行动实现特定目标。不同于传统程序…

2026/10/14 0:59:29 阅读更多 →
致青椒:你课题组最大的隐性成本,不是试剂耗材,而是学生毕业带走的数据

致青椒:你课题组最大的隐性成本,不是试剂耗材,而是学生毕业带走的数据

深耕研究生教学与课题组管理十余年,我发现了一个被绝大多数青年PI忽略的科研真相:实验室最昂贵的损耗,从来不是仪器老化折旧、试剂过期浪费,而是每一届毕业生带走的科研数据资产。一名硕博生在校数年,会积累数百GB的原…

2026/10/15 17:00:53 阅读更多 →

最新新闻

KES时序数据库_千亿级数据压缩与高速写入实战

KES时序数据库_千亿级数据压缩与高速写入实战

工业互联网、能源数字化、智能制造的浪潮之下,设备监测、电力采集、生产过程指标等时序数据的体量正在以肉眼可见的速度膨胀。对于需要长年累月运转的业务系统来说,时序数据库的考题早已不只是"写得进、查得出",更在于海量的历史数…

2026/10/16 3:16:02 阅读更多 →
《计算机是如何工作的:人人都能懂的计算机软硬件工作原理》第 13 章 现代计算机 阅读笔记 16

《计算机是如何工作的:人人都能懂的计算机软硬件工作原理》第 13 章 现代计算机 阅读笔记 16

《计算机是如何工作的:人人都能懂的计算机软硬件工作原理》第 13 章 现代计算机 阅读笔记 16 第 13 章 现代计算机 本章将对现代计算机的几个精选领域进行概要介绍。考虑到计算机的多样性和广泛性,可选择的主题有很多。 我所选择的领域并不是当今计算机…

2026/10/16 3:16:02 阅读更多 →
原生JavaScript实现九宫格抽奖功能

原生JavaScript实现九宫格抽奖功能

1. 项目概述:为什么一个九宫格抽奖功能值得花时间深挖“原生js 实现九宫格抽奖功能”——这行标题看似简单,甚至有点“老派”,但在我过去十年带过的二十多个前端项目里,它恰恰是高频复用、低容错、高感知的典型模块。不是那种写完…

2026/10/16 3:16:02 阅读更多 →
Unity与Ionic混合集成指南:消息链路与Vuforia AR实践

Unity与Ionic混合集成指南:消息链路与Vuforia AR实践

简介:面向Unity与Ionic混合开发者的集成指南,聚焦如何将Unity 3D内容嵌入Ionic应用,并实现双向消息通信,覆盖Android与iOS平台,且已通过Vuforia插件实测验证。资源适用于需要AR能力、Cordova插件扩展或原生桥接的中级开…

2026/10/16 3:16:02 阅读更多 →
instagram-private-api 媒体点赞者响应解析:MediaRepositoryLikersResponseRootObject 接口全解

instagram-private-api 媒体点赞者响应解析:MediaRepositoryLikersResponseRootObject 接口全解

后端 【免费下载链接】instagram-private-api NodeJS Instagram private API SDK. Written in TypeScript. 项目地址: https://gitcode.com/gh_mirrors/in/instagram-private-api 点击查看 免费下载 导读 本文围绕 instagram-private-api(NodeJS Insta…

2026/10/16 3:16:02 阅读更多 →
ECharts 世界地图不显示?GeoJSON 注册与调优指南

ECharts 世界地图不显示?GeoJSON 注册与调优指南

简介:面向需要在地理数据可视化中集成世界地图的前端开发者,这份ECharts世界地图JS资源提供了可直接引用的地图组件与配套脚本。无论是数据大屏、全球业务分析还是地理信息展示,都能借助它快速生成可交互的矢量地图。资源包含ECharts核心库、…

2026/10/16 3:15:02 阅读更多 →

日新闻

个人 AI Agent 平台接入 TaoToken:统一 Key 与 API 通道的配置大纲

个人 AI Agent 平台接入 TaoToken:统一 Key 与 API 通道的配置大纲

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 0:00:05 阅读更多 →
信号与系统频域分析作业解题指南

信号与系统频域分析作业解题指南

1. 作业背景与核心要求解析信号与系统作为电子信息类专业的核心基础课,其作业设计往往直接关联课程的核心知识框架。2026年春季第六次作业的布置,通常对应着课程进展到频域分析的关键阶段。根据常规教学进度推测,本次作业可能涉及以下核心内容…

2026/10/16 0:00:05 阅读更多 →
Django MVT实战:从零构建图书借阅系统,彻底搞懂Model-View-Template分层

Django MVT实战:从零构建图书借阅系统,彻底搞懂Model-View-Template分层

1. 从一个"四不像"的练手项目说起如果你已经看完了Django的官方教程前几章,跟着敲完了投票应用,大概会有一种"我好像会了,又好像什么都不会"的割裂感。教程里每个知识点都是拆开的——这一章讲模型,下一章讲视…

2026/10/16 0:00:05 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/15 16:18:54 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/15 19:41:51 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/15 13:48:15 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 0:14:36 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 22:45:47 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 9:49:14 阅读更多 →