AgentCore Browser

1. Overview


Amazon Bedrock AgentCore Browser๋Š” AI ์—์ด์ „ํŠธ๊ฐ€ ์›น์„ ํƒ์ƒ‰ํ•˜๊ณ  ์›น ์ฝ˜ํ…์ธ ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ์„œ๋น„์Šค์ž…๋‹ˆ๋‹ค. ์ด ์„œ๋น„์Šค๋ฅผ ํ†ตํ•ด ์—์ด์ „ํŠธ๋Š” ์›น์‚ฌ์ดํŠธ๋ฅผ ๋ฐฉ๋ฌธํ•˜๊ณ , ์ฝ˜ํ…์ธ ๋ฅผ ๊ฒ€์ƒ‰ํ•˜๊ณ , ์›น ํŽ˜์ด์ง€์—์„œ ์ •๋ณด๋ฅผ ์ถ”์ถœํ•˜์—ฌ ์‚ฌ์šฉ์ž์—๊ฒŒ ๊ฐ€์น˜ ์žˆ๋Š” ์ •๋ณด๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž ์„ธ์…˜๊ณผ ๋ธŒ๋ผ์šฐ์ € ์„ธ์…˜ ๊ฐ„ 1:1 ๋งคํ•‘์„ ํ†ตํ•ด VM ์ˆ˜์ค€์˜ ๊ฒฉ๋ฆฌ๋ฅผ ์ œ๊ณตํ•˜๋ฉฐ, ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ๊ธ‰ ๋ณด์•ˆ์„ ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค. ๊ฐ ๋ธŒ๋ผ์šฐ์ € ์„ธ์…˜์€ ๊ฒฉ๋ฆฌ๋œ ์ƒŒ๋“œ๋ฐ•์Šค ํ™˜๊ฒฝ์—์„œ ์‹คํ–‰๋˜์–ด ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ๋ณด์•ˆ ์š”๊ตฌ ์‚ฌํ•ญ์„ ์ถฉ์กฑํ•ฉ๋‹ˆ๋‹ค

์ฃผ์š” ๊ธฐ๋Šฅ

  • ๋ณต์žกํ•œ ์›น ์ž‘์—… ์ˆ˜ํ–‰ ๋Šฅ๋ ฅ: ์‚ฌ์šฉ์ž์˜ ์งˆ์˜์— ๋”ฐ๋ผ ์—์ด์ „ํŠธ๊ฐ€ ์›น์‚ฌ์ดํŠธ ํƒ์ƒ‰, ์–‘์‹ ์ž‘์„ฑ, ๋ฒ„ํŠผ ํด๋ฆญ, ๋™์  ์ฝ˜ํ…์ธ  ํŒŒ์‹ฑ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

  • ์ฝ˜ํ…์ธ  ์ถ”์ถœ: ์›น ํŽ˜์ด์ง€์—์„œ ํ…์ŠคํŠธ, ์ด๋ฏธ์ง€, ๋งํฌ ๋“ฑ์˜ ์ฝ˜ํ…์ธ ๋ฅผ ์ถ”์ถœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์•ˆ์ „ํ•œ ํƒ์ƒ‰: ๋ณด์•ˆ ์ œํ•œ์„ ์ค€์ˆ˜ํ•˜๋ฉด์„œ ์›น ํƒ์ƒ‰์„ ์•ˆ์ „ํ•˜๊ฒŒ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

  • ์ •๋ณด ์š”์•ฝ: ๋ฐฉ๋Œ€ํ•œ ์›น ์ฝ˜ํ…์ธ ์—์„œ ํ•ต์‹ฌ ์ •๋ณด๋ฅผ ์ถ”์ถœํ•˜๊ณ  ์š”์•ฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์Šคํฌ๋ฆฐ์ƒท ์บก์ฒ˜: Live View๋ฅผ ํ†ตํ•œ ์‹ค์‹œ๊ฐ„ ๊ฐ€์‹œ์„ฑ์„ ์ œ๊ณตํ•˜๋ฉฐ ์›น ํŽ˜์ด์ง€์˜ ์Šคํฌ๋ฆฐ์ƒท์„ ์บก์ฒ˜ํ•˜์—ฌ ์‹œ๊ฐ์  ์ •๋ณด๋ฅผ ์ถ”์ถœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ๋ชจ๋ธ ๋น„์ข…์†์  ํ†ตํ•ฉ: ๋‹ค์–‘ํ•œ AI ๋ชจ๋ธ๊ณผ ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์ง€์›ํ•˜๋ฉฐ, interact(), parse(), discover() ๊ฐ™์€ ๋„๊ตฌ๋ฅผ ํ†ตํ•ด ๋ธŒ๋ผ์šฐ์ € ๋™์ž‘์— ๋Œ€ํ•œ ์ž์—ฐ์–ด ์ถ”์ƒํ™”๋ฅผ ์ œ๊ณตํ•˜์—ฌ ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ํ™˜๊ฒฝ์— ํŠนํžˆ ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค. ์ด ๋„๊ตฌ๋Š” ์–ด๋–ค ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ๋“  ๋ธŒ๋ผ์šฐ์ € ๋ช…๋ น์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๊ณ  Playwright, Puppeteer ๊ฐ™์€ ๋‹ค์–‘ํ•œ ์ž๋™ํ™” ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

