mirror of
https://github.com/crewAIInc/crewAI.git
synced 2026-01-24 07:38:14 +00:00
Add comprehensive documentation for all tools
- Added documentation for file operation tools - Added documentation for search tools - Added documentation for web scraping tools - Added documentation for specialized tools (RAG, code interpreter) - Added documentation for API-based tools (SerpApi, Serply) Link to Devin run: https://app.devin.ai/sessions/d2f72a2dfb214659aeb3e9f67ed961f7 Co-Authored-By: Joe Moura <joao@crewai.com>
This commit is contained in:
217
docs/tools/directory-read-tool.mdx
Normal file
217
docs/tools/directory-read-tool.mdx
Normal file
@@ -0,0 +1,217 @@
|
||||
---
|
||||
title: Directory Read Tool
|
||||
description: A tool for recursively listing directory contents
|
||||
---
|
||||
|
||||
# Directory Read Tool
|
||||
|
||||
The Directory Read Tool provides functionality to recursively list all files within a directory. It supports both fixed and dynamic directory path modes, allowing you to specify the directory at initialization or runtime.
|
||||
|
||||
## Installation
|
||||
|
||||
```bash
|
||||
pip install 'crewai[tools]'
|
||||
```
|
||||
|
||||
## Usage
|
||||
|
||||
You can use the Directory Read Tool in two ways:
|
||||
|
||||
### 1. Fixed Directory Path
|
||||
|
||||
Initialize the tool with a specific directory path:
|
||||
|
||||
```python
|
||||
from crewai import Agent
|
||||
from crewai_tools import DirectoryReadTool
|
||||
|
||||
# Initialize with a fixed directory
|
||||
tool = DirectoryReadTool(directory="/path/to/your/directory")
|
||||
|
||||
# Create an agent with the tool
|
||||
agent = Agent(
|
||||
role='File System Analyst',
|
||||
goal='Analyze directory contents',
|
||||
backstory='I help analyze and organize file systems',
|
||||
tools=[tool]
|
||||
)
|
||||
|
||||
# Use in a task
|
||||
task = Task(
|
||||
description="List all files in the project directory",
|
||||
agent=agent
|
||||
)
|
||||
```
|
||||
|
||||
### 2. Dynamic Directory Path
|
||||
|
||||
Initialize the tool without a specific directory path to provide it at runtime:
|
||||
|
||||
```python
|
||||
from crewai import Agent
|
||||
from crewai_tools import DirectoryReadTool
|
||||
|
||||
# Initialize without a fixed directory
|
||||
tool = DirectoryReadTool()
|
||||
|
||||
# Create an agent with the tool
|
||||
agent = Agent(
|
||||
role='File System Explorer',
|
||||
goal='Explore different directories',
|
||||
backstory='I analyze various directory structures',
|
||||
tools=[tool]
|
||||
)
|
||||
|
||||
# Use in a task with dynamic directory path
|
||||
task = Task(
|
||||
description="List all files in the specified directory",
|
||||
agent=agent,
|
||||
context={
|
||||
"directory": "/path/to/explore"
|
||||
}
|
||||
)
|
||||
```
|
||||
|
||||
## Input Schema
|
||||
|
||||
### Fixed Directory Mode
|
||||
```python
|
||||
class FixedDirectoryReadToolSchema(BaseModel):
|
||||
pass # No additional parameters needed when directory is fixed
|
||||
```
|
||||
|
||||
### Dynamic Directory Mode
|
||||
```python
|
||||
class DirectoryReadToolSchema(BaseModel):
|
||||
directory: str # The path to the directory to list contents
|
||||
```
|
||||
|
||||
## Function Signatures
|
||||
|
||||
```python
|
||||
def __init__(self, directory: Optional[str] = None, **kwargs):
|
||||
"""
|
||||
Initialize the Directory Read Tool.
|
||||
|
||||
Args:
|
||||
directory (Optional[str]): Path to the directory (optional)
|
||||
**kwargs: Additional arguments passed to BaseTool
|
||||
"""
|
||||
|
||||
def _run(
|
||||
self,
|
||||
**kwargs: Any,
|
||||
) -> str:
|
||||
"""
|
||||
Execute the directory listing.
|
||||
|
||||
Args:
|
||||
**kwargs: Arguments including 'directory' for dynamic mode
|
||||
|
||||
Returns:
|
||||
str: A formatted string containing all file paths in the directory
|
||||
"""
|
||||
```
|
||||
|
||||
## Best Practices
|
||||
|
||||
1. **Path Handling**:
|
||||
- Use absolute paths to avoid path resolution issues
|
||||
- Handle trailing slashes appropriately
|
||||
- Verify directory existence before listing
|
||||
|
||||
2. **Performance Considerations**:
|
||||
- Be mindful of directory size when listing large directories
|
||||
- Consider implementing pagination for large directories
|
||||
- Handle symlinks appropriately
|
||||
|
||||
3. **Error Handling**:
|
||||
- Handle directory not found errors gracefully
|
||||
- Manage permission issues appropriately
|
||||
- Validate input parameters before processing
|
||||
|
||||
## Example Integration
|
||||
|
||||
Here's a complete example showing how to integrate the Directory Read Tool with CrewAI:
|
||||
|
||||
```python
|
||||
from crewai import Agent, Task, Crew
|
||||
from crewai_tools import DirectoryReadTool
|
||||
|
||||
# Initialize the tool
|
||||
dir_tool = DirectoryReadTool()
|
||||
|
||||
# Create an agent with the tool
|
||||
file_analyst = Agent(
|
||||
role='File System Analyst',
|
||||
goal='Analyze and report on directory structures',
|
||||
backstory='I am an expert at analyzing file system organization',
|
||||
tools=[dir_tool]
|
||||
)
|
||||
|
||||
# Create tasks
|
||||
analysis_task = Task(
|
||||
description="""
|
||||
Analyze the project directory structure:
|
||||
1. List all files recursively
|
||||
2. Identify key file types
|
||||
3. Report on directory organization
|
||||
|
||||
Provide a comprehensive analysis of the findings.
|
||||
""",
|
||||
agent=file_analyst,
|
||||
context={
|
||||
"directory": "/path/to/project"
|
||||
}
|
||||
)
|
||||
|
||||
# Create and run the crew
|
||||
crew = Crew(
|
||||
agents=[file_analyst],
|
||||
tasks=[analysis_task]
|
||||
)
|
||||
|
||||
result = crew.kickoff()
|
||||
```
|
||||
|
||||
## Error Handling
|
||||
|
||||
The tool handles various error scenarios:
|
||||
|
||||
1. **Directory Not Found**:
|
||||
```python
|
||||
try:
|
||||
tool = DirectoryReadTool(directory="/nonexistent/path")
|
||||
except FileNotFoundError:
|
||||
print("Directory not found. Please verify the path.")
|
||||
```
|
||||
|
||||
2. **Permission Issues**:
|
||||
```python
|
||||
try:
|
||||
tool = DirectoryReadTool(directory="/restricted/path")
|
||||
except PermissionError:
|
||||
print("Insufficient permissions to access the directory.")
|
||||
```
|
||||
|
||||
3. **Invalid Path**:
|
||||
```python
|
||||
try:
|
||||
result = tool._run(directory="invalid/path")
|
||||
except ValueError:
|
||||
print("Invalid directory path provided.")
|
||||
```
|
||||
|
||||
## Output Format
|
||||
|
||||
The tool returns a formatted string containing all file paths in the directory:
|
||||
|
||||
```
|
||||
File paths:
|
||||
- /path/to/directory/file1.txt
|
||||
- /path/to/directory/subdirectory/file2.txt
|
||||
- /path/to/directory/subdirectory/file3.py
|
||||
```
|
||||
|
||||
|
||||
Each file path is listed on a new line with a hyphen prefix, making it easy to parse and read the output.
|
||||
Reference in New Issue
Block a user