llama-index 结合chatglm3-6B 利用RAG 基于文档智能问答

简介

  • llamaindex结合chatglm3使用
import os
import torch
from llama_index.core import VectorStoreIndex, ServiceContext
from llama_index.core.callbacks import CallbackManager
from llama_index.core.llms.callbacks import llm_completion_callback
from llama_index.core.prompts.prompts import SimpleInputPrompt
from llama_index.legacy.embeddings import HuggingFaceEmbedding
from llama_index.legacy.llms import HuggingFaceLLM
from llama_index.core import ServiceContextos.environ["CUDA_VISIBLE_DEVICES"] = "0"# from llama_index.core import VectorStoreIndex, SummaryIndex, SimpleDirectoryReader, ServiceContext, LLMPredictor
from llama_index.legacy.llms import (HuggingFaceLLM, CustomLLM, CompletionResponse, CompletionResponseGen, LLMMetadata)from typing import Optional, List, Mapping, Any
from transformers import pipeline, AutoModelForCausalLM, AutoTokenizer, AutoModel
from transformers.generation import GenerationConfigfrom modelscope import snapshot_download

m3e 向量编码模型

from llama_index.legacy.embeddings import HuggingFaceEmbedding#模型下载
# load embedding
emb_path = snapshot_download('jieshenai/m3e-base')
embedding_model = HuggingFaceEmbedding(emb_path)

自定义模型

model_name = "chatglm3-6b"
model_path = snapshot_download('ZhipuAI/chatglm3-6b')tokenizer = AutoTokenizer.from_pretrained(model_path, trust_remote_code=True)
model = AutoModel.from_pretrained(model_path, trust_remote_code=True).half().cuda()
model = model.eval()
# set context window size
context_window = 2048
# set number of output tokens
num_output = 256class ChatGML(CustomLLM):@propertydef metadata(self) -> LLMMetadata:"""Get LLM metadata."""return LLMMetadata(context_window=context_window,num_output=num_output,model_name=model_name,)@llm_completion_callback()def complete(self, prompt: str, **kwargs: Any) -> CompletionResponse:prompt_length = len(prompt)# only return newly generated tokenstext,_ = model.chat(tokenizer, prompt, history=[])return CompletionResponse(text=text)@llm_completion_callback()def stream_complete(self, prompt: str, **kwargs: Any) -> CompletionResponseGen:raise NotImplementedError()llm_model = ChatGML()
from llama_index.core import SimpleDirectoryReaderdocuments = SimpleDirectoryReader('data').load_data()service_context = ServiceContext.from_defaults(llm=llm_model, embed_model=embedding_model)

在data文件夹下,放txt文件
data/1.txt:

在遥远的东方,有一个名为“梦溪”的小村庄。这里山水相依,风景如画,村民们过着宁静而祥和的生活。
梦溪村有个少年,名叫小风。他聪明伶俐,心地善良,深受村民们的喜爱。小风有个特别的爱好,那就是喜欢在夜晚仰望星空,幻想着天上的故事。
有一天,小风在村边的小溪旁捡到一颗奇特的石头,它闪烁着幽幽的蓝光,仿佛蕴藏着无尽的秘密。小风好奇地将石头带回家,放在床头,每晚都伴着它的光芒入睡。
渐渐地,小风发现自己开始做起了一个奇怪的梦。在梦中,他来到了一个神秘的世界,那里有着奇异的生物和壮丽的景色。他遇到了一个美丽的少女,她告诉他,这颗石头其实是一个通往另一个世界的门户,而她就是那个世界的守护者。
少女告诉小风,她的世界正面临着巨大的危机,需要小风的帮助。小风虽然有些害怕,但想到自己或许能成为一个英雄,便鼓起勇气答应了她的请求。
从此,小风每晚都进入那个神秘的世界,与少女一起冒险,解决各种难题。他学会了如何与奇异的生物沟通,如何运用智慧战胜困难。他的勇气和善良感染了那个世界的居民们,他们纷纷加入小风的行列,共同抵抗邪恶势力。
经过一段艰苦的奋战,小风终于帮助少女解决了危机,恢复了那个世界的和平。少女感激不已,送给小风一件神奇的礼物——一把能够召唤风的力量的魔法扇。
当小风醒来时,他发现自己手中真的握着那把魔法扇。他走到村边的小溪旁,轻轻一挥扇子,顿时一阵清风吹过,带来了花香和鸟鸣。
从此,小风成了梦溪村的小英雄。他用魔法扇帮助村民们解决困难,保护村庄的安宁。而那颗奇特的石头,也永远留在了他的床头,成为他勇敢和善良的见证。
# create index
index = VectorStoreIndex.from_documents(documents, service_context=service_context)# query engine
query_engine = index.as_query_engine()# query
response = query_engine.query("少女感激不已,送给小风一件神奇的礼物是什么?")
print(response)

