白嫖党福音:如何给 OpenClaw 装上免费联网搜索

前言:我想玩龙虾,但我不想掏钱

最近,OpenClaw 这个项目火遍了圈子,我也迫不及待地在自己的电脑上部署了一套,想让它成为我的 24 小时智能助理,也顺便想学习一下看看能给我的小落同学带来一些什么样的新思路。

然而,兴奋劲还没过,我就遇到了一个尴尬的现实问题:想要让它具备“联网搜索”能力,官方推荐的方案大多需要注册 API Key,要么有严格的免费额度限制,要么就得绑卡付费。

作为一个只想在本地跑跑实验、查查资料,既不想注册一堆账号,更不想每个月为几个搜索请求掏腰包的人,我觉得这很不爽。我的原则很简单:既然是本地部署的开源项目,那就应该尽可能地把控制权和数据隐私掌握在自己手里,而且——必须免费!

于是,我花了一个下午,调研了市面上所有的免费搜索方案,从阿里云百炼的免费额度,到 Tavily 的每月限额,再到 Google Serper 的试用陷阱。最终,我锁定并成功实施了一个完全免费、无需注册、纯本地运行的终极方案:DuckDuckGo + 自建 Python 脚本

现在,我的 OpenClaw 已经可以帮我查新闻、搜论文、核实事实,而我不需要花一分钱,也不用担心配额用完。

这篇文档就是我整个折腾过程的复盘。如果你也像我一样,想用 OpenClaw 又想极致省钱,那么请跟随我的脚步,我们一起把这个“免费永动机”装上去。


1. 我的方案选型心路历程

在动手之前,我像做侦探一样对比了所有可能的路径。以下是我当时的思考过程:

方案我的评价为什么我没选它?
A. 阿里云百炼/百度等大厂 API稳定是稳定,但太麻烦。我得注册账号、实名认证、创建应用、获取 Key。而且免费额度用完了怎么办?还要绑定支付宝?算了,太重了。
B. Tavily / Serper 等专用 API专为 AI 设计,很好用。每月只有几百次免费调用。对于我这种喜欢让 Agent 疯狂测试的人来说,两天就爆表了。还得时刻盯着配额,心累。
C. 自己写爬虫完全可控。维护成本太高了!Google 和 Bing 的反爬机制极其严格,我今天写好,明天可能就被封 IP 了。我不想把时间花在修爬虫上。
D. DuckDuckGo + ddgs完美平衡点!无需 Key、完全免费、库封装好了反爬、隐私极佳。 唯一的要求只是网络能通(这点我可以搞定)。这就是我要的!

我的结论

方案 D 是唯一符合我“白嫖且极客”精神的选项。它利用 Python 的 ddgs 库直接模拟浏览器请求 DuckDuckGo,把搜索能力变成了我本地代码的一部分。没有中间商赚差价,没有配额焦虑,只有纯粹的代码自由。


2. 我的实战搭建步骤

接下来,我把每一步操作都详细记录下来,你可以直接照着做。

第一步:清理环境,安装神器

首先,我打开终端(PowerShell),确保激活了我运行 OpenClaw 的那个 Python 环境。

我之前试过旧版的 duckduckgo-search,结果发现它已经改名了。为了不走弯路,我直接执行了以下命令:

# 如果有旧版,先卸载(没有也没关系)
pip uninstall duckduckgo-search -y

# 安装最新的核心库:ddgs
pip install ddgs

看到 Successfully installed ddgs-xxx 的时候,我知道第一步稳了。

第二步:编写我的专属搜索脚本

我不想直接用现成的轮子,因为我想控制输出的格式,让 OpenClaw 读得更舒服。

  1. 创建SKILL目录
    我进入了 OpenClaw 的技能目录:C:\Users\Administrator\.openclaw\workspace\skills\
    为了整洁,我新建了一个文件夹叫 search_web
  2. 实现duckduckgo的搜索代码
    在里面新建了 search_ddg.py,具体代码如下:
# search_ddg.py
# 导入最新的 ddgs 库
from ddgs import DDGS
import time

