GOAL_EXPLAINED.md 9.9 KB

Goal 系统详解

什么是 Goal?

Goal(目标) 是这个 Agent 框架中的计划管理系统,用于帮助 Agent 组织和追踪复杂任务的执行过程。

核心概念

Goal = 执行计划中的一个目标节点
GoalTree = 目标树,管理整个执行计划的层级结构

可以把 Goal 理解为:

  • 任务分解:将大任务拆分成小目标
  • 工作记忆:记录当前在做什么、做完了什么
  • 进度追踪:跟踪每个目标的状态和结果

为什么需要 Goal?

问题场景

当 Agent 执行复杂任务时,会遇到这些问题:

  1. 任务复杂:一个大任务需要多个步骤
  2. 容易迷失:执行过程中忘记原本要做什么
  3. 难以追踪:不知道哪些完成了,哪些还没做
  4. 缺乏规划:没有清晰的执行路径

Goal 的解决方案

用户任务: "帮我实现一个用户登录功能"

没有 Goal:
Agent → 直接开始写代码 → 可能遗漏测试、文档等

有 Goal:
Agent → 创建计划:
  1. 设计数据库表结构
  2. 实现登录接口
    2.1 实现密码加密
    2.2 实现 JWT 生成
    2.3 实现登录验证
  3. 编写单元测试
  4. 编写 API 文档

→ 按计划逐步执行 → 完整、有序、可追踪

Goal 的结构

Goal 对象

@dataclass
class Goal:
    id: str                    # 唯一 ID(如 "1", "2", "3")
    description: str           # 目标描述(如 "实现登录接口")
    reason: str               # 创建理由(为什么要做这个)
    parent_id: Optional[str]  # 父目标 ID(构建层级关系)
    status: GoalStatus        # 状态:pending/in_progress/completed/abandoned
    summary: Optional[str]    # 完成时的总结(记录关键结论)

    # 统计信息
    self_stats: GoalStats     # 自身统计(消息数、token、成本)
    cumulative_stats: GoalStats  # 累计统计(包含所有子目标)

GoalTree 目标树

@dataclass
class GoalTree:
    mission: str              # 总任务描述
    goals: List[Goal]         # 所有目标的扁平列表
    current_id: Optional[str] # 当前焦点目标 ID

层级结构示例

GoalTree
├── mission: "实现用户登录功能"
├── current_id: "2.1"
└── goals:
    ├── Goal(id="1", description="设计数据库表结构", status="completed")
    ├── Goal(id="2", description="实现登录接口", status="in_progress")
    │   ├── Goal(id="3", parent_id="2", description="实现密码加密", status="completed")
    │   ├── Goal(id="4", parent_id="2", description="实现 JWT 生成", status="in_progress") ← 当前焦点
    │   └── Goal(id="5", parent_id="2", description="实现登录验证", status="pending")
    ├── Goal(id="6", description="编写单元测试", status="pending")
    └── Goal(id="7", description="编写 API 文档", status="pending")

显示为:

[Mission] 实现用户登录功能

1. [✓] 设计数据库表结构
2. [→] 实现登录接口
   2.1 [✓] 实现密码加密
   2.2 [→] 实现 JWT 生成  ← 当前焦点
   2.3 [ ] 实现登录验证
3. [ ] 编写单元测试
4. [ ] 编写 API 文档

Goal 工具的使用

Agent 通过 goal 工具来管理计划:

1. 创建目标

# 创建顶层目标
goal(add="设计方案, 实现代码, 编写测试")

# 创建子目标
goal(add="实现接口, 实现逻辑", under="2")

# 在某个目标后添加同级目标
goal(add="编写文档", after="3")

2. 切换焦点

# 聚焦到目标 1,开始执行
goal(focus="1")

# 聚焦到子目标
goal(focus="2.1")

3. 完成目标

# 完成当前目标,记录关键结论
goal(done="方案确定使用 JWT 认证,安全性高")

# 完成并切换到下一个
goal(done="接口实现完成", focus="2")

4. 放弃目标

# 放弃不可行的目标
goal(abandon="方案 A 需要 Redis,但环境不支持")

Goal 的工作流程

典型执行流程

1. 用户提交任务
   ↓
2. Agent 分析任务,创建初步计划
   goal(add="调研方案, 实现功能, 测试验证")
   ↓
3. 聚焦到第一个目标
   goal(focus="1")
   ↓
4. 执行目标(调用工具、分析结果)
   ↓
5. 完成目标,记录结论
   goal(done="确定使用 OpenPose 方案")
   ↓
6. 切换到下一个目标
   goal(focus="2")
   ↓
7. 如果需要,创建子目标
   goal(add="设计接口, 实现代码", under="2")
   ↓
8. 重复 3-7,直到所有目标完成

动态调整

执行过程中发现新问题:
goal(add="修复 Bug", after="2")

发现某个方案不可行:
goal(abandon="方案 A 性能不达标")
goal(add="尝试方案 B", after="1")

Goal 的作用

1. 任务分解

将复杂任务拆分成可管理的小目标:

大任务: "开发一个博客系统"
↓
Goal Tree:
1. 设计数据库
   1.1 设计用户表
   1.2 设计文章表
   1.3 设计评论表
2. 实现后端 API
   2.1 用户管理
   2.2 文章管理
   2.3 评论管理
3. 实现前端页面
4. 部署上线

2. 进度追踪

清楚知道当前进度:

[Mission] 开发博客系统

