06_three_day_workflow.py 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276
  1. """
  2. CodebaseMaintainer 三天工作流演示
  3. 完整展示长程智能体在三天内的工作流程:
  4. - 第一天: 探索代码库
  5. - 第二天: 分析代码质量
  6. - 第三天: 规划重构任务
  7. - 一周后: 检查进度
  8. """
  9. import os
  10. # 配置嵌入模型(三选一)
  11. # 方案一:TF-IDF(最简单,无需额外依赖)
  12. os.environ['EMBED_MODEL_TYPE'] = 'tfidf'
  13. os.environ['EMBED_MODEL_NAME'] = '' # 重要:必须清空,否则会传递不兼容的参数
  14. # 方案二:本地Transformer(需要: pip install sentence-transformers 和 HF token)
  15. # os.environ['EMBED_MODEL_TYPE'] = 'local'
  16. # os.environ['EMBED_MODEL_NAME'] = 'sentence-transformers/all-MiniLM-L6-v2'
  17. # os.environ['HF_TOKEN'] = 'your_hf_token_here' # 或使用 huggingface-cli login
  18. # 方案三:通义千问(需要API key)
  19. # os.environ['EMBED_MODEL_TYPE'] = 'dashscope'
  20. # os.environ['EMBED_MODEL_NAME'] = 'text-embedding-v3'
  21. # os.environ['EMBED_API_KEY'] = 'your_api_key_here'
  22. from hello_agents import HelloAgentsLLM
  23. from datetime import datetime
  24. import json
  25. import time
  26. # 导入 CodebaseMaintainer
  27. import sys
  28. sys.path.append('.')
  29. from codebase_maintainer import CodebaseMaintainer
  30. def day_1_exploration(maintainer):
  31. """第一天: 探索代码库"""
  32. print("\n" + "=" * 80)
  33. print("第一天: 探索代码库")
  34. print("=" * 80 + "\n")
  35. # 1. 初步探索
  36. print("### 1. 初步探索项目结构 ###")
  37. response = maintainer.explore()
  38. print(f"\n助手总结:\n{response[:500]}...\n")
  39. # 2. 深入分析某个模块
  40. print("### 2. 分析数据处理模块 ###")
  41. response = maintainer.run("请查看 data_processor.py 文件,分析其代码设计")
  42. print(f"\n助手总结:\n{response[:500]}...\n")
  43. # 模拟时间流逝
  44. time.sleep(1)
  45. def day_2_analysis(maintainer):
  46. """第二天: 分析代码质量"""
  47. print("\n" + "=" * 80)
  48. print("第二天: 分析代码质量")
  49. print("=" * 80 + "\n")
  50. # 1. 整体质量分析
  51. print("### 1. 查找所有 TODO 注释 ###")
  52. response = maintainer.analyze()
  53. print(f"\n助手总结:\n{response[:500]}...\n")
  54. # 2. 查看具体问题
  55. print("### 2. 分析 API 客户端代码 ###")
  56. response = maintainer.run(
  57. "请分析 api_client.py 的代码质量,特别是错误处理部分,给出改进建议"
  58. )
  59. print(f"\n助手总结:\n{response[:500]}...\n")
  60. # 模拟时间流逝
  61. time.sleep(1)
  62. def day_3_planning(maintainer):
  63. """第三天: 规划重构任务"""
  64. print("\n" + "=" * 80)
  65. print("第三天: 规划重构任务")
  66. print("=" * 80 + "\n")
  67. # 1. 回顾进度
  68. print("### 1. 回顾当前进度 ###")
  69. response = maintainer.plan_next_steps()
  70. print(f"\n助手总结:\n{response[:500]}...\n")
  71. # 2. 手动创建详细的重构计划
  72. print("### 2. 创建详细重构计划 ###")
  73. maintainer.create_note(
  74. title="本周重构计划 - Week 1",
  75. content="""## 目标
  76. 完成代码质量改进和 TODO 清理
  77. ## 任务清单
  78. - [ ] 实现 data_processor.py 中的数据验证逻辑
  79. - [ ] 添加 api_client.py 的重试和错误处理机制
  80. - [ ] 优化 utils.py 的格式化逻辑
  81. - [ ] 补充 models.py 的用户验证方法
  82. ## 时间安排
  83. - 周一: 实现数据验证逻辑
  84. - 周二: 完善错误处理
  85. - 周三-周四: 优化工具函数
  86. - 周五: Code Review 和测试
  87. ## 风险
  88. - 新增验证逻辑可能影响现有功能
  89. - 需要充分的单元测试覆盖
  90. """,
  91. note_type="task_state",
  92. tags=["refactoring", "week1", "high_priority"]
  93. )
  94. print("✅ 已创建详细的重构计划\n")
  95. # 模拟时间流逝
  96. time.sleep(1)
  97. def week_later_review(maintainer):
  98. """一周后: 检查进度"""
  99. print("\n" + "=" * 80)
  100. print("一周后: 检查进度")
  101. print("=" * 80 + "\n")
  102. # 1. 查看笔记摘要
  103. print("### 1. 笔记摘要 ###")
  104. summary = maintainer.note_tool.run({"action": "summary"})
  105. print("📊 笔记摘要:")
  106. print(json.dumps(summary, indent=2, ensure_ascii=False))
  107. print()
  108. # 2. 生成完整报告
  109. print("### 2. 会话报告 ###")
  110. report = maintainer.generate_report()
  111. print("\n📄 会话报告:")
  112. print(json.dumps(report, indent=2, ensure_ascii=False))
  113. def demonstrate_cross_session_continuity():
  114. """演示跨会话的连贯性"""
  115. print("\n" + "=" * 80)
  116. print("演示跨会话的连贯性")
  117. print("=" * 80 + "\n")
  118. # 第一次会话
  119. print("### 第一次会话 (session_1) ###")
  120. maintainer_1 = CodebaseMaintainer(
  121. project_name="demo_codebase",
  122. codebase_path="./codebase",
  123. llm=HelloAgentsLLM()
  124. )
  125. # 创建一些笔记
  126. maintainer_1.create_note(
  127. title="代码质量问题",
  128. content="发现多处 TODO 注释需要实现,特别是数据验证和错误处理部分",
  129. note_type="blocker",
  130. tags=["quality", "urgent"]
  131. )
  132. stats_1 = maintainer_1.get_stats()
  133. print(f"会话1统计: {stats_1['activity']}\n")
  134. # 模拟会话结束
  135. time.sleep(1)
  136. # 第二次会话 (新的会话ID,但笔记被保留)
  137. print("### 第二次会话 (session_2) ###")
  138. maintainer_2 = CodebaseMaintainer(
  139. project_name="demo_codebase", # 同一个项目
  140. codebase_path="./codebase",
  141. llm=HelloAgentsLLM()
  142. )
  143. # 检索之前的笔记
  144. response = maintainer_2.run(
  145. "我们之前发现了什么代码质量问题?现在应该优先处理哪些?"
  146. )
  147. print(f"\n助手回答:\n{response[:300]}...\n")
  148. stats_2 = maintainer_2.get_stats()
  149. print(f"会话2统计: {stats_2['activity']}\n")
  150. # 展示笔记摘要
  151. summary = maintainer_2.note_tool.run({"action": "summary"})
  152. print("📊 跨会话笔记摘要:")
  153. print(json.dumps(summary, indent=2, ensure_ascii=False))
  154. def demonstrate_tool_synergy():
  155. """演示三大工具的协同"""
  156. print("\n" + "=" * 80)
  157. print("演示三大工具的协同")
  158. print("=" * 80 + "\n")
  159. maintainer = CodebaseMaintainer(
  160. project_name="synergy_demo",
  161. codebase_path="./codebase",
  162. llm=HelloAgentsLLM()
  163. )
  164. # 1. TerminalTool 发现问题
  165. print("### 1. TerminalTool 查找 TODO 注释 ###")
  166. todos = maintainer.execute_command("grep -rn 'TODO' --include='*.py' .")
  167. print(f"发现的 TODO:\n{todos[:300]}...\n")
  168. # 2. NoteTool 记录发现
  169. print("### 2. NoteTool 记录发现 ###")
  170. maintainer.create_note(
  171. title="待实现功能清单",
  172. content=f"通过代码扫描发现以下待实现功能:\n{todos[:500]}",
  173. note_type="conclusion",
  174. tags=["todo", "analysis"]
  175. )
  176. print("✅ 已记录到笔记\n")
  177. # 3. MemoryTool 存储关键信息 (通过对话)
  178. print("### 3. MemoryTool 存储关键信息 ###")
  179. response = maintainer.run("代码库中有哪些待实现的功能?")
  180. print(f"助手回答:\n{response[:200]}...\n")
  181. # 4. ContextBuilder 整合所有信息
  182. print("### 4. ContextBuilder 整合所有信息 ###")
  183. response = maintainer.run(
  184. "基于我们的代码分析,应该优先实现哪些 TODO 功能?"
  185. )
  186. print(f"助手回答:\n{response[:300]}...\n")
  187. # 展示统计信息
  188. stats = maintainer.get_stats()
  189. print("📊 工具使用统计:")
  190. print(f" - 执行的命令: {stats['activity']['commands_executed']}")
  191. print(f" - 创建的笔记: {stats['activity']['notes_created']}")
  192. print(f" - 发现的问题: {stats['activity']['issues_found']}")
  193. def main():
  194. """主函数"""
  195. print("=" * 80)
  196. print("CodebaseMaintainer 三天工作流演示")
  197. print("=" * 80)
  198. print("\n💡 使用我们在 chapter9 创建的示例代码库")
  199. print("📁 代码库路径: ./codebase")
  200. print("📦 包含文件: data_processor.py, api_client.py, utils.py, models.py\n")
  201. # 初始化助手
  202. maintainer = CodebaseMaintainer(
  203. project_name="demo_codebase",
  204. codebase_path="./codebase",
  205. llm=HelloAgentsLLM()
  206. )
  207. # 执行三天工作流
  208. day_1_exploration(maintainer)
  209. day_2_analysis(maintainer)
  210. day_3_planning(maintainer)
  211. week_later_review(maintainer)
  212. # 额外演示
  213. print("\n\n" + "=" * 80)
  214. print("额外演示")
  215. print("=" * 80)
  216. demonstrate_cross_session_continuity()
  217. demonstrate_tool_synergy()
  218. print("\n" + "=" * 80)
  219. print("完整演示结束!")
  220. print("=" * 80)
  221. if __name__ == "__main__":
  222. main()