0x00 背景
这是一个 AI 横行的时代,但很多人对 AI 的认知仍停留在「打开 ChatGPT 一问一答聊天」这个层面。
大家都知道 AI 很强,也隐约感觉它应该能参与工作、学习和生活里的具体场景,但真要落到自己的电脑、自己的流程、自己的数据上,却往往不知道第一步该从哪里开始。
与此同时,各大媒体平台每天都在抛出一堆新名词:Claude、OpenCode、Agent、Skill、MCP、FastGPT、LLM、RAG、小龙虾……它们究竟是什么?能解决什么问题?彼此之间是什么关系?如果只靠自媒体或短视频来理解,最后大概率只会得到一锅夹生饭 —— 名词听过不少,原理一窍不通。
其实本质概念不多,大多数新概念只是某一层概念上的迭代。
本文将抛弃那些花里胡哨的东西,从零开始,把搭建 AI 环境这件事讲清楚,让不管是文科还是理科背景的同学,都能在自己的电脑上跑起来一套实用的 AI 工具链。
本文不是 OpenClaw/小龙虾 部署教学。在我看来,它只是一个被媒体包装出来的概念,一个不成熟、不安全、不可信的半成品。AI 发展太快,媒体又擅长放大个体被时代淘汰的焦虑,于是这只恰好被风口吹起来的「毒虾」就有了流量。但等你真正理解并搭建出自己的 AI 环境后,会发现所谓的小龙虾并没有什么神秘之处 —— 它不过是用这些工具临时拼出来的、粗制滥造的产物罢了。
0x10 先旨声明
从客观的技术现状来看,在大部分 AI 应用场景里,海外模型、工具链和生态成熟度仍然领先于国内。
这不是立场站队,而是工程事实:谁的模型能力更强、工具更稳定、生态更完整,谁就更值得学习使用。
因此,本文后续介绍的 AI 工具、模型服务和相关文档,很多都需要能够科学上网才能获取或使用。建议先参考《trojan 睁眼看世界教程》或通过其他方式,确保你的电脑可以访问境外网站。否则很多步骤会卡在下载、登录、鉴权或 API 调用上,后面的内容也就无从谈起。
我一直认为技术无国界,但技术优势从来不会自动流向落后者。别人掌握更好的工具、更强的模型和更完整的生态时,封锁与壁垒就是很自然的结果。与其被某些假爱国口嗨的自媒体道德绑架/遮蔽认知,不如脚踏实地去学、去用、去追赶 —— 「师夷长技以制夷」,才是今时今日的唯一出路。
0x20 基础环境安装
在开始部署 AI 环境之前,需要先安装两个基础环境:
0x30 AI 环境演进
乍看之下,这几年 AI 生态日益繁杂,但 AI 环境的本质,就一条从「本地入口」到「上游模型」的调用链。
截至目前,这个调用链大体经历了 4 个演进阶段:
| 阶段 | 架构变化 | 原因 |
|---|---|---|
| 一 | 本地 Agent 直连大模型 | 用户使用 AI 的最简单结构,链路短、理解成本低 |
| 二 | 引入大模型网关 | 上游模型越来越多,需要统一 Key、计费、模型名和接口协议 |
| 三 | 引入 CC-Switch | 不同 Agent 的配置方式不同,频繁切换模型和 Provider 很麻烦 |
| 四 | 引入 Skill | 重复任务需要沉淀成可复用能力,减少随机输出和 Token 浪费 |
这四个阶段没有严格的时间线,而是 AI 从简单到复杂、从能用到好用的自然演进路径。
下文会按这个演进顺序展开:
- 先安装 Agent,让 AI 能在本地跑起来
- 再引入大模型网关,解决多模型接入问题
- 然后处理模型切换和配置管理
- 最后再谈 Skill,把重复任务沉淀成稳定能力
0x40 AI Agent
0x41 为什么是 Agent
在以 ChatGPT 为代表的网页对话式 AI 出现之后不久,大家很快就意识到一个问题:仅能网页对话的交互方式极大地限制了 AI 的真正能力。
网页对话交互适合问答和写作,但不适合深度参与本地工作流。而我们需要的是真正的工程化使用、让 AI 能读取本地项目上下文、调用本地工具,甚至直接修改代码和文件。
最早的本地调用方式是直接使用 OpenAI 这类厂商提供的 API 接口。大模型 API 的出现,意味着 AI 开始从「网页产品」进入「工程组件」阶段,可以被程序调用、集成和自动化。
但 API 本身并不适合普通用户。它要求用户理解接口、鉴权、请求参数、上下文管理和工具调用,大部分人还没开始用 AI 就被拦在门外了。
于是 Agent 出现了。
所谓的 Agent 可以理解为「用户(你)和大模型之间的操作入口」。它不仅是一个聊天窗口,而且是一个能读取上下文、调用工具、修改文件、执行命令,并把结果反馈给模型继续推理的本地执行器。
此时,只要本地安装一个 AI Agent,AI 就可以直接通过 Agent 参与本地工作。它不再只是回答问题,而是开始具备「动手能力」。
于是,为了抢占用户入口,各大模型厂商都先后推出自己的专用 Agent:
| 大模型 | 提供商 | Agent | 擅长处理场景 |
|---|---|---|---|
| Claude | Anthropic | Claude Code | 编码 |
| Gemini | Gemini CLI | 视觉效果(图像等) | |
| GPT | OpenAI | Codex | 通用 |
| … | … | … | … |
为了便于初学者理解,本文从广义上认为
Agent = Claude Code / Gemini CLI / Codex / ...。实际上他们都是一个整合了Agent + Skill + MCP的 Harness 工程 … —— 详见文末的 FAQ
0x42 安装 Agent
前面提到的 Claude Code、Gemini CLI、Codex 等 Agent,都深度绑定了自家的模型生态,好处时毋须配置开箱即用。
如果只是体验某一家模型,这当然没问题。但真实工作场景往往更复杂:编码场景用 Claude,图像处理场景用 Gemini,通用场景用 GPT。而为了切换模型而切换 Agent,不仅操作成本高,还要不断重新交代项目背景和上下文,就有点低效了。
有没有一种 Agent,既能保留工作区和会话上下文,又能按场景自由切换不同模型?
有,OpenCode 就是一个比较合适的选择。它是开源 Agent,不强绑定某一家模型生态,也更适合作为个人 AI 环境的统一入口。
首先去官网下载并安装桌面版 OpenCode Desktop:
装完后运行,你会得到这样的操作界面:
界面布局主要有三栏(如果没有就点一下右上角布局切换按钮):
- 左栏:选择工作区目录(Agent 默认可访问的本地目录),以及基于该工作区的会话列表
- 右栏:当前工作区的文件目录树
- 中栏:与 Agent 对话的操作窗口,底部可以切换 AI 大模型,这也是后续最常用的核心操作区
0x43 购买 AI 大模型
Agent 只是入口,现在希望 OpenCode 可以调用 DeepSeek 大模型,则需要在 DeepSeek 开放平台购买 API 调用额度。
首先注册并登录 DeepSeek 开放平台,充值 10 元即可:
然后进入 API Keys 页面,创建一个 API Key 并保存好备用。
至此,你就拥有了调用 DeepSeek 大模型的使用资格。
注意 API Key 就是调用大模型的钥匙,不要泄露给任何人。别人拿到你的 Key,就可以直接消耗你的余额。
也别再纠结本地私有化部署大模型了。现在几乎所有好用的大模型都要付费,差别只是按量付费还是包月付费。私有化部署看似免费,实际性价比往往最低 … —— 详见文末 FAQ
0x44 配置 AI 大模型
购买模型额度之后,下一步就是把 DeepSeek 配置到 OpenCode 里。
回到 OpenCode,依次点击左下角的 设置 -> 提供商/Provider -> 查看更多提供商 -> 搜索 DeepSeek -> 输入前面创建的 API Key:
保存后,OpenCode 会通过这个 API Key 自动拉取 DeepSeek 支持的模型列表。
接着继续配置模型显示列表:依次点击 设置 -> 模型/Model -> 搜索 DeepSeek,筛选出 DeepSeek 模型。
点击模型后面的开关,可以控制该模型是否显示在界面底部的模型切换列表中:
不难注意到,DeepSeek 模型后面还有 Low、Medium、High、Max 这样的选项。它们对应的是推理强度 variant:
- Low:几乎不推理,直接输出,速度最快
- Medium:适度推理,平衡速度与质量
- High:深度推理,适合复杂逻辑
- Max:最大推理预算,最慢但思考最充分
并不是所有模型都支持配置 variant,但对于支持的模型来说,它会直接影响推理质量、响应速度和费用。
一般情况下,推理强度越大,输出质量越高,但消耗的 输出 token 也越多,费用自然也更高。所以到底选择 Low、Medium 还是 Max,本质是在质量、速度、费用之间做取舍。
日常简单问答用 Low 或 Medium 就够了;涉及复杂代码分析、方案设计、长上下文推理时,再考虑 High 或 Max。
0x45 token 如何计费
这里插入一个所有初学者都关心的问题:AI 到底是怎么收费的?
在 DeepSeek 官方的 产品定价 页面,可以看到当前支持模型的计费信息:
以 deepseek-v4-flash 模型为例,价格表里通常会出现三类费用:
| 计费项 | 含义 | 单价 |
|---|---|---|
| 输入 token(缓存命中) | 重复上下文被缓存复用 | 0.02 元 / 百万 tokens |
| 输入 token(缓存未命中) | 新输入的上下文内容 | 1 元 / 百万 tokens |
| 输出 token | 模型生成的回答内容,包含推理消耗 | 2 元 / 百万 tokens |
最坏情况下,假设输入完全没有命中缓存,那么每百万 tokens 的成本大约就是:
输入 1 元 + 输出 2 元 = 3 元 / 百万 tokens
这里面隐含了两个影响费用的关键变量:
- 推理强度
variant(烧钱):影响 AI 在生成最终回答之前的内部思考深度,这部分消耗通常会计入输出 tokens - 缓存命中
Cached(省钱):同一个会话中,历史上下文、固定提示词、长文档内容如果被复用,就可能命中缓存,从而降低输入成本
那 每百万 tokens 又是什么意思?
token 是模型处理文本的基本单位,可以理解为一段文字被拆分后的最小片段。
具体拆分方式取决于模型的分词算法(Tokenizer),例如:
- 英文:1 个 token 大致接近 1 个单词或标点,例如
Hello, world!可能被拆成["Hello", ",", "world", "!"] - 中文:1 个 token 大致接近 1-2 个汉字或词语,例如
你好,世界!可能被拆成["你", "好", ",", "世界", "!"]
为了方便理解,可以粗略认为:100 万 tokens 大约相当于 50-80 万字中文文本,差不多是一本长篇小说的体量:
- 《三国演义》约 64 万字
- 《红楼梦》约 73 万字
- 《西游记》约 82 万字
- 《水浒传》约 96 万字
也就是说,在最坏计费情况下,你和 AI 合作处理一本《西游记》体量的文本,成本大概也就几块钱。
0x46 安装 CLI
OpenCode Desktop 已经足够普通用户使用了,但如果你是开发人员,最好再安装 CLI 版本。
原因很简单:桌面版适合可视化操作,CLI 更适合嵌入真实工作流。比如在项目目录里直接启动 Agent、配合终端执行命令、让 AI 读写当前工程文件,这些都是 CLI 更顺手。
最简单的安装方式,是直接让 OpenCode Desktop 帮你安装。在对话框里输入:
帮我安装 opencode 命令行
因为前面已经安装过 Node.js,所以 Desktop 本质上只是帮我们执行下面这条命令:
npm i -g opencode-ai
安装完成后,打开系统终端并输入 opencode,即可进入 OpenCode CLI:
CLI 的基本操作是:
- 直接输入任意内容:和大模型对话
- 输入
/models:切换大模型 - 连续按下
Tab:切换 Agent 角色(默认只有 Plan / Build) - 输入
/exit:退出 CLI
Agent 角色默认只有 Plan / Build,可以粗略理解为任务拆解时的自动分工:Plan 负责分析和规划,Build 负责执行和修改。后续也可以通过安装 oh-my-openagent 扩展更多角色 … —— 详见文末 FAQ
0x47 配置 OpenCode
OpenCode CLI 的全局配置文件路径如下(如果不存在就手动创建):
- 绝对路径:
%USERPROFILE%/.config/opencode/opencode.json - 相对路径:
~/.config/opencode/opencode.json
Desktop 和 CLI 共用同一份全局配置
最简单的 DeepSeek 配置如下:
{
"$schema": "https://opencode.ai/config.json",
"provider": {
"deepseek": {
"npm": "@ai-sdk/openai-compatible",
"options": {
"baseURL": "https://api.deepseek.com/v1",
"apiKey": "sk-xxxxxxxxxxxxxx",
"setCacheKey": true
},
"models": {
"deepseek-v4-pro": {
"name": "DeepSeek V4 Pro(按量|文本)"
},
"deepseek-v4-flash": {
"name": "DeepSeek V4 Flash(按量|文本)"
}
}
}
}
}
其中几个关键配置项的含义如下:
| 配置项 | 说明 |
|---|---|
provider.deepseek |
自定义 Provider 名称,后续用它标识 DeepSeek |
npm |
使用 OpenAI 兼容协议适配器 |
baseURL |
DeepSeek API 地址:https://api.deepseek.com/v1 |
apiKey |
在 DeepSeek 创建的 Key,例如 sk-xxxxxxxxxxxxxx |
models |
暴露给 OpenCode 使用的模型列表 |
setCacheKey |
开启缓存 Key,有助于复用上下文缓存 |
这些配置信息都可以在模型提供商的官网找到(如 DeepSeek 在 产品定价 页面)。尤其注意不同平台的模型名经常会变,配置时应以官方文档为准。
初学者可能现在看不懂某些配置项,譬如 @ai-sdk/openai-compatible 是什么意思?但是没关系,先按照这个配置格式复制使用即可,后面我们介绍 cc-switch 时会详细说明。
配置好 opencode.json 后,重启 CLI / Desktop,OpenCode 就会自动重载配置。
到目前为止,我们已经完成了 第一阶段:安装本地 Agent,并让它直接调用大模型。
现在可以回到 Desktop,随便打开一个本地目录,然后选择 DeepSeek 大模型,让 AI 试着读取文件、修改文件、执行命令,感受一下 Agent 和网页聊天机器人的区别:它不是只会回答问题,而是已经开始具备本地操作能力。
0x50 大模型网关
前面介绍的只是最简单的一条链路,虽然它足以覆盖日常编码、写作、资料整理和简单自动化任务。
但是随着深入使用 AI,你会发现 DeepSeek 已经满足不了你了。
复杂的工作场景驱使你订阅了 ChatGPT、Claude、Gemini 等,但是前面说过,这些大模型互相不兼容打通 :
- 不同厂商接口协议不同,Agent 需要单独适配
- 模型名、版本、价格分散在各平台,难以统一管理
- 每个厂商一个 API Key,同样也是管理麻烦
有没有方法屏蔽它们的差异性,统一配置到 OpenCode 供随时切换模型调用呢?
有的,大模型网关 new-api 就是很好的解决方案。
大模型网关位于 Agent 和模型之间,对外提供统一的 OpenAI 兼容接口,对内路由到不同厂商的上游模型。
使用的时候,只需要管理一个 Key 和一个 Base URL,剩下的由网关处理即可。
0x51 部署 new-api
使用 Docker 部署:
docker run -d --name new-api \
-p 3000:3000 \
-v $(pwd)/data:/data \
calciumion/new-api:latest
启动后访问 http://localhost:3000,默认管理员账号为 root,密码为 123456,首次登录后建议立即改密。
0x52 配置模型渠道
登录后进入「渠道」页面,添加你的模型 API。以 DeepSeek 为例:
| 配置项 | 值 |
|---|---|
| 类型 | DeepSeek |
| API Key | 之前购买的 DeepSeek Key |
| 模型 | deepseek-chat |
添加后,new-api 会自动生成一个本地统一 API 端点:http://localhost:3000/v1
0x53 配置 Key 与令牌
在「令牌」页面创建一个新令牌,设置额度、模型权限和过期时间。生成后的令牌 Key 就是你的统一 Key。
现在,所有 Agent 只需配置为:
Base URL: http://localhost:3000/v1
API Key: <new-api 令牌>
即可通过 new-api 访问已添加的所有模型。
下图展示了网关在调用链中的位置:
0x60 cc-switch
网关解决了多模型接入问题,但还有一个痛点没有处理:Agent 切换模型时需要修改配置。
比如你同时使用 Claude Code 和 OpenCode,它们各自的配置文件格式不同(Claude 用 settings.json,OpenCode 用 opencode.json),模型名定义也可能不一致。每次想换个模型,要么改网关配置,要么改 Agent 配置,很烦。
CC-Switch 就是来解决这个问题的:它统一管理各个 Agent 的 model/provider 配置,让你只需要在一个地方修改就能同时影响所有 Agent。
0x61 安装 cc-switch
npm install -g cc-switch
安装后,执行 cc-switch init 会在用户目录生成配置文件 ~/.cc-switch/config.json。
0x62 配置规则
假设你有以下场景:日常开发用 DeepSeek(便宜、够用)、需要复杂推理时切到 Claude。在 cc-switch 里配置:
{
"default": "deepseek-chat",
"providers": {
"deepseek": {
"baseURL": "http://localhost:3000/v1",
"apiKeyEnv": "CC_API_KEY"
},
"claude": {
"baseURL": "http://localhost:3000/v1",
"apiKeyEnv": "CC_API_KEY"
}
},
"models": {
"deepseek-chat": { "provider": "deepseek" },
"claude-sonnet-4": { "provider": "claude" }
}
}
这是说 OpenCode 的默认模型是 deepseek-chat,但如果你在任务描述中指定了 claude-sonnet-4,CC-Switch 会自动帮你切换到对应 Provider,而 OpenCode 本身不需要做任何修改。
切换模型时只需:
cc-switch use claude-sonnet-4
所有 Agent 生效。
0x63 与网关配合
CC-Switch 和 new-api 不是二选一的关系。两者可以串联:
Agent → CC-Switch → new-api → 上游模型
CC-Switch 负责模型切换和路由策略,new-api 负责统一接口协议和 Key 管理。各司其职。
下图展示 CC-Switch 在调用链中的位置:
0x70 AI Skill
前三阶段解决的都是「让 AI 能跑起来、能接不同模型、能方便切换」的问题 —— 这是入口层面的问题。
但还有另一个问题:AI 在重复任务上缺乏积累。
同样是写博客文章,你每次都要告诉 Agent「用 markdown、front matter 格式是 title/date/categories/tags/summary/img/」;同样是代码审查,你每次都要提醒它「检查 SQL 注入、XSS、权限控制」。这些上下文不会自然沉淀下来,每次对话都是从头开始。
Skill 就是来解决这个问题的。
Skill 本质上是一份结构化的指令集,包含了特定任务的目标、规则、约束和流程。安装一个 Skill 后,Agent 在遇到该任务时能自动加载对应上下文,不需要你再重复交代。
粗暴理解三者的关系:
| 概念 | 类比 |
|---|---|
| Agent | QQ(执行器) |
| Skill | QQ 邮箱插件(能力扩展) |
| MCP | 插件调用的系统 API(文件读写、网络请求等) |
0x71 Skill 目录结构
以 OpenCode 为例,一个 Skill 通常放在 ~/.config/opencode/skills/ 下,目录结构如下:
skills/
├── skill-name/
│ ├── SKILL.md # 必选,Skill 定义文件
│ └── scripts/ # 可选,辅助脚本
│ └── check.sh
0x72 编写一个简单的 Skill
创建一个博客写作 Skill:
~/.config/opencode/skills/blog-writer/SKILL.md
# Blog Writer Skill
## 职责
撰写 exp-blog.com 博客文章,遵守 0x00 十六进制章节编号规范。
## 规则
1. 使用 front matter 格式:title/date/categories/tags/summary
2. 章节用 0x00 → 0x10 → 0x20 编号
3. 结论前置,依据紧跟
4. 不写废话注释
5. 涉及配置/命令需提供可直接执行的示例
## 上下文路径
- 博客文章目录: /path/to/source/_posts
- 图片资源目录: 与文章同名的子目录
安装后,在 OpenCode 中执行博客写作任务时,Agent 会自动加载这个 Skill 的规则,不需要你再重复交代格式要求。
0x73 使用现有 Skill(Skill Marketplace)
社区已经沉淀了大量可复用的 Skill,覆盖编码规范、代码审查、安全审计、文档写作、测试生成等场景:https://opencode.ai/zh/skills
安装方式也简单 —— 在 OpenCode 的 Skill 面板搜索并一键安装,也可以通过 CLI 直接拉取:
# 在 OpenCode 搜索 "code-review" 并安装
# 或在 Terminal 执行
cat << 'EOF' | opencode -
安装一个 code-review skill
EOF
社区 Skill 可以直接使用,也可以 fork 后按自己的需求调整。
下图展示了 Skill 在调用链中的定位:
0xF0 FAQ
0xF1 什么是 Harness 工程
OpenCode 官方文档里提到它是一个 Harness 工程。这听起来抽象,但拆开看就很直观——
Harness 的意思是「整合框架」或「背带系统」。OpenCode 本身不是单纯的 Agent,而是把三个核心能力整合在一起的框架:
| 组件 | 作用 | 类比 |
|---|---|---|
| Agent | 与大模型的对话入口,负责推理、工具调用、文件操作 | 你电脑上的操作员 |
| Skill | 可复用的任务指令集,封装特定场景的知识和流程 | 操作员的操作手册 |
| MCP (Model Context Protocol) | 标准化的工具调用协议,让 Agent 可以调用本地或远程服务 | 操作员用扳手还是螺丝刀的标准接口 |
把这三个东西放在一起,你不需要分别安装 Agent、Skill 管理器和 MCP 客户端,OpenCode 直接给你一个整合好的环境。这就是 Harness 的意思。
一个类比:Chrome 浏览器本身是一个 Harness —— 它整合了标签页管理、书签同步、V8 引擎、扩展系统(类比 Skill)和 Web API(类比 MCP)。你不需要分别安装这些东西,打开 Chrome 就全有了。
0xF2 为什么不推荐个人私有化部署大模型
很多人觉得「大模型能本地跑就免费了,何必买 API」,这个想法坑过不少人。原因有几个:
1. 硬件成本远高于 API 费用
一个能流畅运行 7B 模型(比如 DeepSeek-Coder-7B)的 GPU 至少要 8GB 显存,跑 70B 模型需要 80GB+。一张消费级显卡动辄大几千,而 API 按量付费,轻度使用一个月花不了几十块。
2. 性能差距巨大
同参数规模下,本地部署的开源模型和云端商用模型的能力不在一个量级。DeepSeek-V3、Claude-4、GPT-4o 这些顶级模型,本地根本跑不动。
3. 维护成本
本地模型需要自己管理模型文件更新、依赖版本、GPU 驱动等。云 API 则完全不需要。
4. 用电噪音
GPU 满载功耗两三百瓦,跑一天的电费够调很多次 API 了。
唯一适合本地部署的场景:数据敏感且必须离线(比如医疗、金融内部数据),或者你纯粹想学习模型原理。否则,买 API 永远是最划算的选择。
0xF3 Agent 与 skill 与 MCP 的关系
用一个真实的工作流来理解:
你对 OpenCode 说:「审查这个项目根目录下的代码安全性。」
- Agent 收到指令,理解任务意图
- Skill 被触发 —— 自动加载「代码安全审查」Skill,其中定义了检查规则:SQL 注入、XSS、硬编码密钥、越权接口……
- Agent 按 Skill 指令工作,需要读取文件时通过 MCP 调用
read_file工具,需要搜索时调用grep_search工具- 结果汇总给模型推理,输出审查报告
三者协作完成了一次完整的安全审查。没有 Skill,Agent 不知道要检查什么;没有 MCP,Agent 无法操作本地文件;没有 Agent,Skill 和 MCP 无人驱动。
这也是为什么 OpenCode 被称为 Harness —— 它把这套协作机制打包好了。