Agentic RAG with Reranking

Combine agentic search, hybrid retrieval, and reranking for high-quality responses.

This example combines three techniques for optimal retrieval:

  1. Agentic RAG: Agent decides when to search the knowledge base
  2. Hybrid search: Combines vector similarity with keyword matching
  3. Reranking: Reorders results using a dedicated ranking model
1from kern.agent import Agent
2from kern.knowledge.knowledge import Knowledge
3from kern.knowledge.embedder.cohere import CohereEmbedder
4from kern.knowledge.reranker.cohere import CohereReranker
5from kern.models.anthropic import Claude
6from kern.vectordb.lancedb import LanceDb, SearchType
7
8knowledge = Knowledge(
9 vector_db=LanceDb(
10 uri="tmp/lancedb",
11 table_name="docs",
12 search_type=SearchType.hybrid,
13 embedder=CohereEmbedder(id="embed-v4.0"),
14 reranker=CohereReranker(model="rerank-v3.5"),
15 ),
16)
17
18agent = Agent(
19 model=Claude(id="claude-sonnet-4-5"),
20 knowledge=knowledge,
21 search_knowledge=True,
22)

Why Combine These Techniques

TechniqueWhat It Does
Agentic RAGAgent searches only when needed, can reformulate queries
Hybrid searchCatches both semantic matches and exact terms
RerankingUses a dedicated model to reorder results by relevance

Together, these provide better retrieval accuracy than any single technique alone.

How Reranking Works

After hybrid search returns initial results, the reranker:

  1. Takes the query and candidate documents
  2. Scores each document for relevance using a cross-encoder model
  3. Reorders results so the most relevant appear first

Cohere's rerank-v3.5 is trained specifically for this task and significantly improves result quality.

Example

1import asyncio
2
3from kern.agent import Agent
4from kern.knowledge.embedder.cohere import CohereEmbedder
5from kern.knowledge.knowledge import Knowledge
6from kern.knowledge.reranker.cohere import CohereReranker
7from kern.models.anthropic import Claude
8from kern.vectordb.lancedb import LanceDb, SearchType
9
10# Create knowledge base with hybrid search and reranking
11knowledge = Knowledge(
12 vector_db=LanceDb(
13 uri="tmp/lancedb",
14 table_name="agno_docs",
15 search_type=SearchType.hybrid,
16 embedder=CohereEmbedder(id="embed-v4.0"),
17 reranker=CohereReranker(model="rerank-v3.5"),
18 ),
19)
20
21# Load content
22asyncio.run(
23 knowledge.ainsert(url="https://kern.ndx.rocks/introduction/agents.md")
24)
25
26# Create agent with knowledge
27agent = Agent(
28 model=Claude(id="claude-sonnet-4-20250514"),
29 knowledge=knowledge,
30 search_knowledge=True,
31 instructions=[
32 "Search your knowledge before answering.",
33 "Include sources in your response.",
34 ],
35 markdown=True,
36)
37
38agent.print_response("What are Agents?", stream=True)

Usage

Set up your virtual environment

1uv venv --python 3.12
2source .venv/bin/activate
1uv venv --python 3.12
2.venv\Scripts\activate

Install dependencies

1uv pip install -U kern-ai anthropic cohere lancedb tantivy sqlalchemy

Export your API keys

1export ANTHROPIC_API_KEY=your_anthropic_api_key_here
2export CO_API_KEY=your_cohere_api_key_here

Run Agent

1python agentic_rag.py

Configuration Options

Different Rerankers

1# Cohere
2from kern.knowledge.reranker.cohere import CohereReranker
3reranker = CohereReranker(model="rerank-v3.5")
4
5# Add to vector database
6vector_db = LanceDb(
7 uri="tmp/lancedb",
8 table_name="docs",
9 search_type=SearchType.hybrid,
10 reranker=reranker,
11)

Adjusting Results

1knowledge = Knowledge(
2 vector_db=vector_db,
3 max_results=10, # Number of results to return after reranking
4)

Next Steps