1. [✓] 设计数据库
   1.1 [✓] 设计用户表
   1.2 [✓] 设计文章表
   1.3 [✓] 设计评论表
2. [→] 实现后端 API  ← 当前在这里
   2.1 [✓] 用户管理
   2.2 [→] 文章管理  ← 具体在这个子任务
   2.3 [ ] 评论管理
3. [ ] 实现前端页面
4. [ ] 部署上线

进度: 5/10 完成 (50%)

3. 工作记忆

记录关键结论,避免重复工作:

Goal 1: 调研数据库方案
Summary: "选择 PostgreSQL,支持 JSON 字段,性能好"

Goal 2: 实现用户认证
Summary: "使用 JWT + Redis 存储 token,过期时间 7 天"

→ 后续目标可以参考这些结论

4. 上下文管理

系统会定期将当前计划注入到 Agent 的上下文中:

System: 当前计划状态:
[Mission] 开发博客系统
1. [✓] 设计数据库 (已完成: 选择 PostgreSQL)
2. [→] 实现后端 API (进行中)
   2.1 [✓] 用户管理 (已完成: JWT 认证)
   2.2 [→] 文章管理 (当前焦点)
   2.3 [ ] 评论管理
...

Agent: 好的,我现在在做文章管理,已经完成了用户管理...

5. 可视化和调试

通过 API Server 可以可视化查看 Goal Tree:

python api_server.py
# 访问 http://localhost:8000/api/traces/{trace_id}

可以看到:

  • 目标的层级结构
  • 每个目标的状态
  • 执行时间和成本
  • 工具调用序列

实际案例

案例 1:简单任务(单个 Goal)

任务: "将 CSV 文件转换为 JSON"

Goal Tree:
1. [→] 将 CSV 转换为 JSON

执行:
- 读取 CSV 文件
- 解析数据
- 转换为 JSON
- 保存文件
- goal(done="转换完成,输出到 output.json")

案例 2:中等任务(多个 Goal)

任务: "分析销售数据并生成报告"

Goal Tree:
1. [✓] 读取销售数据
2. [✓] 数据清洗和预处理
3. [→] 数据分析
   3.1 [✓] 计算总销售额
   3.2 [→] 分析销售趋势
   3.3 [ ] 识别热销产品
4. [ ] 生成可视化图表
5. [ ] 编写分析报告

案例 3:复杂任务(深层嵌套)

任务: "实现一个完整的用户认证系统"

Goal Tree:
1. [✓] 需求分析和方案设计
2. [→] 后端实现
   2.1 [✓] 数据库设计
       2.1.1 [✓] 设计用户表
       2.1.2 [✓] 设计权限表
   2.2 [→] API 实现
       2.2.1 [✓] 注册接口
       2.2.2 [→] 登录接口
       2.2.3 [ ] 登出接口
       2.2.4 [ ] 密码重置接口
   2.3 [ ] 安全加固
3. [ ] 前端实现
4. [ ] 测试
5. [ ] 部署

最佳实践

1. 先规划再执行

# ✅ 好的做法
goal(add="调研方案, 实现功能, 测试验证")
goal(focus="1")
# 开始执行...

# ❌ 不好的做法
# 直接开始执行,没有计划

2. 记录关键结论

# ✅ 好的做法
goal(done="选择 PostgreSQL,支持 JSON 字段,性能优于 MySQL")

# ❌ 不好的做法
goal(done="调研完成")  # 没有信息量

3. 保持焦点在具体目标

# ✅ 好的做法
goal(add="设计接口, 实现代码", under="2")
goal(focus="2.1")  # 聚焦到具体的子目标

# ❌ 不好的做法
goal(focus="2")  # 聚焦在父目标,太宽泛

4. 灵活调整计划

# 执行中发现新问题
goal(add="修复性能问题", after="3")

# 发现方案不可行
goal(abandon="方案 A 不支持并发")
goal(add="尝试方案 B", after="1")

5. 简单任务不过度拆分

# ✅ 简单任务
goal(add="读取文件并统计行数")
# 一个目标就够了

# ❌ 过度拆分
goal(add="打开文件, 读取内容, 统计行数, 关闭文件")
# 太细碎,没必要

总结

Goal 是什么?

  • 计划管理系统:帮助 Agent 组织和追踪任务执行
  • 工作记忆:记录当前在做什么、做完了什么
  • 层级结构:支持任务分解和嵌套

Goal 的核心价值

  1. 任务分解:将复杂任务拆分成可管理的小目标
  2. 进度追踪:清楚知道完成了什么、还剩什么
  3. 工作记忆:记录关键结论,避免重复工作
  4. 上下文管理:系统自动注入计划状态到 Agent
  5. 可视化调试:通过 API Server 查看执行过程

何时使用 Goal?

  • ✅ 复杂任务需要多个步骤
  • ✅ 需要清晰的执行计划
  • ✅ 需要追踪进度和结果
  • ✅ 任务可能需要动态调整

  • ❌ 非常简单的单步任务

  • ❌ 不需要计划的即时响应

类比理解

Goal 就像是:

📋 待办清单(Todo List)
- 记录要做的事情
- 勾选完成的项目
- 添加新的任务

🗺️ 导航地图
- 规划路线
- 追踪当前位置
- 调整路径

🧠 工作记忆
- 记住当前在做什么
- 记录重要结论
- 避免迷失方向

Goal 让 Agent 像人类一样有计划地工作,而不是盲目执行! 🎯