์•„ํ‚คํ…์ฒ˜ ๋ฐ ์ž‘๋™ ๋ฐฉ์‹

๋ธŒ๋ผ์šฐ์ € ๋„๊ตฌ ์ƒŒ๋“œ๋ฐ•์Šค๋Š” AI ์—์ด์ „ํŠธ๊ฐ€ ์›น ๋ธŒ๋ผ์šฐ์ €์™€ ์•ˆ์ „ํ•˜๊ฒŒ ์ƒํ˜ธ์ž‘์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ์•ˆ์ „ํ•œ ์‹คํ–‰ ํ™˜๊ฒฝ์ž…๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ ์š”์ฒญํ•˜๋ฉด LLM(Large Language Model)์ด ์ ์ ˆํ•œ ๋„๊ตฌ๋ฅผ ์„ ํƒํ•˜๊ณ  ๋ช…๋ น์„ ๋ฒˆ์—ญํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ช…๋ น์€ ํ—ค๋“œ๋ฆฌ์Šค ๋ธŒ๋ผ์šฐ์ €์™€ Playwright์™€ ๊ฐ™์€ ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํ˜ธ์ŠคํŒ… ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์„œ๋ฒ„๊ฐ€ ํฌํ•จ๋œ ์ œ์–ด๋œ ์ƒŒ๋“œ๋ฐ•์Šค ํ™˜๊ฒฝ์—์„œ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. ์ƒŒ๋“œ๋ฐ•์Šค๋Š” ์ œํ•œ๋œ ๊ณต๊ฐ„ ๋‚ด์—์„œ ์›น ์ƒํ˜ธ์ž‘์šฉ์„ ์ œํ•œํ•˜์—ฌ ๋ฌด๋‹จ ์‹œ์Šคํ…œ ์ ‘๊ทผ์„ ๋ฐฉ์ง€ํ•จ์œผ๋กœ์จ ๊ฒฉ๋ฆฌ ๋ฐ ๋ณด์•ˆ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์—์ด์ „ํŠธ๋Š” ์Šคํฌ๋ฆฐ์ƒท์„ ํ†ตํ•ด ํ”ผ๋“œ๋ฐฑ์„ ๋ฐ›๊ณ  ์‹œ์Šคํ…œ ๋ณด์•ˆ์„ ์œ ์ง€ํ•˜๋ฉด์„œ ์ž๋™ํ™”๋œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์„ค์ •์€ AI ์—์ด์ „ํŠธ์˜ ์•ˆ์ „ํ•œ ์›น ์ž๋™ํ™”๋ฅผ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.

