searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

玩转 AI Coding(二):基于opencode 的AI编程初体验

2026-05-08 16:26:21
85
0

玩转 AI Coding(二):基于opencode 的AI编程初体验

AI 工具概览

工欲善其事,必须先有器!要跑AI Coding,得先有个套AI 编程的工具。

市面上AI coding 的工具已经有很多,像 Cursor,Claude,Codex,Gemini等,想必已是耳熟能详。粗略地,可以将AI Coding 工具分为以下几类:

  • 补全 / 协助型
    典型是 GitHub Copilot。它最早给人的直觉,就是“​一个写在编辑器里的代码搭子​”。现在官方能力已经不只是补全了,还延伸到了 chat、代码解释、PR、coding agent 等 GitHub 工作流场景,但它的根仍然长在 IDE 和 GitHub 生态里。
  • IDE 一体化 AI 编辑器
    典型是 Cursor,还有更偏 AI-first IDE 路线的 TRAE。这类工具的优势是“​开箱即有感​”。你打开编辑器,它就已经在那儿了,解释代码、改文件、聊天、批量编辑,交互体验会比传统 IDE 插件更顺。TRAE 还会更强调 agent、builder、workspace 这类“​工作区式协作​”感。
  • 终端里的 agent 型工具
    典型是 Claude CodeCodexOpenCode。这类工具不只是陪你在编辑器里改几行代码,而是更像一个终端里的工程搭子:能读仓库、看文件、跑命令、给计划、改代码、做验证。差别在于它们各自的生态、云端策略、模型接入方式和权限边界设计不一样。这类工具是面向用户的的前侧agent,通常通过配置大模型接入地址和API_KEY实现大模型访问。
  • 云端代理 / 异步委托型
    这个方向 CodexGitHub Copilot coding agent 都比较典型。它们会把一部分编码任务放到云端或托管环境里异步跑,再把结果回给你。好处是能并行干活,坏处也很现实:企业里会立刻多出一堆需要审查的问题,比如环境隔离、代码边界、审计、网络路径、数据驻留。

让AI绘了张插图,大概长这样(随便看看,不要计较是非对错,不要计较图文无关):

course2-ai-coding-tool-landscape.png

公司为何推opencode

上图中,其他工具都是商业工具,仅opencode 是开源工具。

那么,是因为开源免费么?

呃,不全是...

商用工具不是原罪,核心的是安全边界

AI还处于飞速发展阶段,各大模型厂商 明里暗里 的收集用户数据用户模型训练。这在行业内是公认的。
但对于商业公司,软件代码资产是最核心资产之一,绝不可以随意共享、分发。so,商业化项目中使用AI模型 和AI工具,需要严把安全关(因AI泄露产品代码、功能、设计的例子早有先例)。

opencode是一个专注于AI Coding的本地工具,不涉及定制化大模型(广泛适配市面主流的大模型),没有后台调度;加之是开源工具,可以进行代码安全审计,整体风险是可控的!

天翼云有自己的大模型(息壤),就差一个前端应用工具......
这不,一拍即合!

在后续的教学和演示中,我们主要基于 opencode + 息壤GLM-5.x; 实际应用中,也是这一套。

opencode 安装

opencode 是一个终端 TUI工具,linux 和macos支持得好, PowerShell 不建议,体验不好; Windows上 在WSL中玩吧...

首先,你得先安装 node.js, 且要求版本大于 20.19.

然后,用npm安装即可:

npm install -g opencode-ai
opencode --version

接入息壤 GLM-5.x

opencode 采用json配置文件,在 ~/.config/opencode/opencode.json~/.config/opencode/opencode.jsonc

配置文件模板大概长这样:

{
  "share": "disabled",
  "provider": {
    "xirang": {
      "npm": "@ai-sdk/openai-compatible",
      "name": "Xirang",
      "options": {
        "baseURL": "https://YOUR-GATEWAY-URL/v1",
        "apiKey": "{env:XIRANG_API_KEY}"
      },
      "models": {
        "glm-5.1": {
          "name": "GLM-5.1"
        }
      }
    }
  }
}

其中,provider配置段提供了大模型的供应商信息, baseURL是模型接入地址, apiKey是模型访问授权的key。models配置支持的模型名称和参数(一般用默认参数即可)。

