对RAG系统生成响应质量进行实践分析,是实现实际学习的主要途径。通过此分析,可以掌握如何评估检索相关性、生成忠实性以及整体回答质量,并将其应用于具体实例。我们假设一个基本RAG系统配置如下:数据源: 内部公司文档集合,包括人力资源政策、项目报告和技术文档。分块策略: 固定大小分块,每块256个令牌,重叠32个令牌。嵌入模型: 标准Sentence-BERT变体。检索器: 对向量索引中存储的嵌入进行基本余弦相似度搜索,检索出3个最相似的分块。生成器: 一个通用型指令遵循式大型语言模型。提示模板: “只根据提供的上下文回答以下问题。如果上下文中不包含答案,请说‘我无法根据所提供的信息回答’。\n\n上下文:\n{retrieved_context}\n\n问题:{user_query}\n\n答案:”我们将检查该系统生成的一些查询-响应对,并分析它们的质量。示例1:关于特定政策的查询用户查询: “请求休假时间的流程是什么?”检索到的上下文:分块1: “……所有员工根据服务年限累积带薪休假(PTO)。全职员工在前5年每年享有15天。PTO可用于度假、个人事务或病假。未使用的PTO……”分块2: “……要请求休假,员工必须通过‘HR-Portal’系统提交申请,对于超过3天的请求,至少提前两周提交。较短的请求应至少提前48小时提交。需要经理批准……”分块3: “……‘凤凰’项目季度评审会议定于下周五举行。所有团队负责人必须参加并汇报进展。请在周三下班前完成幻灯片。会议链接将通过日历邀请发送……”生成响应: “员工根据服务时间累积带薪休假,每年从15天开始。要请求休假,请使用‘HR-Portal’系统并提前通知(3天以上提前2周,较短的提前48小时)。需要经理批准。凤凰项目评审定于下周五。”分析:检索质量:分块1提供了关于带薪休假累积的相关背景信息。分块2直接回应了请求休假的流程,这是查询的重点。分块3完全不相关(关于项目会议)。总体来说:检索尚可但有不足。它找到了最重要的分块(分块2),但包含了无关信息(分块3)。这可能是因为“请求”或“时间”等关键词偶然出现在项目更新文档中。生成质量:忠实性: 响应准确反映了分块1和分块2中的信息。它甚至包含了分块3中的无关细节。它没有添加上下文中不存在的信息(没有虚构内容)。相关性: 响应的第一部分直接回答了用户关于流程的查询。然而,包含了凤凰项目的细节使得整个答案的关联性降低,且不够简洁。连贯性: 响应语法正确,但由于包含了不相关的项目会议内容,显得略微不连贯。总体评估与潜在改进:系统提供了核心答案,但由于检索不完善,包含了无关信息。可能的改进方法包括:改进检索:尝试不同的嵌入模型,调整分块策略,或在初始检索后使用重新排序步骤,这可能会过滤掉分块3。改进生成/提示:一个更严格的提示,明确告知大型语言模型忽略与特定问题没有直接关联的上下文部分,可能会有所帮助,尽管我们当前的提示已经尝试这样做。大型语言模型可能过于倾向于总结所有提供的文本。示例2:需要整合的查询用户查询: “根据第三季度报告,总结阿特拉斯项目的主要目标。”检索到的上下文:分块1: “……阿特拉斯项目:第三季度进展报告。本季度主要工作是稳定部署流程。与第二季度相比,我们成功将部署失败率降低了30%,超过了25%的目标。资源分配仍在预算范围内……”分块2: “……阿特拉斯项目的主要目标仍然是在年底前将传统用户数据库迁移到新的云基础设施。次要目标:迁移后核心服务达到>99.9%的正常运行时间。第三季度的工作主要通过基础设施准备来支持迁移目标……”分块3: “……遇到的挑战包括与旧版CRM集成模块意外的兼容性问题。这需要额外的2个冲刺工程工作量,延后了性能测试的启动。缓解计划已到位……”生成响应: “根据第三季度报告,阿特拉斯项目侧重于稳定部署流程,并将故障率降低了30%。主要目标是在年底前将传统数据库迁移到云端,次要目标是实现>99.9%的正常运行时间。CRM集成出现了一些挑战。”分析:检索质量:所有三个检索到的分块都与阿特拉斯项目及其第三季度状况高度相关。分块1涵盖了第三季度的活动,分块2阐述了总体目标,分块3讨论了挑战。总体来说:出色的检索。系统成功识别出文档中最相关的内容。生成质量:忠实性: 响应准确总结了三个分块中的信息,没有引入外部事实。相关性: 响应直接回应了用户的查询,指明了主要目标(迁移、正常运行时间),并提到了第三季度的工作重心(流程稳定)和挑战。连贯性: 生成文本流畅,呈现了从不同上下文片段整合而来的简洁摘要。总体评估与潜在改进:这是RAG系统表现良好的一个例子。检索到了相关上下文,生成器成功地将其整合为连贯且准确的答案。尽管这个特定输出很好,但仍需要持续监测。也许对于关于同一项目的不同查询,检索可能会失败,或者大型语言模型可能会误解上下文。示例3:上下文中没有答案的查询用户查询: “公司关于携带宠物入办公区的政策是什么?”检索到的上下文:分块1: “……办公室厨房备有免费小吃和饮料。请自行清理,并向设施团队报告设备问题。请使用指定垃圾桶进行回收……”分块2: “……安全规程要求所有访客在前台签到并佩戴访客证。员工必须使用门禁卡进入。门不应被撑开。请立即报告可疑活动……”分块3: “……我们公司重视协作和创新。我们鼓励跨职能团队项目,并提供各种沟通工具,包括Slack和视频会议套件。定期全体会议让所有人保持知情……”生成响应: “我无法根据所提供的信息回答。”分析:检索质量:检索到的分块都没有提及宠物或与动物相关的办公室政策。它们涵盖了与厨房、安全和公司价值观等不相关的主题。总体来说:检索结果不佳,因为答案不存在;但从系统正确地没有找到相关文档(如果知识库中不存在此类文档)的角度看,检索可能很好。我们假设在此示例中,此类政策文档未被索引。生成质量:忠实性: 大型语言模型正确遵循了提示中的指示(“如果上下文中不包含答案,请说‘我无法根据所提供的信息回答’”)。它没有尝试虚构答案。相关性: 响应与无法在提供的上下文中找到答案的情况非常相关。连贯性: 响应清晰直接。总体评估与潜在改进:鉴于现有(或缺失的)信息,系统行为正确。它正确识别出检索到的上下文不包含答案,并相应地告知了用户。这突出了提示指示大型语言模型如何处理上下文不足情况的重要性。它也强调了RAG系统的知识仅限于它能访问的文档。如果宠物政策文档存在但未被索引,那么问题出在数据准备阶段。练习分析输出审阅此类输出是了解RAG系统行为的重要组成部分。查看您自己的系统针对各种查询生成的响应。问问自己:检索到的上下文是否相关? 它是否包含必要信息?是否包含无关信息?生成的答案是否忠实于上下文? 它是否虚构了信息?是否忽略了上下文的重要部分?答案是否直接回答了用户的查询? 它是否简洁明了?如果答案质量不佳,主要问题是检索还是生成?这种定期进行的定性分析补充了定量评估指标,并提供了有价值的见解,让您了解系统在何处表现出色以及何处需要改进。它帮助您诊断问题,并指导您在调整分块、选择嵌入模型、优化提示乃至整理底层知识库方面的努力。