结果

在这里插入图片描述
代码:https://github.com/JieShenAI/csdn/blob/main/llm/24/3/llamaindex_m3e_chatglm_RAG.ipynb

参考资料

  • https://zhuanlan.zhihu.com/p/678799132
  • LlamaIndex中的CustomLLM(本地加载模型)

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

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

相关文章

登录拦截器

目录 🎈1.登陆拦截器的使用 🎊2.ThreadLocal的简单使用 🎃3.登录拦截器拦截和放行配置 1.登陆拦截器的使用 创建一个拦截器类,必须让其实现HandlerInterceptor接口 1.获取前端的token 2.判断token是否为空 3.若为空&#xff…

自动发卡平台源码优化版,支持个人免签支付

源码下载地址:自动发卡平台源码优化版.zip 环境要求: php 8.0 v1.2.6◂ 1.修复店铺共享连接时异常问题 2024-03-13 23:54:20 v1.2.5 1.[新增]用户界面硬币增款扣款操作 2.[新增]前台对接库存信息显示 3.[新增]文件缓存工具类[FileCache] 4.[新增]库存同…

通讯控制板V1.2版本

通讯控制板硬件需求说明书 硬件组成 下图借鉴参考野火图纸 0. CAN接口 硬件需求 板载支持CAN通讯接口 CAN引脚功能PA12CAN_TXPA11CAN_RX 1. RS485接口 硬件需求 板载支持RS485通讯接口 RS485引脚功能PB10RS485_TXPB11RS485_RXPB12RS485_RE/DE 2. RS232接口 硬件需求 板…

C/C++ ③ —— C++11新特性

1. 类型推导 1.1 auto auto可以让编译器在编译期就推导出变量的类型 auto的使⽤必须⻢上初始化,否则⽆法推导出类型auto在⼀⾏定义多个变量时,各个变量的推导不能产⽣⼆义性,否则编译失败auto不能⽤作函数参数在类中auto不能⽤作⾮静态成员…

【IP 组播】PIM-SM

目录 原理概述 实验目的 实验内容 实验拓扑 1.基本配置 2.配置IGP 3.配置PIM-SM 4.用户端DR与组播源端DR 5.从RPT切换到SPT 6.配置PIM-Silent接口 原理概述 PIM-SM 是一种基于Group-Shared Tree 的组播路由协议,与 PIM-DM 不同,它适合于组播组成…

javaScript | 报错:JSX expressions must have one parent element

#错误记录:在做一个练习时候出现这个错误 #错误原因分析:在React和JSX中,每个JSX表达式都必须有一个父元素。这意味着你想要渲染的所有组件或元素都必须被一个单独的容器所包含。这个规则的原因是JSX最终会被编译成调用React.createElement()…

分享react+three.js展示温湿度采集终端

前言 气象站将采集到的相关气象数据通过GPRS/3G/4G无线网络发送到气象站监测中心,摆脱了地理空间的限制。 前端:气象站主机将采集好的气象数据存储到本地,通过RS485等线路与GPRS/3G/4G无线设备相连。 通信:GPRS/3G/4G无线设备通…

真北3月小结:15小时黄金定律

我以前是敏捷爱好者,现在是跑步爱好者,希望将来能成为赚钱爱好者。我们跑步,我们读书,我们写作,都是为了获得#高配人生。15小时黄金定律是指:每月跑步15小时、每月读书15小时、每月写作15小时。 1、跑步 跑…

