OpenCode体验2

5 阅读15分钟

OpenCode 使用体验文档

在 Vue3 + NestJS 项目里接上 GLM-4.7,从安装到实际改代码的一手体验。


我用的环境

写这篇文档时,所有操作都在自己电脑上跑过一遍,环境如下,方便你对照。

| 项目 | 实际环境 |

|------|----------|

| 系统 | macOS(darwin) |

| Node | v24.13.0(nvm) |

| 包管理 | pnpm 11.11.0 |

| 前端项目 | /Users/sesar/study/hw_demo(Vue 3.5 + Vue Router 4 + Vite 7) |

| 后端 | NestJS,和前端分离联调 |

| 用的模型 | GLM-4.7(自定义 provider 接入) |

| OpenCode 配置 | 全局配置在 ~/.config/opencode/,数据在 ~/.local/share/opencode/ |

opencode auth list 会看到 0 credentials,因为没走 OAuth,而是直接在配置文件里写了 provider 和 API Key,一样能用 GLM-4.7。具体配置下一节会说到。


OpenCode 是什么

OpenCode 是一个开源的 AI 编程助手:在终端、IDE 或桌面里,用自然语言让它帮你读代码、改代码、跑命令。和 Cursor、Copilot 有点像,但完全开源,可以接各种模型(包括自建),而且强调隐私——不存你的代码和对话。

我这段时间主要在 Vue3 的 hw_demo 和 NestJS 项目里用,模型接的是 GLM-4.7。下面写的都是实际用下来的感受和操作,偏「用起来怎么样」而不是纯功能介绍。


安装与首次启动

安装

一条命令搞定(官方推荐):


curl -fsSL https://opencode.ai/install | bash

用 npm、Homebrew、Bun 也行,比如 brew install opencode。装好后在终端敲 opencode 就能进 TUI。要求不高:Node.js v18+,终端别太老(iTerm2、Kitty、WezTerm 之类都行)。我这边是 nvm 装的 Node,which opencode 在 node 的 bin 下,直接 opencodeopencode run "..." 都能用。

第一次用:连模型

第一次跑 opencode 会进到一个终端里的交互界面(TUI)。想用 AI,得先接上模型,方式很多:

  • GitHub Copilot:用 GitHub 账号登录,走你的 Copilot 订阅;

  • ChatGPT Plus/Pro:用 OpenAI 登录,走现有额度;

  • 其他:通过 Models.dev 等能接 75+ 家厂商,Claude、Gemini、本地模型都可以。

如果你已经有 ChatGPT Plus,在 TUI 里按提示做 OAuth 就行,不用额外付费。接好后,在项目目录下执行 opencode,就可以直接跟 AI 用自然语言说需求了。

项目初始化(可选)

在项目根目录输入 /init,会生成 AGENTS.md 之类文件,用来描述项目结构和约定,AI 后面理解「这项目干嘛的」「该在哪加功能」会准很多。不是必做,但做了挺值,建议把生成的文件也一起提交到 Git。

接 GLM-4.7 的两种方式

方式一:智谱开放平台 + TUI 里连接

  1. 智谱开放平台 申请 API Key;

  2. 终端执行 opencode 进 TUI,输入 /connect

  3. 选智谱相关提供商(Zhipu AI 或 Models.dev 里的),填 API Key;

  4. 在模型列表里选 GLM-4.7(或类似 zhipuai/glm-4.7 的名字)即可。

方式二:写配置文件(适合编码、自建端点)

用智谱的 Coding 专用接口时,要在配置里写清楚端点。在 ~/.config/opencode/opencode.json(或项目根目录的 opencode.json)里加:


{

"$schema": "https://opencode.ai/config.json",

"provider": {

"zhipuai": {

"api": "https://open.bigmodel.cn/api/coding/paas/v4"

}

}

}

保存后,在 TUI 里选对应 GLM 模型就能用。我这边是自定义 provider + GLM-4.7 端点,跑 opencode models 会看到类似 myprovider/ep-xxx。GLM-4.7 对中文提示和工具调用都挺稳,配合后面说的 Plan/Build 用起来很顺。

