基于开源AI数据框架LlamaIndex构建上下文增强型LLA应用

引言

“将你的企业数据转化为可用于实际生产环境的LLM应用程序,”LlamaIndex主页用60号字体这样高亮显示。其副标题是“LlamaIndex是构建LLM应用程序的领先数据框架。”我不太确定它是否是业内领先的数据框架,但我认为它是一个与LangChain和Semantic Kernel一起构建大型语言模型应用的领先数据框架。

LlamaIndex目前提供两种开源语言框架和一个云端支持。一种开源语言是Python;另一种开源语言是TypeScript。LlamaCloud(目前处于个人预览版本)通过LlamaHub提供存储、检索、数据源链接,以及针对复杂文档的付费方式的专有解析服务LlamaParse,该服务也可作为独立服务提供。

LlamaIndex在加载数据、存储和索引数据、通过编排LLM工作流进行查询以及评估LLM应用程序的性能方面都具有优势。当前,LlamaIndex集成了40多个向量存储、40多个LLM和160多个数据源。其中,LlamaIndex Python代码存储库已获得超过30K的星级好评。

典型的LlamaIndex应用程序会执行问答、结构化提取、聊天或语义搜索,和/或充当代理。它们可以使用检索增强生成(RAG)技术将LLM与特定的数据源联系起来,这些源通常不包括在模型的原始训练集中。

显然,LlamaIndex框架将会与LangChain、Semantic Kernel和Haystack等框架展开市场竞争。不过,并非所有这些框架都有完全相同的应用范围和功能支持,但就流行程度而言,LangChain的Python代码仓库有超过80K的星级好评,几乎是LlamaIndex(超过30K的星级好评)的三倍,而相对最晚出现的Semantic Kernel已经获得超过18K的星级好评,略高于LlamaIndex的一半,Haystack的代码仓库有超过13K的星级好评。

上述好评结果是与代码仓库的年龄密切相关的,因为星级好评会随着时间的推移而积累;这也是为什么我用“超过”来修饰星级好评数的原因。GitHub上的星级好评数与历史进程中的流行度存在松散的相关性。

LlamaIndex、LangChain和Haystack都拥有许多大公司作为用户,其中一些公司使用了不止一个这样的框架。Semantic Kernel来自微软,除了案例研究之外,微软通常不会公布用户数据。

LlamaIndex框架可帮助你将数据、嵌入、LLM、向量数据库和求值连接到应用程序中。这些支持可以用于问答、结构化提取、聊天、语义搜索和代理等环境。

LlamaIndex框架的功能

从高层面来看,LlamaIndex框架的开发主旨在帮助你构建上下文增强的LLM应用程序,意味着你可以将自己的私有数据与大型语言模型相结合。上下文增强LLM应用程序的示例包括问答聊天机器人、文档理解和提取以及自动化代理等领域。

LlamaIndex提供的工具可执行数据加载、数据索引和存储、使用LLM查询数据以及评估LLM应用程序的性能:

  • 数据连接器从其本机源和格式中获取现有数据。
  • 数据索引,也称为嵌入,以中间表示形式构建数据。
  • 引擎提供对数据的自然语言访问。其中包括用于回答问题的查询引擎,以及用于与你的数据进行多消息对话的聊天引擎。
  • 代理是LLM驱动的知识工具,结合其他软件工具增强性能。
  • 可观察性/评估集成使你能够对应用程序进行实验、评估和监控。

上下文增强

LLM受过大量文本的训练,但不一定是关于你的领域的文本信息。当前,存在三种主要方法可以执行上下文增强并添加有关域的信息,即提供文档、执行RAG和微调模型。

首先,最简单的上下文扩充方法是将文档与查询一起提供给模型,为此你可能不需要LlamaIndex。除非文档的总大小大于你正在使用的模型的上下文窗口;否则,提供文档是可以正常工作的,这在最近还是一个常见的问题。现在,有了具有百万个标记上下文窗口的LLM,这可以使你在执行许多任务时避免继续下一步操作。如果你计划对一百万个标记语料库执行许多查询,那么需要对文档进行缓存处理;但是,这是另外一个待讨论的话题了。

检索增强生成在推理时将上下文与LLM相结合,通常与向量数据库相结合。RAG过程通常使用嵌入来限制长度并提高检索到的上下文的相关性,这既绕过了上下文窗口的限制,又增加了模型看到回答问题所需信息的概率。

