Llamaindex RAG 实践

大模型支持的最强大的应用程序之一是复杂的问答聊天机器人。这些应用程序可以回答有关特定源信息的问题。这些应用程序使用一种称为检索增强生成 (RAG) 的技术。

1. 什么是RAG?

当你需要给模型注入新的知识时,有两种方法,一种是内部的,更新模型的权重,但是这样代价较大,第二种就是借助外部知识,直接通过prompt给模型提醒,这就是RAG。
RAG 是一种使用附加数据来增强 LLM的技术。LLMs 可以推理广泛的主题,但他们的知识仅限于公共数据,直到他们接受训练的特定时间点。如果您想构建可以推理私有数据或在模型截止日期之后引入的数据的 AI 应用程序,则需要使用模型所需的特定信息来增强模型的知识。引入适当信息并将其插入模型提示符的过程称为检索增强生成 (RAG)。LangChain 有许多组件,旨在帮助构建 Q&A 应用程序,以及更普遍的 RAG 应用程序。

并没有使用新的数据训练模型,不然每次要查新的数据,就训练一下模型,代价太大,而且不够灵活,而是将信息插入到prompt中。

2. 概念

典型的 RAG 应用程序有两个主要组件:
索引:用于从源提取数据并为其编制索引的管道。这通常发生在离线状态下。
检索生成:实际的 RAG 链,它在运行时获取用户查询并从索引中检索相关数据,然后将其传递给模型。

1.1 索引

  1. 加载:首先我们需要加载我们的数据。这是通过 Document Loader 完成的。
  2. 拆分:文本拆分器将大型文档拆分为较小的块。这对于索引数据和将其传递给模型都很有用,因为大块更难搜索,并且不适合模型的有限上下文窗口。
  3. 存储:我们需要某个地方来存储和索引我们的 split,以便以后可以搜索它们。这通常是使用 VectorStore 和 Embeddings 模型完成的。

在这里插入图片描述

1.2 检索和生成

  1. 检索:给定用户输入,使用 Retriever 从存储中检索相关分片。
  2. 生成:ChatModel / LLM 使用包含问题和检索数据的提示生成答案
    在这里插入图片描述

简而言之就是,首先将数据存储成向量形式,存储在数据库中,查询的时候,检索对应的内容,加入提示词中,一同输入给LLM。

3. LlamaIndex+InternLM API 实践

我们调用浦语AI的api接口

from openai import OpenAIbase_url = "https://internlm-chat.intern-ai.org.cn/puyu/api/v1/"
api_key = "you api"
model="internlm2.5-latest"client = OpenAI(api_key=api_key , base_url=base_url,
)chat_rsp = client.chat.completions.create(model=model,messages=[{"role": "user", "content": "xtuner是什么?"}],
)for choice in chat_rsp.choices:print(choice.message.content)

我们问模型,什么是Xtuner,这是一个较新的微调模型,模型肯定是不知道的。

对不起,我不了解您所说的内容。如果您对科技、文化、历史或其他领域有兴趣,我很乐意为您提供相关的信息和建议。我们鼓励用户进行开放、理性和建设性的讨论,并尊重每个人的观点和隐私。感谢您的理解。

import os 
os.environ['NLTK_DATA'] = '/root/nltk_data'from llama_index.core import VectorStoreIndex, SimpleDirectoryReader
from llama_index.core.settings import Settings
from llama_index.embeddings.huggingface import HuggingFaceEmbedding
from llama_index.legacy.callbacks import CallbackManager
from llama_index.llms.openai_like import OpenAILike# Create an instance of CallbackManager
callback_manager = CallbackManager()api_base_url =  "https://internlm-chat.intern-ai.org.cn/puyu/api/v1/"
model = "internlm2.5-latest"
api_key = "请填写 API Key"# api_base_url =  "https://api.siliconflow.cn/v1"
# model = "internlm/internlm2_5-7b-chat"
# api_key = "请填写 API Key"llm =OpenAILike(model=model, api_base=api_base_url, api_key=api_key, is_chat_model=True,callback_manager=callback_manager)#初始化一个HuggingFaceEmbedding对象,用于将文本转换为向量表示
embed_model = HuggingFaceEmbedding(
#指定了一个预训练的sentence-transformer模型的路径model_name="/root/model/paraphrase-multilingual-MiniLM-L12-v2"
)
#将创建的嵌入模型赋值给全局设置的embed_model属性,
#这样在后续的索引构建过程中就会使用这个模型。
Settings.embed_model = embed_model#初始化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)

