从零搭建RAG本地知识库:用检索增强生成根治大模型幻觉
前段时间我拿一份几十页的内部运维规范文档去问通用大模型“某个告警的处理时限是多少”它给了我一个完全合理、语气笃定但文档里根本不存在的数字还附带了一段有模有样的流程说明。我翻了半天原文愣是没找到这一条。这就是几乎所有用过AI助手的人都撞过的墙AI幻觉。说它“一本正经地胡说八道”一点不冤枉。应对幻觉现在的主流做法早就不是靠“在提示词里多叮嘱几句”而是给大模型外挂一个知识源也就是本地知识库。思路一句话就能讲完先把文档切碎、向量化、存进一个专门做检索的数据库用户提问时先从库里把最相关的内容捞出来再连同问题一起交给大模型组织答案。让模型“先查再答”而不是“凭空想”。这套技术叫RAG检索增强生成是当前对抗幻觉最务实、成本最低、落地最快的方案。这篇教程我按自己实际搭过几套知识库的经验来讲幻觉到底怎么来的、本地知识库要选哪些组件、从零怎么跑通一套最小可用系统、效果差该按什么顺序排查、最后怎么优化到能放心拿去给业务用。适合有基本编程基础、想把公司文档或个人资料库变成可信问答助手的程序员非技术读者也可以先看前两部分搞懂原理再找同事帮忙落地。1. 幻觉从哪来大模型为什么会一本正经地编答案1.1 概率生成与知识压缩要解决问题先得接受一个事实幻觉不是bug是机制。大模型的本质是一个超大的“文本接龙器”。它在训练时做的事情是看了海量语料后学会根据前文预测下一个最可能出现的词。你问它一个问题它并不是去某个数据库里“查”答案而是根据问题在参数空间里“推”出一个最像样的回答。所以它输出的每一个字本质上都是“概率上比较合理的下一个字”而不是“经过验证的事实”。另一个关键点是知识压缩。训练语料几十个T但模型参数就那么几百亿它不可能把原文背下来只能把语料里的统计规律和知识模式压缩成参数。这个过程很像学完一门课后凭“印象”答题大方向对细节必然模糊。细节一模糊模型就开始用语言习惯去“圆”幻觉就出现了。1.2 三种最常见的幻觉场景我在实际使用中把幻觉分成三类方便后面针对性排查事实性幻觉编造不存在的条款、数据、产品型号、人名。比如问“某系统的数据库备份失败后重试几次”模型答“重试3次间隔5分钟”而文档里根本没写过这个参数。这是最危险的一类因为数字和流程听起来太合理了。推理性幻觉涉及多步逻辑、计算或时间线推导时模型在中间某一步跑偏后面全错。看似逻辑通顺实际结论错误。关联性幻觉知识库里明明有A和B两条相关信息模型硬把它们拼成“因为A所以B”造出一个不存在的因果关系。理解这三类后面做检索优化和引用溯源时就知道该防什么。1.3 为什么提示词工程救不了幻觉很多人第一反应是“那我提示词里写清楚点让它别乱说”。这个方向对但天花板很低。因为上下文窗口再长也装不下你全部的业务文档更重要的是模型分不清“它见过”和“它知道”——没有外部证据它永远无法确认自己输出的内容是真是假。你让它“不知道就说不知道”它只会把“不知道”也编得理直气壮。所以治本的思路是把“检索”和“生成”两个环节拆开。检索环节负责从真实文档里拿证据生成环节只负责把证据组织成通顺的答案。这就是本地知识库存在的根本理由。2. 架构选型本地知识库的四件套怎么挑2.1 RAG整体流程先过一遍一套完整的本地知识库跑起来是这么一条流水线文档解析 → 文本清洗 → 切片chunk→ 向量化embedding→ 存入向量数据库用户提问时问题向量化 → 相似度检索 → 重排可选→ 拼接提示词 → 大模型生成答案 → 带引用输出。打个比方向量数据库是图书馆管理员大模型是讲解员。管理员根据你的问题精准找出相关那几页书讲解员只根据这几页内容给你讲。没有管理员讲解员就只能凭自己脑子里那点“印象”瞎编——这就是幻觉。2.2 嵌入模型整个系统的质量上限嵌入模型的任务是把一段文本变成一串向量让语义相近的文本向量距离更近。这个组件直接决定了“能不能把相关文档捞出来”所以我通常建议在它上面多花心思。选型我关注的几个点中文效果通用英文模型对中文支持往往一般务必选在中文语料上训练或优化的开源模型。判断方法很简单拿几段你自己的业务文档做相似度实测看看相关文本能不能排到前面。最大输入长度一般要覆盖你的切片大小。常见有512、1024、8192 token几种选512以上比较稳。维度与量化维度几百到一千多都有维度越高通常越精细但越吃资源。普通CPU机器建议选量化版本实测下来速度完全能接受。部署形态尽量选能本地跑的不然“本地知识库”就名存实亡了。这里我特别想强调嵌入模型决定检索上限检索决定答案质量上限。宁可生成模型弱一点也要先保证能精准捞到正确片段。2.3 向量数据库按数据规模定形态向量数据库不用纠结太多按数据量和部署场景选就行。方案形态适合场景优点注意点轻量嵌入式单机、百万量级以内向量、原型验证部署简单随程序启动零运维不适合多机高并发服务化向量库千万级向量、多用户并发、需要高可用支持分布式、权限管理、滚动升级多一个服务要维护资源开销大我的建议是新人一律从嵌入式方案开始。把系统跑通了数据量真上去了再迁服务化成本很低。别一上来就上重组件你会被运维问题拖垮。2.4 生成模型本地还是API生成模型负责把检索到的内容组织成人话。选择权主要在“数据敏感度”和“机器资源”之间。本地推理数据不出内网隐私可控无按次API成本。代价是效果受限于参数量通常需要一张消费级显卡跑量化模型。7B参数量量化后大约4-6GB显存13B大约8-10GB做文档问答足够。普通CPU跑也不是不行只是速度慢长文档场景体验一般。云端API效果好、省事但对内部敏感文档不适用。可以在不涉密、数据允许外出的场景先用它快速验证整套流程。决策口诀敏感文档走本地一般资料走API验证原型用什么都行。3. 最小可复现搭建文档进来、答案出去的完整链路这一节我按一套“100篇技术文档”的典型场景从头到尾走一遍。以下代码是库无关的伪代码你换成实际选用的嵌入库和向量库API即可。3.1 文档预处理先治脏数据很多人第一步就栽在文档格式上。PDF解析经常会带出页眉页脚、目录、水印、多余换行Word里还有批注和隐藏文字。这些脏数据不清理切片和向量化的质量都会受影响。实操顺序按类型批量解析PDF转文本、Word转文本、Markdown直接读。清洗去掉页眉页脚、页码、“目录”区块、表格框线符号。保留结构把章节标题、层级、页码信息作为元数据记下来。后面做引用溯源全靠它。# 伪代码解析并保留结构信息 docs [] for file_path in file_list: raw parse_document(file_path) # 按格式选择解析器 cleaned clean_noise(raw) # 去页眉页脚/水印/目录 sections extract_sections(cleaned) # 按标题层级切出结构块 docs.append({ source: file_path, sections: sections, final_text: join_sections(sections), })这里有个血泪教训不要把“整个文件”当成“一个块”直接向量化入库。几十页的文档算出来的向量代表的是文档整体主题细节全被平均掉了。必须切碎。3.2 切分策略粒度与重叠窗口切片是RAG里最容易被低估的环节。切太大检索回来的片段包含大量无关内容答案被稀释切太小一块内容装不下一个完整的知识点检索到了也答不全。我实践下来的推荐参数文档类型单块大小约重叠窗口约说明技术规范/制度300-500字80-120字条款相对独立小切更精准操作手册/流程400-600字100-150字步骤间有依赖稍大切更完整合同/长段落500-800字150-200字语义连贯性强避免切散条款重叠窗口的原理很好懂切分点刚好落在关键信息中间时重叠部分能保证这条信息至少完整出现在某一个块里。别省这点冗余它对召回率提升非常明显。# 伪代码结构感知切分 重叠窗口 def split_doc_by_structure(sections, chunk_size400, overlap100): chunks [] buffer for sec in sections: buffer sec.text while len(buffer) chunk_size: cut buffer[:chunk_size] chunks.append(cut) buffer buffer[chunk_size - overlap:] # 保留重叠尾巴 if buffer: chunks.append(buffer) return chunks3.3 向量化入库把文本变成可检索的坐标切片之后把每个块编码成向量连同原文和元数据一起写进向量库。# 伪代码替换为你实际选用的嵌入模型与向量库API embedder EmbeddingModel(model_nameyour-chinese-embedding, devicecpu) store VectorStore(path./kb_data, distancecosine) def ingest_doc(doc): chunks split_doc_by_structure(doc[sections], chunk_size400, overlap100) vectors, payloads [], [] for idx, c in enumerate(chunks): vectors.append(embedder.encode(c)) payloads.append({ text: c, source: doc[source], chunk_id: idx, section_title: doc.get(section_title, ), # 元数据供溯源 }) store.add(vectorsvectors, payloadspayloads) for doc in docs: ingest_doc(doc) print(f入库完成共 {store.count()} 个切片)元数据务必把“来源文件名、页码、章节标题、入库时间”都带上。因为后面做引用溯源时只要检索命中了某个块我们立刻就能反查它来自哪份文档的哪一页。这个能力是纯聊天式AI给不了你的。3.4 检索与生成从提问到带引用答案查询阶段三步走问题向量化、相似度检索、拼接提示词让模型生成。# 伪代码检索 生成 question 某系统的数据库备份失败后重试几次 query_vec embedder.encode(question) hits store.search(query_vec, top_k10) context \n\n.join(f[{i1}] {h[text]} for i, h in enumerate(hits)) prompt f 你是知识库问答助手。请严格依据【资料】回答问题不要使用资料之外的知识。 如果资料不足以回答请直接回答“资料中没有找到相关内容”不要编造。 回答时在每个结论后用[编号]标注依据例如“备份任务重试1次[3]”。 【资料】 {context} 【问题】 {question} answer llm.generate(prompt, max_tokens1024, temperature0.1) print(answer)这个提示词模板我一直在用核心是三条硬约束只依据给定资料、资料不足就明说、必须带引用编号。temperature设到0.1或更低减少随机性。别小看这三句话它们能挡掉一大半幻觉。3.5 跑通后的验证清单系统第一次跑通不要急着加功能先做四组测试问文档里明确写过的细节如某个具体参数看能否准确命中并引用。问需要跨章节组合的问题如“错误码A和错误码B的处理区别”看检索是否同时召回两块内容。问文档里根本没有的内容看它是否老实说“没找到”。检查每个引用编号对应的片段是否真的是答案依据。我的经验是前两组最容易挂也最能暴露切分和检索的问题。4. 效果不行先别换模型三步定位法排查检索与生成知识库效果差九成以上不是模型不够强而是检索链路没做好。我总结了一套三步定位法严格按照顺序查能省下大把换模型的冤枉钱。4.1 第一步确认是不是“没检索出来”症状是答案明显答非所问或者答的内容跟文档沾边但不准确。排查手段非常朴素做一次“裸检索”。把用户问题直接拿去检索打印返回的前5个片段肉眼看看这些片段和问题相不相关。如果片段本身就不相关那问题一定出在检索侧。常见原因和对应解法嵌入模型不适配换更适合中文或更适合你领域的模型。判断标准是前面提到的同领域文本相似度实测。切片太碎知识点被切成两半导致每个块都“只沾一点边”。调大切分块和重叠窗口。相似度阈值过滤太严很多人喜欢设0.7、0.8的阈值结果相关片段全被拦在门外。建议先不设阈值或设很低看裸召回效果再逐步收紧。文档质量差扫描版PDF、表格乱码、原文就是错的检索再好也白搭。回到数据清洗环节。4.2 第二步确认是不是“检索到了但模型没用对”如果你裸检索出来的片段明明很相关但答案还是不对问题就出在生成侧。一个高频坑是长上下文“中部迷失”检索回来的片段一多模型对中间位置的上下文注意力严重下降。我习惯把最相关的片段排在最前面并且只保留真正有用的片段数而不是无脑塞20条。另一个坑是提示词约束不够硬。如果你只是说“请参考以下资料”模型很容易跑偏。必须写“只依据给定资料回答禁止使用资料外知识资料不足要明说”。这里的“禁止”和“必须”不是玄学它们确实能显著改变模型的指令遵循度。还有一个容易忽略的点多片段之间互相矛盾。两篇文章对同一操作写了不同说法你不处理模型就会挑一个或者自己折中。解决办法是在提示词里加一句“如果资料之间冲突请指出冲突并分别标注来源编号”。4.3 第三步最后才怀疑生成模型能力当检索片段正确、提示词约束到位、答案仍然逻辑混乱或表达不通顺时才轮到生成模型背锅。这时换更强模型或更高精度量化版本才有意义。我见过太多人一上来就换大模型折腾半天发现答案还是错一查检索片段压根不对——顺序反了。同时可以上“硬约束”兜底要求模型先声明“资料中没有直接提到该信息”再决定是否继续。这一招能最大限度避免模型用自己的知识补窟窿。4.4 一张排查表贴在工位前症状第一步检查最常见原因优先动作答非所问裸检索看top5片段嵌入模型不适配 / 阈值过严换嵌入模型、调阈值片段相关但答案错看提示词约束和片段顺序上下文中部迷失 / 约束太软重排片段、强化约束片段和答案都对但表述差换生成模型对比模型能力不足换更强模型或更高精度量化引用编号对不上内容检查切片元数据切分把来源搞丢了补元数据、重建索引5. 进阶优化引用溯源、混合检索与评测集让知识库真正敢用基础链路跑通只能算“能玩”。要让知识库真正交付给业务下面这几个动作缺一不可。5.1 加重排检索精度立刻上一个台阶向量检索擅长“语义相近”但容易把高度相似的干扰片段一起捞回来。重排的玩法是先用向量检索召回20-50个候选片段再交给一个专门的“相关性打分模型”逐条精排最后取前5-8条进上下文。我实测下来重排对技术文档问答的提升非常明显尤其是问题里含有多个限定条件的场景。成本就是一次额外的模型调用但对答案质量是质的飞跃。重排模型同样建议本地部署和嵌入模型串成一条内网链路。5.2 混合检索向量抓语义关键词抓实体技术文档里大量出现型号、报错码、编号这类“精确实体”。这类实体用向量检索其实并不占优势——语义相似并不等于字符串匹配。我遇到过“设备型号A-200的误报处理办法”检索不到因为文档里写的是“A200”或者别的写法。解法是混合检索一路走向量相似度一路走关键词/词频精确匹配取两路结果合并再去重、重排。专治型号、编号、人名、报错码这种“差一个字符就不对”的场景。实现起来也不复杂向量库和全文检索引擎各查一遍再合并即可。5.3 引用溯源与“不知道机制”信任感的核心刚才的提示词模板里要求模型输出带[1][2]编号这步千万别省。回答生成后我们把编号映射回元数据文件名、页码、段落标题在界面上展示成可点开的来源链接。这个设计带来的变化是用户不用再“盲信”AI而是可以一秒点进原文核验。就这一个改动整个知识库的可信度会肉眼可见地提升。与此同时把“资料不足就说不知道”做成机制而不是提示词——检索结果相关度低于阈值时直接拒绝回答并提示用户补充文档而不是硬拼一个答案出来。5.4 增量更新与数据治理知识库最怕“死数据”。文档更新了库里还是旧版本文档删除了旧切片还躺在向量库里继续被检索。我的习惯是每次入库记录文档版本号和入库时间更新时先按“来源文件”删除旧切片再重新切分入库定期清理长期未命中的区块它们大概率是噪声把文档源头的管理责任明确给业务方谁更新谁负责不然知识库会悄悄“过期”。5.5 评测集与回归测试改一处不坏全局最后也是我最想让你一开始就做的事情建一个评测集。准备20-50条“黄金问答”分三类类别示例期望行为能答文档中有明确答案备份重试次数是多少正确回答并带引用不能答文档中没有采购流程审批人是哪位明确说“资料中没有”组合推理需多块拼接A和B两个故障的处理差异引用两块来源并说明区别每改一次参数、换一次模型、调一次提示词都跑一遍评测集记录三个数字召回命中率、答案正确率、正确拒绝率。这套机制能防止你“修好A问题搞坏B问题”也是你在业务方面前证明系统能力最硬的证据。我从一开始没建评测集靠感觉调参浪费了不少时间。后来老老实实建了30条黄金问答每次改动跑一遍十分钟出结果效率反而高得多。最后分享一点我的实际体会本地知识库的搭建门槛真的不高真正花时间的永远在后面——数据清洗、切分调参、评测集维护。我建议你先拿100篇文档跑通最小链路别追求一步到位。先让答案“有依据”再让答案“更准确”最后让答案“可核验”。等你能对业务方说出“每个答案都能点开原文求证”这句话时这个系统才算真正立住了。

