generated from amazon-archives/__template_Apache-2.0
-
Notifications
You must be signed in to change notification settings - Fork 96
Add comprehensive agent configuration documentation #252
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Open
mr-lee
wants to merge
45
commits into
strands-agents:main
Choose a base branch
from
mr-lee:feature/agent-config-docs-clean
base: main
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Open
Changes from all commits
Commits
Show all changes
45 commits
Select commit
Hold shift + click to select a range
a08eb6b
Add agent configuration documentation and examples
mrlee-amazon f4b3425
Fix model ID format in documentation to align with Strands expectations
mrlee-amazon e47979b
Fix tool names to match strands-agents/tools specifications
mrlee-amazon 399fce3
Update documentation to show correct tool usage
mrlee-amazon cc818a6
feat: add experimental AgentConfig and ToolPool documentation
mrlee-amazon 5b2c63a
refactor: update experimental docs per feedback
mrlee-amazon b85dc8a
docs: update experimental AgentConfig with latest enhancements
mrlee-amazon ba28e07
docs: add examples using default tools from strands_tools
mrlee-amazon 06b63d4
docs: clarify ToolPool configuration requirement
mrlee-amazon ebe5b7b
fix: update coding-assistant.json with correct tools
mrlee-amazon 0b1c548
docs: update experimental docs for ToolPool to ToolBox rename
mrlee-amazon ce0ab29
docs: fix method name from toAgent to to_agent
mrlee-amazon e59cdc7
docs: update experimental features to use ToolRegistry instead of Too…
mrlee-amazon 8b41270
Update docs/user-guide/concepts/experimental/agent-config.md
mr-lee ac52d8f
Update docs/user-guide/concepts/experimental/agent-config.md
mr-lee ea559b5
Update docs/user-guide/concepts/experimental/agent-config.md
mr-lee 347e315
Update docs/user-guide/concepts/experimental/agent-config.md
mr-lee a265a8e
Apply suggestions from code review
mr-lee 2624b81
docs: comprehensive improvements to experimental AgentConfig document…
mrlee-amazon 9fe8fd2
docs: fix Using Default Tools example to use pirate agent without tools
mrlee-amazon 1e3bfda
docs: add model provider documentation reference
mrlee-amazon 29214b9
docs: move agent config JSON examples inline
mrlee-amazon 4ec30f8
docs: add GitHub links to default tools in AgentConfig
mrlee-amazon 830ef23
docs: fix invalid Agent parameters in AgentConfig examples
mrlee-amazon 9e58026
docs: update line 112 to use file_read and editor tools
mrlee-amazon d41a2d2
docs: consolidate Default Tools Behavior into Using Default Tools sec…
mrlee-amazon f075561
docs: fix inaccurate description of default tools behavior
mrlee-amazon a963075
docs: update agent example to use file_read tool
mrlee-amazon 4a6e953
docs: add back experimental caveat to tool list note
mrlee-amazon 5b6e878
docs: remove duplicate Selecting from Default Tools section
mrlee-amazon 3e84a3e
docs: update error handling sections for raise_exception_on_missing_t…
mrlee-amazon 26e2fc8
Update docs/user-guide/concepts/experimental/agent-config.md
mr-lee d3e0074
Update docs/user-guide/concepts/experimental/agent-config.md
mr-lee c0a791f
Update docs/user-guide/concepts/experimental/agent-config.md
mr-lee 857a64b
Apply suggestion from @Unshure
mr-lee a16c847
Apply suggestion from @Unshure
mr-lee 79f488c
Apply suggestion from @Unshure
mr-lee c5e121a
Apply suggestion from @Unshure
mr-lee 4850867
Apply suggestion from @Unshure
mr-lee 915b0c0
Apply suggestion from @Unshure
mr-lee 89343e7
docs: remove Example: Complete Workflow section
mrlee-amazon c8b9859
docs: update agent-config.md for new config_to_agent function
mrlee-amazon 2accbc7
docs: limit config_to_agent supported keys to core configuration
mrlee-amazon 1194181
docs: add JSON schema validation documentation
mrlee-amazon 13d371d
docs: clarify tool limitations and add validation details
mrlee-amazon File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Some comments aren't visible on the classic Files Changed page.
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,236 @@ | ||
# Agent Configuration [Experimental] | ||
|
||
!!! warning "Experimental Feature" | ||
This feature is experimental and may change in future versions. Use with caution in production environments. | ||
|
||
The experimental `config_to_agent` function provides a simple way to create agents from configuration files or dictionaries. | ||
|
||
## Overview | ||
|
||
`config_to_agent` allows you to: | ||
|
||
- Create agents from JSON files or dictionaries | ||
- Use a simple functional interface for agent instantiation | ||
- Support both file paths and dictionary configurations | ||
- Leverage the Agent class's built-in tool loading capabilities | ||
|
||
!!! note "Tool Loading Limitations" | ||
Configuration-based agent setup only works for tools that don't require code-based instantiation. For tools that need constructor arguments or complex setup, use the programmatic approach after creating the agent: | ||
|
||
```python | ||
import http.client | ||
from sample_module import ToolWithConfigArg | ||
|
||
agent = config_to_agent("config.json") | ||
# Add tools that need code-based instantiation | ||
agent.process_tools([ToolWithConfigArg(http.client.HTTPSConnection("localhost"))]) | ||
``` | ||
|
||
## Basic Usage | ||
|
||
### Dictionary Configuration | ||
|
||
```python | ||
from strands.experimental import config_to_agent | ||
|
||
# Create agent from dictionary | ||
agent = config_to_agent({ | ||
"model": "us.anthropic.claude-3-5-sonnet-20241022-v2:0", | ||
"prompt": "You are a helpful assistant" | ||
}) | ||
``` | ||
|
||
### File Configuration | ||
|
||
```python | ||
from strands.experimental import config_to_agent | ||
|
||
# Load from JSON file (with or without file:// prefix) | ||
agent = config_to_agent("/path/to/config.json") | ||
# or | ||
agent = config_to_agent("file:///path/to/config.json") | ||
``` | ||
|
||
#### Simple Agent Example | ||
|
||
```json | ||
{ | ||
"prompt": "You are a helpful assistant." | ||
} | ||
``` | ||
|
||
#### Coding Assistant Example | ||
|
||
```json | ||
{ | ||
"model": "us.anthropic.claude-3-5-sonnet-20241022-v2:0", | ||
"prompt": "You are a coding assistant. Help users write, debug, and improve their code. You have access to file operations and can execute shell commands when needed.", | ||
"tools": ["strands_tools.file_read", "strands_tools.editor", "strands_tools.shell"] | ||
} | ||
``` | ||
|
||
## Configuration Options | ||
|
||
### Supported Keys | ||
|
||
- `model`: Model identifier (string) - see [model provider documentation](https://strandsagents.com/latest/user-guide/quickstart/#using-a-string-model-id) | ||
- `prompt`: System prompt for the agent (string) | ||
- `tools`: List of tool specifications (list of strings) | ||
- `name`: Agent name (string) | ||
|
||
### Tool Loading | ||
|
||
The `tools` configuration supports Python-specific tool loading formats: | ||
|
||
```json | ||
{ | ||
"tools": [ | ||
"strands_tools.file_read", // Python module path | ||
"my_app.tools.cake_tool", // Custom module path | ||
"/path/to/another_tool.py", // File path | ||
"my_module.my_tool_function" // @tool annotated function | ||
] | ||
} | ||
``` | ||
|
||
!!! important "Python Tool Support Only" | ||
Currently, tool loading is Python-specific and supports: | ||
|
||
- **File paths**: Python files containing @tool annotated functions | ||
- **Module names**: Python modules with @tool annotated functions | ||
- **Function references**: Specific @tool annotated functions in modules | ||
|
||
Support for tools in other languages will be added when MCP server support is introduced to this feature. | ||
|
||
The Agent class handles all tool loading internally, including: | ||
- Loading from module paths | ||
- Loading from file paths | ||
- Error handling for missing tools | ||
- Tool validation | ||
|
||
## Function Parameters | ||
|
||
The `config_to_agent` function accepts: | ||
|
||
- `config`: Either a file path (string) or configuration dictionary | ||
- `**kwargs`: Additional [Agent constructor parameters](https://strandsagents.com/latest/api-reference/agent/#strands.agent.agent.Agent.__init__) that override config values | ||
|
||
```python | ||
# Override config values with valid Agent parameters | ||
agent = config_to_agent( | ||
"/path/to/config.json", | ||
name="Data Analyst" | ||
) | ||
``` | ||
|
||
## Error Handling | ||
|
||
### Configuration Validation | ||
|
||
The `config_to_agent` function validates configuration against a JSON schema and provides detailed error messages: | ||
|
||
```python | ||
from strands.experimental import config_to_agent | ||
|
||
# Invalid field | ||
try: | ||
agent = config_to_agent({"model": "test-model", "invalid_field": "value"}) | ||
except ValueError as e: | ||
print(f"Error: {e}") # Configuration validation error at root: Additional properties are not allowed ('invalid_field' was unexpected) | ||
|
||
# Wrong field type | ||
try: | ||
agent = config_to_agent({"model": "test-model", "tools": "not-a-list"}) | ||
except ValueError as e: | ||
print(f"Error: {e}") # Configuration validation error at tools: 'not-a-list' is not of type 'array' | ||
|
||
# Invalid tool item | ||
try: | ||
agent = config_to_agent({"model": "test-model", "tools": ["valid-tool", 123]}) | ||
except ValueError as e: | ||
print(f"Error: {e}") # Configuration validation error at tools -> 1: 123 is not of type 'string' | ||
``` | ||
|
||
### Tool Validation Errors | ||
|
||
The function validates that tools can be loaded and provides helpful error messages: | ||
|
||
```python | ||
# Tool not found | ||
try: | ||
agent = config_to_agent({"model": "test-model", "tools": ["nonexistent_tool"]}) | ||
except ValueError as e: | ||
print(f"Error: {e}") | ||
# Tool 'nonexistent_tool' not found. The configured tool is not annotated with @tool, | ||
# and is not a module or file. To properly import this tool, you must annotate it with @tool. | ||
``` | ||
|
||
### File Not Found | ||
```python | ||
from strands.experimental import config_to_agent | ||
|
||
try: | ||
agent = config_to_agent("/nonexistent/config.json") | ||
except FileNotFoundError as e: | ||
print(f"Error: {e}") # Configuration file not found | ||
``` | ||
|
||
### Invalid JSON | ||
```python | ||
try: | ||
agent = config_to_agent("/path/to/invalid.json") | ||
except json.JSONDecodeError as e: | ||
print(f"Error: {e}") # Invalid JSON format | ||
``` | ||
|
||
### Invalid Configuration Type | ||
```python | ||
try: | ||
agent = config_to_agent(123) # Invalid type | ||
except ValueError as e: | ||
print(f"Error: {e}") # Config must be a file path string or dictionary | ||
``` | ||
|
||
### Tool Loading Errors | ||
|
||
Tool loading errors are handled by the Agent class according to its standard behavior: | ||
|
||
```python | ||
# If tools cannot be loaded, Agent will raise appropriate errors | ||
agent = config_to_agent({ | ||
"model": "test-model", | ||
"tools": ["nonexistent_tool"] | ||
}) | ||
# This will raise an error from the Agent class during tool loading | ||
``` | ||
|
||
## Best Practices | ||
|
||
1. **Use absolute paths**: Prefer absolute file paths for configuration files | ||
2. **Handle errors gracefully**: Catch FileNotFoundError and JSONDecodeError for robust applications | ||
3. **Override when needed**: Use kwargs to override configuration values dynamically | ||
4. **Leverage Agent defaults**: Only specify configuration values you want to override | ||
5. **Use standard tool formats**: Follow Agent class conventions for tool specifications | ||
|
||
## Migration from AgentConfig Class | ||
|
||
If you were using the previous `AgentConfig` class, here's how to migrate: | ||
|
||
### Before (AgentConfig class) | ||
```python | ||
from strands.experimental.agent_config import AgentConfig | ||
|
||
config = AgentConfig("/path/to/config.json") | ||
agent = config.to_agent() | ||
``` | ||
|
||
### After (config_to_agent function) | ||
```python | ||
from strands.experimental import config_to_agent | ||
|
||
agent = config_to_agent("/path/to/config.json") | ||
``` | ||
|
||
The new interface is simpler and delegates all complexity to the existing Agent class, providing a more consistent experience. | ||
|
||
This experimental feature provides a foundation for more advanced agent configuration patterns while maintaining full compatibility with the existing Agent API. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.