Cerebras 公开公司知识库搭法:不需要任何人改使用习惯,资料留在原处AI自己去取
- Cerebras 的三名工程师公开了公司内部知识库 Cerebras Knowledge 的搭法,上线三个月,每天被提问超过 15000 次,提问方包括员工、自动化脚本和 Agent。
- 它不要求任何人改变习惯:资料继续留在 Slack、代码仓库、文档系统里,系统去每个平台取数,全部落进同一张 Postgres 表。
- Slack 是最难啃的源。同一批候选会被四种打分方式同时检索:全文匹配、向量匹配、稀有词权重、时间衰减,各补各的盲区。
- 聊天记录不直接拿去做向量。先由模型蒸馏成「一句话问题+摘要+结论+涉及的系统和代码符号」的统一结构,再嵌入。
- 六个检索器各出一份排名,用倒数排名融合合成一份,常数取 60,效果是「几份榜单都靠前」的文档赢过「一份榜单第一」的文档。
每天 15000 个问题,问的人里还有 Agent
Cerebras 的三名工程师最近在公司博客上把内部知识库 Cerebras Knowledge 的搭法整个拆开公开,从数据怎么采集一路讲到答案怎么排序,每一层用了什么参数都写在里面。
这套系统上线三个月,每天被提问超过 15000 次。提问的不只是员工,还有自动化脚本和 Agent。
触发它的场景很多公司都熟悉:Cerebras 的团队分布在机房运维、芯片设计、硬件、训练、推理、云平台等方向,每年进来几百个新人,沟通频道里被同样的三类问题填满:某个东西在哪里、某件事谁最懂、这个名词是什么意思。
① SOURCES 数据源,Slack、Wiki、代码、事故记录 ② DISTILLATION 蒸馏,模型把原始内容抽成统一结构 ③ EMBEDDINGS 向量,存进 Postgres 的 pgvector,3072 维,用 HNSW 这种索引结构快速找到最接近的向量 ④ RETRIEVAL 检索,六份排名并行 ⑤ FUSION + RERANK 融合与重排,先用倒数排名融合再交给小模型重排 ⑥ SYNTHESIS 合成,给出带引用的答案。来源:Cerebras
把资料全搬到一个地方,为什么从来没成过
在公司内部找资料难,难点不在搜索本身,在于资料天生就是散的。每过一个季度,总有人提出同一个「绝妙方案」:以后所有信息都记录到一个平台上,做成唯一的真相源。这个设想在实践中几乎没有成功过。
原因是信息在哪里产生方便,就会在哪里产生:文档里的建议修改、Slack 里的讨论串、GitHub 里的代码引用、Jira 里的状态字段。这些平台各自为自己的场景打磨了很多年。在 Google Docs 里讨论一个 pull request 会是很糟糕的体验。
所以 Cerebras 的第一个决定,是设计一套几乎不要求人改变现有习惯的系统。采集这一侧的做法,就是直接去每个平台把数据抽出来。
- 要求大家以后都写到统一平台
- 每个人多一道工序,执行几周后回潮
- 历史资料还留在原处,两边都不全
- 人继续在原来最顺手的地方写
- 每个源写一个连接器去取数
- 取回来的东西统一格式,落进同一张表
整套东西的核心,是一张表
这个知识库对外提供三件事:一个存内部数据的地方、一个查这些数据的地方,以及一层做身份认证、权限控制、审计和统计的东西。
核心是一张 Postgres 表,里面同时放着向量、原始摘要和元数据,来源不限。系统持续把公司各处的数据灌进来,维持一个随时可查的状态。数据接口被刻意做得简单:不管来自 Slack 讨论串还是芯片设计用的网表文件,都落进同一张向量表,进了这张表就能被同一套接口查到。
每个数据源只需要定义三件事:这是什么数据、怎么连上去、多久取一次。取回来生成的每一行,字段结构完全一样。
这个设计还留了一个口子给别的团队。有些团队本来就有自己的数据库,不想为了进知识库把数据挪到 Slack 或文档系统里。做法是把这类源当成插件脚本:团队提一个 pull request,交一个小的 Python 模块,负责从自己的系统读数据、吐出符合那张表结构的行,再配一条数据源记录。只要写进同一个库、用同一套字段,剩下的整条链路一行都不用动。
Slack 里最难的事,是分不清哪句话有用
Slack 是他们最看重、也最难处理的数据源,公司里最新的工程讨论都发生在那里。一开始他们试过最省事的办法:把原始文本直接做成向量去搜。很快发现单靠向量捞不全。
问题出在聊天记录本身的三个特点。第一,信息密度差得极远,「好的收到,谢谢」和一整段讲内核实现的解释,在系统眼里都只是一条消息。第二,消息长短不一,而短消息在向量相似度上经常压过更长、更详细的那条。第三,一条消息的含义往往取决于它前后的对话。
你在群里搜「恢复卡在清单加载之后」。真正解决过这个问题的那条回复,可能一个原词都没用,说的是「checkpoint 在 NFS 挂载点上卡住了」;而字面最像的那条,是八个月前一个已经作废的老办法;至于「好的收到,谢谢」,它和几乎所有问句都有点像。
他们的解法是让同一条内容同时被几种检索方式覆盖,每一种补上别的短板。同一个查询、同一批四条候选,切换打分方式,谁被抬起来、谁被压下去就变一次(数据取自原文示例)。