RAG技术全面指南:从基础到GraphRAG、Self-RAG的42种实践方案
这次我们来看一个重量级的 RAG 技术资源库——NirDiamant/RAG_Techniques。这个 GitHub 项目目前已经获得 28.6k 星标是当前最全面的 RAG 技术实践指南包含了 42 可运行的 Jupyter Notebook 教程覆盖从基础 RAG 到最前沿的 MemoRAG、GraphRAG、Agentic RAG 等高级技术。如果你正在构建基于大模型的问答系统、知识库应用或者想要提升现有 RAG 系统的准确性和效率这个资源库绝对值得深入探索。它不仅提供了代码实现更重要的是每个技术都有详细的原理解析、实现步骤和参考论文真正做到了从直觉到代码的完整呈现。1. 核心能力速览能力项说明项目类型RAG 技术教程集合GitHub 开源项目技术覆盖42 种 RAG 技术分6大类别代码形式Jupyter Notebook 可运行脚本框架支持LangChain、LlamaIndex、自定义实现最新技术MemoRAG、GraphRAG、Agentic RAG、Self-RAG 等适用场景学术研究、生产环境优化、技术学习入门门槛需要基本的 Python 和 RAG 概念理解社区活跃度28.6k stars, 3.5k forks, 持续更新2. RAG 技术体系全览这个项目将 RAG 技术体系分为六个主要类别每个类别都包含多个具体的技术实现2.1 基础 RAG 技术Foundational Basic RAG最基础的检索增强生成实现RAG with CSV Files使用 CSV 文件构建问答系统Reliable RAG增加验证和精炼机制确保准确性Optimizing Chunk Sizes文本分块大小优化策略Proposition Chunking将文本分解为事实性陈述2.2 查询增强技术Query Enhancement Query Transformations查询重写、回退提示、子查询分解HyDEHypothetical Document Embedding生成假设文档改善对齐HyPEHypothetical Prompt Embeddings索引阶段预计算假设查询2.3 上下文丰富技术Context Enrichment Contextual Chunk Headers添加文档级和章节级上下文头Relevant Segment Extraction动态构建多块相关文本段Semantic Chunking基于语义连贯性的文档分割Contextual Compression压缩检索信息同时保留关键内容2.4 高级检索方法Advanced Retrieval Fusion Retrieval结合关键词和向量搜索Intelligent RerankingLLM 评分、交叉编码器、元数据增强排序Hierarchical Indices多层级信息导航系统Multi-modal RAG处理 PDF、PPT 等多媒体内容2.5 迭代和自适应技术Iterative Techniques Retrieval with Feedback Loops从用户交互中学习改进Adaptive Retrieval基于查询类型动态调整策略2.6 高级架构Advanced Architecture ️Graph RAG知识图谱集成增强上下文RAPTOR递归抽象处理的树状组织检索Self-RAG自适应决定是否使用检索信息Agentic RAG生产级智能体 RAG 流水线3. 环境准备与工具链配置要充分利用这个资源库需要准备以下开发环境3.1 基础环境要求# 推荐使用 Python 3.8-3.11 python --version # Python 3.9.18 # 安装核心依赖 pip install jupyter notebook pip install langchain llama-index pip install openai anthropic # 根据使用的 LLM 选择3.2 向量数据库选择根据项目需求选择合适的向量数据库# FAISS - 本地轻量级方案 pip install faiss-cpu # 或 faiss-gpu # Chroma - 简单易用 pip install chromadb # Milvus - 生产级分布式方案 pip install pymilvus # Pinecone - 云端托管服务 pip install pinecone-client3.3 重排序器配置重排序是提升 RAG 效果的关键环节# 使用交叉编码器进行重排序 pip install sentence-transformers # 或者使用专门的重排序模型 from sentence_transformers import CrossEncoder reranker CrossEncoder(cross-encoder/ms-marco-MiniLM-L-6-v2)4. 项目部署与快速开始4.1 克隆项目仓库git clone https://github.com/NirDiamant/RAG_Techniques.git cd RAG_Techniques # 查看项目结构 ls -la项目主要目录结构all_rag_techniques/- 所有技术的 Notebook 教程all_rag_techniques_runnable_scripts/- 可运行脚本版本data/- 示例数据evaluation/- 评估工具和指标4.2 选择适合的技术入门对于初学者建议从基础技术开始# 进入基础 RAG 教程 cd all_rag_techniques/1_foundational/basic_rag # 启动 Jupyter Notebook jupyter notebook basic_rag.ipynb4.3 配置 API 密钥和环境变量大多数教程需要配置 LLM API# 设置环境变量推荐 export OPENAI_API_KEYyour-openai-key export ANTHROPIC_API_KEYyour-anthropic-key # 或者在代码中直接设置 import os os.environ[OPENAI_API_KEY] your-openai-key5. 核心技术深度解析5.1 HyPE 技术假设提示嵌入HyPEHypothetical Prompt Embeddings是传统 RAG 检索的重要增强技术核心优势在索引阶段预计算假设问题避免运行时合成答案生成将检索任务转换为问题-问题匹配提高对齐精度相比 HyDE 无运行时开销检索更快更经济实现代码示例def generate_hypothetical_queries(chunk, num_queries3): 为每个文本块生成多个假设查询 prompt f 基于以下文本块生成{num_queries}个用户可能提出的问题 文本{chunk} 生成的问题 1. # 使用 LLM 生成问题 responses llm.generate(prompt) return parse_generated_questions(responses) def hype_retrieval(user_query, hypothetical_queries_db): HyPE 检索过程 # 将用户查询与预计算的假设问题匹配 query_embedding embedder.encode([user_query]) similarities cosine_similarity(query_embedding, hypothetical_queries_db[embeddings]) # 找到最匹配的假设问题返回对应的文档块 best_match_idx np.argmax(similarities) return hypothetical_queries_db[chunks][best_match_idx]5.2 Graph RAG 实现详解Graph RAG 通过知识图谱显著提升复杂多跳问题的性能技术架构class GraphRAGSystem: def __init__(self): self.vector_db MilvusVectorDB() self.graph_db NetworkXGraph() self.llm LocalLLM() def build_knowledge_graph(self, documents): 从文档构建知识图谱 entities_relations [] for doc in documents: # 提取实体和关系 extraction_prompt f从文本中提取实体和关系{doc} extraction_result self.llm.extract(extraction_prompt) entities_relations.extend(parse_extraction(extraction_result)) # 构建图谱 self.graph_db.build_graph(entities_relations) def multi_hop_retrieval(self, query): 多跳检索实现 # 1. 向量搜索找到入口点 entry_points self.vector_db.similarity_search(query, k5) # 2. 图谱遍历扩展相关节点 expanded_nodes self.graph_db.traverse_from_docs(entry_points) # 3. LLM 重排序相关关系 ranked_relations self.llm.rerank_relations(query, expanded_nodes) # 4. 基于最相关关系检索最终文档 return self.vector_db.retrieve_by_relations(ranked_relations[:3])5.3 Self-RAG 的自适应决策机制Self-RAG 动态决定何时使用检索信息以及如何使用决策流程class SelfRAG: def process_query(self, query): # 1. 检索决策是否需要检索 retrieval_decision self._should_retrieve(query) if retrieval_decision retrieve: # 2. 文档检索 documents self.retriever.search(query) # 3. 相关性评估 relevance_scores self._evaluate_relevance(query, documents) # 4. 响应生成选择性使用检索内容 if max(relevance_scores) self.threshold: response self._generate_with_retrieval(query, documents) else: response self._generate_without_retrieval(query) else: # 直接生成不使用检索 response self._generate_without_retrieval(query) # 5. 支持性评估和效用评估 support_score self._evaluate_support(response, documents) utility_score self._evaluate_utility(response, query) return { response: response, retrieval_used: retrieval_decision retrieve, support_score: support_score, utility_score: utility_score }6. 实战构建生产级 RAG 系统6.1 数据预处理流水线class DataProcessingPipeline: def __init__(self): self.chunking_strategy SemanticChunking() self.embedder SentenceTransformer() self.augmenter QuestionAugmenter() def process_documents(self, documents): processed_data [] for doc in documents: # 1. 语义分块 chunks self.chunking_strategy.chunk(doc) for chunk in chunks: # 2. 生成上下文头 chunk_with_header self._add_contextual_header(chunk, doc) # 3. 生成假设问题HyPE hypothetical_queries self.augmenter.generate_queries(chunk_with_header) # 4. 生成嵌入 embeddings self.embedder.encode([chunk_with_header] hypothetical_queries) processed_data.append({ original_chunk: chunk, augmented_chunk: chunk_with_header, hypothetical_queries: hypothetical_queries, embeddings: embeddings, metadata: self._extract_metadata(doc, chunk) }) return processed_data6.2 多阶段检索架构class MultiStageRetriever: def __init__(self): self.first_stage_retriever DenseRetriever() self.reranker CrossEncoderReranker() self.graph_retriever GraphRetriever() def retrieve(self, query, top_k10): # 第一阶段密集向量检索 initial_results self.first_stage_retriever.search(query, top_k50) # 第二阶段重排序 reranked_results self.reranker.rerank(query, initial_results) # 第三阶段图谱增强检索针对复杂查询 if self._is_complex_query(query): graph_augmented self.graph_retriever.augment(query, reranked_results[:10]) final_results self._fusion_merge(reranked_results, graph_augmented) else: final_results reranked_results[:top_k] return final_results def _is_complex_query(self, query): 判断是否为复杂查询需要图谱增强 complex_indicators [关系, 比较, 影响, 原因, 如何实现] return any(indicator in query for indicator in complex_indicators)6.3 响应生成与验证class VerifiedResponseGenerator: def generate(self, query, retrieved_documents): # 1. 上下文构建 context self._construct_context(retrieved_documents) # 2. 响应生成 response self.llm.generate( promptself._build_prompt(query, context), temperature0.1 # 低温度确保确定性 ) # 3. 事实性验证 verification_result self._verify_factual_accuracy(response, retrieved_documents) # 4. 如果不准确尝试修正 if not verification_result[is_accurate]: corrected_response self._correct_response( response, verification_result[issues] ) return corrected_response return response def _verify_factual_accuracy(self, response, source_documents): 验证响应的事实准确性 verification_prompt f 验证以下回答是否基于提供的源文档 问题{query} 回答{response} 源文档{source_documents} 请检查 1. 回答中的事实是否在源文档中有支持 2. 是否有虚构或添加的信息 3. 是否有遗漏关键信息 return self.llm.verify(verification_prompt)7. 评估与优化策略7.1 RAG 系统评估指标项目提供了完整的评估框架# 使用 deepeval 进行综合评估 from deepeval import evaluate from deepeval.metrics import ( AnswerRelevancyMetric, FaithfulnessMetric, ContextualRecallMetric ) # 定义评估指标 metrics [ AnswerRelevancyMetric(threshold0.8), FaithfulnessMetric(threshold0.9), ContextualRecallMetric(threshold0.7) ] # 运行评估 test_results evaluate( your_rag_system, metricsmetrics, test_casestest_dataset )7.2 性能优化技巧基于项目中的实践经验总结检索优化def optimize_retrieval_settings(): 检索参数优化 optimal_settings { chunk_size: 512, # 平衡上下文和精度 overlap: 50, # 块间重叠避免信息断裂 top_k_first_stage: 50, # 第一阶段检索数量 top_k_final: 5, # 最终返回数量 similarity_threshold: 0.7, # 相似度阈值 diversity_penalty: 0.1, # 多样性惩罚 } return optimal_settings缓存策略class SmartCache: def __init__(self): self.query_cache {} # 查询结果缓存 self.embedding_cache {} # 嵌入缓存 self.generation_cache {} # 生成结果缓存 def get_cached_response(self, query): 获取缓存响应支持模糊匹配 # 使用嵌入相似度进行模糊缓存查找 query_embedding self.embedder.encode([query])[0] for cached_query, cached_data in self.query_cache.items(): cached_embedding cached_data[embedding] similarity cosine_similarity([query_embedding], [cached_embedding])[0][0] if similarity 0.95: # 高度相似 return cached_data[response] return None8. 生产环境部署考量8.1 可扩展架构设计class ScalableRAGService: def __init__(self): self.load_balancer LoadBalancer() self.vector_db_cluster VectorDBCluster() self.llm_cluster LLMCluster() async def process_batch_queries(self, queries): 批量查询处理 # 1. 批量嵌入生成 batch_embeddings await self.embedder.abatch_encode(queries) # 2. 并行向量搜索 search_tasks [ self.vector_db_cluster.asearch(embedding) for embedding in batch_embeddings ] search_results await asyncio.gather(*search_tasks) # 3. 批量重排序 rerank_tasks [ self.reranker.arerank(query, results) for query, results in zip(queries, search_results) ] reranked_results await asyncio.gather(*rerank_tasks) # 4. 批量响应生成 generation_tasks [ self.llm_cluster.agenerate(self._build_prompt(query, results)) for query, results in zip(queries, reranked_results) ] return await asyncio.gather(*generation_tasks)8.2 监控与日志class RAGMonitor: def __init__(self): self.metrics_collector MetricsCollector() self.alert_manager AlertManager() def log_retrieval_metrics(self, query, results, latency): 记录检索指标 metrics { query_length: len(query), retrieval_count: len(results), average_similarity: np.mean([r.score for r in results]), latency_ms: latency, timestamp: datetime.now() } self.metrics_collector.record(metrics) # 触发警报条件 if latency 1000: # 超过1秒 self.alert_manager.alert_slow_retrieval(metrics) def track_quality_metrics(self, query, response, feedback): 跟踪质量指标 quality_metrics { answer_relevance: self._calculate_relevance(query, response), factual_accuracy: feedback.get(accuracy, 0), user_satisfaction: feedback.get(satisfaction, 0) } self.metrics_collector.record_quality(quality_metrics)9. 常见问题与解决方案9.1 检索相关问题问题检索结果不相关原因嵌入模型不匹配、分块策略不当、查询理解不足解决方案使用领域特定的嵌入模型调整分块大小和重叠策略实现查询重写和扩展问题多跳问题处理效果差原因简单向量检索无法处理复杂推理解决方案实现 Graph RAG 或迭代检索策略9.2 生成相关问题问题LLM 忽略检索内容原因提示工程不足、上下文过长解决方案改进提示模板明确要求基于上下文实现上下文压缩和摘要使用指令调优的模型问题事实性错误或幻觉原因LLM 固有倾向、检索内容质量差解决方案实现事实性验证步骤使用 Self-RAG 的适应性决策增加引用和溯源机制9.3 性能问题问题检索延迟过高原因向量数据库负载大、索引优化不足解决方案实现多阶段检索架构使用近似最近邻搜索实施缓存策略问题生成速度慢原因LLM 推理延迟、上下文过长解决方案使用更小的模型进行简单任务实现流式生成优化提示长度10. 最佳实践总结基于 NirDiamant/RAG_Techniques 项目的实践经验以下是构建生产级 RAG 系统的关键建议10.1 技术选型策略起步阶段从基础 RAG 开始快速验证可行性成熟阶段逐步引入重排序、查询增强等高级技术复杂场景针对多跳推理使用 Graph RAG针对动态决策使用 Self-RAG10.2 数据预处理规范分块策略结合固定大小和语义分块避免信息断裂元数据丰富为每个块添加文档来源、章节信息等上下文数据增强使用 HyPE 等技术提升检索对齐度10.3 系统架构原则模块化设计保持检索、重排序、生成等组件的独立性可观测性实现完整的指标监控和日志记录容错机制设计降级策略当高级功能失败时回退到基础方案10.4 持续优化流程A/B 测试对比不同技术组合的效果用户反馈建立反馈循环持续改进系统自动化评估定期运行评估套件监控质量变化这个项目真正价值在于它提供了从理论到实践的完整路径每个技术都有可运行的代码和详细的说明。无论是学术研究还是工业应用都能在这里找到适合的技术方案和实现参考。建议按照基础理解 → 单个技术实践 → 技术组合实验 → 生产化优化的路径逐步深入这样能够系统性地掌握 RAG 技术的核心要点和应用技巧。

