Agent Team System

个人工作团队多 Agent 协作系统 — 概要设计
版本 v0.1 语言 Go LLM Claude API 2026-05-21

01系统概述

构建一套基于 Go 的多 Agent 协作框架,模拟"私人工作团队"的运作方式:

设计原则

方案先行
执行前由 Team Lead 制定整体方案,经用户确认后再派发任务,避免返工
最小权限
每个 Agent 只持有完成其职责所需的工具和权限,工具即权限边界
可扩展
新增 Agent 类型只需配置 AgentConfig(角色 + 工具集 + MCP),无需修改框架
可审计
所有 LLM 调用、工具执行、消息流转均有日志记录,支持回溯

02系统架构

User 自然语言 Max (Team Lead) 需求理解 · 任务拆解 · 方案确认 进度追踪 · 结果汇总 · 关键决策上报 Claude Sonnet Approval Gate Message Bus (Go Channel) Leo (Coder) 写代码 · 改 Bug · 重构 read/write_file run_shell · git MCP: gitnexus Claude Opus Ada (Architect) 方案设计 · 架构评审 read_file (只读) MCP: gitnexus MCP: cooper Claude Opus Ray (Tester) 写测试 · 跑测试 · 覆盖率 read/write_file (测试目录) run_test coverage_report Claude Sonnet Sam (Ops) 日志查询 · 监控排查 query_log query_metrics MCP: grafana Claude Haiku LLM Router → Claude API (Opus / Sonnet / Haiku)

03核心模块

模块职责关键接口
Agent Runtime Agent 生命周期管理:创建、启动、停止、心跳检测、超时处理 AgentRuntime.Spawn() .Stop()
Scheduler 解析任务 DAG,按拓扑序调度,并行派发无依赖任务 Scheduler.Submit(dag) .OnTaskDone()
Task Manager 任务 CRUD、状态流转、依赖追踪 TaskManager.Create() .UpdateStatus()
Message Bus Agent 间消息传递,基于 Go channel,星型拓扑 Bus.Send(msg) Bus.Subscribe(agentID)
LLM Router 模型调用路由,支持不同 Agent 使用不同模型/参数 Router.Chat(model, messages, tools)
Tool Registry 工具注册、发现、按 Agent 角色过滤 Registry.Register(tool) .ForRole(role)
Skill Engine Skill 加载、Agent 可用性校验、prompt 注入、I/O 契约验证 SkillEngine.Execute() SkillRegistry.ForAgent()
MCP Manager MCP Server 进程管理、协议通信、工具动态发现 MCPManager.Connect(server) .CallTool()
Approval Gate 关键决策点暂停执行,等待用户确认 Gate.RequestApproval(plan) .OnApproved()
Audit Log 记录所有 LLM 调用、工具执行、消息流转 AuditLog.Record(event)

04Agent 角色定义

Max (Team Lead)

Claude Sonnet

  • 面向用户的唯一对话入口
  • 理解需求,拆解为任务 DAG
  • 制定整体方案,提交用户确认
  • 按 DAG 调度 Worker,追踪进度
  • 汇总结果,输出最终交付

工具:task_create / dispatch / ask_user

文件系统操作权限

Leo (Coder)

Claude Opus

  • 编写、修改、重构代码
  • 修复 Bug
  • Git 操作(commit、diff)

工具:read_file / write_file / run_shell(受限) / git_*

MCP:gitnexus

Ada (Architect)

Claude Opus

  • 技术方案设计
  • 架构评审与选型
  • 文档输出

工具:read_file(只读) / search_code

MCP:gitnexus / cooper

写文件权限

Ray (Tester)

Claude Sonnet

  • 编写单元测试、集成测试
  • 执行测试、收集覆盖率
  • 测试结果分析

工具:read_file / write_file(仅 *_test.go) / run_test

Sam (Ops)

Claude Haiku

  • 日志查询与分析
  • 监控指标检查
  • 问题排查辅助

