给 AI Agents 一双「眼睛」:CrawlEyes 开源了

给 AI Agents 一双「眼睛」:CrawlEyes 开源了

做过 Agent 的人应该都有同感:模型再聪明,也有一个致命短板------它看不到网页。

不是"看不全",是根本看不到。你让它去查今天的新闻,它只能凭训练记忆给你一个可能过时的答案;你让它盯一个竞品页面,它连那个页面长什么样都不知道。为了让 Agent 真正"看见",你得自己给它拼一套眼睛:一个浏览器去抓页面,一个搜索接口去查资料,一堆清洗逻辑把网页垃圾去掉,再把这些东西塞进模型能懂的文本里。

这套链路我拼了好几天,踩了不少坑。现在它开源了,叫 CrawlEyes。

它到底解决了什么问题

一句话:让 Agent 能读网页、能搜全网、能自己把信息整理明白。

具体拆开是四件事:

抓页面。 基于 Crawl4AI 无头浏览器,大部分 JS 渲染、动态加载的网页都能处理,输出干净的 Markdown------不是一堆 HTML 标签,是模型直接能读的文字。

搜全网。 自托管 SearXNG 走主通道,挂了自动切 Tavily(零 key),不怕单点故障。

理信息。 本地 embedding 把搜索结果按相关性重排,让有用的浮上来、没用的沉下去。

接 Agent。 标准 MCP Server,Claude Desktop、Cursor 这些客户端开箱即用。

抓页面:从 URL 到干净的 Markdown

bash 复制代码
python scripts/crawl4ai_cli.py https://example.com --text

这行命令背后是整套抓取管线的封装:启动无头浏览器、等 JS 渲染完、把网页正文抽出来、去广告去导航、输出 Markdown。

一个真实的效果:我拿一篇典型技术文章测过,原始页面 24.6k 字符,抓完只剩 2.8k------89% 都是导航、广告、侧栏这种垃圾。模型读 2.8k 和读 24.6k 的区别,就是"能看"和"看得懂"的区别。

输出有四种格式,按场景选:

  • markdown:默认,去噪后的完整内容
  • fit:只要核心段,最省 token
  • raw:原始内容,要全量信息时用
  • markdown_with_citations:每段带来源引用,做深度调研时方便溯源

还有几个顺手的小功能:失败自动重试(1s/2s/4s 指数退避)、同进程会话复用(连续抓多个 URL 不用每次冷启动)、robots.txt 可选遵守(按 RFC 9309,默认关,要不要守合规你自己定)。

搜全网:SearXNG 优先,Tavily 兜底

python 复制代码
from crawl_search_standalone import CrawlSearch
r = CrawlSearch(rerank=True).search('AI agent web scraping')

主搜索走自托管的 SearXNG------自建自管,不依赖任何厂商,数据不经过第三方。它要是挂了,自动切到 Tavily keyless,零配置、零 key,不中断服务。

可靠性这块我做得比较足:熔断器(连续 3 次失败进 60 秒冷却)、SQLite 缓存(带 TTL)、统一限流和指数退避。高并发不会把自己打挂。

理信息:让相关结果浮上来

关键词搜索有个老毛病:搜"Python 爬虫",出来一堆无关的框架广告,真正想要的技术文档沉在下面。

CrawlEyes 用本地 embedding 重排解决这个。模型是 BAAI/bge-small-zh-v1.5(512 维,约 50MB,加载 0.6s,无 torch 依赖),把搜索结果按语义相关性重新排序。

实测效果:相关结果稳稳浮到顶部(相关性 0.817/0.732),无关的直接沉底(0.302/0.139)。这差距对 Agent 来说就是"答对了"和"一本正经胡说"的区别。

接 Agent:MCP Server,标准协议

bash 复制代码
pip install crawleyes   # 或直接运行 scripts/mcp_crawl_server.py

项目提供标准 MCP Server(stdio 传输),四个工具开箱即用:

  • search:搜索
  • extract:抓取,支持四种格式 + robots 开关
  • sitemap:站点发现,顺着 sitemap.xml 摸清一个站有哪些页面
  • deep_research:深度调研,给个主题出一份带引用的报告

不绑定任何 Agent 框架,Claude Desktop、Cursor 这些 MCP 客户端都能直接接。这也是我选择 MCP 的原因------标准协议,一次接入,处处可用。

