Substack AI内容检测技术解析:从原理到实战部署
最近在内容创作领域AI生成内容的识别问题越来越受到关注。作为知名的邮件订阅平台Substack宣布将推出AI检测功能这对内容创作者和平台生态都有着重要意义。本文将深入解析这一功能的实现原理、技术方案并提供完整的实战代码示例帮助开发者理解AI内容检测的核心机制。1. AI内容检测的背景与意义1.1 当前AI生成内容的现状随着ChatGPT、Claude等大语言模型的普及AI生成内容在互联网上的占比显著提升。根据最新统计某些平台上的AI生成内容已经占到总内容的15%-30%。这种快速增长带来了内容质量、原创性和可信度的挑战。AI生成内容通常具有特定的语言模式特征比如过于规范的句式结构、缺乏个性化的表达方式、以及在某些专业领域表现出表面准确但深度不足的特点。这些特征为AI检测提供了技术基础。1.2 Substack平台的特殊需求Substack作为以邮件订阅为核心的内容平台其商业模式建立在内容质量和创作者信誉的基础上。AI生成内容的泛滥可能破坏读者信任影响优质创作者的积极性。因此引入AI检测功能不仅是技术升级更是维护平台生态健康的重要举措。从技术角度看Substack需要平衡检测准确性和用户体验。过于严格的检测可能误伤原创内容而过于宽松的检测又无法达到预期效果。这种平衡需要精密的算法设计和持续优化。2. AI检测的技术原理2.1 文本特征分析技术AI检测的核心在于识别文本中的统计特征和语言模式。传统方法主要基于以下特征维度class TextFeatureAnalyzer: def __init__(self): self.features {} def analyze_perplexity(self, text): 计算文本困惑度 - AI文本通常具有较低的困惑度 # 实现困惑度计算逻辑 pass def analyze_burstiness(self, text): 分析文本突发性 - 人类写作通常有更多的变化 # 实现突发性分析 pass def analyze_semantic_coherence(self, text): 分析语义连贯性 - AI文本在长文中可能缺乏深度连贯 # 实现语义分析 pass2.2 深度学习检测模型现代AI检测更多采用基于Transformer的深度学习模型通过在大规模人类写作和AI生成文本数据集上训练学习区分两者的细微差异。import torch import torch.nn as nn from transformers import AutoTokenizer, AutoModel class AIDetectionModel(nn.Module): def __init__(self, model_namebert-base-uncased): super().__init__() self.tokenizer AutoTokenizer.from_pretrained(model_name) self.encoder AutoModel.from_pretrained(model_name) self.classifier nn.Sequential( nn.Linear(768, 256), nn.ReLU(), nn.Dropout(0.1), nn.Linear(256, 2) ) def forward(self, texts): inputs self.tokenizer(texts, return_tensorspt, paddingTrue, truncationTrue, max_length512) outputs self.encoder(**inputs) pooled_output outputs.last_hidden_state[:, 0, :] return self.classifier(pooled_output)3. 完整的AI检测系统实现3.1 系统架构设计一个完整的AI检测系统需要包含多个组件从数据预处理到最终决策每个环节都至关重要。class AIDetectionSystem: def __init__(self): self.feature_extractor TextFeatureAnalyzer() self.detection_model AIDetectionModel() self.threshold 0.7 # 检测阈值 def preprocess_text(self, text): 文本预处理 # 清理特殊字符、标准化格式 cleaned_text text.replace(\n, ).strip() return cleaned_text def extract_features(self, text): 提取多维度特征 features {} features[perplexity] self.feature_extractor.analyze_perplexity(text) features[burstiness] self.feature_extractor.analyze_burstiness(text) features[coherence] self.feature_extractor.analyze_semantic_coherence(text) return features def predict(self, text): 综合预测 processed_text self.preprocess_text(text) features self.extract_features(processed_text) model_output self.detection_model([processed_text]) probability torch.softmax(model_output, dim1)[0][1].item() return { is_ai_generated: probability self.threshold, confidence: probability, features: features }3.2 特征工程实现特征工程是AI检测的关键环节需要综合考虑多种语言学特征。import numpy as np from collections import Counter import re class AdvancedFeatureEngineer: def __init__(self): self.common_patterns self.load_ai_patterns() def calculate_lexical_diversity(self, text): 计算词汇多样性 words re.findall(r\w, text.lower()) if len(words) 0: return 0 return len(set(words)) / len(words) def analyze_sentence_structure(self, text): 分析句子结构复杂性 sentences re.split(r[.!?], text) sentences [s.strip() for s in sentences if s.strip()] if not sentences: return 0 avg_length np.mean([len(s.split()) for s in sentences]) length_variance np.var([len(s.split()) for s in sentences]) return { avg_sentence_length: avg_length, sentence_length_variance: length_variance } def detect_ai_patterns(self, text): 检测AI常见写作模式 patterns_detected [] for pattern in self.common_patterns: if re.search(pattern, text, re.IGNORECASE): patterns_detected.append(pattern) return patterns_detected4. 模型训练与优化4.1 数据集准备训练一个有效的AI检测模型需要高质量的数据集包含平衡的人类写作和AI生成文本样本。import pandas as pd from sklearn.model_selection import train_test_split class DatasetManager: def __init__(self, human_texts_path, ai_texts_path): self.human_texts self.load_texts(human_texts_path) self.ai_texts self.load_texts(ai_texts_path) def create_balanced_dataset(self): 创建平衡的训练数据集 min_samples min(len(self.human_texts), len(self.ai_texts)) human_samples self.human_texts[:min_samples] ai_samples self.ai_texts[:min_samples] texts human_samples ai_samples labels [0] * len(human_samples) [1] * len(ai_samples) return train_test_split(texts, labels, test_size0.2, random_state42, stratifylabels) def augment_dataset(self, texts, labels): 数据增强以提高模型鲁棒性 augmented_texts [] augmented_labels [] for text, label in zip(texts, labels): # 添加原始样本 augmented_texts.append(text) augmented_labels.append(label) # 数据增强变体 if label 0: # 人类文本 # 添加轻微修改的版本 augmented_texts.append(self.slightly_modify(text)) augmented_labels.append(label) return augmented_texts, augmented_labels4.2 模型训练流程完整的模型训练流程包括数据加载、特征工程、模型训练和评估。import torch from torch.utils.data import Dataset, DataLoader from transformers import AdamW, get_linear_schedule_with_warmup class AIDetectionTrainer: def __init__(self, model, train_loader, val_loader, device): self.model model.to(device) self.train_loader train_loader self.val_loader val_loader self.device device self.optimizer AdamW(model.parameters(), lr2e-5) self.scheduler get_linear_schedule_with_warmup( self.optimizer, num_warmup_steps0, num_training_stepslen(train_loader) * 10 ) self.criterion nn.CrossEntropyLoss() def train_epoch(self, epoch): self.model.train() total_loss 0 for batch_idx, (texts, labels) in enumerate(self.train_loader): self.optimizer.zero_grad() outputs self.model(texts) loss self.criterion(outputs, labels.to(self.device)) loss.backward() torch.nn.utils.clip_grad_norm_(self.model.parameters(), 1.0) self.optimizer.step() self.scheduler.step() total_loss loss.item() if batch_idx % 100 0: print(fEpoch: {epoch} | Batch: {batch_idx} | Loss: {loss.item():.4f}) return total_loss / len(self.train_loader)5. 部署与性能优化5.1 生产环境部署将AI检测模型部署到生产环境需要考虑性能、可扩展性和可靠性。import flask from flask import request, jsonify import threading import queue class AIDetectionAPI: def __init__(self, model_path, max_workers4): self.app flask.Flask(__name__) self.model self.load_model(model_path) self.request_queue queue.Queue() self.result_dict {} self.setup_routes() # 启动工作线程 for i in range(max_workers): worker threading.Thread(targetself.process_worker) worker.daemon True worker.start() def setup_routes(self): self.app.route(/detect, methods[POST]) def detect_ai(): data request.json text data.get(text, ) request_id self.submit_request(text) return jsonify({request_id: request_id}) self.app.route(/result/request_id, methods[GET]) def get_result(request_id): result self.get_result(request_id) return jsonify(result) def process_worker(self): while True: request_id, text self.request_queue.get() try: result self.model.predict(text) self.result_dict[request_id] result except Exception as e: self.result_dict[request_id] {error: str(e)}5.2 性能优化策略针对高并发场景的性能优化是生产部署的关键。class PerformanceOptimizer: def __init__(self, detection_system): self.system detection_system self.cache {} self.batch_size 32 def batch_predict(self, texts): 批量预测以提高吞吐量 results [] # 分批处理 for i in range(0, len(texts), self.batch_size): batch_texts texts[i:i self.batch_size] batch_results self.system.batch_predict(batch_texts) results.extend(batch_results) return results def optimize_model(self): 模型优化技术 # 模型量化 quantized_model torch.quantization.quantize_dynamic( self.system.detection_model, {nn.Linear}, dtypetorch.qint8 ) # 图模式优化 optimized_model torch.jit.script(quantized_model) return optimized_model def setup_caching(self, text, ttl3600): 设置缓存策略 text_hash hash(text) if text_hash in self.cache: cached_result self.cache[text_hash] if time.time() - cached_result[timestamp] ttl: return cached_result[result] return None6. 准确性与误报处理6.1 评估指标设计建立全面的评估体系来衡量检测系统的性能。from sklearn.metrics import precision_score, recall_score, f1_score, confusion_matrix class EvaluationMetrics: def __init__(self, y_true, y_pred, y_proba): self.y_true y_true self.y_pred y_pred self.y_proba y_proba def calculate_metrics(self): 计算综合评估指标 metrics {} metrics[precision] precision_score(self.y_true, self.y_pred) metrics[recall] recall_score(self.y_true, self.y_pred) metrics[f1_score] f1_score(self.y_true, self.y_pred) metrics[confusion_matrix] confusion_matrix(self.y_true, self.y_pred) # 计算AUC-ROC from sklearn.metrics import roc_auc_score metrics[auc_roc] roc_auc_score(self.y_true, self.y_proba) return metrics def analyze_false_positives(self, texts, y_true, y_pred): 分析误报情况 false_positives [] for i, (text, true_label, pred_label) in enumerate(zip(texts, y_true, y_pred)): if true_label 0 and pred_label 1: # 人类文本被误判为AI false_positives.append({ text: text, true_label: true_label, pred_label: pred_label, index: i }) return false_positives6.2 误报降低策略通过多种技术手段降低误报率提高系统实用性。class FalsePositiveReducer: def __init__(self, detection_system): self.system detection_system self.whitelist_patterns self.load_whitelist_patterns() self.domain_knowledge self.load_domain_knowledge() def apply_whitelist_rules(self, text, initial_prediction): 应用白名单规则 # 检查是否匹配白名单模式 for pattern in self.whitelist_patterns: if re.search(pattern, text, re.IGNORECASE): return {is_ai_generated: False, reason: whitelist_pattern} return initial_prediction def incorporate_domain_knowledge(self, text, features): 结合领域知识进行修正 # 专业领域内容通常有特定特征 if self.is_technical_content(text): # 技术文档可能表现出类似AI的特征需要特殊处理 technical_confidence self.assess_technical_authenticity(text) if technical_confidence 0.8: return {is_ai_generated: False, reason: technical_content} return None def ensemble_correction(self, predictions): 集成多个检测结果进行修正 if len(predictions) 3: return predictions[0] # 投票机制 ai_votes sum(1 for p in predictions if p[is_ai_generated]) human_votes len(predictions) - ai_votes if ai_votes human_votes: final_prediction True else: final_prediction False return { is_ai_generated: final_prediction, confidence: np.mean([p[confidence] for p in predictions]), vote_count: {ai: ai_votes, human: human_votes} }7. 实际应用案例分析7.1 Substack平台集成方案探讨Substack可能采用的AI检测集成方式。class SubstackIntegration: def __init__(self, detection_system): self.detection_system detection_system self.config self.load_integration_config() def process_new_content(self, content_data): 处理新发布的内容 results {} # 文本内容检测 text_result self.detection_system.predict(content_data[text]) results[text_analysis] text_result # 元数据分析 metadata_result self.analyze_metadata(content_data) results[metadata_analysis] metadata_result # 综合评分 overall_score self.calculate_overall_score(results) results[overall_score] overall_score return results def implement_grading_system(self, content_data): 实施分级处理系统 detection_result self.process_new_content(content_data) score detection_result[overall_score] if score 0.3: # 低风险内容正常发布 return {action: publish, reason: low_risk} elif score 0.7: # 中等风险添加标识 return {action: publish_with_label, reason: medium_risk} else: # 高风险人工审核 return {action: manual_review, reason: high_risk}7.2 内容创作者应对策略为内容创作者提供技术建议和最佳实践。class ContentCreatorGuidelines: def __init__(self): self.best_practices self.load_best_practices() def enhance_human_writing(self, text): 增强人类写作特征的方法 enhancements [] # 增加个性化表达 if self.is_too_formal(text): enhancements.append(考虑增加个人经历或独特视角) # 改善句子结构多样性 if self.has_repetitive_patterns(text): enhancements.append(尝试变化句子长度和结构) return enhancements def detect_ai_assistance_level(self, text): 检测AI辅助使用程度 analysis {} # 分析写作模式一致性 consistency_score self.analyze_consistency(text) analysis[consistency] consistency_score # 检测模板化表达 template_patterns self.detect_template_patterns(text) analysis[template_usage] len(template_patterns) return analysis def provide_feedback_mechanism(self, detection_result): 为创作者提供反馈机制 feedback [] if detection_result[is_ai_generated]: confidence detection_result[confidence] if confidence 0.8: feedback.append(内容表现出较强的AI生成特征) feedback.append(建议增加更多原创性思考和个性化表达) else: feedback.append(内容可能包含AI辅助写作痕迹) feedback.append(考虑加强个人风格和独特观点) return feedback8. 技术挑战与未来展望8.1 当前技术局限性AI检测技术仍面临多个重要挑战需要客观认识其局限性。检测准确率在不同类型的文本上表现不均。对于技术文档、学术论文等结构化较强的文本检测准确率通常较高。但对于创意写作、诗歌等文学性较强的文本现有技术容易产生误判。这种局限性源于训练数据的偏差和模型对创造性表达的识别能力不足。另一个重要挑战是对抗性攻击。恶意用户可以通过添加特定噪声、使用文本转换技术或结合多种AI工具来规避检测。这种猫鼠游戏要求检测技术持续进化但完全杜绝规避行为在技术上极为困难。多语言支持也是当前的薄弱环节。大多数AI检测模型主要针对英语优化对其他语言的支持质量参差不齐。这种语言偏见限制了技术的全球应用需要投入大量资源进行多语言模型训练和数据收集。8.2 技术发展趋势未来AI检测技术将向多模态、实时化和自适应方向发展。多模态检测结合文本、图像、音频等多种信息源能够提供更全面的内容分析。例如通过分析写作风格与作者历史作品的一致性或者检测文本与配图的关联性都可以提高检测准确性。实时检测能力将成为平台级应用的关键需求。随着AI生成速度的不断提升批处理式的检测方式难以满足实时交互场景的需求。这就需要优化算法效率开发轻量级模型并利用边缘计算等技术降低延迟。自适应学习机制是另一个重要方向。面对快速进化的AI生成技术静态的检测模型会很快过时。未来的系统需要能够持续学习新的生成模式自动调整检测策略形成动态的防御体系。隐私保护与合规性也将受到更多关注。在实施AI检测时需要平衡检测效果与用户隐私权确保符合各地数据保护法规。这可能推动 federated learning 等隐私保护技术的应用。8.3 行业影响与伦理考量AI检测技术的普及将对内容行业产生深远影响。一方面它有助于维护内容生态的健康保护原创者的权益。另一方面过度依赖检测技术可能导致算法偏见对特定写作风格或小众内容类型造成不公平对待。平台需要在技术实施中建立透明的申诉机制为被误判的内容提供人工复核渠道。同时检测结果的使用应该有限度避免形成对创作者的过度监控。理想的状态是技术作为辅助工具而非绝对裁决者。从伦理角度AI检测技术的开发和应用需要遵循负责任创新的原则。这包括确保技术的公平性、避免歧视性偏差、保持透明度以及为技术决策提供合理解释。行业组织和技术社区正在制定相关准则推动技术的健康发展。技术的进步应该服务于提升内容质量的目标而不是简单地惩罚AI使用。未来可能会出现更多AI辅助写作质量评估工具帮助创作者改进内容而不仅仅是进行二元分类。这种建设性的 approach 更有利于内容生态的长期繁荣。