公司已全面开放 息壤 GLM-5.x给内部同事使用,请咨询各自部门接口人,申请获取到key。
我会在文末贴上息壤对接的配置文件,大家复制、粘贴后,填入自己的key即可使用。

注意:
我给出的通用配置中,没有字options中直接配置apiKey, 你可以在配置文件中填入,这样就可以直接使用。另一种更推荐的方式,是启动 opencode 后,通过 /connect 命令进行配置,避免静态配置文件存在的密钥泄露。

opencode

进入 TUI终端交互界面,然后输入 /models 命令进行模型选择; 找到息壤模型组选择 GLM-5.0 或 GLM-5.1。

上手体验

尝试让它写一个经典网页小游戏:推箱子。

先建一个项目目录,并启动 TUI

mkdir game
cd game
opencode

如输入需求:开发一个推箱子网页游戏
course2-first-project-promt.png

接下来是AI表演时间(摸鱼时间).....

AI一顿操作,然后提示: 已完成,打开sokoban.html 即可游戏

course2-game-screen-sc.png

Show time:

course2-project-done-sc.png

惊不惊喜?? 意不意外??

抛开效果不谈(怎么忍心抛开),你就说快不快吧?

就这?

不要慌,后续教程会一起探索如何做出产品级的效果

opencode 命令速览

不用背,大体了解有些啥东西,用到的时候再 help 看。

TUI 交互命令

在 TUI 界面内以 / 开头输入(括号内为快捷键,默认 leader 键为 ctrl+x)。

模型与 Provider:

名称 描述
/connect 选择并连接模型 provider,录入 API 凭证
/modelsctrl+x m 查看并切换当前可用模型
/variants 切换模型变体(如推理强度等)
/mcps 开关 MCP 服务器

会话管理:

