Skip to content

plugin-websearch-serper — Web 搜索

包名: @aalis/plugin-websearch-serper
源码: packages/plugin-websearch-serper/src/index.ts

概述

注册 web_searchsearch_images 两个工具(归入 search 工具分组),通过 Serper.dev API 执行 Google 网页搜索和图片搜索;同时提供 web-search 服务(providerNameserper),供其他插件调用。两个工具内置三重限流保护。

插件声明

typescript
meta.name = '@aalis/plugin-websearch-serper'
meta.provides = ['web-search']
meta.inject = { optional: ['llm'] }

配置

字段类型默认值说明
apiKeystring必填Serper API Key:Serper.dev API 密钥(secret)。缺失时 apply 直接抛错,插件转 error 态——启动不中断,但网络搜索不可用
maxPerMinutenumber10每分钟最大次数:频率限制:每分钟最多搜索次数
maxPerDaynumber100每天最大次数:频率限制:每天最多搜索次数
maxConcurrentnumber3最大并发:同时进行的搜索请求数上限
defaultNumResultsnumber5默认结果数:每次搜索返回的结果条数
enableCompressionbooleanfalse启用搜索结果压缩:启用后,搜索结果将先经过 LLM 压缩整合后再返回给 Agent,减少 Token 消耗并提升信息质量。
compressionLLMllm-ref压缩模型:选择用于压缩搜索结果的模型。留空则使用默认 LLM 提供者。
compressionPrompttextarea''压缩提示词:自定义压缩搜索结果的提示词。留空使用默认提示。提示词中可使用 {query} 代表搜索关键词。

注册的工具

参数: { query: string, numResults?: number }

numResults 缺省取 defaultNumResults,并限定在 1-10 之间。

结果按以下顺序拼成文本:直接回答(answerBox)、知识图谱(仅在有 description 时输出)、自然搜索结果(序号、标题、链接、摘要),整体标注为不可信内容;没有任何结果时返回「未找到搜索结果。」。

启用 enableCompression 后,这段文本会先交给 LLM 压缩成摘要再返回;压缩失败或没有可用模型时返回原文。请求失败或被限流时返回 JSON 字符串 { error },被限流时另附当前限流状态 status

search_images

参数: { query: string, numResults?: number }

numResults 的缺省值与取值范围同 web_search

调用 Serper 图片搜索,返回 JSON:{ query, count, images }images 为各候选图的 title、imageUrl、thumbnailUrl、source、link、width、height 序列化后的文本,整体标注为不可信内容。通常先用它取得候选图片 URL,再交给 send_attachment 发送。

限流

内置 RateLimiter 实现三重保护:

  • 分钟窗口限流
  • 天窗口限流
  • 并发数限制

web_searchsearch_images 共用同一个限流器,超限时返回 JSON 错误信息,不抛异常;web-search 服务的 search() 不经过此限流器。