使用 Playwright MCP 和 Koog 驱动浏览器
Open on GitHub Download .ipynb
在这个 notebook 中,你将把一个 Koog 代理连接到 Playwright 的 Model Context Protocol (MCP) 服务器,并让它驱动真实的浏览器来完成一项任务:打开 jetbrains.com,接受 Cookie,然后点击工具栏中的 AI 部分。
我们将保持事情简单且可复现,专注于一个最小化但真实的代理 + 工具设置,你可以发布和重用它。
kotlin
%useLatestDescriptors
%use koog
先决条件
- 已导出为环境变量
OPENAI_API_KEY
的 OpenAI API key - Node.js 和 npx 在你的 PATH 环境变量中可用
- 具有通过
%use koog
可用的 Koog 的 Kotlin Jupyter notebook 环境
提示:以有头模式运行 Playwright MCP 服务器,以观看浏览器自动化这些步骤。
1) 提供你的 OpenAI API key
我们从 OPENAI_API_KEY
环境变量中读取 API key。这使得敏感信息不会出现在 notebook 中。
kotlin
// Get the API key from environment variables
val openAIApiToken = System.getenv("OPENAI_API_KEY") ?: error("OPENAI_API_KEY environment variable not set")
2) 启动 Playwright MCP 服务器
我们将使用 npx 在本地启动 Playwright 的 MCP 服务器。默认情况下,它将暴露一个 SSE endpoint,我们可以从 Koog 连接到它。
kotlin
// Start the Playwright MCP server via npx
val process = ProcessBuilder(
"npx",
"@playwright/mcp@latest",
"--port",
"8931"
).start()
3) 从 Koog 连接并运行代理
我们构建一个带有 OpenAI 执行器的最小化 Koog AIAgent,并将其工具注册表指向通过 SSE 连接的 MCP 服务器。然后我们要求它严格通过工具完成浏览器任务。
kotlin
import kotlinx.coroutines.runBlocking
runBlocking {
println("正在连接到 Playwright MCP 服务器...")
val toolRegistry = McpToolRegistryProvider.fromTransport(
transport = McpToolRegistryProvider.defaultSseTransport("http://localhost:8931")
)
println("成功连接到 Playwright MCP 服务器")
// Create the agent
val agent = AIAgent(
executor = simpleOpenAIExecutor(openAIApiToken),
llmModel = OpenAIModels.Chat.GPT4o,
toolRegistry = toolRegistry,
)
val request = "Open a browser, navigate to jetbrains.com, accept all cookies, click AI in toolbar"
println("正在发送请求:$request")
agent.run(
request + ". " +
"你只能调用工具。使用 Playwright 工具完成此任务。"
)
}
4) 关闭 MCP 进程
始终在运行结束时清理外部进程。
kotlin
// Shutdown the Playwright MCP process
println("正在关闭与 Playwright MCP 服务器的连接")
process.destroy()
故障排除
- 如果代理无法连接,请确保 MCP 服务器正在
http://localhost:8931
上运行。 - 如果你没有看到浏览器,请确保 Playwright 已安装并能在你的系统上启动浏览器。
- 如果你从 OpenAI 收到认证错误,请仔细检查
OPENAI_API_KEY
环境变量。
下一步
- 尝试不同的网站或流程。MCP 服务器暴露了 Playwright 的一套丰富的工具。
- 更换 LLM 模型,或向 Koog 代理添加更多工具。
- 将此流程集成到你的应用中,或将此 notebook 发布为文档。