文章目录
-
- 写在前面
- 一、先回答三个问题,路线基本就定了
- 二、六条路线
-
- [2.1 云端托管:把资料交出去,换一个对话框](#2.1 云端托管:把资料交出去,换一个对话框)
- [2.2 纯本地词法索引:把资料变成一套能查的索引](#2.2 纯本地词法索引:把资料变成一套能查的索引)
- [2.3 向量检索:换个说法也能找到](#2.3 向量检索:换个说法也能找到)
- [2.4 混合检索:两条路都走,再统一排序](#2.4 混合检索:两条路都走,再统一排序)
- [2.5 全网搜索:不建索引,实时搜](#2.5 全网搜索:不建索引,实时搜)
- [2.6 结构化查询:表格类资料,别当文档翻,当数据库查](#2.6 结构化查询:表格类资料,别当文档翻,当数据库查)
- 三、六条路线对比
- 四、真正决定成败的,是检索之外的四件事
-
- [4.1 抽取:决定整条链路的上限](#4.1 抽取:决定整条链路的上限)
- [4.2 切块:太大不精确,太小丢上下文](#4.2 切块:太大不精确,太小丢上下文)
- [4.3 元数据:最容易忽略,也最容易毁掉一个库](#4.3 元数据:最容易忽略,也最容易毁掉一个库)
- [4.4 评测:没有基线,优化全是玄学](#4.4 评测:没有基线,优化全是玄学)
- 五、怎么选
- [六、一条容易含混的边界:检索离线 ≠ 全链路离线](#六、一条容易含混的边界:检索离线 ≠ 全链路离线)
- 七、五个常见误区
- 结语
想给自己攒一套"查得到、敢引用"的资料体系,到底有几种做法?
写在前面
两年前我开始攒自己的技术资料:产品手册、培训课件、项目复盘、故障记录。它们在网盘、笔记软件、聊天收藏和几个移动硬盘角落里各躺一部分。
问题从来不是"没有资料",而是另外三件事:
- 想找的时候找不到------关键词想不起来,搜出来一堆不相干的;
- 找到了不敢用------不知道这份是哪个版本、还适不适用;
- 用完了不沉淀------这次查过的东西,下次还得从头再查一遍。
我前后试过四五种做法,踩了不少坑。回头看,这些方案的分歧其实只有一处:从问题到最终答案之间,中间那一层是怎么做的。
也正因如此,它们的骨架长得都差不多------问题进去,中间层处理,结果出来:

先说结论:没有最好的方案,只有和问题类型匹配的方案。 而对绝大多数人来说,第一步并不需要走到最复杂的那个。
一、先回答三个问题,路线基本就定了
在挑工具之前,先问自己三件事。
问题一:你主要问什么类型的问题
| 你常问的 | 本质上需要 | 倾向的路线 |
|---|---|---|
| "X 的默认值是多少""报错 53100 什么意思" | 精确命中,一个字都不能错 | 词法检索 |
| "上次磁盘满那次是怎么处理的""有没有类似案例" | 语义相似 | 向量检索 |
| "这个方案该怎么写""帮我总结一下" | 素材和成文都要 | 混合检索 |
这一条最要紧。如果八成的问题都是"查一个确切的值",那向量方案就是杀鸡用牛刀 ------而且这把牛刀还容易切歪:embedding 对 53100 和 53300 这类数字并不敏感,很容易张冠李戴。
问题二:语料有多大、有多脏
- 几十到几百份:什么方案都扛得住,重点在抽取质量;
- 上千份:要开始考虑增量更新、去重、元数据一致性;
- 几万份以上:才真正用得上向量索引的检索效率。
"脏"指的是这些:扫描版 PDF(抽不出字)、截图堆出来的 PPT(只能抽出标题)、跨页表格(结构会散)、命名混乱(新建文档(3).docx)。它们和选哪种检索算法无关,却直接决定知识库有没有用。
问题三:结果能不能错,资料能不能出网
- 自己写东西时查资料,错了大不了重查------要求低;
- 给客户出方案、写实施步骤,错了要担责任------每句话得能追到出处;
- 手上是客户的敏感资料------内容不能随便往云端送。
这三条会决定能不能接受"黑盒托管",以及是否需要全链路离线。第六节专门讲这件事。
二、六条路线
下面每条路线都按同一个顺序讲:一句话定位、技术路径、从提问到结果的流程、要准备什么、强项、代价、适用场景。路线之间不是互斥的,读到后面你会看到它们如何组合。
2.1 云端托管:把资料交出去,换一个对话框
一句话定位:上手最快,但中间是黑盒。
技术路径 :你把文档传上去,平台负责解析、分块、建索引(多数是向量加关键词的混合),你对着对话框提问,它返回一段答案。
从提问到结果:
你提问 → 平台的检索(你看不见) → 大模型组织语言 → 返回一段答案
中间那一段你看不见,也调不了。你拿到的是"答案",不是"材料"。

要准备什么:一个账号,外加一点上传的耐心。技术门槛几乎为零。
它的强项:
- 当天就能用上,验证"我到底需不需要知识库"最快;
- 跨设备、可分享,团队协作天然支持;
- 解析、分块、向量化这些脏活由平台承担;
- 平台一般会持续迭代,模型和解析能力自己会变好。
它的代价:
- 不可下钻:只给你一段答案,拿不到"第几页第几行"。想问"这段原文在哪",往往只能自己翻;
- 分块和排序不可调:针对你的资料类型调不了;
- 内容出网:资料进了第三方,合规上算"外发";
- 平台锁定:换一家等于从头再来;
- 答案不可复核:话说得通顺,但你手上没有材料去核。
适合:个人速查、非敏感资料、团队共享。
为什么它只解决一半问题:你拿到的是结论,不是证据。自己查着玩时这无所谓;一旦要把结论讲给别人、写进交付物,这就是硬伤------而这,正是下一条路线的起点。
2.2 纯本地词法索引:把资料变成一套能查的索引
一句话定位:检索在本地,命中能落到行。
思路很朴素:把文档拆成文本,切块,建倒排索引,用关键词检索,命中之后按行读原文。
技术路径:
文档 → 抽取文本(保留行号)→ 切块 → 写入倒排索引(FTS5 / Lucene)→ 查询时按 BM25 排序
从提问到结果:
你的问题 → 切词 → 关键词召回(BM25 排序)→ 拿到若干块的摘要
→ 挑一块 → 按行读出原文 → 你看到的是"第 1240--1305 行"
关键在最后一步:检索只读索引,真正读文档是"按行取一小段"。所以几百页的手册也不会把上下文撑爆。

要准备什么:
- 一台电脑(不需要 GPU);
- 一个脚本语言环境(Python 就够了);
- 一个单文件数据库(我用的是 SQLite,靠它的 FTS5 扩展做倒排索引和 BM25 排序);
- 一颗愿意处理脏数据的心------大部分工作量在抽取和切块,不在检索。
它的强项:
- 精确:参数名、错误码、命令、函数名,逐字匹配,不会张冠李戴;
- 可复核:命中即可定位到行,出处可查;
- 零成本:没有模型、没有接口费用、没有服务费;
- 可离线:检索全程不联网(注意,说的是检索这一层);
- 可增量:加一份文档就索引一份,几十秒的事;
- 可控:分词、切块、排序权重全都能改。
它的代价:
- 词形差异会漏 :你问"报错",文档写"错误码";你问"磁盘满了",文档写
no space left on device。只能靠同义词表人工补,长尾无穷; - 语义盲区:问"系统为什么变慢",它不会自动联想到"执行计划""WDR 报告"这些概念;
- 依赖措辞:你的问法和文档写法越接近,效果越好;
- 规模上限:几十万块还行,到千万级就该换正经的搜索引擎了。
适合:技术资料查证、参数/错误码/命令查询,以及任何"必须给出处"的场合。
四个值得单说的注意点:
- 中文分词 。默认分词器会把一整句中文当成一个词,检索基本废掉。可以入库时把中文拆成相邻二元组(
关键词→关键键词),查询时同样拆开,再用短语查询锁定相邻关系。零依赖,效果接近分词。 - 切块不能只在空行断 。只在空行处切块,结果遇到表格密集的文档------比如通篇没有空行------产出一个 11.9 万字的巨块,检索等于没检索。可以加硬上限(超过目标长度两倍强制断开)。
- PPT 的备注要单独抽。一份课件的幻灯片正文是 8987 字,演讲者备注里还有 13821 字。不抽备注,等于丢掉六成内容。
- 元数据比想象中重要。这一点值得单独一节,见第四节。
2.3 向量检索:换个说法也能找到
一句话定位:语义泛化强,但说不清"为什么是它"。
技术路径:
切块 → 每块算一个向量(embedding 模型)→ 存进向量索引 → 查询时算问题向量 → 找最近的 k 个
从提问到结果:
你的问题 → 向量化 → 最近邻检索(ANN / HNSW)→ 取回若干片段 → 交给大模型组织

要准备什么:
- 一个 embedding 模型(本地跑,2--3 GB 内存,bge / m3e 这类就够);
- 一个向量索引(
sqlite-vec适合个人用;规模大些上 Milvus / Qdrant / pgvector); - 想效果更好,再加一个 rerank 模型。
它的强项:
- 语义泛化:换说法、换时态、中英混杂,都能对上;
- 口语友好:不用学"怎么搜",正常说话就行;
- 跨语言:中文问、英文资料答,天然支持;
- 擅长"找相似":相似案例、相似工单,这是词法完全做不到的。
它的代价:
- 符号精度差:数字、型号、错误码、缩写容易混淆;
- 不可解释:只能说"这段最相似",说不出为什么;
- 换模型等于重建:换了 embedding 模型,之前算好的向量全部作废;
- 成本:模型常驻内存,一次性向量化要时间;若走云端接口,资料还要再出网一次;
- 幻觉风险高:相似不等于正确,最容易把"看起来相关"当成答案。
适合:语料规模大、提问口语化、需要语义发现和跨语言的场景。
它和词法的分工:词法擅长"字面",向量擅长"意思"。两者不是替代关系------这正是下一条路线要处理的问题。
2.4 混合检索:两条路都走,再统一排序
一句话定位:工业界的默认答案。
既然词法和向量各管一头,最稳的做法就是两条路都走,然后把结果合起来。
技术路径:
问题 → 分叉:① 关键词召回 top-20 ② 向量召回 top-20
→ 融合(RRF / 加权 / UNION)→ 重排(rerank 或大模型)→ 取 top-k
从提问到结果:两路各出一批候选,融合后统一排序,再挑前几条交给模型组织。精确的靠关键词兜底,口语化的靠向量兜底。

要准备什么 :前两条路线的全套,外加一个融合层。听着复杂,其实如果底层用的是支持 SQL 的数据库(比如带向量扩展的关系库),融合用一条 UNION ALL 加聚合就能搞定,不必引入额外中间件。
它的强项:
- 兼顾精确与语义,效果最稳;
- 失败模式更友好:一条路失效,另一条还能兜底;
- 可以按场景调权重(查参数偏关键词,查案例偏向量)。
它的代价:
- 两套索引、两套调参,维护成本翻倍;
- 融合权重怎么定?没有客观标准,只能拿真实问题试;
- 排障更麻烦:结果不好时,得先判断是哪一路出的问题。
适合:语料上千份、提问类型混杂、对效果有要求且愿意长期维护。
2.5 全网搜索:不建索引,实时搜
一句话定位:覆盖最广,但没有沉淀。
技术路径:
问题 → 搜索接口 → 抓取前几条网页 → 清洗正文 → 交给模型组织
从提问到结果:实时搜、实时读、实时答,一次一清。没有任何东西留下来。

要准备什么:一个搜索接口(不少服务有免费额度),一个能抓正文的脚本。
它的强项:
- 覆盖最广:什么都能问;
- 零维护:不用管语料,也不用管索引;
- 时效性强:最新版本、最新公告只有网上有。
它的代价:
- 不可控:结果质量看运气,推广站、过期内容混在其中;
- 不可复核:网页随时会变,今天引用的链接明天可能就打不开;
- 没有沉淀:同一个问题问十次,十次都从头搜;
- 和你自己的资料无关:手边的内部文档、过往经验,它一概不知道。
适合 :冷启动补盲、查最新公开信息、本地确实没有的内容。它是补充,不该是主力。
2.6 结构化查询:表格类资料,别当文档翻,当数据库查
一句话定位:数值最准,但只适合本来就有结构的数据。
这一类最容易被忽略,可它偏偏是某类问题的最优解:参数表、兼容矩阵、版本对照表这类强结构化资料,别当文档去检索,先把它们整理成表,交给数据库去查。
技术路径:
Excel / CSV → 清洗成表 → 建表(字段:参数名、默认值、取值范围、是否需重启...)
→ 用 SQL 查;或者建图谱,用图查询
从提问到结果:
"max_connections 默认多少" → 直接 SELECT 默认值 → 返回一个确切数字

要准备什么:一张整理规范的字段表(这一步是人工活),外加一个数据库。
它的强项:
- 数值最准:查出来就是那个数,不存在"相似度";
- 可聚合:能回答"哪些参数需要重启""V2.0 和 V3.0 差在哪儿"这类跨行问题;
- 小而快。
它的代价:
- 覆盖面窄:只适合本来就是表格的资料;
- 建设靠人工:把散落在手册里的参数整理成表,很费时间;
- 不适合叙述性内容。
适合:参数表、兼容性矩阵、错误码表、价目表、条款对照。
实操建议:文本检索和结构化查询并存。文档走前者,表格走后者。在同一个知识库里,这只是两个入口。
三、六条路线对比
| 建设成本 | 维护成本 | 精确度 | 语义能力 | 可复核 | 离线 | 适合规模 | |
|---|---|---|---|---|---|---|---|
| 云端托管 | 极低 | 极低 | 中 | 中高 | 弱 | 否 | 任意 |
| 本地词法 | 中 | 低 | 高 | 低 | 强 | 是(检索层) | 百--千份 |
| 向量检索 | 中 | 中 | 低 | 高 | 弱 | 视模型 | 千份以上 |
| 混合检索 | 高 | 高 | 高 | 高 | 中 | 视模型 | 千份以上 |
| 全网搜索 | 极低 | 无 | 低 | 中 | 弱 | 否 | 不适用 |
| 结构化查询 | 中高(人工) | 低 | 极高 | 无 | 强 | 是 | 表格类 |
注意"可复核"这一列,它不是技术指标,而是信任指标:给人做交付时,它比准确率还要紧------因为你得能指着某一行说"这里写的"。
四、真正决定成败的,是检索之外的四件事
选完路线,很多人会以为剩下就是调算法了。实际正相反:算法大概只占两成工作量,另外八成在这四件事上。
4.1 抽取:决定整条链路的上限
抽取抽不出来,后面再好的检索也无从谈起。
- PDF 得有文字层;扫描件必须先做 OCR,否则入库的只是空壳;
- PPT 要抽正文和备注;
- Word 里的表格、Excel 的多个工作表,都得单独处理;
- 转换失败的文件不要静默跳过------要有一份"体检报告"把它们列出来。否则你会以为自己有两百份资料,实际能用的只有一百二十份。
4.2 切块:太大不精确,太小丢上下文
- 600--1000 字一块比较稳;
- 优先按标题边界切,其次按空行切,最后一定要有硬上限兜底;
- 表格类文档要特殊处理,否则会被切得七零八落。
4.3 元数据:最容易忽略,也最容易毁掉一个库
一份文档只有正文是不够的。你还需要知道:它属于哪个产品、哪个版本、什么类型、什么时候进来的、适用于谁。
元数据最好从目录结构和文件名里来,而不是另建一张人工维护的表------人工表一定会和实际文件脱节。
4.4 评测:没有基线,优化全是玄学
建完库不做评测,等于没建。
方法很简单,但有效:拿 10--50 个自己真会问的问题,逐条看前三条结果里有没有正确文档。 命中率低于八成先别急着上线,回头查是抽取的问题、切块的问题,还是元数据的问题。
这件事花不了两小时,却能省掉后面几个月的反复怀疑。
五、怎么选

把决策树翻译成人话,就是四条:
- 资料敏感、不能出内网 → 只看本地路线。再问自己是否主要查精确值:是就纯词法,不是就本地词法 + 本地向量。
- 不敏感、只想速查 → 直接用云端托管,不必自建。
- 语料超过三千份,或者你习惯随口问 → 上混合检索。
- 其他情况 → 从纯本地词法起步。
第 4 条是比较推荐的:先用一两百份把流程跑通,比一上来就设计一套完美架构有用得多。 这样会在跑通的过程中真正搞清自己的资料长什么样、问题属于哪一类------这些信息比任何选型框架都重要。
跑通之后,再按需要往上加:
纯本地词法 → 加向量(双路召回) → 加 rerank → 加结构化查询
↑ 大多数个人知识库停在这里就够用了
每加一层之前,先问自己一句:它解决了我现在的哪个具体问题? 答不上来就别加。
六、一条容易含混的边界:检索离线 ≠ 全链路离线
"检索在本地"不等于"资料不出网"。

分开看就很清楚:
- 抽取、切块、建索引、检索------这些都在本地机器上跑,确实不联网;
- 但大模型的推理如果走云端接口,那么检索出来的片段、问题、对话历史,都会被发出去;
- 没被命中的文档、整个索引、原始文件------不出网。
所以对外表述时,准确的说法是:
"检索完全在本地,只有被读取的那几段内容会进入分析环节。"
而不是:
"资料不出内网。"
要真正做到全链路离线,得把模型也换成本地部署(vLLM、Ollama 这类 OpenAI 兼容端点都行,改配置不改代码)。代价要认:
- 需要 GPU,跑得动的模型基本要几十 GB 显存;
- 能力下降,成文质量明显不如云端;
- 多一套推理服务要维护。
有意思的是:离线的瓶颈在生成模型,不在检索。2 GB 的 embedding 随手就能本地跑,几十 GB 的生成模型才是门槛。所以"要不要上向量"和"能不能离线",本来就是两件独立的事,别混在一起谈。
实操建议:按敏感度分级。公开资料随便用云端;客户资料脱敏后再进;客户的核心配置、账号、生产数据样本,干脆别进知识库。
七、五个常见误区
误区一:"上了向量就智能了"
向量的价值是"换个说法也能找到",不是"更懂业务"。它解决召回,解决不了"文档里根本没有"。
误区二:"把文档丢给 AI 就行"
不切块、不做元数据、不评测,结果就是:每次回答都很像样,但每次都不太对。
误区三:"检索能变出没有的知识"
这是最危险的一条。库里没有的东西,任何检索方案都变不出来------它只会让模型更自信地编一个。
误区四:"不用管元数据,反正能搜到"
搜到和能用是两件事。没有版本、没有适用范围,你搜到的可能是三年前已经作废的说法。
误区五:"建完就完事了"
资料会更新、会新增、会作废。增量同步加定期体检是持续成本,不是一次性投入。
结语
回头看,这件事最难的部分从来不是"用哪个算法",而是:
- 想清楚自己要问什么问题;
- 把资料整理到能被检索的程度;
- 让每条结论都能追溯回原文。
前两条是体力活,第三条是信任的基础。
如果只是想在手机上随手查点东西,云端产品足够;但如果要拿这些资料去做交付、去给别人讲方案,那么可复核这三个字,会一步步把你导向自建这条路。
至于向量、混合、重排------它们是这条路上的可选升级,不是起点。