Activeloop Deep Memory:提升RAG系统检索准确性的实战教程
技术背景介绍
随着大语言模型(LLM)的广泛应用,检索增强生成(Retrieval-Augmented Generation,简称RAG)已经成为构建高效问答系统的关键技术之一。然而,在将RAG集成到生产环境时,检索的准确性(recall)、成本和延迟通常是影响最终部署的三个主要因素。
在基本场景下,像OpenAI的Ada模型结合简单的相似性搜索可以提供尚可的结果;但如果对检索准确性有更高要求,则需要更复杂的检索技术,比如调整数据块大小、多次重写查询等。然而,这些方法可能显著增加延迟和成本。
为解决这些问题,Activeloop 的 Deep Memory 提供了一种轻量级神经网络层,能够有效提升检索准确性(最多达27%),同时对查询延迟的影响极小。本文将通过示例展示如何使用Activeloop Deep Memory构建高效的RAG系统。
核心原理解析
Deep Memory本质上是在向量存储系统上方新增了一层小型神经网络层,用于根据用户查询优化检索数据的相关性。它的工作流程大致如下:
- 训练阶段:通过生成合成的用户查询及其相关性(relevance)评分,训练神经网络模型。
- 推理阶段:在用户查询时,利用训练好的模型改进检索结果。
相比传统的检索方式,Deep Memory能够通过学习查询与数据之间的深层关系,显著提升检索性能,同时保持较低的延迟和成本。
代码实现演示
下面,我们将逐步实现一个基于Activeloop Deep Memory的RAG系统,具体使用LangChain和Deep Lake工具。
1. 数据集的创建
首先,我们需要从Activeloop的官方文档中提取内容,并构建向量数据库。
安装必要依赖
%pip install --upgrade --quiet tiktoken langchain-openai python-dotenv datasets langchain deeplake beautifulsoup4 html2text ragas
配置环境变量
import getpass
import os
# 输入你的OpenAI API密钥
os.environ["OPENAI_API_KEY"] = getpass.getpass("Enter your OpenAI API Key: ")
# 输入你的ActiveLoop API密钥
os.environ["ACTIVELOOP_TOKEN"] = getpass.getpass("Enter your ActiveLoop API Token: ")
加载Deep Lake向量数据库
from langchain_community.vectorstores import DeepLake
from langchain_openai import OpenAIEmbeddings
ORG_ID = "your-org-id" # ActiveLoop账号的组织ID
openai_embeddings = OpenAIEmbeddings()
db = DeepLake(
dataset_path=f"hub://{
ORG_ID}/deeplake-docs-deepmemory",
embedding=openai_embeddings,
runtime={
"tensor_db": True