Skip to content

OpenClaw 网络搜索与信息采集完全指南

网络搜索是 AI 助理获取外部信息的核心能力。OpenClaw 提供 web_searchweb_fetch 两个工具,支持搜索互联网和抓取网页内容。本文详细介绍如何高效使用这些工具进行信息采集。

一、工具概述

web_search - 搜索引擎

基于 Brave Search API,支持:

  • 关键词搜索
  • 区域和语言过滤
  • 时间范围筛选
  • 结果数量控制

web_fetch - 网页抓取

提取网页可读内容:

  • HTML 转 Markdown
  • 去除广告和导航
  • 提取正文内容
  • 支持长文本截断

二、基本用法

web_search 参数说明

javascript
web_search(
  query="OpenClaw 教程",     // 搜索关键词(必填)
  count=10,                 // 结果数量(1-10,默认 10)
  country="US",             // 国家代码(默认 US,ALL 为全球)
  language="en",            // 语言代码(默认 en)
  freshness="week",         // 时间范围:day/week/month/year
  ui_lang="zh-CN",          // UI 语言(包含地区)
  search_lang="zh-hans"     // 搜索语言
)

web_fetch 参数说明

javascript
web_fetch(
  url="https://example.com/article",  // 网址(必填)
  extractMode="markdown",             // 提取模式:markdown/text
  maxChars=5000                       // 最大字符数(默认 5000)
)

三、实战案例 1:竞品分析报告

场景说明

定期监控竞争对手的产品动态、价格变化、市场活动。

完整实现

javascript
// 1. 搜索竞品信息
competitor_news = web_search(
  query="竞争对手公司名 新产品 发布 2026",
  count=10,
  freshness="week",
  country="CN",
  language="zh"
)

// 2. 搜索行业报告
industry_report = web_search(
  query="人工智能行业分析报告 2026",
  count=5,
  freshness="month"
)

// 3. 抓取详细页面内容
detailed_info = []
for (const result of competitor_news) {
  content = web_fetch(
    url=result.url,
    extractMode="markdown",
    maxChars=3000
  )
  detailed_info.push({
    title: result.title,
    url: result.url,
    content: content
  })
}

// 4. 生成竞品分析报告
report = `
# 竞品分析报告 - ${new Date().toLocaleDateString('zh-CN')}

## 最新动态

${competitor_news.map((item, i) => `
### ${i+1}. ${item.title}
- 来源:${item.source}
- 时间:${item.published || "未知"}
- 摘要:${item.snippet}
- 链接:${item.url}
`).join('\n')}

## 详细内容分析

${detailed_info.map(item => `
#### ${item.title}
${item.content.substring(0, 500)}...
`).join('\n')}

## 关键发现

1. **产品动态**:[总结竞争对手产品更新]
2. **价格策略**:[分析价格变化]
3. **市场活动**:[总结营销活动]
4. **用户反馈**:[收集用户评价]

## 建议行动

- [ ] 针对竞品新功能,评估是否需要跟进
- [ ] 调整定价策略保持竞争力
- [ ] 加强差异化优势宣传
- [ ] 监控用户反馈,及时响应
`

// 5. 保存报告
write(
  path="./reports/competitor-analysis-${Date.now()}.md",
  content=report
)

// 6. 发送到工作群
message(
  action="send",
  channel="feishu",
  target="chat_product_team",
  message="📊 新一期竞品分析报告已生成,请查看附件",
  media=`./reports/competitor-analysis-${Date.now()}.md`
)

报告示例输出

# 竞品分析报告 - 2026/3/19

## 最新动态

### 1. 某公司发布新一代 AI 助理产品
- 来源:科技日报
- 时间:2026-03-18
- 摘要:该公司今日发布了新一代 AI 助理产品,号称性能提升 50%...
- 链接:https://example.com/news/123

### 2. 竞品宣布降价 30%
- 来源:36 氪
- 时间:2026-03-17
- 摘要:为应对市场竞争,该公司宣布全线产品降价 30%...
- 链接:https://example.com/news/456

## 关键发现

1. **产品动态**:竞争对手推出新功能,支持多模态交互
2. **价格策略**:降价 30%,可能引发价格战
3. **市场活动**:加大广告投放,重点投放科技媒体
4. **用户反馈**:新功能好评率高,但价格敏感用户增加

