Built-ins
web Plugin
通过可替换 provider 提供结构化搜索、网页读取和 Playwright/CDP 浏览器能力
web Plugin
web 是真实的联网能力插件,不再只是向 Agent 注入方法论或返回安装提示。它只组合宿主显式传入的 provider,不绑定搜索厂商、云浏览器或 Computer Use 模型。
使用 Playwright/CDP
import {
PlaywrightBrowserProvider,
WebPlugin,
} from "@downcity/plugins/web";
const web = new WebPlugin({
browser: new PlaywrightBrowserProvider({
cdp_url: "http://127.0.0.1:9222",
}),
});PlaywrightBrowserProvider 连接已经启动的 Chrome/Chromium CDP 端点,不负责下载浏览器或执行安装命令。云端 Browserbase、Browserless、Kitesurf 等只要提供 CDP,也可以实现同一个 BrowserProvider 协议。
Actions
| Action | 用途 |
|---|---|
search | 委托配置的搜索 provider |
open | 委托配置的已知 URL 文档 provider |
browser_create_session | 创建浏览器 session |
browser_observe | 读取 URL、标题、可见文本和可选截图 |
browser_act | 执行 goto、click、fill、press、scroll、wait |
browser_semantic_act | 通过 Stagehand、Computer Use 或其他语义 adapter 执行自然语言动作 |
browser_extract | 按 CSS selector 或 body 抽取文本 |
browser_semantic_extract | 通过语义 adapter 按自然语言要求抽取内容 |
browser_close_session | 关闭 session 并释放页面 |
浏览器示例:
const created = await web.actions.browser_create_session.execute({
context,
input: { url: "https://example.com" },
});
const session_id = created.data.session_id;
await web.actions.browser_observe.execute({
context,
input: { session_id },
});
await web.actions.browser_close_session.execute({
context,
input: { session_id },
});Provider 组合
WebPlugin 可以只配置其中一种能力:
const web = new WebPlugin({
search: (input) => search_service.search(input),
open: (input) => reader_service.open(input),
browser: browser_provider,
});语义能力通过 adapter 注入,不直接绑定模型厂商:
import {
SemanticBrowserProviderAdapter,
} from "@downcity/plugins/web";
const browser = new SemanticBrowserProviderAdapter({
name: "stagehand",
browser: playwright_browser,
semantic_act: (input) => stagehand_service.act(input),
semantic_extract: (input) => stagehand_service.extract(input),
});Computer Use 可以使用 ComputerUseBrowserProviderAdapter,它会先取得带截图的当前观察,再将目标交给宿主的 OpenAI、Anthropic、Gemini 或自建模型循环。模型不接触 Playwright 对象。
推荐路由:先用搜索或 HTTP 读取解决静态任务;页面需要动态渲染、登录态或交互时再创建浏览器;自然语言动作可在 provider 内接入 Stagehand,视觉页面可在动作失败后回退到 Computer Use。
生命周期与安全
WebPlugin至少需要注入一种 provider;没有真实能力时不会被构造。- 浏览器 session 由 provider 持有,Agent 销毁或 Plugin 卸载时自动调用
dispose()。 browser_act只提供确定性的浏览器动作;提交、发送、购买、上传、删除等副作用必须由宿主审批。- 不要把 Playwright
Browser、Page或Buffer直接返回给 Agent;Action 结果始终是 JSON 数据。 - 安装 Skill、发现 Skill 和读取
SKILL.md仍由SkillPlugin负责。