工具:query_log / query_metrics

MCP:grafana

文件写权限

可扩展…

新 Agent 类型通过配置 AgentConfig 即可接入,无需修改框架代码。

潜在扩展:Reviewer(代码审查)、DocWriter(文档生成)、DBA(数据库操作)等

05任务生命周期

5.1 状态机

Created
Planned
Approved
Dispatched
Running
Done
Running → Failed Failed → Dispatched (重试)

5.2 任务 DAG

Max 将用户需求拆解为多个 Task 节点,通过 DependsOn 字段声明依赖关系,形成 DAG:

Task{ID: "T1", Agent: "Ada",  Desc: "设计接口方案"}
Task{ID: "T2", Agent: "Leo",  Desc: "实现代码",   DependsOn: ["T1"]}
Task{ID: "T3", Agent: "Ray",  Desc: "编写测试",   DependsOn: ["T2"]}
Task{ID: "T4", Agent: "Leo",  Desc: "修复测试失败", DependsOn: ["T3"]}  // 条件触发

5.3 调度规则

06通信机制

6.1 拓扑:星型

所有 Worker Agent 只与 Max (Team Lead) 通信。Worker 之间不直接对话
Max 负责跨 Agent 的上下文裁剪和信息传递。

6.2 消息类型

类型方向说明
TaskAssignMax → Worker分配任务,含任务描述 + 上游 Artifact
TaskResultWorker → Max任务完成,返回产出物
TaskFailedWorker → Max任务失败,附错误信息
NeedClarifyWorker → Max需要更多信息,由 Max 决定是否上报用户
ProgressWorker → Max进度更新(可选)
ApprovalReqMax → User方案/关键决策需用户确认
ApprovalRespUser → Max用户确认/拒绝/修改

6.3 实现方式

// 中心消息总线
type MessageBus struct {
    inbox    chan Message           // 所有消息汇聚于此
    subs     map[string]chan Message // agentID → 该 agent 的收件箱
}

// 发送消息
func (b *MessageBus) Send(msg Message) {
    b.subs[msg.To] <- msg
}

// Agent 监听自己的收件箱
func (a *Agent) listen() {
    for msg := range a.inbox {
        a.handleMessage(msg)
    }
}

07Tool & MCP 集成

7.1 Tool 接口

type Tool interface {
    Name() string
    Description() string
    Parameters() json.RawMessage    // JSON Schema
    Execute(ctx context.Context, params json.RawMessage) (ToolResult, error)
}

type ToolResult struct {
    Content  string
    IsError  bool
}

7.2 内置工具清单

工具说明可用角色
read_file读取文件内容Leo / Ada / Ray
write_file写入文件内容Leo / Ray(受限)
list_dir列出目录All Workers
run_shell执行 shell 命令(白名单控制)Leo
run_test执行 go testRay
git_diff查看 git diffLeo
git_commit提交代码Leo
search_code代码搜索(grep/ast)Ada / Leo
query_log查询日志系统Sam
query_metrics查询监控指标Sam
coverage_report生成覆盖率报告Ray

7.3 Skill 层

Skill 是 Tool 之上的可复用工作流模板,由 Prompt 模板 + 工具子集 + I/O 契约 组成。Agent 激活 skill 后,按专用 prompt 和受限工具集执行,产出结构化结果。

type Skill struct {
    Name          string           // "code_review" / "bug_triage"
    Description   string
    Prompt        string           // 针对该 skill 的专用 prompt 模板
    RequiredTools []string         // 需要的工具列表
    InputSchema   json.RawMessage  // 输入参数 JSON Schema
    OutputSchema  json.RawMessage  // 输出结构 JSON Schema
    Timeout       time.Duration
}

type SkillRegistry struct {
    skills map[string]*Skill
}

