Plugins
The Amazon Bedrock Agents with Return Control SDK includes a plugin system that allows you to extend the functionality of your agents. This section covers the built-in plugins and how to create your own.
Built-in Plugins
The SDK includes several built-in plugins:
Security Plugin
The SecurityPlugin
adds security features to your agent:
from bedrock_agents_sdk import Client, Agent
from bedrock_agents_sdk import SecurityPlugin
agent = Agent(
name="SecureAgent",
description="A secure agent",
foundation_model="anthropic.claude-3-sonnet-20240229-v1:0",
instructions="You are a helpful assistant."
)
security_plugin = SecurityPlugin(
allowed_domains=["example.com", "api.example.org"],
blocked_domains=["malicious.com"],
max_tokens_per_request=4096,
max_requests_per_conversation=10
)
agent.add_plugin(security_plugin)
Guardrail Plugin
The GuardrailPlugin
adds content filtering and guardrails to your agent:
from bedrock_agents_sdk import Client, Agent
from bedrock_agents_sdk import GuardrailPlugin
agent = Agent(
name="GuardrailedAgent",
description="An agent with guardrails",
foundation_model="anthropic.claude-3-sonnet-20240229-v1:0",
instructions="You are a helpful assistant."
)
guardrail_plugin = GuardrailPlugin(
content_policy={
"block_unsafe_content": True,
"block_ungrounded_content": True,
"block_harmful_content": True
},
guardrail_id="my-guardrail-id", # Optional: ID of an existing Amazon Bedrock Guardrail
guardrail_version="DRAFT" # Optional: Version of the guardrail to use
)
agent.add_plugin(guardrail_plugin)
Knowledge Base Plugin
The KnowledgeBasePlugin
connects your agent to an Amazon Bedrock Knowledge Base:
from bedrock_agents_sdk import Client, Agent
from bedrock_agents_sdk import KnowledgeBasePlugin
agent = Agent(
name="KnowledgeAgent",
description="An agent with a knowledge base",
foundation_model="anthropic.claude-3-sonnet-20240229-v1:0",
instructions="You are a helpful assistant."
)
kb_plugin = KnowledgeBasePlugin(
knowledge_base_id="my-knowledge-base-id",
retrieval_config={
"vector_search_configuration": {
"number_of_results": 5,
"filter_configuration": {
"filters": [
{
"key": "category",
"value": "documentation"
}
]
}
}
}
)
agent.add_plugin(kb_plugin)
Creating Custom Plugins
You can create your own plugins by extending the AgentPlugin
class:
from bedrock_agents_sdk.plugins.base import AgentPlugin
class MyCustomPlugin(AgentPlugin):
def __init__(self, custom_param1, custom_param2):
self.custom_param1 = custom_param1
self.custom_param2 = custom_param2
def on_message_received(self, message, agent):
"""Called when a message is received from the user"""
print(f"Received message: {message}")
return message
def on_message_sent(self, message, agent):
"""Called when a message is sent to the user"""
print(f"Sent message: {message}")
return message
def on_function_call(self, function_name, parameters, agent):
"""Called when a function is called by the agent"""
print(f"Function call: {function_name}({parameters})")
return function_name, parameters
def on_function_result(self, function_name, result, agent):
"""Called when a function returns a result"""
print(f"Function result: {function_name} -> {result}")
return result
# Using the custom plugin
agent = Agent(
name="CustomPluginAgent",
description="An agent with a custom plugin",
foundation_model="anthropic.claude-3-sonnet-20240229-v1:0",
instructions="You are a helpful assistant."
)
custom_plugin = MyCustomPlugin(
custom_param1="value1",
custom_param2="value2"
)
agent.add_plugin(custom_plugin)
Plugin Lifecycle
Plugins can hook into various points in the agent’s lifecycle:
on_message_received
: Called when a message is received from the useron_message_sent
: Called when a message is sent to the useron_function_call
: Called when a function is called by the agenton_function_result
: Called when a function returns a resulton_conversation_start
: Called when a conversation startson_conversation_end
: Called when a conversation endson_agent_created
: Called when an agent is createdon_agent_deployed
: Called when an agent is deployed
Plugin Ordering
When multiple plugins are added to an agent, they are executed in the order they were added. You can control the order by adding plugins in the desired sequence:
agent = Agent(
name="MultiPluginAgent",
description="An agent with multiple plugins",
foundation_model="anthropic.claude-3-sonnet-20240229-v1:0",
instructions="You are a helpful assistant."
)
# Plugins will be executed in this order
agent.add_plugin(security_plugin)
agent.add_plugin(guardrail_plugin)
agent.add_plugin(kb_plugin)
agent.add_plugin(custom_plugin)