def search_web(query: str, max_results: int = 5) -> str:
    """
    【我的 OpenClaw 技能】使用 DuckDuckGo 搜索互联网实时信息。
    完全免费,无需 API Key。
    """
    if not query or len(query.strip()) == 0:
        return "❌ 错误:老板,你还没告诉我搜什么呢!"

    print(f"🔍 [Search Tool] 正在替您联网搜索: '{query}' ...")

    try:
        # 稍微延时,做个有礼貌的爬虫
        time.sleep(1) 

        results = []

        # 初始化客户端并执行搜索
        with DDGS() as ddgs:
            # 强制指定中文区域,让结果更符合我的阅读习惯
            search_results = ddgs.text(
                query, 
                max_results=max_results, 
                region="cn-zh" 
            )

            if not search_results:
                return f"⚠️ 很抱歉,我在网络上没找到关于 '{query}' 的相关信息。"

            for i, r in enumerate(search_results, 1):
                # 提取关键信息,防止报错
                title = r.get('title', '无标题')
                href = r.get('href', '无链接')
                body = r.get('body', '无摘要')

                # 格式化输出,让我家 Agent 一眼看懂
                result_str = (
                    f"[{i}] **{title}**\n"
                    f"   🔗 来源: {href}\n"
                    f"   📝 摘要: {body}\n"
                )
                results.append(result_str)

        # 组合最终返回给 Agent 的字符串
        final_output = (
            f"✅ 老大,我找到了 {len(results)} 条关于 '{query}' 的实时情报:\n\n" 
            + "\n".join(results)
        )
        return final_output

    except Exception as e:
        error_msg = str(e)
        # 针对网络问题的特别提示
        if "timeout" in error_msg.lower() or "connection" in error_msg.lower():
            hint = "💡 提示:好像连不上 DuckDuckGo,请检查你的网络代理设置哦。"
        else:
            hint = "💡 提示:可能是搜得太快了,稍等一会再试吧。"

        full_error = f"❌ 搜索出错了: {error_msg}\n{hint}"
        print(f"[Search Tool Error] {full_error}")
        return full_error

# 本地测试入口
if __name__ == "__main__":
    print(search_web("2026年最省钱的 AI 方案"))

这段代码是我借助OpenClaw生成的,加了中文区域限制、错误处理和友好的 Emoji 输出。

第三步:让 OpenClaw 认识这个新工具

保存好文件后,我重启了 OpenClaw。

幸运的是,我用的版本足够智能,它自动扫描到了 skills/search_web 目录下的新脚本。如果你重启后发现它还是“断网”状态,别慌,去检查一下 config.yaml,手动加上这段配置就行:

tools:
  - name: search_web
    description: "Search the web for real-time news using DuckDuckGo (Free & Local)."
    module: "search_web.search_ddg"
    function: "search_web"
    enabled: true

第四步:科学上网配置

这一步对我来说最关键。因为众所周知的原因,直连 DuckDuckGo 是会超时的。

我并没有在代码里硬编码代理(那样换节点太麻烦),而是利用了 ddgs 库支持环境变量的特性。我在启动 OpenClaw 之前,先在终端里设置了代理:

Windows PowerShell 用户(像我一样):

$env:HTTPS_PROXY="http://127.0.0.1:7890"  # 这里的 7890 换成你自己的代理端口
$env:HTTP_PROXY="http://127.0.0.1:7890"
# 然后再启动 openclaw
openclaw start

这样,我的搜索请求就会乖乖地通过我的代理通道出去,既免费又通畅。


3. 试用一下看看

一切准备就绪,康忙北鼻,来次够。

我输入:

“帮我查查 2026 年 3 月有没有什么新的免费大模型发布?我想省点钱。”

OpenClaw 的反应:

  1. 它停顿了一秒(在思考)。
  2. 终端后台跳出一行字:🔍 [Search Tool] 正在替您联网搜索: '2026 年 3 月 新的免费大模型' ...
  3. 几秒钟后,它回复我了:
    > “✅ 老大,我找到了 5 条关于 ‘2026 年 3 月 新的免费大模型’ 的实时情报:
    >
    > [1] Qwen3-Open 正式发布,完全免费开源…
    > 🔗 来源: https://…
    > 📝 摘要: 阿里通义千问团队今日宣布…
    >
    > [2] Llama-4-Community 版上线,社区免费可用…
    > …
    >
    > 根据搜索结果,确实有几个好消息!特别是 Qwen3-Open…”

哦耶。没有扣费短信,没有配额警告,搜索结果出来了。


4. 写在最后:给同样想省钱的你

省钱其实可以很简单哈,自己动手,丰衣足食。

这个方案给我的收获:

  • 真·零成本:以后不管我怎么搜,搜多少次,都不用花一分钱。
  • 掌控感:代码在我手里,想改搜索区域、想改结果数量,随时都能改。
  • 隐私安心:我的搜索记录不会上传到任何第三方 API 服务商的数据库里。

如果你也像我一样,是个喜欢本地部署、注重隐私、又想捂紧钱包的 AI 爱好者,那么强烈建议你试试这个方案

哪怕你不懂代码,只要复制粘贴我上面的步骤,你也一定能成功。让我们一起,用最少的钱,玩最酷的 AI! 🚀


作者:一个不想交月费的 OpenClaw 玩家
日期:2026 年 3 月 18 日