Agentic RAG plugin that exposes knowledge base retrieval as a Tool, allowing the Agent to autonomously decide when and what to search.
AgenticRAG
AgenticRAG exposes the knowledge bases configured for the current pipeline as an LLM Tool, so an agent can inspect available KBs and retrieve relevant chunks on demand.
What It Does
- Provides a single tool,
query_knowledge - Supports two actions:
list: list knowledge bases available to the current pipelinequery: retrieve relevant documents from one or more selected knowledge bases
- Returns retrieval results as JSON so the agent can continue reasoning over them
Overall Design
AgenticRAG is intentionally not a new RAG backend. It is a control-layer plugin that changes who decides when retrieval should happen.
Instead of the runner always injecting knowledge automatically before the model responds, AgenticRAG shifts retrieval into the agent loop:
- the model first decides whether retrieval is needed
- the model can inspect available knowledge bases
- the model can choose one KB or query several in parallel
- retrieval only happens when the model explicitly asks for it
This design exists to solve a specific problem: naive always-on retrieval is simple, but it also introduces noise, wasted context, and irrelevant chunks for many turns.
Design
This plugin is intentionally thin. It does not implement a new RAG backend. Instead, it wraps LangBot's built-in query-scoped knowledge retrieval APIs:
list_pipeline_knowledge_bases()for enumerating KBs visible to the current queryretrieve_knowledge()for retrieving top-k entries from one or more selected KBs
The query_id is injected by the runtime when the tool is called, then stored inside QueryBasedAPIProxy. Because of that, the tool code only needs to pass business parameters such as kb_id or kb_ids, query_text, and top_k.
Although the underlying runtime can support metadata filters, this plugin does not expose raw filters to the agent in the current agentic tool flow. Different knowledge engines and vector backends may use different metadata fields, value formats, and filter semantics, and the agent currently has no reliable schema source for those fields.
Future versions may expose metadata filtering after the ecosystem has a more unified way to describe filterable fields and operators for each knowledge base.
How It Works
An AgenticRAG request has four main stages:
1. Disable naive retrieval
During PromptPreProcessing, the plugin checks whether the active LLM supports tool calling.
- if tool calling is supported, it clears the runner's
_knowledge_base_uuidsso the normal naive pre-retrieval step is skipped - if tool calling is not supported, it keeps naive RAG enabled as a fallback so KB retrieval does not disappear completely
2. Inject retrieval policy into the system prompt
At the same time, AgenticRAG injects an extra system prompt telling the model that:
- configured KBs are the primary source of truth for in-scope facts
- there is no automatic retrieval fallback
- for factual, policy, procedural, product, and domain-specific questions, it should prefer
query_knowledge
This matters because tool descriptions alone are often not strong enough to reliably change model behavior.
3. Let the model inspect and query KBs
The agent can then use query_knowledge in two steps:
action="list"to see which KBs are availableaction="query"to search one KB or several KBs in parallel
For single-KB retrieval, the preferred parameter is kb_id.
For multi-KB retrieval, use kb_ids.
4. Return retrieval results as structured JSON
The tool merges results, annotates them with knowledge_base_id, and returns JSON so the model can continue reasoning, tool use, or final answering.
Retrieval Behavior
When AgenticRAG is enabled, it disables the runner's automatic naive RAG pre-processing for the current pipeline.
- Retrieval is no longer performed automatically before the model answers
- Whether to query a knowledge base is now a deliberate model decision through
query_knowledge - If the model does not call the tool, no KB content will be injected into context
There is one important exception:
- if the active LLM does not support tool calling, AgenticRAG keeps naive RAG enabled instead of disabling it
This reduces unconditional retrieval noise, but it also means prompting matters. The current implementation therefore uses both:
- a tool prompt on
query_knowledge - an injected system prompt during
PromptPreProcessing
Together, they bias the model toward retrieval for factual, policy, procedural, product, and other domain-specific questions.
Why It Is Designed This Way
This plugin is optimized for a specific tradeoff:
- keep LangBot's existing KB and retrieval infrastructure
- remove unnecessary always-on retrieval
- let the model make explicit retrieval decisions
- still keep retrieval behavior constrained to the current pipeline
Compared with naive RAG, this design gives you:
- less irrelevant context on turns that do not need KB access
- better control over which KB is queried
- room for iterative retrieval, re-querying, and multi-KB reasoning
The downside is also real: if the model never calls the tool, no KB content appears. That is why the plugin explicitly adds retrieval-oriented prompting, instead of assuming the model will naturally choose retrieval often enough.
This is also why the plugin now detects tool-call capability before disabling naive RAG. Without that guard, enabling AgenticRAG on a non-tool-capable model would accidentally break KB retrieval entirely.
Security Boundary
This tool is scoped to the current pipeline.
- LangBot runtime also validates that the requested
kb_idbelongs to the current pipeline before executing retrieval
This means prompt injection alone should not allow the agent to query arbitrary KBs outside the pipeline configuration.
How To Use
- Install and enable the plugin.
- Configure one or more knowledge bases in the current pipeline's local agent settings.
- Let the agent call
query_knowledge:- Start with
action="list"to inspect available KBs - Then call
action="query"withkb_idfor one KB, orkb_idsfor multiple KBs queried in parallel - Provide
query_text, and optionaltop_kfor the merged result count
- Start with
Parameters
For action="query", the tool currently accepts:
kb_id: target knowledge base UUID for single-KB retrieval; preferred when querying exactly one KBkb_ids: optional array of target knowledge base UUIDs for parallel multi-KB retrieval; use only when querying multiple KBsquery_text: retrieval query texttop_k: optional positive integer, default5, applied to the merged result set
If one KB query fails while others succeed, the tool returns a JSON object with results and failed_kbs so the agent can continue with partial results.
Typical Flow
- Agent lists available KBs.
- Agent selects one KB or a small set of KBs based on name and description.
- Agent submits a focused retrieval query.
- Agent uses the returned chunks to answer or continue tool use.
Prompting Intent
The prompting layer is designed to communicate two things to the model:
- these knowledge bases are the authoritative source for in-scope information
- no fallback automatic retrieval exists once AgenticRAG is enabled
Without that guidance, an LLM may over-trust its pretrained knowledge and under-use retrieval. The current implementation therefore reinforces the same policy at both the system-prompt layer and the tool-prompt layer.
Logging
The plugin now emits logs during tool execution so you can observe how the LLM is using AgenticRAG in practice.
You will see logs for:
- tool call start, including
query_id,action, and parameter keys - KB listing start/end and how many KBs are visible
- retrieval start, including selected KBs,
top_k, and a shortenedquery_textpreview - per-KB retrieval start/success/failure
- final retrieval summary, including merged result count, failed KB count, and returned result count
Typical log messages look like:
[AgenticRAG] tool call started: query_id=123 action=query params_keys=['action', 'kb_id', 'query_text', 'top_k']
[AgenticRAG] retrieval requested: query_id=123 kb_ids=['kb-1'] kb_count=1 top_k=5 query='what is the refund policy'
[AgenticRAG] querying knowledge base: query_id=123 kb_id=kb-1 top_k=5
[AgenticRAG] knowledge base query succeeded: query_id=123 kb_id=kb-1 result_count=4
[AgenticRAG] retrieval completed: query_id=123 merged_results=4 failed_kbs=0
Use AgenticRAG in Feishu/Lark bots, DingTalk bots, WeCom bots, WeChat bots, QQ bots, Slack bots, Discord bots, Telegram bots, LINE Bots, and Matrix Bots.
Host your bot on LangBot Cloud and connect this extension to the collaboration platforms your team already uses.