func (r *SkillRegistry) Load(path string) error          // 从 YAML 加载
func (r *SkillRegistry) ForAgent(agent *Agent) []*Skill   // 返回 agent 可用的 skill
func (r *SkillRegistry) Get(name string) *Skill           // 按名称查找
内置 Skill说明所需工具可用 Agent
code_review代码审查,输出问题列表和修复建议read_file, git_diff, search_codeAda / Leo
bug_triageBug 分诊,定位根因并给出修复方案read_file, search_code, query_logAda(+ Sam 配合)
test_coverage_analysis测试覆盖率分析,识别未覆盖路径run_test, coverage_report, read_fileRay
impact_analysis变更影响分析,评估改动波及范围read_file, search_codeAda
Skill vs Tool:Tool 是原子操作(读文件、执行命令),Skill 是由 LLM 驱动的多步工作流。Skill 不硬编码步骤,而是通过专用 prompt 引导 LLM 自主编排 tool 调用——兼顾确定性(I/O 契约)和灵活性(LLM 推理)。

7.5 MCP 集成

每个 Agent 可独立连接自己的 MCP Server,通过标准 MCP 协议(JSON-RPC over stdio)通信:

type MCPServer struct {
    Name    string
    Command string              // e.g. "npx @anthropic/gitnexus-mcp"
    Args    []string
    Env     map[string]string
}

type MCPClient struct {
    proc    *exec.Cmd
    stdin   io.WriteCloser
    stdout  *bufio.Reader
    tools   []Tool              // 通过 tools/list 动态发现
}

// Agent 初始化时连接 MCP
func (a *Agent) initMCP() {
    for _, srv := range a.config.MCPServers {
        client := NewMCPClient(srv)
        client.Connect()
        // MCP 发现的工具自动合并到 agent 工具集
        a.tools = append(a.tools, client.Tools()...)
    }
}

7.6 Tool 权限矩阵

Tool \ Agent Max Leo Ada Ray Sam read_file write_file run_shell query_log/metrics ask_user/dispatch ✓ 完全开放 △ 受限(白名单/目录限制) ✗ 禁止

08安全与权限模型

工具即权限
Agent 只能调用其 AgentConfig 中注册的工具。未注册的工具调用会被 Runtime 拦截并拒绝。
Shell 白名单
run_shell 工具内置命令白名单:
AllowedCommands: [
  "go build", "go test", "go vet",
  "git diff", "git status", "git log",
  "grep", "find", "wc"
]
目录沙箱
文件操作限制在项目根目录内。write_file 拒绝写入 .envcredentials 等敏感文件。
Approval Gate
需要用户确认的场景:
  • 整体执行方案(执行前)
  • git push / 部署操作
  • 涉及生产环境的操作
  • 任务失败后的处理决策

09核心接口定义(Go)

9.1 Agent 接口

type Agent interface {
    // 基础信息
    ID() string
    Role() AgentRole

    // 生命周期
    Start(ctx context.Context) error
    Stop() error

    // 任务处理
    HandleTask(task *Task) (*TaskResult, error)

    // 消息处理
    HandleMessage(msg Message) error
}

type AgentRole string

const (
    RoleMax AgentRole = "max"    // Team Lead
    RoleLeo AgentRole = "leo"    // Coder
    RoleAda AgentRole = "ada"    // Architect
    RoleRay AgentRole = "ray"    // Tester
    RoleSam AgentRole = "sam"    // Ops
)

9.2 Task 定义

type Task struct {
    ID          string
    Type        AgentRole          // 应该由哪种角色处理
    Title       string
    Description string
    DependsOn   []string           // 前置任务 ID
    Artifacts   []Artifact         // 上游产出物
    Status      TaskStatus
    AssignedTo  string             // Agent ID
    Result      *TaskResult
    CreatedAt   time.Time
    UpdatedAt   time.Time
}

type TaskStatus int

const (
    TaskCreated    TaskStatus = iota
    TaskPlanned                       // 已纳入 DAG
    TaskApproved                      // 用户确认通过
    TaskDispatched                    // 已分配给 Agent
    TaskRunning                       // Agent 执行中
    TaskDone                          // 执行完成
    TaskFailed                        // 执行失败
)

