ARTICLE · 1042299
喂了一百份文档还是答非所问,问题不在模型在切片
喂了一百份文档还是答非所问,问题不在模型在切片 · 按结构切
leaf=""
材料错了,模型越强编得越像
我把这几年攒的资料全喂了进去。
一百多份文档,项目复盘、会议记录、方案稿、各种表格。我想得很美,以后遇到事问它一句,它替我从这些资料里找答案,相当于给自己配了个记得住所有事的助理。
做完了,我问了第一个问题。
去年那个项目为什么延期,主要原因是什么。
它回了一段话,语气很笃定,说主要有三点,资源不足、需求变更、外部依赖。
我看完就知道完了。这三条放之四海皆准,任何一个延期的项目都能套。它不是从我的文档里找到的答案,它是用常识编了个像答案的东西。
后面我又问了几个,有时候能答对,有时候答得似是而非,还有一次它把两个不同项目的事混在一起说了。
那三天我一直在想,是模型不行吗。
第一反应是换个更强的模型。
我换了一个当时评价很好的,又试了一遍。好了一点,但没好到哪去。有些问题还是答不准,还是会把不同文档的内容混在一起。
我又加了些措施,比如在提问的时候把背景说得更详细,把范围限定得更死。有用,但代价是我得记得每份文档大概讲了什么,才能问得准。
可我要是记得住,我还需要它干嘛。
那三天我卡在这个死循环里。直到我搞清楚它到底是怎么找答案的,才明白问题出在哪。
这是最反直觉的一点。
我原来的想象是,我把文档给它,它就「读」完了,存在脑子里。我问什么它从脑子里翻。
不是这样。
实际过程是,你的文档会先被切成一小片一小片。然后把每一片变成一串数字,你可以理解成这段内容的指纹。你的问题来了之后,也会被变成一串数字,然后系统去比对,找出指纹最接近的那几片。
最后,模型拿到的只有这几片。它基于这几片回答。
看明白这个过程,问题就清楚了。
如果第一步切的时候切得不对,或者第二步比对的时候没找到真正相关的内容,那模型再强也没用。它拿到手的材料就是错的,它怎么可能答对。
我当时的问题就出在这,不在模型。
我最开始用的是默认设置,按固定字数切。比如每一片五百字,切到五百就砍断,下一片从五百零一开始。
这个切法有个致命问题,它不管你在说什么。
一句话正好写在第四百九十八个字,被切成了两半。前一断在后一片,后一半在后一片。等系统去找的时候,它可能只找到其中一片,那这句话就是残缺的。
更要命的是表格。一张完整的表,被拦腰切成三段。你问表里某个总数是多少,系统找到的可能只是中间那段,模型看到的表是残缺的,它要么答不出来,要么开始编。
我后来改了切法。不按字数切,按结构切。一份文档里有多少个小标题,就按小标题切。每个小标题下面那一段,作为一整片。
这样切出来的片,每一片都是完整的一块内容。
还有个细节很有用。给每一片加上它的标题作为前缀。比如这一片来自《2023年项目复盘》的第三节,就在片头写上这个。这样系统在比对的时候,能靠标题提高准确度。
我改完这两个之后,同一个问题的答案质量立刻不一样了。
切片改好之后,还是有问题。有些问题它答不上来,说资料里没有,但我明明记得有。
这就是第二步出问题了,它没找到。
比对指纹这件事,不是你想象的关键词匹配。它是语义层面的相似。这带来一个奇怪的现象,你用文档里的原话去问,反而可能找不到。因为你以为的相似,和它算出来的相似,不是一回事。
我试出来的办法是,一个意思用几种不同的说法问一遍。第一次用书面说法,第二次用口语,第三次换个角度。三次里有两次能找到,就够用了。
还有个设置我调了,让它每次多找几片。默认可能找三片,我调到八片。多找几片,命中的概率就大。代价是给模型的材料变多,回答会慢一点,这个代价我愿意付。
前两个坑填了之后,它答得准了很多。
但我还是不敢用。因为它答了,我不知道它从哪看的。
有一次它给了我一个数,我去翻原文,翻了半小时没找到。后来发现是它把两个地方的数自己算了个平均值,但它说得跟原文里就有一样。
从那以后我在指令里加了一条硬要求。回答必须说明来自哪份文档的哪个部分。说不出来源的,直接回答不知道。
加了这句之后,它开始会标出处了,而且经常会出现「资料里没有提到」这种回答。这种回答看着让人失望,其实特别值钱。因为它诚实。
有出处还有一个好处,我能点过去核。核过几次发现都对,我才敢真的信它。
我后来拿同一批文档试过几个做知识库的工具。
分数是五分制,我自己用完的体感。
这一轮跑下来有个感受很明显。开箱即用的工具省心,但你没法调切片,遇到特殊文档就束手无策。能自己配的方案灵活,但你要懂上面说的那些东西,还得花时间调。
我的选择是,日常用开箱即用的,遇到重要的、结构特殊的资料,再单独处理。
按结构切,不按字数切。这是第一条,也是最重要的一条。
每片加上标题前缀,让系统有更多线索。
一次多召回几片,宁可慢一点。
必须标出处,说不出处就回答不知道。这条不能省。
表格单独处理。表格不适合切,我会把重要的表单独导出来,当成独立的一份资料,不走切片。
重要的答案核一遍。它给了出处之后,我会点过去看一眼,尤其是要拿去汇报的数。
改完这些之后,我再问那个问题,去年那个项目为什么延期。
它给我的答案里,有具体的时间点,有具体的会议记录出处,说某月某日那次评审会上,因为某个外部接口的时间没谈拢,导致后面整体推了两周。
我去翻了那份会议记录,确实有。
那一刻的感觉跟第一次完全不同。它终于不是在编了,它是在我的资料里真的找到了东西。
现在这个知识库我每天都在用。它不一定每次都对,但它会告诉我它从哪看的,我能核。
做完这件事,我最大的收获不是知识库能用了。
是我想明白一件事。我们特别容易把 AI 当成一个整体,它不行就换一个更强的。但实际上它是好几个环节串起来的,找材料是一个环节,写答案是另一个环节。
你换了更强的模型,只改进了后一个环节。如果材料本身就是错的,模型越强,它编得越像真的。
这个道理放到别的事上也成立。很多时候结果不好,不是最后一环的问题,是最开始那一步就歪了。
这一篇聊的是知识库为什么答不准。下一篇聊个更有成就感的,我不会写代码,却用 AI 做了个部门都在用的小工具。
我是 Jeff,每天用 AI 解决一个真实问题。这一篇,是我替你亲自试过的。
如果你觉得今天这篇有收获,欢迎点赞、在看、转发三连,我们下篇见
THANKS FOR READING