OpenCode简介

1. 什么是大模型(Large Language Model)


大模型本质上是在计算概率,海量数据经过训练后,生成一个权重文件,后续推理参照这个权重文件,针对问题推理,给出结果。

flowchart LR A("海量数据(知识)")--大量高性能显卡-->B("训练(总结)")-->C("几十GB的权重文件(图书馆)") D["提问(答案)"] <--少量显卡--> E["推理(查阅)"] <--> C

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. 个人开发者可以考虑

  1. 使用ollama( https://ollama.com ),可以在本地部署大模型,使用自己的显卡算力,完全免费,数据安全。
  2. 使用开源的Open Code( https://opencode.ai ),内置一些免费模型,日常开发基本够用,可在(https://opencode.ai/auth )中管理API密钥、查看模型用量等。

3.2. Open Code日常用法

  1. 安装,控制台运行:
curl -fsSL https://opencode.ai/install | bash
  1. 使用,控制台执行:
opencode
  1. 选模型
/model
  1. 连接供应商,添加API key(需要在大模型厂商官网,注册账号、购买套餐或申领免费额度、生成API key,很多时候生成的key首次可见,记得保存下来,如果忘了,删掉重新生成)
/connect
  1. 新开会话(如果是历史无关的新提问,可以新开会话,减少Token消耗,一个会话里,历史消息会合并发送)。
/new

3.3. OpenCode工作原理

和大模型的对话都是文本,为了扩充其功能范围,通常会补充外围工具。人机交互一般有命令行、应用(桌面App、手机App)、IDE插件、网页应用等形式。

①【主流程】

flowchart TB A(提问prompt) subgraph SYS["Agent Loop"] B(准备上下文) C(大模型) D{使用工具?} E(调用工具) F(工具返回) G(文本返回) H(下一轮输入...) end A--->B B--API调用--->C C--->D D--->|yes|E E--->F D--->|no|G F--API调用--->C G--->H

②【例子】

控制台配置转发网络请求

export http_proxy=http://127.0.0.1:8888
export https_proxy=http://127.0.0.1:8888

打开OpenCode,是个TUI(控制台的可交互界面),提问:今天几号
image

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

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

OpenCode界面:
image


4. OpenCode自我说明


①【整体架构】

OpenCode 是一个用 TypeScript 编写的开源 AI 编程代理,使用 Bun 作为运行时,采用 monorepo 项目结构。核心架构分为四个层次:

image

②【启动流程】

image

注意: 配置加载遵循深度合并策略。全局配置先加载,项目配置覆盖全局,环境变量可进一步覆盖。 配置加载完成后不会热重载——修改 opencode.json 后需重启 OpenCode。

③【消息处理流程(核心交互循环)】

image

④【Tool 执行详细流程】

每个工具调用都经过严格的权限检查和钩子处理:

image

⑤【Agent 系统详解】

Agent 类型与层次

image

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)

image

⑥【上下文管理】

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

image

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

image

⑦【扩展系统】

Plugin 生命周期

image

MCP服务器集成

image

⑧【内置工具一览】

工具名 功能 权限键
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

⑨【配置系统】

配置加载优先级

image

⑩【完整数据流图】

image

⑪【关键技术特性】

特性 实现方式 说明
流式响应 SSE (Server-Sent Events) 实时显示 LLM 生成内容
权限控制 Glob 模式匹配 支持 git *: allow 等细粒度控制
会话管理 内存 + SQLite 支持多会话、子会话、历史回放
工具系统 插件化架构 内置 + MCP + 自定义工具
上下文压缩 LLM 摘要 自动压缩长对话避免 token 溢出
文件搜索 ripgrep 高性能正则搜索,尊重 .gitignore
LSP 集成 Language Server Protocol 自动加载项目对应的 LSP
热重载 不支持 需要重启 OpenCode 生效

⑫【核心循环总结】

OpenCode 的核心是一个 Agent Loop(代理循环),其本质可以概括为:

  1. 接收用户输入
  2. 构建上下文(System Prompt + 历史 + 工具定义)
  3. 调用 LLM 获取响应
  4. 如果 LLM 请求工具调用 → 执行工具 → 返回结果 → 回到步骤 3
  5. LLM 完成响应 → 将最终结果返回给用户

这个循环通过以下子系统协作实现:

  • Agent 系统 — 实现任务委派(主 Agent → SubAgent)
  • Tool 系统 — 实现与外部世界的交互(文件、Shell、搜索、MCP)
  • Plugin 系统 — 实现可扩展性(生命周期钩子注入)
  • Permission 系统 — 实现安全控制(allow / ask / deny)
  • Compaction 系统 — 实现长对话支持(自动上下文压缩)
posted @ 2026-09-16 20:05  球哥v5  阅读(16)  评论(0)    收藏  举报