You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

LlamaIndex 0.14.7嵌入时如何排除元数据?

解决LlamaIndex嵌入时元数据过长的问题

针对你遇到的问题——即使设置了SentenceSplitter(include_metadata=False)仍报错元数据长度超过chunk size,可通过以下几种方法解决:

方法一:配置嵌入模型禁用元数据嵌入

如果你的嵌入模型支持控制是否嵌入元数据(比如OpenAIEmbedding),初始化时添加embed_metadata=False参数,让模型只嵌入文档文本,不处理元数据:

from llama_index.embeddings.openai import OpenAIEmbedding

# 初始化嵌入模型时禁用元数据嵌入
embed_model = OpenAIEmbedding(embed_metadata=False)

table_vec_store: SimpleVectorStore = SimpleVectorStore()
pipeline: IngestionPipeline = IngestionPipeline(
    transformations=[
        SentenceSplitter(chunk_size=300, chunk_overlap=15, include_metadata=False),
        embed_model
    ],
    vector_store=table_vec_store
)
pipeline.run(documents=table_documents)
self._table_index = VectorStoreIndex.from_vector_store(table_vec_store)

方法二:手动处理拆分与嵌入,临时移除元数据

若嵌入模型不支持禁用元数据嵌入,可手动拆分文档,临时移除元数据完成嵌入后再恢复,避免嵌入阶段处理长元数据:

from llama_index.core.node_parser import SentenceSplitter

# 1. 拆分文档
splitter = SentenceSplitter(chunk_size=300, chunk_overlap=15, include_metadata=False)
split_nodes = splitter.transform_documents(table_documents)

# 2. 保存元数据并临时清空
temp_metadata = [node.metadata.copy() for node in split_nodes]
for node in split_nodes:
    node.metadata = {}

# 3. 嵌入处理
embedded_nodes = embed_model.embed_nodes(split_nodes)

# 4. 恢复元数据
for idx, node in enumerate(embedded_nodes):
    node.metadata = temp_metadata[idx]

# 5. 存入向量库并创建索引
table_vec_store.add(embedded_nodes)
self._table_index = VectorStoreIndex.from_vector_store(table_vec_store)

方法三:临时增大chunk_size(不推荐,仅应急用)

如果上述方法都无法快速生效,可临时将chunk_size调至大于元数据最长字段的长度(比如设为400),但这可能会影响文本拆分的粒度和检索精度:

SentenceSplitter(chunk_size=400, chunk_overlap=15, include_metadata=False)

内容的提问来源于stack exchange,提问作者Trams

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 02:24:51