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 an agent such as 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_action(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.5.tar.gz (11.0 kB view details)

Uploaded Source

Built Distribution

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

Uploaded Python 3

File details

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

File metadata

  • Download URL: agent_tool-0.1.5.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.5.tar.gz
Algorithm Hash digest
SHA256 61b501754b8c035b91fc4eb35f0e60c4a763b9840a4c11443f589b577a56297c
MD5 17ecb43d81e76a945322e6b87220dc68
BLAKE2b-256 f96d59ff090b2ef425cd18c0e812fc70c4b714378937341c8da4d9e9facba726

See more details on using hashes here.

File details

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

File metadata

  • Download URL: agent_tool-0.1.5-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.5-py3-none-any.whl
Algorithm Hash digest
SHA256 5ca3829f2b7354ea07c182a7c2ce4ace9a670f3906cc719b68c5e8a930d9c566
MD5 ca46949cac0d4d7cae662a77d78dc19c
BLAKE2b-256 c1a52077458416655d068ab8497cf58fefedbee2f81493d6ff4fc84168d08ae9

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