相关新闻

电容层析成像图像重建:inversecgls.m 三种算法解析与调参指南

电容层析成像图像重建:inversecgls.m 三种算法解析与调参指南

简介:面向电容层析成像(ECT)研究者的MATLAB算法文件包,聚焦两相流场景下的图像重建逆问题求解。压缩包共1个文件,为inversecgls.m脚本,大小仅1KB,适合快速部署与二次开发。该脚本涵盖最小二乘、…

2026/10/18 11:23:03 阅读更多 →
EasyX图形编程入门:用C语言实现植物大战僵尸课设

EasyX图形编程入门:用C语言实现植物大战僵尸课设

简介:这是一份基于EasyX图形库与标准C语言实现的《植物大战僵尸》简化版游戏源码,专为计算机类专业学生课程设计、大作业及项目入门实践打造,适用于计科、人工智能、物联网等方向的学习者,兼顾零基础入门与进阶二次开发需求。资源…

2026/10/18 11:23:03 阅读更多 →
C#三层架构学生管理系统实战:BLL+DAL+Models解耦设计

C#三层架构学生管理系统实战:BLL+DAL+Models解耦设计

简介:这是一套基于C# Windows平台开发的学生信息管理系统完整源码,面向.NET初学者与三层架构实践者,聚焦数据库应用开发核心能力训练。系统采用标准三层架构(UI/BLL/DAL),集成SQL Server数据库,…

