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执行 gotoclickfillpressscrollwait
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 BrowserPageBuffer 直接返回给 Agent;Action 结果始终是 JSON 数据。
  • 安装 Skill、发现 Skill 和读取 SKILL.md 仍由 SkillPlugin 负责。

相关文档