10.5 Opencode 多智能体协作实践

本节介绍如何在 Opencode 中配置和使用多智能体系统。

10.5.1 智能体路由实现

在 Opencode 中,路由通常通过系统提示词实现。主智能体根据用户输入判断应该调用哪个子智能体。

路由提示模板示例

你是金融服务协调智能体。根据用户请求,决定调用哪个专业子智能体。

可用子智能体:
1. fundamental-analyst:财务数据分析,适用于财报解读、财务指标计算
2. technical-analyst:技术面分析,适用于价格走势、交易信号
3. sentiment-analyst:市场情绪分析,适用于新闻舆情、社交媒体

用户请求:{user_query}

请分析用户意图,选择最合适的子智能体,并说明理由。

基于意图的路由逻辑

当用户说”帮我分析茅台的财报”,主智能体识别出财报分析意图,调用 fundamental-analyst。

当用户说”茅台股价最近走势如何”,主智能体识别出技术分析意图,调用 technical-analyst。

10.5.2 子智能体配置

子智能体是带有 YAML frontmatter 的 Markdown 文件。

存储位置

项目级子智能体(推荐用于团队协作):

.opencode/agents/fundamental-analyst.md
.opencode/agents/technical-analyst.md

用户级子智能体(适合个人跨项目使用):

~/.config/opencode/agents/debugging-specialist.md

配置文件结构

# .opencode/agents/fundamental-analyst.md
---
name: fundamental-analyst
description: 当需要分析公司财务数据、解读财报时使用
tools: Read, Grep, Bash
model: sonnet
---

你是一位资深财务分析专家。

# 核心职责
1. 提取财务报表关键指标
2. 计算财务比率(ROE、资产负债率等)
3. 进行同比/环比分析
4. 评估财务健康状况

# 输出格式
## 财务健康度评分(1-10 分)
- 盈利能力:X 分
- 成长性:Y 分
- 财务安全:Z 分

## 关键发现
- [列举 2-3 个核心洞察]

## 估值判断
[低估/合理/高估]

配置字段说明

字段 必需 说明 示例
name 唯一标识符,使用小写字母和连字符 fundamental-analyst
description 描述何时应该调用此子智能体 当需要分析财务数据时使用
tools 逗号分隔的工具列表 Read, Grep, Bash
model 指定使用的模型 sonnet/haiku/opus
提示教学提示

description 字段是主智能体判断是否调用子智能体的关键。好的描述要清晰、具体、触发式。

好的示例:“当代码发生变更后,立即进行代码审查”

模糊的示例:“处理安全相关任务”

10.5.3 并行化实践

使用 Task 工具调用子智能体

Task 工具是 Opencode 多智能体架构的核心入口点。

Task 工具参数: - description:任务的简短描述(3-5 个词) - prompt:子智能体需要执行的具体任务内容

执行流程: 1. 主智能体识别任务需要委派 2. 调用 Task 工具,传入任务描述和提示词 3. 系统创建子智能体实例(在独立上下文中运行) 4. 子智能体执行任务,返回结果给主智能体 5. 主智能体整合结果,继续主线对话

示例:多分析师协作选股

用户:请分析贵州茅台是否值得投资

Opencode(主智能体):
我将组织分析师团队进行全方位评估。

[Task 1] fundamental-analyst 分析茅台财务数据
[Task 2] technical-analyst 分析茅台技术走势
[Task 3] sentiment-analyst 分析市场情绪

[等待三个子智能体完成]

[汇总分析结果]
基于三位分析师的报告,综合评估如下...

真正的并行方案:Git Worktree

由于 Opencode 的 Task 工具是顺序执行的,如果需要真正的并行,可以使用 Git Worktree:

# 创建两个独立的工作树
git worktree add ../project-analysis-A -b task/analysis-A
git worktree add ../project-analysis-B -b task/analysis-B

# 在第一个终端
cd ../project-analysis-A
opencode
# 执行 A 股分析任务

# 在第二个终端
cd ../project-analysis-B
opencode
# 执行港股分析任务

两个 Opencode 实例在完全隔离的环境中工作,不会相互干扰。

10.5.4 智能体间协作配置

基于文件的通信模式

在多智能体协作中,智能体之间不能直接对话,但可以通过文件传递信息。

任务状态文件

# tasks.md

## 待办任务
- [ ] 分析茅台财务数据(分配给:fundamental-analyst)
- [ ] 分析茅台技术走势(分配给:technical-analyst)

## 进行中
- [x] 收集基础数据(data-collector 完成)

## 已完成
- [x] 数据库表设计

接口契约文件

# api-contract.md

## 子智能体输出格式

### fundamental-analyst 输出
{
  "financial_score": 8.5,
  "growth_rate": 12.3,
  "recommendation": "buy/hold/sell"
}

### technical-analyst 输出
{
  "trend": "up/down/sideways",
  "signal": "buy/hold/sell",
  "support_level": 1750,
  "resistance_level": 2000
}

审查反馈文件

# review-feedback.md

## 分析报告审查结果(2026-01-22)

### 需要修正
1. 财务数据缺少 2025 Q4 季报数据
2. 技术分析缺少成交量分析

### 建议改进
1. 增加同行业对比分析
注记知识卡片

通过 AGENTS.md 共享持久化信息。项目级的关键信息应该写入 AGENTS.md,而不是依赖对话历史。所有 Opencode 实例都会读取 AGENTS.md,获得项目的全局知识。

上下文管理最佳实践

  1. 主对话保持高层次:主对话应该聚焦在高层次的规划和决策,把具体执行委派给子智能体

  2. 使用 /clear 和 /compact 管理上下文:当主对话上下文积累过多时,/clear 清空所有上下文重新开始,/compact 让 AI 总结当前会话压缩上下文

  3. 通过 /session 恢复会话:使用 /session 命令可以恢复之前的对话会话