Amazon Bedrock Agents Tracing
Instrument LLM calls to AWS Bedrock Agents via the boto3 client using OpenInference and view traces in Arize.
Amazon Bedrock Agents allow you to easily define, deploy, and manage agents on your AWS infrastructure. Traces on invocations of these agents can be captured using OpenInference and viewed in Arize.
This instrumentation will capture data on LLM calls, action group invocations (as tools), knowledgebase lookups, and more.
Launch Arize
To get started, sign up for a free Arize account and get your Space ID and API Key.
Install
pip install openinference-instrumentation-bedrock arize-otel
Setup
Connect to Arize using the register function.
# Import open-telemetry dependencies
from arize.otel import register
# Setup OTel via our convenience function
tracer_provider = register(
space_id = "your-space-id", # in app space settings page
api_key = "your-api-key", # in app space settings page
project_name = "your-project-name", # name this to whatever you would like
)
# Import the automatic instrumentor from OpenInference
from openinference.instrumentation.bedrock import BedrockInstrumentor
# Start the instrumentor for Bedrock
BedrockInstrumentor().instrument(tracer_provider=tracer_provider)
After instrumentation, initialize your boto3
client for Bedrock Agents. All clients created after instrumentation will send traces on all calls to invoke_agent
and its streaming variations.
import boto3
import os # For environment variables
import time # For session_id generation
# Ensure AWS credentials and region are set, e.g., via environment variables
# or other configuration methods compatible with boto3.
session = boto3.session.Session(
aws_access_key_id=os.environ.get("AWS_ACCESS_KEY_ID"),
aws_secret_access_key=os.environ.get("AWS_SECRET_ACCESS_KEY"),
aws_session_token=os.environ.get("AWS_SESSION_TOKEN"), # Optional
region_name=os.environ.get("AWS_REGION_NAME")
)
# IMPORTANT: Use bedrock-agent-runtime for agents
client = session.client("bedrock-agent-runtime")
# Define your Agent ID and Alias ID (replace with your actual IDs)
AGENT_ID = "YOUR_AGENT_ID"
AGENT_ALIAS_ID = "YOUR_AGENT_ALIAS_ID"
# Example input text, replace as needed
input_text = "Tell me a joke about software development."
Run Bedrock Agents
From here you can run Bedrock Agents as normal. Ensure client
, AGENT_ID
, AGENT_ALIAS_ID
, and input_text
are defined as in the setup.
session_id = f"default-session1_{int(time.time())}"
attributes = dict(
inputText=input_text,
agentId=AGENT_ID,
agentAliasId=AGENT_ALIAS_ID,
sessionId=session_id,
enableTrace=True,
)
response = client.invoke_agent(**attributes)
# Example of processing the response (optional, from Arize docs)
# You might want to print or otherwise use the response content
print(f"Invoked agent with session_id: {session_id}")
for i, event in enumerate(response["completion"]):
if "chunk" in event:
chunk_data = event["chunk"]
if "bytes" in chunk_data:
output_text_part = chunk_data["bytes"].decode("utf8")
print(output_text_part, end="")
elif "trace" in event:
# Trace data can also be part of the event stream
# print(f"Trace event: {event['trace']}") # Usually verbose
pass
print() # for newline after streaming
Observe
Now that you have tracing setup, all calls will be streamed to your Arize account for observability and evaluation.
Resources
Last updated
Was this helpful?