Llamaindex RAG实践

Llamaindex RAG实践

环境配置

# 创建环境
conda create -n llamaindex python=3.10
# 激活环境
conda activate llamaindex
# 安装 torch
conda install pytorch==2.0.1 torchvision==0.15.2 torchaudio==2.0.2 pytorch-cuda=11.7 -c pytorch -c nvidia-c nvidia -y
# 安装python 依赖包
pip install einops
pip install  protobuf
# 安装 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

下载 Sentence Transformer 模型
源词向量模型 Sentence Transformer下载,运行以下指令新建文件:

cd ~
mkdir llamaindex_demo
mkdir model
cd ~/llamaindex_demo
touch download_hf.py

打开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')

然后,在 /root/llamaindex_demo 目录下执行该脚本即可自动开始下载:

cd /root/llamaindex_demo
conda activate llamaindex
python download_hf.py

下载 NLTK 相关资源
下载 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

LlamaIndex HuggingFaceLLM
运行以下指令,新建一个python文件

cd ~/llamaindex_demo
touch llamaindex_internlm.py

打开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="巴黎奥运会乒乓球女子单打冠军是谁?")])
print(rsp)

之后运行

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

结果如下:
在这里插入图片描述

LlamaIndex RAG
安装 LlamaIndex 词嵌入向量依赖

pip install llama-index-embeddings-huggingface==0.2.0 llama-index-embeddings-instructor==0.1.3

运行以下命令,建立知识库

cd ~/llamaindex_demo
mkdir data
cd data
touch gold_medal.md

打开gold_medal…md贴入以下内容

