认识并使用LlamaIndex

news2024/11/27 12:39:48

认识并使用LlamaIndex

  • 一、认识LlamaIndex
    • 1、是什么
    • 2、为什么要搞Llama Index?
    • 3、怎么搞Llama Index?
      • 3.1 方案1:用你的数据对LLM进行微调(fine-tune)
      • 3.2 方案2:[检索增强生成(RAG)](https://docs.llamaindex.ai/en/latest/getting_started/concepts.html)技术
    • 4、Llama Index这套数据处理框架能提供什么服务?
      • 4.1 数据连接器(Data connectors)
      • 4.2 数据索引(Data Indexes)
      • 4.3 引擎(Engines)
      • 4.4 数据代理(Data agents)
      • 4.5 应用集成(Application integrations)
  • 二、使用LlamaIndex
    • 1、通过poetry管理依赖
    • 2、创建python项目
    • 3、创建并激活虚拟环境,引入所需的依赖
    • 4、用PyCharm打开项目

一、认识LlamaIndex

1、是什么

  • Llama Index是一个数据框架,辅助基于LLM的应用,去消化理解、结构化、获取私人或特定领域数据。【本质是RAG的一个落地产物。】官方文档

2、为什么要搞Llama Index?

  • 一句话:AI应用单纯靠LLM,在一些特定问题上,表现不佳。

例如,我们在电商领域沉淀了很多领域知识,但这些信息并没有被LLM训练过,这使得LLM在回答电商领域的特定问题时,表现不佳。

(1)LLM学习过的信息:大量公开数据,如维基百科、邮件列表、教科书、源代码等。
(2)LLM大概率没有学习过的信息:私人或特定领域数据。

  • 因此,为了解决这个问题,我们需要一个数据框架,能够去消化理解、结构化、获取私人或特定领域数据。

3、怎么搞Llama Index?

3.1 方案1:用你的数据对LLM进行微调(fine-tune)

  • 缺点:
    • LLM的训练费用高
    • 由于训练成本,难以用最新信息更新LLM。
    • 可解释性差。当咱向LLM提问时,它如何得出答案并不明显。

3.2 方案2:检索增强生成(RAG)技术

  • 思想:
    • (1)首先从你的数据源中检索信息
    • (2)然后把它添加到你的问题作为上下文 【prompt】
    • (3)最后让LLM基于丰富的prompt来回答
  • RAG克服了微调方法的所有三个弱点
    • (1)无需训练,所以成本低。【其实成本并不低,因为需要优质的数据源,这都是要靠人力堆起来的】
    • (2)可以不断提供新数据,供信息检索。
    • (3)LlamaIndex可以向你展示检索到的文档,所以更可信。 【依靠可解释性的工程链路

4、Llama Index这套数据处理框架能提供什么服务?

4.1 数据连接器(Data connectors)

  • 作用:从原始数据源和格式中获取你的现有数据。这些可能是API、PDF、SQL等等。

4.2 数据索引(Data Indexes)

  • 作用:将你的数据结构化成中间表达,以便LLM易于消化和高效使用。

4.3 引擎(Engines)

  • 作用:为你的数据提供自然语言访问。
    • 例如:
      • 查询引擎是强大的检索界面,用于知识增强输出。
      • 聊天引擎是交谈式界面,用于与你的数据进行多消息的“来回”交互。

4.4 数据代理(Data agents)

  • 作用:LLM驱动的知识工作者,通过工具进行增强,从简单的辅助函数到API集成等等。

4.5 应用集成(Application integrations)

  • 作用:将LlamaIndex与你的其他生态系统绑定。这可以是LangChain,Flask,Docker,ChatGPT,或者…任何其他东西!

二、使用LlamaIndex

1、通过poetry管理依赖

  • macOS,在终端执行:brew install poetry

poetry可以帮助你管理包依赖。

  • 对poetry的认知:
    当你在项目的根目录下执行 poetry shell命令时,Poetry会在这个目录中寻找一个名为pyproject.toml的文件,这个文件是Poetry用来管理项目配置和依赖的。如果Poetry在当前目录中找到了pyproject.toml文件,它就会知道需要为这个目录下的项目激活虚拟环境。如果没有找到,Poetry通常会报错,提示没有找到Poetry项目。你可以通过输入exit命令或关闭终端来退出虚拟环境。

(1)在Python开发中,通常推荐为每个项目创建一个独立的虚拟环境,这样能够保证每个项目的依赖库之间不会互相干扰。
(2)在虚拟环境被激活的状态下,你使用python或pip命令安装的库都会被安装到这个虚拟环境中,不会影响到其他项目或全局Python环境。
(3)poetry很像java的maven。pyproject.toml类似于maven的pom.xml

2、创建python项目

  • 我在目录/Users/…/code/Python3Code/learnAiEngineering/下新建目录:learn_demo_llama_index
  • 执行:poetry init

一路回车,生成pyproject.toml文件后,对文件进行修改。

  • 修改pyproject.toml文件:
[tool.poetry]
name = "learn-demo-llama-index"
version = "0.1.0"
description = ""
authors = ["..."]

[tool.poetry.dependencies]
python = "^3.12"

[[tool.poetry.source]]
name = "aliyun"
url = "https://mirrors.aliyun.com/pypi/simple/"
priority = "default"

[build-system]
requires = ["poetry-core"]
build-backend = "poetry.core.masonry.api"

我做了2处修改:
(1)删除readme = "README.md"
(2)换源

3、创建并激活虚拟环境,引入所需的依赖

  • 创建并激活虚拟环境:peotry shell
  • 引入所需的依赖:
    (1)poetry add llama_index
    (2)poetry add ‘httpx[socks]’

4、用PyCharm打开项目

  • 项目结构
    在这里插入图片描述

  • Add Python Interpreter
    在这里插入图片描述

  • 准备数据:data/paul_graham_essay.txt

官方文档提供了

  • 编码:
from llama_index import VectorStoreIndex, SimpleDirectoryReader
import os

os.environ['http_proxy'] = 'socks5://127.0.0.1:1081'
os.environ['https_proxy'] = 'socks5://127.0.0.1:1081'

os.environ["OPENAI_API_KEY"] = "..."

# Load data and build an index
documents = SimpleDirectoryReader("data").load_data()

index = VectorStoreIndex.from_documents(documents)

# Query your data
query_engine = index.as_query_engine()

response = query_engine.query("What did the author do growing up?")
print(response)

如果报错:ModuleNotFoundError: No module named 'pkg_resources'
那么执行:poetry add setuptools
因为 ‘pkg_resources’ 是属于 ‘setuptools’ 的一部分,这将会把 ‘setuptools’ 添加到pyproject.toml文件中,并且安装这个包。

  • 结果:The author wrote short stories and also worked on programming, specifically on an IBM 1401 computer in 9th grade.

注意:前提知道“通过代理如何调通openai的api”

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

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

相关文章

实验六 模式对象管理与安全管理

🕺作者: 主页 我的专栏C语言从0到1探秘C数据结构从0到1探秘Linux 😘欢迎关注:👍点赞🙌收藏✍️留言 🏇码字不易,你的👍点赞🙌收藏❤️关注对我真的很重要&…

ChatGPT 到 Word:使用 Writage 进行复制粘贴魔法

ChatGPT 到 Word:使用 Writage 进行复制粘贴魔法 写在前面Writage的使用 写在前面 随着ChatGPT的日益普及,越来越多的人每天依赖它来完成各种任务。无论是寻找信息、语言翻译、解决数学问题,还是精炼复杂的概念和文本,ChatGPT 都…

Redis 存在线程安全问题吗?为什么?

一个工作了 5 年的粉丝私信我。 他说自己准备了半年时间,想如蚂蚁金服,结果第一面就挂了,非常难过。 问题是: “Redis 存在线程安全问题吗?” 一、问题解析 关于这个问题,我从两个方面来回答。 第一个&a…

高效调试!利用IDEA远程Debug服务器微服务Jar,快速定位和解决代码问题!

开两个端口端口8081、8085 解释8081 服务端口 8085 远程debug监听端口 服务启动jar命令: java -agentlib:jdwptransportdt_socket,servery,suspendn,address48081 -jar test-server.jar &或者nohup nohup java -agentlib:jdwptransportdt_socket,servery,susp…

c++函数重载(同名函数)功能,区别于c语言

c可以使用同名函数,实现功能类似的多个功能 规则: ①函数名相同,但是函数的参数(形参)绝不相同 ②参数个数不同 ③参数个数相同,参数类型不同 只有返回值类型不同,不可以;只有形…

初识计算机图形学

初识计算机图形学 笔记来源:【老奇】阴差阳错 撼动世界的游戏引擎 1.MVP Transformation 详见本人博客: 1.Transformation 2.梳理从MVP变换到光栅化的过程 MVP变换将空间中3D物体投影到2D屏幕 2.Rasterization 详见本人博客: 1.Rasteri…

索引的概述和性能分析

索引index,是一种有序的数据结构,可以高效的获取数据,在数据库中维护着满足查找特定算法的数据结构,就是索引 无索引的情况,查询数据时会全表扫描,效率极低 索引结构 (1)二叉树&…

Django(八)

1. 管理员操作 1.1 添加 from django.shortcuts import render, redirectfrom app01 import models from app01.utils.pagination import Paginationfrom django import forms from django.core.exceptions import ValidationError from app01.utils.bootstrap import BootStr…

使用 crypto-js 进行 AES 加解密操作

在前端开发中,数据的加密和解密是为了保障用户隐私和数据的安全性而常见的任务。AES(Advanced Encryption Standard)是一种对称密钥加密算法,被广泛用于保护敏感信息的传输和存储。本文将介绍 AES 加解密的基本原理,并…

区块链游戏概览:回顾 2023,展望 2024

作者:lesleyfootprint.network 数据来源:区块链游戏年报 关键要点 今年,比特币(BTC)市值从上年的低谷中强劲回升,相较之下,区块链游戏市场的增长虽然较为平淡,但年末也迎来了显著的…

【长文阅读】MAMBA作者博士论文<MODELING SEQUENCES WITH STRUCTURED STATE SPACES>-Chapter2

Gu A. Modeling Sequences with Structured State Spaces[D]. Stanford University, 2023. 本文是MAMBA作者的博士毕业论文,为了理清楚MAMBA专门花时间拜读这篇长达330页的博士论文,由于知识水平有限,只能尽自己所能概述记录,并适…

在微信公众号中加入ChatGPT聊天的方法

1 介绍 开源项目 "chatgpt-on-wechat" 支持通过微信公众号进行调用,这意味着用户可以在与公众号的交互中体验 ChatGPT。由于服务是部署在远端服务器上的,因此用户只需拥有一部手机,就可以在任何环境下与 ChatGPT 进行交流。例如&am…

回归预测 | Matlab基于OOA-SVR鱼鹰算法优化支持向量机的数据多输入单输出回归预测

回归预测 | Matlab基于OOA-SVR鱼鹰算法优化支持向量机的数据多输入单输出回归预测 目录 回归预测 | Matlab基于OOA-SVR鱼鹰算法优化支持向量机的数据多输入单输出回归预测预测效果基本描述程序设计参考资料 预测效果 基本描述 1.Matlab基于OOA-SVR鱼鹰算法优化支持向量机的数据…

forEach如何跳出或中断循环

文章目录 概要使用try...catch抛出错误设置数组长度为0使用splice删除数组的元素 概要 在Javascript中,我们使用forEach遍历循环的时候,往往会面临跳出循环和中断循环,我们可以采取以下几种方式: 使用try…catch抛出错误 const …

IGBT工作原理

IGBT(绝缘栅双极型晶体管) 在实际应用中最流行和最常见的电子元器件是双极结型晶体管 BJT 和 MOS管。 IGBT实物图电路符号图 你可以把 IGBT 看作 BJT 和 MOS 管的融合体,IGBT具有 BJT 的输入特性和 MOS 管的输出特性。 与 BJT 或 MOS管相比,…

手把手教你学会接口自动化系列二十三-引入allure优化我们的代码结构生成报告

优化之后的代码如下: # !/usr/bin/env python# -*- coding: utf-8 -*-# Time : 2024/01# Author : Laopiimport jsonimport loggingimport allurefrom testcase.conftest import *baseUrl GetYamlData(ConfigHandler.config_path).get_yaml_data()root_path os.p…

六、Netty核心模块组件

目录 6.1 BootStrap,ServerBootStrap6.2 Future,ChannelFuture6.3 Channel6.4 Selector6.5 ChannelHandler 以及其实现类6.6 Pipeline 和 ChannelPipeline6.7 ChannelHandlerContext6.8 ChannelOption6.9 EventLoopGroup和其实现类 NioEventLoopGroup6.1…

Forward(转发)和Redirect(重定向)的异同

Forward(转发)和Redirect(重定向)是两种不同的服务器端跳转机制,它们在Servlet中用于控制页面的跳转和处理请求的方式。 Forward(转发): 特点: 转发是在服务器内部进行的…

对接苹果CMS芒果影视APPV1.0(附安装教程+源码支持多端)内置采集脚本

目录 概述1. 演示效果1.1 视频演示1.2 图文演示1.2.1 首页1.2.2 专题页1.2.3 搜索1.2.4 观影 2. 支持功能3. 插件和框架4. 部署方法4.1 后端4.1.1 准备工具4.1.2创建站点4.1.3 上传后端代码到服务器4.1.4 导入数据库4.1.5 配置数据库信息4.1.6访问后台管理系统 4.2 前端4.2.1 准…

Modern C++ 一个例子学习条件变量

目录 问题程序 施魔法让BUG浮出水面 条件变量注意事项 修改程序 问题程序 今天无意中看到一篇帖子,关于条件变量的,不过仔细看看发现它并达不到原本的目的。 程序如下,读者可以先想想他的本意,以及有没有问题: #…