🐦 第5章 基于大模型的企业知识库
📄 一句话概括

模型不知道你公司昨天改了什么。它的知识停在一个固定的时间点,而且从来没看过你的内部文件。 不知道的时候它不会说不知道,它会编一个像样的答案——这是最危险的部分。 这一节用十三道题把「凭记忆」和「查资料」摆在一起,两边都不是全对。

📝 本章和前面几章的关系

上一章讲怎么把能力串成流水线,这一章讲往流水线里放什么料。 第 1 章说智能体的四件要素里,「工具」解决的是能动手,这一章解决的是「知道事」。 两件事不一样:能查股价不等于知道你们公司的报销规定。 这一章是第 8 到 16 章所有案例的前置——那些案例里凡是要答业务问题的,背后都挂着一个知识库。

一、模型的知识停在一个时间点

大模型的训练是一次性的。训练截止那天之后发生的事,它一概不知道。 这不是版本问题,是原理问题——权重里装的是那一天的快照。 更关键的是:你的内部文件它一份都没看过。 员工手册、产品手册、报价单、故障处理流程, 这些东西从来没进过它的训练集。 所以问它「我们公司年假几天」,它只有两条路:说不知道,或者编一个。 而它倾向于编——因为它的训练目标就是「给出一个通顺的回答」,不是「给出一个真的回答」。

这两件事合起来,构成了企业用大模型的第一道坎:它对你的业务一无所知,却答得很自信。

二、十三道题,两种答法

演示里把问题分成三组,每组都能看出一点东西。

问题的类 题数 凭记忆答对 查资料答对
通用常识 4 4 / 4 0 / 4
公司内部 6 0 / 6 6 / 6
昨天刚改 3 0 / 3 3 / 3

第一组是常识:首都在哪、水沸点多少。模型全对,资料库里全查不到——公司手册不会写「首都是北京」。 第二组是内部规定:年假、报销、试用期。模型全编,资料全对。 第三组是最近改的:年会地点、新版报销单、食堂开饭时间。模型连「有这回事」都不知道。

十三题合起来:凭记忆 4 题对,查资料 9 题对。两边都不是全对。

三、三条路合起来才够

演示最后还留了一类题:「入职两年半能休几天年假」。 检索能拿到那一整段制度——满一年 5 天、满三年 10 天、满五年 15 天,最高分 0.14,是命中的。 但「两年半算哪一档」这一步,资料里没有,得推。检索把料摆上桌,算那一步归生成。

所以完整的答案拼的是三样:常识靠模型、事实靠资料、推算靠生成。 少了哪一样都出问题:只靠模型会编,只靠资料答不了常识也答不了需要算的,只靠生成容易算错。

四、企业知识库到底解决什么

它不解决「模型笨」。它解决三件事。 一、让答案有出处。 答完能指到第几段资料,人可以核。 二、让更新变快。 改一份文档,几分钟后答案就变了,不用重训模型。

三、让权限有地方管。 谁能看哪份资料,在库这一层就能拦住。 三条里第一条最容易被低估。企业场景里「答对」不重要,「能证明为什么这么答」才重要。

五、什么该进库,什么不该

该进:员工手册、产品手册、售后政策、常见问题、历史工单里反复出现的那些。 不该进:一次性的会议记录、还没定稿的方案、随时会变的临时通知、 以及任何一份你没有权限管好的资料。 有一条经验:能公开给新员工看的,才适合放进公共库。其余的要分库、分权限, 这一条第 5.6 节会展开。

还有一条:先把「最常被问的二十个问题」对应的资料整理好,比把整个网盘倒进去有用得多。 库不是越大越好,是越准越好。

六、动手 Demo:模型知道什么,不知道什么

九份内部制度、四道常识题、六道内部题、三道时效题。同一个问题问两遍:一遍凭记忆,一遍查资料。 最后再看一道「资料够但需要算一步」的题。

def memory(q):          # 只凭模型记忆:会的就会,不会的就编
    if q in GEN_MAP:
        return GEN_MAP[q], True
    for _q, _e, fake in INNER + TIMED:
        if q == _q:
            return fake, False       # 编一个像样的
    return '(不会答)', False

def lookup(q, expect):  # 查资料:检索三段,答案在里头就算命中
    hits = Q.retrieve(q, DOCS, top=3)
    if not hits:
        return '资料里查不到', False, 0.0
    joined = ' '.join(d for _s, d in hits)
    if expect in joined:
        return expect, True, hits[0][0]
    return '资料里查不到', False, hits[0][0]