从本质上讲,嵌入函数获取一个单词或短语,并将其映射到浮点数的向量;这些向量通常存储在支持向量搜索索引的数据库中。然后,检索步骤使用语义相似性搜索,通常使用查询嵌入和存储向量之间的角度的余弦,来找到“附近”的信息,以便在增强提示中使用。

微调LLM是一个有监督的学习过程,涉及到根据特定任务调整模型的参数。这是通过在一个较小的、特定于任务或特定于领域的数据集上训练模型来完成的,该数据集标有与目标任务相关的样本。使用许多服务器级GPU进行微调通常需要数小时或数天时间,并且需要数百或数千个标记的样本。

安装LlamaIndex

你可以通过三种方式安装Python版本的LlamaIndex:从GitHub存储库中的源代码,使用llama index starter安装,或者使用llama-index-core结合选定的集成组件。starter方式的安装如下所示:

pip install llama-index

除了LlamaIndex核心之外,这种安装方式还将安装OpenAI LLM和嵌入。注意,你需要提供OpenAI API密钥(请参阅链接https://platform.openai.com/docs/quickstart),然后才能运行使用这种安装方式的示例。LlamaIndex starter程序示例非常简单,基本上仅包含经过几个简单的设置步骤后的五行代码。在官方的代码仓库中还提供了更多的例子和有关参考文档。

进行自定义安装可能看起来像下面这样:

pip install llama-index-core llama-index-readers-file llama-index-llms-ollama llama-index-embeddings-huggingface

这将安装一个Ollama和Hugging Face嵌入的接口。此安装还提供一个本地starter级的示例。无论从哪种方式开始,你都可以使用pip添加更多的接口模块。

如果你更喜欢用JavaScript或TypeScript编写代码,那么你可以使用LlamaIndex.TS。TypeScript版本的一个优点是,你可以在StackBlitz上在线运行示例,而无需任何本地设置。不过,你仍然需要提供一个OpenAI API密钥。

LlamaCloud和LlamaParse

LlamaCloud是一个云服务,允许你上传、解析和索引文档,并使用LlamaIndex进行搜索。当前,该项服务仍处于个人alpha测试阶段,我无法访问它。

LlamaParse作为LlamaCloud的一个组件,允许你将PDF解析为结构化数据;它可以通过REST API、Python包和Web UI获得。这个组件目前处于公测阶段。在每周前7K页的免费试用之后,你可以注册使用LlamaParse,只需支付少量的使用费。官网上提供的有关针对苹果10K大小文件基础上的对于LlamaParse和PyPDF比较的例子令人印象深刻,但我自己没有测试过。

LlamaHub

LlamaHub让你可以访问LlamaIndex的大量集成,其中包括代理、回调、数据加载程序、嵌入以及大约17个其他类别。通常,这些集成内容位于LlamaIndex存储库、PyPI和NPM中,你可以使用pip-install或NPM-install加载使用。

create-llama CLI

create-lama是一个命令行工具,用于生成LlamaIndex应用程序。这是开始使用LlamaIndex的快速方法。生成的应用程序中包含一个Next.js驱动的前端和三种后端方案可供选择。

RAG-CLI

RAG CLI也是一个命令行工具,用于与LLM交流你在计算机上本地保存的文件。这只是LlamaIndex的众多使用场景案例之一,不过这种情况非常普遍。

LlamaIndex组件

LlamaIndex组件指南会为你提供有关LlamaIndex各个部分的具体帮助。下面的第一个屏幕截图显示了组件指南菜单。第二个显示了提示的组件指南,滚动到关于自定义提示的部分。

LlamaIndex组件指南记录了构成框架的不同部分,其中介绍了相当多的组件。

我们正在研究这种提示词的使用模式。这个特殊的例子展示了如何自定义问答提示,以莎士比亚戏剧的风格回答问题。值得注意的是,这是一个零样本提示,因为它没有提供任何示例。

学习LlamaIndex

一旦你阅读、理解并用你喜欢的编程语言(Python或TypeScript)运行了入门示例,我建议你尽可能多地阅读、理解和尝试其他看起来更有趣的一些示例。下面的屏幕截图显示了通过运行essay.ts并使用chatEngine.ts询问相关问题来生成一个名为essay的文件的结果。这是一个使用RAG进行问答的示例。

其中,chatEngine.ts程序使用LlamaIndex的ContextChatEngine、Document、Settings和VectorStoreIndex等组件。当我分析其源代码时,我看到它依赖于OpenAI gpt-3.5-turb-16k模型;这种情况可能会随着时间的推移而改变。如果我对文档的分析是正确的话,那么VectorStoreIndex模块使用了开源的、基于Rust的Qdrant向量数据库。

在用我的OpenAI密钥设置了终端环境后,我运行essay.ts来生成一个散文题材的文件,并运行chatEngine.ts来实现有关此文章的查询。

为LLM提供上下文

正如你所看到的,LlamaIndex非常容易用于创建LLM应用程序。我能够针对OpenAI LLM和RAG Q&A应用程序的文件数据源进行测试。值得注意的是,LlamaIndex集成了40多个向量存储、40多个LLM和160多个数据源;它适用于几种使用场景,包括Q&A问答、结构化提取、聊天、语义搜索和代理应用等。

最后,我建议你认真评估LlamaIndex与LangChain、Semantic Kernel和Haystack等框架。这其中的一个或多个很可能会满足你的需求。当然,我不能笼统地推荐其中某一个,因为不同的应用程序会有不同的要求。

LlamaIndex优点
  1. 帮助创建问答、结构化提取、聊天、语义搜索和代理等类型的LLM应用程序
  2. 支持Python和TypeScript
  3. 框架是免费和开源的
  4. 提供大量示例和集成组件
LlamaIndex不足
  1. 云环境仅限于私人预览
  2. 营销有点言过其实
LlamaIndex费用

开源:免费。

LlamaParse导入服务:每周免费支持7K页的文档,然后每1000页需要支付3美元。

平台支持

支持Python和TypeScript,以及云端SaaS(目前处于私人预览状态)。

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

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

相关文章

快行线冷链——创新仓配、共赢未来 主题沙龙在京成功举办

2024年7月7日下午,由京营建联盟、北京市大兴区餐饮行业协会、北京快行线冷链物流联合主办的“创新仓配,共赢未来——相信拥抱的力量”主题沙龙活动在北京篝野城市露营空间隆重举行。本次活动定向邀请了餐饮老板、餐饮企业供应链负责人及冻品经销商和相关…

电子电气架构 --- 智能座舱万物互联

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事,多看一眼都是你的不对。非必要不费力证明自己,无利益不试图说服别人,是精神上的节…

SpringSecurity在SpringBoot中的自动装配

从SpringBoot的自动装配原理入手 找到META-INFO下的spring.factories文件 SpringSecurity作为Spring的亲儿子,自然在spring-boot-autoconfigure下的spring.factories文件中配置了 org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfigurat…

C语言指针函数指针

跟着这篇文章重新理解了一下:彻底攻克C语言指针 有一个例子感觉可以拿出来看看: char *(*c[10])(int **p); * 这段声明定义了一个长度为10的数组c,数组中的每个元素都是指向函数的指针。每个函数接受一个类型为int **(指向指向…

拆分Transformer注意力,韩国团队让大模型解码提速20倍|大模型AI应用开始小规模稳步爆发|周伯文:大模型也有幻觉,全球AI创新指数公布

拆分Transformer注意力,韩国团队让大模型解码提速20倍AI正在颠覆AI上市不到两年,蜗牛游戏可能要退市了?世界人工智能大会结束了,百花齐放,但也群魔乱舞“串联OLED”被苹果带火了,比OLED强在哪里&#xff1f…

API-案例-放大镜效果

学习目标: 掌握案例-放大镜效果 学习内容: 业务分析思路分析放大镜完整代码 业务分析: 鼠标经过对应小盒子,左侧中等盒子显示对应中等图片;鼠标经过中盒子,右侧会显示放大镜效果的大盒子;黑色…

智能物联网鱼缸

硬件部分及接线图 工具 继电器、开发板、物联网os、云平台 微信小程序 结构&#xff1a;images、pages两个为主体。 标题头部分 <view class"container"> <view class"head_box"> <image src"/images/面性鱼缸.png"><…

【C++】 解决 C++ 语言报错:Invalid Use of Incomplete Type

文章目录 引言 在 C 编程中&#xff0c;“Invalid Use of Incomplete Type” 是一种常见错误。此错误通常在程序试图使用未完全定义的类或结构时发生。这种错误不仅会导致编译失败&#xff0c;还可能导致程序行为不可预测。本文将详细探讨无效使用不完整类型的成因、检测方法及…

【图论算法题记录】岛屿问题汇总

岛屿数量 题目&#x1f517; 题目描述 给定一个由 1&#xff08;陆地&#xff09;和 0&#xff08;水&#xff09;组成的矩阵&#xff0c;你需要计算岛屿的数量。岛屿由水平方向或垂直方向上相邻的陆地连接而成&#xff0c;并且四周都是水域。你可以假设矩阵外均被水包围。 …

【已解决】CentOS8安装lrzsz报错:Error: Failed to download metadata for repo ‘BaseOS‘

这里写自定义目录标题 系统信息安装lrzsz解决方案开始使用 系统信息 #cat /etc/redhat-release CentOS Linux release 8.1.1911 (Core) 安装lrzsz # yum install lrzsz CentOS-8 - AppStream …

【Threejs进阶教程-优化篇】4.Vue/React与threejs如何解决冲突和卡顿(续)

Vue/React与threejs如何解决冲突和卡顿-续 使用说明核心思路环境搭建(vuethree)vue运行机制分析业务分离使用threejs做背景 3D模块封装使用ES6的Class来让逻辑性更强Threejs尽量按需引入创建一个类扩展写法本次代码执行顺序 扩展内容添加orbitControls和辅助线解决事件覆盖 与V…

C++模板元编程(三)——类型萃取

类型萃取(type_traits)是一种编译时技术&#xff0c;用于在编译期间获取和操作类型的信息&#xff0c;主要用于泛型编程以及在编译时做出决策。 文章目录 常见的类型萃取内部实现std::is_integral\<T\>std::enable_if_t<_Test, T> 应用 常见的类型萃取 在C11的<…

Java请求webService,IDEA生成客户端调用代码

Axis是Apache开放源代码组织的一个项目&#xff0c;全称为Apache Extensible Interaction System&#xff0c;简称Axis。它是一个基于Java的SOAP&#xff08;Simple Object Access Protocol&#xff0c;简单对象访问协议&#xff09;引擎&#xff0c;提供创建服务器端、客户端和…

游戏开发面试题3

unity如何判断子弹射击到敌人&#xff0c;如果子弹特别快怎么办 使用物理学碰撞检测。使用Unity的物理组件&#xff0c;如Rigidbody和Collider&#xff0c;将子弹和敌人都设置为有一定的物理碰撞属性&#xff0c;当子弹碰到敌人的时候&#xff0c;就会触发OnCollisionEnter()事…

游戏开发面试题2

详细说下堆排序。 堆排序是一种选择排序算法&#xff0c;它的基本思想是&#xff1a;将待排序序列构造成一个大顶堆&#xff0c;此时&#xff0c;整个序列的最大值就是堆顶的根节点。将其与末尾元素进行交换&#xff0c;此时末尾就为最大值。然后将剩余n-1个元素重新构造成一个…

作业训练二编程题6. 小A的计算器

【问题描述】 以往的操作系统内部的数据表示都是二进制方式&#xff0c;小A新写了一个操作系统&#xff0c;系统内部的数据表示为26进制&#xff0c;其中0-25分别由a-z表示。 现在小A要在这个操作系统上实现一个计算器&#xff0c;这个计算器要能实现26进制数的加法运算…

Ajax与Fetch API在Web开发中的性能、用法与未来趋势比较

Ajax和Fetch都是JavaScript中用于从客户端向服务器发送请求以获取数据的技术&#xff0c;但它们之间存在一些显著的区别。以下是对这两种技术的详细比较&#xff1a; 一、技术基础与实现方式 Ajax&#xff1a; 基础&#xff1a;Ajax全称为Asynchronous JavaScript and XML&…

LabVIEW的Actor Framework (AF) 结构介绍

LabVIEW的Actor Framework (AF) 是一种高级架构&#xff0c;用于开发并发、可扩展和模块化的应用程序。通过面向对象编程&#xff08;OOP&#xff09;和消息传递机制&#xff0c;AF结构实现了高效的任务管理和数据处理。其主要特点包括并发执行、动态可扩展性和强大的错误处理能…

ROS——多个海龟追踪一个海龟实验

目标 通过键盘控制一个海龟&#xff08;领航龟&#xff09;的移动&#xff0c;其余生成的海龟通过监听实现追踪定期获取领航龟和其余龟的坐标信息&#xff0c;通过广播告知其余龟&#xff0c;进行相应移动其余龟负责监听 疑惑点&#xff08;已解决&#xff09; int main(int…

k8s 部署RuoYi-Vue-Plus之redis搭建

1.直接部署一个pod 需要挂载存储款, 可参考 之前文章设置 https://blog.csdn.net/weimeibuqieryu/article/details/140183843 2.部署yaml 先创建命名空间ruoyi, 有就不用创建了 kubectl create namespace ruoyi创建部署文件 redis-deploy.yaml kind: PersistentVolume api…