AnySearch:让 AI 搜索更精准

AI Agent 最容易翻车的地方,往往不是写代码,而是“以为自己知道”。

一个项目刚更新过,模型还停留在旧版本;一条新闻有后续,它只记得前半段;一份文档明明在网页上,它却用训练时的印象补了一句看起来很顺的答案。人读起来没那么容易发现问题,因为语言是连贯的,错也错得很自然。

所以我现在越来越倾向于把搜索能力当成 Agent 的基础设施,而不是临时补丁。需要新资料时,它应该能明确地查、抽取、交叉验证,而不是靠上下文里残留的几段笔记硬拼。

AnySearch 这个技能解决的就是这件事:给 Agent 装上一套可复用的实时搜索入口。

没有稳定搜索入口时,Agent 很容易在旧资料和零散片段里打转

查资料总靠猜:先给 Agent 一条搜索路径

如果只是让模型去搜网页,办法很多。

真正麻烦的是后面的细节:要不要查一般网页?要不要查垂直领域?多个问题能不能并行?搜索结果不够时,能不能把某个 URL 的正文抽出来?不同机器上 Python、Node、Shell 环境不一样,调用方式要不要每次重新判断?

AnySearch 把这些都收进一个 skill 里。

它支持四类常用动作:

  • 普通网页搜索。
  • 垂直领域搜索,比如金融、学术、代码、安全、法律、旅行等方向。
  • 批量搜索,一次跑多个互不依赖的问题。
  • URL 内容抽取,把网页正文转成 Markdown,方便 Agent 继续阅读和引用。

项目本身走的是 JSON-RPC 2.0 接口,技能目录里配了跨平台 CLI。也就是说,Agent 不需要你单独架 MCP server,只要技能安装好,就可以通过 Python、Node.js 或 Shell 脚本去调用同一套搜索服务。

这点很实际。很多 Agent 工作流坏在“第一次能跑,换台机器就断”。AnySearch 的做法是先检测运行环境,优先选 Python,其次 Node.js,再退到 Shell。检测结果会写进 runtime.conf,后面日常搜索直接用这条命令,不用每次重新试。

AnySearch 会根据本机环境选择可用 CLI,再把请求送到同一个搜索服务

搜索结果太散:先分清普通搜索和垂直搜索

AnySearch 的技能说明里有一个挺强硬的规则:只要问题和某个垂直领域沾边,就应该先查 get_sub_domains,再按返回的 sub_domain 和必填参数去搜。

这不是文档洁癖。

普通网页搜索适合找入口和概览,但很多问题不是“网页里有没有这几个词”就能解决。股票、CVE、DOI、专利、机场代码、开源项目、法律条文,这些都有更结构化的搜索方式。直接丢给通用搜索,经常会拿到看似相关、实际很散的结果。

垂直搜索的价值是先问清楚“这个领域该怎么查”。如果返回参数里有必填项,就算暂时没有值,也要显式传空字符串。这个规则听起来啰嗦,但对 Agent 很重要:它让搜索行为更可控,也减少模型自己猜字段、猜格式的空间。

不确定该走普通搜索还是垂直搜索时,比较稳的做法是混合:用 batch_search 同时跑一个普通查询和几个垂直查询。覆盖面比一次猜中更重要。

摘要不够可信:把 URL 正文抽出来核对

很多错误不是发生在“搜不到”,而是停在了搜索摘要。

摘要能告诉你一个页面可能相关,但不能替你确认细节。AnySearch 的 extract 就是为这个阶段准备的:给它一个 URL,它会抽取网页正文,并以 Markdown 返回。对 Agent 来说,这比让模型盯着搜索结果标题继续发挥要靠谱得多。

这里也有边界。extract 主要处理 HTML 页面,不是 PDF、图片或其它复杂文件;返回内容会截断到一定长度。它适合把网页正文拉进来核对,不适合当万能爬虫。

搜索摘要只能帮你找到入口,URL 抽取才适合进入正文核对

这也解释了它和个人知识库工具的分工。

前面写过 “收藏越多越乱?用 AI 建 Wiki”,那类工具更适合长期沉淀:把网页、PDF、笔记整理成可维护的 Wiki。AnySearch 则偏向当下检索:Agent 写作、查资料、核对项目更新时,先从外部世界拿到最新证据。

一个管长期记忆,一个管实时入口。两个放在一起,Agent 才不容易一边记性很好,一边对今天发生的事毫无概念。

配额不稳定:API key 要放在正确位置

AnySearch 支持匿名访问,不过配额和限速会低一些。项目建议配置 API key,这个判断是合理的。

它的 key 优先级也写得很清楚:

  1. 命令行里的 --api_key
  2. 技能目录附近的 .env
  3. 环境变量 ANYSEARCH_API_KEY
  4. 匿名访问。

日常使用更建议放在 .env 或环境变量里,不要把 key 写进代码,也不要在聊天里贴给 Agent。项目的安全说明也明确提到,.env 应该留在本地,并定期轮换 key。

如果匿名调用额度耗尽,服务有时会返回一个自动注册的新 key。技能规则要求 Agent 先征得用户确认,再写入 .env。这条规则有必要:key 是凭证,不应该因为一次自动化任务就悄悄落盘。

匿名访问和 API key 访问都能用,但配额、安全和可持续性不同

接入别太急:先跑三个小测试

一个稳妥的试法是先别急着接进复杂 Agent 流程。

先安装技能,确认本机 Python 或 Node.js 可用。然后让它跑一次环境检测,生成 runtime.conf。再做三个小测试:

  • 用普通 search 查一个明确项目名。
  • batch_search 同时查两个独立问题。
  • 找一个 HTML 文档页,用 extract 拉正文。

如果你要查金融、学术、安全、法律、代码这类问题,先跑 get_sub_domains,看它给出的子领域和参数。别上来就把所有问题都当普通网页搜索。

也别把它理解成“搜索结果自动等于事实”。AnySearch 能把 Agent 带到资料面前,但判断资料是否可靠、是否过期、是否互相矛盾,仍然要靠后续核对。尤其是医疗、法律、财务、投资这类高风险内容,搜索只是第一步。

工作流怎么放:查新资料,沉淀旧知识

我会把它放在三种位置。

第一种是写作前的资料核对。主题、项目版本、官方文档、发布日期,都先查一遍,别用旧记忆起稿。

第二种是 Agent 编程时的文档查询。很多库更新很快,模型记住的 API 可能已经不准。先搜官方文档,再抽取具体页面,比直接让模型猜参数稳。

第三种是多来源对照。比如一个项目同时有 GitHub、官网文档和博客介绍,用批量搜索先拿入口,再逐个抽取关键页面。这样 Agent 的答案至少能站在真实材料上。

AnySearch 吸引我的地方不在“它能搜索”,而在它把搜索这件事整理成了 Agent 可以遵守的流程:什么时候查普通网页,什么时候查垂直领域,什么时候抽正文,什么时候该保存运行时配置,什么时候该提醒用户配 key。

Agent 越能干,越需要这种约束。

项目地址:https://github.com/anysearch-ai/anysearch-skill