mirror of
https://github.com/crewAIInc/crewAI.git
synced 2026-01-10 16:48:30 +00:00
- 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>
225 lines
4.6 KiB
Plaintext
225 lines
4.6 KiB
Plaintext
---
|
|
title: JSONSearchTool
|
|
description: A tool for semantic search within JSON files using RAG capabilities
|
|
icon: braces
|
|
---
|
|
|
|
## JSONSearchTool
|
|
|
|
The JSONSearchTool enables semantic search capabilities for JSON files using Retrieval-Augmented Generation (RAG). It supports both fixed and dynamic file path modes, allowing flexible usage patterns.
|
|
|
|
## Installation
|
|
|
|
```bash
|
|
pip install 'crewai[tools]'
|
|
```
|
|
|
|
## Usage Example
|
|
|
|
```python
|
|
from crewai import Agent
|
|
from crewai_tools import JSONSearchTool
|
|
|
|
# Method 1: Fixed path (specified at initialization)
|
|
fixed_tool = JSONSearchTool(
|
|
json_path="path/to/data.json"
|
|
)
|
|
|
|
# Method 2: Dynamic path (specified at runtime)
|
|
dynamic_tool = JSONSearchTool()
|
|
|
|
# Create an agent with the tool
|
|
researcher = Agent(
|
|
role='JSON Data Researcher',
|
|
goal='Search and analyze JSON data',
|
|
backstory='Expert at finding relevant information in JSON files.',
|
|
tools=[fixed_tool], # or [dynamic_tool]
|
|
verbose=True
|
|
)
|
|
```
|
|
|
|
## Input Schema
|
|
|
|
### Fixed Path Mode
|
|
```python
|
|
class FixedJSONSearchToolSchema(BaseModel):
|
|
search_query: str = Field(
|
|
description="Mandatory search query you want to use to search the JSON's content"
|
|
)
|
|
```
|
|
|
|
### Dynamic Path Mode
|
|
```python
|
|
class JSONSearchToolSchema(BaseModel):
|
|
json_path: str = Field(
|
|
description="Mandatory json path you want to search"
|
|
)
|
|
search_query: str = Field(
|
|
description="Mandatory search query you want to use to search the JSON's content"
|
|
)
|
|
```
|
|
|
|
## Function Signature
|
|
|
|
```python
|
|
def __init__(
|
|
self,
|
|
json_path: Optional[str] = None,
|
|
**kwargs
|
|
):
|
|
"""
|
|
Initialize the JSON search tool.
|
|
|
|
Args:
|
|
json_path (Optional[str]): Path to JSON file (optional for dynamic mode)
|
|
**kwargs: Additional arguments for RAG tool configuration
|
|
"""
|
|
|
|
def _run(
|
|
self,
|
|
search_query: str,
|
|
**kwargs: Any
|
|
) -> str:
|
|
"""
|
|
Execute semantic search on JSON contents.
|
|
|
|
Args:
|
|
search_query (str): Query to search in the JSON
|
|
**kwargs: Additional arguments
|
|
|
|
Returns:
|
|
str: Relevant content from the JSON matching the query
|
|
"""
|
|
```
|
|
|
|
## Best Practices
|
|
|
|
1. File Handling:
|
|
- Use absolute file paths
|
|
- Verify file existence
|
|
- Handle large JSON files
|
|
- Monitor memory usage
|
|
|
|
2. Query Optimization:
|
|
- Structure queries clearly
|
|
- Consider JSON structure
|
|
- Handle nested data
|
|
- Monitor performance
|
|
|
|
3. Error Handling:
|
|
- Check file access
|
|
- Validate JSON format
|
|
- Handle malformed JSON
|
|
- Log issues
|
|
|
|
4. Mode Selection:
|
|
- Choose fixed mode for static files
|
|
- Use dynamic mode for runtime selection
|
|
- Consider caching
|
|
- Manage file lifecycle
|
|
|
|
## Integration Example
|
|
|
|
```python
|
|
from crewai import Agent, Task, Crew
|
|
from crewai_tools import JSONSearchTool
|
|
|
|
# Initialize tool
|
|
json_tool = JSONSearchTool(
|
|
json_path="data/config.json"
|
|
)
|
|
|
|
# Create agent
|
|
researcher = Agent(
|
|
role='JSON Data Analyst',
|
|
goal='Extract insights from JSON configuration',
|
|
backstory='Expert at analyzing JSON data structures.',
|
|
tools=[json_tool]
|
|
)
|
|
|
|
# Define task
|
|
analysis_task = Task(
|
|
description="""Find all configuration settings
|
|
related to security.""",
|
|
agent=researcher
|
|
)
|
|
|
|
# Create crew
|
|
crew = Crew(
|
|
agents=[researcher],
|
|
tasks=[analysis_task]
|
|
)
|
|
|
|
# Execute
|
|
result = crew.kickoff()
|
|
```
|
|
|
|
## Advanced Usage
|
|
|
|
### Multiple File Analysis
|
|
```python
|
|
# Create tools for different JSON files
|
|
config_tool = JSONSearchTool(
|
|
json_path="config/settings.json"
|
|
)
|
|
|
|
data_tool = JSONSearchTool(
|
|
json_path="data/records.json"
|
|
)
|
|
|
|
# Create agent with multiple tools
|
|
analyst = Agent(
|
|
role='JSON Data Analyst',
|
|
goal='Cross-reference configuration and data',
|
|
tools=[config_tool, data_tool]
|
|
)
|
|
```
|
|
|
|
### Dynamic File Loading
|
|
```python
|
|
# Initialize dynamic tool
|
|
dynamic_tool = JSONSearchTool()
|
|
|
|
# Use with different JSON files
|
|
result1 = dynamic_tool.run(
|
|
json_path="file1.json",
|
|
search_query="security settings"
|
|
)
|
|
|
|
result2 = dynamic_tool.run(
|
|
json_path="file2.json",
|
|
search_query="user preferences"
|
|
)
|
|
```
|
|
|
|
### Error Handling Example
|
|
```python
|
|
try:
|
|
json_tool = JSONSearchTool(
|
|
json_path="config/settings.json"
|
|
)
|
|
results = json_tool.run(
|
|
search_query="encryption settings"
|
|
)
|
|
print(results)
|
|
except FileNotFoundError as e:
|
|
print(f"JSON file not found: {str(e)}")
|
|
except ValueError as e:
|
|
print(f"Invalid JSON format: {str(e)}")
|
|
except Exception as e:
|
|
print(f"Error processing JSON: {str(e)}")
|
|
```
|
|
|
|
## Notes
|
|
|
|
- Inherits from RagTool
|
|
- Supports fixed/dynamic modes
|
|
- JSON path validation
|
|
- Memory management
|
|
- Performance optimization
|
|
- Error handling
|
|
- Search capabilities
|
|
- Content extraction
|
|
- Format validation
|
|
- Security features
|