Tools#

For more detailed usage information, please refer to our cookbook: Tools Cookbook

1. Concept#

Tools serve as interfaces that allow LLMs and Agents to interact with the world. A tool is essentially a function that has a name, a description, input parameters, and an output type. In this section, we will introduce the tools currently supported by CAMEL and explain how to define your own tools and Toolkits.

Tools: Tools are akin to OpenAI Functions and can be easily converted to that format. In CAMEL, we offer a variety of commonly used tools that you can utilize directly. While built-in tools can be quite useful, it’s highly likely that you’ll need to define your own tools. This guide for detailed instructions on how to create custom tools.

Toolkits: Toolkits are collections of tools that are designed to work well together.

2. Get Started#

To enhance your agents’ capabilities with CAMEL tools, start by installing our additional tools package:

pip install 'camel-ai[tools]'

In CAMEL, a tool is an FunctionTool that LLMs can call.

2.1 How to Define Your Own Tool?#

Developers can create custom tools tailored to their agent’s specific needs with ease. Here’s how you can define and use a custom tool:

Example: Adding Two Numbers

First, define your function and wrap it using the FunctionTool

from camel.toolkits import FunctionTool

def add(a: int, b: int) -> int:
    r"""Adds two numbers.

    Args:
        a (int): The first number to be added.
        b (int): The second number to be added.

    Returns:
        integer: The sum of the two numbers.
    """
    return a + b

# Wrap the function with FunctionTool
add_tool = FunctionTool(add)

Accessing Tool Properties

Once your tool is defined, you can inspect its properties using built-in methods:

Retrieve the function’s name:

print(add_tool.get_function_name())
>>> add

Get the description of what the function does:

print(add_tool.get_function_description())
>>> Adds two numbers.

Fetch the schema representation for OpenAI functions:

print(add_tool.get_openai_function_schema())
>>> 
{'name': 'add',
 'description': 'Adds two numbers.',
 'parameters': {'properties': {'a': {'type': 'integer',
    'description': 'The first number to be added.'},
   'b': {'type': 'integer', 'description': 'The second number to be added.'}},
  'required': ['a', 'b'],
  'type': 'object'}}

Retrieve the tool schema, compatible with OpenAI’s structure:

print(add_tool.get_openai_tool_schema())
>>> 
{'type': 'function',
 'function': {'name': 'add',
  'description': 'Adds two numbers.',
  'parameters': {'properties': {'a': {'type': 'integer',
     'description': 'The first number to be added.'},
    'b': {'type': 'integer', 'description': 'The second number to be added.'}},
   'required': ['a', 'b'],
   'type': 'object'}}}

2.2 Toolkits#

Toolkits are collections of tools that are designed to be used together for specific tasks. All Toolkits expose a get_tools method which returns a list of tools. You can therefore do:

from camel.toolkits import SearchToolkit

# Initialize a toolkit
toolkit = SearchToolkit()

# Get list of tools
tools = toolkit.get_tools()

To utilize specific tools from the toolkits, you can implement code like the following:

from camel.toolkits import SearchToolkit

google_tool = FunctionTool(SearchToolkit().search_google)
wiki_tool = FunctionTool(SearchToolkit().search_wiki)

2.3 Passing Tools to ChatAgent#

Enhance the functionality of a ChatAgent by passing custom tools during initialization. Here’s how you can do it:

from camel.agents import ChatAgent

# Initialize a ChatAgent with your custom tools
tool_agent = ChatAgent(
    tools=tools,
)

# Interact with the agent
response = tool_agent.step("A query related to the tool you added")

Here is a list of the available CAMEL tools and their descriptions:

Toolkit

Description

CodeExecutionToolkit

A toolkit for code execution which can run code by “internal_python”, “jupyter” or “docker”.

GithubToolkit

A gitHub toolkit for interacting with GitHub repositories: retrieving open issues, retrieving specific issues, and creating pull requests.

GoogleMapsToolkit

A GoogleMaps toolkit for validating addresses, retrieving elevation, and fetching timezone information using the Google Maps API.

MathToolkit

A simple math toolkit for basic mathematical operations such as addition, subtraction, and multiplication.

SearchToolkit

A search toolkit for for searching information on the web using search engines like Google, DuckDuckGo, Wikipedia and Wolfram Alpha.

SlackToolkit

A Slack iteration toolkit for creating a new channel, joining an existing channel, leaving a channel.

TwitterToolkit

A Twitter operation toolkit for creating a tweet, deleting a tweet, and getting the authenticated user’s profile information.

WeatherToolkit

A weather data toolkit which provides methods for fetching weather data for a given city using the OpenWeatherMap API.

RetrievalToolkit

A information retrieval toolkit for retrieving information from a local vector storage system based on a specified query.

ArxivToolkit

A toolkit for interacting with the arXiv API to search and download academic papers.

AskNewsToolkit

A class representing a toolkit for interacting with the AskNews API.

DalleToolkit

A class representing a toolkit for image generation using OpenAI’s DALL-E model.

GoogleScholarToolkit

A toolkit for retrieving information about authors and their publications from Google Scholar.

LinkedInToolkit

A class representing a toolkit for LinkedIn operations.

RedditToolkit

A class representing a toolkit for Reddit operations.

WhatsAppToolkit

A class representing a toolkit for WhatsApp operations.

3. Conclusion#

Tools are essential for extending the capabilities of CAMEL agents, empowering them to perform a wide range of tasks and collaborate efficiently.