- Using agency-swarm’s
BaseTool
class. - Using openai’s
@function_tool
decorator with async functions.
- BaseTool
- FunctionTool
In Agency Swarm’s approach, tools are Python classes that inherit from
BaseTool
. They are defined using Pydantic, a data validation library. Each BaseTool must implement the run
method, which is the main method that will be called when the tool is invoked by an agent.Step-by-step Guide
To create a custom tool, typically you need to follow these steps:1
Add Import Statements
On top of your tool file, import the necessary modules and classes.
2
Define the Tool Class and Docstring
Create a new class that inherits from
BaseTool
. Write a clear docstring describing the tool’s purpose. This docstring is crucial as it helps agents understand how to use the tool.3
Define Input Fields
Use Pydantic fields to define the inputs your tool will accept.
Custom Validation Logic (Optional)
Custom Validation Logic (Optional)
You can use Pydantic’s validators to verify the inputs. This can be extremely effective to avoid hallucinations or other errors in production.
4
Implement the run Method
Add the functionality that will be executed when the tool is called.The
run
method should return a string, which is the tool’s output that the agent will see and use in its response.5
Test the Tool Independently
Test the tool independently to ensure it behaves as expected. We recommend adding a
if __name__ == "__main__":
block at the end of the tool file:6
Add the Tool to an Agent
After your tool works as expected, simply add it to an agent’s list of
tools
.Using tools folder
Using tools folder
Alternatively, you can simply place the tool file in the
tools_folder
directory and it will be automatically added to the agent.Each file in the
tools_folder
should contain a class that is named exactly the same as the file name. For example, Calculator.py
should contain a Calculator
class.Full Code Example
Below is the full code example for a calculator tool above.Next Steps
- Checkout Best Practices & Tips
- Learn why PyDantic is all you need