相关新闻

AX620A芯片Debian镜像挂载与交叉编译优化实践

AX620A芯片Debian镜像挂载与交叉编译优化实践

1. 项目背景与核心价值在嵌入式开发领域,AX620A芯片作为爱芯元智推出的高性能AIoT处理器,搭配MaixPy3开发框架为开发者提供了便捷的AI应用开发体验。但实际开发中,我们常遇到两个痛点:一是直接在开发板上编译大型程序耗时过长&…

2026/10/1 8:12:21 阅读更多 →
校友社交APP原型设计:情感与功能的双轮驱动

校友社交APP原型设计:情感与功能的双轮驱动

1. 校友圈APP原型设计概述校友圈APP作为连接毕业校友的社交平台,其原型设计需要兼顾情感共鸣和实用功能。我在设计过三款校园类应用后发现,成功的校友产品往往具备三个核心特征:怀旧元素(如毕业年份、院系标识)、轻量级…

2026/10/3 23:08:19 阅读更多 →
高效笔记管理与知识系统构建实战指南

高效笔记管理与知识系统构建实战指南

1. 项目概述:笔记整理与知识管理的艺术"破解笔记"这个标题乍看有些神秘,实则指向一个每个知识工作者都会面临的永恒课题——如何从海量信息中提取真正有价值的内容。作为一名经历过纸质笔记、电子文档到知识图谱全流程的从业者,我深…

