在 AWS 机器学习博客中,使用 Ama

使用自定义干预降低大型语言模型的幻觉现象

使用Amazon Bedrock代理

Key Takeaways

关键要点

  • 幻觉现象是大型语言模型(LLMs)生成的看似合理但实际上错误或虚构的信息。
  • 通过集成外部知识源,可以使用检索增强生成(RAG)方法减少幻觉现象,以提高模型的准确性和可靠性。
  • Amazon Bedrock代理允许灵活的工作流程编排,以动态检测和补救幻觉。
  • 本文介绍了如何构建自定义的AI工作流,当检测到幻觉时,将用户查询转交给客户服务代理处理。

幻觉现象在大型语言模型(LLMs)中指的是模型生成了一些看似合理但实际上不准确或虚构的输出。这种现象可能源于模型训练数据中缺乏必要的信息,或者模型试图通过逻辑推理生成一致的回答,但超出了其实际知识范围。这种幻觉现象的产生在于语言建模方法的固有限制,该方法旨在生成流畅且符合上下文的文本,但未必确保内容的事实准确性。

降低幻觉现象对于使用LLMs的生产应用至关重要,特别是在医疗、金融或法律等领域,错误的信息可能会带来严重后果。未加控制的幻觉现象可能会削弱系统的可靠性和可信度,导致潜在的伤害或法律责任。缓解幻觉现象的策略包括严格的事实核查机制、集成外部知识源、应用置信度阈值,以及对于关键输出实施人工监督或验证过程。

检索增强生成(RAG)是一种旨在减少语言模型中幻觉现象的方法,通过整合检索外部知识的能力,并将其作为输入的一部分提供给模型。检索模块负责根据输入查询或上下文从大量文本数据中检索相关段落或文档。检索到的信息随后提供给LLM,LLM在生成最终输出时结合这些外部知识。通过将生成过程基于来自可靠来源的事实信息,RAG可以降低生成错误或虚构内容的可能性,从而提高生成响应的事实准确性和可靠性。

提供了带有上下文基础检查的幻觉检测功能,这些功能可以通过Amazon BedrockAPI(例如ConverseInvokeModel)无缝应用,或嵌入到工作流程中。LLM生成响应后,这些工作流程会检查是否发生了幻觉现象。这种设置可以通过 或使用 函数的自定义逻辑实现。然而,这些是静态工作流程,更新幻觉检测逻辑需要修改整个工作流程,限制了灵活性。

为了满足灵活性的需求,Amazon Bedrock代理支持动态工作流程编排。借助AmazonBedrock代理,组织可以实施可扩展、可定制的幻觉检测,依照特定需求进行调整,减少在工作流程中结合新检测技术和额外API调用所需的工作,而无需重构整个工作流程,允许LLM决定行动计划以编排工作流程。

在本文中,我们将使用 设置自定义的AI工作流,以在检测到LLM幻觉时进行干预,并通过人机协同流程将用户查询转交给客户服务代理。可以想象为一种更简单的实施方式:当聊天机器人无法回答客户查询时,调用客户服务代理。此聊天机器人基于RAG方法,极大地减少幻觉现象,而代理工作流提供了一个可定制的机制,用于测量、检测和缓解可能发生的幻觉。

代理工作流是利用LLM作为或大脑构建动态和复杂商业用例工作流的新视角。这些代理工作流将基于自然语言查询的任务分解为多个可操作的步骤,结合迭代反馈循环和来生成最终结果,使用工具和API。

Amazon Bedrock代理通过编排多步骤任务来加速生成AI应用程序的开发。AmazonBedrock代理利用LLM的推理能力,将用户请求的任务分解为多个步骤。它们使用给定的指令创建编排计划,然后通过调用公司API或访问知识库来执行该计划,以向用户提供最终响应。这提供了极大的用例灵活性,支持动态工作流程,降低了开发成本。AmazonBedrock代理在定制应用程序方面发挥着重要作用,以帮助满足特定项目需求,同时保护私人数据并帮助确保应用程序的安全。这些代理与AWS托管基础设施能力(如Lambda和)协调工作,减少了基础设施管理负担。此外,代理还简化了工作流程并自动执行重复任务。借助AI自动化的力量,您可以提高生产力并降低成本。