在这里插入图片描述

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

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

相关文章

外包干了2个月,技术明显退步

回望过去,我是一名普通的本科生,于2019年通过校招有幸加入了南京某知名软件公司。那时的我,满怀着对未来的憧憬和热情,投入到了功能测试的岗位中。日复一日,年复一年,转眼间,我已经在这个岗位上…

Sigrity SPEED2000 Power Ground Noise Simulation模式如何进行信号时域仿真操作指导(一)-单个信号

Sigrity SPEED2000 Power Ground Noise Simulation模式如何进行信号时域仿真操作指导(一)-单个信号 Power Ground Noise Simulation模式除了可以对电源进行时域仿真外,同样支持对信号进行时域仿真,以下图为例进行说明 2D视图 3D view 本例中观测信号D2从…

String模拟实现【C++】【STL】

String模拟实现【C】【STL】 构造函数拷贝构造赋值重载析构函数<<赋值重载插入函数reserveappend函数push_back函数 earse函数完整代码string.hstring.cpp STL中有两个属性capacity和size&#xff0c;capacity是真正STL容器的真正内存大小&#xff0c;size是STL容器中数据…

前端CSS3 渐变详解

文章目录 CSS3 渐变详解一、引言二、CSS3 渐变基础1、线性渐变1.1、基本线性渐变1.2、改变渐变方向 2、径向渐变2.1、基本径向渐变2.2、设置径向渐变的中心 三、高级渐变技巧1、重复渐变1.1、重复线性渐变1.2、重复径向渐变 四、总结 CSS3 渐变详解 一、引言 在现代网页设计中…

Ubuntu系统安装minicom软件连接交换机

安装minicom&#xff1a; 电脑主机串口线连接上交换机的console口。开打乌班图系统终端&#xff0c;输入sudo -i切换为root用户 方法一&#xff1a; 输入 sudo apt-get install minicom 命令&#xff0c;安装minicom软件。 minicom 必须带有安装包的完整路径 文件名称 后…

异星工厂_1

经验 首次体验异星工厂这款游戏&#xff0c;得出了以下经验。 1. 基地的构建顺序&#xff1a;煤&#xff0c;电&#xff0c;原料&#xff0c;传送流&#xff0c;组装器&#xff0c;防御武器&#xff0c;其他 2. 永远不要让采集&#xff08;生产者&#xff09;停止&#xff0…

前端面试题每日一学_6

今日一题&#xff1a; 下面的CSS代码中&#xff0c;定义了一个帧动画&#xff0c;请问该帧动画能否正常流畅的执行&#xff1f; keyframes move {50% {/* 改变自定义变量的值 */--x: 100px;/* 改变元素的背景颜色 并使用!important */background: yellow !important;} } .d {…

QScrollArea应用范例,包含完整代码

QScrollArea使用案例,如果只是拖控件,做简单的布局那应该不难,但如果在复杂的布局中,用纯代码的方式来应用QScrollArea还是有点繁琐的,下面我写一段话,可能会有点绕 你需要先将widget添加到scrollArea,然后再将scrollArea添加到它要去的layout然后再设置scrollArea里的w…

【操作系统】每日 3 题(十四)

✍个人博客&#xff1a;https://blog.csdn.net/Newin2020?typeblog &#x1f4e3;专栏地址&#xff1a;https://blog.csdn.net/newin2020/category_12820365.html &#x1f4da;专栏简介&#xff1a;在这个专栏中&#xff0c;我将会分享操作系统面试中常见的面试题给大家~ ❤️…

销售管理SCRM助力企业高效提升业绩与客户关系管理

