Skip to content

Agent Configuration [Experimental]

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

Basic Usage

Dictionary Configuration

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

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

{
    "prompt": "You are a helpful assistant."
}

Coding Assistant Example

{
  "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

Tool Loading

The tools configuration supports Python-specific tool loading formats:

{
  "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
  ]
}

The Agent class handles all tool loading internally, including:

  • Loading from module paths
  • Loading from file paths
  • Error handling for missing tools
  • Tool validation

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:

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"))])

Model Configurations

The model property uses the string based model id feature. You can reference AWS's Model Id's to identify a model id to use. If you want to use a different model provider, you can pass in a model as part of the **kwargs of the config_to_agent function:

from strands.experimental import config_to_agent
from strands.models.openai import OpenAIModel

# Create agent from dictionary
agent = config_to_agent(
  config={"name": "Data Analyst"},
  model=OpenAIModel(
    client_args={
        "api_key": "<KEY>",
    },
    model_id="gpt-4o",
  )
)

Additionally, you can override the agent.model attribute of an agent to configure a new model provider:

from strands.experimental import config_to_agent
from strands.models.openai import OpenAIModel

# Create agent from dictionary
agent = config_to_agent(
  config={"name": "Data Analyst"}
)

agent.model = OpenAIModel(
  client_args={
      "api_key": "<KEY>",
  },
  model_id="gpt-4o",
)

Function Parameters

The config_to_agent function accepts:

  • config: Either a file path (string) or configuration dictionary
  • **kwargs: Additional Agent constructor parameters that override config values
# Override config values with valid Agent parameters
agent = config_to_agent(
    "/path/to/config.json",
    name="Data Analyst"
)

Best Practices

  1. Override when needed: Use kwargs to override configuration values dynamically
  2. Leverage Agent defaults: Only specify configuration values you want to override
  3. Use standard tool formats: Follow Agent class conventions for tool specifications
  4. Handle errors gracefully: Catch FileNotFoundError and JSONDecodeError for robust applications