22 LlamaIndex中的文档定义与元数据

LlamaIndex中的文档定义与自定义

在LlamaIndex中,文档(Document)是一个核心概念,它允许我们以多种方式定义和自定义数据源。本文将详细介绍如何定义和自定义文档,以便更好地满足你的需求。

定义文档

文档可以通过数据加载器自动创建,也可以手动构造。

自动创建文档

默认情况下,所有数据加载器(包括LlamaHub提供的那些)通过load_data函数返回文档对象。

from llama_index.core import SimpleDirectoryReader

documents = SimpleDirectoryReader("./data").load_data()

手动构造文档

你也可以选择手动构造文档。LlamaIndex提供了Document结构体。

from llama_index.core import Document

text_list = [text1, text2, ...]
documents = [Document(text=t) for t in text_list]

为了加快原型设计和开发,你可以使用一些默认文本快速创建文档:

document = Document.example()

自定义文档

本节将介绍各种自定义文档对象的方法。由于文档对象是TextNode对象的子类,所有这些设置和细节也适用于TextNode对象类。

元数据(Metadata)

文档还提供了包含有用元数据的机会。使用每个文档上的元数据字典,可以包含额外的信息,以帮助响应查询并跟踪查询响应的来源。这些信息可以是任何内容,例如文件名或类别。如果你与向量数据库集成,请记住一些向量数据库要求键必须是字符串,值必须是平面的(字符串、浮点数或整数)。

在文档的元数据字典中设置的任何信息将显示在从文档创建的每个源节点的元数据中。此外,这些信息包含在节点中,使索引能够在查询和响应中利用它。默认情况下,元数据被注入到文本中,用于嵌入和LLM模型调用。

有几种方法可以设置这个字典:

### 使用 LlamaIndex文档向量化并存储到 Milvus 的过程 当使用 LlamaIndex文档进行处理并将结果存入 Milvus 数据库时,确实存在一种机制来保存原始数据。这不仅有助于保持数据的完整性,还方便后续的数据检索和应用逻辑构建。 #### 实现方法概述 在实际操作中,可以通过设置额外字段的方式,在将向量嵌入写入 Milvus 同时也记录对应的元数据或原文本片段。具体来说: - **定义定义结构**:创建一个包含向量和其他辅助信息的对象模型。 - **利用外键关联**:如果希望保留完整的源文件,则可以在外部存储系统(如 S3 或本地磁盘)中放置这些资源,并仅在 Milvus 中维护指向该位置的链接或其他形式的标识符。 - **扩展属性映射**:对于每条记录,除了基本的向量表示之外,还可以附加一些描述性的标签或者直接嵌套 JSON 字段用于携带更多细节[^1]。 #### Python 示例代码展示 下面是一个简单的例子,展示了如何结合 `LlamaIndex` 和 `Milvus` 来完成上述功能: ```python from pymilvus import connections, FieldSchema, CollectionSchema, DataType, Collection import numpy as np from llama_index import SimpleDirectoryReader, GPTListIndex # 初始化连接至 Milvus 服务端口 connections.connect("default", host="localhost", port="19530") fields = [ FieldSchema(name="id", dtype=DataType.INT64, is_primary=True), FieldSchema(name="vector", dtype=DataType.FLOAT_VECTOR, dim=768), # 假设我们有768维特征空间 FieldSchema(name="metadata", dtype=DataType.VARCHAR, max_length=2048) # 存储JSON字符串或者其他格式化后的文本 ] schema = CollectionSchema(fields=fields) collection_name = "example_collection" if collection_name not in list_collections(): col = Collection(name=collection_name, schema=schema) else: col = Collection(name=collection_name) def store_document(doc_path): documents = SimpleDirectoryReader(input_files=[doc_path]).load_data() index = GPTListIndex.from_documents(documents) embeddings = [] for doc_id, document in enumerate(documents): embedding_vector = index.get_embedding(document.text).tolist() # 获取文本嵌入 metadata_json = { 'title': document.metadata['title'], 'content': document.text, 'source_uri': f"file://{doc_path}" } entry = {"id": doc_id + 1, "vector": embedding_vector, "metadata": str(metadata_json)} embeddings.append(entry) mr = col.insert([entry["id"] for entry in embeddings], [entry["vector"] for entry in embeddings], [entry["metadata"] for entry in embeddings]) store_document("/path/to/your/document.txt") ``` 此脚本首先建立了 Milvus Server 的连接,并定义了一个新的集合用来容纳我们的数据集;接着通过调用 `SimpleDirectoryReader` 加载指定路径下的单个文档实例,再借助于 `GPTListIndex` 计算其语义表达——即所谓的“向量”。最后一步则是把得到的结果连同其他必要的元信息一起插入到了之前准备好的表里去[^5]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

需要重新演唱

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值