内容概要 在当今这个快速变化的市场环境中&#xff0c;企业面临着日益加剧的竞争&#xff0c;寻找更高效的销售管理工具显得尤为重要。销售管理SCRM不仅是一个单纯的客户关系管理工具&#xff0c;更是推动企业业绩提升的重要助力。在这一背景下&#xff0c;SCRM以其独特的优势…

JAVA基础-多线程线程池

文章目录 1. 多线程1.1什么是多线程&#xff08;1&#xff09;并发和并行&#xff08;2&#xff09;进程和线程 1.2多线程的实现方式1.2.1 方式一&#xff1a;继承Thread类1.2.2 方式二&#xff1a;实现Runnable接口1.2.3方式三: 实现Callable接口 1.3 常见的成员方法1.3.1 设置…

【日记】清仓了三个基金(1199 字)

正文 今天好忙。而且是瞎忙。主要是办公室找的家具厂不靠谱&#xff0c;上次桌子尺寸量错了&#xff0c;得换。今天拿了新的来&#xff0c;又要腾一遍东西。上午时间就没了。 那个疑似洗钱的客户又来了。他开户意愿真的好强烈。没办法&#xff0c;上午把账号给他开了出来&#…

微服务的注册中心Nacos

前言 Nacos是阿里巴巴开源的服务注册中心以及配置中心&#xff0c;致力于给开发者提供一款便捷、简单上手的开源框架。 Nacos究竟有什么惊人的地方呢&#xff1f;看下图&#xff1a; 从上图不难看出阿里巴巴的野心&#xff0c;一个Nacos干掉了Spring Cloud的三大组件&#xf…

怎么启动python脚本文件

创建一个简单的python入门代码&#xff0c;以便示范。 存储文件并复制该python文件的存储路径。 使用cd 命令切换工作目录到python文件所在的目录。 输入变量环境中的python路径和python文件的名字。 回车执行后&#xff0c;可完成命令行的python文件运行。

vue2-vuex详解

目录 vuex构建vuex[多组件数据共享]环境创建一个空仓库核心概念 - state状态核心概念 - mutations方法mutations语法 核心概念 - actions处理异步操作核心概念 - getters核心概念 - 模块module(进阶语法) vuex 是什么 vuex是一个状态管理工具&#xff0c;状态就是数据 vuex是一…

苍穹外卖-day03

公共字段自动填充新增菜品菜品分页查询删除菜品修改菜品 功能实现&#xff1a; 菜品管理 1. 公共字段自动填充 1.1 问题分析 在上一章节我们已经完成了后台系统的员工管理功能和菜品分类功能的开发&#xff0c;在新增员工或者新增菜品分类时需要设置创建时间、创建人、修改…

最简单解决NET程序员在centos系统安装c#网站

目前随着技术栈转移&#xff0c;c#程序员如何在linux服务器中部署net程序呢&#xff1f; 我做了一次实验&#xff1a;一般来说runtime和sdk都要装。 1.centos系统内命令行输入命令 sudo yum install dotnet-sdk-6.0 安装6.0版 2.检测下是否成功&#xff1a;dotnet --versio…

【HarmonyOS——MVVM模式 | 理解MVVM模式,看这一篇就够了】

大家好&#xff0c;我是学徒小z&#xff0c;近期项目开发中遇到一些数据源放置混乱的问题&#xff0c;所以带来一篇MVVM模式的文章 文章目录 MVVM模式为什么要用MVVM模式对于鸿蒙中MVVM模式的疑惑ArkUI的MVVM项目结构中的MVVM1. 概述2 .分层说明3. 架构核心原则不可跨层访问下…

网络基础:http协议和内外网划分

声明 学习视频来自B站UP主泷羽sec,如涉及侵权马上删除文章 笔记的只是方便各位师傅学习知识,以下网站只涉及学习内容,其他的都与本人无关,切莫逾越法律红线,否则后果自负 泷羽sec的个人空间-泷羽sec个人主页-哔哩哔哩视频https://space.bilibili.com/350329294 一&#xff0c;H…