OpenCode简介
1. 什么是大模型(Large Language Model)
大模型本质上是在计算概率,海量数据经过训练后,生成一个权重文件,后续推理参照这个权重文件,针对问题推理,给出结果。
Token:称为词元,或是令牌,大模型处理信息的基本单元,可能是字、词、或是词组,计费、能处理的上下文长度,都是这个指标基准。
多模态:能处理文本、图片、视频、音频等不同类型信息的能力。
2. 常见大模型及厂商
境外
| 厂商 | 大模型 | 说明 |
|---|---|---|
| OpenAI | GPT | 行业全能标杆 |
| Anthropic | Claude Fable/Claude Opus | 逻辑推理与编程 |
| Google DeepMind | Gemini | 原生多模态与超长上下文 |
| Meta | Llama | 全球开源生态的基石 |
| xAI (马斯克旗下) | Grok | 主打极速响应与深度搜索 |
境内
| 厂商 | 大模型 | 说明 |
|---|---|---|
| DeepSeek | DeepSeek | 全球性价比与开源卷王 |
| 月之暗面 | Kimi | 超长文本处理 |
| 智谱 AI | GLM | 国内产学研综合实力标杆 |
| 阿里巴巴 | Qwen | 千问 |
| 百度 | 文心大模型 | 文心一言 |
| 字节跳动 | Seed | 豆包 |
| 腾讯 | 混元 | 元宝 |
3. OpenCode简介
市面上的AI编程工具很多:Cursor、Windsurf,Claude Code,Codex,Copilot,Open Code等等,基本都是通过调用远端大模型API,配合工具扩展,完成编码、编译、调试任务;而调用大模型,就会涉及到算力成本,需要到大模型厂商购买套餐,厂商一般也会提供免费试用额度,百万到千万Token不等,只不过这点额度很快就会耗光;此外,境外大模型厂商也可能封禁国内接口调用,猫捉老鼠的游戏实在不好玩。
3.1. 个人开发者可以考虑
- 使用ollama( https://ollama.com ),可以在本地部署大模型,使用自己的显卡算力,完全免费,数据安全。
- 使用开源的Open Code( https://opencode.ai ),内置一些免费模型,日常开发基本够用,可在(https://opencode.ai/auth )中管理API密钥、查看模型用量等。
3.2. Open Code日常用法
- 安装,控制台运行:
curl -fsSL https://opencode.ai/install | bash
- 使用,控制台执行:
opencode
- 选模型
/model
- 连接供应商,添加API key(需要在大模型厂商官网,注册账号、购买套餐或申领免费额度、生成API key,很多时候生成的key首次可见,记得保存下来,如果忘了,删掉重新生成)
/connect
- 新开会话(如果是历史无关的新提问,可以新开会话,减少Token消耗,一个会话里,历史消息会合并发送)。
/new
3.3. OpenCode工作原理
和大模型的对话都是文本,为了扩充其功能范围,通常会补充外围工具。人机交互一般有命令行、应用(桌面App、手机App)、IDE插件、网页应用等形式。
①【主流程】
②【例子】
控制台配置转发网络请求
export http_proxy=http://127.0.0.1:8888
export https_proxy=http://127.0.0.1:8888
打开OpenCode,是个TUI(控制台的可交互界面),提问:今天几号

Charles抓包,有2次请求,第一次包含提问及一堆系统拼装的上下文信息,注意:一个简单的提问,agent会添加一堆上下文信息作为大模型的输入,为啥Token不经烧,原因就在这里,如何高效地和大模型交互,做功点也在这里,一般修改AGENTS.md、SKILLS.md、CLAUDE.md等文件,也是在限定上下文范围,让大模型在推理过程中少走弯路。请求内容如下:

第二次请求的返回,包含了问题答案,按照stream样式返回,在TUI上看到的就是一个词一个词地蹦出来。

OpenCode界面:

4. OpenCode自我说明
①【整体架构】
OpenCode 是一个用 TypeScript 编写的开源 AI 编程代理,使用 Bun 作为运行时,采用 monorepo 项目结构。核心架构分为四个层次:

②【启动流程】

注意: 配置加载遵循深度合并策略。全局配置先加载,项目配置覆盖全局,环境变量可进一步覆盖。 配置加载完成后不会热重载——修改 opencode.json 后需重启 OpenCode。
③【消息处理流程(核心交互循环)】

④【Tool 执行详细流程】
每个工具调用都经过严格的权限检查和钩子处理:

⑤【Agent 系统详解】
Agent 类型与层次

Agent 类型说明
| Agent | 模式 | 描述 | 权限 |
|---|---|---|---|
build Primary |
primary | 默认的全功能开发 Agent | 所有工具启用 |
plan Primary |
primary | 只读分析和规划 Agent | 编辑和 bash 默认 ask |
general Sub |
subagent | 通用多步骤任务 | 全工具(除 todo) |
explore Sub |
subagent | 快速代码探索 | 只读 |
scout Sub |
subagent | 外部文档和依赖研究 | 只读 |
compaction 隐藏 |
primary | 上下文压缩(自动运行) | 系统内部 |
title 隐藏 |
primary | 生成会话标题(自动运行) | 系统内部 |
summary 隐藏 |
primary | 创建会话摘要(自动运行) | 系统内部 |
Agent 调用流程(SubAgent)

⑥【上下文管理】
上下文构建流程,每次调用 LLM 前,OpenCode 会自动构建完整的 System Prompt:

上下文压缩 (Compaction),当会话历史过长接近 token 限制时,系统自动触发压缩:

⑦【扩展系统】
Plugin 生命周期

MCP服务器集成

⑧【内置工具一览】
| 工具名 | 功能 | 权限键 |
|---|---|---|
bash |
执行 Shell 命令 | bash |
edit |
精确字符串替换编辑文件 | edit |
write |
创建新文件或覆盖现有文件 | edit |
read |
读取文件内容 | read |
grep |
正则表达式内容搜索 | grep |
glob |
文件名模式匹配 | glob |
apply_patch |
应用 Patch 补丁 | edit |
skill |
加载 Skill 专业知识包 | skill |
todowrite |
管理待办事项列表 | todowrite |
webfetch |
获取网页内容 | webfetch |
websearch |
网页搜索 | websearch |
question |
向用户提问 | question |
lsp |
LSP 代码智能(实验性) | lsp |
⑨【配置系统】
配置加载优先级

⑩【完整数据流图】

⑪【关键技术特性】
| 特性 | 实现方式 | 说明 |
|---|---|---|
| 流式响应 | SSE (Server-Sent Events) | 实时显示 LLM 生成内容 |
| 权限控制 | Glob 模式匹配 | 支持 git *: allow 等细粒度控制 |
| 会话管理 | 内存 + SQLite | 支持多会话、子会话、历史回放 |
| 工具系统 | 插件化架构 | 内置 + MCP + 自定义工具 |
| 上下文压缩 | LLM 摘要 | 自动压缩长对话避免 token 溢出 |
| 文件搜索 | ripgrep | 高性能正则搜索,尊重 .gitignore |
| LSP 集成 | Language Server Protocol | 自动加载项目对应的 LSP |
| 热重载 | 不支持 | 需要重启 OpenCode 生效 |
⑫【核心循环总结】
OpenCode 的核心是一个 Agent Loop(代理循环),其本质可以概括为:
- 接收用户输入
- 构建上下文(System Prompt + 历史 + 工具定义)
- 调用 LLM 获取响应
- 如果 LLM 请求工具调用 → 执行工具 → 返回结果 → 回到步骤 3
- LLM 完成响应 → 将最终结果返回给用户
这个循环通过以下子系统协作实现:
- Agent 系统 — 实现任务委派(主 Agent → SubAgent)
- Tool 系统 — 实现与外部世界的交互(文件、Shell、搜索、MCP)
- Plugin 系统 — 实现可扩展性(生命周期钩子注入)
- Permission 系统 — 实现安全控制(allow / ask / deny)
- Compaction 系统 — 实现长对话支持(自动上下文压缩)

浙公网安备 33010602011771号