深度调研:给一个 topic,出一份带引用的报告

python 复制代码
from crawleyes.deep_research import deep_research_sync
r = deep_research_sync("MCP protocol 2026")
r['report']   # 带引用来源的完整报告
r['sources']  # 来源列表

这是我最喜欢的功能。给它一个主题,它会自动拆成子问题、逐路去搜、抓回来降噪、最后合成一份带引用来源的报告。报告里每个结论都能溯源到具体来源------对 Agent 应用来说,"有据可查"比"看似正确"重要得多。

LLM 合成是可选的,支持任意 OpenAI 兼容端点。不配 LLM 也能跑,降级成纯证据聚合,零依赖。

设计上的一些取舍

每一层都有兜底。 抓取用 Crawl4AI,搜索用 SearXNG + Tavily 双通道。每个环节都验证过 fallback 路径,单一故障不至于整体瘫痪。

面向国内环境优化。 Tavily 不用注册不用 key;安装走清华源,Playwright 走 npmmirror,模型走 hf-mirror,不依赖 Google 系服务。

合规边界明确。 项目不做代理池、指纹轮换、验证码对抗。遇到验证码墙,如实标「不可解」,不尝试绕过。尊重 robots.txt 和站点条款,这是长期可持续的前提。

最想分享的踩坑:搜索在国内跑通有多难

开发过程中耗时最多的不是写代码,是让搜索链路在国内真正跑通。这些坑值得记下来:

  • SearXNG 默认配置启用的大多是境外引擎(Google、DuckDuckGo、Brave),境内网络一个都连不上,中文搜索必挂;
  • 补上境内引擎后,百度高频查询会触发 CAPTCHA 风控,连续 10 次就被限制,得加 yandex 冗余;
  • bing 在 JSON API 模式下静默返回空结果,连个报错都没有,没法当主力;
  • 最后是 baidu + yandex 双主力,实测 10/10 连续查询稳定。

这些经验都写进 README 了。如果你也在做中文搜索相关的东西,也许能帮你少踩几个坑。

现状与展望

项目已经跑起来了:

  • 源码github.com/waiky-github/CrawlEyes(MIT)
  • 安装pip install crawleyes,当前 0.2.0(含 sitemap、robots、多格式 extract、统一限流)
  • MCP Registry :已收录 io.github.waiky-github/CrawlEyes
  • CI:GitHub Actions 全绿(Python 3.10/3.12 + ruff + 构建)
  • 内部在用:我自己的 Hermes Agent 5 个环境每天都在跑

技术选型上,Credits 里标了所有灵感来源(Crawl4AI、Readability、Firecrawl 等 9 个项目),合规透明。

如果你也在做「让 Agent 看网页」这件事,或者踩过类似的坑,欢迎来 GitHub 参与进来,Star、Issue、PR 都欢迎~

相关推荐
甲维斯34 分钟前
美版豆包又更新了!Gemini 3.8Flash是真Flash!
人工智能
云智慧AIOps社区35 分钟前
2026年智能巡检机器人行业格局:三类厂商阵营、选型维度与产品推荐
运维·人工智能·机器人·巡检机器人
微三云 - 廖会灵 (私域系统开发)35 分钟前
重资产的突围:当酒店遇上 RWA,用服务权益数字化重构产业供需关系
人工智能·重构
阿里云大数据AI技术39 分钟前
从“找得到”到“找得准”:用 Hologres 构建智能达人圈选系统
大数据·人工智能
2601_967659881 小时前
艾雨文承推出大头阿亮第五代智能养老机器人机构版,助力养老机构智慧巡护升级
人工智能·机器人
智兆APS1 小时前
价值测算与效益验证:缝制APS智能排产可量化收益评估、风险预判与价值闭环体系
人工智能·服装行业aps·缝制行业aps·包箱行业aps·鞋帽袜子行业aps
村口徐大爷1 小时前
电商新媒体通用!Lingko AI全套视觉素材自动化量产落地实操教程
人工智能·ai·ai工具·电商运营·lingnko ai
杨航 AI1 小时前
AI 质感纪录片短视频生成 Skill
人工智能·音视频
Profile排查笔记1 小时前
JavaScript 实现浏览器指纹生成:基础字段、Canvas 采样与 SHA-256 摘要
前端·人工智能·后端·自动化