## 建议行动

- [ ] 评估多模态功能开发优先级
- [ ] 制定应对价格战的策略
- [ ] 加强差异化优势宣传
- [ ] 监控用户流失情况

四、实战案例 2:技术趋势调研

场景说明

为技术选型做调研,收集最新技术方案、社区评价、使用案例。

完整实现

javascript
// 调研主题
const topics = [
  "AI Agent 框架对比 2026",
  "LangChain vs AutoGen vs OpenClaw",
  "多 Agent 系统最佳实践"
]

// 1. 多维度搜索
async function research_topic(topic) {
  // 搜索技术博客
  blogs = web_search(
    query=`${topic} 技术博客 深度分析`,
    count=5,
    freshness="month"
  )
  
  // 搜索官方文档
  docs = web_search(
    query=`${topic} site:github.com OR site:readthedocs.io`,
    count=3
  )
  
  // 搜索社区讨论
  discussions = web_search(
    query=`${topic} reddit OR stackoverflow OR hackernews`,
    count=5
  )
  
  // 搜索视频教程
  videos = web_search(
    query=`${topic} tutorial video`,
    count=3
  )
  
  return { blogs, docs, discussions, videos }
}

// 2. 执行调研
results = {}
for (const topic of topics) {
  results[topic] = await research_topic(topic)
}

// 3. 抓取关键内容
key_insights = []
for (const [topic, data] of Object.entries(results)) {
  // 抓取高赞博客
  for (const blog of data.blogs.slice(0, 2)) {
    content = web_fetch(url=blog.url, maxChars=2000)
    key_insights.push({
      topic,
      source: blog.title,
      type: "博客",
      content
    })
  }
  
  // 抓取文档
  for (const doc of data.docs.slice(0, 1)) {
    content = web_fetch(url=doc.url, maxChars=2000)
    key_insights.push({
      topic,
      source: doc.title,
      type: "文档",
      content
    })
  }
}

// 4. 生成调研报告
report = `
# 技术调研报告 - AI Agent 框架

## 调研背景
为 [项目名称] 选择合适的 AI Agent 框架,调研了主流方案。

## 调研维度
- 技术博客和深度分析
- 官方文档完整性
- 社区活跃度和评价
- 学习资源丰富度

## 核心发现

${key_insights.map((insight, i) => `
### ${i+1}. ${insight.source} (${insight.type})
**主题**: ${insight.topic}

**关键内容**:
${insight.content.split('\n').slice(0, 10).join('\n')}
...
`).join('\n')}

## 方案对比

| 框架 | 优势 | 劣势 | 适用场景 |
|------|------|------|---------|
| LangChain | 生态丰富,插件多 | 学习曲线陡峭 | 复杂应用 |
| AutoGen | 多 Agent 协作强 | 文档较少 | 研究项目 |
| OpenClaw | 轻量易用,中文友好 | 生态较小 | 快速原型 |

## 推荐方案

**推荐**: OpenClaw

**理由**:
1. 学习成本低,团队可快速上手
2. 中文文档完善,沟通无障碍
3. 功能满足当前需求
4. 活跃的社区支持

## 参考资料

${[...results.blogs, ...results.docs].map(r => `- [${r.title}](${r.url})`).join('\n')}
`

write(path="./tech-research-ai-agent-framework.md", content=report)

五、实战案例 3:舆情监控系统

场景说明

监控品牌、产品、关键词的网络舆情,及时发现负面信息。

完整实现

javascript
// 监控关键词列表
const keywords = [
  "我们公司名",
  "我们产品名",
  "品牌名 + 投诉",
  "品牌名 + 问题",
  "品牌名 + 故障"
]

// 1. 执行监控
async function sentiment_monitoring() {
  const mentions = []
  
  for (const keyword of keywords) {
    // 搜索最近提及
    results = web_search(
      query=keyword,
      count=10,
      freshness="day",  // 只监控 24 小时内
      country="CN"
    )
    
    for (const result of results) {
      // 抓取内容分析情感
      content = web_fetch(url=result.url, maxChars=1000)
      
      // 简单情感分析(实际可使用 NLP 模型)
      sentiment = analyze_sentiment(content)
      
      mentions.push({
        keyword,
        title: result.title,
        url: result.url,
        source: result.source,
        published: result.published,
        content,
        sentiment,  // positive/neutral/negative
        timestamp: Date.now()
      })
    }
  }
  
  return mentions
}