AgentCore Browser๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค:

  1. ์‚ฌ์šฉ์ž๊ฐ€ ์—์ด์ „ํŠธ์—๊ฒŒ ์›น์‚ฌ์ดํŠธ์—์„œ ์ •๋ณด๋ฅผ ์ฐพ๋Š” ์งˆ๋ฌธ์„ ํ•ฉ๋‹ˆ๋‹ค.

  2. ์—์ด์ „ํŠธ๋Š” ์งˆ๋ฌธ์„ ๋ถ„์„ํ•˜๊ณ  ์–ด๋–ค ์›น์‚ฌ์ดํŠธ๋ฅผ ๋ฐฉ๋ฌธํ•ด์•ผ ํ•˜๋Š”์ง€ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค.

  3. Browser ์„œ๋น„์Šค๋Š” ํ•ด๋‹น URL์„ ๋ฐฉ๋ฌธํ•˜๊ณ  ํŽ˜์ด์ง€๋ฅผ ๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค.

  4. ํŽ˜์ด์ง€ ์ฝ˜ํ…์ธ ๊ฐ€ ์ถ”์ถœ๋˜๊ณ  ๋ถ„์„๋ฉ๋‹ˆ๋‹ค.

  5. ํ•„์š”ํ•œ ๊ฒฝ์šฐ ์ถ”๊ฐ€ ๋งํฌ๋ฅผ ํƒ์ƒ‰ํ•˜๊ฑฐ๋‚˜ ๊ฒ€์ƒ‰์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

  6. ์ถ”์ถœ๋œ ์ •๋ณด๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์‚ฌ์šฉ์ž์˜ ์งˆ๋ฌธ์— ๋Œ€ํ•œ ์‘๋‹ต์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

  7. ์‚ฌ์šฉ์ž์—๊ฒŒ ์‘๋‹ต๊ณผ ํ•จ๊ป˜ ์ถœ์ฒ˜ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

๋ณด์•ˆ, ๋„คํŠธ์›Œํฌ ๋ฐ ๋ฆฌ์†Œ์Šค ์„ค์ •

๋นŒํŠธ์ธ Browser Tool์„ ์ œ๊ณตํ•˜๋ฉฐ, ์ปค์Šคํ…€ Browser Too ์ƒ์„ฑ ์‹œ ๋‘ ๊ฐ€์ง€ ๋„คํŠธ์›Œํฌ ๋ชจ๋“œ๋ฅผ ์„ ํƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • Sandbox - ์™ธ๋ถ€ ๋„คํŠธ์›Œํฌ ์•ก์„ธ์Šค๊ฐ€ ์—†๋Š” ๊ฒฉ๋ฆฌ๋œ ํ™˜๊ฒฝ (๊ฐ€์žฅ ์•ˆ์ „ํ•œ ๋ชจ๋“œ)

  • Public network - ๊ณต์šฉ ์ธํ„ฐ๋„ท ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ ์•ก์„ธ์Šค ํ—ˆ์šฉ

2. Getting Started


Amazon Nova Act

Amazon Nova Act๋Š” ์›น ๋ธŒ๋ผ์šฐ์ € ๋‚ด์—์„œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋„๋ก ํ›ˆ๋ จ๋œ ์ƒˆ๋กœ์šด AI ๋ชจ๋ธ์ž…๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ์ž๊ฐ€ ์›น ๋ธŒ๋ผ์šฐ์ €์—์„œ ์ž‘์—…์„ ์™„๋ฃŒํ•  ์ˆ˜ ์žˆ๋Š” ์—์ด์ „ํŠธ๋ฅผ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” Amazon Nova Act SDK์˜ Research Preview๋ฅผ ์ถœ์‹œํ–ˆ์Šต๋‹ˆ๋‹ค. (ํ˜„์žฌ ์›น์—์„œ API key ๋ฐœ๊ธ‰ ๋ถˆ๊ฐ€)

1. ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ์ ‘๊ทผ๋ฒ•

  • ์ž์—ฐ์–ด ์ง€์‹œ์™€ ์ฝ”๋“œ ๋ชจ๋‘๋ฅผ ์‚ฌ์šฉํ•œ ๋ธŒ๋ผ์šฐ์ € ์ž‘์—… ์ž๋™ํ™” ๋ช…๋ น ๊ตฌ์ถ•

  • Python ์Šคํฌ๋ฆฝํŒ…๊ณผ Playwright ์ž๋™ํ™”๋ฅผ ๋‹จ์ผ ์ธํ„ฐํŽ˜์ด์Šค์—์„œ ๊ฒฐํ•ฉ

2. Playwright ํ†ตํ•ฉ

  • Microsoft์—์„œ ๊ฐœ๋ฐœํ•œ ์˜คํ”ˆ์†Œ์Šค ๋ธŒ๋ผ์šฐ์ € ์ž๋™ํ™” ํ”„๋ ˆ์ž„์›Œํฌ์ธ Playwright์™€ ํ†ตํ•ฉ

  • ๋น„๋ฐ€๋ฒˆํ˜ธ๋‚˜ ์‹ ์šฉ์นด๋“œ ์„ธ๋ถ€์ •๋ณด ๋“ฑ ๋ฏผ๊ฐํ•œ ์ž‘์—… ์ฒ˜๋ฆฌ์— ํŠนํžˆ ์œ ์šฉ

3. ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ ์ง€์›

  • ์—ฌ๋Ÿฌ ๋ธŒ๋ผ์šฐ์ € ์„ธ์…˜์œผ๋กœ ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ ์ง€์›ํ•˜์—ฌ ๋Œ€๊ธฐ ์‹œ๊ฐ„์„ ์ œ๊ฑฐํ•˜๊ณ  ์ธ๊ฐ„ ์—ญ๋Ÿ‰์„ ๋„˜์–ด์„œ๋Š” ๋ฐ˜๋ณต ์ž‘์—… ๊ฐ€์†ํ™”

Browser Use (ํŒŒ์ด์ฌ 3.11 ์ด์ƒ ์š”๊ตฌ)

Install

> pip install browser-use

> playwright install chromium --with-deps --no-shell

Minimum example

import asyncio
from dotenv import load_dotenv
load_dotenv()
from browser_use import Agent
from browser_use.llm import ChatAWSBedrock

# Create ChatBedrockConverse once
llm = ChatAWSBedrock(
    model="anthropic.claude-3-5-sonnet-20240620-v1:0",
)

async def main():
    agent = Agent(
        task="Compare the price of Nova Pro and Claude Sonnet 4",
        llm=llm,
    )
    await agent.run()

asyncio.run(main())

Browser tool usage with Browser-Use SDK

Browser ์ƒŒ๋“œ๋ฐ•์Šค ํด๋ผ์ด์–ธํŠธ ์ดˆ๊ธฐํ™”

from bedrock_agentcore.tools.browser_client import BrowserClient
from browser_use import Agent, BrowserSession
from browser_use.browser import BrowserProfile

from browser_use.llm import ChatAWSBedrock
from rich.console import Console
from contextlib import suppress
import asyncio
from boto3.session import Session

console = Console()

boto_session = Session()
region = boto_session.region_name

client = BrowserClient(region)
client.start()

# Extract ws_url and headers
ws_url, headers = client.generate_ws_headers()

ํ—ฌํผ ํ•จ์ˆ˜

async def run_browser_task(browser_session: BrowserSession, bedrock_chat: ChatAWSBedrock, task: str) -> None:
    """
    Run a browser automation task using browser_use
    
    Args:
        browser_session: Existing browser session to reuse
        bedrock_chat: Bedrock chat model instance
        task: Natural language task for the agent
    """
    try:
        # Show task execution
        console.print(f"\\n[bold blue]๐Ÿค– Executing task:[/bold blue] {task}")
        
        # Create and run the agent
        agent = Agent(
            task=task,
            llm=bedrock_chat,
            browser_session=browser_session
        )
        
        # Run with progress indicator
        with console.status("[bold green]Running browser automation...[/bold green]", spinner="dots"):
            await agent.run()
        
        console.print("[bold green]โœ… Task completed successfully![/bold green]")
        
    except Exception as e:
        console.print(f"[bold red]โŒ Error during task execution:[/bold red] {str(e)}")
        import traceback
        if console.is_terminal:
            traceback.print_exc()

Invoke

# Create persistent browser session and model
browser_session = None
bedrock_chat = None

try:
    # Create browser profile with headers
    browser_profile = BrowserProfile(
        headers=headers,
        timeout=1500000,  # 150 seconds timeout
    )
    
    # Create a browser session with CDP URL and keep_alive=True for persistence
    browser_session = BrowserSession(
        cdp_url=ws_url,
        browser_profile=browser_profile,
        keep_alive=True  # Keep browser alive between tasks
    )
    
    # Initialize the browser session
    console.print("[cyan]๐Ÿ”„ Initializing browser session...[/cyan]")
    await browser_session.start()
    
    # Create ChatBedrockConverse once
    bedrock_chat = ChatAWSBedrock(
        model="anthropic.claude-3-5-sonnet-20240620-v1:0",
    )
    
    console.print("[green]โœ… Browser session initialized and ready for tasks[/green]\\n")

    task = "Search for a coffee maker on amazon.com and extract details of the first one" ## Modify the task to run other tasks
    #task = "naver.com์—์„œ ์„ผํ„ฐํ•„๋“œ ๊ตญ๋ฐฅ ๋ง›์ง‘ 3๊ตฐ๋ฐ๋ฅผ ์ฐพ์•„์„œ ์ •๋ฆฌํ•ด ์ฃผ์„ธ์š”."
    await run_browser_task(browser_session, bedrock_chat, task)