实跑输出:

--------------------------------------------------------------------
模型知道什么,不知道什么
--------------------------------------------------------------------


  ① 三组问题,两种答法
  --------------------------------------------------------------------

| 问题的类 | 题数 | 凭记忆答对 | 查资料答对 |
|---|---:|---:|---:|
| 通用常识 | 4 | 4 / 4 | 0 / 4 |
| 公司内部 | 6 | 0 / 6 | 6 / 6 |
| 昨天刚改 | 3 | 0 / 3 | 3 / 3 |

  合计 13 题:凭记忆 4 题对,查资料 9 题对。两种都不是全对。

  ② 各挑一句,看它答成什么样
  --------------------------------------------------------------------
  问:员工年假有几天
    凭记忆:年假 15 天(编的)
    查资料:满一年 5 天(对,最高分 0.09)
  问:报销多久到账
    凭记忆:7 个工作日(编的)
    查资料:5 个工作日(对,最高分 0.19)
  问:今年的年会在哪办
    凭记忆:武汉光谷酒店(编的)
    查资料:宜昌国贸酒店(对,最高分 0.18)

  ③ 常识题反而查不到
  --------------------------------------------------------------------
  问:中国的首都是哪里
    凭记忆:北京
    查资料:资料里查不到
  公司手册里不会写「首都是北京」。资料里没有的,查资料这条路就断了。

  ④ 还有一类:资料够,但要算一步
  --------------------------------------------------------------------
  问:入职两年半能休几天年假
    检索最高分 0.14,命中:年假:入职满一年 5 天,满三年 10 天,满五年 15 天,
    需提前三天在系统提交。
    资料是齐的(满一年 5 天、满三年 10 天),但「两年半算哪一档」要推一步。
  检索把料摆上桌,算那一步归生成。这一步算错,就是 RAG 最典型的错法。
  ! 三条路合起来才够:常识靠模型、内部靠资料、推算靠生成。
  很多人以为上了知识库就万事大吉,第一步就踩空——资料里没有的东西,检索是查不出来的。

①第一张表是三组问题的成绩。常识那行凭记忆 4 / 4、查资料 0 / 4;内部与时效那两行正好反过来。 ②「年假」那题凭记忆答「15 天」,查资料答「满一年 5 天」。 注意 15 天这个数在资料里也有——只是属于「满五年」那一档。 编的答案往往不是瞎编,是把别的档位的数搬过来了。 ③常识题那段是本节的关节:公司手册里不会写「首都是北京」,所以查资料这条路会断。 上了知识库不是万事大吉。 ④最后那道「入职两年半」的题,检索最高分 0.14,料是齐的,但「两年半算哪一档」要推一步。 这一步算错,就是 RAG 最典型的错法。 ⑤三条路合起来才够:常识靠模型、事实靠资料、推算靠生成。少哪一样都出问题。

30 秒实验

  1. 挑十个你同事最常问的问题,逐个问一遍模型。答错的那些,就是该进库的资料。
  2. 把你们最常被问的一条规定问三遍,看它三次答的是不是同一个数。不一样就说明它在编。
  3. 数一下你打算放进库的文档里,有多少是「随时会变」的。那些要单独分库。

常见误区

  1. 「模型够强就不需要知识库。」它再强也没看过你们的文件。这是训练数据的问题,不是能力问题。
  2. 「上了知识库就什么都能答。」资料里没有的它照样答不了,该算的那一步它照样可能算错。
  3. 「它说不知道才危险。」反过来。它编一个像样的答案才危险,因为你分不出来。
自测三问(点开对答案) 1. 模型为什么答不了公司内部规定? —— 两件事:时间上它停在一个固定日期,范围上它一份内部文件都没看过。所以它只能编。 2. 为什么常识题上了知识库反而答不出? —— 因为公司手册不写常识。查资料这条路只对「资料里有的东西」有效。 3. 「入职两年半能休几天」这类题难在哪? —— 检索能把制度段落拿到,但「两年半算哪一档」要推一步。料齐不等于答对。

既然模型不懂,那把它训懂行不行?下一节算这笔账:微调到底贵在哪、慢在哪,以及它会拿什么去换。

相关笔记