RAG 重排别再喂大模型了421M 开源小引擎33 毫秒给候选文档打完分做过 RAG 的人大概都经历过这个瞬间用户问一句话后台先哗啦啦捞出五十段资料然后把这五十段原封不动塞给大模型——“你帮我看看哪几段最相关”。页面转了两三秒账单上多了一串 token。好不容易出结果模型还在开头写了一段“好的根据您提供的资料……”。最近技术社区里有个思路被反复讨论排序这件事根本不需要一个会写作文的模型。一个叫 Laya 的开源小引擎把重排变成了“涂答题卡”——它不生成一个字33 毫秒就能给一道题打完分。一、先说明白RAG 的“重排”到底在排什么用图书馆打个比方。你问管理员“公司出差住宿能报多少”他先凭关键词从书架上抱来五十本书——这一步叫召回讲究的是“别漏”。但关键词很笨。“住宿”“报销”“标准”这几个词年会通知里有员工旅游方案里也有甚至招聘启事里都有。所以还得有个老编辑快速翻一遍这五十本挑出真正能回答问题的三五本——这一步叫重排讲究的是“排得准”。现在大多数团队这位老编辑请的是 GPT 这类大模型。它确实读得懂但毛病也摆在明面上慢一次判断几十个候选几百毫秒到几秒贵每次都按 token 计费量一大就是一笔雷打不动的开销不稳让它吐个分数它可能回一段解释可能给你个 JSON 里套着中文甚至把 0.9 写成“很高”会编候选里明明没答案它也能顺着话头给你圆一个。可重排这个活儿本质上只是“给每段资料打个相关度分”。这是一道判断题不是作文题。用大模型干这个多少有点杀鸡用牛刀。二、Laya 是个啥一个只涂答题卡、从不写作文的“AI 判卷老师”一句话它是个专门做结构化判断的小模型。你把题目和选项给它它直接告诉你每个选项的概率。打个比方。普通大模型像那种被要求“写出解题过程”的学生得一步一步把想法写成文字你再去文字里刨答案Laya 像直接拿到答题卡的学生扫一眼题目在 A、B、C、D 上涂卡交卷。几个关键点翻译成人话它不生成文字。所以没有“输出格式不对”这回事也没有“编一段看起来很像的话”这回事。返回的永远是干净字段选哪个、几分、是或否、有多大把握。它一次算完。不是“一个字一个字往外蹦”是把整道题一次性读完、一次性算完。官方在 T4 显卡上实测单题 33 到 39 毫秒。三种题型够用。多选一这段资料属于哪个主题、分档打分相关度零到三档、是或否判断这段话里有没有答案。RAG 重排恰好就是第二种。它会说自己有多大把握。它不只告诉你“这段相关”还会告诉你“我有 0.93 的把握”。这个数字经过校准后面会讲为什么它比准确率还值钱。它很小。英文版 421M 参数多语种版 322M一张普通显卡甚至 CPU 都能跑权重是 Apache 2.0可以整个搬进自己机房。说白了Laya 没打算跟大模型抢饭碗。它干的是大模型身边最脏最累的那份活大量、重复、只需要判断、不需要表达的活。三、怎么把它塞进重排环节三步就够不用改架构思路只有一句把“让大模型读一遍再说话”换成“给每段候选出一道打分题”。第一步装起来官方给了 Python 包一行安装命令的事。第一次运行会自动下载权重英文版八百多兆多语种版六百多兆跟动辄几十 G 的大模型完全不是一个体量。如果你压根不想碰 Python它还自带一个 HTTP 服务接口形状和同类产品 Jev 完全一样——老客户端把请求地址一改就能用。Docker、LangChain 这些常见集成方式也都有现成的。第二步把候选文档变成“考题”假设用户问“出差住宿报销上限是多少”检索已经捞回五十段。对每一段你只要拼出一句话喂给它问题是这句候选资料是这段请判断这段资料对回答问题的帮助有多大。选项就设四档完全无关、沾一点边、能部分回答、直接给出答案。这里有个特别省事的细节五十段资料可以打包成五十道题一次请求全部问完。官方实测五十道题批量跑只要 337 毫秒平均一道 6.8 毫秒。也就是说一次 top-50 的重排比你眨一次眼还快。第三步拿分数排序用“把握”兜底它返回的不是一个孤零零的标签而是四档各自的概率。你可以按概率加权算出一个零到三的期望分直接排序取前几段。更妙的是那个“把握”值。举个示意数字为演示A 段《差旅费用报销管理办法》第四条相关度 2.8 / 3把握 0.93B 段《员工出行交通指引》相关度 1.2 / 3把握 0.71C 段《年会活动通知》相关度 0.1 / 3把握 0.96看出门道没有C 段的把握也很高但它高在“我很确定这段没用”。真正要盯住的是那些分数不上不下、把握又低的候选——这种模棱两可的才交给大模型复核或者干脆从上下文里剔掉。这套“小模型先筛、大模型兜底”的打法才是它最实用的地方八成以上的候选根本不需要惊动大模型。四、算笔实账快多少、省多少、准多少先看速度。官方在单张 T4 上做的对比对手是同类的商用决策模型 Jev单题延迟Laya 大约 33 毫秒Jev 第三方实测 236 到 276 毫秒差7 到 8 倍10 题批量72 毫秒平均 7.2 毫秒一题50 题批量337 毫秒平均 6.8 毫秒一题每秒能处理一百到三百多道判断题。再看钱。Jev 是闭源 API每百万 token 收 0.042 美元Laya 权重开源、自己部署边际成本是零。对那些每天要重排几十万次的团队来说这不是省一点是把这项支出从账上直接抹掉。然后是准确率这块反而最容易被忽略。在仓库自带的评测里两万三千多道判断题上整体准确率 0.753如果只回答它最有把握的那一半题目准确率能冲到0.947。其中跟 RAG 最贴近的“搜索相关性”任务733 道题准确率 0.628校准误差只有 0.066。再对比几个公开数字新闻分类四选一Laya 0.950Jev 0.910情绪识别六选一Laya 0.595Jev 0.480置信度校准误差Laya 0.081Jev 0.246好了三倍。“校准误差”这词听着唬人其实就一个问题模型说“我有九成把握”的时候是不是真有九成是对的数字越小越诚实。大模型重排最坑的地方就是它经常一本正经地把不相干的段落排到第一而一个校准良好的小模型起码能在不确定的时候明确告诉你“我不确定”。上面这张图就是它的“诚实度体检”整体校准误差 0.030曲线几乎压在对角线上。对做线上系统的人来说这比多零点几的准确率更让人安心——因为你可以放心拿它做阈值判断。顺便提一句确定性同样的输入它永远给同样的输出。做过大模型重排的人应该懂这一条能省下多少回归测试的命。五、丑话说前头这三个坑别踩开源项目最怕被吹成万能药。Laya 官方文档里那节“诚实的局限”反而值得逐条看完。第一它不是零样本神器。官方自己承认在复杂的多步决策基准上没经过微调的基础模型准确率只有 0.362连“永远选出现最多的那一类”0.461都不如。它的正确用法是拿你业务里的几百上千条数据微调一遍。好消息是门槛不高官方给了现成的笔记本在 Kaggle 免费的双 T4 上就能跑完全流程。微调之后同一个基准上的准确率从 0.362 跳到 0.766甚至超过了当初标注数据那位“老师”的 0.735 上限。第二选项一多就露怯。它给每个选项分配的描述空间有限选项超过二十个准确率会明显下滑。在一个 77 类的意图数据集上它只有 0.425而 Jev 有 0.870。所以拿它做重排姿势要对一道题只判断一段资料、只给一个档位而不是“从一百段里挑一段”。想省事也行有人用“先粗筛二十、再精排五”的两段式效果和成本都挺舒服。第三出厂设置有点“过度自信”个别题型还有怪癖。官方建议先在你自己的数据上重新拟合一次温度参数把校准误差压下来再用。另外那个“是/否”题型在英文版上偶尔会盯着选项标签自己发挥把明显肯定的内容答成“否”。规避办法很土但很有效别用是或否改成两个中性选项的二选一。还有长文档英文版上下文 512 token多语种版 1024特殊配置下能开到 8192。RAG 的段落本来就切得碎一般够用真要把整篇 PDF 塞进去还是得先切。六、它适合谁不适合谁适合正在被重排成本折磨的 RAG 团队每天要处理海量工单、邮件、评论的分诊场景Agent 里“该调哪个工具”的选择题内容审核、意图路由这类高频低延迟的判断。硬件上一张 T4 级别的卡就能撑起不错的并发纯 CPU 也能跑单题 0.2 到 0.5 秒适合离线跑分或者量很小的内部系统。不适合写文案、做总结、多轮聊天——它压根不生成文字这些活它干不了。它也不是“把大模型整条链路换掉”的方案而是给大模型减负的配角。写在最后这两年大家习惯了一个思路遇到问题就上一个更大的模型。但真实的生产系统里很多环节根本不需要“会说话”。它只需要稳稳地、便宜地、可解释地做一个判断。Laya 代表的其实是另一种分工生成的事交给大模型判断的事交给小模型。一个大模型负责“想”一堆小模型负责“筛”链路反而更快、更便宜也更好排查问题。最后留个问题你们线上那套 RAG一次重排要花多少毫秒、烧多少 token如果换成这种“只打分不写字”的小模型你觉得准确率会掉还是会涨评论区聊聊你的实测数据。创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
阅读完成 · 觉得有帮助?