当前位置: 首页 > news >正文

基础闯关4

环境配置

我们来配置LlamaIndex实验环境,首先创建Python环境并安装必要的库:

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 nvidiapip install einops
pip install  protobuf
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
pip install llama-index-embeddings-huggingface llama-index-embeddings-instructor

随后我们需要下载sentence transformer模型,以生成文档和查询的嵌入向量。我们在root目录下创建llamaindex_demomodel文件夹。其中llamaindex_demo存放代码文件,model存放大模型和嵌入模型。我们进入llamaindex_demo文件夹,创建download_hf.py文件来下载huggingface嵌入模型:

# 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

以上命令会从huggingface镜像网站下载相对轻量、支持中文且效果较好的 paraphrase-multilingual-MiniLM-L12-v2模型。

下一步,我们需要下载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 

最后,我们在/root/model文件夹下添加开发机中已经有的internlm2-chat-1_8b文件夹的软链接:

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

至此,基础环境全部搭建完成。

三、RAG实践

1. 不使用RAG

xtuner是上海人工智能实验室开源的大模型微调框架,由于时间较新,internlm2-chat-1_8b的训练数据中不含有xtunter相关内容。 我们在不使用RAG的情况下提问:`是什么?

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)

返回结果如下:

internlm2-chat-1_8b认为 xtunter是一个音乐软件,显然并不正确。

2. 使用RAG

我们首先需要收集xtuner相关文档数据。对此我们克隆xtunergithub存储库并选择README_zh.md文件作为外部知识。在llamaindex_demo文件夹下创建data文件夹来放置数据:

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

随后我们在llamaindex_demo文件夹下创建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_modelllm = 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 text  ******************')
print(response.response)
print('*************   Source text  ******************')
for text in response.source_nodes:print(text.text)

这里简单介绍一下返回的response变量。response 是一个结构体变量,其中response.response为大模型的回答,response.source_nodes为检索的文档列表,通过print可以直接查看内容。结果如下:

回答

检索文档

可以看到,大模型成功回答了我们的查询

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • CentOS7虚拟机下安装及使用Docker
  • qt5.15.2在线安装选项不见了?怎么办?
  • 【Pythonj进阶】Python中的日志记录与监控:跟踪和分析应用程序行为
  • union 的正确食用方法
  • 文件包含漏洞PHP伪协议利用方法
  • Mac 安装 jdk 8详细教程
  • 有限体积法:基于一维稳态扩散问题及其程序实现
  • 计算机网络 第2章 物理层
  • 农产品自主供销系统小程序的设计
  • 94.游戏的启动与多开-互斥量对开检测
  • 同三维S61-20SDI 20倍 HDMI SDI USB3.0 网口 3高清摄像机
  • Azure AI Search 中的二进制量化:优化存储和加快搜索速度
  • 【MySQL】索引使用规则——(覆盖索引,单列索引,联合索引,前缀索引,SQL提示,数据分布影响,查询失效情况)
  • python07-单元测试框架unittest1-1
  • JS都有哪些操作数组的方法
  • 深入了解以太坊
  • 收藏网友的 源程序下载网
  • #Java异常处理
  • 【翻译】babel对TC39装饰器草案的实现
  • centos安装java运行环境jdk+tomcat
  • Codepen 每日精选(2018-3-25)
  • Linux CTF 逆向入门
  • Node + FFmpeg 实现Canvas动画导出视频
  • NSTimer学习笔记
  • Python 基础起步 (十) 什么叫函数?
  • vue-cli3搭建项目
  • windows下使用nginx调试简介
  • 阿里中间件开源组件:Sentinel 0.2.0正式发布
  • 安装python包到指定虚拟环境
  • 闭包--闭包之tab栏切换(四)
  • 构造函数(constructor)与原型链(prototype)关系
  • 模型微调
  • 浅析微信支付:申请退款、退款回调接口、查询退款
  • 一个SAP顾问在美国的这些年
  • 源码之下无秘密 ── 做最好的 Netty 源码分析教程
  • 【运维趟坑回忆录 开篇】初入初创, 一脸懵
  • Prometheus VS InfluxDB
  • SAP CRM里Lead通过工作流自动创建Opportunity的原理讲解 ...
  • 整理一些计算机基础知识!
  • ​Benvista PhotoZoom Pro 9.0.4新功能介绍
  • ​直流电和交流电有什么区别为什么这个时候又要变成直流电呢?交流转换到直流(整流器)直流变交流(逆变器)​
  • (vue)el-tabs选中最后一项后更新数据后无法展开
  • (安全基本功)磁盘MBR,分区表,活动分区,引导扇区。。。详解与区别
  • (仿QQ聊天消息列表加载)wp7 listbox 列表项逐一加载的一种实现方式,以及加入渐显动画...
  • (附源码)spring boot儿童教育管理系统 毕业设计 281442
  • (附源码)springboot 基于HTML5的个人网页的网站设计与实现 毕业设计 031623
  • (含笔试题)深度解析数据在内存中的存储
  • (一)RocketMQ初步认识
  • (一)springboot2.7.6集成activit5.23.0之集成引擎
  • (原創) 如何使用ISO C++讀寫BMP圖檔? (C/C++) (Image Processing)
  • (转)创业家杂志:UCWEB天使第一步
  • (转)利用PHP的debug_backtrace函数,实现PHP文件权限管理、动态加载 【反射】...
  • **PyTorch月学习计划 - 第一周;第6-7天: 自动梯度(Autograd)**
  • .“空心村”成因分析及解决对策122344
  • .dwp和.webpart的区别