LLM(Large Language Model)大语言模型与RAG(Retrieval-Augmented Generation) 检索增强生成技术相结合,已成为企业智能问答领域的热门选择。然而,在实际应用中,仍遇到诸多挑战,如:如何将现实中复杂需求分解为当前技术能够回答的问题、如何有序稳定提升智能问答准确率以及如何进行结果评估实现持续优化等。本文旨在深入剖析LLM与RAG在落地过程中的关键环节,分享相关经验,以期为企业提供更精准、高效的智能问答解决方案。
图1:经典LLM+RAG架构
• 索引:企业知识向量化,将企业内部的Excel、Word、Pdf等各种形式的零散运维文档进行切分,通过BAAI/bge-m3等Embedding模型将切分后的文档片段向量化到ES、Faiss、Milvus等向量数据库中;
• 检索:向量化匹配,采用Euclid Distance、Manhattan Distance、Cosine Similarity等方法进行相似度匹配,通过HNSW(Hierarchical Navigable Small Worlds,分层导航小世界)等方式建立索引,连接彼此相邻的向量以达到更好的性能和召回率;
• 生成:自然语言答复,将检索到的文档片段通过LLM转为连贯的自然语言,并通过Prompt提示LLM,在遇到不知道的问题时,避免出现胡言乱语。
目前,业界提出更高级的RAG框架,从检索前处理、检索模型优化、检索后处理三个方面进行优化,解决当前经典RAG框架面临的低召回率、文本不相关、回复内容重复等问题。但是,高级的RAG框架在落地过程仍然存在诸多挑战。
LLM+RAG两者结合,可为企业提供高效、精准的智能问答服务,显著提升用户体验和业务效率。然而,在实际落地过程中,我们仍会遇到诸多挑战,具体表现为:
• 复杂问题难应对:面对复杂问题时,大模型的深度理解和推理能力仍有局限。复杂问题涉及多个知识点和逻辑关系,大模型往往难以全面捕捉并给出针对性的答案,影响了问答的准确性和完整性。如:企业IT运维场景中,解答导致运维故障的根因是什么等复杂问题。
• 意图理解有偏差:企业智能问答中,问题形式多样且口语化,还包含大量专业术语。这导致大模型在理解提问者真实意图时存在困难,影响了问答的准确性和用户满意度。如:提出的问题中带有“卡单”等内部工作术语。
• 片段召回不全面:理解问题后,大模型在连接问题和文档时存在语义间隙。这导致模型难以精确找到与问题相关的文档片段,影响了答案的准确性和相关性。如:问题中涉及“4G”套餐情况,生成的答案中却提供了“5G”套餐信息等。
• 答案无法解问题:尽管模型能够找到知识片段,但在生成答案时,往往无法完全解决问题。这可能是因为模型在整合信息、形成连贯答案方面存在不足,降低了问答系统的实用性。
• 优化路径不明确:落地过程中拿到需求如何梳理,对数据有哪些要求,遇到回答准确率不高的问题时,是进行大模型精调、还是优化Prompt、或是优化Embedding模型,缺乏一套行之有效的优化路径,保证问答准确率稳步递增。这导致企业在改进系统时感到迷茫和困惑,难以持续提高问答系统的性能。
面对LLM+RAG落地过程中存在的挑战,我们通过项目实践,总结出一套切实有效的方法,通过六步法(如图2)将回答准确率由30%提升到90%以上。同时,RAG从经典架构升级为企业级应用架构,从检索前处理、检索模型优化、检索后处理进行了优化(如图3),以下是详细介绍:
图2:LLM+RAG落地实践路径
图3:企业级应用RAG架构
(三)切好文档:根据需求确保片段独立性
实践表明,基于领域数据进行微调的垂直行业大模型,面对复杂发散性场景时,应用落地效果并不理想。在明确具体需求的基础上进行精调,能够更好地发挥大模型的效用。如,在工单根因分析的过程中,工单意图识别就是一项具体的任务,当前工单描述过于笼统、不规范且内容冗余,导致大模型对用户真实意图识别低,进而影响后续向量检索和最终回答准确率。
明确了工单意图识别的具体任务需求后,需要LLM与具体专业知识有效结合,深入理解具体任务的数据,如工单意图识别任务中的涉及的工单分类、工单描述数据及解决方案等。为了准备好这些数据,我们既需要具备工程经验的实施方,也需要对业务有深刻理解的专家。业务与技术之间的紧密协作至关重要,同时,对标准操作流程(SOP)的梳理和打磨也是不可或缺的前提。实践中,技术人员协同业务人员整理了6000余条数据,基于ChatGLM3-6B大模型进行精调后,工单意图识别准确率大幅提升了47%。值得注意的是,相对于传统NLP知识标注的工作量已大大减少,过去工程师需要投入大量精力帮助企业构建专家知识库,而如今大模型已能够自主完成部分工作。由于LLM具备了理解和推理能力,它可以直接从数据中读取并应用相关知识,从而大大提升了工作效率。
准确理解用户意图后,找准知识才是关键。在工程化落地过程中,我们从问题转换、Embedding模型优化、多路召回与重新排序等多个环节进行了优化,以提高知识的召回能力。
• 问题转换:用户问题的措辞会直接影响搜索的结果,问题转换通过结合历史对话对问题重新表述等方式,以处理复杂的用户问题。实践中,使用了假设文档嵌入(HyDE)方式进行检索,即先让LLM生成一个假设性的回复。然后,将这个假设性回复和原始问题一起用于向量检索。虽然,假设回复可能包含虚假信息,但蕴含着LLM认为相关的信息和文档模式,有助于在知识库中寻找类似的文档。
• Embedding模型优化很重要:Embedding模型优化,可以增强专业领域术语的理解能力,这一步是在专业领域找准答案的基础。如:微调前向量模型认为4G和5G相似度非常高,即在向量空间内距离非常近,这可能导致出现询问4G套餐而回答5G套餐的情况;微调后模型可以识别4G和5G分别指代不同含义,即在向量空间中距离比较远,相似度比较低。Embedding模型优化至少需要1万条以上的标注数据,并整理成问题、正样本、副样本格式(即” query”、”pos”、”neg”)进行模型微调,在部分案例中实现了问答准确率提升30%以上的显著效果。
• 多路召回与重新排序:单一的检索策略使得召回率不高,且通过比较语义相似度来匹配信息,但最相似这一标准并不总是能够准确反映“最相关”。为了解决以上问题,我们采用了多路召回策略,并借助CohereRerank/bge-reranker-large对召回结果进行重新排序,它们会根据查询与每个检索到的上下文之间的相关性进行评分,过滤掉那些不相关的搜索结果。同Embedding模型一样,根据具体的应用场景,我们还可以对重排序器进行微调,以优化其性能。
可观测性是实现产品性能优化的关键。围绕产品的可视化数据循环,我们能够系统地提升应用能力。即使产品在初期上线时的表现仅为30分,只要我们精确定义测试集和模型反馈标准,提升至90分是完全可行的。
为实现这一目标,我们需要细化过程指标并设计专门的测试集,包括意图理解测试集(可进一步细分为包含专业术语和不包含专业术语的测试集)、召回率测试集以及最终答案呈现测试集等。针对不同数据集的测试结果,我们能够发现问题出在哪里,并有针对性的改进。如对问题中4G和5G的混淆,反映出Embedding模型对专业术语的识别能力有限,需要针对Embedding模型进行精调。
另外,在工程化落地中涉及到LLM的优化,可以参考OpenAI总结的大模型优化典型过程(见图4)。首先,尝试使用提示工程对模型进行优化,通过调整输入数据的格式或提供额外的提示信息来提升模型性能。若提示工程无法达到预期效果,再考虑对LLM进行微调。需要注意的是,微调的目的主要是增强模型的意图理解和总结能力,而非增加其知识储备。
图4:大模型优化典型过程
随着大模型技术的不断发展和完善,LLM+RAG技术在知识问答场景中的应用将更加广泛和深入。未来,我们可以期待LLM+RAG技术在以下几个方面取得更大的突破:
• 更强大的跨模态检索能力:随着多模态技术的发展,未来的LLM+RAG技术将能够处理文本、图像、音频等多种模态的信息,实现跨模态的知识检索和问答。
• 更高效的知识更新机制:随着知识图谱和动态学习技术的发展,未来的LLM+RAG技术将能够实时地跟踪和更新知识库中的信息,保证问答系统的时效性和准确性。
• 更灵活的集成扩展能力:在实际应用中,诸多复杂问题往往需要融合多个周边系统的信息才能有效解决。因此,未来的LLM+RAG系统需具备高效集成周边系统的特性,以便能够迅速获取所需的多元化信息,从而更广泛、更深入的地解答用户问题。
总之,LLM+RAG技术以其独特的优势正在引领知识问答场景的工程化落地进入一个新的阶段。企业应积极拥抱这一技术变革,利用LLM+RAG技术构建高效、智能的知识问答系统,提升自身的竞争力和用户体验。
参考资料