0%

跟着OpenCode学智能体设计和开发0:核心架构

OpenCode最近很火,它不仅仅是另一个用于代码的 AI 聊天机器人——它是一个综合性的开发环境,能够理解你的项目结构,执行命令,并在你的监督下进行真正的代码更改。通过它可以学习一个强大的智能体是怎么设计和开发。

接下来,通过分析OpenCode的源码,来深入学习,这里大量用到了另外2个代码仓智能分析工具ZreadDeepWiki

核心架构

OpenCode 的核心采用了客户端/服务器架构,其中强大的后端服务器负责管理 AI 交互、文件操作和工具执行,而各种客户端界面(CLI、桌面应用、Web)则提供了与这些功能无缝交互的方式 packages/opencode/src/index.ts#L1-L50

OpenCode 的架构围绕几个相互连接的系统构建,这些系统协同工作以提供无缝的 AI 辅助开发体验:
arch

服务器核心

服务器是 OpenCode 的心脏,使用 Hono 和 Bun 构建,以提供高性能的 HTTP 和 WebSocket 端点。它管理所有 AI 交互、工具执行以及与客户端的实时通信 packages/opencode/src/server/server.ts#L59-L95。服务器既暴露了用于直接集成的 REST API,也提供了用于实时更新和流式 AI 响应的 WebSocket 流。

服务器的主要职责包括:

  • 会话管理:创建、分支和管理具有完整状态持久化的对话会话
  • 工具编排:协调文件操作、代码搜索、bash 命令和其他开发工具
  • AI 提供商集成:管理与多个 AI 提供商(Anthropic、OpenAI、Google 等)的连接
  • 权限系统:处理敏感操作的用户批准工作流
  • 事件流:通过服务器发送事件进行实时更新,以实现响应式 UI 更新

Agent 系统

OpenCode 引入了一个复杂的 Agent 系统,允许你切换具有专门功能的不同 AI 个性。每个 Agent 都有独特的权限、行为和用例 packages/opencode/src/agent/agent.ts#L66-L136

Agent 模式 描述 最适用于
build 主要 具有完整文件权限的全访问开发 Agent 主动开发、重构、实现
plan 主要 默认拒绝编辑的只读分析 Agent 代码探索、理解不熟悉的代码库
general 子 Agent 用于复杂搜索和并行执行的多任务 Agent 研究、多步骤规划任务
explore 子 Agent 快速代码库探索专家 快速查找文件、模式搜索、代码理解

build 和 plan Agent 是你可以使用 Tab 键切换的主要 Agent,而像 general 和 explore 这样的子 Agent 则由系统自动调用以处理专门任务 README.md#L33-L45

工具生态系统

OpenCode 提供了一套全面的工具包,AI Agent 可以利用这些工具与你的代码库进行交互。工具注册表管理内置工具,并允许自定义工具扩展 packages/opencode/src/tool/registry.ts#L90-L114

文件操作

  • Read:读取文件内容,支持行范围和语言检测
  • Write:创建新文件或完全替换现有文件
  • Edit:对特定行进行精确编辑,支持冲突检测
  • Multi-edit:跨文件进行多个协调编辑

代码导航

  • Grep:使用 ripgrep 在整个代码库中搜索文本模式
  • Glob:查找匹配 glob 模式的文件(例如 src/components/**/*.tsx
  • Code Search:用于查找函数、类和模式的语义代码搜索
  • LS:列出包含丰富元数据的目录内容

开发工具

  • Bash:执行 shell 命令,支持实时输出流
  • LSP:获取代码智能、符号定义和引用
  • Todo:创建和管理与会话关联的任务列表
  • Skills:执行自定义技能和可重用的工作流

所有工具都在权限系统内运行,该系统赋予你控制 AI 可以执行的操作的权利。你可以根据安全要求,为文件访问、命令执行和外部 API 调用配置细粒度的权限。

多提供商 AI 集成

OpenCode 支持广泛的 AI 提供商目录,使你可以灵活地选择最适合你需求的模型 packages/opencode/src/provider/provider.ts#L43-L65

支持的提供商:

  • Anthropic:具有高级代码功能的 Claude 模型
  • OpenAI:具有广泛工具支持的 GPT 模型
  • Google:Gemini 和 Vertex AI 模型
  • Amazon Bedrock:支持区域部署的企业级模型
  • GitHub Copilot:专用于开发的代码专用模型
  • 以及更多:Groq、Mistral、Cerebras、Perplexity、Vercel、OpenRouter 和自定义提供商

提供商系统处理身份验证、模型发现、成本跟踪和自动故障转移。每个模型都根据其功能、定价和上下文限制进行编录,使 OpenCode 能够智能地为每项任务选择合适的工具 packages/opencode/src/provider/provider.ts#L443-L511

会话管理

OpenCode 中的所有交互都在会话内进行,该会话维护完整的对话历史、上下文和状态。会话支持强大的功能:

  • 分支:从对话的任何点创建替代分支,以探索不同的方法
  • 压缩:自动汇总较旧的对话以保持在上下文限制内,同时保留重要信息
  • 回滚:通过回滚特定消息或整个会话来撤销更改
  • 共享:通过生成的链接与协作者共享会话
  • 持久化:所有会话都本地存储,具有完整的离线功能

会话系统跟踪消息交换、工具执行、文件更改和差异,为每次对话提供完整的可重现性 packages/opencode/src/session/index.ts#L39-L79

项目结构

了解 OpenCode 的 monorepo 结构有助于贡献和自定义:

1
2
3
4
5
6
7
8
packages/
├── opencode/ ├── app/ # Next.js Web 应用程序
├── console/ # 无服务器控制台应用程序
├── desktop/ # 基于 Tauri 的桌面应用程序
├── ui/ # 共享 React UI 组件
├── sdk/ # JavaScript/TypeScript SDK
├── util/ # 共享实用程序库
└── extensions/ # IDE 扩展(Zed、VS Code)

核心功能位于 packages/opencode/ 中,包含服务器实现、Agent 系统、工具注册表和提供商集成 packages/opencode/src/index.ts#L1-L50

主要功能

代码智能

  • LSP 集成:连接到语言服务器以进行准确的代码导航和理解
  • 符号搜索:在整个代码库中查找函数、类和变量
  • 代码格式化:与流行的格式化程序集成,以保持一致的代码风格
  • 文件监视:自动跟踪文件更改并更新上下文

安全与控制

  • 权限系统:对 AI Agent 可以执行的操作进行细粒度控制
  • 会话回滚:使用单个命令撤销任何 AI 生成的更改
  • 审计跟踪:所有操作和更改的完整历史记录
  • 沙盒化:使用 Git worktrees 进行安全实验

开发者体验

  • 丰富的终端 UI:美观、响应迅速的终端界面,支持键盘快捷键
  • 流式响应:在生成 AI 响应时实时查看
  • 上下文管理:智能截断和汇总以保持在限制范围内
  • 多项目支持:使用独立的会话处理多个项目