
给 SearXNG 接入豆包搜索,解决 OpenClaw 信源难题
之前一直有个头疼的问题,就是 OpenClaw 的搜索信源。
它自带的 web_search 就那么几个选择,百度搜出来的质量大家懂的,Google 又被墙了,Bing 勉强能用但偶尔也会抽风。后来我推荐过大家用 SearXNG,自己搭一个聚合搜索引擎,把多个信源揉在一起,这样即使某个挂了还有别的顶着。
但搭完发现 SearXNG 也有它的烦恼——它自己也需要信源啊。而且那些免费的搜索引擎引擎三天两头换接口、加验证,时不时就罢工了。像 startpage 和 duckduckgo 经常被 captcha 拦住,Yandex 搜中文又不太行,稳定可用的信源真的越来越少了。
后来发现火山方舟的 Agent Plan 提供了一个豆包搜索的 Harness,每个月有 500 次免费额度。对个人用户来说完全够用了。而且我本身就开通了方舟的 Agent Plan,用积分(AFP)抵扣就行,搜索一次消耗不了多少积分,很划算。
不过 OpenClaw 原生只给了 skill 和 MCP 的方案来接豆包搜索,对 OpenClaw 本身不太友好。所以我绕了一下,把它接进了 SearXNG,这样 OpenClaw 通过 SearXNG 就能用上豆包搜索了。
折腾完之后觉得这个过程值得记录下来,就写了这篇。

原理
SearXNG 内置了一个 json_engine,它可以用来对接任意返回 JSON 的搜索 API。我们只需要在配置里定义一个引擎,告诉 SearXNG 请求怎么发、结果怎么解析就行了。
豆包搜索的 API 是一个标准的 HTTP POST 请求,返回 JSON,刚好适配 json_engine。
普通接入方式
如果你没有开通 Agent Plan,也可以用豆包搜索的普通 API。需要先在火山引擎控制台开通豆包模型服务,获取 API Key。
然后编辑 SearXNG 的 settings.yml,在 engines 部分添加:
1 | - name: doubao-search |
注意 request_body 这里有个坑。json_engine 是用 Python 的 .format() 处理请求体的,所以 JSON 里的大括号必须写成 {{` 和 `}},不然会被当成 format 的变量名解析,然后报 KeyError。只有 {query} 这种真正的变量才保持单括号。
Agent Plan 接入方式
如果你像我一样开通了方舟的 Agent Plan,那就更简单了。直接用 Agent Plan 的 API Key,配置基本一样,区别在于 API Key 的格式是 ark- 开头的。
把上面的 YOUR_API_KEY_HERE 换成你在 Agent Plan 控制台拿到的 Key 就行。每个月 500 次免费搜索,用完了走积分抵扣,完全不用操心计费的事。
1 | headers: |
还有一个坑:引擎名不能用下划线
这个折腾了我好久。SearXNG 的引擎名不能带下划线 _,否则会报 Engine name contains underscore 的错误然后加载失败。所以引擎名要用连字符 -,比如 doubao-search 而不是 doubao_search。
配置后的验证
改完配置记得重启 SearXNG:
1 | docker restart searxng |
然后访问 http://你的地址:端口/search?q=测试&format=json,看看返回结果里有没有 doubao-search 引擎的结果。
如果结果里没有,检查一下 SearXNG 的日志:
1 | docker logs searxng | grep doubao |
常见的错误有两个:一个是 request_body 的大括号没双写导致 KeyError,另一个是 API Key 填错了导致 401。
最终效果
配置好之后,OpenClaw 的搜索走 SearXNG,SearXNG 又多了豆包搜索这个稳定的信源。搜索质量提升了不少,中文搜索尤其明显,毕竟豆包搜索对中文的支持比 Yandex 好太多了。
而且有了每月 500 次的免费额度兜底,加上 Agent Plan 的积分抵扣,日常使用完全够用,基本不用操心配额的问题。
如果你也在用 SearXNG,可以试试加上豆包搜索,体验还不错。
- 感谢你赐予我前进的力量




