// 2. 情感分析函数
function analyze_sentiment(text) {
  // 简单关键词匹配(实际应使用 ML 模型)
  const negative_words = ["差", "糟糕", "投诉", "问题", "故障", "垃圾", "失望"]
  const positive_words = ["好", "优秀", "推荐", "满意", "喜欢", "棒"]
  
  let score = 0
  negative_words.forEach(w => { if (text.includes(w)) score-- })
  positive_words.forEach(w => { if (text.includes(w)) score++ })
  
  if (score < -2) return "negative"
  if (score > 2) return "positive"
  return "neutral"
}

// 3. 生成舆情报告
async function generate_sentiment_report() {
  const mentions = await sentiment_monitoring()
  
  // 统计
  const stats = {
    total: mentions.length,
    positive: mentions.filter(m => m.sentiment === "positive").length,
    neutral: mentions.filter(m => m.sentiment === "neutral").length,
    negative: mentions.filter(m => m.sentiment === "negative").length
  }
  
  // 负面信息(需要立即处理)
  const negatives = mentions.filter(m => m.sentiment === "negative")
  
  // 生成报告
  const report = `
# 舆情监控日报 - ${new Date().toLocaleDateString('zh-CN')}

## 总体统计

- 总提及数:${stats.total}
- 正面:${stats.positive} (${(stats.positive/stats.total*100).toFixed(1)}%)
- 中性:${stats.neutral} (${(stats.neutral/stats.total*100).toFixed(1)}%)
- 负面:${stats.negative} (${(stats.negative/stats.total*100).toFixed(1)}%)

## 负面信息(需立即处理)

${negatives.map(m => `
### ⚠️ ${m.title}
- 来源:${m.source}
- 时间:${m.published || "未知"}
- 关键词:${m.keyword}
- 链接:${m.url}
- 内容摘要:${m.content.substring(0, 200)}...
`).join('\n')}

## 正面评价(可用于宣传)

${mentions.filter(m => m.sentiment === "positive").slice(0, 5).map(m => `
### 👍 ${m.title}
- 来源:${m.source}
- 链接:${m.url}
`).join('\n')}

## 建议行动

${negatives.length > 0 ? `
1. **立即响应**:针对${negatives.length}条负面信息,安排客服跟进
2. **问题排查**:如是产品问题,通知技术团队
3. **公开回应**:必要时发布官方声明
` : `
1. 继续保持良好服务
2. 收集正面评价用于宣传
`}
`
  
  return { report, stats, mentions }
}

// 4. 发送报告
const { report, stats } = await generate_sentiment_report()

// 有负面信息时立即告警
if (stats.negative > 0) {
  message(
    action="send",
    channel="feishu",
    target="chat_pr_team",
    message=`⚠️ 发现${stats.negative}条负面舆情,请立即处理!\n\n${report}`
  )
} else {
  // 无负面时静默记录
  write(
    path=`./sentiment-reports/${Date.now()}.md`,
    content=report
  )
}

六、高级技巧

1. 精确搜索

javascript
// 搜索特定网站
web_search(query="OpenClaw site:github.com")

// 搜索特定文件类型
web_search(query="AI 报告 filetype:pdf")

// 排除某些结果
web_search(query="OpenClaw -广告 -推广")

// 搜索标题包含关键词
web_search(query="intitle:OpenClaw 教程")

// 搜索正文包含关键词
web_search(query="inbody:AI Agent 实战")

2. 批量抓取

javascript
// 批量抓取搜索结果
async function batch_fetch(search_results, max_pages=10) {
  const contents = []
  
  for (let i = 0; i < Math.min(search_results.length, max_pages); i++) {
    try {
      const content = web_fetch(
        url=search_results[i].url,
        extractMode="markdown",
        maxChars=3000
      )
      contents.push({
        url: search_results[i].url,
        title: search_results[i].title,
        content
      })
      
      // 避免请求过快
      if (i < max_pages - 1) {
        exec(command="sleep 1")  // 延迟 1 秒
      }
    } catch (e) {
      console.log(`抓取失败 ${search_results[i].url}: ${e.message}`)
    }
  }
  
  return contents
}