配置文件长什么样(不写密钥)

全局配置在 ~/.config/opencode/opencode.json,决定用哪个模型、走哪个 API。

  • provider:可以配多个。我用的就是一个自定义 provider,类型是 OpenAI 兼容(@ai-sdk/openai-compatible),baseURL 指到推理服务(比如火山引擎 ARK 或智谱兼容端点),options 里放 apiKey,这样不用在 TUI 里 OAuth 也能用 GLM-4.7。

  • provider.xxx.models:这个 provider 下的模型 ID 和显示名,比如某个 ep-xxx 对应「GLM-4-7-ep-...」。

  • model:默认模型,格式 provider名/模型ID

  • enabled_providers:启用哪些 provider。

改完配置不用重启,下次开 opencode 会自动读。想按项目覆盖的话,在项目根放一份 opencode.json 就行,写法一样。


Plan 和 Build:先想清楚再动手

OpenCode 把「只读分析」和「动手改代码」拆成两个模式:PlanBuild,用 Tab 切换。这点搞清楚了,后面用起来会顺很多。

一句话:Plan 只读、只规划;Build 能读能写能跑命令。拿不准就先 Plan,想好了再切 Build。

Plan:只读、只规划

在 Plan 下,AI 只能读文件、搜代码、列目录、拉网页,不能改你项目里的源码,也不能随便跑会改数据的命令(只能动 .opencode/plans/*.md 这类计划文件)。适合:

  • 刚接一个陌生仓库,想先摸清结构和入口;

  • 做 code review,让 AI 分析逻辑但别动代码;

  • 大重构或新功能前,先让 AI 给出步骤和影响,再决定要不要动手。

用的时候先按 Tab 切到 Plan,然后比如输入:「分析 src/main.jssrc/router/index.js,说说入口和路由是怎么挂上的」或者「列出 src/viewssrc/layout 下的文件,简单说下各自干啥」。AI 会用 read、grep、glob、list 之类的工具给你结论,不会改任何代码,心里比较踏实。在 hw_demo 里,用 Plan 分析 DocPage.vueDocLayout.vue 的关系、或者「文档页里用了哪些组件」都很合适。

Build:读写 + 跑命令

Build 下就放开了:读、写、改文件,跑 npm installpnpm dev 之类的都行。适合加功能、修 bug、加注释、重构、新建文件、改配置。

切到 Build 后,直接说「给 src/main.js 加几句注释」「在 src/views 下新建 About.vue,并在 router 里加 /about 路由」就行。在 hw_demo 里也可以说「在 DocLayout 的 children 里加一条路由指向新组件」「给 DocPage.vue 的 .doc-title 加个响应式 font-size」之类的。改错了就用 /undo 撤掉上一轮,再重新说需求。

小结

先 Plan 再 Build 很实用:先让 AI 分析依赖和调用关系(Plan),看完了再让它按分析去抽函数、改文件(Build)。这样不会误改,可控。唯一要记得:想让它改代码时,一定确认当前是 Build,不然它会一直只读,新手容易在这儿懵一下。


工具体验:AI 的「手和眼」

OpenCode 给 AI 配了一组内置工具,你主要用自然语言下指令,它会自己选用哪个工具。稍微了解一下,你提需求时会更顺手。

| 工具 | 能干啥 |

|------|--------|

| read | 读文件,大文件可以按行范围读,适合看某段代码、读配置 |

| grep / glob / list | 搜内容、按模式找文件、列目录,适合「找谁调了某函数」「列出 src 下所有 .ts」 |

| edit | 对已有文件做精确字符串替换,AI 改代码主要靠它 |

| write | 新建文件或整文件覆盖,适合新组件、新脚本、README |

| bash | 在项目目录下跑 shell,装依赖、跑测试、起服务都行 |

| webfetch | 拉网页内容,查文档、看报错链接好用 |

| skill / todowrite / todoread | 加载技能、管理待办,复杂多步任务时让 AI 自己拆步骤、跟进度 |

用下来「先搜再改」「先读再写」都很自然,比如「把所有调旧 API 的地方改成新 API」,它会先 grep 定位,再 edit 一处一处改。在 hw_demo 里可以这样玩:让 AI「读 src/views/DocPage.vue 前 30 行」「在 src 下搜包含 router-view 的文件」「列出所有 src/**/*.vue」「把 DocPage.vue 里 .doc-title 的 font-size 改成 22px」「在 src/views 下新建 About.vue」「在项目根执行 pnpm dev 并告诉我端口」。如果是在共享或敏感环境,可以在配置里关掉某些工具(比如 bash、write)。


TUI 里常用的键和命令

opencode 之后是终端里的 TUI,不是独立窗口。大致三块:中间对话区、下面输入区、状态栏(当前是 Plan 还是 Build、用的啥模型)。

记这几个就够用了:

  • Tab — 在 Plan 和 Build 之间切,状态栏会变。

  • /exitCtrl+C — 退出。

  • /undo — 撤销上一轮 AI 对文件的改动(不删对话历史)。

  • /init — 在项目根生成 AGENTS.md 等,帮 AI 理解项目。

  • /connect — 连模型/换提供商(要是已经在配置文件里写了 API Key,可以不用)。

  • @ — 有的环境里能触发文件/符号的模糊搜索,方便在提示里引用项目文件。

第一次用建议先看一眼状态栏:别想改代码却一直停在 Plan。


多会话、分享、桌面版

同一个项目可以开多个会话,各自有对话历史,适合「一边修 bug 一边写新功能」两条线并行。会话还能生成分享链接,把某次对话和 AI 的修改发给同事或自己留档,协作和排查都很方便。

除了终端 TUI,OpenCode 还有桌面版(macOS / Windows / Linux),官网下就行。桌面版更像 IDE 侧栏聊天,不习惯纯终端的话可以试试;功能上和 CLI 一致,Plan/Build、多模型都支持。我自己的感觉是:终端适合「进目录敲一句就干一件事」的轻量用法,桌面版适合长时间对着一个项目边看边聊。


模型与成本

OpenCode 自己不卖模型,只是「接你已有的或你配的」。用 ChatGPT Plus 就扣你的 OpenAI 额度,用 GitHub 就走 Copilot;也可以接 Claude、Gemini、本地模型,在配置文件里指定。所以 花多少钱完全看你选的模型和用量,OpenCode 本身不额外收费。官方有 Zen 之类的精选列表,方便挑适合编程的模型。


隐私和配置

官方主打 隐私优先:不存你的代码和对话,数据直接和你选的模型服务商通信。公司内网、敏感项目可以只接本地或内网模型,代码不出网。工具开关、默认 Agent、模型参数等都能在配置文件(如 opencode.jsonc)里改,文档里都有写,按需调就行。


我用的 Vue3 项目长什么样(hw_demo)

下面是我实际体验时用的项目结构,这样你让 OpenCode「分析路由」或「在 views 下加页面」时,心里有数它会在哪些文件上动手。


hw_demo/

├── index.html # 入口 HTML

├── package.json # Vue 3、Vue Router、Vite

├── vite.config.js

├── src/

│ ├── main.js # createApp(App).use(router).mount('#app')

│ ├── App.vue # 根组件,就一个 <router-view />

│ ├── style.css

│ ├── router/index.js # DocLayout + 默认 DocPage,history 模式

│ ├── views/DocPage.vue # 文档页(华为云码道介绍)

│ ├── layout/

│ │ ├── DocLayout.vue # AppHeader + AppSidebar + Breadcrumb + router-view

│ │ ├── AppHeader.vue

│ │ └── AppSidebar.vue

│ ├── components/

│ │ ├── Breadcrumb.vue

│ │ └── HelloWorld.vue

│ └── assets/vue.svg

路由就是:/ 用 DocLayout,默认子路由是 DocPage;别的路径重定向到 /。所以你对 AI 说「在 views 下加个页面并挂到 router」,它会按这个结构去 read/edit/write。


在 Vue3 和 NestJS 里怎么用

Vue3 这边(hw_demo)

项目路径是 /Users/sesar/study/hw_demo,结构上一节已经写了。

进项目、开 TUI:


cd /Users/sesar/study/hw_demo

opencode

当前目录就是项目根,AI 的 read、grep、edit 都基于这个目录。

不开 TUI,直接跑一条指令:


opencode run "列出当前项目 src 目录下的文件结构,用 list 或 glob 工具"

会连上你配的模型(比如 GLM-4.7),让 AI 列完再输出,时间看网络和模型,可能要几十秒,适合脚本或快速看结构。

在 TUI 里:

  • Plan:可以说「分析 src/App.vuesrc/main.js 的职责,说说入口和路由怎么挂的」——AI 只读不写。

  • Build:可以说「在 src/views 下新建一个空白页面组件,并在 router 里加一条路由」——它会建 .vue、改路由,需要的话还能帮你跑 pnpm dev。改错了就 /undo

另外开一个终端跑 pnpm dev,再在另一个终端开 opencode 改代码,保存后 Vite 热更新,浏览器里马上能看到,这样配合很顺手。

NestJS 那边

后端是 Nest 的话,用法一样,只是先 cd 到后端项目根再 opencode

  • Plan:比如「分析 src/app.module.ts 和各个 module 的依赖」「找出所有带 @Injectable() 的 Service 并列出」——只读,熟悉项目用。

  • Build:比如「在 src 下新建 users 模块(controller、service、module),并注册到 AppModule」「给某接口加 class-validator 校验」——AI 会建/改 .ts,还能按需跑 npm run buildnpm run test

前后端两个目录就开两个终端、各跑一个 opencode,一个改 Vue 一个改 Nest,互不干扰。联调时把接口约定或报错贴给 OpenCode,让它改对应那端就行。

小结

在 Vue3 + NestJS + GLM-4.7 这套里,OpenCode 用下来的感觉就是:进项目目录、Plan 分析、Build 改代码、/undo 兜底,再配合 pnpm dev / npm run build 验证,形成闭环。GLM-4.7 对中文和代码生成都够用。

一次完整流程(从零到改完代码)

如果你想按步骤走一遍,可以这样来:

  1. 看环境 — 终端里 node -vwhich opencodeopencode auth list(我这边是 0 credentials,靠配置文件)。

  2. 进项目cd /Users/sesar/study/hw_demo,后面所有 opencode 都基于这个目录。

  3. 开 TUIopencode,看到状态栏和对话区。没配模型的话先去 /connect 或写好 ~/.config/opencode/opencode.json

  4. 选 Agent — Tab 切 Plan 或 Build,想改代码就选 Build。

  5. Plan 试一次 — 输入:「分析 src/App.vuesrc/main.jssrc/router/index.js 的职责,用一两句话说明入口和路由怎么挂的。」AI 会只读并总结。

  6. Build 试一次 — 切到 Build,输入:「在 src/views 下新建 About.vue,标题写“关于我们”;在 src/router/index.js 里给 /about 加一条路由,父级用 DocLayout。」AI 会建文件、改路由,不满意就 /undo

  7. 本地验证 — 项目根执行 pnpm dev,浏览器打开 //about 看效果(如果 AI 已经跑过 dev server,注意别端口冲突)。

  8. 可选:CLI 跑一条 — 退出 TUI,在同一目录执行:opencode run "用 list 列出 src 目录内容,用一句话总结子目录和文件",会跑完把结果打到终端,可能要等几十秒。

走完这一遍,就算是「安装 → 配置 → Plan 分析 → Build 改代码 → 验证 → CLI 单次任务」的完整体验了。


几种常见用法

用下来有几类场景特别顺手:

  • 读陌生项目 — 进一个没碰过的仓库,开 Plan,让 AI「先列出项目结构、入口和主要模块」,再针对某个文件问「这段干啥的、和谁有依赖」,全程只读,不会误改。

  • 修 Bug — 把报错或现象描述给 Build 的 AI,它会读文件、搜调用链,然后直接改代码,不对就 /undo

  • 写小工具/脚本 — 直接说「在项目里加一个某某功能的脚本」,AI 会建文件、写逻辑、必要时跑命令验证;复杂一点的可以说「用 TODO 跟踪进度」,让它分步做。

  • 代码审查和重构 — 先用 Plan 让 AI 分析「这段代码有啥问题、怎么重构更合适」,方案认可以后再切 Build 按计划改。

一句话:先想清楚再动手交给 Plan,动手改交给 Build,习惯之后效率会明显上来。


踩过的坑和一点建议

  • 学习成本 — Plan/Build、Tab、/init/undo 这些先看一遍官方「快速开始」会少走弯路。

  • 终端 — TUI 对终端和字体有要求,有的环境会乱码,可以试试桌面版。

  • 模型 — 代码质量和理解度取决于你接的模型,OpenCode 只负责调度,不背模型能力的锅。

  • 文档 — 官方以英文为主,中文多在社区,有问题可以查 GitHub Issues。

我自己遇到的几点:

  1. 模型列表 — 没在 TUI 里 /connectauth login 时,opencode models 可能只看到一个自定义 provider(比如 myprovider/ep-xxx)。在 TUI 里连好提供商、填 API Key、选 GLM-4.7 后,列表里才会有。

  2. opencode run 要等一会儿 — 跑「列出 src 目录」这类命令会发起一整轮会话,等模型响应和工具调用,几十秒很正常;超时就看下 API Key 和网络,或者改用 TUI 交互。

  3. 工作目录要对 — OpenCode 认的是「当前工作目录」当项目根,所以一定要先 cd 到项目根再 opencodeopencode run,不然 AI 找不到 srcpackage.json

  4. 0 credentials 也能用 — 我这边 opencode auth list 是 0 credentials,但因为配置文件里写了 provider 的 baseURL 和 apiKey,照样能用 GLM-4.7。如果你既配了文件又登录了,以实际生效的为准。

建议先在小项目或分支上玩几天,把 Plan/Build 和常用命令摸熟,再上正式项目。

常用命令速记

下面这些是我实际用过的,方便你对着试:

| 想干啥 | 命令 |

|--------|------|

| 看有啥命令 | opencode --help |

| 看登录/配置状态 | opencode auth list(我这边显示 0 credentials,靠配置文件) |

| 看可用模型 | opencode models |

| 进项目开 TUI | cd 项目根 && opencode |

| 不开 TUI 跑一条 | opencode run "你的指令"(会等一阵子) |

| 指定模型跑 | opencode -m provider/模型 run "指令" |

| 登录 / 会话 / 升级 / 统计 | opencode auth loginopencode sessionopencode upgradeopencode stats |


总结

在 macOS 上,用 Vue3(hw_demo)+ NestJS + GLM-4.7 跑了一段时间 OpenCode,整体感觉是:开源、模型可插、隐私做得明白,Plan/Build 把「先分析」和「再执行」分得很清楚。进项目目录、用中文给 GLM-4.7 下指令,读文件、改 Vue 或 Nest、跑 pnpm dev / npm run build 都能串成一条线,再加上 /undo 和前后端各一个目录,日常开发和联调都够用。如果你也是 Vue3 + NestJS,想用国产大模型做编码辅助,OpenCode 值得在本地试一轮。后面我还会随着版本和用得更多再补一点内容。


附录:子命令一览

opencode --help 里的一页纸版,方便查:

| 命令 | 说明 |

|------|------|

| opencode [project] | 启动 TUI,默认当前目录 |

| opencode run [message..] | 不开 TUI,直接跑一条指令 |

| opencode models [provider] | 列出可用模型 |

| opencode auth login/list/logout | OAuth 登录管理 |

| opencode session | 会话管理 |

| opencode upgrade [target] | 升级 |

| opencode stats | token 用量与成本 |

| opencode export/import | 导出/导入会话 |

| opencode serve / opencode web | 无头服务 / 带 Web 界面 |

| opencode -m provider/model | 指定模型 |

| opencode -c / -s <session> | 继续上一会话或指定会话 |


写于 2025 年 3 月 · 环境:macOS,Vue3(hw_demo)+ NestJS,GLM-4.7