Quick Start
1
Declare the retriever and reranker
2
Run it
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 inAgentsGenerator.__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 thepraisonai knowledge query sub-command:
Best Practices
Start with basic, upgrade when recall is low
Start with basic, upgrade when recall is low
Use
basic first — it needs no LLM calls or extra installs. Move to fusion only when ambiguous or paraphrased questions miss the right passage.Retrieve wide, rerank narrow
Retrieve wide, rerank narrow
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.Match the reranker to your cost budget
Match the reranker to your cost budget
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.No Python setup needed from YAML
No Python setup needed from YAML
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.Safe in multi-agent setups
Safe in multi-agent setups
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.
Related
Retrieval from Python
Configure retrieval from Python
Adapter registry
How the adapter registry works