2026/10/3 10:11:33 阅读更多 →

最新新闻

Ubuntu实时内核PREEMPT_RT编译安装与NVIDIA显卡驱动修复指南

Ubuntu实时内核PREEMPT_RT编译安装与NVIDIA显卡驱动修复指南

在Ubuntu上给内核打实时补丁(PREEMPT_RT),本来算是Linux工程师的常规操作,但真正让人上头的不是编译过程,而是打完补丁重启后桌面进不去——NVIDIA显卡驱动失效了。这个问题我前前后后遇到过好几次,也见过不…

2026/10/4 3:38:52 阅读更多 →
OpenReply限流实现解析:如何用Redis原子脚本精确卡住Meta官方750条/小时的私聊上限

OpenReply限流实现解析:如何用Redis原子脚本精确卡住Meta官方750条/小时的私聊上限

OpenReply限流实现解析:如何用Redis原子脚本精确卡住Meta官方750条/小时的私聊上限 【免费下载链接】openreply The open-source Manychat alternative 项目地址: https://gitcode.com/gh_mirrors/op/openreply OpenReply 是一个开源的 Instagram 私聊自动化…

2026/10/4 3:38:52 阅读更多 →
Linux服务器性能数据分析脚本实战:从采集到瓶颈定位

Linux服务器性能数据分析脚本实战:从采集到瓶颈定位

