OpenCode 怎么开启网络搜索?websearch 工具默认关闭的原因与配置方法
OpenCode 内置了联网搜索功能,但你第一次用它问”今天有什么新闻”的时候,大概率会碰壁——它要么说自己不知道,要么给一个明显过时的答案。
不是 Bug。OpenCode 团队把 websearch 默认关了,理由很简单:联网搜索会把你的提问内容发到外部服务器,这个动作该由你自己来决定开不开,而不是替你决定。
先搞清楚现状
截至 2026 年 8 月(v1.18.x),OpenCode 内置了两个搜索引擎:
- Exa——上线更早,也是大多数教程里提到的那个
- Parallel——后来加的,同样免 Key、免注册
两个都是 keyless MCP 服务,OpenCode 官方直连,不需要你去任何网站注册账号或申请 API Key。
另外,OpenCode v2 beta(命令是 opencode2)已经在测了,搜索体验有明显提升,还加了 Firecrawl 作为第三个可选引擎,并且可以在界面里直接切换——后面会单独聊这个。
两种开启方式,选一种就行
- 环境变量:命令短,改完重开终端就生效
- 配置文件:在
opencode.json里写几行,还能顺手设权限粒度
已经改过 OpenCode 配置文件(比如配过 MCP)的人,配置文件更顺手;其他情况环境变量最快。
macOS
环境变量
打开终端(Command + 空格 → 输入”终端”→ 回车),先试一次临时的:
OPENCODE_ENABLE_EXA=1 opencode
这行只管当前这个窗口。想永久生效,退出 OpenCode 后执行:
echo 'export OPENCODE_ENABLE_EXA=1' >> ~/.zshrc
没有任何提示就是成功了,Mac 终端就这样。关掉终端,开个新的,然后直接 opencode 启动就行。
如果你的 Mac 终端是 bash 而不是 zsh(执行
echo $SHELL看,输出带bash的就是),把~/.zshrc换成~/.bash_profile。
想用 Parallel 替代 Exa?把环境变量换一下:
echo 'export OPENCODE_ENABLE_PARALLEL=1' >> ~/.zshrc
echo 'export OPENCODE_WEBSEARCH_PROVIDER=parallel' >> ~/.zshrc
配置文件
终端里执行:
open -e ~/.config/opencode/opencode.json
文件不存在的话先建:
mkdir -p ~/.config/opencode && touch ~/.config/opencode/opencode.json
空文件就整段粘贴:
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"websearch": "allow"
}
}
文件里已经有内容(比如配过 MCP),就只把 "permission" 那块加进最外层大括号内,注意项与项之间用逗号隔开,最后一项后面不要逗号:
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"...你原来的内容..."
},
"permission": {
"websearch": "allow"
}
}
Command + S 保存,重启 OpenCode。
Windows
Windows 下的命令写法完全不同,Mac 那套照搬过来会报错。
环境变量
打开 PowerShell(开始菜单搜”PowerShell”,普通打开就行,不用管理员权限)。
临时试一次:
$env:OPENCODE_ENABLE_EXA = "1"; opencode
永久生效,退出 OpenCode 后执行:
[Environment]::SetEnvironmentVariable("OPENCODE_ENABLE_EXA", "1", "User")
没有报红字就是成功了。关掉 PowerShell,开个新的,然后 opencode 启动。
想用 Parallel:
[Environment]::SetEnvironmentVariable("OPENCODE_ENABLE_PARALLEL", "1", "User")
[Environment]::SetEnvironmentVariable("OPENCODE_WEBSEARCH_PROVIDER", "parallel", "User")
不想敲命令的话:Win + R → 输入 sysdm.cpl 回车 → 切到”高级”选项卡 → 点”环境变量” → 在上半部分”用户变量”里新建,变量名 OPENCODE_ENABLE_EXA,变量值 1。改完一样要开新窗口。
用 CMD 而不是 PowerShell 的人,对应命令是
setx OPENCODE_ENABLE_EXA 1,同样只对新窗口生效。
配置文件
PowerShell 里执行:
notepad $env:USERPROFILE\.config\opencode\opencode.json
找不到文件的话先建目录:
New-Item -ItemType Directory -Force -Path $env:USERPROFILE\.config\opencode
记事本问要不要新建时点”是”。内容和 Mac 一样:
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"websearch": "allow"
}
}
保存时注意把编码选成 UTF-8(别用 ANSI),文件名确认是 opencode.json 而不是 opencode.json.txt——不放心就在”保存类型”里选”所有文件”。
权限的三个值
"allow" 可以换成另外两个:
| 值 | 效果 |
|---|---|
"allow" | AI 想搜就搜,不打扰你 |
"ask" | 每次搜索前问你一句 |
"deny" | 完全禁止 |
拿不准就先 "ask",烦了再改 "allow"。
另外,现在还支持按搜索内容做更细的控制:
{
"permission": {
"websearch": {
"*": "ask",
"documentation *": "allow"
}
}
}
这样搜文档类内容会自动放行,其他搜索还是会先问你。实际用下来,大多数人直接 "allow" 就够了。
验证
启动 OpenCode,问个不联网就答不上来的问题:
帮我搜一下今天有什么 AI 相关的新闻
如果配置生效,AI 回答之前会先闪一行调用记录:
→ websearch(query="今天 AI 相关新闻")
← [搜索结果摘要...]
看到 → websearch(...) 就说明真的联网搜了。
没看到?
大概率是没有开新窗口。环境变量必须在新窗口里才生效,这条能解决大半问题。
确认一下变量有没有写进去——新窗口里执行:
macOS:
echo $OPENCODE_ENABLE_EXA
Windows:
echo $env:OPENCODE_ENABLE_EXA
输出 1 说明没问题,空白就是没写进去。
如果 OpenCode 启动时报了 JSON 相关的错,多半是配置文件里逗号写错了——每两项之间要有逗号,最后一项后面不能有。把内容删掉重新粘一遍最简版本通常就好了。
websearch 和 webfetch 的区别
OpenCode 还有个 webfetch,不是一回事:
- websearch:你不知道答案在哪,让它去搜——“最近有什么新闻""这个库最新版本改了什么”
- webfetch:你已经有一个 URL,让它打开读内容——“帮我看看这个 GitHub Issue 说了什么”
简单说:没有网址用 websearch,有网址用 webfetch。
关于 OpenCode v2
OpenCode v2 正在 beta 测试,安装后运行 opencode2,不会覆盖 v1 的 opencode 命令,两个可以共存。
v2 在搜索方面有几个变化:
- 界面里可以直接选搜索引擎,不用再手动设环境变量
- 新增 Firecrawl 作为第三个搜索引擎,同样免 Key 免注册,号称 SimpleQA 准确率 94.7%
- dax(OpenCode 作者)在 8 月初说过”web search got a lot better”,实际体感确实有提升
- 配置格式有变化,权限从对象变成了数组:
"permissions": [{ "action": "websearch", "resource": "*", "effect": "allow" }]
如果你现在用的是 v1 并且搜索体验已经够用,不急着切。想尝鲜的话:
npm install -g @opencode-ai/cli@next
opencode2
v2 的完整迁移指南在 opencode.ai/v2/docs/migrate-v1。
隐私提醒
打开 websearch 之后,AI 每次判断需要查资料时都可能发起搜索请求,你的提问内容会被发送到 Exa 或 Parallel 的服务器。处理敏感信息时建议把权限设成 "ask",每次搜索过一下你的眼。