

# 会话录制和重播
<a name="browser-session-recording"></a>

浏览器会话记录和重播为调试、审计或训练目的提供了全面的可观察性。当您创建启用会话记录功能的浏览器时，Amazon Bedrock AgentCore 会自动捕获浏览器交互并将其存储在您指定的 Amazon S3 存储桶中以供日后分析。

会话重播可捕获全面的浏览器交互数据，使您能够查看重播并了解浏览器会话期间发生的操作。此功能通过提供对浏览器行为的详细见解，帮助您解决错误并改进 future 的调用。

会话重播期间收集的信息包括：
+ 会话 DOM 的变化和突变
+ 用户操作，包括点击、滚动和表单交互
+ 控制台日志和错误消息
+ Chrome DevTools 协议 (CDP) 事件
+ 网络事件和 HTTP 请求

## 会话录制的先决条件
<a name="session-replay-prerequisites"></a>

要启用会话录制，您需要：
+ 用于存储录音数据的 Amazon S3 存储桶
+ 具有写入您的 Amazon S3 存储桶权限的 IAM 执行角色
+ 配置为启用录制功能的自定义浏览器工具

## 配置 IAM 角色以进行录制
<a name="session-replay-permissions"></a>

要启用会话录制，您需要一个 IAM 执行角色，该角色有权将录制数据写入 Amazon S3 并将活动记录到 CloudWatch。有关设置权限的详细说明，请参阅[权限](browser-resource-session-management.md#browser-permissions)。

除了标准浏览器权限之外，执行角色还需要其他权限：

```
{
    "Sid": "S3Permissions",
    "Effect": "Allow",
    "Action": [
        "s3:PutObject",
        "s3:GetObject",
        "s3:ListBucket",
        "s3:ListMultipartUploadParts",
        "s3:AbortMultipartUpload"
    ],
    "Resource": [
        "arn:aws:s3:::your-recording-bucket",
        "arn:aws:s3:::your-recording-bucket/*"
    ]
},
{
    "Sid": "CloudWatchLogsPermissions",
    "Effect": "Allow",
    "Action": [
        "logs:CreateLogGroup",
        "logs:CreateLogStream",
        "logs:PutLogEvents",
        "logs:DescribeLogStreams"
    ],
    "Resource": "*"
}
```

`your-recording-bucket`替换为您实际的 Amazon S3 存储桶名称。

## 第 1 步：创建带录制功能的浏览器工具
<a name="session-replay-step1"></a>

创建启用录制功能的自定义浏览器工具。有关创建浏览器工具的详细说明，请参阅[创建 AgentCore 浏览器](browser-using-tool.md#browser-create)。

创建浏览器工具时，请确保：
+ 在配置中启用会话录制
+ 指定您的 Amazon S3 存储桶和用于存储录音的前缀
+ 使用步骤 1 中的 IAM 执行角色

使用 Python 开发工具包的示例：

```
import boto3
import uuid

region = "us-west-2"
bucket = "your-recording-bucket"

client = boto3.client("bedrock-agentcore-control", region_name=region)

response = client.create_browser(
    name="MyRecordingBrowser",
    description="Browser with session recording enabled",
    networkConfiguration={"networkMode": "PUBLIC"},
    executionRoleArn="arn:aws:iam::123456789012:role/AgentCoreBrowserRecordingRole",
    clientToken=str(uuid.uuid4()),
    recording={
        "enabled": True,
        "s3Location": {
            "bucket": bucket,
            "prefix": "browser-recordings"
        }
    }
)

browser_identifier = response.get("browserId") or response.get("browserIdentifier")
print(f"Created browser with recording: {browser_identifier}")
print(f"Recordings will be stored at: s3://{bucket}/browser-recordings/")
```

## 第 2 步：使用支持录制功能的浏览器
<a name="session-replay-step2"></a>

将支持录制功能的浏览器与任何自动化框架配合使用。将自动记录所有浏览器互动。使用链的示例：

```
from strands import Agent
from strands_tools.browser import AgentCoreBrowser

# Use the browser created with recording
browser_identifier = "your-browser-identifier"
region = "us-west-2"
browser_tool = AgentCoreBrowser(region=region, identifier=browser_identifier)

agent = Agent(tools=[browser_tool.browser])
prompt = (
    "Navigate to https://docs.aws.amazon.com/bedrock-agentcore/latest/devguide/what-is-bedrock-agentcore.html "
    "and summarize the key features of AgentCore."
)

response = agent(prompt)
print("Agent Response:")
print(response.message["content"][0]["text"])
```

会话期间的所有互动都将自动记录下来，并在会话结束时上传到您的 Amazon S3 存储桶。

## 第 3 步：监控直播会话和重播录像
<a name="session-replay-step3"></a>

 AWS 控制台为实时监控和录制的会话分析提供了全面的工具。

### 实时取景监控
<a name="console-live-view"></a>

实时监控浏览器会话并与活动会话进行交互：

 **在控制台中访问实时视图** 

1. **打开 Amazon Bedrock AgentCore 控制台并导航到工具 Built-in ** 

1. 从列表中选择您的浏览器工具（例如，`MyRecordingBrowser`）

1. 在 “**浏览器会话**” 部分，找到状态为 “**就绪**” 或 “进行**中**” 的活动会话 

1. 在 “**实时预览/录制**” 栏中，单击提供的 “查看实时会话” 网址

1. 实时视图将在新的浏览器窗口中打开，显示实时浏览器会话

实时预览界面提供：
+ Real-time 浏览器会话的视频流
+ 交互式控件可接管或从自动化中解除控制权
+ 会话状态指示器和连接信息
+ 启用控制后，能够直接与浏览器交互

### 会话重播和分析
<a name="console-recording-insights"></a>

通过控制台重播界面访问详细的会话录制和分析：

 **在控制台中访问会话重播** 

1. 导航到您的浏览器工具，然后选择状态为 “已**终止**” 的已完成会话

1. 单击要分析的会话的 “**查看录音**”

1. 会话重播页面将显示全面的分析工具

 **会话分析功能** 

控制台提供多种分析工具：
+  **视频播放器**：使用时间轴滑块进行交互式播放，用于导航
+  **页面导航**：面板显示所有访问过的页面以及时间范围
+  **用户操作**：包含时间戳、方法和详细信息的所有用户交互
+  **页面 DOM**：每个页面的 DOM 结构和 HTML 内容
+  **控制台日志**：浏览器控制台输出、错误和日志消息
+  **CDP 事件**：包含参数和结果的 Chrome DevTools 协议事件
+  **网络事件**：HTTP 请求、响应、状态码和计时

 **浏览录音** 

使用以下方法浏览录音：
+ 单击 “页面” 面板中的页面可跳至特定时刻
+ 点击用户操作以查看它们在时间轴中的发生位置
+ 使用视频时间轴浏览器进行精确导航
+ 选择 “在操作表中**查看录制**链接” 以跳转到特定的互动

## 第 4 步：以编程方式访问录音
<a name="session-replay-step4"></a>

使用 Amazon Bedrock AgentCore SDK 和 API，以编程方式访问实时视图和记录见解，进行自定义集成和自动分析。

### 编程实时取景权限
<a name="programmatic-live-view"></a>

使用浏览器客户端和查看器服务器连接到实时浏览器会话：

```
import time
from rich.console import Console
from bedrock_agentcore.tools.browser_client import browser_session
from browser_viewer import BrowserViewerServer

console = Console()

def main():
    try:
        # Create browser session
        with browser_session('us-west-2') as client:
            print("✅ Browser ready!")
            ws_url, headers = client.generate_ws_headers()

            # Start viewer server
            console.print("[cyan]Starting viewer server...[/cyan]")
            viewer = BrowserViewerServer(client, port=8005)
            viewer_url = viewer.start(open_browser=True)

            # Keep running
            while True:
                time.sleep(1)

    except KeyboardInterrupt:
        console.print("[yellow]Shutting down...[/yellow]")
        if 'client' in locals():
            client.stop()
            console.print("✅ Browser session terminated")

if __name__ == "__main__":
    main()
```

### 编程录制访问权限
<a name="programmatic-recording-access"></a>

直接从 Amazon S3 访问记录数据以进行自定义分析工作流程：

```
import boto3

s3_client = boto3.client('s3', region_name='us-west-2')

# List recordings in your bucket
bucket_name = "your-recording-bucket"
prefix = "browser-recordings/"

response = s3_client.list_objects_v2(Bucket=bucket_name, Prefix=prefix)

print(f"Recordings in s3://{bucket_name}/{prefix}:")
for obj in response.get('Contents', []):
    print(f"  {obj['Key']} ({obj['Size']} bytes)")
    print(f"    Last Modified: {obj['LastModified']}")
    print()
```

录制数据结构：

```
s3://your-recording-bucket/browser-recordings/
  └── session-id/
      ├── batch_1.ndjson.gz
      ├── batch_2.ndjson.gz
      └── batch_3.ndjson.gz
```

每个会话都会创建一个带有会话 ID 的文件夹，随着会话的进行，录制数据将分块上传。

## 会话重播编程示例
<a name="session-replay-programmatic-usage"></a>

对于高级用例，您可以构建自定义会话重播查看器，并将录制数据集成到自己的分析工作流程中。

以下 GitHub 示例显示了独立的会话重播查看器，以及使用浏览器会话重播功能时的完整浏览器体验。

有关其他示例，请参阅[上的AgentCore 浏览器示例 GitHub](https://github.com/awslabs/amazon-bedrock-agentcore-samples/blob/main/01-tutorials/05-AgentCore-tools/02-Agent-Core-browser-tool/interactive_tools/)。

### 独立会话重播查看器
<a name="session-replay-standalone"></a>

独立会话重播查看器是一个独立的工具，可以直接从 Amazon S3 查看录制的浏览器会话，而无需创建新的浏览器。
+ 直接连接到 S3 以查看录音
+ 通过指定会话 ID 来查看任何过去的录音
+ 当 S3 中缺少项目时显示错误消息，并使用特定于会话 ID 的控制台重播 URL
+ 带有时间轴导航功能的交互式视频播放界面
+ 时间轴上的操作标记，显示表单填写、点击和导航事件
+ 可观察性表格，显示浏览的页面以及时长和网址详情
+ 每次页面交互的控制台事件、CDP 日志和网络日志
+ 在页面级别集成了会话持续时间跟踪
+ Real-time 通过视频和动作数据之间的视觉关联进行动作验证

```
# View the latest recording in a bucket
python view_recordings.py --bucket session-record-test-123456789012 --prefix replay-data

# View a specific recording
python view_recordings.py --bucket session-record-test-123456789012 --prefix replay-data --session 01JZVDG02M8MXZY2N7P3PKDQ74

# Use a specific AWS profile
python view_recordings.py --bucket session-record-test-123456789012 --prefix replay-data --profile my-profile
```

有关参考，请参阅开启的[独立会话重播查看器 GitHub](https://github.com/awslabs/amazon-bedrock-agentcore-samples/blob/main/01-tutorials/05-AgentCore-tools/02-Agent-Core-browser-tool/interactive_tools/live_view_sessionreplay/view_recordings.py)。

### 通过录制和重播获得完整的浏览器体验
<a name="session-replay-complete"></a>

一款用于创建浏览器会话的综合工具，具有录制功能和高级重播功能。
+ 通过自动录制到 S3 来创建浏览器会话
+ 带交互式控制的实时取景 (take/release)
+ 即时调整显示屏分辨率
+ 自动将会话录制到 S3
+ 带有视频播放器界面的集成会话重播查看器
+ 通过精确的动作位置追踪功能进行时间轴清理
+ Page-by-page 使用导航时间轴和 URL 复制进行分析
+ 使用点击位置详细信息进行表单填写操作验证
+ 在页面级别集成了会话持续时间跟踪
+ Real-time 通过视频和动作数据之间的视觉关联进行动作验证

```
# View the latest recording in a bucket
python -m live_view_sessionreplay.browser_interactive_session
```

有关参考，请参阅开启的[交互式浏览器会话 GitHub](https://github.com/awslabs/amazon-bedrock-agentcore-samples/blob/main/01-tutorials/05-AgentCore-tools/02-Agent-Core-browser-tool/interactive_tools/live_view_sessionreplay/browser_interactive_session.py)。