opencode 初探

前言

闲来刷 B 站的时候给我推了一个 opencode 的介绍视频,粗略看了一下发现界面还挺好看的(是的我就是因为觉得这个比较好看才去试试的 :laughing:

值得一提的是,到目前为止还是不能在 Windows 下使用的,我用的是 WSL2,所以是可以正常安装使用的,因此纯 Windows 的佬友可以退了哈哈哈 :wink:

或者你也可以看一看,关注一下这个项目,说不定后面也支持 Windows 了呢?

同时我需要声明一下,我仅仅只是简单使用了一下,并没有完全深度使用。个人觉得这样的工具还是很有意思的,是除了用官方 Claude Code 或者代理 Claude Code,或者官方 Gemini Code 等工具的一个新选择。如果想要更加详细了解这个使用情况的话,佬友可以自己动手尝试一下。也算是抛砖引玉,看看佬友们有没有什么高见,可以分享学习一下 :star_struck:

项目地址放下面了,Star 数还是不少的(截止 2025-07-06 有 9k):

GitHub - sst/opencode: AI coding agent, built for the terminal.

官方文档:

https://opencode.ai

启动后界面(我自己改了主题后的,用的是 tokyonight 主题):

聊天界面 + 解释(可以放大看一下):

在线分享界面(真的是在线的,很有趣很新颖。只要对话完毕之后,用 /share 命令即可,可以用 /unshare 命令取消):

体验感受

  1. 功能整体还是比较完善的,目前有以下命令:
命令 说明
/help 显示帮助
/editor 打开编辑器(需要先配置 EDITOR 环境变量,比如: export EDITOR=nvim)
/files 列出文件
/models 列出模型
/init 创建/更新 AGENTS.md
/compact 压缩会话
/sessions 列出会话
/new 新建会话
/share 分享会话
/unshare 取消分享会话
/themes 列出主题(主题还挺多)
/details 切换工具详情显示
/exit 退出应用
  1. 使用整体上和 Claude Code 和接近,但是对 / 指令识别没有那么准确。比如我明明已经清空了输入框,但是我输入 /unshare 却没有成功被识别为指令而被当作消息发送出去了。这一点小细节挺影响使用感的:

  1. 哪怕你仅仅只添加了一个模型,比如我仅仅添加了一个 DeepSeek-V3,但是因为配置文件的原因,导致会显示内置的 OpenAI 模型(我不知道是不是我的原因,总之我确实没有成功让其他的内置 OpenAI 模型不显示:

  1. 其他的暂且未知,因为我仅仅只是试用了一下,抛砖引玉,看看佬友们有没有什么高见 :partying_face:

配置文件分享

对于全局的配置文件,我们需要创建 ~/.config/opencode/config.json 文件

而对于项目级的配置文件,只需要在项目根目录下创建 opencode.json 文件即可

我的 config.json 文件内容如下:

{
    "$schema": "https://opencode.ai/config.json",
    "theme": "tokyonight",
    "provider": {
        "openai": {
            "api": "https://xxxx.com/v1",
            "name": "NewApi",
            "models": {
                "DeepSeek-V3-HuoShan": {
                    "name": "DeepSeek-V3",
                    "attachment": false,
                    "reasoning": false,
                    "temperature": true,
                    "tool_call": true,
                    "cost": {
                        "input": 0.00008,
                        "output": 0.00004
                    },
                    "limit": {
                        "context": 128000,
                        "output": 8000
                    }
                }
            },
            "options": {
                "apiKey": "sk-xxx"
            }
        }
    },
    "autoshare": false,
    "autoupdate": true
}

需要注意的是,因为 JSON 文件中无法写注释,上面的文件是便于一键复制所用的,下面我贴出的是配置文件解释:

{
    // 配置文件架构验证地址
    "$schema": "https://opencode.ai/config.json",
    // 主题设置,当前使用 tokyonight 主题
    "theme": "tokyonight",
    // 提供商配置
    "provider": {
        // 这里写 openai,表示使用兼容 OpenAI 的接口,并不能自定义,和 aider 类似
        "openai": {
            // API 接口地址,需要加上 /v1 后缀
            "api": "https://xxxx.com/v1",
            // 提供商显示名称,可以自定义,会显示在模型后面,可见我上面的图片查看效果
            "name": "NewApi",
            // 模型配置
            "models": {
                // 这里填写模型 ID 名,也就是调用的模型的 ID,而非自己的别称
                // 我使用了 NewApi 的模型重定向功能,因此模型名就是这样的
                "DeepSeek-V3-HuoShan": {
                    // 模型显示名称,这里才是写别称的地方
                    "name": "DeepSeek-V3",
                    // 是否支持附件
                    "attachment": false,
                    // 是否支持推理
                    "reasoning": false,
                    // 是否支持温度参数
                    "temperature": true,
                    // 是否支持工具调用
                    "tool_call": true,
                    // 费用配置
                    "cost": {
                        // 输入费用(暂不清楚计费是以 K 为单位还是 M)
                        // 可是写了似乎也无法生效,我上面图片也给出了
                        // 下面的输出费用和上下文长度也无法正常生效,输出长度未测试是否生效
                        "input": 0.00008,
                        // 输出费用(暂不清楚计费是以 K 为单位还是 M)
                        "output": 0.00004
                    },
                    // 模型限制配置
                    "limit": {
                        // 上下文长度限制
                        "context": 128000,
                        // 输出长度限制
                        "output": 8000
                    }
                }
            },
            // 额外选项配置
            "options": {
                // API 密钥
                "apiKey": "sk-xxx"
            }
        }
    },
    // 是否自动分享
    "autoshare": false,
    // 是否自动更新程序包
    "autoupdate": true
}

大家可以根据解释和官方示例进行自定义修改来满足自己的需求:

可选参数文档地址:

https://opencode.ai/config.json

官方的配置功能很多,也包括了 Mcp 的设置,不过因为我个人原因,我并没有配置 Mcp,有需要的佬友可以自己根据文档去配置一下

配置好以及安装好 opencode 之后,去到我们的工作目录下,然后终端输入 opencode 启动即可体验啦!!! :partying_face:

13 Likes

对了对了,最后补充一下,这个 opencode 内置的默认提示词挺多的,大概在 9-10k 左右(也许是 /init 提示词比较多,其他的因为我关 VSCode 了不太清楚了,也许只有 /init 会这么多?因为我也看到了有几次对话只有几百的提示):

3 Likes

初衷是好的,就是需要过多优化一下了

用佬友的config改了模型和API,进入后好像被认成codex mini,需要/models命令重新选择一下

谢谢佬友的分享

在自定义之后是要手动改一下的,按照文档的描述就是:

因为我给出的 JSON 中删去了 model 这个键值对(因为没必要),然后后面的 provider 配置的是 OpenAI 类型

根据我之前所说的,不会屏蔽掉内置 OpenAI 模型可知,如果你在写好配置文件后第一次启动 opencode,大概率会自动选择 OpenAI 的默认模型

以上是我自己的推测哈,总之建议手动切换一下就好了 :laughing:

2 Likes

不错不错 :nerd_face:

2 Likes

哈哈哈,我觉得这个很适合学习和日常辅助使用

不然平时用 roocode 那些 token 消耗太快(虽然可以通过覆盖系统提示词解决,但是我觉得这种 VSCode 插件还是受限制了,比如我用 idea 就不兼容了)

然后 copilot 偶尔回复缓慢或者工具调用失败(以及在 idea 中体验不佳)

还有 Claude code 使用需要用 Claude 模型获得较好的体验(虽然可以自定义但是似乎不能流式响应,然后其他模型对于工具调用不是很理想)

以及 Gemini code 回答需要等待(虽然可以切换为 flash 模型缓解)

最后则是 aider 那个让我看了无语的主题(不知道为啥它的回复中文字符显示以及主题怎么那么奇怪,尤其是显示代码的时候,我的是深色终端,为什么显示亮色的回复???)

的情况,都让人有些觉得在轻量使用下不太理想

比如我可能就仅仅想问个简单的问题,对于我而言,最舒服的体验应该就是打开终端然后问一下解决了直接关掉,我可以用 @ 来选择我需要问答的文件等(其实我也喜欢 zed 编辑器的那种和 copilot 差不多的体验,但是 zed 在历经几次更新之后,UI 细节等方面个人觉得完胜 VSCode 的 copilot !我觉得真的好看!只可惜我现在没有在用 Mac 而是 Windows。其实 Windows 上面也有编译好的 zed,通过 scoop 就可以下载到,但是我还没有尝试过,因为我主要用 WSL2)

所以这个 opencode 虽然有不少问题(其实还需要补充一点就是似乎如果将 editor 设置为 code,也就是 VSCode,会出现兼容性问题?写好提示词之后不上屏??也许是 WSL2 的问题,但是 Nvim 没有这个情况)

但是我还是很期待的(虽然我现在也不怎么用因为我的 copilot pro 还没有到期) :laughing:

真推荐你用用 zed 哈哈哈,虽然 Windows 下体验我还不太清楚,但是我在 Mac 上面轻量使用的时候,那个 AI 功能,我接入自己的 NewApi 后,体验也是很丝滑的

尤其是那个动效和 UI 设计,真的太喜欢了(虽然现在的 VSCode 的 copilot 动画也跟上来了,但是 zed 还是让我印象深刻! :star_struck:

感谢分享 我也刷到了一直没有试过

谢谢,windows的gemini cli 和cc用自定义api太麻烦了, oc没准是个好办法

佬友纯 Windows 目前似乎还是用不了的哦,开头有写的,不知道你是否顺利了 :laughing:

1 Like

这样子,白高兴一场了,谢谢佬提醒:bili_017:

佬 用gemini和ds效果怎么样呢?

目前来看的话,我因为才用了几次,但是我使用的就是火山的 DeepSeek-V3 模型,工具调用和总结什么的在我这都是正常工作的,效果应该还行吧?

我日常是用 copilot 多,这个工具我稍微用了一下之后就吃灰去了 :smiling_face_with_tear:

佬你可以自己尝试一下,我还没有测试它是否能够自动搜索或者索引仓库来自主获取代码片段或者上下文