跳到主要内容 LlamaIndex 为 LLM 添加个性化数据指南 | 极客日志
Python AI 算法
LlamaIndex 为 LLM 添加个性化数据指南 LlamaIndex 是一个用于构建基于大型语言模型(LLM)应用程序的数据框架,通过检索增强生成(RAG)技术将私有数据与 LLM 结合。文章介绍了 LlamaIndex 的核心工作原理,包括索引和查询阶段。内容涵盖安装配置、简历阅读器构建、文本转语音应用开发等实战案例,展示了如何利用自然语言查询私有数据及创建聊天机器人。最后总结了 LlamaIndex 在文档问答、代理及全栈 Web 应用中的用例,强调其无需重新训练模型即可让 LLM 访问大规模私有数据的能力。
独立开发者 发布于 2025/2/7 更新于 2026/4/20 1 浏览
LlamaIndex:为 LLM 添加个性化数据指南
LlamaIndex 是您构建基于 LLM 的应用程序的友好数据助手。您可以使用自然语言轻松地获取、管理和检索私有数据和特定领域的数据。
LlamaIndex 是一个针对大型语言模型 (LLM) 应用程序的数据框架。GPT-4 等 LLM 在海量的公共数据集上进行预训练,开箱即用即可实现令人难以置信的自然语言处理能力。然而,如果没有访问您自己的私有数据,它们的实用性就会受到限制。
LlamaIndex 允许您通过灵活的数据连接器从 API、数据库、PDF 等中提取数据。此数据被编入针对 LLM 优化的中间表示中。然后,LlamaIndex 允许通过查询引擎、聊天界面和 LLM 驱动的 data agent 对您的数据进行自然语言查询和对话。它使您的 LLM 能够访问和解释大规模的私有数据,而无需在较新的数据上重新训练模型。
无论您是初学者,正在寻找一种简单的方法来用自然语言查询您的数据,还是高级用户需要深度定制,LlamaIndex 都能提供相应的工具。高级 API 允许您仅使用五行程代码即可开始,而低级 API 允许您完全控制数据提取、索引、检索等。
LlamaIndex 如何工作? LlamaIndex 使用检索增强生成 (RAG) 系统,该系统将大型语言模型与私有知识库相结合。它通常包括两个阶段:索引阶段和查询阶段。
索引阶段 在索引阶段,LlamaIndex 将有效地将私有数据编入向量索引。此步骤有助于创建特定于您域的可搜索知识库。您可以输入文本文档、数据库记录、知识图谱和其他数据类型。从本质上讲,索引将数据转换为捕获其语义含义的数字向量或嵌入。它可以在内容中启用快速相似性搜索。
查询阶段 在查询阶段,RAG 管道根据用户的查询搜索最相关的信息。然后将此信息与查询一起提供给 LLM,以创建准确的响应。此过程允许 LLM 访问其初始训练中可能未包含的当前和更新的信息。在此阶段的主要挑战是检索、组织和推理潜在的多个知识库。
设置 LlamaIndex 在我们深入研究 LlamaIndex 教程和项目之前,我们必须安装 Python 软件包并设置 API。
我们可以简单地使用 pip 安装 LlamaIndex。
默认情况下,LlamaIndex 使用 OpenAI GPT-3 text-davinci-003 模型。要使用此模型,您必须设置 OPENAI_API_KEY。
import os
os.environ["OPENAI_API_KEY" ] = "INSERT OPENAI KEY"
使用 LlamaIndex 向 LLM 添加个人数据 在本节中,我们将学习如何使用 LlamaIndex 创建简历阅读器。您可以通过转到 LinkedIn 个人资料页面、单击更多,然后保存为 PDF 来下载您的简历。
在运行任何操作之前,我们必须安装 llama-index、openai 和 pypdf。我们正在安装 pypdf,以便我们可以读取和转换 PDF 文件。
pip install llama-index openai pypdf
加载数据并创建索引 我们有一个名为'Private-Data'的目录,其中仅包含一个 PDF 文件。我们将使用 SimpleDirectoryReader 读取它,然后使用 TreeIndex 将其转换为索引。
from llama_index import TreeIndex, SimpleDirectoryReader
resume = SimpleDirectoryReader("Private-Data" ).load_data()
new_index = TreeIndex.from_documents(resume)
运行查询 一旦数据被索引,你可以开始使用 as_query_engine() 提问。此函数使你能够询问有关文档中特定信息的问题,并在 OpenAI GPT-3 text-davinci-003 模型的帮助下收到相应的答复。
正如我们所看到的,LLM 模型准确地回答了查询。它搜索了索引并找到了相关信息。
query_engine = new_index.as_query_engine()
response = query_engine.query("When did Abid graduated?" )
print (response)
Abid graduated in February 2014 .
我们可以进一步了解认证。LlamaIndex 似乎已经全面了解了候选人,这对寻求特定人员的公司来说是有利的。
response = query_engine.query("What is the name of certification that Abid received?" )
print (response)
Data Scientist Professional
保存和加载上下文 创建索引是一个耗时的过程。我们可以通过保存上下文来避免重新创建索引。默认情况下,以下命令会将索引存储保存在 ./storage 目录中。
new_index.storage_context.persist()
一旦完成,我们可以快速加载存储上下文并创建一个索引。
from llama_index import StorageContext, load_index_from_storage
storage_context = StorageContext.from_defaults(persist_dir="./storage" )
index = load_index_from_storage(storage_context)
为了验证它是否正常工作,我们将向查询引擎询问简历中的问题。看来我们已经成功加载了上下文。
query_engine = index.as_query_engine()
response = query_engine.query("What is Abid's job title?" )
print (response)
聊天机器人 除了问答之外,我们还可以使用 LlamaIndex 创建一个个人聊天机器人。我们只需要使用 as_chat_engine() 函数初始化索引。我们将提出一个简单的问题。
query_engine = index.as_chat_engine()
response = query_engine.chat("What is the job title of Abid in 2021?" )
print (response)
并且在不提供附加语境的情况下,我们将询问后续问题。
response = query_engine.chat("What else did he do during that time?" )
print (response)
In 2021 , Abid worked as a Data Science Consultant for Guidepoint , a Writer for Towards Data Science and Towards AI, a Technical Writer for Machine Learning Mastery, an Ambassador for Deepnote , and a Technical Writer for Start It Up.
使用 LlamaIndex 构建 Wiki 文本转语音 我们的下一个项目涉及开发一个可以回答来自维基百科的问题并将其转换为语音的应用程序。
网络抓取维基百科页面 首先,我们将从意大利 - 维基百科网页中抓取数据,并将其保存为 data 文件夹中的 italy_text.txt 文件。
from pathlib import Path
import requests
response = requests.get(
"https://en.wikipedia.org/w/api.php" ,
params={
"action" : "query" ,
"format" : "json" ,
"titles" : "Italy" ,
"prop" : "extracts" ,
"explaintext" : True ,
},
).json()
page = next (iter (response["query" ]["pages" ].values()))
italy_text = page["extract" ]
data_path = Path("data" )
if not data_path.exists():
Path.mkdir(data_path)
with open ("data/italy_text.txt" , "w" ) as fp:
fp.write(italy_text)
加载数据并构建索引 接下来,我们需要安装必要的软件包。elevenlabs 软件包允许我们使用 API 轻松地将文本转换为语音。
pip install llama-index openai elevenlabs
通过使用 SimpleDirectoryReader,我们将加载数据,并使用 VectorStoreIndex 将 TXT 文件转换为矢量存储。
from llama_index import VectorStoreIndex, SimpleDirectoryReader
from IPython.display import Markdown, display
from llama_index.tts import ElevenLabsTTS
from IPython.display import Audio
documents = SimpleDirectoryReader("data" ).load_data()
index = VectorStoreIndex.from_documents(documents)
查询 我们的计划是询问有关该国家/地区的一般性问题,并从 LLM query_engine 接收响应。
query = "Tell me an interesting fact about the country?"
query_engine = index.as_query_engine()
response = query_engine.query(query)
display(Markdown(f"<b>{query} </b>" ))
display(Markdown(f"<p>{response} </p>" ))
文本转语音 之后,我们将使用 llama_index.tts 模块来访问 ElevenLabsTTS api。你需要提供 ElevenLabs API 密钥来启动音频生成功能。你可以在 ElevenLabs 网站上免费获取一个 API 密钥。
import os
elevenlabs_key = os.environ["ElevenLabs_key" ]
tts = ElevenLabsTTS(api_key=elevenlabs_key)
我们将添加对 generate_audio 函数的响应以生成自然语音。要收听音频,我们将使用 IPython.display 的 Audio 函数。
audio = tts.generate_audio(str (response))
Audio(audio)
这是一个简单的例子。你可以使用多个模块来创建你的助手,比如 Siri,它可以通过解释你的私人数据来回答你的问题。有关更多信息,请参阅 LlamaIndex 文档。
LlamaIndex 用例 LlamaIndex 提供了一套完整的工具包,用于构建基于语言的应用程序。最重要的是,您可以使用 Llama Hub 中的各种数据加载器和代理工具来开发具有多种功能的复杂应用程序。您可以使用一个或多个插件数据加载器将自定义数据源连接到您的 LLM。
简而言之,你可以使用 LlamaIndex 来构建:
文档问答
聊天机器人
代理
结构化数据
全栈 Web 应用程序
私有设置
如需详细了解这些用例,请前往 LlamaIndex 文档。
结论 LlamaIndex 提供了一个功能强大的工具包,用于构建检索增强生成系统,该系统将大型语言模型的优势与自定义知识库相结合。它能够创建特定于领域的索引数据存储,并在推理期间利用它,为 LLM 提供相关上下文,以生成高质量的响应。
在本教程中,我们了解了 LlamaIndex 及其工作原理。此外,我们仅使用几行 Python 代码构建了一个简历阅读器和文本转语音项目。使用 LlamaIndex 创建 LLM 应用程序非常简单,它提供了大量的插件、数据加载器和代理。通过 RAG 架构,开发者可以低成本地让大模型掌握企业私有数据,解决通用模型知识滞后和数据隐私问题,是构建垂直领域智能应用的首选框架之一。
相关免费在线工具 加密/解密文本 使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
RSA密钥对生成器 生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
Mermaid 预览与可视化编辑 基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
curl 转代码 解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
Base64 字符串编码/解码 将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
Base64 文件转换器 将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online