接手新项目的第一周,我就遇到了典型的“盲人摸象”场景:线上服务每到晚上九点半,用户侧响应时间就从200毫秒飙升到2秒,监控面板上CPU使用率确实打满了,但打开top只能看到当下那一刻的快照,问题发生时人根本…

2026/10/4 3:38:52 阅读更多 →
从 0 实现最小 Coding Agent:读懂 Pi 生产级 Agent 的骨架

从 0 实现最小 Coding Agent:读懂 Pi 生产级 Agent 的骨架

读懂 Pi 生产级 Agent 的骨架:从 0 实现最小 Coding Agent 大模型擅长生成内容,Coding Agent 却要进一步作用于真实环境:读取文件、探索目录、修改代码,并根据工具反馈决定下一步。两者真正的分水岭,不是提示词写得多长…

2026/10/4 3:38:52 阅读更多 →
迅雷下载速度慢?解析在线工具与提速设置全攻略

迅雷下载速度慢?解析在线工具与提速设置全攻略

玩迅雷的朋友,十个里有八个都问过同一个问题:怎么设置迅雷下载速度最快。我折腾下载工具多年,从FlashGet、BitComet再到迅雷,踩过的坑排起来能绕房间一圈。先说一个很多人没意识到的事实:迅雷解析在线工具能帮你把那些…

2026/10/4 3:38:52 阅读更多 →
基于 Spring Boot 的剧本杀管理系统设计与实现

基于 Spring Boot 的剧本杀管理系统设计与实现

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 1. 引言 随着剧本杀行业的快速发展,线下门店在预约管理、剧本库存、场次安排和会员运营等方面面临越来越大的管理压力。传统的人工排表和纸质记录方式效率低…

2026/10/4 3:37:51 阅读更多 →

日新闻

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/4 1:00:58 阅读更多 →
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/4 1:00:58 阅读更多 →
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/4 1:00:58 阅读更多 →

周新闻

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/4 1:00:58 阅读更多 →
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/4 1:00:58 阅读更多 →
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/4 1:00: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/2 10:36:31 阅读更多 →
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/3 9:42:35 阅读更多 →
黑夜航拍船只数据集训练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/3 9:42:36 阅读更多 →