Tools
Tools are the building blocks of the Arklex framework, providing functionality for various operations such as intent detection, slot filling, and task execution.
Overview
Tools in the Arklex framework are designed to be modular and reusable components that can be combined to create complex workflows. Each tool has a well-defined interface for input and output. Powered through the slot filling mechanism, the framework handles the translation between MessageState and the specified parameter and return values, allowing smoother development of custom methods and integration of API.
Tool Structure
Each tool in the Arklex framework follows a standard structure:
from arklex.env.tools.tools import BaseTool
from arklex.utils.graph_state import MessageState
from arklex.utils.slot import Slot
class MyTool(BaseTool):
def __init__(self):
super().__init__(
name="my_tool",
description="Description of my tool"
)
def _get_required_slots(self) -> List[Slot]:
return [
Slot(
name="param1",
description="Description of parameter 1",
required=True,
type="string"
),
Slot(
name="param2",
description="Description of parameter 2",
required=False,
type="integer"
)
]
def _execute_impl(self, message_state: MessageState) -> Any:
# Tool implementation
return result
Slot Definition
Slots are used to define the parameters that a tool requires. Each slot has the following attributes:
name
: The name of the parametertype
: The type of the parameter (string, integer, float, boolean)required
: Whether the parameter is requiredenum
: The candidate values for the slot. This is used to aid the slot filler to check if the extracted value is valid.description
: A string describing the parameter. This will be used to aid the extraction component of slot filling. Adding examples often help the slot filling.
Tool Registration
Tools can be registered using the @tool
decorator:
from arklex.env.tools.tools import tool
@tool(name="my_tool", description="Description of my tool")
def my_tool(param1: str, param2: int = 0) -> str:
# Tool implementation
return result
Tool Execution
Tools are executed through the environment:
from arklex.env.env import Environment
# Initialize environment
env = Environment(workers=[], tools=[my_tool])
# Execute tool
result = env.execute_tool("my_tool", message_state)
Best Practices
-
Tool Design
- Keep tools focused and single-purpose
- Use clear parameter names
- Provide detailed descriptions
- Handle errors gracefully
-
Slot Definition
- Use clear slot names
- Provide detailed descriptions
- Include examples when helpful
- Define appropriate types
-
Error Handling
- Validate input parameters
- Handle edge cases
- Provide clear error messages
- Log errors appropriately
-
Testing
- Write unit tests
- Test edge cases
- Test error handling
- Test integration
Integration
Tools integrate with:
- Environment
- Message Processing
- Slot Filling
- State Management
- Logging System