English | 中文
声明:本项目仅供学习交流使用,不用于任何商业目的。
本项目是 OpenCode Go 语言学习版本。
由于本人对 TypeScript 语言不太熟悉,为了更好地理解 OpenCode 的架构设计和实现原理,将其翻译为 Go 语言版本进行学习研究。
- 本项目的架构设计、功能实现均参考自原版 TypeScript 实现
- 如有任何版权问题,请联系删除
- 交互式 TUI 终端界面
- 支持多种 AI 提供商(Anthropic、OpenAI)
- 内置工具系统(文件读写、Bash 执行、代码搜索等)
- 会话管理和历史记录
- 事件驱动架构
opencode_go/
├── cmd/
│ └── opencode/ # CLI 入口
├── internal/ # 内部包
│ ├── agent/ # AI 代理执行器
│ ├── bus/ # 事件总线
│ ├── cli/ # CLI 命令
│ ├── config/ # 配置管理
│ ├── message/ # 消息管理
│ ├── provider/ # AI 提供商适配
│ ├── session/ # 会话管理
│ ├── storage/ # 数据持久化
│ ├── tool/ # 工具注册表
│ └── tui/ # 终端界面
├── pkg/
│ └── types/ # 公共类型定义
├── go.mod
└── go.sum
- Go 1.21+
- 设置
ANTHROPIC_API_KEY环境变量
# 克隆项目
git clone https://github.com/anomalyco/opencode.git
cd opencode_go
# 构建
go build -o opencode ./cmd/opencode
# 运行 TUI 模式
./opencode run
# 或直接使用 go run
go run ./cmd/opencode run配置文件位置:~/.opencode/config.yaml
server:
host: 127.0.0.1
port: 8080
default_provider: anthropic
default_model: claude-3-5-sonnet-20241022
providers:
anthropic:
api_key: ${ANTHROPIC_API_KEY}
openai:
api_key: ${OPENAI_API_KEY}
log_level: info| 方面 | TypeScript 原版 | Go 翻译版 |
|---|---|---|
| 类型系统 | 接口和类型别名 | 结构体和接口 |
| 异步处理 | Promise/async-await | Goroutine/Channel |
| 事件系统 | EventEmitter | 自定义 EventBus |
| TUI 框架 | Ink (React) | Bubbletea |
| 依赖注入 | 构造函数注入 | 函数参数传递 |
- Provider: AI 提供商抽象层,统一不同 LLM API 的调用方式
- Agent/Executor: 负责执行用户请求,管理工具调用循环
- Tool: 工具系统,提供文件操作、命令执行等能力
- TUI: 基于 Bubbletea 的终端用户界面
- EventBus: 发布-订阅模式的事件通信机制
- 本项目仅供个人学习 Go 语言和 AI 应用开发使用
- 不对代码的正确性、完整性、安全性做任何保证
- 请勿将本项目用于生产环境或商业用途
- 所有设计理念和实现思路归功于原版 OpenCode 项目
本项目遵循与原版 OpenCode 相同的开源协议。