Reranking patterns for improving search precision. Use when implementing cross-encoder reranking, LLM-based relevance scoring, or improving retrieval quality in RAG pipelines.
View on GitHubyonatangross/orchestkit
orchestkit-complete
January 24, 2026
Select agents to install to:
npx add-skill https://github.com/yonatangross/orchestkit/blob/main/./skills/reranking-patterns/SKILL.md -a claude-code --skill reranking-patternsInstallation paths:
.claude/skills/reranking-patterns/# Reranking Patterns
Improve search precision by re-scoring retrieved documents with more powerful models.
## Overview
- Improving precision after initial retrieval
- When bi-encoder embeddings miss semantic nuance
- Combining multiple relevance signals
- Production RAG systems requiring high accuracy
Improve search precision by re-scoring retrieved documents with more powerful models.
## Why Rerank?
Initial retrieval (bi-encoder) prioritizes speed over accuracy:
- Bi-encoder: Embeds query and docs separately → fast but approximate
- Cross-encoder/LLM: Processes query+doc together → slow but accurate
**Solution**: Retrieve many (top-50), rerank few (top-10)
## Pattern 1: Cross-Encoder Reranking
```python
from sentence_transformers import CrossEncoder
class CrossEncoderReranker:
def __init__(self, model_name: str = "cross-encoder/ms-marco-MiniLM-L-6-v2"):
self.model = CrossEncoder(model_name)
def rerank(
self,
query: str,
documents: list[dict],
top_k: int = 10,
) -> list[dict]:
"""Rerank documents using cross-encoder."""
# Create query-document pairs
pairs = [(query, doc["content"]) for doc in documents]
# Score all pairs
scores = self.model.predict(pairs)
# Sort by score
scored_docs = list(zip(documents, scores))
scored_docs.sort(key=lambda x: x[1], reverse=True)
# Return top-k with updated scores
return [
{**doc, "score": float(score)}
for doc, score in scored_docs[:top_k]
]
```
## Pattern 2: LLM Reranking (Batch)
```python
from openai import AsyncOpenAI
async def llm_rerank(
query: str,
documents: list[dict],
llm: AsyncOpenAI,
top_k: int = 10,
) -> list[dict]:
"""Rerank using LLM relevance scoring."""
# Build prompt with all candidates
docs_text = "\n\n".join([
f"[Doc {i+1}]\n{doc['content'][:300]}..."
for i, doc in enumerate(documents)
]