3. 内容去重

javascript
// 使用 SimHash 去重
function deduplicate_contents(contents, threshold=0.9) {
  const unique = []
  
  for (const content of contents) {
    const hash = compute_simhash(content.content)
    const is_duplicate = unique.some(u => {
      const similarity = compare_simhash(hash, u.hash)
      return similarity > threshold
    })
    
    if (!is_duplicate) {
      unique.push({ ...content, hash })
    }
  }
  
  return unique
}

4. 定时监控

javascript
// 配置每小时监控
cron(
  action="add",
  job={
    name: "舆情监控",
    schedule: {
      kind: "cron",
      expr: "0 * * * *",  // 每小时
      tz: "Asia/Shanghai"
    },
    payload: {
      kind: "agentTurn",
      message: "执行舆情监控流程",
      timeoutSeconds: 600
    },
    sessionTarget: "isolated"
  }
)

七、最佳实践

1. 搜索词优化

javascript
// ❌ 模糊的搜索词
web_search(query="AI")

// ✅ 具体的搜索词
web_search(query="AI Agent 框架对比 2026 实战教程")

// ✅ 使用引号精确匹配
web_search(query="\"OpenClaw\" \"多 Agent 系统\"")

// ✅ 组合搜索
web_search(query="AI + Agent + 教程 -广告")

2. 请求频率控制

javascript
// 避免被封 IP
const last_request = {}

function rate_limited_fetch(url, min_interval=2000) {
  const domain = new URL(url).hostname
  const now = Date.now()
  const last = last_request[domain] || 0
  
  if (now - last < min_interval) {
    exec(command=`sleep ${(min_interval - (now - last)) / 1000}`)
  }
  
  const result = web_fetch(url=url)
  last_request[domain] = Date.now()
  return result
}

3. 错误处理

javascript
try {
  content = web_fetch(url="https://example.com")
} catch (e) {
  // 记录失败
  write(
    path="./logs/fetch-errors.log",
    content=`${new Date().toISOString()} ${url} ${e.message}\n`
  )
  
  // 尝试备用方案
  if (e.message.includes("404")) {
    // 尝试 Wayback Machine
    content = web_fetch(url=`https://web.archive.org/web/${url}`)
  }
}

4. 内容缓存

javascript
// 缓存抓取结果,避免重复请求
const cache = new Map()

function cached_fetch(url, ttl=3600000) {  // 默认缓存 1 小时
  const cached = cache.get(url)
  
  if (cached && Date.now() - cached.timestamp < ttl) {
    return cached.content
  }
  
  const content = web_fetch(url=url)
  cache.set(url, { content, timestamp: Date.now() })
  return content
}

八、常见问题

Q: 搜索结果不准确怎么办?

A:

  1. 优化搜索词,使用更具体的关键词
  2. 使用高级搜索语法(site:, filetype:, intitle:)
  3. 调整区域和语言设置
  4. 限制时间范围获取最新结果

Q: 网页抓取失败怎么办?

A:

  1. 检查 URL 是否正确
  2. 尝试 text 模式而非 markdown
  3. 检查是否需要登录
  4. 网站可能有反爬措施,添加延迟

Q: 如何抓取需要登录的页面?

A:

  • 使用 browser 工具模拟登录
  • 或使用 API(如果有)
  • 或手动导出内容后分析

Q: 搜索和抓取的法律风险?

A:

  1. 遵守 robots.txt
  2. 控制请求频率,不要影响目标网站
  3. 不抓取受版权保护的内容用于商业目的
  4. 遵守数据保护法规(如 GDPR)

九、总结

网络搜索和信息采集是 AI 助理的"眼睛"和"耳朵":

工具用途特点
web_search搜索互联网快速、全面、可过滤
web_fetch抓取网页提取正文、去广告

掌握这些技巧,你的 AI 助理可以:

  • 实时监控行业动态
  • 快速完成技术调研
  • 及时发现舆情风险
  • 自动收集竞争情报

记住:信息的质量取决于搜索的技巧和抓取的策略。


相关资源:

Released under the MIT License.