模型怎么查资料,又会在哪儿查错

用本地的两个小模型实测:Embedding 把一段话变成 1024 个数,意思相近的离得近;在一本虚构的员工手册上按问题找出最相近的 3 段,交给 Qwen3.5 4B 回答,对比不查资料时的回答;再看这个小 Embedding 模型在编号上为什么只领先一点点,关键词检索和混合检索怎么补,以及检索拿错段时模型会怎样。

模型基础Embedding向量检索RAG实测2026-10-08

文字稿约 3300 字 · 按画面章节整理

问模型一个公司内部的问题

问本地的一个小模型:今年的年假没休完,明年还能用吗?它答得很干脆:可以结转到下一年,但累计不能超过 20 天。可我们的员工手册写的是:可以顺延到第二年 3 月 31 日前,要在当年 12 月 31 日前申请。它说的 20 天,手册里根本没有。它没读过这本手册。把手册里这一段,连同问题一起交给它,这回就答对了。可手册不止一段。该交给它哪几段?又是怎么找到的?

今天,我们用本地的两个小模型实测一遍:一个负责找资料,一个负责回答。

一本虚构的员工手册

先看资料。这是我们为这期视频编的一本员工手册,公司、规定、型号、错误码,全是虚构的。一共 5 个部分。我们按规定切段,一条规定一段,一共 22 段,883 个字符。比如这一段,讲年假怎么顺延。还有几段,专门列编号:笔记本型号,用 LT 开头;报销系统的错误码,用 E 开头。

模型能用的,只有两样东西

模型回答问题,能用的只有两样东西:一是训练时学到的,记在它的参数里;二是这一次请求里,你交给它的内容。这本手册,它没学过,只能放进请求里。可一次请求能装多少,有上限,这叫上下文窗口,按 token 计数,token 就是模型读写文字的小单位。回答用的这个模型,在这台电脑上,窗口是 32768 个 token。还是开头那道题:整本手册连同问题放进去,是 825 个 token,模型读了 1.29 秒;只放相关的 3 段,是 182 个 token,读了 0.27 秒。整本放进去,输入是 3 段的 4.5 倍;读的时间也是好几倍,不过这台机器上,每次测的都差得不少。这道题,两种放法都答对了。可资料越多,差得越多;多到超出窗口,就根本放不下。所以,要先挑出相关的几段。

把一段话,变成一串数

怎么挑?第一步,把每段话,变成一串数。干这件事的,是另一个小模型:Qwen3 Embedding 0.6B,约 6 亿个参数,文件 639 MB。给它两个字,“你好”,它返回 1024 个数;给它手册里最长的一段,61 个字符,返回的还是 1024 个。不管多长,都是这么长的一串。这一步叫 Embedding,中文叫嵌入;得到的这串数,叫向量。打个比方:就像给每段话,在地图上标一个位置,意思相近的话,就标得近。只不过,这张地图不是两个方向,而是 1024 个。

两个向量有多近?看方向

两个向量,怎么算近不近?先看只有两个方向的情况:每个向量,都是从原点出发的一支箭头。方向一样,不管长短,就算最像;方向垂直,就算不相关。这叫余弦相似度,英文 cosine similarity,只看两支箭头的夹角:方向相同是 1,垂直是 0。Ollama 返回的向量,长度都已经是 1,算起来就很简单:第一个数乘第一个数,第二个乘第二个……1024 个乘积加起来,就是余弦相似度。这两句话,算出来是 0.734。

五句话,两两算一遍

我们自己写了五句话,两两算一遍。苹果手机的电池,和 iPhone 充一次电,说法完全不同,意思一样:0.734,两两之间最高。同样是“苹果”,一个说手机,一个说水果:0.571,低了不少。可换成不提苹果的 iPhone 那句,跟水果这句,只有 0.480。A 和 B 意思一样,可只有 A 跟 C 一样,写了“苹果”。意思最要紧;可看起来,字面相同,也会把分数往上拉。跟天气那句比,都不到 0.3。毫不相干,也不是 0。所以,单看一个分数,说明不了多少;要拿来比,看谁排在前面。

先把手册转成向量,再按问题找

现在,用它来查手册。先把 22 段,每段转成一个向量,存起来。在这台电脑上,22 段一次转完,用了 0.49 秒。这一步只做一次。来了一个问题,就把问题也转成向量,每次二三十毫秒。这个模型的说明里要求:问题前面,加一句任务说明,还建议用英文写;手册的段落,不用加。再拿问题的向量,跟 22 段一一算相似度,从高到低排好。排第一的,正是讲年假顺延的那段;第二、第三,是年假天数和病假。取前 3 段,交给回答的模型。

把找到的几段,放进提示词