是一项完全托管的服务,提供来自领先AI公司的高性能基础模型(FMs)选择,如AI21 Labs、Anthropic、Cohere、Meta、MistralAI、Stability AI和Amazon,所有这些都可以通过单一API访问,同时提供一整套安全、隐私和负责任的AI能力,以构建生成AI应用。

用例概述

在本篇文章中,我们为一个基于RAG的聊天机器人添加自定义的干预措施,以应对检测到的幻觉现象。我们将使用检索增强生成自动评分(如答案正确性和答案相关性)开发一个自定义的幻觉评分 来测量幻觉现象。如果特定LLM响应的幻觉评分低于自定义阈值,则表明生成的模型响应与真实情况的不一致。在这种情况下,我们将通过[Amazon简单通知服务 (Amazon SNS)](https://docs.aws.amazon.com/code- library/latest/ug/python_3_sns_code_examples.html)通知一组人类代理以协助处理该查询,而不是向客户提供幻觉的LLM响应。

我们使用的基于RAG的聊天机器人会接收,以帮助客户处理与Amazon Bedrock相关的查询。

数据集

在中使用的数据集是最新的文件,可以公开下载。或者,您也可以使用其他选择的PDF文件从头创建知识库并在此notebook中使用它。

如果使用自定义PDF,则需要策划一个监督数据集,提供多个问题的真实答案以测试此方法。自定义幻觉检测器使用RAGAS指标,这些指标是从包含问题- 答案对的CSV文件中生成的。对于自定义PDF,有必要替换此CSV文件并重新运行notebook以适应不同的数据集。

除了notebook中的数据集外,我们还向代理提问了多个问题,其中一些来自PDF,另一些不在PDF中。如果相关,真实答案是根据PDF内容手动策划的。

删除)

前提条件

要在您的AWS账户中运行此解决方案,请完成以下前提条件:

  1. 克隆并按照README中的步骤进行操作。
  2. 在ml.t3.medium的笔记本上进行设置。
  3. 获取对托管在Amazon Bedrock上的模型的访问权限。在Amazon Bedrock控制台的导航窗格中选择管理模型访问 ,从可用选项列表中进行选择。我们将在本篇中使用和在Amazon Bedrock上的文本v2。

实现解决方案

以下图示了解决方案架构:

删除)

自定义幻觉检测和补救的架构图

整体工作流程包括以下步骤:

  1. 数据摄取,涉及存储在 字段中的原始PDF文件,与作为数据源进行同步。
  2. 用户提问与Amazon Bedrock用户指南相关,经过设置以处理用户查询的Amazon Bedrock代理进行处理。

用户查询:Bedrock代理支持哪些模型?

  1. 代理创建计划并识别出需要使用知识库的必要性。然后它向知识库发送请求,从基础向量数据库中检索相关数据。代理通过RAG使用以下步骤检索答案:
  2. 搜索查询被指向向量数据库()。
  3. 检索到相关答案片段。
  4. 知识库响应来自检索到的答案片段,并发送回代理。

生成的答案:Amazon Bedrock支持来自多个提供者的基础模型,包括Anthropic(Claude模型)、AI21Labs(Jamba模型)、Cohere(Command模型)、Meta(Llama模型)、Mistral AI。

  1. 用户查询和知识库响应协同用于调用正确的行动组。
  2. 用户问题和知识库响应作为输入传递到一个Lambda函数中,用于计算幻觉评分。

生成的答案有一些是正确的,有一些是错误的,因为它提到了一般的Amazon Bedrock模型支持,而不是针对AmazonBedrock代理的模型支持。因此,我们检测到了幻觉,评分为0.4。

  1. 如果答案评分低于自定义阈值,将会发送通知。

由于答案评分为0.4 < 0.9(幻觉阈值),因此触发了SNS通知。

  1. 如果答案评分高于自定义阈值,则Lambda中设置的幻觉检测器会回复最终的知识库响应。否则,它将返回预定义的响应,告知用户稍候待客户服务代理很快加入对话。

客户服务人类代理队列收到通知,下一位可用代理将加入或在离线响应机制下回邮。

  1. 最终代理响应在聊天机器人UI(用户界面)中显示。

