基于OpenVINO GenAI和LangChain构建RAG系统的完整指南

基于OpenVINO GenAI和LangChain构建RAG系统的完整指南

【免费下载链接】openvino_notebooks openvino_notebooks: 这是OpenVINO Toolkit的Jupyter笔记本集合,提供了一系列关于深度学习模型推理、模型训练和实时演示的交互式教程和示例。 【免费下载链接】openvino_notebooks 项目地址: https://gitcode.com/GitHub_Trending/op/openvino_notebooks

什么是RAG系统?

检索增强生成(Retrieval-Augmented Generation,RAG)是一种将大语言模型(LLM)知识与额外数据(通常是私有数据或实时数据)相结合的技术。虽然LLM能够处理广泛的主题,但其知识仅限于训练时所使用的特定时间点的公开数据。当我们需要构建能够处理私有数据或模型截止日期后引入的数据的AI应用时,就需要用特定信息来增强模型的知识。将适当的信息检索并插入到模型提示中的过程,就称为检索增强生成(RAG)。

技术栈介绍

本教程将使用以下关键技术组件:

  1. LangChain:一个用于开发基于语言模型应用的框架,提供了专门用于构建RAG应用的多个组件
  2. OpenVINO GenAI:用于优化模型推理性能的工具集
  3. Hugging Face Optimum:Transformers库与OpenVINO之间的接口,用于在Intel架构上加速端到端管道

系统架构概述

本示例中的定制RAG管道包含以下按顺序排列的组件,其中嵌入(embedding)、重排序(rerank)和LLM都将使用OpenVINO GenAI来优化它们的推理性能:

  1. 文档加载器:加载和预处理文档
  2. 文本分割器:将文档分割成适合处理的块
  3. 嵌入模型:将文本转换为向量表示
  4. 向量存储:存储和检索嵌入向量
  5. 重排序模型:对检索到的文档进行重新排序
  6. LLM模型:生成最终回答

环境准备

在开始之前,我们需要设置Python环境并安装必要的依赖项。建议在虚拟环境中运行本教程。

# 安装核心依赖
pip install --pre -U openvino>=2024.2.0
pip install --pre -U openvino-tokenizers[transformers]
pip install --pre -U openvino-genai

# 安装辅助库
pip install datasets accelerate gradio>=4.19 onnx<1.16.2 einops
pip install transformers_stream_generator tiktoken transformers>=4.43.1
pip install faiss-cpu sentence_transformers langchain>=0.2.0
pip install langchain-community>=0.2.15 langchainhub unstructured
pip install scikit-learn python-docx pypdf huggingface-hub>=0.26.5

模型选择与配置

本教程支持多种模型,您可以从提供的选项中选择一个来比较开源LLM解决方案的质量。

可用的嵌入模型选项

  1. bge-small-en-v1.5:英语小型通用嵌入模型
  2. bge-small-zh-v1.5:中文小型通用嵌入模型
  3. bge-large-en-v1.5:英语大型通用嵌入模型
  4. bge-large-zh-v1.5:中文大型通用嵌入模型
  5. bge-m3:多语言通用嵌入模型

BGE嵌入是一种通用嵌入模型,使用RetroMAE进行预训练,并通过对比学习在大规模配对数据上进行训练。

可用的重排序模型选项

  1. bge-reranker-v2-m3:多语言重排序模型
  2. bge-reranker-large:大型重排序模型
  3. bge-reranker-base:基础重排序模型

重排序模型使用交叉编码器对输入对执行完全注意力,比嵌入模型(即双编码器)更准确但更耗时。因此,它可以用于重新排序嵌入模型返回的前k个文档。

模型转换与权重压缩

权重压缩算法旨在压缩模型的权重,可用于优化大型模型的存储占用和性能,其中权重的大小相对大于激活的大小,例如大型语言模型(LLM)。与INT8压缩相比,INT4压缩进一步提高了性能,但会引入预测质量的轻微下降。

使用Optimum-CLI进行LLM转换和权重压缩

🤗 Optimum Intel是🤗 Transformers和Diffusers库与OpenVINO之间的接口,用于在Intel架构上加速端到端管道。它提供了易于使用的CLI界面,用于将模型导出为OpenVINO中间表示(IR)格式。

以下演示了使用optimum-cli进行模型导出的基本命令:

optimum-cli export openvino --model <model_id_or_path> --task <task> <out_dir>

其中:

  • --model参数是HuggingFace Hub中的模型ID或包含模型的本地目录
  • --task是导出模型应解决的受支持任务之一。对于LLM,它将是text-generation-with-past

您还可以在导出模型时通过设置--weight-format为fp16、int8或int4,对线性、卷积和嵌入层应用fp16、8位或4位权重压缩。这种类型的优化可以减少内存占用和推理延迟。

对于INT4量化,您还可以指定以下参数:

  • --group-size:分组大小参数

构建RAG管道

构建RAG管道的主要步骤如下:

  1. 加载和预处理文档:使用LangChain的文档加载器加载PDF文档
  2. 文本分割:将文档分割成适合处理的块
  3. 嵌入模型初始化:加载并初始化OpenVINO优化的嵌入模型
  4. 向量存储创建:使用FAISS创建向量存储
  5. 重排序模型初始化:加载并初始化OpenVINO优化的重排序模型
  6. LLM模型初始化:加载并初始化OpenVINO优化的LLM模型
  7. 问答管道构建:将所有组件组合成完整的RAG管道

运行问答系统

完成管道构建后,您可以运行问答系统,输入问题并获取基于文档内容的回答。系统会首先检索相关文档片段,然后使用LLM生成最终回答。

性能优化建议

  1. 模型选择:根据硬件资源和性能需求选择合适的模型大小
  2. 量化级别:在精度和性能之间找到平衡点
  3. 设备选择:合理分配不同模型到CPU或GPU设备
  4. 批处理:对嵌入和重排序操作使用批处理以提高吞吐量

总结

本教程详细介绍了如何使用OpenVINO GenAI和LangChain构建高效的RAG系统。通过结合OpenVINO的优化能力和LangChain的便捷框架,我们能够创建能够处理私有数据和实时数据的智能问答系统。这种技术可以广泛应用于知识库问答、文档分析等多种场景。

【免费下载链接】openvino_notebooks openvino_notebooks: 这是OpenVINO Toolkit的Jupyter笔记本集合,提供了一系列关于深度学习模型推理、模型训练和实时演示的交互式教程和示例。 【免费下载链接】openvino_notebooks 项目地址: https://gitcode.com/GitHub_Trending/op/openvino_notebooks

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值