llama-index-integrations/postprocessor/llama-index-postprocessor-aimon-rerank/README.md
AIMon Rerank is a postprocessor for LlamaIndex that leverages the AIMon API to rerank retrieved documents based on contextual relevance. It refines document retrieval by applying a custom task definition and returning the most contextually relevant nodes.
Ensure you have Python 3.8+ installed. Then, install the required packages:
pip install llama-index
pip install llama-index-postprocessor-aimon-rerank
Set your AIMon API key as an environment variable (or pass it directly when instantiating the reranker):
export AIMON_API_KEY="your_aimon_api_key_here"
Below is a minimal example demonstrating how to use AIMon Rerank with LlamaIndex:
import os
from llama_index.postprocessor.aimon_rerank import AIMonRerank
from llama_index.core.response.pprint_utils import pprint_response
from llama_index.core import VectorStoreIndex, SimpleDirectoryReader
# Load documents from a directory.
documents = SimpleDirectoryReader(
"data/your_documents/example_of_afforestion"
).load_data()
# Build a vector store index from the documents.
index = VectorStoreIndex.from_documents(documents=documents)
# Define a task for the reranker.
task_definition = "Determine the relevance of context documents with respect to the user query."
# Initialize AIMonRerank, with the following parameters:
# top_n: After reranking, the top_n most contextually relevant nodes are selected for response generation.
# api_key: Ensure the AIMON_API_KEY is set, either directly or as an environment variable.
# task_definition: The task definition serves as an explicit instruction that defines what the reranking evaluation should focus on.
aimon_rerank = AIMonRerank(
top_n=2,
api_key=os.environ["AIMON_API_KEY"],
task_definition=task_definition,
)
# Create a query engine with the AIMon reranking postprocessor.
# For example, the query engine retrieves top 10 most relevant nodes, out of which only top_n are selected after reranking.
query_engine = index.as_query_engine(
similarity_top_k=10, node_postprocessors=[aimon_rerank]
)
# Execute a query.
response = query_engine.query("What did the protagonist do in this essay?")
pprint_response(response, show_source=True)
The protagonist was responsible for planting 1000 trees.
Node ID: 2940ea4a-69ec-4fc4-9dd4-8ed54a9d4f1b Similarity: 0.49260445005911023
Text: The protagonist took on the responsibility of afforestation in their village, initiating a large-scale tree-planting campaign. Over several months, they coordinated volunteers, secured funding, and ensured the successful planting of 1000 trees in barren lands to restore the local ecosystem.
Node ID: 0baaf5af-6e6b-4889-8407-e49d1753980c Similarity: 0.45151918284717965
Text: Determined to combat deforestation, the protagonist spearheaded a green initiative, setting an ambitious goal of planting 1000 trees. Through meticulous planning and relentless effort, they managed to achieve their objective, significantly improving the area's biodiversity and air quality.