Skip to main content

A protocol for AI agent tools

Project description

Agent Tools

A common protocol for AI agent tools

Installation

pip install agent-tool

Usage

Let's define a simplified Selenium web browser tool

from agent_tools import Tool, action, observation
from selenium import webdriver


class SeleniumBrowser(Tool):
    """Selenium browser as a tool"""

    def __init__(self, headless: bool = True) -> None:
        super().__init__()
        options = webdriver.ChromeOptions()
        if headless:
            options.add_argument("--headless")
        self.driver = webdriver.Chrome(options=options)

    @action
    def open_url(self, url: str) -> None:
        """Open a URL in the browser

        Args:
            url (str): URL to open
        """
        self.driver.get(url)

    @action
    def click_element(self, selector: str, selector_type: str = "css_selector") -> None:
        """Click an element identified by a CSS selector

        Args:
            selector (str): CSS selector
            selector_type (str, optional): Selector type. Defaults to "css_selector".
        """
        element = self.driver.find_element(selector_type, selector)
        element.click()

    @observation
    def get_html(self) -> str:
        """Get the entire HTML of the current page.

        Returns:
            str: Page HTML
        """
        return self.driver.page_source

    def close(self) -> None:
        """Close the tool"""
        self.driver.quit()

We mark the functions to be made available to the agent as @action if they mutate the environment, and @observation if they are read only.

Now we can use this tool with openai function calling

from openai import OpenAI

client = OpenAI()

browser = SeleniumBrowser()
schemas = browser.json_schema()

messages = []
messages.append({"role": "system", "content": "Don't make assumptions about what values to plug into functions. Ask for clarification if a user request is ambiguous."})
messages.append({"role": "user", "content": "Get the HTML for the front page of wikipedia"})

headers = {
    "Content-Type": "application/json",
    "Authorization": "Bearer " + openai.api_key,
}
json_data = {"model": model, "messages": messages, "tools": schemas}
response = requests.post(
    "https://api.openai.com/v1/chat/completions",
    headers=headers,
    json=json_data,
)

assistant_message = response.json()["choices"][0]["message"]
messages.append(assistant_message)
assistant_message
{
  "role": "assistant",
  "tool_calls": [
    {
      "id": "call_RYXaDjxpUCfWmpXU7BZEYVqS",
      "type": "function",
      "function": {
        "name": "open_url",
        "arguments": "{\n  \"url\": \"https://wikipedia.org\"}"
      }
    },
    {
      "id": "call_TJIWlknwdoinfWEMFNss",
      "type": "function",
      "function": {
        "name": "get_html",
        "arguments": ""
      }
    }
  ]
}

Then to use this action

for tool in assistant_message["tool_calls"]:
    action = browser.find(tool["function"]["name"])
    args = json.loads(tool["function"]["arguments"])
    resp = browser.use(action, **args)

Tools can be used locally or spun up on a server and used remotely (In progress)

Share (In progress)

Register a tool with the AgentSea hub so others can find and use it.

pip install agentsea

Create a repo to publish

agentsea create tool

Add your tool to the tool.py in the repo, fill in the README.md and add your dependencies using Poetry

Publish to the hub

agentsea publish .

Roadmap

  • Integrate with langchain, babyagi, autogpt, etc

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

agent_tool-0.1.1.tar.gz (11.0 kB view details)

Uploaded Source

Built Distribution

agent_tool-0.1.1-py3-none-any.whl (16.9 kB view details)

Uploaded Python 3

File details

Details for the file agent_tool-0.1.1.tar.gz.

File metadata

  • Download URL: agent_tool-0.1.1.tar.gz
  • Upload date:
  • Size: 11.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.5.1 CPython/3.10.1 Darwin/22.6.0

File hashes

Hashes for agent_tool-0.1.1.tar.gz
Algorithm Hash digest
SHA256 97db2ed56b289ac0358e04c703b984a4026d0a1ef51f26caee3708495cec87e1
MD5 789d0cc7cfe66389c8a5f9af2ace8c99
BLAKE2b-256 684a04e141fbde819c44cadbf3c7a2feaa9bc72aa8fc42333f1cb2f85d2df4b6

See more details on using hashes here.

File details

Details for the file agent_tool-0.1.1-py3-none-any.whl.

File metadata

  • Download URL: agent_tool-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 16.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.5.1 CPython/3.10.1 Darwin/22.6.0

File hashes

Hashes for agent_tool-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 0974475ba4d13751584e8a31b97f2d60a2c9db4feab06ff097987433d9d0a698
MD5 aa35d72c843b2785d03ec0fa07a8d6cb
BLAKE2b-256 58c76ac4c37f99b0c2da0cc43d75ebf5da0db6740578022c69a0821695e70a14

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page