通过与用户互动来改善 RAG 用例中的 LLM 响应 机器学习博客
用户反馈提升 RAG 应用中的 LLM 响应质量
关键要点
生成式 AI 和大语言模型:常用于基于特定知识库回答用户提问,但传统的检索增强生成RAG系统常常难以满足模糊提问的需求。解决方案:通过引入交互式的澄清组件,可以提升问答质量,特别是当用户提供的背景信息不足时。自定义工具:使用 AskHumanTool 使系统能够询问用户追问问题,从而获取更多必要的上下文信息。案例研究:通过用户提问的实时互动,提升 RAG 系统的响应准确性,从而改善用户体验。在生成式 AI 与大语言模型LLMs的众多应用中,回答基于特定知识库的问题尤为普遍。检索增强生成RAG是一种流行的构建问答系统的技术,利用外部知识库进行响应。然而,传统的 RAG 系统面对 vague 或模糊的提问时,往往难以提供满意的答案,可能会出现诸如“我不知道”或是 incorrect 的虚构答案。本文将展示如何通过引入用户交互和澄清问题的方式来改善这种情况,提高 RAG 系统的答案质量。
解决方案概述
为了展示我们的解决方案,我们设置了一个 Amazon Kendra 索引包含 AWS 的在线文档,例如 Amazon Kendra Amazon Lex 和 Amazon SageMaker,并结合使用了 LangChain 的代理模型及简单的 Streamlit 用户界面。
前提条件
要在您的 AWS 账户中运行此演示,请完成以下前提条件:
克隆该 GitHub 仓库 并按照 README 中的步骤操作。在 AWS 账户中部署一个 Amazon Kendra 索引。可使用以下 AWS CloudFormation 模板 创建新的索引,或使用已在运行的索引。部署新索引可能会增加费用,建议如果不再需要请将其删除。LangChain 代理依赖于 Amazon Bedrock 中可用的数学模型,这可以根据需要适配为任何其他 LLM。若希望使用与代码共享的样本前端,可以通过 Amazon SageMaker Studio 运行 Streamlit 应用的本地部署。请注意,运行该演示将产生额外费用。实现方案
传统的 RAG 代理通常设计如下:代理访问用于检索与用户查询相关的文档的工具。检索的文档随后插入到 LLM 提示中,以便代理基于检索到的文档片段提供答案。
以下是我们实现的代理,访问 KendraRetrievalTool,从 Amazon Kendra 索引中获取相关文档并基于上下文提供答案:
python
Kendra 检索工具
kendratool = Tool( name=KendraRetrievalTool func=retrievalqachain description=首先使用此工具回答人类问题。该工具的输入应为用户提问。)
传统 RAG 代理
traditionalagent = initializeagent( agent=AgentTypeZEROSHOTREACTDESCRIPTION tools=[kendratool] llm=llm earlystoppingmethod=generate memory=conversationalmemory)
用户问题
answer = traditionalagentrun(我的 EC2 实例有多少个 GPU?)
小熊加速器下载官网请参考 GitHub 仓库 获取完整实现代码,想了解更多关于传统 RAG 应用的内容,可以访问 使用基础模型的检索增强生成进行问答。
在下面的例子中,用户询问:“我的 EC2 实例有多少个 GPU?”代理通过 KendraRetrievalTool 查找答案。但代理发现不知道用户指的是哪种 Amazon Elastic Compute Cloud (Amazon EC2) 实例类型,因此给出没有帮助的答案,导致用户体验不佳。
通过定义一个额外的自定义工具 AskHumanTool 并提供给代理,我们可以解决此问题。该工具指示 LLM 阅读用户问题,如果 KendraRetrievalTool 不能返回一个好的答案,则询问用户后续问题。这意味着:
python
询问人类的工具
humanasktool = CustomAskHumanTool()
具有两个工具的 RAG 代理
improvedagent = initializeagent( agent=AgentTypeZEROSHOTREACTDESCRIPTION tools=[kendratool humanasktool] llm=llm earlystoppingmethod=generate memory=conversationalmemory)
用户问题
answer = improvedagentrun(我的 EC2 实例有多少个 GPU?)
这种方式使代理能够更精确地细化问题或提供所需的上下文,以便响应用户提问。为了引导代理使用 AskHumanTool,我们为 LLM 提供以下工具说明:
如果使用 KendraRetrievalTool 找不到答案,请使用此工具。询问人类以澄清问题或提供缺失信息。输入应为人类的问题。