找到的 3 段,按这个格式,放在问题前面,再加一句:只根据参考资料回答,资料里没有的,就说不知道。先检索,再生成,这套做法叫 RAG,全称 Retrieval-Augmented Generation,检索增强生成。我们一共问了 6 道题,答案都只在手册里。不查资料,一道也没答对:有 3 道,它编了一个像样的答案;另外 3 道,它没有给出答案。查了再答,6 道全对。回答的模型,名字里的 4B,指的是语言模型部分,约 40 亿个参数。我们关掉了它先打草稿的思考,温度设成 0,也就是每一步都挑最可能的那个 token;每道题只问一次。

换成编号,向量还分得清吗?

再看编号。这三道题,问的都是编号:错误码 E-4012,型号 LT-2209,还有错误码 E-4021。三道题,向量检索都把对的那段,排在了第一。可第一和第二,挨得更近了:E-4021 这道,第一名 0.616;第二名是 E-4011,0.607,只差 0.009。用日常说法问的那三道题,第一第二至少差 0.093。我们猜,是因为 E-4011 和 E-4021 只差一个数字,这几段错误码,也都以“报销系统提示”开头。模型的说明要求加任务说明;我们故意去掉它,看看这么小的差距,有多容易翻:E-4011 得了 0.579,排到了 E-4021 的 0.577 前面,排错了。只取第一段的话,模型拿到的是错的那段,它就说,资料里没提到 E-4021。E-4012 那道还排第一,可只领先 0.001。所以,编号还能排对,可领先得这么少,靠不住。这只是一个 0.6B 的 Embedding 模型,别的模型,我们没有测。

关键词检索:按字面找

编号这种东西,按字面找,正好能对上。常用的一种办法叫 BM25:BM 是 Best Matching,最佳匹配,25 是它在研究里的编号。它数一数,问题和每一段,有哪些词相同;越少见的词,分越高。中文词之间没有空格,我们就按相邻两个字来切。E-4021 怎么解决:22 段里,只有 1 段含有 E-4021,它得了 2.81 分,其余 21 段,全是 0 分。可它也有找不到的时候。问:电脑密码忘了,怎么办?手册里写的是“忘记登录口令”,跟问题,一个词都对不上。整本手册,只有“电脑”这个词对上了,在讲电脑申领的那段,3.79 分;讲口令的那段,跟另外 20 段一样,0 分。把关键词找到的这一段交给模型,它说:资料里没提到。换成向量检索,讲口令的那段,排第一。

两种一起用:混合检索

关键词检索,换个说法就找不到;向量检索在编号上领先得很少,问题的写法一变,就可能翻。不少检索服务,都支持把两种一起用,叫混合检索。常见的合并办法,是看名次:每一段,在两份名单里,各有一个名次,各换成一个分,加起来再排。拿刚才故意去掉说明、排错的那次来试:E-4011,向量第 1,关键词没找到,合起来 0.0164;E-4021,向量第 2,关键词第 1,合起来 0.0325,排回了第一。6 道题都算一遍:向量检索,6 道都答对;关键词检索,答对 5 道,错在密码那道;混合检索,6 道全对。不过,密码那道,混合检索把电脑申领排到了第一,讲口令的那段排第二;取了 3 段,才答对。这几道题,是我们特意设计的,各难住一种办法;只有 6 道题,说明不了哪种更好;只能看出,两种办法错的地方不一样。

检索拿错了段,模型会怎样?

检索也会拿错。拿错了,模型会怎样?我们给每道题,都只放排第二的那段,也就是错的那段。提示词里写着“资料里没有的,就说不知道”,6 道题,它都说资料里没有。把这句去掉,有 3 道,它照样给了一个像样的答案,都跟手册对不上。比如问 E-4012,给它的是讲 E-4021 的那段,它答:E-4012 通常表示,报销单缺少必要的附件。手册里写的是:这张发票已经报销过。“缺少必要的附件”这个说法,不在给它的那段里,整本手册里也没有。这 3 道,它都没提醒:给它的资料,跟问题对不上。那句话也有代价:问电脑密码,只给它讲登录口令的那段,它也说资料里没有,没把口令和密码对上。同样,这只是一个小模型,每道题问一次。

给模型接上资料之前,先查这五件事

最后,给模型接上资料之前,先查这五件事。第一,切多大:一段只讲一件事,我们是一条规定一段。第二,取几段:别只取一段。故意去掉说明那次排错了,可取了 3 段,对的那段还在,就答对了。第三,问题怎么写:照 Embedding 模型的说明来,该加的说明要加上。第四,问编号、型号、错误码,配上关键词检索。第五,看看每次命中的是哪几段;提示词里写明,资料里没有,就说不知道。

今天我们看了,模型是怎么查资料的:把文字变成向量,按意思找出最近的几段,再交给模型回答。所以,模型答错了,先别急着怪它,看看它查到的是哪几段。