相关新闻

易语言全栈开发实战:从桌面软件到JS交互与安卓逆向分析

易语言全栈开发实战:从桌面软件到JS交互与安卓逆向分析

1. 项目概述与价值定位如果你对编程感兴趣,尤其是想从零开始,用一门上手快、中文母语友好的语言,做出能解决实际问题的桌面软件、小工具,甚至想了解一些软件安全相关的知识,那么“易语言”这个名字你大概率不会陌生。它…

2026/10/6 4:05:58 阅读更多 →
LLM成本优化:智能最优执行策略实现50%成本节约

LLM成本优化:智能最优执行策略实现50%成本节约

如果你正在使用大语言模型(LLM)进行开发,很可能已经感受到了成本压力:调用 API 的费用像流水一样,尤其是在处理大量对话、长文本分析或复杂推理任务时。更让人头疼的是,不同的模型提供商(如 Ope…

2026/10/6 16:47:21 阅读更多 →
Windows DLL加载失败排查与解决方案

Windows DLL加载失败排查与解决方案

1. 问题现象与本质分析"明明DLL就在眼前,却说找不到"这个经典问题困扰过无数Windows开发者。当你在调试器里看到系统提示"无法定位程序输入点"或"找不到指定的模块"时,第一反应往往是检查DLL文件是否存在于预期路径——而…

2026/10/1 20:24:49 阅读更多 →

最新新闻

零拷贝 + io_uring 打出 1580K IOPS:RustFS 性能超 4 倍是怎么做到的

零拷贝 + io_uring 打出 1580K IOPS:RustFS 性能超 4 倍是怎么做到的

零拷贝 io_uring 打出 1580K IOPS:RustFS 性能超 4 倍是怎么做到的 【免费下载链接】rustfs RustFS is an open-source, S3-compatible high-performance object storage system supporting migration and coexistence with other S3-compatible platforms such as…

2026/10/10 23:31:05 阅读更多 →
在 Turborepo 与 Yarn Berry 中开发 Next.js 应用:with-berry 示例 Web 应用实战指南

在 Turborepo 与 Yarn Berry 中开发 Next.js 应用:with-berry 示例 Web 应用实战指南

构建工具开发工具CLI 【免费下载链接】turbo Build system optimized for JavaScript and TypeScript, written in Rust 项目地址: https://gitcode.com/gh_mirrors/tu/turbo 点击查看 免费下载 本篇指南以 Turborepo 仓库中 with-berry 示例的 apps/web 应用 READ…

2026/10/10 23:30:04 阅读更多 →
Serverless 冷启动 + Orleans 虚拟 Actor:Agent Substrate 的架构血统考

Serverless 冷启动 + Orleans 虚拟 Actor:Agent Substrate 的架构血统考

Serverless 冷启动 Orleans 虚拟 Actor:Agent Substrate 的架构血统考 【免费下载链接】substrate Agent Substrate: the core system 项目地址: https://gitcode.com/GitHub_Trending/substrate7/substrate 一个看似矛盾的事实正在改写云原生的资源模型&am…

2026/10/10 23:30:04 阅读更多 →
300 轮长会话实测:哪些内容会被 fast-jev-compaction 的「二元删除决策」误伤?

300 轮长会话实测:哪些内容会被 fast-jev-compaction 的「二元删除决策」误伤?

300 轮长会话实测:哪些内容会被 fast-jev-compaction 的「二元删除决策」误伤? 【免费下载链接】fast-jev-compaction Claude Code plugin that replaces the compaction summary with Jev decisions: every tool call and result is scored in one fast…

2026/10/10 23:30:04 阅读更多 →
FireRedTTS3架构剖析:Qwen3 LLM + DiT流匹配如何实现patch级扩散自回归TTS

FireRedTTS3架构剖析:Qwen3 LLM + DiT流匹配如何实现patch级扩散自回归TTS

【免费下载链接】FireRedTTS3 FireRedTTS3: Multilingual and Multi-Dialect Voice Cloning with Instruction-Guided Voice Design and Speech Editing 项目地址: https://gitcode.com/gh_mirrors/fi/FireRedTTS3 点击查看 免费下载 FireRedTTS3 是一个统一的多语…

2026/10/10 23:30:04 阅读更多 →
Selenium自动化测试:抽奖系统概率、库存与UI回归实战

Selenium自动化测试:抽奖系统概率、库存与UI回归实战

抽奖系统的测试,最让人心里没底的从来不是某个按钮能不能点,而是那些肉眼看不透的规则到底有没有在线上环境按预期跑。“中奖概率偏差了零点几”、“库存多扣了一次”、“连续快速点击会不会发出两条抽奖请求”,这类问题在演示环境里靠手工点…

2026/10/10 23:30:04 阅读更多 →

日新闻

卫星轨道分类全解析:从LEO到GEO的选型逻辑与工程实践

卫星轨道分类全解析:从LEO到GEO的选型逻辑与工程实践

1. 从“卫星轨道分类”这个标题说起:为什么值得花时间搞懂第一次接触“卫星轨道分类”这个概念,很多人会觉得它离自己很远——不就是天上的星星怎么转吗?但如果你正在做航天任务规划、遥感数据接收、星座设计,甚至只是准备一场航天…

2026/10/10 0:00:39 阅读更多 →
Spring AOP 核心原理与实战:从概念到日志切面落地

Spring AOP 核心原理与实战:从概念到日志切面落地

1. 从一个真实痛点说起:为什么你的代码里到处都是重复逻辑刚入行那会儿,我写过一个用户管理模块,注册、登录、改密码、注销四个接口。每个接口里都塞了几乎一样的日志打印、参数校验、事务开启和提交。当时觉得没什么,能跑就行。直…

2026/10/10 0:00:40 阅读更多 →
Python招聘数据采集与分析可视化:从采集清洗到薪资技能城市可视化全链路

Python招聘数据采集与分析可视化:从采集清洗到薪资技能城市可视化全链路

简介:这是一套面向计算机相关专业学生与项目实战学习者的Python数据采集与分析可视化完整项目,以Boss直聘岗位数据为对象,适合用作毕业设计、课程设计或期末大作业。资源包共38个文件,约246KB,以13个py源码文件为核心&…

2026/10/10 0:00:40 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

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

2026/10/10 11:14:25 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

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

2026/10/10 1:36:08 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

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

2026/10/10 11:14:58 阅读更多 →

月新闻

我发现了一个新思路:用 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/10 5:23:50 阅读更多 →
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/9 21:32:20 阅读更多 →
黑夜航拍船只数据集训练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/10 10:38:42 阅读更多 →