test_goal_tool.py 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224
  1. """
  2. 测试重构后的 Goal 工具功能
  3. 测试内容:
  4. 1. 添加目标(add)
  5. 2. 切换焦点(focus)
  6. 3. 完成目标(done)
  7. 4. 放弃目标(abandon)
  8. 5. 位置控制(after, under)
  9. """
  10. import asyncio
  11. import sys
  12. from pathlib import Path
  13. # 添加项目根目录到 Python 路径
  14. sys.path.insert(0, str(Path(__file__).parent.parent))
  15. from agent.models.goal import GoalTree, Goal
  16. from agent.tools.builtin.goal import goal, set_goal_tree
  17. async def test_goal_basic_operations():
  18. """测试 Goal 工具的基本操作"""
  19. print("=" * 80)
  20. print("测试 1: Goal 工具基本操作")
  21. print("=" * 80)
  22. print()
  23. # 创建 GoalTree
  24. tree = GoalTree(mission="实现用户认证系统")
  25. set_goal_tree(tree)
  26. # 1. 添加顶层目标
  27. print("1. 添加顶层目标")
  28. result = await goal(
  29. add="分析需求, 设计架构, 实现功能, 编写测试",
  30. reason="了解需求, 规划结构, 完成开发, 确保质量"
  31. )
  32. print(result)
  33. print()
  34. # 2. 切换焦点到第一个目标
  35. print("2. 切换焦点到目标 1")
  36. result = await goal(focus="1")
  37. print(result)
  38. print()
  39. # 3. 为当前目标添加子目标
  40. print("3. 为目标 1 添加子目标")
  41. result = await goal(
  42. add="阅读文档, 分析用例, 整理需求",
  43. reason="理解系统, 明确场景, 形成文档"
  44. )
  45. print(result)
  46. print()
  47. # 4. 使用 under 参数添加子目标
  48. print("4. 使用 under 为目标 2 添加子目标")
  49. result = await goal(
  50. add="设计数据模型, 设计API接口",
  51. under="2"
  52. )
  53. print(result)
  54. print()
  55. # 5. 使用 after 参数添加同级目标
  56. print("5. 使用 after 在目标 2 后添加同级目标")
  57. result = await goal(
  58. add="技术选型",
  59. after="2"
  60. )
  61. print(result)
  62. print()
  63. # 6. 完成当前目标
  64. print("6. 完成当前目标(1)")
  65. result = await goal(done="已完成需求分析,整理了用户认证的核心需求")
  66. print(result)
  67. print()
  68. # 7. 切换焦点并完成
  69. print("7. 切换到目标 2.1 并完成")
  70. result = await goal(focus="2.1")
  71. result = await goal(done="完成数据模型设计:User, Session, Token")
  72. print(result)
  73. print()
  74. # 8. 放弃一个目标
  75. print("8. 切换到目标 3 并放弃")
  76. result = await goal(focus="3")
  77. result = await goal(abandon="技术选型已在架构设计中完成,无需单独进行")
  78. print(result)
  79. print()
  80. print("=" * 80)
  81. print("✅ Goal 工具基本操作测试完成")
  82. print("=" * 80)
  83. async def test_goal_advanced_operations():
  84. """测试 Goal 工具的高级操作"""
  85. print("\n" + "=" * 80)
  86. print("测试 2: Goal 工具高级操作")
  87. print("=" * 80)
  88. print()
  89. # 创建新的 GoalTree
  90. tree = GoalTree(mission="开发博客系统")
  91. set_goal_tree(tree)
  92. # 1. 同时完成和切换焦点
  93. print("1. 添加目标并测试 done + focus 组合")
  94. await goal(add="前端开发, 后端开发, 部署上线")
  95. await goal(focus="1")
  96. await goal(add="设计UI, 实现组件", under="1")
  97. print("\n完成目标 1.1 并切换到 1.2")
  98. result = await goal(done="UI设计完成", focus="1.2")
  99. print(result)
  100. print()
  101. # 2. 测试自动焦点切换
  102. print("2. 测试自动焦点切换(无焦点时添加目标)")
  103. tree2 = GoalTree(mission="测试自动焦点")
  104. set_goal_tree(tree2)
  105. result = await goal(add="第一个目标")
  106. print(result)
  107. print()
  108. # 3. 测试级联完成
  109. print("3. 测试级联完成(完成所有子目标后自动完成父目标)")
  110. tree3 = GoalTree(mission="测试级联完成")
  111. set_goal_tree(tree3)
  112. await goal(add="父目标")
  113. await goal(focus="1")
  114. await goal(add="子目标1, 子目标2")
  115. print("\n完成子目标 1.1")
  116. await goal(focus="1.1")
  117. await goal(done="子目标1完成")
  118. print("\n完成子目标 1.2(应该自动完成父目标)")
  119. await goal(focus="1.2")
  120. result = await goal(done="子目标2完成")
  121. print(result)
  122. print()
  123. print("=" * 80)
  124. print("✅ Goal 工具高级操作测试完成")
  125. print("=" * 80)
  126. async def test_goal_error_handling():
  127. """测试 Goal 工具的错误处理"""
  128. print("\n" + "=" * 80)
  129. print("测试 3: Goal 工具错误处理")
  130. print("=" * 80)
  131. print()
  132. tree = GoalTree(mission="测试错误处理")
  133. set_goal_tree(tree)
  134. # 1. 无焦点时尝试完成
  135. print("1. 无焦点时尝试完成目标")
  136. result = await goal(done="测试")
  137. print(result)
  138. print()
  139. # 2. 无焦点时尝试放弃
  140. print("2. 无焦点时尝试放弃目标")
  141. result = await goal(abandon="测试")
  142. print(result)
  143. print()
  144. # 3. 切换到不存在的目标
  145. print("3. 切换到不存在的目标")
  146. result = await goal(focus="999")
  147. print(result)
  148. print()
  149. # 4. after 和 under 同时指定
  150. print("4. 同时指定 after 和 under")
  151. await goal(add="目标1")
  152. result = await goal(add="目标2", after="1", under="1")
  153. print(result)
  154. print()
  155. # 5. after 指定不存在的目标
  156. print("5. after 指定不存在的目标")
  157. result = await goal(add="目标3", after="999")
  158. print(result)
  159. print()
  160. print("=" * 80)
  161. print("✅ Goal 工具错误处理测试完成")
  162. print("=" * 80)
  163. async def main():
  164. """运行所有测试"""
  165. print("\n" + "🧪" * 40)
  166. print("Goal 工具功能测试")
  167. print("🧪" * 40 + "\n")
  168. try:
  169. await test_goal_basic_operations()
  170. await test_goal_advanced_operations()
  171. await test_goal_error_handling()
  172. print("\n" + "=" * 80)
  173. print("🎉 所有测试完成!")
  174. print("=" * 80)
  175. except Exception as e:
  176. print(f"\n❌ 测试失败: {e}")
  177. import traceback
  178. traceback.print_exc()
  179. if __name__ == "__main__":
  180. asyncio.run(main())