暂无菜单项

给 SearXNG 接入豆包搜索,解决 OpenClaw 中文信源不稳定

发布于
14

OpenClaw 的联网搜索效果,很大程度上取决于信源。Google 在部分网络环境下不可用,Bing 偶尔不稳定,Startpage 和 DuckDuckGo 也可能触发验证码。即使部署了 SearXNG,底层搜索引擎一旦失效,Agent 得到的结果仍会变差。

一个实用的解决办法,是把豆包联网搜索接入 SearXNG,再让 OpenClaw 统一通过 SearXNG 搜索。这样既保留元搜索引擎的聚合能力,又增加一个更适合中文内容的信源。

SearXNG 聚合搜索引擎与 OpenClaw 搜索信源
SearXNG 聚合搜索引擎与 OpenClaw 搜索信源
整体链路:OpenClaw 发起搜索 → SearXNG 接收查询 → json_engine 调用豆包搜索 API → SearXNG 统一返回标题、链接和摘要。

查看 SearXNG 站内详情与部署入口

为什么给 SearXNG 增加豆包搜索?

SearXNG 是一个开源元搜索引擎,它不会自己生产搜索结果,而是向多个上游引擎发起请求,再统一聚合。因此,部署成功不代表信源永远稳定:免费引擎会修改接口、增加验证码或限制服务器 IP。

中文结果更友好
豆包搜索更容易覆盖中文网页、资讯和本地化内容。
JSON 结构稳定
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: false
最容易踩的坑:双大括号。json_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。不要把真实密钥写进公开仓库、截图或文章;更稳妥的做法是通过环境变量或私有配置注入。

注意:普通联网搜索 API Key 与 Agent Plan API Key 可能属于不同凭证体系。若出现 401,除了检查拼写,还要确认密钥类型、套餐状态和对应服务权限。

第二个坑:引擎名不能包含下划线

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 做聚合和容灾,效果通常比单一路径更稳。

我的观点:这套方案真正解决的不是“让 OpenClaw 能搜索”,而是把搜索信源从 Agent 本身解耦。以后更换上游 API,只需要调整 SearXNG,不必修改每个 Agent。对于长期运行的个人知识助手,这种中间层比绑定某一家搜索服务更容易维护。

安全与维护提醒

  • 不要在公开配置、日志截图或 Git 仓库中暴露 API Key。
  • 修改前备份 settings.yml,升级 SearXNG 后重新验证 json_engine 配置。
  • 对搜索结果保持交叉验证,摘要不等于原文事实。
  • 定期查看调用次数、AFP 消耗和异常日志,避免密钥泄露导致额外费用。

总结

通过 SearXNG 的 json_engine,只需在 settings.yml 增加一段配置,就能把豆包搜索接入 OpenClaw 的检索链路。关键点只有三个:请求体大括号要双写、引擎名使用连字符、API Key 类型必须匹配。

完成后先用 SearXNG 的 JSON 接口独立验证,再接入 OpenClaw。这样排错路径更清晰,也能为后续增加其他搜索 API 留出空间。

说明:API 地址、免费额度与计费规则依据当前资料整理,可能随服务调整;实际使用前请以火山引擎控制台和 SearXNG 当前版本文档为准。

常见问题(FAQ)

为什么要给 SearXNG 接入豆包搜索?
它可以为 OpenClaw 增加更适合中文内容的结构化搜索信源,并在其他免费搜索引擎触发验证码或限流时提供备用结果。
request_body 为什么要使用双大括号?
SearXNG json_engine 使用 Python format 处理请求体,JSON 自身的大括号必须转义为双括号;只有 {query} 等占位符保持单括号。
为什么 doubao_search 会加载失败?
SearXNG 引擎名称不能包含下划线,应改用连字符,写成 doubao-search。
配置完成后如何验证?
重启 SearXNG 后访问 /search?q=测试&format=json,检查返回结果是否包含 doubao-search;失败时通过 docker logs searxng 查看错误。
0 点赞
0 收藏
分享
0 讨论
反馈
0 讨论
热门最新
总结
暂无总结
0 / 600
嗨,下午好!
所有的成功,都源自一个勇敢的开始
近期热门