InternLM + LlamaIndex RAG 实践

news2024/9/22 9:47:14

1. 环境配置

首先创建一个虚拟环境

conda create -n llamaindex python=3.10

为虚拟环境安装以下安装包

conda activate llamaindex
conda install pytorch==2.0.1 torchvision==0.15.2 torchaudio==2.0.2 pytorch-cuda=11.7 -c pytorch -c nvidia
pip install einops
pip install  protobuf
conda activate llamaindex
pip install llama-index==0.10.38 llama-index-llms-huggingface==0.2.0 "transformers[torch]==4.41.1" "huggingface_hub[inference]==0.23.1" huggingface_hub==0.23.1 sentence-transformers==2.7.0 sentencepiece==0.2.0

2.模型准备

首先我们需要下载Sentence Transformer 模型,在llamaindex_demo目录下新建一个文件download_hf.py,然后把代码复制进去

import os
os.environ['HF_ENDPOINT'] = 'https://hf-mirror.com'
os.system('huggingface-cli download --resume-download sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2 --local-dir /root/model/sentence-transformer')

然后在终端执行命令

python download_hf.py

就会自动下载模型了,如果遇到time out错误,就多试几次,直到模型下载完,如下图

然后下载 NLTK 相关资源

cd /root
git clone https://gitee.com/yzy0612/nltk_data.git  --branch gh-pages
cd nltk_data
mv packages/*  ./
cd tokenizers
unzip punkt.zip
cd ../taggers
unzip averaged_perceptron_tagger.zip

运行结果如图:

3. LlamaIndex HuggingFaceLLM

首先将InternLM2 1.8B软链接好

cd ~/model
ln -s /root/share/new_models/Shanghai_AI_Laboratory/internlm2-chat-1_8b/ ./

然后新建文件llamaindex_internlm.py,将代码复制进去

from llama_index.llms.huggingface import HuggingFaceLLM
from llama_index.core.llms import ChatMessage
llm = HuggingFaceLLM(
    model_name="/root/model/internlm2-chat-1_8b",
    tokenizer_name="/root/model/internlm2-chat-1_8b",
    model_kwargs={"trust_remote_code":True},
    tokenizer_kwargs={"trust_remote_code":True}
)

rsp = llm.chat(messages=[ChatMessage(content="xtuner是什么?")])
print(rsp)

然后运行

conda activate llamaindex
cd ~/llamaindex_demo/
python llamaindex_internlm.py

结果为:

4.LlamaIndex RAG

首先安装LlamaIndex 词嵌入向量依赖

conda activate llamaindex
pip install llama-index-embeddings-huggingface llama-index-embeddings-instructor

运行以下命令,获取知识库

cd ~/llamaindex_demo
mkdir data
cd data
git clone https://github.com/InternLM/xtuner.git
mv xtuner/README_zh-CN.md ./

然后在llamaindex_demo文件夹中新建一个python文件, 命令为llamaindex_RAG.py,将代码复制进去


from llama_index.core import VectorStoreIndex, SimpleDirectoryReader, Settings

from llama_index.embeddings.huggingface import HuggingFaceEmbedding
from llama_index.llms.huggingface import HuggingFaceLLM

#初始化一个HuggingFaceEmbedding对象,用于将文本转换为向量表示
embed_model = HuggingFaceEmbedding(
#指定了一个预训练的sentence-transformer模型的路径
    model_name="/root/model/sentence-transformer"
)
#将创建的嵌入模型赋值给全局设置的embed_model属性,
#这样在后续的索引构建过程中就会使用这个模型。
Settings.embed_model = embed_model

llm = HuggingFaceLLM(
    model_name="/root/model/internlm2-chat-1_8b",
    tokenizer_name="/root/model/internlm2-chat-1_8b",
    model_kwargs={"trust_remote_code":True},
    tokenizer_kwargs={"trust_remote_code":True}
)
#设置全局的llm属性,这样在索引查询时会使用这个模型。
Settings.llm = llm

#从指定目录读取所有文档,并加载数据到内存中
documents = SimpleDirectoryReader("/root/llamaindex_demo/data").load_data()
#创建一个VectorStoreIndex,并使用之前加载的文档来构建索引。
# 此索引将文档转换为向量,并存储这些向量以便于快速检索。
index = VectorStoreIndex.from_documents(documents)
# 创建一个查询引擎,这个引擎可以接收查询并返回相关文档的响应。
query_engine = index.as_query_engine()
response = query_engine.query("xtuner是什么?")

print(response)
RAG增强之后的结果:

未增强的时候,问他什么是Hugging Face

增强之后再问

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2069837.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Midjourney提示词-动物系列-65

A super cute little anthropomorphic,sheep of the Chinese Zodiac, wearing berets ,in a Hanfu in red style,standing, eyes,cute tail,super realistic,super detail,luxurious,elegant,Unreal Engine,octane render, 8K,VRAY super realistic Pixar Style, Tiny cute…

百数功能插件技术解析:审批流程设置与数据填写便捷性探讨

低代码平台作为一种创新的开发工具,正逐渐受到企业的青睐。为了进一步提升用户体验,满足用户多样化的需求,百数低代码平台开通了“有问必答”板块。 问题1:功能插件到底有什么用?都用在哪些位置? 功能插件…

【大模型系列】Flash-VStream(2024.06)

● Paper:https://arxiv.org/pdf/2406.08085v1 ● Github:https://github.com/IVG-SZ/Flash-VStream?tabreadme-ov-file#structure ● HuggingFace:https://huggingface.co/spaces/IVGSZ/Flash-VStream-demo ● Author:Haoji Zha…

line-height的使用场景

line-height:字面含义为行高,行高有三部分组成,分为内容高度,上间距,下间距。 可以看到文本在div盒子中的默认位置是左上角。此时文字部分的行高只有内容高度在支撑,上间距和下间距都是0。鼠标在字体上滑动时的蓝色部…

【重点】人工智能大语言模型技术发展研究报告2024|附下载

人工智能作为引领新一轮科技产业革命的战略性技术和新质生产力重要驱动力,正在引发经济、社会、文化等领域的变革和重塑。 2023 年以来,以ChatGPT、GPT-4 为代表的大模型技术的出台,因其强大的内容生成及多轮对话能力,引发全球新…

第2章-06-Cookie在网站回话中的作用

🏆作者简介,黑夜开发者,CSDN领军人物,全栈领域优质创作者✌,CSDN博客专家,阿里云社区专家博主,2023年CSDN全站百大博主。 🏆数年电商行业从业经验,历任核心研发工程师,项目技术负责人。 🏆本文已收录于专栏:Web爬虫入门与实战精讲,后续完整更新内容如下。 文章…

3.5mm耳机插头制作手机内录线电路图

1.背景 无人直播或录屏直播手机mic会对外界声音的录入,而且很嘈杂。 2.实现功能 手机酷狗播放音频,同时手机内打开录音软件录音,同一台手机操作。 3.电路图 接线分为2种,国标和美标,自己尝试,肯定有一…

链表OJ题——链表的中间节点

文章目录 一、题目链接二、解题思路三、解题代码 一、题目链接 链表的中间节点 二、解题思路 三、解题代码

Python优化算法09——黏菌优化算法(SMA)

科研里面优化算法都用的多,尤其是各种动物园里面的智能仿生优化算法,但是目前都是MATLAB的代码多,python几乎没有什么包,这次把优化算法系列的代码都从底层手写开始。 需要看以前的文章可以参考:Python优化算法_阡之尘…

护眼台灯有辐射吗?三大劣质护眼台灯危害曝光!

护眼台灯有辐射吗?护眼台灯旨在提供便利、健康的光线环境,但作为光学测评师,我注意到一些低品质的护眼台灯可能存在严重问题。这些台灯如果使用劣质材料制造,在使用过程中可能会释放有害辐射,长期接触甚至可能引发黄斑…

AI副业:用百度文库AI,我也能轻松创建漫画、画本?

前言 作为一种受众广泛的艺术形式,漫画的影响力应该不需要我多说什么。 强烈的视觉化和叙事性,让漫画成为无数年轻读者的阅读启蒙,也让无数二十一世纪青年拥有了自己的「漫画梦」。可是要制作出一份能拿得出手的漫画谈何容易,先…

SpringCloud之一注册中心(Eureka)

一、Eureka概述 Eureka是Netflix公司开源的一个服务注册与发现的中间组件。 在微服务架构系统之中,我们经常提三个角色:注册中心 (Register)、服务提供者(Provider)、服务消费者(Consumer)。 1.注册中心:服务提供者可以将服务发布到注册中心…

<数据集>考场行为识别数据集<目标检测>

数据集格式:VOCYOLO格式 图片数量:2192张 标注数量(xml文件个数):2192 标注数量(txt文件个数):2192 标注类别数:2 标注类别名称:[cheating, good] 序号类别名称图片数框数1cheating128214412good1067…

边界dp注意重叠边界

前言:这个题目感觉不是简单的背包问题,因为我们这个是有限制的 想到了之前写的边界的dp,本来想定义二维dp,发现没必要二维dp,一维dp就够了,dp[i] 表示填充 1 - i 需要的最少的数量,符合子问题的…

Redis内存淘汰

Redis内存淘汰 Redis可以存储多少数据 maxmemory配置&#xff0c;默认是注释掉的。 #maxmemory <bytes>我们可以主动配置maxmemory&#xff0c;maxmemory支持各种单位&#xff0c;默认是字节 maxmemory 1024 maxmemory 1024KB maxmemory 1024MB maxmemory 1024GB当Re…

三大低速总线之一:UART

三大低速总线之一&#xff1a;UART 文章目录 三大低速总线之一&#xff1a;UART前言一、UART协议二、设计1.整体说明2.rx波形设计 三 程序实现 前言 三大低速总线&#xff1a;UART、IIC、SPI&#xff0c;其中IIC和SPI是同步通讯&#xff0c;UART是异步的。 优点&#xff1a; …

CSS\JS实现页面背景气泡logo上浮效果

效果图&#xff1a; 源码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Bubble Logo…

Linux_at任务调度

目录 at定时任务 基本介绍 at命令格式 at命令选项 at时间定义 at任务调度实例 at定时任务 基本介绍 at是一次性的定时计划任务&#xff0c;默认atd守护进程每60秒检测作业队列&#xff0c;检查作业运行时间&#xff0c;时间与当前时间匹配则执行。 ps-ef指令检测当前在运…

如何使用ssm实现农家乐信息平台的设计与实现+vue

TOC ssm066农家乐信息平台的设计与实现vue 第1章 绪论 1.1 课题背景 互联网发展至今&#xff0c;无论是其理论还是技术都已经成熟&#xff0c;而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播&#xff0c;搭配信息管理工具可以很好地为人们提供服务。所以各…

话费api充值接口对接

全网话费折扣API接口的对接合作流程确实涉及几个关键步骤&#xff0c;确保了应用程序能够顺利集成话费充值服务。以下是该流程的概述以及一些补充的考虑因素&#xff1a; 1.申请API接口&#xff1a; 开发者联系第三方话费充值服务提供商&#xff0c;提交API接口使用申请。获得…