网络工具
AggRoot 提供三个核心网络工具,覆盖搜索、抓取和 HTTP 请求,外加图片搜索和文件下载工具。
WebSearch — 搜索网页
使用 Bing 搜索引擎查询网络信息,基于 Playwright 后端实现。
参数
| 参数 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
| query | string | 是 | — | 搜索关键词 |
| intent | string | 否 | — | 搜索意图描述 |
| expected | string | 否 | — | 期望结果及失败后的备选方案 |
| num | number | 否 | 10 | 结果数量(最大 10) |
| tbs | string | 否 | — | 时间范围过滤器 |
时间范围过滤器(tbs)
| 值 | 含义 |
|---|---|
qdr:h |
过去 1 小时 |
qdr:d |
过去 1 天 |
qdr:d3 |
过去 3 天 |
qdr:w |
过去 1 周 |
qdr:m |
过去 1 个月 |
qdr:y |
过去 1 年 |
搜索优化技巧
- 中文关键词不加空格:
"深圳天气预报15天"而非"深圳天气 15天" - 避免泛泛关键词:用
"热点新闻排行榜"而非"热点新闻"(后者易返回知乎) - 不要自动添加时间:时间过滤用
tbs参数,不在 query 中加年份 - 搜索词要简洁:控制在 10 个字以内,不拼接多个同义词
- 使用 site: 限定网站:
site:sina.com.cn限定新闻源
示例
// 基本搜索
WebSearch({"query": "TypeScript 5.0 新特性"})
// 限定时间范围
WebSearch({"query": "AI技术突破", "tbs": "qdr:w"})
// 限定权威网站
WebSearch({"query": "React 19 site:react.dev"})
// 带意图和期望
WebSearch({
"query": "Node.js性能优化最佳实践",
"intent": "寻找生产环境下的性能调优指南",
"expected": "找到官方或权威博客的优化建议"
})
返回结果
每个结果包含:标题(title)、URL、摘要(snippet)。返回数据中 urls 字段可直接传递给 WebFetch。
WebFetch — 获取网页
获取网页内容,支持多 URL 自动重试,基于 Playwright 渲染 JavaScript。
参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| url | string[] | 是 | URL 数组,按顺序尝试直到成功 |
| selector | string | 否 | CSS 选择器,提取页面特定区域 |
| waitFor | string | 否 | CSS 选择器,等待特定元素加载完成 |
功能特性
- 多 URL 重试:传入多个 URL,按顺序尝试,成功一个就返回
- JS 渲染:使用 Playwright 渲染页面,支持 SPA 和动态内容
- 内容清洗:自动移除
script、style、nav、header、footer、广告等噪声元素 - 智能等待:
waitFor参数等待特定元素出现后再抓取内容 - 选择器提取:
selector参数只提取页面指定区域的内容 - 长度截断:超过 8000 字符的内容自动截断
示例
// 从搜索结果获取内容
WebFetch({"url": ["https://react.dev/blog", "https://react.dev/docs"]})
// 使用搜索结果 URL
WebSearch({"query": "React 19"})
// 然后使用 WebSearch 返回的 urls
WebFetch({"url": data.urls})
// 提取特定区域
WebFetch({"url": ["https://example.com"], "selector": ".article-content"})
// 等待动态内容加载
WebFetch({"url": ["https://spa-example.com"], "waitFor": ".loaded-content"})
最佳实践
- 至少传入 2-3 个 URL,提高成功率
- 搜索后立即 Fetch:
WebFetch({"url": data.urls}) - SPA 页面使用
waitFor等待内容渲染完成 - 长文章使用
selector只提取正文区域
HttpRequest — HTTP 请求
发送 HTTP 请求,支持所有常用方法和自定义请求头。
参数
| 参数 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
| url | string | 是 | — | 请求 URL |
| method | string | 否 | GET | HTTP 方法:GET/POST/PUT/DELETE/PATCH |
| headers | object | 否 | — | 自定义请求头(key-value) |
| body | string | 否 | — | 请求体(POST/PUT/PATCH 时使用) |
| timeout | number | 否 | 30 | 超时秒数 |
示例
// GET 请求
HttpRequest({"url": "https://api.example.com/users"})
// POST 请求
HttpRequest({
"url": "https://api.example.com/users",
"method": "POST",
"headers": {"Authorization": "Bearer token123"},
"body": "{\"name\": \"test\"}"
})
// PUT 请求更新资源
HttpRequest({
"url": "https://api.example.com/users/1",
"method": "PUT",
"body": "{\"name\": \"updated\"}"
})
// DELETE 请求
HttpRequest({
"url": "https://api.example.com/users/1",
"method": "DELETE"
})
// 带自定义请求头
HttpRequest({
"url": "https://api.example.com/data",
"headers": {
"Authorization": "Bearer abc123",
"Accept": "application/json"
}
})
返回结果
| 字段 | 说明 |
|---|---|
| status | HTTP 状态码 |
| statusText | 状态描述 |
| headers | 响应头 |
| body | 响应体(JSON 自动格式化,其他截断到 10KB) |
注意事项
- JSON 请求默认添加
Content-Type: application/json - 响应体超过 10KB 自动截断
- 超时后返回错误信息
ImageSearch — 搜索图片
搜索网络图片,返回图片 URL 和缩略图。
参数
| 参数 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
| query | string | 是 | — | 搜索关键词 |
| count | number | 否 | 5 | 图片数量(最大 10) |
| safeSearch | boolean | 否 | true | 启用安全搜索 |
示例
ImageSearch({"query": "TypeScript logo"})
ImageSearch({"query": "架构图", "count": 3})
FileDownload — 下载文件
从 URL 下载文件到本地。
参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| url | string | 是 | 文件下载 URL |
| filename | string | 否 | 保存的文件名(不指定则自动获取) |
| saveDir | string | 否 | 保存目录(默认 ./downloads) |
| headers | object | 否 | 自定义请求头 |
支持的文件类型
图片、文档(PDF/Word/Excel/PPT)、压缩包、音视频文件等。
示例
// 下载文件
FileDownload({"url": "https://example.com/report.pdf"})
// 指定文件名和目录
FileDownload({
"url": "https://example.com/data.csv",
"filename": "report.csv",
"saveDir": "/projects/data"
})
// 带认证头下载
FileDownload({
"url": "https://api.example.com/export",
"headers": {"Authorization": "Bearer token123"}
})
工作流:搜索 + 获取
WebSearch 和 WebFetch 的典型搭配流程:
1. WebSearch → 获取搜索结果(标题 + URL + 摘要)
2. 分析相关性,选择最有价值的 URL
3. WebFetch → 获取完整页面内容
4. 根据内容决定是否需要补充搜索
// Step 1: 搜索
WebSearch({"query": "Next.js App Router 教程"})
// Step 2: 获取最佳结果
WebFetch({"url": ["https://nextjs.org/docs/app", "https://nextjs.org/learn"]})
// Step 3: 如果需要更多信息,补充搜索
WebSearch({"query": "Next.js App Router vs Pages Router site:nextjs.org"})
关键规则:搜索到结果后,必须立即调用 WebFetch 获取内容,不要在未 Fetch 的情况下连续调用 WebSearch。