OpenCode 怎么开启网络搜索?websearch 工具默认关闭的原因与配置方法
用 OpenCode 聊起”今天有什么新闻""这个库最新版本改了什么”这类问题时,你可能会发现 AI 直接说自己不知道、或者答案明显停留在训练数据的旧版本——因为 OpenCode 自带的联网搜索工具 websearch,默认是关着的。
这不是 Bug,是刻意的隐私设计:联网搜索意味着把你的问题发到外部服务,OpenCode 选择让用户自己决定要不要打开这个口子,而不是默认帮你打开。
两种开启方式
方式一:设置环境变量(最简单)
打开终端,直接带着这个环境变量启动:
OPENCODE_ENABLE_EXA=1 opencode
如果想让它一直生效、不用每次启动都带这个前缀,写进 ~/.zshrc(Mac 默认用的 shell 配置文件):
echo 'export OPENCODE_ENABLE_EXA=1' >> ~/.zshrc
保存后关掉终端,重新开一个新的(老规矩,改了环境变量必须开新窗口才生效),之后每次打开 OpenCode,websearch 都是可用状态。
方式二:写进配置文件
如果你不想碰环境变量,也可以直接在配置文件里声明权限。用之前教过的方法打开配置文件:
open -e ~/.config/opencode/opencode.json
在里面加上 permission 字段:
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"websearch": "allow"
}
}
"allow" 表示直接放行,不用每次都手动确认。如果想要每次搜索前都问你一下,可以改成 "ask";完全不想用就写 "deny"。
两种方式选一种就够,不用重复设置。
为什么不用申请 API Key
这是 websearch 工具比大多数 MCP 服务省心的地方:它背后连的是 Exa AI 提供的搜索服务,而且是 OpenCode 官方内置直连的,不需要你自己去 Exa 官网注册账号、拿 Key、再填进配置文件——开关一开,直接能用。
如果你读过本站另一篇 OpenCode 配置 MCP 教程,会发现那里教的 Tavily、Context7 这些搜索类服务都得自己注册账号、管理 Key;websearch 走的是完全不同的内置通道,两者可以同时存在,互不冲突,只是配置的方式不一样。
验证是否真的开了
打开 OpenCode 进入对话,直接问一句需要联网信息才能回答的问题,比如:
帮我搜一下今天有什么 AI 相关的新闻
如果配置生效,回复前会出现一小段调用过程提示,类似:
→ websearch(query="今天 AI 相关新闻")
← [搜索结果摘要...]
看到这一行 → websearch(...) 说明确实在联网搜索,而不是凭训练数据里的旧信息硬编。如果模型直接回答、没有这段调用痕迹,说明前面的开关没生效——检查一下环境变量是不是写进了正确的 shell 配置文件(Mac 新版本默认是 ~/.zshrc,不是老版本的 ~/.bash_profile),或者配置文件里的 "websearch": "allow" 有没有存盘。
websearch 和 webfetch 的区别,别搞混
OpenCode 还自带一个叫 webfetch 的工具,很容易和 websearch 搞混,官方给出的区分很直接:
websearch:用于”发现”——你还不知道答案在哪,需要先搜一圈找线索,比如”最近有什么新闻""这个问题有没有人讨论过”。webfetch:用于”获取”——你已经有了一个具体网址,只是想让 AI 打开这个链接、把内容读进来,比如”帮我看看这个 GitHub Issue 里说了什么”。
简单说:不知道该查哪个网址时用 websearch,已经有网址了用 webfetch。
一点提醒
打开 websearch 之后,AI 每次判断”需要查资料”时都可能主动发起搜索请求,这意味着你的提问内容会被发送到 Exa 的服务器。如果你处理的是涉及公司机密或敏感信息的会话,建议把权限设成 "ask",让每次搜索前都经过你手动确认,而不是设成 "allow" 全自动放行。