OpenClaw 的联网搜索效果,很大程度上取决于信源。Google 在部分网络环境下不可用,Bing 偶尔不稳定,Startpage 和 DuckDuckGo 也可能触发验证码。即使部署了 SearXNG,底层搜索引擎一旦失效,Agent 得到的结果仍会变差。
一个实用的解决办法,是把豆包联网搜索接入 SearXNG,再让 OpenClaw 统一通过 SearXNG 搜索。这样既保留元搜索引擎的聚合能力,又增加一个更适合中文内容的信源。

为什么给 SearXNG 增加豆包搜索?
SearXNG 是一个开源元搜索引擎,它不会自己生产搜索结果,而是向多个上游引擎发起请求,再统一聚合。因此,部署成功不代表信源永远稳定:免费引擎会修改接口、增加验证码或限制服务器 IP。
豆包搜索更容易覆盖中文网页、资讯和本地化内容。
API 返回结构化结果,适合 SearXNG 的 json_engine 解析。
其他搜索引擎被验证码或限流时,仍能给 Agent 提供结果。
原体验使用火山方舟 Agent Plan 的豆包搜索 Harness,并提到个人套餐每月提供一定免费调用额度、超出后可使用 AFP 抵扣。套餐额度和计费会调整,请以当前控制台显示为准。
接入原理:使用 SearXNG 的 json_engine
SearXNG 内置通用 json_engine,可以在 settings.yml 中配置任意 JSON 搜索 API。我们只需要定义请求地址、POST 请求体、鉴权 Header,以及返回数据中标题、链接和摘要所在的字段。
这一能力可在 SearXNG JSON Engine 官方文档 中核对。官方也明确说明:POST 请求可使用 request_body,非占位符的大括号必须双写。
普通 API 接入方式
如果没有开通 Agent Plan,可以先在火山引擎控制台开通对应搜索服务并获取 API Key,然后编辑 SearXNG 的 settings.yml,在 engines 部分加入以下配置:
- name: doubao-search
engine: json_engine
search_url: https://open.feedcoopapi.com/search_api/web_search
method: POST
request_body: >-
{{"Query": "{query}", "SearchType": "web", "Count": 10, "NeedSummary": true}}
results_query: Result/WebResults
url_query: Url
title_query: Title
content_query: Summary
headers:
Content-Type: application/json
Authorization: Bearer YOUR_API_KEY_HERE
X-Traffic-Tag: skill_web_search_common
categories:
- general
disabled: falsejson_engine 会用 Python .format() 处理请求体,因此 JSON 自身的 { 和 } 必须写成 {{ 与 }}。只有真正的 SearXNG 变量 {query} 保持单括号,否则会触发 KeyError。Agent Plan 接入方式
如果已经开通方舟 Agent Plan,可以使用对应的 Agent Plan API Key。配置结构不变,只需要将 YOUR_API_KEY_HERE 替换为控制台生成的密钥。示例中的密钥是占位符:
headers:
Content-Type: application/json
Authorization: Bearer ark-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx-xxxxx
X-Traffic-Tag: skill_web_search_common可从 火山方舟 Agent Plan 控制台 查看当前套餐和 API Key。不要把真实密钥写进公开仓库、截图或文章;更稳妥的做法是通过环境变量或私有配置注入。
第二个坑:引擎名不能包含下划线
SearXNG 会校验引擎名称。这里应使用 doubao-search,不要写成 doubao_search,否则可能出现:
Engine name contains underscore连字符 - 可以使用,下划线 _ 不行。这个错误与 API 本身无关,发生在 SearXNG 加载配置阶段。
重启并验证配置
保存 settings.yml 后重启 SearXNG 容器:
docker restart searxng随后访问下面的 JSON 搜索接口,将主机和端口替换为自己的部署地址:
http://你的地址:端口/search?q=测试&format=json检查返回结果里是否出现 doubao-search 引擎。如果没有,查看容器日志:
docker logs searxng | grep doubao常见问题排查
| 现象 | 可能原因 | 处理方式 |
|---|---|---|
| 启动时报 KeyError | JSON 大括号未双写 | 保留 {query},其余改为双括号 |
| 返回 401 | API Key 错误、类型不匹配或无权限 | 重新生成密钥并确认服务授权 |
| 引擎加载失败 | 名称包含下划线 | 改为 doubao-search |
| JSON 有结果但 OpenClaw 看不到 | OpenClaw 的 SearXNG 地址或格式配置错误 | 先单独验证 SearXNG JSON 接口,再检查 Agent 配置 |
最终效果与实际建议
配置完成后,OpenClaw 的搜索请求先进入 SearXNG,豆包搜索成为聚合结果中的一个稳定中文信源。相比完全依赖海外免费搜索引擎,中文查询的可用性通常更好,也降低了单个引擎失效导致整个 Agent 无法检索的风险。
豆包产品信息可查看 豆包站内详情页。不过,建议不要只启用一个引擎:保留 Bing、Brave 或其他可用信源,并通过 SearXNG 做聚合和容灾,效果通常比单一路径更稳。
安全与维护提醒
- 不要在公开配置、日志截图或 Git 仓库中暴露 API Key。
- 修改前备份
settings.yml,升级 SearXNG 后重新验证 json_engine 配置。 - 对搜索结果保持交叉验证,摘要不等于原文事实。
- 定期查看调用次数、AFP 消耗和异常日志,避免密钥泄露导致额外费用。
总结
通过 SearXNG 的 json_engine,只需在 settings.yml 增加一段配置,就能把豆包搜索接入 OpenClaw 的检索链路。关键点只有三个:请求体大括号要双写、引擎名使用连字符、API Key 类型必须匹配。
完成后先用 SearXNG 的 JSON 接口独立验证,再接入 OpenClaw。这样排错路径更清晰,也能为后续增加其他搜索 API 留出空间。
说明:API 地址、免费额度与计费规则依据当前资料整理,可能随服务调整;实际使用前请以火山引擎控制台和 SearXNG 当前版本文档为准。
