【大模型LLMs】RAG实战:基于LlamaIndex快速构建RAG链路

  • RAG框架:LlamaIndex
  • 大模型底座:Qwen2-7B-Instruct
  • Embedding模型:bge-base-zh-v1.5
  • Rerank模型:bge-reranker-base
  • 数据集:cmrc2018(该数据集禁止商用)

1. 环境准备

安装LlamaIndex的相关依赖

pip install llama-index
pip install llama-index-llms-huggingface
pip install llama-index-embeddings-huggingface
pip install llama-index-postprocessor-flag-embedding-reranker
pip install FlagEmbedding
pip install datasets

从HuggingFace安装将要使用的LLMs以及embedding model,这里我们选择Qwen/Qwen2-7B-Instruct作为大模型底座,选择BAAI/bge-base-zh-v1.5作为embedding模型用于对文档进行向量化表征,选择BAAI/bge-reranker-base作为rerank模型用于对粗排后的参考信息进行重排序
这里介绍快速下载huggingface模型的命令行方法:

1. 首先安装依赖
pip install -U huggingface_hub
pip install -U hf-transfer 
2. 设置环境变量(设置hf环境变量为1用于提升下载速度;设置镜像站地址)
export HF_HUB_ENABLE_HF_TRANSFER=1
export HF_ENDPOINT="https://hf-mirror.com"
3. 安装相应的模型(以Qwen2-7B-Instruct为例,前面是huggingface上的模型名,后面是本地下载的路径)
huggingface-cli download Qwen/Qwen2-7B-Instruct --local-dir ./Qwen2-7B-Instruct
huggingface-cli download BAAI/bge-base-zh-v1.5 --local-dir ./bge-base-zh-v1.5
huggingface-cli download BAAI/bge-reranker-base --local-dir ./bge-reranker-base

2. 数据准备

使用开源数据集 cmrc2018 构建本地知识库,该数据集由人类专家在维基百科段落上标注的近2万个真实问题组成,包含上下文(可以用于构建本地知识库)、问题和答案

在这里插入图片描述

我们读取cmrc的train数据集,并将question,answer以及context存储到本地data目录下的cmrc-eval-zh.jsonl文件下,代码如下:

import json
from tqdm import tqdm
from datasets import load_dataset

cmrc = load_dataset("cmrc2018")
with open("../data/cmrc-eval-zh.jsonl", "w") as f:
    for train_sample in tqdm(cmrc["train"]):
        qa_context_mp = {
   
   
            "question": train_sample["question"],
            "reference_answer": train_sample["answers"]["text"][0],
            "reference_context": train_sample["context"]
        }
        f.write(json.dumps(qa_context_mp, ensure_ascii=False) + "\n")

在这里插入图片描述

3. RAG框架构建

在具体构建rag链路之前,我们初始化一个日志记录logger,用于记录运行过程中的信息

import logging

# 设置logger
logging.basicConfig(
    level=logging.DEBUG,
    filename='../out/output.log',  # 替换成保存日志的本地目录
    datefmt='%Y/%m/%d %H:%M:%S',
    format='%(asctime)s - %(name)s - %(levelname)s - %(lineno)d - %(module)s - %(message)s'
)
logger = logging.getLogger(__name__)

3.1 数据读取 + 数据切块

读取第二节中构建的cmrc-eval-zh.jsonl文件,将reference_context字段读取出来保存到list中作为后续知识库的文本,另外将question-answer pair进行保存,用于后续模型的推理。然后构建llama_index.core的Document对象。如果是本地的txt文档知识库,也可以直接使用SimpleDirectoryReader方法

from llama_index.core import Document, SimpleDirectoryReader

def get_documents_q
### RAG (Retrieval-Augmented Generation) 和 LangChain 在自然语言处理框架中的应用 #### RAG 的定义与功能 检索增强生成 (RAG) 是一种多功能框架,允许大型语言模型 (LLM) 访问训练数据之外的外部数据。这种能力使得 LLMs 能够实时获取最新信息并将其纳入响应中[^2]。 #### RAG 实现方式 RAG 并不局限于特定实现形式;它可以采用多种方法来适配不同的任务需求和数据格式。这赋予了该架构高度灵活性,在实际应用场景中有广泛适用性。 #### LangChain 库的作用 LangChain 是一个专注于构建基于对话的应用程序库,特别适合集成到使用 RAG 技术的语言模型项目里。通过提供一系列工具和服务接口,开发者可以更便捷地开发具备强大交互能力和上下文理解力的应用程序。 ```python from langchain import LangChain, DocumentStore, Retriever # 初始化组件实例 document_store = DocumentStore() retriever = Retriever() # 创建链路对象 lang_chain_instance = LangChain(document_store=document_store, retriever=retriever) def process_query(query_text): retrieved_docs = retriever.retrieve_documents(query=query_text) response = lang_chain_instance.generate_response( query=query_text, context=retrieved_docs ) return response ``` 此代码片段展示了如何利用 `LangChain` 来搭建一个简单的问答系统流程。其中包含了文档存储、检索器初始化以及查询处理函数的设计思路。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值