13 KiB
Note
本文档由 WeHub 基于上游 README 翻译整理,属于社区翻译,非官方中文文档。
English · 原始项目 · 上游 README
原作者、版权与许可证归属以原始项目及本仓库 LICENSE 文件为准。
🗂️ LlamaIndex 🦙
LlamaIndex OSS(由 LlamaIndex) 提供)是一个用于构建智能体(agentic)应用的开源框架。Parse 是我们面向智能体 OCR、解析、提取、索引等功能的企业级平台。你可以将此框架与 LlamaParse 一起使用,也可以单独使用;注册及产品链接请见下文 LlamaParse。
📚 文档:
使用 LlamaIndex 进行开发通常需要配合 LlamaIndex 核心库以及一组选定的集成(或插件)。在 Python 中,有两种方式可以开始基于 LlamaIndex 进行开发:
-
入门版(Starter):
llama-index. 一个入门 Python 包,包含 LlamaIndex 核心库以及部分集成。 -
自定义(Customized):
llama-index-core. 安装 LlamaIndex 核心库,并在 LlamaHub 上添加你的应用所需的 LlamaIndex 集成包。目前已有 300 多个可与核心库无缝协作的 LlamaIndex 集成包,让你能够使用偏好的 LLM、嵌入(embedding)和向量存储(vector store)提供商进行开发。
LlamaIndex Python 库采用命名空间设计:包含 core 的 import 语句表示正在使用核心包;相反,不包含 core 的语句则表示正在使用集成包。
# typical pattern
from llama_index.core.xxx import ClassABC # core submodule xxx
from llama_index.xxx.yyy import (
SubclassABC,
) # integration yyy for submodule xxx
# concrete example
from llama_index.core.llms import LLM
from llama_index.llms.openai import OpenAI
LlamaParse(文档智能体平台)
LlamaParse 是一个独立平台,专注于文档智能体(document agents)与智能体 OCR(agentic OCR)。它包括 Parse(解析)、LlamaAgents(已部署的文档智能体)、Extract(结构化提取)和 Index(摄取与 RAG)。你可以将它与 LlamaIndex 框架配合使用,也可以单独使用。
- 注册 LlamaParse — 创建账户并获取 API key。
- Parse — 智能体 OCR 与文档解析(支持 130+ 种格式)。文档
- Extract — 从文档中进行结构化数据提取。文档
- Index — 摄取、索引与 RAG 流水线。文档
- Split — 将大型文档拆分为子类别。文档
- Agents — 使用
Workflows和 Agent Builder 构建端到端文档智能体。文档
重要链接
🚀 概览
注意:本 README 的更新频率不如文档本身。如需了解最新更新,请查阅上方文档!
背景
- LLM(大语言模型)是知识生成与推理领域的杰出技术。它们在大量公开可用数据上进行了预训练。
- 我们如何最好地用自有私有数据来增强 LLM?
我们需要一套全面的工具包,来帮助为 LLM 执行此类数据增强。
解决方案
这正是 LlamaIndex 的用武之地。LlamaIndex 是一个帮助你构建 LLM 应用的「数据框架」(data framework)。它提供以下工具:
- 提供 data connectors(数据连接器),用于摄取你现有的数据源和数据格式(API、PDF、文档、SQL 等)。
- 提供将你的数据结构化的方法(indices、graphs),使这些数据能够轻松地与 LLM 配合使用。
- 提供针对你数据的高级检索/查询接口:输入任意 LLM 提示词,即可获得检索到的上下文和知识增强后的输出。
- 可轻松与外部应用框架集成(例如 LangChain、Flask、Docker、ChatGPT 等)。
LlamaIndex 为初学者和高级用户都提供了工具。我们的高层 API 允许初学者仅用 5 行代码即可使用 LlamaIndex 摄取并查询数据。我们的低层 API 允许高级用户自定义并扩展任何模块(data connectors、indices、retrievers、query engines、reranking modules),以满足其需求。
💡 贡献
有兴趣贡献代码吗?我们欢迎并大力鼓励对 LlamaIndex 核心的贡献,以及基于核心构建的集成贡献!详见我们的 贡献指南。
新的集成应当与现有 LlamaIndex 框架组件进行有意义的整合。LlamaIndex 维护者有权酌情拒绝某些集成。
📄 文档
完整文档见此处
请查阅以获取最新的教程、操作指南、参考文档及其他资源!
💻 示例用法
# custom selection of integrations to work with core
pip install llama-index-core
pip install llama-index-llms-openai
pip install llama-index-llms-ollama
pip install llama-index-embeddings-huggingface
示例位于 docs/examples 文件夹。索引位于 indices 文件夹(参见下方索引列表)。
使用 OpenAI 构建简单的 vector store index:
import os
os.environ["OPENAI_API_KEY"] = "YOUR_OPENAI_API_KEY"
from llama_index.core import VectorStoreIndex, SimpleDirectoryReader
documents = SimpleDirectoryReader("YOUR_DATA_DIRECTORY").load_data()
index = VectorStoreIndex.from_documents(documents)
使用非 OpenAI LLM(例如通过 Ollama 托管的 LLM)构建简单的 vector store index:
from llama_index.core import Settings, VectorStoreIndex, SimpleDirectoryReader
from llama_index.embeddings.huggingface import HuggingFaceEmbedding
from llama_index.llms.ollama import Ollama
from transformers import AutoTokenizer
# set the LLM
Settings.llm = Ollama(
model="llama-3.1:latest",
request_timeout=360.0,
)
# set tokenizer to match LLM
Settings.tokenizer = AutoTokenizer.from_pretrained(
"meta-llama/Llama-3.1-8B-Instruct"
)
# set the embed model
Settings.embed_model = HuggingFaceEmbedding(
model_name="BAAI/bge-small-en-v1.5"
)
documents = SimpleDirectoryReader("YOUR_DATA_DIRECTORY").load_data()
index = VectorStoreIndex.from_documents(
documents,
)
查询:
query_engine = index.as_query_engine()
query_engine.query("YOUR_QUESTION")
默认情况下,数据存储在内存中。
持久化到磁盘(位于 ./storage 下):
index.storage_context.persist()
从磁盘重新加载:
from llama_index.core import StorageContext, load_index_from_storage
# rebuild storage context
storage_context = StorageContext.from_defaults(persist_dir="./storage")
# load index
index = load_index_from_storage(storage_context)
关于构建资产验证的说明
默认情况下,llama-index-core 包含 _static 文件夹,其中存放随包安装附带的 nltk 和 tiktoken 缓存。这确保你在运行时磁盘访问权限受限的环境中也能轻松运行 llama-index。
为验证这些文件安全且有效,我们使用 GitHub attest-build-provenance action。该 action 会验证 _static 文件夹中的文件与 llama-index-core/llama_index/core/_static 文件夹中的文件是否一致。
若要验证,可运行以下脚本(指向你已安装的包):
#!/bin/bash
STATIC_DIR="venv/lib/python3.13/site-packages/llama_index/core/_static"
REPO="run-llama/llama_index"
find "$STATIC_DIR" -type f | while read -r file; do
echo "Verifying: $file"
gh attestation verify "$file" -R "$REPO" || echo "Failed to verify: $file"
done
📖 引用
若在论文中使用 LlamaIndex,可引用:
@software{Liu_LlamaIndex_2022,
author = {Liu, Jerry},
doi = {10.5281/zenodo.1234},
month = {11},
title = {{LlamaIndex}},
url = {https://github.com/jerryjliu/llama_index},
year = {2022}
}