finally:
    # Close the browser session
    if browser_session:
        console.print("\\n[yellow]๐Ÿ”Œ Closing browser session...[/yellow]")
        with suppress(Exception):
            await browser_session.close()
        console.print("[green]โœ… Browser session closed[/green]")

Live-view browser tool with Browser-Use SDK

live_view_with_browser_use.py

from browser_use import Agent, BrowserSession
#from browser_use.browser.session import BrowserSession
from bedrock_agentcore.tools.browser_client import BrowserClient
from browser_use.browser import BrowserProfile
from browser_use.llm import ChatAWSBedrock
from rich.console import Console
from rich.panel import Panel
from contextlib import suppress
import argparse
import sys
sys.path.append("../interactive_tools")
from browser_viewer import BrowserViewerServer
import asyncio
from boto3.session import Session

console = Console()

boto_session = Session()
region = boto_session.region_name

async def run_browser_task(
    browser_session: BrowserSession, bedrock_chat: ChatAWSBedrock, task: str
) -> None:
    """
    Run a browser automation task using browser_use

    Args:
        browser_session: Existing browser session to reuse
        bedrock_chat: Bedrock chat model instance
        task: Natural language task for the agent
    """
    try:
        # Show task execution
        console.print(f"\\n[bold blue]๐Ÿค– Executing task:[/bold blue] {task}")

        # Create and run the agent
        agent = Agent(task=task, llm=bedrock_chat, browser_session=browser_session)

        # Run with progress indicator
        with console.status(
            "[bold green]Running browser automation...[/bold green]", spinner="dots"
        ):
            await agent.run()

        console.print("[bold green]โœ… Task completed successfully![/bold green]")

    except Exception as e:
        console.print(f"[bold red]โŒ Error during task execution:[/bold red] {str(e)}")
        import traceback

        if console.is_terminal:
            traceback.print_exc()

async def live_view_with_browser_use(prompt, region="us-west-2"):
    """
    Main function that demonstrates live browser viewing with Agent automation.

    Workflow:
    1. Creates Amazon Bedrock AgentCore browser client in us-west-2 region
    2. Waits for browser initialization (10-second required delay)
    3. Starts DCV-based live viewer server on port 8000 with browser control
    4. Configures multiple display size options (720p to 1440p)
    5. Establishes browser session for AI agent automation via CDP WebSocket
    6. Executes AI-driven tasks using Claude 3.5 Sonnet model
    7. Properly closes all sessions and stops browser client

    Features:
    - Real-time browser viewing through web interface
    - Manual take/release control functionality
    - AI automation with browser-use library
    - Configurable display layouts and sizes
    """
    console.print(
        Panel(
            "[bold cyan]Browser Live Viewer[/bold cyan]\\n\\n"
            "This demonstrates:\\n"
            "โ€ข Live browser viewing with DCV\\n"
            "โ€ข Configurable display sizes (not limited to 900ร—800)\\n"
            "โ€ข Proper display layout callbacks\\n\\n"
            "[yellow]Note: Requires Amazon DCV SDK files[/yellow]",
            title="Browser Live Viewer",
            border_style="blue",
        )
    )

    try:
        # Step 1: Create browser session
        client = BrowserClient(region)
        client.start()

        ws_url, headers = client.generate_ws_headers()

        # Step 2: Start viewer server
        console.print("\\n[cyan]Step 3: Starting viewer server...[/cyan]")
        viewer = BrowserViewerServer(client, port=8012)
        viewer_url = viewer.start(open_browser=True)

        # Step 3: Show features
        console.print("\\n[bold green]Viewer Features:[/bold green]")
        console.print(
            "โ€ข Default display: 1600ร—900 (configured via displayLayout callback)"
        )
        console.print("โ€ข Size options: 720p, 900p, 1080p, 1440p")
        console.print("โ€ข Real-time display updates")
        console.print("โ€ข Take/Release control functionality")

        console.print("\\n[yellow]Press Ctrl+C to stop[/yellow]")

        # Step 4: Use browser-use to interact with browser
        # Create persistent browser session and model
        browser_session = None
        bedrock_chat = None

        try:
            # Create browser profile with headers
            browser_profile = BrowserProfile(
                headers=headers,
                timeout=1500000,  # 150 seconds timeout
            )

            # Create a browser session with CDP URL and keep_alive=True for persistence
            browser_session = BrowserSession(
                cdp_url=ws_url,
                browser_profile=browser_profile,
                keep_alive=True,  # Keep browser alive between tasks
            )

            # Initialize the browser session
            console.print("[cyan]๐Ÿ”„ Initializing browser session...[/cyan]")
            await browser_session.start()

            # Create ChatBedrockConverse once
            bedrock_chat = ChatAWSBedrock(
                model="anthropic.claude-3-5-sonnet-20240620-v1:0",
            )

            console.print(
                "[green]โœ… Browser session initialized and ready for tasks[/green]\\n"
            )

            task = prompt

            await run_browser_task(browser_session, bedrock_chat, task)

        finally:
            # Close the browser session
            if browser_session:
                console.print("\\n[yellow]๐Ÿ”Œ Closing browser session...[/yellow]")
                with suppress(Exception):
                    await browser_session.close()
                console.print("[green]โœ… Browser session closed[/green]")

    except Exception as e:
        console.print(f"\\n[red]Error: {e}[/red]")
        import traceback
        traceback.print_exc()
    finally:
        console.print("\\n\\n[yellow]Shutting down...[/yellow]")
        if "client" in locals():
            client.stop()
            console.print("โœ… Browser session terminated")

