提升大模型系统体验的设计思路与方案
在大模型技术飞速发展的当下,通过简单的信息输入或 Prompt 调整,往往能让模型输出接近预期的结果。然而,凡事终有上限,大模型显然不能解决所有问题。现版本在了解大模型能力边界的情况下,构建一个以大模型为中心或结合了大模型的系统可能是更合适的选择。
我们可以以大模型为起点,逐步拆解大模型功能,增加更多辅助模块来配合大模型生成;也可以在原有系统中加入大模型,使之能在系统中产生新的化学反应,带来新功能或优化。考虑到目前很多大模型项目都是围绕大模型逐步发展迭代而来,本文将分享一些能让大模型系统效果和体验提升的思路方案。
场景划分
在大模型应用做得多了以后,或多或少都会面临以下几个核心问题:
- 有些问题不希望模型回复,或者希望模型用特定的方式回复。
- 不同的问题,希望模型使用不同的策略来回复。
- 某些问题,模型回复质量不佳,但我们有正确答案,希望它能基于此内容回复。
- 需要针对某一种领域进行专项、有针对性的回复,在此之前需要先识别并划分这类问题。
这里其实都面临一个很重要的问题,那就是——边界。重述一下问题,在特定情况下,如果我们希望模型按照特定某种特殊的方案策略进行回复,此时我们需要一个模块(注意这里我用的是模块,稍后详述),来鉴别在用户说什么内容的情况下触发这类回复策略。在上一个版本,即没有'大模型'有关技术的大环境下,通常是搜索或者是对话系统场景,我们会把这种划分的任务叫做意图识别,而抽象成 NLP 任务那就是文本分类。
此时,这里引出了第一个大模型系统中可能需要的利用到的模块,即意图识别模块。
意图识别的实现路径
举个例子,客服场景中,用户有一类高频问题是售后维修的问题。因为客诉比较严重,所以需要针对这个领域的问题进行针对性的优化,甚至是一些定制型的优化,例如需要增加安抚话术等。因此我们需要增加一个意图识别模块,首先保证这类预期得到优化的 query 能被识别出来。
识别的方式其实挺多的,需要结合 query 的主要特点、训练数据、性能要求等原因来进行选择。这也是为什么我这里严谨的说是模块,因为真不只是模型能够解决所有问题。常见的实现路径包括:
- 基于规则、关键词、正则表达式的快速划分:适用于特征明显、变化较少的场景,响应速度极快,维护成本低,但泛化能力弱。
- 经典分类方法:如 fasttext、TextCNN、BERT for Classification 等。这些方法在中小规模数据上表现稳定,推理速度快,适合对延迟敏感的场景。
- 基于检索的以搜代分方法:将意图定义为向量空间中的聚类,通过检索最近邻来判断意图,适合意图数量动态变化的场景。
- 大模型通过 Prompt 构造分类器:利用 LLM 的零样本或少样本学习能力,无需训练即可适应新意图,但成本较高,延迟较大。
拥有划分方法后,我们可以结合划分场景的特点,定制不同的回复策略。
回复策略的制定
对话系统,只要做的足够精细,针对不同场景,就会需要考虑不同的回复策略,这也是为什么上面要聊意图识别的理由。而在划分场景后,就可以开始定制每一种意图的回复策略。
拒绝回复
拒绝回复在很多场景会应用到。例如在面对用户提问的内容并不是目前我们预期支持的领域(客服场景问天气),或者用户所问出现观点类(如何看待俄乌问题)、黄反类问题、大模型安全(query 中带有诱导性错误)时,再就是知识库为空的情况,我们就需要进行拒绝,并给用户一些回复,让用户不至于那么不舒服。
常见的策略一般有这些:
- 一句写死的回复:例如'哎呀,这方面的问题我还不太懂,需要学习下'。这种方式简单直接,但缺乏灵活性。
- 用大模型生成:借助 Prompt 引导生成一些安抚性的回复,例如'对不起,你问的 [问题] 问题,我好像还不太懂。你可以试试问问别的'。这种方式更具亲和力。
- 使用推荐问或者追问的策略:例如'你是否在找以下几个问题 XX?'或'你描述的我好像不太懂,能再补充补充吗'。这有助于引导用户回到有效交互轨道。
其实也可以看到,也不见得非得用大模型,有时候写死或者做一些推荐问疑似问,效率更高且可控。
拆解用户提问后的回复
用户的提问往往蕴含众多信息,我们可以仔细解析用户提问的内容,然后配以适当的策略,来生成合适的回复。
- 情绪识别与安抚:客服场景中,可能有用户的投诉抱怨,我们可以先识别出用户的情绪(情绪识别),然后借助角色假设、语气等指令,给出一个带有安抚性质的回复。
- 关键词强调:某些特定问题,可能有十分重要的关键词,我们必须重复强调,因此我们可以提前提取关键词,然后告诉大模型,必须提及这些词汇。


