> ## Documentation Index
> Fetch the complete documentation index at: https://novita.ai/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Novita Agent Sandbox と BrowserUse の統合

export const SetupApiKeyGuide = () => {
  if (typeof document === "undefined") {
    return null;
  } else {
    return <>
                If you don't have a Novita account, you need to <Link href="https://novita.ai/user/register" target="_blank">sign up</Link> first. For details, please refer to <Link href="/docs/ja/guides/quickstart" target="_blank">Quick Start</Link>. After signing up, you can create an API key through the <Link href="https://novita.ai/settings/key-management" target="_blank">Key Management</Link> page and save it for subsequent steps.
            </>;
  }
};

[BrowserUse](https://github.com/browser-use/browser-use) は強力な AI ブラウザエージェントです。Novita Agent Sandbox が提供する安全な分離環境と組み合わせることで、高同時実行・マルチタスク対応のブラウザ AI エージェントを構築できます。

このドキュメントでは、Novita Agent Sandbox サービスをベースに BrowserUse プロジェクトを実行する方法を詳しく説明します。

このドキュメントでは、Novita が公開している `browser-chromium` サンドボックステンプレートを使用します。これをベースに独自のテンプレートを作成したい場合、またはより完全なサンプルコードを確認したい場合は、[こちら](https://github.com/novitalabs/Novita-CollabHub/tree/main/examples/browser-use)を参照してください。

### 1. Novita API Key を取得する

<SetupApiKeyGuide />

### 2. 依存関係をインストールする

必要な Python パッケージをインストールします。

```bash Python icon="terminal" theme={"system"}
pip install browser-use
```

### 3. サンプルコード

開始する前に、必要な環境変数を設定する必要があります。

```bash Bash icon="terminal" theme={"system"}
export NOVITA_API_KEY="<Your Novita AI API Key>"
export LLM_API_KEY="<Your Novita AI API Key>"
export LLM_BASE_URL=https://api.novita.ai/openai
export LLM_MODEL="<Your LLM Model ID>"
```

次のコードを保存します。

```python agent.py icon="python" theme={"system"}
import asyncio
import base64
import os
import time
import dotenv
dotenv.load_dotenv(override=True)
from browser_use import Agent, BrowserSession
from browser_use.llm import ChatOpenAI
from novita_sandbox.core import Sandbox

async def screenshot(agent: Agent):
  # Screenshot function
  print("Taking screenshot...")
  page = await agent.browser_session.get_current_page()
  screenshot_bytes = await page.screenshot(format='png')
  # screenshot method returns the binary data of the image, we should save it as a PNG file
  screenshots_dir = os.path.join(".", "screenshots")
  os.makedirs(screenshots_dir, exist_ok=True)
  screenshot_path = os.path.join(screenshots_dir, f"{time.time()}.png")
  if isinstance(screenshot_bytes, str):
    screenshot_data = base64.b64decode(screenshot_bytes)
  else:
    screenshot_data = screenshot_bytes
  with open(screenshot_path, "wb") as f:
    f.write(screenshot_data)
  print(f"Screenshot saved to {screenshot_path}")

async def main():
    # Create Novita sandbox instance
    sandbox = Sandbox.create(
        timeout=600,  # Timeout in seconds
        template="browser-chromium",  # This template contains chromium browser and exposes port 9223 for remote connection
    )
    try:
        # Get Chrome debug port address from sandbox
        host = sandbox.get_host(9223) # Get sandbox port 9223 address
        cdp_url = f"https://{host}"
        print(f"Chrome Debug Protocol URL: {cdp_url}")
        # Create BrowserUse session
        browser_session = BrowserSession(cdp_url=cdp_url)
        await browser_session.start()
        print("BrowserUse session created successfully")
        # Create AI Agent
        agent = Agent(
            task="Go to hackernews and find the top 3 stories",
            llm=ChatOpenAI(
                api_key=os.getenv("LLM_API_KEY"),
                base_url=os.getenv("LLM_BASE_URL"),
                model=os.getenv("LLM_MODEL"),
                temperature=1
            ),
            browser_session=browser_session,
        )
        # Run Agent task
        print("Starting Agent task execution...")
        await agent.run(
            on_step_end=screenshot, # Take screenshot after each step
        )
        # Close browser session
        await browser_session.kill()
        print("Task execution completed")
    finally:
        # Clean up sandbox resources
        sandbox.kill()
        print("Sandbox resources cleaned up")
        exit

if __name__ == "__main__":
    asyncio.run(main())
```

### 4. Agent を実行する

依存関係をインストールし、環境変数を設定したら、サンプルコードを実行できます。すべてが正常に動作していれば、以下のような出力がターミナルに表示されます。Browser-use は、サンドボックス内のリモートブラウザでタスクを実行しています。

<img src="https://mintcdn.com/novitaai/8g_eTjuhr6h9haCR/ja/guides/images/sandbox-browser-use-output.png?fit=max&auto=format&n=8g_eTjuhr6h9haCR&q=85&s=03e94d8d06d3a65088de4378685a5d60" alt="Output" width="1200" data-path="ja/guides/images/sandbox-browser-use-output.png" />

以下のようなスクリーンショットが生成されます。

<img src="https://mintcdn.com/novitaai/8g_eTjuhr6h9haCR/ja/guides/images/sandbox-browser-use-screenshots/1.png?fit=max&auto=format&n=8g_eTjuhr6h9haCR&q=85&s=f978112f636cc5c651a93b54cfc2d557" alt="screenshot1" width="1200" data-path="ja/guides/images/sandbox-browser-use-screenshots/1.png" />

より完全なデモを実行するには、[こちら](https://github.com/novitalabs/Novita-CollabHub/tree/main/examples/browser-use)を参照してください。
