使用 LlamaIndex 部署本地 Mistral-7b 大模型实现 RAG

2024-01-24 23:36

本文主要是介绍使用 LlamaIndex 部署本地 Mistral-7b 大模型实现 RAG,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

原理

LlamaIndex的文档链接:Using LLMs - LlamaIndex 🦙 0.9.33

LlamaIndex 的一般使用模式如下:

  1. 加载文档(手动或通过数据加载器)
  2. 将文档解析为节点
  3. 构建索引(来自节点或文档)
  4. (可选,高级)在其他索引之上构建索引
  5. 查询索引

默认情况下,LlamaIndex 使用 OpenAI 的text-davinci-003模型,然而由于 OpenAI 的网站在国内无法访问,故使用本地下载好的 🐋 Mistral-7B-OpenOrca 🐋 模型代替之。
模型的链接如下:
Open-Orca/Mistral-7B-OpenOrca · Hugging Face

示例

HuggingFaceLLM 的参数如下:

HuggingFaceLLM - LlamaIndex 🦙 0.9.33

generate_kwargs 就是在生成时传递给模型的参数,具体可以看:

Generation 说明

首先准备一段文字,任意内容皆可,我准备的是关于【科学指南针】服务机构的介绍,摘自下面的网站:

科学指南针科研推出论文阅读,管理神器,强大AI赋能,轻松科研_服务_工作台_用户

科学指南针,一家始终致力于为科研工作者提供专业、快捷、全方位的检测及科研服务的大型科研服务机构,近日重磅推出全新产品「科研工作台」——一款集论文阅读、管理、分析于一体的AI赋能神器。这款产品的推出,将AI技术与科研工作深度融合,为科研工作者提供前所未有的便利。
「科研工作台」不仅具备自动解读论文研究目的、主要内容、实验过程等强大功能,还支持一键定位原文精读。更重要的是,它配备的AI阅读助手可以基于论文内容,快速回答用户提出的任何问题,帮助科研人员快速获取所需信息。这一创新性的设计,无疑将极大地提升科研工作的效率。
此外,「科研工作台」还支持分组/标签双体系管理文献。用户可以根据自己的需求,自定义建立分组和子分组进行文献管理。同时,系统会自动根据关键信息为文献打标签,并允许用户自定义新增或删除标签。通过这一功能,用户可以快速筛选出自己需要的文献。
自2014年成立以来,科学指南针始终以全心全意服务科研,助力全球科技创新为使命。经过数年的努力,公司已建立起包括材料测试、环境检测、生物服务、行业解决方案、科研绘图、模拟计算、数据分析、论文服务、试剂耗材、指南针学院等在内的科研产品和服务矩阵。如今,「科研工作台」的推出,再次证明了科学指南针在推动创新方面的能力。
值得一提的是,科学指南针的生物实验室已经取得了实验动物许可证,环境实验室和南京材料实验室先后获得了中国计量认证证书(CMA)。此外,南京材料实验室还获得了ISO三体系认证。这些资质和认证,不仅证明了科学指南针在科研服务领域的专业性和可靠性,也为其未来的发展奠定了坚实的基础。
展望未来,科学指南针的愿景是成为世界级科研服务机构。他们坚信,只要有科研的地方,就应有科学指南针的存在。而「科研工作台」的推出,正是实现这一愿景的重要一步。这款产品将为全球科研工作者提供更为便捷、高效的服务,助力科研事业的发展。
在新的历史起点上,科学指南针将继续秉承全心全意服务科研的使命,不断创新、追求卓越。我们期待着他们在未来的发展中,继续为全球科技创新做出更大的贡献

代码如下,这里使用了 HuggingFaceLLM 包来加载本地的 LLM。使用 load_in_4bit 对模型进行量化。
embed_model 选用了 “local:BAAI/bge-large-zh-v1.5”

from llama_index import VectorStoreIndex, SimpleDirectoryReader
from llama_index import ServiceContext
from llama_index.llms import HuggingFaceLLM
import torch
from transformers import BitsAndBytesConfig, AutoModelForCausalLM, AutoTokenizer
from llama_index.prompts import PromptTemplate
from llama_index import set_global_service_contextquantization_config = BitsAndBytesConfig(load_in_4bit=True,bnb_4bit_compute_dtype=torch.float16,bnb_4bit_quant_type="nf4",bnb_4bit_use_double_quant=True,
)model_name = "/root/autodl-tmp/kdy/models/Mistral-7B-OpenOrca"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(model_name)
question = [{"role": "user", "content": "{query_str}"},
]
llm = HuggingFaceLLM(  model=model,tokenizer=tokenizer,query_wrapper_prompt=PromptTemplate(tokenizer.apply_chat_template(question, tokenize=False)),context_window=3900,max_new_tokens=500,model_kwargs={"quantization_config": quantization_config},generate_kwargs={"temperature": 0.2, "top_k": 5, "do_sample": True, "top_p": 0.95},device_map="auto",
)
service_context = ServiceContext.from_defaults(llm=llm, embed_model="local:BAAI/bge-large-zh-v1.5")
set_global_service_context(service_context)documents = SimpleDirectoryReader("/root/autodl-tmp/kdy/RAG/data").load_data()
index = VectorStoreIndex.from_documents(documents)
index.storage_context.persist(persist_dir="./storage")query_engine = index.as_query_engine(streaming=True, similarity_top_k=3)
response_stream = query_engine.query("科学指南针提供哪些服务?")
response_stream.print_response_stream()
print()

