[开源,快3级了] SoSearch — 用 Rust 写的免费 Web Search API,不用 Key,并发聚合 DuckDuckGoBraveYahoo
- 内容介绍
- 文章标签
- 相关推荐
本帖使用社区开源推广,符合推广要求。我申明并遵循社区要求的以下内容:
-
我的帖子已经打上 开源推广 标签: 是
-
我的开源项目完整开源,无未开源部分: 是
-
我的开源项目已链接认可 LINUX DO 社区: 是
-
我帖子内的项目介绍,AI生成、润色内容部分已截图发出: 是
以上选择我承诺是永久有效的,接受社区和佬友监督: 是
快3级了,给佬友发个自己用AI写的小玩具~
做 AI Agent / RAG 的佬友们应该都体验过——给 LLM 接一个搜索引擎有多贵。
SerpAPI 100 次/月、Tavily 1000 次/月的免费额度,跑个 demo 都不够用,生产环境更别提了。
所以我用 Rust 撸了一个:
SoSearch — 免费、无 Key、开箱即用的 Web Search API
GitHub: GitHub - NetLops/SoSearch · GitHub
它能干什么?
一个 HTTP 请求,同时查 3 个搜索引擎,聚合去重返回标准 JSON:
curl "http://localhost:10080/search?q=rust+lang"
{
"query": "rust lang",
"results": [
{
"title": "Rust Programming Language",
"url": "https://rust-lang.org/",
"snippet": "A language empowering everyone to build reliable and efficient software.",
"engine": "duckduckgo"
},
{
"title": "Rust (programming language) - Wikipedia",
"url": "https://en.wikipedia.org/wiki/Rust_(programming_language)",
"snippet": "Rust is a general-purpose programming language emphasizing performance...",
"engine": "brave"
}
]
}
为什么造这个轮子?
| 痛点 | SoSearch 的解决方案 |
|---|---|
| SerpAPI / Tavily 要钱要 Key | 完全免费,自建服务,不依赖第三方 API |
| Python 搜索库速度慢 | Rust + Tokio 异步并发,3 个引擎同时查 |
| 用 requests 直接爬会被 ban | 底层用 rquest(Rust 版 curl_cffi),TLS 指纹伪装成 Chrome 124 |
| 返回格式五花八门 | 统一标准化 JSON 输出,直接对接 LLM / Agent |
技术栈
- Axum — Tokio 生态 Web 框架
- Tokio — 异步运行时,FuturesUnordered 并发调度
- rquest — TLS 指纹模拟的 HTTP 客户端(相当于 Rust 版 curl_cffi)
- scraper — HTML 解析 + CSS 选择器提取
支持的搜索引擎
| 引擎 | 特点 |
|---|---|
| DuckDuckGo | 隐私优先的标准搜索 |
| Brave Search | 独立索引,不依赖 Google/Bing |
| Yahoo | 底层走 Bing,作为补充源 |
架构上是插件式的,新增引擎只需要:
- 在
src/engines/下写一个 scraper - 在 enum 里注册一下
就完事了。
快速上手
本地运行:
git clone https://github.com/netlops/SoSearch.git
cd SoSearch
cargo run --release
# 服务默认跑在 10080 端口
Docker 一行搞定:
make docker-compose-up
# 服务跑在 11380 端口
接到你的 Agent 里:
import requests
resp = requests.get("http://localhost:10080/search", params={"q": "最新 AI 论文"})
results = resp.json()["results"]
for r in results:
print(f"[{r['engine']}] {r['title']}: {r['url']}")
项目结构
src/
├── main.rs # Axum 路由 + 并发引擎调度
├── models.rs # 标准化数据结构
└── engines/
├── mod.rs # 引擎枚举 + trait dispatch
├── duckduckgo.rs # DuckDuckGo 爬虫
├── yahoo.rs # Yahoo 爬虫 (Bing)
└── brave.rs # Brave Search 爬虫
代码量很少,核心逻辑不到 300 行,Rust 新手也能轻松看懂和魔改。
内置 AI Agent Skills
项目已经配了 .gemini/ 和 .agents/ 的 agent skills,用 Gemini CLI 或类似工具可以直接问:
- “帮我新增一个 Google 引擎” → 自动走
sosearch-engine-dev工作流 - “Docker 部署有报错” → 自动走
sosearch-api-ops排障
使用场景
- 给 LLM 接搜索:RAG、AI Agent 的 web search tool
- 学习 Rust:真实项目,async/await + scraper + axum 全覆盖
- 搜索结果分析:聚合多引擎结果做比较研究
- 隐私搜索代理:自建不带追踪的搜索 API
License
CC BY-NC 4.0 — 非商用,随便用,欢迎 PR
GitHub: GitHub - NetLops/SoSearch · GitHub
觉得有用的话给个 呗,也欢迎提 issue 和 PR ~
有什么想聚合的搜索引擎可以在评论区说,我会考虑加上
网友解答:--【壹】--:
比grok搜索强吗
--【贰】--:
先收藏吧,目前用的搜索工具还不错
--【叁】--:
厉害了大佬,感谢分享
--【肆】--:
超酷的项目,正好用得上
--【伍】--:
支持开源大佬
--【陆】--:
厉害了,大佬
--【柒】--:
感谢大佬了!
--【捌】--:
佬可以打包成 mcp 服务,接入会更方便
天下苦 exa 久矣()
--【玖】--:
谢谢分享
--【拾】--:
省钱不省token, 搜索结果喂给LLM该占多少上下文还是多少,这个没法省
但省钱是真省——SerpAPI超过100次/月就要$$了,这个自建随便造,不花一分钱(配合隔壁佬友的 【开源】💧Resin:把你的代理订阅变成专业、高性能的代理池 | 粘性路由 · 智能调度 · 十万级节点接管 · 极简部署 unlimit 直接爽歪歪)
要是你之前让Agent用browser tool去扒整个网页那种玩法,换这个确实能省不少token,毕竟一个网页几千token,这边返回就标题+摘要几十个token的事
--【拾壹】--:
感谢大佬!
--【拾贰】--:
没用API,直接爬的网页版 就跟你开浏览器搜 search.brave.com 一样,拿到HTML后css选择器抠结果出来就行了。底层用了rquest做TLS指纹伪装(curl_cffi),Brave那边以为是个正常
--【拾叁】--:
前排,厉害佬
--【拾肆】--:
会比传统搜索省token吗
--【拾伍】--:
厉害啊 佬
--【拾陆】--:
brave是如何绕过需要key的
--【拾柒】--:
Windows 10系统,尝试自己编译了一下,需要备齐以下环境:
- Rust (
stable-x86_64-pc-windows-msvc) - C/C++ 编译器: Visual Studio 2022 (包含 MSVC
v14.42和 MSBuildv17.12) - Windows SDK:
10.0.22621.0(Windows 11 SDK) (关键依赖,提供 C11 标准支持) - 构建系统: CMake (由 VS 2022 自带或独立安装均可)
- 底层汇编器: NASM (必须在系统
PATH环境变量中) - FFI 接口生成器大脑: LLVM / Clang (必须通过
LIBCLANG_PATH环境变量指定其bin目录) 如果安装LLVM到C盘就没这个问题了。 - 脚本环境 (BoringSSL 隐式依赖): Go 语言环境和 Perl (Strawberry Perl) *
以上是我问gemini得出的解决办法,最后才build成功的。
所以,能docker还是docker吧
--【拾捌】--:
这个我是真支持,点了
--【拾玖】--:
厉害了我的佬
本帖使用社区开源推广,符合推广要求。我申明并遵循社区要求的以下内容:
-
我的帖子已经打上 开源推广 标签: 是
-
我的开源项目完整开源,无未开源部分: 是
-
我的开源项目已链接认可 LINUX DO 社区: 是
-
我帖子内的项目介绍,AI生成、润色内容部分已截图发出: 是
以上选择我承诺是永久有效的,接受社区和佬友监督: 是
快3级了,给佬友发个自己用AI写的小玩具~
做 AI Agent / RAG 的佬友们应该都体验过——给 LLM 接一个搜索引擎有多贵。
SerpAPI 100 次/月、Tavily 1000 次/月的免费额度,跑个 demo 都不够用,生产环境更别提了。
所以我用 Rust 撸了一个:
SoSearch — 免费、无 Key、开箱即用的 Web Search API
GitHub: GitHub - NetLops/SoSearch · GitHub
它能干什么?
一个 HTTP 请求,同时查 3 个搜索引擎,聚合去重返回标准 JSON:
curl "http://localhost:10080/search?q=rust+lang"
{
"query": "rust lang",
"results": [
{
"title": "Rust Programming Language",
"url": "https://rust-lang.org/",
"snippet": "A language empowering everyone to build reliable and efficient software.",
"engine": "duckduckgo"
},
{
"title": "Rust (programming language) - Wikipedia",
"url": "https://en.wikipedia.org/wiki/Rust_(programming_language)",
"snippet": "Rust is a general-purpose programming language emphasizing performance...",
"engine": "brave"
}
]
}
为什么造这个轮子?
| 痛点 | SoSearch 的解决方案 |
|---|---|
| SerpAPI / Tavily 要钱要 Key | 完全免费,自建服务,不依赖第三方 API |
| Python 搜索库速度慢 | Rust + Tokio 异步并发,3 个引擎同时查 |
| 用 requests 直接爬会被 ban | 底层用 rquest(Rust 版 curl_cffi),TLS 指纹伪装成 Chrome 124 |
| 返回格式五花八门 | 统一标准化 JSON 输出,直接对接 LLM / Agent |
技术栈
- Axum — Tokio 生态 Web 框架
- Tokio — 异步运行时,FuturesUnordered 并发调度
- rquest — TLS 指纹模拟的 HTTP 客户端(相当于 Rust 版 curl_cffi)
- scraper — HTML 解析 + CSS 选择器提取
支持的搜索引擎
| 引擎 | 特点 |
|---|---|
| DuckDuckGo | 隐私优先的标准搜索 |
| Brave Search | 独立索引,不依赖 Google/Bing |
| Yahoo | 底层走 Bing,作为补充源 |
架构上是插件式的,新增引擎只需要:
- 在
src/engines/下写一个 scraper - 在 enum 里注册一下
就完事了。
快速上手
本地运行:
git clone https://github.com/netlops/SoSearch.git
cd SoSearch
cargo run --release
# 服务默认跑在 10080 端口
Docker 一行搞定:
make docker-compose-up
# 服务跑在 11380 端口
接到你的 Agent 里:
import requests
resp = requests.get("http://localhost:10080/search", params={"q": "最新 AI 论文"})
results = resp.json()["results"]
for r in results:
print(f"[{r['engine']}] {r['title']}: {r['url']}")
项目结构
src/
├── main.rs # Axum 路由 + 并发引擎调度
├── models.rs # 标准化数据结构
└── engines/
├── mod.rs # 引擎枚举 + trait dispatch
├── duckduckgo.rs # DuckDuckGo 爬虫
├── yahoo.rs # Yahoo 爬虫 (Bing)
└── brave.rs # Brave Search 爬虫
代码量很少,核心逻辑不到 300 行,Rust 新手也能轻松看懂和魔改。
内置 AI Agent Skills
项目已经配了 .gemini/ 和 .agents/ 的 agent skills,用 Gemini CLI 或类似工具可以直接问:
- “帮我新增一个 Google 引擎” → 自动走
sosearch-engine-dev工作流 - “Docker 部署有报错” → 自动走
sosearch-api-ops排障
使用场景
- 给 LLM 接搜索:RAG、AI Agent 的 web search tool
- 学习 Rust:真实项目,async/await + scraper + axum 全覆盖
- 搜索结果分析:聚合多引擎结果做比较研究
- 隐私搜索代理:自建不带追踪的搜索 API
License
CC BY-NC 4.0 — 非商用,随便用,欢迎 PR
GitHub: GitHub - NetLops/SoSearch · GitHub
觉得有用的话给个 呗,也欢迎提 issue 和 PR ~
有什么想聚合的搜索引擎可以在评论区说,我会考虑加上
网友解答:--【壹】--:
比grok搜索强吗
--【贰】--:
先收藏吧,目前用的搜索工具还不错
--【叁】--:
厉害了大佬,感谢分享
--【肆】--:
超酷的项目,正好用得上
--【伍】--:
支持开源大佬
--【陆】--:
厉害了,大佬
--【柒】--:
感谢大佬了!
--【捌】--:
佬可以打包成 mcp 服务,接入会更方便
天下苦 exa 久矣()
--【玖】--:
谢谢分享
--【拾】--:
省钱不省token, 搜索结果喂给LLM该占多少上下文还是多少,这个没法省
但省钱是真省——SerpAPI超过100次/月就要$$了,这个自建随便造,不花一分钱(配合隔壁佬友的 【开源】💧Resin:把你的代理订阅变成专业、高性能的代理池 | 粘性路由 · 智能调度 · 十万级节点接管 · 极简部署 unlimit 直接爽歪歪)
要是你之前让Agent用browser tool去扒整个网页那种玩法,换这个确实能省不少token,毕竟一个网页几千token,这边返回就标题+摘要几十个token的事
--【拾壹】--:
感谢大佬!
--【拾贰】--:
没用API,直接爬的网页版 就跟你开浏览器搜 search.brave.com 一样,拿到HTML后css选择器抠结果出来就行了。底层用了rquest做TLS指纹伪装(curl_cffi),Brave那边以为是个正常
--【拾叁】--:
前排,厉害佬
--【拾肆】--:
会比传统搜索省token吗
--【拾伍】--:
厉害啊 佬
--【拾陆】--:
brave是如何绕过需要key的
--【拾柒】--:
Windows 10系统,尝试自己编译了一下,需要备齐以下环境:
- Rust (
stable-x86_64-pc-windows-msvc) - C/C++ 编译器: Visual Studio 2022 (包含 MSVC
v14.42和 MSBuildv17.12) - Windows SDK:
10.0.22621.0(Windows 11 SDK) (关键依赖,提供 C11 标准支持) - 构建系统: CMake (由 VS 2022 自带或独立安装均可)
- 底层汇编器: NASM (必须在系统
PATH环境变量中) - FFI 接口生成器大脑: LLVM / Clang (必须通过
LIBCLANG_PATH环境变量指定其bin目录) 如果安装LLVM到C盘就没这个问题了。 - 脚本环境 (BoringSSL 隐式依赖): Go 语言环境和 Perl (Strawberry Perl) *
以上是我问gemini得出的解决办法,最后才build成功的。
所以,能docker还是docker吧
--【拾捌】--:
这个我是真支持,点了
--【拾玖】--:
厉害了我的佬

![[开源,快3级了] SoSearch — 用 Rust 写的免费 Web Search API,不用 Key,并发聚合 DuckDuckGoBraveYahoo](/imgrand/WkGf5hN8.webp)