if __name__ == "__main__":
    parser = argparse.ArgumentParser()
    parser.add_argument("--prompt", required=True, help="Browser Search instruction")
    parser.add_argument("--region", default="us-east-1", help="AWS region")
    args = parser.parse_args()

    asyncio.run(live_view_with_browser_use(
        args.prompt, args.region
    ))

์ฝ”๋“œ ์‹คํ–‰

uv run python live_view_with_browser_use.py --prompt "Search for macbooks on amazon.com and extract the details of the first one" 

3. ๊ฒฐ๋ก 


Amazon Bedrock AgentCore Browser๋Š” AI ์—์ด์ „ํŠธ๊ฐ€ ์›น์„ ํƒ์ƒ‰ํ•˜๊ณ  ์›น ์ฝ˜ํ…์ธ ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๊ฐ•๋ ฅํ•œ ์„œ๋น„์Šค์ž…๋‹ˆ๋‹ค. ์ด ์„œ๋น„์Šค๋ฅผ ํ†ตํ•ด ์—์ด์ „ํŠธ๋Š” ์›น์‚ฌ์ดํŠธ๋ฅผ ๋ฐฉ๋ฌธํ•˜๊ณ , ์ฝ˜ํ…์ธ ๋ฅผ ๊ฒ€์ƒ‰ํ•˜๊ณ , ์›น ํŽ˜์ด์ง€์—์„œ ์ •๋ณด๋ฅผ ์ถ”์ถœํ•˜์—ฌ ์‚ฌ์šฉ์ž์—๊ฒŒ ๊ฐ€์น˜ ์žˆ๋Š” ์ •๋ณด๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์•ˆ์ „ํ•œ ํƒ์ƒ‰ ๊ธฐ๋Šฅ๊ณผ ๋‹ค์–‘ํ•œ ๋ณด์•ˆ ์ œํ•œ์„ ํ†ตํ•ด ์—์ด์ „ํŠธ๊ฐ€ ์›น์„ ์•ˆ์ „ํ•˜๊ฒŒ ํƒ์ƒ‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ณด์žฅํ•˜๋ฉฐ, ์ธํ„ฐ๋ž™ํ‹ฐ๋ธŒ ํƒ์ƒ‰๊ณผ ์ •๋ณด ์š”์•ฝ ๊ธฐ๋Šฅ์„ ํ†ตํ•ด ์‚ฌ์šฉ์ž์˜ ์งˆ๋ฌธ์— ๋Œ€ํ•œ ์ •ํ™•ํ•œ ๋‹ต๋ณ€์„ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹ค๋ฅธ AgentCore ์„œ๋น„์Šค(Runtime, Memory, Code Interpreter, Gateway, Observability ๋“ฑ)์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๋ฉด ์—์ด์ „ํŠธ์˜ ๊ธฐ๋Šฅ์„ ํฌ๊ฒŒ ํ™•์žฅํ•˜์—ฌ ๋” ์ง€๋Šฅ์ ์ด๊ณ  ์œ ์šฉํ•œ ์—์ด์ „ํŠธ๋ฅผ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Last updated

Was this helpful?