在GitHub仓库的中,我们涵盖了以下学习目标:

  1. 通过具有通知人类干预能力的代理AI工作流,测量和检测幻觉现象。
  2. 基于选择的RAGAS指标自定义幻觉检测器及预定义阈值。
  3. 为了进行补救,我们将发送SNS通知到客户服务队列,并等待人类帮助我们解决问题。

步骤1:使用Amazon Bedrock代理设置Amazon Bedrock知识库

在本节中,我们将集成与AmazonBedrock代理,以创建RAG工作流。RAG系统使用外部知识源增强LLM的输出,改善事实准确性,并减少幻觉现象。我们用以下高级指令创建代理,鼓励它担任问答角色。

python agent_instruction = """ 你是一个问答代理,帮助客户从Amazon Bedrock用户指南中回答问题。 接下来,你将始终使用知识库的搜索结果检测和测量任何幻觉。 """

步骤2:使用用户查询调用Amazon Bedrock代理

我们使用带有预定义问题和真实答案的监督数据集,调用AmazonBedrock代理,这会根据知识库中的代理响应触发自定义幻觉检测器。在notebook中,我们演示了如何基于RAGAS指标的答案评分,通知人类客户服务代表,如果未达到预定义的自定义阈值。

我们使用RAGAS指标,如答案正确性答案相关性,来确定自定义阈值评分。根据用例和数据集,可以相应地自定义适用的RAGAS指标列表。

要更改阈值评分,可以修改Lambda函数lambda_hallucination_detection()中的measure_hallucination()方法。

代理被提示使用以下模板,以CSV文件中包含的问题和真实答案实时迭代user_question

python USER_PROMPT_TEMPLATE = """问题: {user_question} 给定一个输入问题,你将搜索AmazonBedrock用户指南中的知识库以回答用户问题。 如果知识库搜索结果没有返回任何答案,你可以尝试尽你所能回答,但不要回答你不知道的内容。不要产生幻觉。 使用这个知识库搜索结果,你始终会执行适当的操作组API以测量和检测该知识库搜索结果上的幻觉。 移除知识库搜索结果和最终用户响应中的任何XML标签。 一些user_question参数的示例: 1. Bedrock代理支持哪些模型? 2. 我可以与Amazon BedrockAgents一起使用哪些模型? 3. Re:Invent 2024的日期是什么? 4. 什么是Amazon Bedrock? """

步骤3:在幻觉出现的情况下触发人类参与

如果代理响应未满足自定义幻觉评分阈值,将通过SNS通知通知人类。可以将这些通知发送到客户服务代表队列或队列,以便发送电子邮件或文本通知。这些代表可以根据他们的培训和系统知识,以及额外资源,对电子邮件(离线)或进行中的聊天(在线)作出响应。这将基于特定产品工作流设计。

要查看实际发送的SNS消息,我们可以查看最新的Lambda 日志,按照中给出的说明进行操作。您可以在中搜索ReceivedSNS message::这个字符串,以查找Lambda函数LambdaAgentsHallucinationDetection()

成本考虑因素

以下是一些重要的成本考虑事项:

  • 目前的实现不对使用Amazon Bedrock知识库或Amazon Bedrock代理构建的资源收取额外费用。
  • 您会因在Amazon Bedrock上调用嵌入模型和文本模型而产生费用。有关更多详细信息,请参见。
  • 使用Amazon S3和向量数据库将产生费用。有关更多信息,请参阅和。

清理

为了避免发生不必要的费用,该实现选项允许在notebook整个运行结束后清理资源。您可以检查 [cleanup_infrastructure()](https://github.com/aws- samples/responsible_ai_reduce_hallucinations_for_genai_apps/blob/main/reduce_llm_hallucinations_labs/lab2/lab2.ipynb) 方法中的说明,以避免自动清理并尝试不同的提示和数据集。

资源清理的顺序如下:

  1. 禁用操作组。
  2. 删除操作组。
  3. 删除别名。
  4. 删除代理。
  5. 删除Lambda函数。
  6. 清空S3存储桶。
  7. 删除S3存储桶。
  8. 删除角色和策略。
  9. 删除向量数据库集合策略。
  10. 删除知识库。

重要考虑事项

Amazon Bedrock代理的整体延迟可能会比仅使用Amazon Bedrock Guardrails和Amazon Bedrock PromptFlows更高。这是一个在

Leave a Reply

Required fields are marked *