2026/10/18 11:22:03 阅读更多 →

最新新闻

GitHub热榜风向突变:AI工程化项目集体占位,可观测性与网关成焦点

GitHub热榜风向突变:AI工程化项目集体占位,可观测性与网关成焦点

这几天的 GitHub 热榜有点意思,一眼扫过去,明显感觉到风向在变。今天的榜单来了个“四进三出”,新晋的项目几乎都压在 AI 工程化那一层,不是大模型本身,而是围绕大模型做落地、做治理、做可靠性、做成本控制的基础设施…

2026/10/18 12:35:29 阅读更多 →
H5网页扫码实战:三库分层组合实现95%安卓机型稳定识别

H5网页扫码实战:三库分层组合实现95%安卓机型稳定识别

简介:本资源是一套面向前端开发者与H5移动端应用实践者的二维码/条形码识别技术集成方案,聚焦于在纯Web环境中实现免App扫码功能,适用于电商核销、物流追溯、信息共享等轻量级业务场景。资源包含7个核心文件(6个JS库1个HTML入口页…

2026/10/18 12:35:29 阅读更多 →
JSON工具类设计与AI输出解析:SpringBoot与Uniapp前后端统一实践

JSON工具类设计与AI输出解析:SpringBoot与Uniapp前后端统一实践

“第九讲:JSON工具类”,这一讲不做推荐算法,也不写页面样式,而是解决整个项目中一个很容易被忽视、但几乎每个接口都会碰到的底层问题:怎么把 Java 对象、AI 返回的大段文本、小程序端接收到的响应数据,统一…

2026/10/18 12:35:29 阅读更多 →
华三三层端口聚合配置详解:静态与动态模式实战指南

华三三层端口聚合配置详解:静态与动态模式实战指南

简介:本资源是一份面向网络工程师、运维人员及备考H3C认证的技术人员的实操型配置指南,聚焦华三交换机三层端口聚合的核心场景——静态与动态两种模式的完整部署方案。内容覆盖聚合口创建、三层路由模式启用、物理端口加入、动态协商配置及关键验证命令&…

2026/10/18 12:35:29 阅读更多 →
Honeywell DCS交换机更换:FTE冗余网络零中断实施指南

Honeywell DCS交换机更换:FTE冗余网络零中断实施指南

简介:本资源是一份面向工业自动化工程师、DCS系统运维人员及Honeywell平台实施技术人员的实操型技术文档,聚焦Honeywell DCS系统中交换机更换这一关键维护任务,解决现场因设备老化、故障或升级引发的网络组件替换难题。文档严格依据Honeywell…

2026/10/18 12:35:29 阅读更多 →
WindRunnerMax:风电SCADA数据清洗、特征工程与功率预测实战

WindRunnerMax:风电SCADA数据清洗、特征工程与功率预测实战

1. 项目概述与设计思路1.1 核心需求解析:风速数据到底卡在哪做风电相关数据工作的人应该都有过这种体验:SCADA系统导出来的风速数据,看似整整齐齐一行行时间戳加数值,真正拿去做分析时却处处是坑。我这次做的这个WindRunnerMax项目…

2026/10/18 12:34:29 阅读更多 →

日新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/18 0:00:55 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/18 0:00:55 阅读更多 →

月新闻

我发现了一个新思路:用 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/18 0:55:02 阅读更多 →
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/17 17:22:31 阅读更多 →
黑夜航拍船只数据集训练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/18 12:16:16 阅读更多 →