系列导航
本文是 OpenCode 从入门到精通 系列的第二篇。
系列导航:
引言
在上一篇快速入门中,我们已经体验了OpenCode的基础功能。现在,让我们深入探索其核心技术概念。理解这些概念对于充分发挥OpenCode的潜力至关重要。
代理系统详解
什么是代理?
在OpenCode中,代理(Agent)是一个智能实体,负责理解用户需求、分析代码库上下文并执行相应操作。每个代理都有特定的权限范围和职责划分。
三种代理类型
1. Build代理(开发代理)
定位:全功能开发伙伴
权限:
- ✅ 文件读取和编辑
- ✅ 执行shell命令
- ✅ 安装依赖包
- ✅ 运行测试和构建
- ✅ Git操作
适用场景:
- 编写新功能
- 修复Bug
- 重构代码
- 项目初始化
使用示例:
# 确保使用build代理
opencode --agent build
# 或在交互模式中按Tab切换
User: "创建一个Express服务器,支持用户认证API"
OpenCode: [开始分析项目结构,生成代码文件...]
2. Plan代理(分析代理)
定位:只读分析顾问
权限:
- ✅ 文件读取
- ✅ 代码分析
- ❌ 文件编辑(默认拒绝)
- ❌ 命令执行(需要确认)
适用场景:
- 代码审查
- 架构分析
- 生成文档
- 学习新代码库
使用示例:
# 使用plan代理安全探索代码
opencode --agent plan
User: "分析这个项目的架构,列出主要模块"
OpenCode: [扫描代码库,生成架构图...]
3. General子代理
定位:复杂任务协调者
特点:
- 处理多步骤复杂任务
- 在后台异步执行
- 由主代理自动调用
触发场景:
- 需要跨多个文件搜索
- 执行长时间运行的分析
- 并行处理多个子任务
代理切换策略
根据任务性质选择合适的代理:
| 任务类型 | 推荐代理 | 原因 |
|---|---|---|
| 编写新代码 | build | 需要文件编辑权限 |
| 代码审查 | plan | 只读安全,避免意外修改 |
| 学习代码库 | plan | 专注理解,无破坏风险 |
| 重构代码 | build | 需要修改多个文件 |
| 生成文档 | plan | 通常只需要读取权限 |
会话管理机制
会话生命周期
OpenCode的会话管理是其强大功能的基础:
启动OpenCode
↓
创建会话实例
↓
加载项目上下文 ← LSP初始化
↓
用户交互循环
├→ 接收请求
├→ 分析上下文
├→ 执行任务
└→ 返回结果
↓
会话结束/保存
上下文窗口管理
OpenCode智能管理上下文窗口,确保关键信息不丢失:
自动压缩策略:
- 识别并保留关键代码片段
- 移除重复或冗余信息
- 智能总结对话历史
手动管理:
# 查看当前上下文使用情况
opencode session context stats
# 清除历史,保持当前任务上下文
opencode session context clear
# 保存当前会话
opencode session save feature-auth
多会话并行
OpenCode支持同时运行多个独立会话:
# 创建命名会话
opencode --session feature-auth
opencode --session bugfix-123
opencode --session docs-update
# 查看活动会话
opencode session list
# 切换会话
opencode session switch feature-auth
应用场景:
- 同时处理多个独立功能
- 并行开发和调试
- 团队成员共享会话
LSP集成原理
什么是LSP?
Language Server Protocol(LSP)是一种标准化协议,让编辑器和IDE能够获得语言智能功能,如自动补全、跳转定义、查找引用等。
OpenCode的LSP优势
自动检测和启动:
项目根目录检测
↓
识别项目类型 (package.json, Cargo.toml, etc.)
↓
查找并启动对应语言服务器
↓
建立通信连接
↓
提供代码智能服务
支持的语言:
- TypeScript/JavaScript (typescript-language-server)
- Python (pyright/pylance)
- Go (gopls)
- Rust (rust-analyzer)
- Java (jdtls)
- C/C++ (clangd)
- 更多…
LSP增强的AI理解
通过LSP,OpenCode能够:
-
精确代码导航
User: "跳转到UserService的定义" OpenCode: [使用LSP的Go to Definition功能精确定位] -
智能符号搜索
User: "找到所有使用authMiddleware的地方" OpenCode: [通过LSP的Find References收集所有引用] -
类型感知补全
User: "补全这个对象的可用方法" OpenCode: [利用LSP的类型系统提供精确补全]
LSP配置示例
// ~/.config/opencode/lsp.json
{
"servers": {
"typescript": {
"command": "typescript-language-server",
"args": ["--stdio"],
"filetypes": ["typescript", "typescriptreact", "javascript", "javascriptreact"]
},
"python": {
"command": "pylsp",
"args": [],
"filetypes": ["python"]
}
}
}
上下文处理策略
文件上下文收集
OpenCode智能收集和处理文件上下文:
优先级排序:
- 当前打开的文件
- 最近修改的文件
- 导入依赖的文件
- 项目配置文件
- README和文档
Token预算分配:
总Token预算: 100,000
├─ 系统提示: 5,000
├─ 当前文件: 40,000
├─ 相关文件: 30,000
├─ 对话历史: 15,000
└─ 项目概览: 10,000
智能摘要生成
对于大型文件,OpenCode会生成智能摘要:
// 原始文件 (2000行)
export class UserService {
// ... 1900行实现代码 ...
}
// OpenCode生成的摘要
/**
* UserService: 用户管理服务
* 主要方法:
* - createUser(): 创建新用户
* - authenticate(): 用户认证
* - updateProfile(): 更新用户资料
* - deleteAccount(): 删除用户账户
* 依赖: Database, Logger, EmailService
*/
配置系统架构
配置层次结构
OpenCode使用多层配置系统:
优先级 (低→高):
1. 默认配置 (内置)
2. 全局配置 (~/.config/opencode/config.json)
3. 项目配置 (.opencode/config.json)
4. 环境变量
5. 命令行参数
配置文件结构
{
"providers": {
"anthropic": {
"apiKey": "${ANTHROPIC_API_KEY}",
"defaultModel": "claude-3.7-sonnet"
},
"openai": {
"apiKey": "${OPENAI_API_KEY}",
"defaultModel": "gpt-4o"
}
},
"agents": {
"build": {
"maxTokens": 4096,
"temperature": 0.7
},
"plan": {
"maxTokens": 2048,
"temperature": 0.3
}
},
"session": {
"autoSave": true,
"maxHistory": 100
},
"lsp": {
"autoStart": true,
"timeout": 30000
}
}
安全与权限控制
沙箱隔离
OpenCode支持沙箱模式,限制代理的权限:
# 启用沙箱模式
opencode --sandbox
# 沙箱中的权限限制
- 文件系统访问受限
- 网络访问受限
- 命令执行受限
敏感信息保护
# 配置文件加密存储
opencode config encrypt
# 使用系统密钥链
opencode config set security.keychain true
# 环境变量管理
opencode secrets set ANTHROPIC_API_KEY
opencode secrets list
操作审计
所有操作都会被记录:
{
"timestamp": "2026-02-26T15:30:00Z",
"operation": "file_write",
"path": "/src/auth.ts",
"agent": "build",
"user": "developer",
"approved": true,
"reason": "Implementing OAuth login"
}
最佳实践建议
1. 选择正确的代理
- 需要修改代码 → build代理
- 只需要分析 → plan代理
- 探索新代码库 → plan代理 + 低temperature
2. 管理上下文
- 定期清理不需要的会话历史
- 为大型项目配置合适的token预算
- 使用
.opencodeignore排除无关文件
3. 配置LSP
- 确保项目依赖已安装
- 为大型项目配置LSP超时时间
- 使用项目特定的LSP配置
4. 会话管理
- 为不同任务创建独立会话
- 使用有意义的会话名称
- 定期保存重要会话
常见问题解答
Q: build代理执行了我不想要的修改,怎么办?
A: OpenCode在执行修改前通常会请求确认。如果已经执行:
# 使用plan代理分析修改
opencode --agent plan diff HEAD
# 通过Git回滚
git checkout -- .
Q: LSP无法启动?
A: 检查以下几点:
# 确认语言服务器已安装
which typescript-language-server
# 检查项目依赖
npm install # 或 pip install -r requirements.txt
# 查看LSP日志
opencode logs lsp
Q: 如何处理上下文窗口溢出?
A:
# 减少上下文窗口大小
opencode config set context.maxTokens 50000
# 启用智能压缩
opencode config set context.compression true
# 手动压缩历史
opencode session compress
总结
理解OpenCode的核心概念是高效使用这一工具的关键:
- 代理系统提供了灵活的权限和职责划分
- 会话管理确保上下文的连续性和可恢复性
- LSP集成赋予AI深度理解代码的能力
- 上下文处理智能管理有限的Token资源
- 安全机制保护您的代码和数据安全
掌握了这些核心概念,您就可以在下一篇中学习如何配置和优化模型,进一步提升OpenCode的使用体验。
下一步学习
- 下一篇:模型配置实战 - 学习如何配置多个AI模型提供商,实现成本优化和性能提升
- 实践练习 - 在实际项目中应用本文学到的概念
- 进阶话题 - 探索更多高级功能和优化技巧
更新时间:2026-02-26
OpenCode版本:v1.2.14+
反馈建议:如果您发现本文有任何问题或改进建议,欢迎通过 GitHub Issues 反馈。