关闭

开发者的LlamaIndex入门指南

发表于:2024-5-08 09:14

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:陈峻    来源:51CTO内容精选

  LlamaIndex是一个专注于检索增强生成(RAG)的工具,可以协助您丰富大模型的数据提示。本文将用实例向您展示和介绍。
  众所周知,GPT(General Pretrained Transformer)为我们描述了一套通过各种矩阵乘法,实现输入、转换和输出的循环。其中的单词(实际上是文本、声音或图像的令牌)会被转换为具有足够维度的矢量,从而表达内在意义。如下图所示,为了确保被传入的上下文是可以计算的,我们需要注意其临近的动词,并通过更多的矩阵乘法块,来移动向量,进而更接近其上下文的真正含义(例如,“黑洞”就不仅仅是一个黑暗的洞穴的含义)。
  不过,GPT产品的瓶颈在于:其对于下一个词的猜测,顶多只能和输入文本语料库的水平相当。而如果我们需要向ChatGPT询问那些它尚未学习过的文本时,鉴于输入窗口的限制,我们无法将大量文本一次性塞入查询中。而此时,我们就需要用RAG来对提示进行“丰富”。
  如果您使用过矢量数据库,那么一定听说过RAG,它是检索增强生成(Retrieval Augmented Generation)的缩写,是一种在无需重新训练的情况下,将新数据引入大语言模型(LLM)的方法。而LlamaIndex(https://docs.llamaindex.ai/en/stable/)则是一个专注于检索的工具,可被用来协助您“丰富”数据的提示。
  开始使用LlamaIndex
  如果您想直接上手LlamaIndex,其快速的开始链接--https://docs.llamaindex.ai/en/stable/getting_started/installation/,给出了“5行代码”入手法。
  在Mac上,我选择使用Visual Studio Code来安装并运行Python 3。为此,我会打开一个Warp终端,并输入如下命令:
  >brew install python3
  完成后,我们可以通过如下截图予以确认:
  接着,我会在该空文件夹中启动Visual Studio 。在安装了Python扩展后,我使用Python来创建环境,即:从命令面板(Palette)中创建了一个特定于项目的虚拟环境。然后,我选择了Venv,并最后确认了自己正在使用的是刚刚安装好的Python:
  根据LlamaIndex的说明,我们需要在Visual Studio Code的虚拟环境中,使用pip安装lama-index包(注意,是在活动终端而非Warp中):
  下面,我需要向环境出示自己的OpenAI密钥。鉴于在IDE下运行的虚拟环境的特性,我们将其粘贴在Visual Studio Code运行项目所制作的launch.json文件中,是最安全的(当然,您可能需要创建一个OpenAI帐户。):
  .. 
  "configurations": 
  [ 
  { 
  "name": "Python Debugger: Current File", 
  "type": "debugpy",
  "request": "launch", 
  "program": "${file}", 
  "console": "integratedTerminal", 
  "env": 
  {  
  "OPENAI_API_KEY": "XXXX" 
  } 
  } 
  ] 
  ..
  按照LlamaIndex开始教程中的建议,我从链接--https://raw.githubusercontent.com/run-llama/llama_index/main/docs/docs/examples/data/paul_graham/paul_graham_essay.txt下载并放置了一个名为data的文件夹,其中包含了一本冗长的传记。
  在Visual Studio代码中,我创建了一个starter.py文件,其内容如下:
  from llama_index.core import VectorStoreIndex, SimpleDirectoryReader
  documents = SimpleDirectoryReader("data").load_data() 
  index = VectorStoreIndex.from_documents(documents) 
  query_engine = index.as_query_engine() 
  response = query_engine.query("What did the author do growing up?") 
  print(response)
  可见,就算您对Python并无深入的了解,也能依靠llama_index软件包构建出大部分代码。下面展示的是它对于查询的回复:
  为了确认我确实调用了OpenAI,以下便是我帐户活动的统计数据:
  那么,这段代码到底能做什么呢?它会将新的文本嵌入到矢量存储中,并通过调用VectorStoreIndex以便在查询时提供检索,并在调用进入GPT-3.5之前,以英语形式添加到上下文的窗口中。这便是我在前文中提到的对提示进行“丰富”的实践。
  通过添加两行日志代码,我既能够提取大量密集的REST调用,也可以从llama_index包中提取如下实用的提示:
  DEBUG:llama_index.core.indices.utils:> Top 2 nodes: 
  > [Node 167d0eb4-7dba-4b93-85ec-3f5779b32daa] [Similarity score: 0.819982] 
  "What I Worked On February 2021 Before college the two main things 
  I worked on, outside of school..." 
  > [Node ee847bc2-d56a-4c26-afd7-c4bee9a3d116] [Similarity score: 0.811733] 
  "I remember taking the boys to the coast on a sunny day in 2015 and 
  figuring out how to deal with ..."
  据此,我们可以了解到其后台发生的调用与变化了。
  在完成之前,我会在data文件夹中添加另一个文档:莎士比亚的《十四行诗》。虽然我无法保障LLM已经有所“知晓”,但是显然这一堆诗并不会构成具有实际意义的叙事。
  据此,我将使用一个故意模糊的问题,来运行如下额外的查询:
  .. 
  response = query_engine.query("Who is Blessed?") 
  print(response)
  就此,我得到的简短回答是:
  Adonis is Blessed.
  是不是非常有趣?在后台,llama_index包“捕获”的是这十四行诗中提到Adonis的如下区域:
  “你是被祝福的,你的价值给了你机会,你必须胜利,虽然缺乏希望。你的本质是什么?你是由什么构成的?既然每个人都有自己的影子,而你也有自己的那个。不过,每个影子都能借来指代Adonis和其赝品,也就是去模仿你。在Helen的脸颊上,所有美丽的艺术,就像你在希腊的轮胎上涂上了新的颜色。虽说是春天,但一年后仍会腐朽。一个是你美丽的影子,另一个则是你的慷慨,你是我们所知道的每一个幸福的该有的形状。”
  就像我们之前看到的日志节点那样,我也截获到了如下节点信息:
  DEBUG:llama_index.core.indices.utils:> Top 2 nodes: 
  > [Node 38e29f53-3656-4b55-ab6b-08acf898f122] [Similarity score: 0.766188] 
  "Blessed are you whose worthiness gives scope, Being had to triumph, 
  being lacked to hope. What i..." 
  > [Node 16d55fda-34ac-42cf-9b08-66d2c6944302] [Similarity score: 0.730936] 
  "And other strains of woe, which now seem woe, Compared with loss of thee, 
  will not seem so. Some..."
  可见,其中大部分出自十四行诗的第53节。“blessed”一词确实出现在“Adonis”的附近。
  当然,对于表现足够好的LlamaIndex来说,这些都不是问题。我刚刚使用了构建管道的第一步,LlamaIndex后续会为您提供更多的、以这类方式处理文档的解释。
  小结
  目前,虽然我们仍然缺乏一种全面的语言来描述模型内部发生的事情,但是通过LlamaIndex使用的RAG不乏一种可靠的途径。它既可以增强针对特定领域信息的大语言模型,也可以确保处理结果的可验证性。而这一切都旨在减少错误应答的可能,而这正是当前困扰人工智能的典型问题。
  本文内容不用于商业目的,如涉及知识产权问题,请权利人联系51Testing小编(021-64471599-8017),我们将立即处理
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号