借助 AskHumanTool,代理现在能够识别 vague 的用户提问,并返回一个后续问题,请求澄清所使用的 EC2 实例类型。
在用户指定了实例类型后,代理将额外答案纳入原始问题的上下文,从而得出正确答案。
请注意,代理现在可以根据需要决定是使用 KendraRetrievalTool 检索相关文档,还是使用 AskHumanTool 提问澄清。代理的决策依据是它是否找到足够的信息片段用于提供最终答案。这种灵活性使 RAG 系统能够应对用户可能提交的多种提问,包括精确的和模糊的提问。
在我们的示例中,完整的代理工作流如下:
用户向 RAG 应用发出请求,询问:“我的 EC2 实例有多少个 GPU?”代理使用 LLM 决定采取何种行动:通过调用 KendraRetrievalTool 查找相关信息以回答用户请求。代理使用该工具从 Amazon Kendra 索引中检索信息,并将检索到的文档片段插入代理提示中。代理的 LLM 判断来自 Amazon Kendra 的检索文档对用户请求不够有帮助或缺乏足够上下文。代理使用 AskHumanTool 形成跟进问题:“你在使用的具体 EC2 实例类型是什么?了解实例类型有助于回答它有多少个 GPU。”用户提供答案为“mlg512xlarge”,代理再次调用 KendraRetrievalTool,这次将 EC2 实例类型添加到搜索查询中。再次运行步骤 2 至 4,代理总算得出有用的答案并返回给用户。清理
为了避免不必要的费用,如果不再使用,请删除 Amazon Kendra 索引,并关闭 SageMaker Studio 实例如果使用该实例来运行演示。
结论
在本篇文章中,我们展示了如何通过添加一个使系统能够向用户询问缺失信息的自定义工具,提升 RAG 系统用户的体验。这种互动式的对话方法代表了提升传统 RAG 架构的良好方向。通过对话清晰化模糊性可促使从知识库中提供更令人满意的答案。
需要注意的是,这种方法不仅限于 RAG 应用;您可以在依赖于代理的核心的其他 生成式 AI 应用中使用它,也可以添加自定义的 AskHumanTool。
有关如何将 Amazon Kendra 与生成式 AI 结合使用的更多信息,请参阅 使用 Amazon Kendra、LangChain 和大语言模型快速构建高准确度的生成 AI 应用程序。
关于作者
Antonia Wiebeler 是 AWS 生成式 AI 创新中心的数据科学家,致力于为客户构建概念验证。她热衷于探索生成式 AI 如何解决现实问题并为客户创造价值。在编程之余,她喜欢跑步和参加三项全能比赛。
Nikita Kozodoi 是 AWS 生成式 AI 创新中心的应用科学家,致力于开发 ML 解决方案以解决各行业的客户问题。他专注于推动生成式 AI 应对现实挑战。在业余时间,他喜欢打沙滩排球和阅读。
自动缩放 Amazon RDS 存储使用 Amazon CloudWatch 和 AWS Lambd
自动扩展 Amazon RDS 存储使用 Amazon CloudWatch 和 AWS Lambda关键要点关键要点在这篇文章中,我们探讨了一种利用 Amazon CloudWatch 和 AWS Lambda 自动扩展 Amazon RDS 存储的解决方案。随着客户数据库不断增长,存储管理变得越...