无需付费搜索/抓取API,为本地智能体提供网页访问权限:SearXNG + Scrapling
摘要
描述了一个自托管解决方案,使用 SearXNG 进行搜索、Scrapling 和 Trafilatura 进行页面提取,为本地 AI 代理提供网络访问,从而避免使用付费 API。
我想要为一个本地优先的 agent 增加网页访问能力,但又不想依赖 Tavily、Serper、Firecrawl 之类的服务。沿着这个 agent 路线,我不想使用付费的 API 密钥,而是希望有一个由我控制的搜索服务,以及我自己能运行的页面提取功能。最终我得到了两个工具:`web_search` 和 `web_extract`。没什么花哨的,主要就是把一些好的开源组件拼在一起。
## 1. 搜索 → SearXNG
SearXNG 是一个可自托管的元搜索引擎。我在 Docker 里运行它,然后把 agent 指向它的 JSON 端点。搜索调用大致如下:
```
GET {SEARXNG_URL}/search?q=<query>&format=json&pageno=1
```
然后我会截取结果并规范化为:`{title, url, description}`。这里的 `description` 只是 SearXNG 的摘要片段,并不是页面内容。
配置基本就是:
```
SEARXNG_URL=http://localhost:8080
```
注意事项:
- 在 SearXNG 的 `settings.yml` 中把 `json` 添加到 `search.formats` 里。
- 公开的 SearXNG 实例通常不适合程序化使用。
- SearXNG 只做搜索。当 agent 需要读取页面时,请使用提取功能。
## 2. 提取 → Scrapling + Trafilatura
搜索摘要是不够的,agent 需要读取实际页面。对于 `web_extract`,我使用 Scrapling,它有两个路径:
- **快速路径**:`Fetcher.get(url, impersonate="chrome")`。不需要浏览器,适合普通页面。
- **隐匿路径**:如果快速路径返回空、被屏蔽或出现验证码,则尝试使用真实的 headless 浏览器:
```python
StealthyFetcher.fetch(
url,
headless=True,
solve_cloudflare=True,
block_webrtc=True,
hide_canvas=True,
)
```
隐匿路径只是一个尝试,并不能保证绕过。如果页面仍然显示 CAPTCHA 或 Cloudflare 拦截,我会将结果标记为被屏蔽/部分获取。
一旦获取到 HTML,Trafilatura 会将其转换为包含链接和表格的 Markdown。对于模型来说,Markdown 比原始 HTML 更容易处理。我还会保留一个可见文本的 fallback,用于 Trafilatura 提取不足的页面。
## 其他重要部分
- **PDF**:PDF 的 URL 会通过 pypdf 处理。
- **验证码检测**:CAPTCHA/安全页面会被标记出来,而不是当作真实内容。
- **SSRF 防护**:检查请求的 URL 和重定向是否指向私有/内部范围。最终 URL 也会被检查。注意:这并非针对浏览器每个子请求的网络级防护。
- **可选摘要功能**:大型页面可以通过一个可配置的辅助模型进行摘要,然后再放回上下文。
## 为什么选择这个组合
- 这个路径不需要付费的搜索/抓取 API 密钥。
- 查询通过我的 SearXNG 实例发出,而不是通过绑定我账户的供应商 API。
- SearXNG 仍然会访问上游引擎,所以并非“零第三方接触”。
- 大多数页面使用快速路径,只有需要时才会启动浏览器。
- 最终输出是 Markdown,而不是 HTML 大杂烩。
## 诚实的权衡
- 隐匿路径很慢,只把它当作 fallback。
- SearXNG 的质量取决于启用的上游引擎和速率限制。付费搜索 API 可能仍然更好。这对于我的使用场景已经足够。
- Cloudflare/浏览器抓取始终是一个动态目标。
- 我不敢说这是最优配置,这只是对我有效且可自托管的一种方式。
好奇其他人都在用什么。有没有人找到比 SearXNG 更好的自托管搜索方案,或者比完整浏览器更轻量级的替代方案来处理那些棘手的页面?如果有人也在尝试类似方案,我很乐意分享更多细节。
相似文章
你实际使用的自主网络调研技术栈是什么?(完全本地,无云API)
作者详细介绍了一个完全本地、无云API的AI代理网络调研技术栈,使用自托管SearXNG、持久缓存、TLS指纹抓取、无头浏览器回退以及本地重排序器,并邀请社区讨论类似方案。
我构建了一个完全免费的工具,让您的AI代理免费获得网络能力(抓取+搜索+爬取),完全免费,无需API密钥,也无免费层级。
一位开发者创建了一个完全免费的工具,为AI代理提供网络能力,包括抓取、搜索和爬取,无需任何API密钥或订阅层级。
@TheAhmadOsman: 实用技巧 本地运行LLM?给它们网络访问权限 我的配置: - SearXNG:候选源发现 - Firecrawl:已知-…
一条推文技巧,介绍如何通过 SearXNG 进行搜索、Firecrawl 进行抓取、Camofox 作为浏览器回退,采用“搜索-提取-交互”工作流,为本地 LLM 赋予网络访问能力,使其变得更加实用。
如何让本地代理读取CVE和SEC申报而不头疼
一个实用的解决方案,使用AnySearch让本地AI代理高效查询多个专业来源(CVE、SEC申报),返回结构化JSON/Markdown,避免速率限制和破损的SDK。
用于代理数据基础的高召回率网络搜索API:Google SERP访问是否是唯一可行的选择?
探讨了在构建代理数据基础时,Google SERP访问是否是唯一可行的高召回率网络搜索API。