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 下,直接 opencode 或 opencode 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 里连接
-
去 智谱开放平台 申请 API Key;
-
终端执行
opencode进 TUI,输入/connect; -
选智谱相关提供商(Zhipu AI 或 Models.dev 里的),填 API Key;
-
在模型列表里选 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 把「只读分析」和「动手改代码」拆成两个模式:Plan 和 Build,用 Tab 切换。这点搞清楚了,后面用起来会顺很多。
一句话:Plan 只读、只规划;Build 能读能写能跑命令。拿不准就先 Plan,想好了再切 Build。
Plan:只读、只规划
在 Plan 下,AI 只能读文件、搜代码、列目录、拉网页,不能改你项目里的源码,也不能随便跑会改数据的命令(只能动 .opencode/plans/*.md 这类计划文件)。适合:
-
刚接一个陌生仓库,想先摸清结构和入口;
-
做 code review,让 AI 分析逻辑但别动代码;
-
大重构或新功能前,先让 AI 给出步骤和影响,再决定要不要动手。
用的时候先按 Tab 切到 Plan,然后比如输入:「分析 src/main.js 和 src/router/index.js,说说入口和路由是怎么挂上的」或者「列出 src/views、src/layout 下的文件,简单说下各自干啥」。AI 会用 read、grep、glob、list 之类的工具给你结论,不会改任何代码,心里比较踏实。在 hw_demo 里,用 Plan 分析 DocPage.vue 和 DocLayout.vue 的关系、或者「文档页里用了哪些组件」都很合适。
Build:读写 + 跑命令
Build 下就放开了:读、写、改文件,跑 npm install、pnpm 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 之间切,状态栏会变。
-
/exit 或 Ctrl+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.vue和src/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 build、npm run test。
前后端两个目录就开两个终端、各跑一个 opencode,一个改 Vue 一个改 Nest,互不干扰。联调时把接口约定或报错贴给 OpenCode,让它改对应那端就行。
小结
在 Vue3 + NestJS + GLM-4.7 这套里,OpenCode 用下来的感觉就是:进项目目录、Plan 分析、Build 改代码、/undo 兜底,再配合 pnpm dev / npm run build 验证,形成闭环。GLM-4.7 对中文和代码生成都够用。
一次完整流程(从零到改完代码)
如果你想按步骤走一遍,可以这样来:
-
看环境 — 终端里
node -v、which opencode、opencode auth list(我这边是 0 credentials,靠配置文件)。 -
进项目 —
cd /Users/sesar/study/hw_demo,后面所有 opencode 都基于这个目录。 -
开 TUI —
opencode,看到状态栏和对话区。没配模型的话先去/connect或写好~/.config/opencode/opencode.json。 -
选 Agent — Tab 切 Plan 或 Build,想改代码就选 Build。
-
Plan 试一次 — 输入:「分析
src/App.vue、src/main.js和src/router/index.js的职责,用一两句话说明入口和路由怎么挂的。」AI 会只读并总结。 -
Build 试一次 — 切到 Build,输入:「在
src/views下新建 About.vue,标题写“关于我们”;在src/router/index.js里给/about加一条路由,父级用 DocLayout。」AI 会建文件、改路由,不满意就/undo。 -
本地验证 — 项目根执行
pnpm dev,浏览器打开/和/about看效果(如果 AI 已经跑过 dev server,注意别端口冲突)。 -
可选: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。
我自己遇到的几点:
-
模型列表 — 没在 TUI 里
/connect或auth login时,opencode models可能只看到一个自定义 provider(比如myprovider/ep-xxx)。在 TUI 里连好提供商、填 API Key、选 GLM-4.7 后,列表里才会有。 -
opencode run要等一会儿 — 跑「列出 src 目录」这类命令会发起一整轮会话,等模型响应和工具调用,几十秒很正常;超时就看下 API Key 和网络,或者改用 TUI 交互。 -
工作目录要对 — OpenCode 认的是「当前工作目录」当项目根,所以一定要先
cd到项目根再opencode或opencode run,不然 AI 找不到src、package.json。 -
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 login、opencode session、opencode upgrade、opencode 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