docs(zh): add missing Agentic Browser Control section (#5150)

This commit is contained in:
theater 2026-09-03 07:26:32 +08:00 committed by GitHub
parent 037658b0ee
commit 64d0e41873
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -71,6 +71,7 @@ DeerFlow 新近集成了 BytePlus 自研的智能搜索与抓取工具集——[
- [手动上下文压缩](#手动上下文压缩)
- [Sub-Agents](#sub-agents)
- [Sandbox 与文件系统](#sandbox-与文件系统)
- [Agentic Browser Control](#agentic-browser-control)
- [Context Engineering](#context-engineering)
- [长期记忆](#长期记忆)
- [推荐模型](#推荐模型)
@ -670,6 +671,24 @@ DeerFlow 不只是“会说它能做”,它是真的有一台自己的“电
└── outputs/ ← 最终交付物
```
### Agentic Browser Control
读取页面和真正“使用”页面不是一回事。除了只读的 `web_fetch``web_capture` 工具外DeerFlow 还提供一组可选的 agentic browser 工具,为每次对话保持一个实时浏览器会话,让 agent 真正操作页面——导航、读取可交互元素、点击、输入、提交表单,并在重度 JavaScript 站点上完成多步流程。
每次操作都会返回页面可交互元素的最新快照,每个元素用稳定的 `[ref]` 编号寻址,因此 agent 基于刚观察到的内容行动,而不是猜测选择器。出站 URL 默认会经过 SSRF 筛查。该能力由 Playwright 提供,作为 optional extra 发布,以保持核心安装精简:
```bash
cd backend
uv sync --extra browser
uv run playwright install chromium
```
然后在 `config.yaml` 中取消注释 `group: browser` 工具项(`browser_navigate``browser_snapshot``browser_click``browser_type``browser_get_text``browser_back``browser_screenshot``browser_close`)。`make dev` / Docker 启动时如果检测到已启用 `browser_navigate`,会在依赖同步时保留 `browser` extra。如果配置了 browser control 但缺少 PlaywrightGateway 会启动失败;`/api/features` 也会在后端无法提供该能力时隐藏 Browser UI。除本地、受信任的调试外请保持 `headless: true``allow_private_addresses: false`。通过 `cdp_url` 连接到已有 Chrome 时DeerFlow 无法强制执行子资源和重定向的 SSRF 防护,因此会 fail closed除非显式设置 `allow_unguarded_cdp: true` 确认该风险仅用于受信任的本地浏览器。Browser session 是进程本地的;启用该工具组时请保持 `GATEWAY_WORKERS=1`,因为普通 uvicorn worker 调度不提供 thread affinity。
已有的、非 mock 的 Custom Agent 对话会在 browser control 可用、且该 agent 未限制 `tool_groups` 或已包含 `browser` 组时,展示同样的 Browser Live 控件。如果显式 allowlist 里没有 `browser`,这些控件会保持隐藏。
workspace 的 Browser Live 客户端通过二进制 JPEG WebSocket 帧协商画面,每个显示刷新只保留最新的待处理帧,并回收被替换的 object URL。Gateway 控制消息仍是 JSON未请求二进制能力的客户端继续使用旧的 JSON/base64 帧协议。
### Context Engineering
**隔离的 Sub-Agent Context**:每个 sub-agent 都在自己独立的上下文里运行。它看不到主 agent 的上下文,也看不到其他 sub-agents 的上下文。这样做的目的很直接,就是让它只聚焦当前任务,不被无关信息干扰。