chore: initialize sandbox and overwrite remote content
Some checks failed
Pre-commit / run (ubuntu-latest) (push) Has been cancelled
Deploy Sphinx documentation to Pages / build_en (ubuntu-latest, 3.10) (push) Has been cancelled
Deploy Sphinx documentation to Pages / build_zh (ubuntu-latest, 3.10) (push) Has been cancelled
Python Unittest Coverage / test (macos-15, 3.10) (push) Has been cancelled
Python Unittest Coverage / test (macos-15, 3.11) (push) Has been cancelled
Python Unittest Coverage / test (macos-15, 3.12) (push) Has been cancelled
Python Unittest Coverage / test (ubuntu-latest, 3.10) (push) Has been cancelled
Python Unittest Coverage / test (ubuntu-latest, 3.11) (push) Has been cancelled
Python Unittest Coverage / test (ubuntu-latest, 3.12) (push) Has been cancelled
Python Unittest Coverage / test (windows-latest, 3.10) (push) Has been cancelled
Python Unittest Coverage / test (windows-latest, 3.11) (push) Has been cancelled
Python Unittest Coverage / test (windows-latest, 3.12) (push) Has been cancelled
Some checks failed
Pre-commit / run (ubuntu-latest) (push) Has been cancelled
Deploy Sphinx documentation to Pages / build_en (ubuntu-latest, 3.10) (push) Has been cancelled
Deploy Sphinx documentation to Pages / build_zh (ubuntu-latest, 3.10) (push) Has been cancelled
Python Unittest Coverage / test (macos-15, 3.10) (push) Has been cancelled
Python Unittest Coverage / test (macos-15, 3.11) (push) Has been cancelled
Python Unittest Coverage / test (macos-15, 3.12) (push) Has been cancelled
Python Unittest Coverage / test (ubuntu-latest, 3.10) (push) Has been cancelled
Python Unittest Coverage / test (ubuntu-latest, 3.11) (push) Has been cancelled
Python Unittest Coverage / test (ubuntu-latest, 3.12) (push) Has been cancelled
Python Unittest Coverage / test (windows-latest, 3.10) (push) Has been cancelled
Python Unittest Coverage / test (windows-latest, 3.11) (push) Has been cancelled
Python Unittest Coverage / test (windows-latest, 3.12) (push) Has been cancelled
This commit is contained in:
138
examples/agent/browser_agent/main.py
Normal file
138
examples/agent/browser_agent/main.py
Normal file
@@ -0,0 +1,138 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# pylint: disable=too-many-lines
|
||||
"""The main entry point of the browser agent example."""
|
||||
import asyncio
|
||||
import os
|
||||
import sys
|
||||
import argparse
|
||||
import traceback
|
||||
from pydantic import BaseModel, Field
|
||||
from browser_agent import BrowserAgent
|
||||
from agentscope.formatter import DashScopeChatFormatter
|
||||
from agentscope.memory import InMemoryMemory
|
||||
from agentscope.model import DashScopeChatModel
|
||||
from agentscope.tool import Toolkit
|
||||
from agentscope.mcp import StdIOStatefulClient
|
||||
from agentscope.agent import UserAgent
|
||||
|
||||
|
||||
class FinalResult(BaseModel):
|
||||
"""A structured result model for structured output."""
|
||||
|
||||
result: str = Field(
|
||||
description="The final result to the initial user query",
|
||||
)
|
||||
|
||||
|
||||
async def main(
|
||||
start_url_param: str = "https://www.google.com",
|
||||
max_iters_param: int = 50,
|
||||
) -> None:
|
||||
"""The main entry point for the browser agent example."""
|
||||
# Setup toolkit with browser tools from MCP server
|
||||
toolkit = Toolkit()
|
||||
browser_client = StdIOStatefulClient(
|
||||
name="playwright-mcp",
|
||||
command="npx",
|
||||
args=["@playwright/mcp@latest"],
|
||||
)
|
||||
|
||||
try:
|
||||
# Connect to the browser client
|
||||
await browser_client.connect()
|
||||
await toolkit.register_mcp_client(browser_client)
|
||||
|
||||
agent = BrowserAgent(
|
||||
name="Browser-Use Agent",
|
||||
model=DashScopeChatModel(
|
||||
api_key=os.environ.get("DASHSCOPE_API_KEY"),
|
||||
model_name="qwen3-max",
|
||||
stream=False,
|
||||
),
|
||||
formatter=DashScopeChatFormatter(),
|
||||
memory=InMemoryMemory(),
|
||||
toolkit=toolkit,
|
||||
max_iters=max_iters_param,
|
||||
start_url=start_url_param,
|
||||
)
|
||||
user = UserAgent("User")
|
||||
|
||||
msg = None
|
||||
while True:
|
||||
msg = await user(msg)
|
||||
if msg.get_text_content() == "exit":
|
||||
break
|
||||
msg = await agent(msg, structured_model=FinalResult)
|
||||
await agent.memory.clear()
|
||||
|
||||
except Exception as e:
|
||||
traceback.print_exc()
|
||||
print(f"An error occurred: {e}")
|
||||
print("Cleaning up browser client...")
|
||||
finally:
|
||||
# Ensure browser client is always closed,
|
||||
# regardless of success or failure
|
||||
try:
|
||||
await browser_client.close()
|
||||
print("Browser client closed successfully.")
|
||||
except Exception as cleanup_error:
|
||||
print(f"Error while closing browser client: {cleanup_error}")
|
||||
|
||||
|
||||
def parse_arguments() -> argparse.Namespace:
|
||||
"""Parse command line arguments."""
|
||||
parser = argparse.ArgumentParser(
|
||||
description="Browser Agent Example with configurable reply method",
|
||||
)
|
||||
parser.add_argument(
|
||||
"--start-url",
|
||||
type=str,
|
||||
default="https://www.google.com",
|
||||
help=(
|
||||
"Starting URL for the browser agent "
|
||||
"(default: https://www.google.com)"
|
||||
),
|
||||
)
|
||||
parser.add_argument(
|
||||
"--max-iters",
|
||||
type=int,
|
||||
default=50,
|
||||
help="Maximum number of iterations (default: 50)",
|
||||
)
|
||||
return parser.parse_args()
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
print("Starting Browser Agent Example...")
|
||||
print(
|
||||
"The browser agent will use "
|
||||
"playwright-mcp (https://github.com/microsoft/playwright-mcp)."
|
||||
"Make sure the MCP server is installed "
|
||||
"by `npx @playwright/mcp@latest`",
|
||||
)
|
||||
print("\nUsage examples:")
|
||||
print(" python main.py # Start with defaults")
|
||||
print(" python main.py --start-url https://example.com --max-iters 100")
|
||||
print(" python main.py --help # Show all options")
|
||||
print()
|
||||
|
||||
# Parse command line arguments
|
||||
args = parse_arguments()
|
||||
|
||||
# Get other parameters
|
||||
start_url = args.start_url
|
||||
max_iters = args.max_iters
|
||||
|
||||
# Validate parameters
|
||||
if max_iters <= 0:
|
||||
print("Error: max-iters must be positive")
|
||||
sys.exit(1)
|
||||
|
||||
if not start_url.startswith(("http://", "https://")):
|
||||
print("Error: start-url must be a valid HTTP/HTTPS URL")
|
||||
sys.exit(1)
|
||||
|
||||
print(f"Starting URL: {start_url}")
|
||||
print(f"Maximum iterations: {max_iters}")
|
||||
|
||||
asyncio.run(main(start_url, max_iters))
|
||||
Reference in New Issue
Block a user