名称 描述
/newctrl+x n 开新会话,防止上下文越聊越胖(别名/clear
/compactctrl+x c 压缩当前会话上下文(别名/summarize
/sessionsctrl+x l 查看并切换历史会话(别名/resume/continue
/fork 从指定消息分叉创建新会话
/rename 重命名当前会话
/timelinectrl+x g 跳转到会话中的指定消息

会话操作:

名称 描述
/undoctrl+x u 撤销上次对话及关联的文件变更(项目需在 Git 仓库中)
/redoctrl+x r 重做被/undo撤销的操作
/sharectrl+x s 分享当前会话,生成可分享链接
/unshare 取消当前会话的分享
/exportctrl+x x 导出当前对话为 Markdown,用默认编辑器打开
/copyctrl+x y 复制完整会话记录到剪贴板
/timestamps 开关消息时间戳显示

项目与设置:

名称 描述
/initctrl+x i 为项目创建或更新AGENTS.md,引导工具理解项目
/agentsctrl+x a 查看并切换当前使用的 agent(Build / Plan 等)
/editorctrl+x e 打开外部编辑器编写消息(需设置EDITOR环境变量)
/themesctrl+x t 查看并切换 TUI 主题
/thinking 切换模型思考/推理过程的显示
/detailsctrl+x d 切换工具执行详情的显示
/skills 查看当前项目可用的 skill 列表
/status 查看系统状态(LSP、MCP 连接等)
/helpctrl+x h 显示帮助对话框
/exitctrl+x q 退出 opencode(别名/quit/q

此外,在 TUI 内以 ! 开头可直接执行 Bash 命令,输出会作为工具结果加入对话:

!git status
!npm test
!python3 -m http.server 8080

CLI 命令

在终端直接执行的 opencode 命令:

名称 描述
opencode 启动 TUI 交互界面
opencode [项目路径] 对指定项目目录启动 TUI
opencode -c/opencode --continue 继续上次未完成的会话
opencode run "问题" 非交互式模式,适合快速问答和脚本化任务
opencode models [provider] 列出所有可用模型,可按 provider 过滤
opencode auth login 配置模型 provider 的 API 凭证
opencode session list 查看历史会话列表
opencode stats 查看 token 用量和费用统计
opencode export [sessionID] 导出指定会话为 JSON
opencode import <文件/链接> 从 JSON 文件或分享链接导入会话
opencode agent create 创建自定义 agent,配置 prompt 和权限
opencode mcp add 添加 MCP 服务器到配置
opencode serve 启动无头服务端,提供 HTTP API 访问
opencode web 启动带 Web 界面的服务端
opencode upgrade 升级 opencode 到最新版本

附录 - opencode 对接息壤配置模板

{
    "provider": {
        "ctyun": {
            "name": "天翼云息壤",
            "npm": "@ai-sdk/openai-compatible",
            "models": {
		"5fea387da7f54ba38eab3d4a4fb4e9d8":{
                     "name": "GLM-5.1",
	             "limit": {
                        "context": 204800,
                        "output": 131072
                    },
                    "cost": {
                        "input": 4,
                        "output": 16
                    },
                    "options": {
                        "max_tokens": 131072
                    }
		},
                "GLM-5": {
                    "name": "GLM-5",
                    "limit": {
                        "context": 204800,
                        "output": 131072
                    },
                    "cost": {
                        "input": 4,
                        "output": 16
                    },
                    "options": {
                        "max_tokens": 131072
                    }
                },
                "GLM-5-Pro": {
                    "name": "GLM-5-Pro",
                    "limit": {
                        "context": 204800,
                        "output": 131072
                    },
                    "cost": {
                        "input": 4,
                        "output": 18
                    },
                    "options": {
                        "max_tokens": 131072
                    }
                },
                "Qwen3-Coder-480B-A35B-Instruct": {
                    "name": "Qwen3-Coder-480B-A35B-Instruct",
                    "limit": {
                        "context": 65536,
                        "output": 32768
                    },
                    "cost": {
                        "input": 8,
                        "output": 16
                    }
                },
                "Qwen3.5-397B-A17B-Pro": {
                    "name": "Qwen3.5-397B-A17B-Pro",
                    "limit": {
                        "context": 65536,
                        "output": 16384
                    },
                    "cost": {
                        "input": 1.2,
                        "output": 7.2
                    }
                },
                "DeepSeek-V3.2-Standard": {
                    "name": "DeepSeek-V3.2-Standard",
                    "limit": {
                        "context": 131072,
                        "output": 16384
                    },
                    "cost": {
                        "input": 2,
                        "output": 3
                    }
                }
            },
            "options": {
                "baseURL": "https://wishub-x6.ctyun.cn/v1/"
            }
        }
   }
}
0条评论
0 / 1000
huskar
28文章数
3粉丝数
huskar
28 文章 | 3 粉丝
原创

玩转 AI Coding(二):基于opencode 的AI编程初体验

2026-05-08 16:26:21
85
0

玩转 AI Coding(二):基于opencode 的AI编程初体验

AI 工具概览

工欲善其事,必须先有器!要跑AI Coding,得先有个套AI 编程的工具。

市面上AI coding 的工具已经有很多,像 Cursor,Claude,Codex,Gemini等,想必已是耳熟能详。粗略地,可以将AI Coding 工具分为以下几类:

  • 补全 / 协助型
    典型是 GitHub Copilot。它最早给人的直觉,就是“​一个写在编辑器里的代码搭子​”。现在官方能力已经不只是补全了,还延伸到了 chat、代码解释、PR、coding agent 等 GitHub 工作流场景,但它的根仍然长在 IDE 和 GitHub 生态里。
  • IDE 一体化 AI 编辑器
    典型是 Cursor,还有更偏 AI-first IDE 路线的 TRAE。这类工具的优势是“​开箱即有感​”。你打开编辑器,它就已经在那儿了,解释代码、改文件、聊天、批量编辑,交互体验会比传统 IDE 插件更顺。TRAE 还会更强调 agent、builder、workspace 这类“​工作区式协作​”感。
  • 终端里的 agent 型工具
    典型是 Claude CodeCodexOpenCode。这类工具不只是陪你在编辑器里改几行代码,而是更像一个终端里的工程搭子:能读仓库、看文件、跑命令、给计划、改代码、做验证。差别在于它们各自的生态、云端策略、模型接入方式和权限边界设计不一样。这类工具是面向用户的的前侧agent,通常通过配置大模型接入地址和API_KEY实现大模型访问。
  • 云端代理 / 异步委托型
    这个方向 CodexGitHub Copilot coding agent 都比较典型。它们会把一部分编码任务放到云端或托管环境里异步跑,再把结果回给你。好处是能并行干活,坏处也很现实:企业里会立刻多出一堆需要审查的问题,比如环境隔离、代码边界、审计、网络路径、数据驻留。

让AI绘了张插图,大概长这样(随便看看,不要计较是非对错,不要计较图文无关):

course2-ai-coding-tool-landscape.png

公司为何推opencode

上图中,其他工具都是商业工具,仅opencode 是开源工具。

那么,是因为开源免费么?

呃,不全是...

商用工具不是原罪,核心的是安全边界

AI还处于飞速发展阶段,各大模型厂商 明里暗里 的收集用户数据用户模型训练。这在行业内是公认的。
但对于商业公司,软件代码资产是最核心资产之一,绝不可以随意共享、分发。so,商业化项目中使用AI模型 和AI工具,需要严把安全关(因AI泄露产品代码、功能、设计的例子早有先例)。

opencode是一个专注于AI Coding的本地工具,不涉及定制化大模型(广泛适配市面主流的大模型),没有后台调度;加之是开源工具,可以进行代码安全审计,整体风险是可控的!

天翼云有自己的大模型(息壤),就差一个前端应用工具......
这不,一拍即合!

在后续的教学和演示中,我们主要基于 opencode + 息壤GLM-5.x; 实际应用中,也是这一套。

opencode 安装

opencode 是一个终端 TUI工具,linux 和macos支持得好, PowerShell 不建议,体验不好; Windows上 在WSL中玩吧...

首先,你得先安装 node.js, 且要求版本大于 20.19.

然后,用npm安装即可:

npm install -g opencode-ai
opencode --version

接入息壤 GLM-5.x

opencode 采用json配置文件,在 ~/.config/opencode/opencode.json~/.config/opencode/opencode.jsonc

配置文件模板大概长这样:

{
  "share": "disabled",
  "provider": {
    "xirang": {
      "npm": "@ai-sdk/openai-compatible",
      "name": "Xirang",
      "options": {
        "baseURL": "https://YOUR-GATEWAY-URL/v1",
        "apiKey": "{env:XIRANG_API_KEY}"
      },
      "models": {
        "glm-5.1": {
          "name": "GLM-5.1"
        }
      }
    }
  }
}

其中,provider配置段提供了大模型的供应商信息, baseURL是模型接入地址, apiKey是模型访问授权的key。models配置支持的模型名称和参数(一般用默认参数即可)。

公司已全面开放 息壤 GLM-5.x给内部同事使用,请咨询各自部门接口人,申请获取到key。
我会在文末贴上息壤对接的配置文件,大家复制、粘贴后,填入自己的key即可使用。

注意:
我给出的通用配置中,没有字options中直接配置apiKey, 你可以在配置文件中填入,这样就可以直接使用。另一种更推荐的方式,是启动 opencode 后,通过 /connect 命令进行配置,避免静态配置文件存在的密钥泄露。

opencode

进入 TUI终端交互界面,然后输入 /models 命令进行模型选择; 找到息壤模型组选择 GLM-5.0 或 GLM-5.1。

上手体验

尝试让它写一个经典网页小游戏:推箱子。

先建一个项目目录,并启动 TUI

mkdir game
cd game
opencode

如输入需求:开发一个推箱子网页游戏
course2-first-project-promt.png

接下来是AI表演时间(摸鱼时间).....

AI一顿操作,然后提示: 已完成,打开sokoban.html 即可游戏

course2-game-screen-sc.png

Show time:

course2-project-done-sc.png

惊不惊喜?? 意不意外??

抛开效果不谈(怎么忍心抛开),你就说快不快吧?

就这?

不要慌,后续教程会一起探索如何做出产品级的效果

opencode 命令速览

不用背,大体了解有些啥东西,用到的时候再 help 看。

TUI 交互命令

在 TUI 界面内以 / 开头输入(括号内为快捷键,默认 leader 键为 ctrl+x)。

模型与 Provider:

名称 描述
/connect 选择并连接模型 provider,录入 API 凭证
/modelsctrl+x m 查看并切换当前可用模型
/variants 切换模型变体(如推理强度等)
/mcps 开关 MCP 服务器

会话管理:

名称 描述
/newctrl+x n 开新会话,防止上下文越聊越胖(别名/clear
/compactctrl+x c 压缩当前会话上下文(别名/summarize
/sessionsctrl+x l 查看并切换历史会话(别名/resume/continue
/fork 从指定消息分叉创建新会话
/rename 重命名当前会话
/timelinectrl+x g 跳转到会话中的指定消息

会话操作:

名称 描述
/undoctrl+x u 撤销上次对话及关联的文件变更(项目需在 Git 仓库中)
/redoctrl+x r 重做被/undo撤销的操作
/sharectrl+x s 分享当前会话,生成可分享链接
/unshare 取消当前会话的分享
/exportctrl+x x 导出当前对话为 Markdown,用默认编辑器打开
/copyctrl+x y 复制完整会话记录到剪贴板
/timestamps 开关消息时间戳显示

项目与设置:

名称 描述
/initctrl+x i 为项目创建或更新AGENTS.md,引导工具理解项目
/agentsctrl+x a 查看并切换当前使用的 agent(Build / Plan 等)
/editorctrl+x e 打开外部编辑器编写消息(需设置EDITOR环境变量)
/themesctrl+x t 查看并切换 TUI 主题
/thinking 切换模型思考/推理过程的显示
/detailsctrl+x d 切换工具执行详情的显示
/skills 查看当前项目可用的 skill 列表
/status 查看系统状态(LSP、MCP 连接等)
/helpctrl+x h 显示帮助对话框
/exitctrl+x q 退出 opencode(别名/quit/q

此外,在 TUI 内以 ! 开头可直接执行 Bash 命令,输出会作为工具结果加入对话:

!git status
!npm test
!python3 -m http.server 8080

CLI 命令

在终端直接执行的 opencode 命令:

名称 描述
opencode 启动 TUI 交互界面
opencode [项目路径] 对指定项目目录启动 TUI
opencode -c/opencode --continue 继续上次未完成的会话
opencode run "问题" 非交互式模式,适合快速问答和脚本化任务
opencode models [provider] 列出所有可用模型,可按 provider 过滤
opencode auth login 配置模型 provider 的 API 凭证
opencode session list 查看历史会话列表
opencode stats 查看 token 用量和费用统计
opencode export [sessionID] 导出指定会话为 JSON
opencode import <文件/链接> 从 JSON 文件或分享链接导入会话
opencode agent create 创建自定义 agent,配置 prompt 和权限
opencode mcp add 添加 MCP 服务器到配置
opencode serve 启动无头服务端,提供 HTTP API 访问
opencode web 启动带 Web 界面的服务端
opencode upgrade 升级 opencode 到最新版本

附录 - opencode 对接息壤配置模板

{
    "provider": {
        "ctyun": {
            "name": "天翼云息壤",
            "npm": "@ai-sdk/openai-compatible",
            "models": {
		"5fea387da7f54ba38eab3d4a4fb4e9d8":{
                     "name": "GLM-5.1",
	             "limit": {
                        "context": 204800,
                        "output": 131072
                    },
                    "cost": {
                        "input": 4,
                        "output": 16
                    },
                    "options": {
                        "max_tokens": 131072
                    }
		},
                "GLM-5": {
                    "name": "GLM-5",
                    "limit": {
                        "context": 204800,
                        "output": 131072
                    },
                    "cost": {
                        "input": 4,
                        "output": 16
                    },
                    "options": {
                        "max_tokens": 131072
                    }
                },
                "GLM-5-Pro": {
                    "name": "GLM-5-Pro",
                    "limit": {
                        "context": 204800,
                        "output": 131072
                    },
                    "cost": {
                        "input": 4,
                        "output": 18
                    },
                    "options": {
                        "max_tokens": 131072
                    }
                },
                "Qwen3-Coder-480B-A35B-Instruct": {
                    "name": "Qwen3-Coder-480B-A35B-Instruct",
                    "limit": {
                        "context": 65536,
                        "output": 32768
                    },
                    "cost": {
                        "input": 8,
                        "output": 16
                    }
                },
                "Qwen3.5-397B-A17B-Pro": {
                    "name": "Qwen3.5-397B-A17B-Pro",
                    "limit": {
                        "context": 65536,
                        "output": 16384
                    },
                    "cost": {
                        "input": 1.2,
                        "output": 7.2
                    }
                },
                "DeepSeek-V3.2-Standard": {
                    "name": "DeepSeek-V3.2-Standard",
                    "limit": {
                        "context": 131072,
                        "output": 16384
                    },
                    "cost": {
                        "input": 2,
                        "output": 3
                    }
                }
            },
            "options": {
                "baseURL": "https://wishub-x6.ctyun.cn/v1/"
            }
        }
   }
}
文章来自个人专栏
文章 | 订阅
0条评论
0 / 1000
请输入你的评论
0
0