mirror of
https://github.com/crewAIInc/crewAI.git
synced 2026-01-08 23:58:34 +00:00
84 lines
3.2 KiB
Markdown
84 lines
3.2 KiB
Markdown
---
|
||
title: crewAI Tools
|
||
description: Understanding and leveraging tools within the crewAI framework.
|
||
---
|
||
|
||
## What is a Tool?
|
||
!!! note "Definition"
|
||
A tool in CrewAI, is a skill, something Agents can use perform tasks, right now those can be tools from the [crewAI Toolkit](https://github.com/joaomdmoura/crewai-tools) and [LangChain Tools](https://python.langchain.com/docs/integrations/tools), those are basically functions that an agent can utilize for various actions, from simple searches to complex interactions with external systems.
|
||
|
||
## Key Characteristics of Tools
|
||
|
||
- **Utility**: Designed for specific tasks such as web searching, data analysis, or content generation.
|
||
- **Integration**: Enhance agent capabilities by integrating tools directly into their workflow.
|
||
- **Customizability**: Offers the flexibility to develop custom tools or use existing ones from LangChain's ecosystem.
|
||
|
||
## Creating your own Tools
|
||
!!! example "Custom Tool Creation"
|
||
Developers can craft custom tools tailored for their agent’s needs or utilize pre-built options. Here’s how to create one:
|
||
|
||
```python
|
||
import json
|
||
import requests
|
||
from crewai import Agent
|
||
from langchain.tools import tool
|
||
from unstructured.partition.html import partition_html
|
||
|
||
class BrowserTools():
|
||
|
||
# Anotate the fuction with the tool decorator from LangChain
|
||
@tool("Scrape website content")
|
||
def scrape_website(website):
|
||
# Write logic for the tool.
|
||
# In this case a function to scrape website content
|
||
url = f"https://chrome.browserless.io/content?token={config('BROWSERLESS_API_KEY')}"
|
||
payload = json.dumps({"url": website})
|
||
headers = {'cache-control': 'no-cache', 'content-type': 'application/json'}
|
||
response = requests.request("POST", url, headers=headers, data=payload)
|
||
elements = partition_html(text=response.text)
|
||
content = "\n\n".join([str(el) for el in elements])
|
||
return content[:5000]
|
||
|
||
# Assign the scraping tool to an agent
|
||
agent = Agent(
|
||
role='Research Analyst',
|
||
goal='Provide up-to-date market analysis',
|
||
backstory='An expert analyst with a keen eye for market trends.',
|
||
tools=[BrowserTools().scrape_website]
|
||
)
|
||
```
|
||
|
||
## Using LangChain Tools
|
||
!!! info "LangChain Integration"
|
||
CrewAI seamlessly integrates with LangChain’s comprehensive toolkit. Assigning an existing tool to an agent is straightforward:
|
||
|
||
```python
|
||
from crewai import Agent
|
||
from langchain.agents import Tool
|
||
from langchain.utilities import GoogleSerperAPIWrapper
|
||
import os
|
||
|
||
# Setup API keys
|
||
os.environ["OPENAI_API_KEY"] = "Your Key"
|
||
os.environ["SERPER_API_KEY"] = "Your Key"
|
||
|
||
search = GoogleSerperAPIWrapper()
|
||
|
||
# Create and assign the search tool to an agent
|
||
serper_tool = Tool(
|
||
name="Intermediate Answer",
|
||
func=search.run,
|
||
description="Useful for search-based queries",
|
||
)
|
||
|
||
agent = Agent(
|
||
role='Research Analyst',
|
||
goal='Provide up-to-date market analysis',
|
||
backstory='An expert analyst with a keen eye for market trends.',
|
||
tools=[serper_tool]
|
||
)
|
||
```
|
||
|
||
## Conclusion
|
||
Tools are crucial for extending the capabilities of CrewAI agents, allowing them to undertake a diverse array of tasks and collaborate efficiently. When building your AI solutions with CrewAI, consider both custom and existing tools to empower your agents and foster a dynamic AI ecosystem.
|