type Artifact struct {
    Name    string                // "design_doc" / "code_diff" / "test_report"
    Type    string                // "text" / "file" / "json"
    Content string
}

9.3 AgentConfig

type AgentConfig struct {
    Role         AgentRole
    SystemPrompt string
    Model        string             // "claude-opus-4-7" / "claude-sonnet-4-6" / "claude-haiku-4-5"
    Tools        []Tool
    MCPServers   []MCPServerConfig
    Constraints  AgentConstraints
}

type AgentConstraints struct {
    AllowedDirs     []string        // 可访问的目录
    AllowedCommands []string        // shell 白名单
    MaxTokens       int             // 单次调用最大 token
    Timeout         time.Duration   // 任务超时时间
}

9.4 Skill Engine

type SkillEngine struct {
    registry *SkillRegistry
}

// 激活 skill:注入 prompt、限制工具集、执行、校验输出
func (e *SkillEngine) Execute(ctx context.Context, agent *Agent, skillName string, input json.RawMessage) (*SkillResult, error)

type SkillResult struct {
    SkillName string
    Output    json.RawMessage   // 符合 OutputSchema 的结构化结果
    ToolCalls []ToolCallRecord  // 执行过程中的工具调用记录
    Usage     TokenUsage
}

9.5 LLM Router

type LLMRouter interface {
    Chat(ctx context.Context, req ChatRequest) (*ChatResponse, error)
}

type ChatRequest struct {
    Model    string
    Messages []Message
    Tools    []ToolDefinition
    System   string
}

type ChatResponse struct {
    Content   string
    ToolCalls []ToolCall
    Usage     TokenUsage
}

9.6 Scheduler

type Scheduler struct {
    tasks    map[string]*Task
    agents   map[AgentRole]*Agent
    bus      *MessageBus
    gate     *ApprovalGate
}

func (s *Scheduler) Submit(dag *TaskDAG) error     // 提交任务 DAG
func (s *Scheduler) OnTaskDone(taskID string) error // 任务完成回调,触发下游
func (s *Scheduler) GetStatus() *DAGStatus          // 获取整体进度

10典型工作流

场景 A:新功能开发

User: 需求描述
Max: 理解 → 拆解 → 制定方案
User: 确认方案
↓ 方案通过,开始执行
T1: Ada 设计
T2: Leo 实现
T3: Ray 测试
Max: 汇总交付

场景 B:Bug 排查与修复

User: Bug 描述
Max: 分析 → 并行探索
↓ 并行
Sam: 查日志/监控
+
Ada: 代码定位
↓ 汇总分析
Max: 确定根因 → 制定修复方案
Leo: 修复
Ray: 验证

场景 C:代码重构

User: 重构目标
Ada: 评估影响 + 方案
User: 确认
↓ 并行执行
Leo: 模块A
|
Leo: 模块B
|
Leo: 模块C
↓ 合并
Ray: 集成测试
Max: 汇总交付

11技术选型

组件选型理由
语言Go 1.22+团队熟悉,并发性能好,goroutine 天然适合多 Agent
LLMClaude API (Anthropic)统一后端,按角色选择 Opus/Sonnet/Haiku
LLM SDKanthropic-go (官方)原生支持 tool use / streaming / system prompt
MCP 协议自实现 JSON-RPC over stdioMCP 协议简单,Go 无成熟库,自实现可控
消息通信Go channel单进程内足够,后续可换 NATS/Redis
任务持久化SQLite (初期) → PostgreSQL初期单机,后续可扩展
配置管理YAMLAgent 角色、工具集、MCP 等通过配置文件定义
日志审计zerolog + 结构化日志性能好,支持 JSON 输出
用户交互CLI (初期) → Web UI先实现核心功能,后续加 UI

12后续规划

Phase 1 — MVP 优先

Phase 2 — 完善

Phase 3 — 增强