Activeloop Deep Memory 是一套工具,可让您针对您的用例优化矢量存储,并在您的 LLM 应用中实现更高的准确性。
检索增强生成(RAG)最近受到了广泛关注。随着高级 RAG 技术和代理的出现,它们扩展了 RAG 可以完成的潜力。然而,一些挑战可能会限制 RAG 集成到生产中。在生产环境中实施 RAG 时,需要考虑的主要因素是准确性(召回率)、成本和延迟。对于基本用例,OpenAI 的 Ada 模型与朴素相似度搜索相结合可以产生令人满意的结果。然而,为了在搜索过程中获得更高的准确性或召回率,可能需要采用高级检索技术。这些方法可能涉及不同的数据块大小、多次重写查询等,这可能会增加延迟和成本。Activeloop 的 Deep Memory 是 Activeloop Deep Lake 用户可用的一项功能,它通过引入一个经过训练的微型神经网络层来解决这些问题,该层用于将用户查询与语料库中的相关数据进行匹配。虽然这种添加在搜索过程中会产生最小的延迟,但它可以将检索准确性提高多达 27%,并且保持成本效益和易于使用,无需任何额外的高级 RAG 技术。 在本教程中,我们将解析 DeepLake 文档,并创建一个 RAG 系统,可以回答文档中的问题。1. 数据集创建
我们将使用BeautifulSoup 库和 LangChain 的文档解析器(如 Html2TextTransformer、AsyncHtmlLoader)来解析 Activeloop 的文档。因此,我们需要安装以下库:
BeautifulSoup 解析网页中的所有链接
将数据转换为用户可读格式
2. 生成合成查询并训练 Deep Memory
下一步将是训练一个 deep_memory 模型,该模型将您的用户查询与您已有的数据集对齐。如果您还没有任何用户查询,不用担心,我们将使用 LLM 生成它们!TODO: 添加图片
上面我们展示了 deep_memory 的整体工作原理。如您所见,为了训练它,您需要相关性、查询以及语料库数据(我们要查询的数据)。语料库数据已在上一节中填充,此处我们将生成问题和相关性。questions- 是一个字符串文本,其中每个字符串代表一个查询relevance- 包含每个问题的地面实况链接。可能有多个文档包含给定问题的答案。因此,相关性是List[List[tuple[str, float]]],其中外部列表表示查询,内部列表表示相关文档。元组包含 str, float 对,其中字符串表示源文档的 id(对应于数据集中的id张量),而 float 表示当前文档与问题相关的程度。
3. 评估 Deep Memory 性能
太好了,我们已经训练了模型!它在召回率方面显示出显着的改进,但我们现在如何使用它并评估未见过的新数据呢?在本节中,我们将深入探讨模型评估和推理部分,看看如何将其与 LangChain 结合使用以提高检索准确性3.1 Deep Memory 评估
首先,我们可以使用 deep_memory 的内置评估方法。它计算多个recall 指标。只需几行代码即可轻松完成。
3.2 Deep Memory + RAGas
3.3 Deep Memory 推理
TODO: 添加图片
使用 deep_memory3.4 Deep Memory 成本节约
Deep Memory 在不改变现有工作流程的情况下提高了检索准确性。此外,通过减少输入到 LLM 的 top_k,您可以显著降低推理成本,因为令牌使用量更少。以编程方式连接这些文档到 Claude、VSCode 等,通过 MCP 获取实时答案。