在构建 RAG 系统时,调用大语言模型是主要的算力开销和延迟来源。如果所有问题都无差别地使用能力最强、参数规模最大的模型,成本会迅速膨胀,响应速度也会变慢。事实上,并非每个问题都需要最强的推理能力——很多查询只是简单的信息提取或确认,轻量级模型完全能够胜任。
模型分级的核心思路是:根据问题的复杂度,将请求路由到不同规格的模型。简单问题用轻量、快速、便宜的小模型处理,复杂问题才交给大模型解决。这样做可以在不明显牺牲回答质量的前提下,显著降低成本和响应时间。
什么样的算是“简单问题”?
实际业务中,很多用户提问其实非常简单直接,例如:
- “公司年假是多少天?”
- “退换货的截止日期是哪一天?”
- “XX 产品的保修期是多久?”
- “办公室 WiFi 密码是什么?”
这些问题的共同特点是:答案明确、几乎不需要推理或加工,往往就是检索出的文本片段本身。对于这类问题,小模型(如 7B、13B 量级的开源模型,甚至是微调过的更小模型)完全可以从检索结果中直接提取关键信息并复述出来,语言流畅度也不会有明显问题。
哪些算“复杂问题”?
复杂问题则通常涉及多步推理、对比分析、归纳总结或需要结合多个碎片信息才能形成完整答案,例如:
- “对比一下我们三个产品线的定价策略,并分析各自的适用客户群体。”
- “根据去年的销售数据和退货记录,总结出需要改进的产品功能点。”
- “如果客户在合同期内提前解约,违约金怎么算?有没有例外情况?”
这类问题要求模型具备较强的逻辑推理、信息整合和多条件判断能力,大模型(如 GPT-4、Claude 3.5 或 70B 以上的优质开源模型)在可靠性和准确性上优势明显。
如何判断问题复杂度?
实施模型分级的关键在于准确判断问题的难度。常用方法包括:
- 规则引擎:通过关键词、句子长度、是否包含比较/推断类词汇(如“对比”“为什么”“如果…那么”)来粗略分类。简单快速,容易落地,但需要人工维护规则。
- 意图分类器:训练一个轻量级的文本分类模型(甚至基于 BERT 量级的模型),将问题标注为“简单查询”“复杂分析”“闲聊”等类别,根据类别选择模型。训练数据可以从历史日志中标注获得。
- LLM 自判断:用一个小模型快速判断问题难度,例如直接问“这是一个简单的信息查询,还是需要深度分析的问题?”,路由成本本身极低。
- 检索信心度辅助:如果检索到的 top-1 片段与问题的语义相似度极高,且答案就在该片段中,很大概率是简单问题;反之,如果需要聚合多个低相似度片段才能回答,则可能更复杂。
一个真实的轻量级路由流程可以是:用一个小模型(如 3B 参数)先做复杂度判断,简单问题直接由该小模型回答,复杂问题再转发给大模型。这样,大约 70%~80% 的日常查询都能在低资源路径上完成。
分级带来的实际收益
- 降低 API 调用成本:大模型的定价通常是中小模型的数倍甚至数十倍。将大部分简单查询旁路给便宜模型,整体费用可降低 50% 以上。
- 提升响应速度:小模型生成速度更快,低复杂度路径的延迟可以从秒级降至百毫秒级,用户体验更流畅。
- 保护大模型配额:对于有速率限制的大模型 API,分级可以确保配额优先用于真正需要深度推理的场景。
注意事项
- 小模型在 RAG 场景中的能力适配:并非所有小模型都擅长根据给定文本来回答,选择时应优先考虑在“阅读理解”类任务上表现较好的模型,并结合少量示例(few‑shot)进行提示优化。
- 复杂度判断的准确性需要持续迭代:初期可以通过规则快速上线,再根据用户的点踩反馈或人工抽检,不断优化分类器,避免简单问题误判给大模型(浪费)或复杂问题误判给小模型(导致回答不准)。
- 不要忽视用户感知:确保小模型的回答在格式和引用习惯上与大模型保持一致,避免用户觉得质量明显下降。可利用相同的提示模板和引用格式要求来保持回答规范统一。
模型分级是 RAG 系统工程化落地时一项“小投入、大回报”的优化策略。它让系统在智能程度和运行成本之间取得动态平衡,也为后续进一步引入模型池、负载均衡等高级路由策略打下基础。