其中documents = SimpleDirectoryReader("/root/autodl-tmp/kdy/RAG/data").load_data() 中的 data 文件夹下存放自己提供的内容。

输出如下:
在这里插入图片描述

response_stream.print_response_stream() 方法会将答案逐字输出,如下面的 GIF 所示。
在这里插入图片描述

参考文献:

Using LLMs - LlamaIndex 🦙 0.9.33

Google Colaboratory

这篇关于使用 LlamaIndex 部署本地 Mistral-7b 大模型实现 RAG的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/641386

相关文章

Nginx 配置跨域的实现及常见问题解决

《Nginx配置跨域的实现及常见问题解决》本文主要介绍了Nginx配置跨域的实现及常见问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来... 目录1. 跨域1.1 同源策略1.2 跨域资源共享(CORS)2. Nginx 配置跨域的场景2.1

python使用库爬取m3u8文件的示例

《python使用库爬取m3u8文件的示例》本文主要介绍了python使用库爬取m3u8文件的示例,可以使用requests、m3u8、ffmpeg等库,实现获取、解析、下载视频片段并合并等步骤,具有... 目录一、准备工作二、获取m3u8文件内容三、解析m3u8文件四、下载视频片段五、合并视频片段六、错误

Python中提取文件名扩展名的多种方法实现

《Python中提取文件名扩展名的多种方法实现》在Python编程中,经常会遇到需要从文件名中提取扩展名的场景,Python提供了多种方法来实现这一功能,不同方法适用于不同的场景和需求,包括os.pa... 目录技术背景实现步骤方法一:使用os.path.splitext方法二:使用pathlib模块方法三

CSS实现元素撑满剩余空间的五种方法

《CSS实现元素撑满剩余空间的五种方法》在日常开发中,我们经常需要让某个元素占据容器的剩余空间,本文将介绍5种不同的方法来实现这个需求,并分析各种方法的优缺点,感兴趣的朋友一起看看吧... css实现元素撑满剩余空间的5种方法 在日常开发中,我们经常需要让某个元素占据容器的剩余空间。这是一个常见的布局需求

HTML5 getUserMedia API网页录音实现指南示例小结

《HTML5getUserMediaAPI网页录音实现指南示例小结》本教程将指导你如何利用这一API,结合WebAudioAPI,实现网页录音功能,从获取音频流到处理和保存录音,整个过程将逐步... 目录1. html5 getUserMedia API简介1.1 API概念与历史1.2 功能与优势1.3

gitlab安装及邮箱配置和常用使用方式

《gitlab安装及邮箱配置和常用使用方式》:本文主要介绍gitlab安装及邮箱配置和常用使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1.安装GitLab2.配置GitLab邮件服务3.GitLab的账号注册邮箱验证及其分组4.gitlab分支和标签的

Java实现删除文件中的指定内容

《Java实现删除文件中的指定内容》在日常开发中,经常需要对文本文件进行批量处理,其中,删除文件中指定内容是最常见的需求之一,下面我们就来看看如何使用java实现删除文件中的指定内容吧... 目录1. 项目背景详细介绍2. 项目需求详细介绍2.1 功能需求2.2 非功能需求3. 相关技术详细介绍3.1 Ja

SpringBoot3应用中集成和使用Spring Retry的实践记录

《SpringBoot3应用中集成和使用SpringRetry的实践记录》SpringRetry为SpringBoot3提供重试机制,支持注解和编程式两种方式,可配置重试策略与监听器,适用于临时性故... 目录1. 简介2. 环境准备3. 使用方式3.1 注解方式 基础使用自定义重试策略失败恢复机制注意事项

nginx启动命令和默认配置文件的使用

《nginx启动命令和默认配置文件的使用》:本文主要介绍nginx启动命令和默认配置文件的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录常见命令nginx.conf配置文件location匹配规则图片服务器总结常见命令# 默认配置文件启动./nginx

在Windows上使用qemu安装ubuntu24.04服务器的详细指南

《在Windows上使用qemu安装ubuntu24.04服务器的详细指南》本文介绍了在Windows上使用QEMU安装Ubuntu24.04的全流程:安装QEMU、准备ISO镜像、创建虚拟磁盘、配置... 目录1. 安装QEMU环境2. 准备Ubuntu 24.04镜像3. 启动QEMU安装Ubuntu4