系统架构图怎么画

画架构图是架构师的一门必修功课。 对于架构图是什么这个问题,我们可以按以下等式进行概括: 架构图 架构的表达 架构在不同抽象角度和不同抽象层次的表达,这是一个自然而然的过程。 不是先有图再有业务流程、系统设计和领域模型等&#…

【C语言】预处理常见知识详解(宏详解)

文章目录 1、预定义符号2、define2.1 define 定义常量2.2 define 定义宏 3、#和##3.1 **#**3.2 **##** 4、条件编译(开关) 1、预定义符号 在C语言中内置了一些预定义符号,可以直接使用,这些符号实在预处理期间处理的,…

ssm网上订餐管理系统开发mysql数据库web结构java编程计算机网页源码eclipse项目采用线性算法

一、源码特点 ssm 网上订餐管理系统是一套完善的信息系统,结合springMVC框架完成本系统,对理解JSP java编程开发语言有帮助系统采用SSM框架(MVC模式开发),系统具有完整的源代码和数据库,系统主要采用B/S模…

【计算机网络】第 9 问:四种信道划分介质访问控制?

目录 正文什么是信道划分介质访问控制?什么是多路复用技术?四种信道划分介质访问控制1. 频分多路复用 FDM2. 时分多路复用 TDM3. 波分多路复用 WDM4. 码分多路复用 CDM 正文 什么是信道划分介质访问控制? 信道划分介质访问控制(…

主流公链 - Filecoin

探索Filecoin:去中心化存储网络 1. Filecoin简介 Filecoin是一个去中心化的存储网络,旨在通过区块链技术实现全球性的分布式文件存储和检索市场。Filecoin允许用户将文件存储在网络中的节点上,并通过加密、分片和复制等技术保证数据的安全性…

OpenHarmony开发之WebGL开发指导与介绍

WebGL的全称为Web Graphic Library(网页图形库),主要用于交互式渲染2D图形和3D图形。目前OpenHarmony中使用的WebGL是基于OpenGL裁剪的OpenGL ES,可以在HTML5的canvas元素对象中使用,无需使用插件,支持跨平台。WebGL程序是由JavaS…

hadoop-3.1.1分布式搭建与常用命令

一、准备工作 1.首先需要三台虚拟机: master 、 node1 、 node2 2.时间同步 ntpdate ntp.aliyun.com 3.调整时区 cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime 4.jdk1.8 java -version 5.修改主机名 三台分别执行 vim /etc/hostname 并将内容指定为…

Mysql数据库-DQL查询

Mysql数据库-DQL基本查询 1 DQL基本查询1.1 基础查询1.2 WHERE子句1)算术运算符2)逻辑运算符3)比较运算符A)BETWEEN... AND ...B)IN(列表)C)NULL值判断 4)综合练习 2 DQL高级查询2.1 LIKE 模糊查…

2024年北京事业单位报名照片要求,注意格式

2024年北京事业单位报名照片要求,注意格式

HarmonyOS 应用开发之ExtensionAbility组件

ExtensionAbility组件是基于特定场景(例如服务卡片、输入法等)提供的应用组件,以便满足更多的使用场景。 每一个具体场景对应一个 ExtensionAbilityType,开发者只能使用(包括实现和访问)系统已定义的类型。…

金属氧化物压敏电阻的冲击破坏机理高能压敏电阻分析

以氧化锌为主的金属氧化物阀片在一定的电压和电流作用下的破坏可分为热破坏和冲击破坏两类。 热破坏是指氧化锌电阻在交流电压持续作用时发生的破坏,即由于阀片在交流作用下的发热超过了其散热能力而导致的热平衡失控的现象。交流引起的热破坏可以分为几种不同情况:一种是由于…

【Redis教程0x08】详解Redis过期删除策略内存淘汰策略

引言 Redis的过期删除策略和内存淘汰策略是经常被问道的问题,这两个机制都是做删除操作,但是触发的条件和使用的策略是不同的。今天就来深入理解一下这两个策略。 过期删除策略 Redis 是可以对 key 设置过期时间的,因此需要有相应的机制将…