5.9 KiB
Component Extension
Please read the Plugin Introduction Page first.
:::info Table of Contents toc :::
Plugins wrapped in subclasses of BasePlugin can only listen to predefined events, whereas component extensions can replace entire components, enabling more powerful functionality.
- Component extensions do not need to be wrapped in a subclass of
BasePluginand can be placed in any module within the plugin directory. - Extended components are not controlled by the plugin's on/off switch.
- Extended components are typically selected via options in the configuration file.
Extendable Components
To extend a component, create a new class that inherits from the component's base class, then use the corresponding decorator on the class, and configure the component to use this implementation based on the usage method.
Most components contain an ap: pkg.core.app.Application object, which can be used to interact with various parts of the entire program.
Most components support implementing the async def initialize(self) method for asynchronous initialization when the component is loaded.
The ap object includes manager objects for various configuration files, which can be used to access these configurations.
Command
Add a new command.
- Base Class:
pkg.command.operator.CommandOperator - Decorator:
pkg.command.operator.operator_class(name: str, help: str="", usage: str=None, alias: list[str]=[], privilege: int=1, parent_class: typing.Type[CommandOperator] = None) - Reference Implementation:
pkg.command.operators/ - Usage: After successful loading, execute the command
!cmdto view all commands and their help information.
Content Filter
Add a new content processor that determines whether to continue processing before and after handling a message.
- Base Class:
pkg.pipeline.cntfilter.filter.ContentFilter - Decorator:
pkg.pipeline.cntfilter.filter.filter_class(name: str) - Reference Implementation:
pkg.pipeline.cntfilter.filters/ - Usage: After successful loading, the
processmethod of the content filter will be called at the declared inspection stage for each filter implementation.
Long Message Handling Strategy
Add a new long message handling strategy. Examples include components that convert text to merged forwarded messages or text to images.
- Base Class:
pkg.pipeline.longtext.strategy.LongTextStrategy - Decorator:
pkg.pipeline.longtext.strategy.strategy_class(name: str) - Reference Implementation:
pkg.pipeline.longtext.strategies/ - Usage: Set the
strategyfield in thelong-text-strategysection ofdata/config/platform.jsonto the name of the newly added strategy.
Conversation Rate Limiting Algorithm
Add a new conversation rate limiting algorithm. The rate limiting algorithm implementation class methods are called when a conversation request enters and exits, allowing the implementation class to control waiting or dropping requests.
- Base Class:
pkg.pipeline.ratelimit.algo.RateLimitAlgo - Decorator:
pkg.pipeline.ratelimit.algo.algo_class(name: str) - Reference Implementation:
pkg.pipeline.ratelimit.algos/ - Usage: Set the
algofield in therate-limitsection ofdata/config/pipeline.jsonto the name of the newly added algorithm.
LLM Interface Requester
Add a new LLM interface requester, such as integrating the ChatGLM interface.
- Base Class:
pkg.provider.modelmgr.api.LLMAPIRequester - Decorator:
pkg.provider.modelmgr.api.api_requester_class(name: str) - Reference Implementation:
pkg.provider.modelmgr.apis/ - Usage: Add a model in
data/metadata/llm-models.jsonand set therequesterfield of the model to the name of the newly added requester. For details, refer to the metadata configuration section.
Prompt Loader
Add a new Prompt loader.
- Base Class:
pkg.provider.sysprompt.loader.PromptLoader - Decorator:
pkg.provider.sysprompt.loader.loader_class(name: str) - Reference Implementation:
pkg.provider.sysprompt.loaders/ - Usage: Set the
prompt-modefield indata/config/provider.jsonto the name of the newly added loader.
Message Platform Adapter
Add a new message platform adapter, such as integrating WhatsApp or Discord.
- Base Class:
pkg.platform.adapter.MessageSourceAdapter - Decorator:
pkg.platform.adapter.adapter_class(name: str) - Reference Implementation:
pkg.platform.adapters/ - Usage: The configuration information in the
platform-adapterssection ofdata/config/platform.jsonwill automatically look up the corresponding adapter implementation based on theadaptername during initialization and pass the configuration to the adapter for initialization. Message platform adapters are complex to implement, so it is recommended to refer to existing implementations.
Conversation History Message Truncator
Add a new conversation history message truncator that truncates historical messages before sending them to the model.
- Base Class:
pkg.pipeline.msgtrun.truncator.Truncator - Decorator:
pkg.pipeline.msgtrun.truncator.truncator_class(name: str) - Reference Implementation:
pkg.pipeline.msgtrun.truncators/ - Usage: Set the
methodfield in themsg-truncatesection ofdata/config/pipeline.jsonto the name of the newly added truncator.
Chat Request Runner
Add a new chat message runner. The default is local-agent, which provides basic Prompt composition, Agent orchestration, and multi-turn requests. If you need to integrate a knowledge base or local RAG, implement it here.
- Base Class:
pkg.provider.runner.RequesterRunner - Decorator:
pkg.provider.runner.runner_class(name: str) - Reference Implementation:
pkg.provider.runners/ - Usage: Set the
runnerfield in therunnersection ofdata/config/provider.jsonto the name of the newly added runner.
