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

news2024/12/23 17:50:02

简介

  • 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 ServiceContext

os.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 GenerationConfig

from 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 = 256


class ChatGML(CustomLLM):
    @property
    def 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 tokens
        text,_ = 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 SimpleDirectoryReader

documents = 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.coloradmin.cn/o/1552403.html

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

相关文章

Mini-Gemini: Mining the Potential of Multi-modality Vision Language Models

Mini-Gemini: Mining the Potential of Multi-modality Vision Language Models 相关链接:arxiv 关键字:Vision Language Models、Multi-modality、High-Resolution Visual Tokens、High-Quality Data、VLM-guided Generation 摘要 在这项工作中&#x…

软件工程学习笔记12——运行维护篇

运行维护篇 一、版本发布1、关于软件版本2、版本发布前,做好版本发布的规划3、规范好发布流程,保障发布质量 二、DevOps工程师1、什么是 DevOps 三、线上故障1、遇到线上故障,新手和高手的差距在哪里2、大厂都是怎么处理线上故障的 四、日志管…

探索 2024 年 Web 开发最佳前端框架

前端框架通过简化和结构化的网站开发过程改变了 Web 开发人员设计和实现用户界面的方法。随着 Web 应用程序变得越来越复杂,交互和动画功能越来越多,这是开发前端框架的初衷之一。 在网络的早期,网页相当简单。它们主要以静态 HTML 为特色&a…

插入排序、归并排序、堆排序和快速排序的稳定性分析

插入排序、归并排序、堆排序和快速排序的稳定性分析 一、插入排序的稳定性二、归并排序的稳定性三、堆排序的稳定性四、快速排序的稳定性总结在计算机科学中,排序是将一组数据按照特定顺序进行排列的过程。排序算法的效率和稳定性是评价其优劣的两个重要指标。稳定性指的是在排…

【NLP笔记】大模型prompt推理(提问)技巧

文章目录 prompt概述推理(提问)技巧基础prompt构造技巧进阶优化技巧prompt自动优化 参考链接: Pre-train, Prompt, and Predict: A Systematic Survey of Prompting Methods in Natural Language Processing预训练、提示和预测:NL…

植物大战僵尸Javascript版web游戏源码

源码介绍 植物大战僵尸Javascript版web游戏源码,非常强大,1比1还原电脑版植物大战僵尸游戏,带背景音乐,玩法和原版一模一样。 源码截图 下载地址 https://download.csdn.net/download/huayula/89048275

UE RPC 外网联机(2)

外网联机配置测试 一、网络配置 开放外网端口开放端口是为了可以进行外网访问;端口包含一个预案管理服务器端口和多个预案服务器端口;(预案管理服务器类似于大厅,预案服务器类似于房间,大厅管理多个房间;) (1)预案管理服务器端口;(如:23001) (2)预案服务器端口…

UDP send 出现大量“Resource temporarily unavailable”

背景 最近排查用户现场环境,查看日志出现大量的“send: Resource temporarily unavailable”错误,UDP设置NO_BLOCK模式,send又发生在进程上下文,并且还设置了SO_SNDBUF 为8M,在此情况下为什么还会出现发送队列满的情况…

利用R语言和curl库实现网页爬虫的技术要点解析

R语言简介 R语言是一种自由、跨平台的编程语言和软件环境,专门用于统计计算和数据可视化。它具有丰富的数据处理、统计分析和图形展示功能,被广泛应用于数据科学、机器学习、统计建模等领域。 R语言技术优势 丰富的数据处理功能: R语言拥有…

echarts 3D示例 echart, echarts-gl

echarts官网有很多的炫酷的3D模型 来尝试实现下&#xff0c;使用原本的柱状图或者折线图代码创建echarts示例,使用cdn的方式引入echarts <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewp…

windows10搭建reactnative,运行android全过程

环境描述 win10,react-native-cli是0.73&#xff0c;nodeJS是20&#xff0c;jdk17。这都是完全根据官网文档配置的。react-native环境搭建windows。当然官网文档会更新&#xff0c;得完全按照配置来安装&#xff0c;避免遇到环境不兼容情况。 安装nodeJS并配置 这里文档有详…

微信小程序更换头像的功能

微信小程序开发&#xff0c;个人中心中更换头像的更能使用频率很高&#xff0c;这里记录下实现方式&#xff1a; <view class"setting-list avatar-container"><text>头像</text><view class"avatar"><button hover-class"…

GNU Radio之OFDM Carrier Allocator底层C++实现

文章目录 前言一、OFDM Carrier Allocator 简介二、底层 C 实现1、make 函数2、ofdm_carrier_allocator_cvc_impl 函数3、calculate_output_stream_length 函数4、work 函数5、~ofdm_carrier_allocator_cvc_impl 函数 三、OFDM 数据格式 前言 OFDM Carrier Allocator 是 OFDM …

设计模式 - 简单工厂模式

文章目录 前言 大家好,今天给大家介绍一下23种常见设计模式中的一种 - 工厂模式 1 . 问题引入 请用C、Java、C#或 VB.NET任意一种面向对象语言实现一个计算器控制台程序&#xff0c;要求输入两个数和运算符 号&#xff0c;得到结果。 下面的代码实现默认认为两个操作数为Inte…

VsCode的json文件不允许注释的解决办法

右下角找到注释点进去 输入Files: Associations搜索出此项 改为项为*.json值为jsonc保存即可 然后会发现VsCode的json文件就允许注释了

ArcGIS制作风向频率玫瑰图

风玫瑰图是气象科学专业统计图表,用来统计某个地区一段时期内风向、风速发生频率,又分为“风向玫瑰图”和“风速玫瑰图” ;因图形似玫瑰花朵,故名。风玫瑰图对于涉及城市规划、环保、风力发电等领域有着重要的意义。风玫瑰图能够直观的显现某地区不同方位风向的频率特征,进…

uniApp使用XR-Frame创建3D场景(8)粒子系统

上篇文章讲述了如何将XR-Frame作为子组件集成到uniApp中使用 本片我们详细讲解一下xr-frame的粒子系统 先看源码 <xr-scene render-system"alpha:true" bind:ready"handleReady"> <xr-node visible"{{sec8}}"><xr-asset-load t…

怎样去保证 Redis 缓存与数据库双写一致性?

解决方案 那么我们这里列出来所有策略&#xff0c;并且讨论他们优劣性。 先更新数据库&#xff0c;后更新缓存先更新数据库&#xff0c;后删除缓存先更新缓存&#xff0c;后更新数据库先删除缓存&#xff0c;后更新数据库 先更新数据库&#xff0c;后更新缓存 这种方法是不推…

Spring Boot 防护 XSS + SQL 注入攻击

XSS跨站脚本攻击 ① XSS漏洞介绍 跨站脚本攻击XSS是指攻击者往Web页面里插入恶意Script代码&#xff0c;当用户浏览该页之时&#xff0c;嵌入其中Web里面的Script代码会被解析执行&#xff0c;从而达到恶意攻击用户的目的。XSS攻击针对的是用户层面的攻击&#xff01; ② XSS…

Linux:Jenkins:参数化版本回滚(6)

上几章我讲到了自动集成和部署 Linux&#xff1a;Jenkins全自动持续集成持续部署&#xff08;4&#xff09;-CSDN博客https://blog.csdn.net/w14768855/article/details/136977106 当我们觉得这个页面不行的时候&#xff0c;需要进行版本回滚&#xff0c;回滚方法我这里准备了…