Skip to content
LlamaIndex 文档版本 跟随上游 源快照 3b5b59d0 更新于 2026-10-15

概念

节点后处理器是一组模块:它们接收一组节点,在返回之前施加某种变换或过滤。

在 LlamaIndex 里,节点后处理器最常见的用法是在查询引擎内部,紧接在节点检索之后、响应合成之前执行。

LlamaIndex 提供了多种可直接使用的节点后处理器,同时也留了一个简单的 API 方便你加入自己的后处理器。

提示

不确定节点后处理器在 RAG 流程中的位置?读一读高层概念

使用方式

使用节点后处理器的例子如下:

from llama_index.core.postprocessor import SimilarityPostprocessor
from llama_index.postprocessor.cohere_rerank import CohereRerank
from llama_index.core.data_structs import Node
from llama_index.core.schema import NodeWithScore

nodes = [
    NodeWithScore(node=Node(text="text1"), score=0.7),
    NodeWithScore(node=Node(text="text2"), score=0.8),
]

# similarity postprocessor: filter nodes below 0.75 similarity score
processor = SimilarityPostprocessor(similarity_cutoff=0.75)
filtered_nodes = processor.postprocess_nodes(nodes)

# cohere rerank: rerank nodes given query using trained model
reranker = CohereRerank(api_key="<COHERE_API_KEY>", top_n=2)
reranker.postprocess_nodes(nodes, query_str="<user_query>")

注意 postprocess_nodes 可以接受 query_str 或 query_bundle(QueryBundle),但二者不能同时传。

使用方式

最常见的用法仍是在查询引擎中使用:它们作用于检索器返回的节点,执行于响应合成步骤之前。

配合查询引擎使用

from llama_index.core import VectorStoreIndex, SimpleDirectoryReader
from llama_index.core.postprocessor import TimeWeightedPostprocessor

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

index = VectorStoreIndex.from_documents(documents)

query_engine = index.as_query_engine(
    node_postprocessors=[
        TimeWeightedPostprocessor(
            time_decay=0.5, time_access_refresh=False, top_k=1
        )
    ]
)

# all node post-processors will be applied during each query
response = query_engine.query("query string")

配合检索到的节点使用

也可以作为独立对象来过滤检索到的节点:

from llama_index.core.postprocessor import SimilarityPostprocessor

nodes = index.as_retriever().retrieve("test query str")

# filter nodes below 0.75 similarity score
processor = SimilarityPostprocessor(similarity_cutoff=0.75)
filtered_nodes = processor.postprocess_nodes(nodes)

配合你自己的节点使用

你可能已经注意到,后处理器接收的是 NodeWithScore 对象——它只是一个把 Node 和一个 score 值包在一起的包装类。

from llama_index.core.postprocessor import SimilarityPostprocessor
from llama_index.core.data_structs import Node
from llama_index.core.schema import NodeWithScore

nodes = [
    NodeWithScore(node=Node(text="text"), score=0.7),
    NodeWithScore(node=Node(text="text"), score=0.8),
]

# filter nodes below 0.75 similarity score
processor = SimilarityPostprocessor(similarity_cutoff=0.75)
filtered_nodes = processor.postprocess_nodes(nodes)

(custom-node-postprocessor)=

自定义节点后处理器

基类是 BaseNodePostprocessor,API 接口非常简单:

class BaseNodePostprocessor:
    """Node postprocessor."""

    @abstractmethod
    def _postprocess_nodes(
        self, nodes: List[NodeWithScore], query_bundle: Optional[QueryBundle]
    ) -> List[NodeWithScore]:
        """Postprocess nodes."""

一个占位的节点后处理器只需几行代码即可实现:

from llama_index.core import QueryBundle
from llama_index.core.postprocessor.types import BaseNodePostprocessor
from llama_index.core.schema import NodeWithScore

class DummyNodePostprocessor(BaseNodePostprocessor):
    def _postprocess_nodes(
        self, nodes: List[NodeWithScore], query_bundle: Optional[QueryBundle]
    ) -> List[NodeWithScore]:
        # subtracts 1 from the score
        for n in nodes:
            n.score -= 1

        return nodes

模块

更多细节见完整的模块清单。

BytesRouter 是社区翻译站点,所有译文仅供参考,一切以官方英文原文为准。