2024年巴黎奥运会中国奖牌榜明细 金牌获得者名单
  第1金,开门红!中国队摘得巴黎奥运会首金!当地时间727日,巴黎奥运会首枚金牌在沙托鲁射击中心产生。中国组合黄雨婷/盛李豪不负众望,凭借出色发挥,摘得十米气步枪混合团体金牌,为中国体育代表团取得了本届奥运会的“开门红”。
  第2金,祝贺陈艺文、昌雅妮!当地时间727日,在巴黎水上运动中心刚刚结束的跳水女子双人三米跳板决赛中,中国队组合陈艺文/昌雅妮夺得金牌,帮助中国队实现该项目奥运六连冠。这是中国跳水队在本届奥运会上的首枚金牌,也是中国体育代表团获得的第二枚金牌。
  第3金!谢瑜获男子10米气手枪金牌。当地时间728日,在巴黎奥运会射击男子十米气手枪决赛中,中国选手谢瑜凭借稳定发挥,获得该项目金牌,为中国体育代表团再添一金。
  第4金!祝贺练俊杰、杨昊!当地时间729日,巴黎奥运会跳水比赛在巴黎水上运动中心继续进行。刚刚,中国队组合练俊杰/杨昊夺得跳水男子双人十米台冠军。这是中国跳水队在本届奥运会上收获的第二枚金牌。
    第5金!19岁的盛李豪,金牌×2!当地时间729日,在巴黎奥运会射击男子十米气步枪决赛中,19岁的中国选手盛李豪发挥出色,摘得金牌,这是他在本届奥运会获得的第二枚金牌。
  第6金,祝贺“莎头组合”夺金!当地时间730日,巴黎奥运会乒乓球比赛在南巴黎竞技场4号馆展开混双决赛争夺,中国队组合王楚钦/孙颖莎战胜朝鲜队组合李正植/金琴英,夺得金牌。这是中国乒乓球队在奥运参赛历史上的首枚混双金牌,也是中国体育代表团在本届奥运会上的第六金。
  第7金! 红婵陈芋汐女双十米台金牌。在刚结束的巴黎奥运会跳水女子双人10米台比赛中,中国组合陈芋汐/全红婵发挥出色,为中国跳水队夺得第三枚金牌,这也是中国跳水队奥运会历史上第五十金。
  第8金!邓雅文历史性突破!在结束的巴黎奥运会女子自由式小轮车公园赛决赛中,中国选手邓雅文夺得冠军。
    第9金!游泳首金!潘展乐。北京时间81日凌晨,巴黎奥运会男子100米自由泳决赛中国选手潘展乐以4640的成绩打破世界纪录,夺得金牌,目前,该项目的世界纪录和奥运会纪录保持者都是潘展乐。
    第10金!刘宇坤夺得射击男子50米步枪三姿冠军。北京时间81日,在巴黎奥运会射击男子50米步枪三姿决赛中,中国选手刘宇坤获得冠军。这是巴黎奥运会上中国体育代表团的第10枚金牌,也是中国射击队在本届比赛的第4金。
    中国队第11金!杨家玉夺得女子20公里竞走金牌。当地时间81日上午,在特罗卡德罗广场进行的巴黎奥运会女子20公里竞走决赛中,现世界纪录保持者、中国选手杨家玉夺得冠军。这也是中国队收获的第4枚女子20公里竞走项目的奥运会金牌。杨家玉个人在该项目中也实现了集奥运会冠军、世锦赛冠军和世界纪录于一身的大满贯。
    第13金!郑思维黄雅琼获羽毛球混双冠军。北京时间82日,在巴黎奥运会羽毛球混合双打决赛中,中国组合郑思维/黄雅琼战胜韩国组合金元昊/郑娜银,获得冠军。这是中国体育代表团在巴黎奥运会中取得的第13枚金牌,也是中国羽毛球队在本届奥运会中取得的首枚金牌。
    第14金!陈梦战胜孙颖莎实现卫冕。北京时间83日,在巴黎奥运会乒乓球女子单打决赛中,中国选手陈梦战胜队友孙颖莎,在获得冠军的同时实现卫冕。
    第15金!陈清晨/贾一凡首夺奥运冠军。北京时间83日,在巴黎奥运会羽毛球女子双打决赛中,中国组合陈清晨/贾一凡战胜队友刘圣书/谭宁,获得冠军。
    第16金!郑钦文创历史。当地时间83日,在巴黎奥运会网球女子单打决赛中,21岁的中国选手郑钦文战胜克罗地亚选手韦基奇,获得冠军。这是中国队首次摘得奥运会网球女单金牌,郑钦文创造了历史。
    第17金!樊振东获奥运男单冠军,达成大满贯。北京时间84日,在巴黎奥运会乒乓球男子单打决赛中,中国选手樊振东4:1战胜瑞典选手莫雷加德,获得冠军。这是中国体育代表团在巴黎奥运会获得的第17金,乒乓球项目目前决出的3枚金牌全部被中国乒乓球队包揽。
    第18金!刘洋夺体操男子吊环金牌,邹敬园摘银。北京时间84日,在巴黎奥运会体操男子吊环决赛中,中国选手刘洋夺得金牌,邹敬园夺得银牌。
    第19金!中国队夺男子4x100米混合泳接力冠军。北京时间85日,在巴黎奥运会游泳男子4x100米混合泳接力决赛中,由徐嘉余、覃海洋、孙佳俊、潘展乐出战的中国队获得冠军。这是中国体育代表团在巴黎奥运会中获得的第19枚金牌,也是中国游泳队在本届奥运会中取得的第2枚金牌。
    第20金!李越宏获射击男子25米手枪速射冠军。北京时间85日,在巴黎奥运会射击男子25米手枪速射决赛中,中国选手李越宏获得冠军。这是中国体育代表团在巴黎奥运会获得的第20枚金牌,也是中国射击队在本届比赛的第5金。
    第21金!邹敬园获竞技体操男子双杠冠军。北京时间85日,在巴黎奥运会竞技体操男子双杠决赛中,中国选手邹敬园获得冠军。这是中国体育代表团在巴黎奥运会获得的第21枚金牌,也是中国体操队在本届比赛的第2金。
    第22金!全红婵成功卫冕,陈芋汐夺银。京时间86日,在巴黎奥运会跳水女子10米台决赛中,东京奥运会该项目冠军得主全红婵成功卫冕,陈芋汐获得亚军。这是中国体育代表团在巴黎奥运会获得的第22枚金牌,跳水项目已经决出的5枚金牌全部被中国队获得。这也是全红婵在巴黎奥运会获得的第2金,此前她搭档陈芋汐在女子双人10米台项目中夺冠。
    第23金!李发彬破奥运纪录卫冕。北京时间87日,在巴黎奥运会举重男子61公斤级比赛中,中国选手李发彬获得冠军,实现卫冕。他抓举143公斤的成绩打破奥运会纪录。这是中国体育代表团在巴黎奥运会中获得的第23枚金牌,也是中国举重队在本届奥运会中取得的首枚金牌。
    第24金!中国花样游泳队首夺奥运冠军。北京时间88日,在集体技术自选、集体自由自选、集体技巧自选三项比赛过后,由冯雨、常昊、王赐月、张雅怡、王柳懿、王芊懿、肖雁宁、向玢璇出战的中国队获得巴黎奥运会花样游泳团体赛冠军。这是中国体育代表团在巴黎奥运会中取得的第24枚金牌,也是属于中国花样游泳队的首枚奥运会金牌。
    第25金!侯志慧“绝杀”破奥运纪录,逆转夺冠。北京时间88日,在巴黎奥运会举重女子49公斤级比赛中,中国选手侯志慧凭借最后一把挺举逆转夺冠,实现卫冕。117公斤的挺举成绩也打破了奥运会纪录。这是中国体育代表团在巴黎奥运会中获得的第25枚金牌,也是中国举重队在本届奥运会中取得的第2枚金牌。

新建一个python文件

cd ~/llamaindex_demo
touch llamaindex_RAG.py

打开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("巴黎奥运会乒乓球女子单打冠军是谁?")
print(response)

之后运行

python llamaindex_RAG.py

结果如下图所示:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值