Skip to main content
Declare a retriever and reranker by name in your agent YAML and PraisonAI wires them into the knowledge base for you.

Quick Start

1

Declare the retriever and reranker

2

Run it

No Python setup. All four launch surfaces — praisonai <agents.yaml>, praisonai serve, praisonai eval, and Python (praisonai.run / praisonai.arun) — wire the built-in retrievers, readers and rerankers before the agent starts, so retriever: fusion (or any built-in name) resolves identically on every surface (PR #5322).

How it wires up

The registration is single-sourced in AgentsGenerator.__init__, so every launch path fires it once before the agent starts — not just the Python entry point. The call is idempotent and thread-safe — it runs once per process even under startup races. It is also register-only-if-absent: a custom adapter you already registered under a built-in name (e.g. a multi-tenant host’s own fusion) is preserved, never overwritten.

Retriever choices

Reranker choices


Choosing a retriever

Choosing a reranker


From the CLI

Same names, one-off from the praisonai knowledge query sub-command:
See Knowledge CLI for the full flag reference.

Best Practices

Use basic first — it needs no LLM calls or extra installs. Move to fusion only when ambiguous or paraphrased questions miss the right passage.
Set retrieval_k higher than the number of passages you actually want, then let the reranker trim to the best few. A common pairing is retrieval_k: 20 with an llm reranker returning the top 5.
cross_encoder runs locally with no API cost; llm is highest quality but bills per candidate; cohere is a hosted API. Pick based on whether cost, quality, or zero-dependency matters most.
The generator auto-wires the built-in adapters from AgentsGenerator.__init__, so a name like retriever: fusion resolves without any register_default_adapters() call — on every launch surface (praisonai <file.yaml>, praisonai serve, praisonai eval, and Python run/arun), not just the Python entry point (PR #5322). You only call it yourself when using retriever/reranker classes directly from your own Python code.
The retriever and reranker registries are thread-safe. If you’re running many agents in parallel (native threads, asyncio, or a worker pool), they all share the same registry safely — no external locks needed, and no duplicate singletons on startup races. Since PraisonAI #5197.

Retrieval from Python

Configure retrieval from Python

Adapter registry

How the adapter registry works