""" CodebaseMaintainer 三天工作流演示 完整展示长程智能体在三天内的工作流程: - 第一天: 探索代码库(Agent 自主探索) - 第二天: 分析代码质量(Agent 自主分析) - 第三天: 规划重构任务(Agent 自主规划) - 一周后: 检查进度 """ import os # 配置嵌入模型(三选一) # 方案一:TF-IDF(最简单,无需额外依赖) os.environ['EMBED_MODEL_TYPE'] = 'tfidf' os.environ['EMBED_MODEL_NAME'] = '' # 重要:必须清空,否则会传递不兼容的参数 # 方案二:本地Transformer(需要: pip install sentence-transformers 和 HF token) # os.environ['EMBED_MODEL_TYPE'] = 'local' # os.environ['EMBED_MODEL_NAME'] = 'sentence-transformers/all-MiniLM-L6-v2' # os.environ['HF_TOKEN'] = 'your_hf_token_here' # 或使用 huggingface-cli login # 方案三:通义千问(需要API key) # os.environ['EMBED_MODEL_TYPE'] = 'dashscope' # os.environ['EMBED_MODEL_NAME'] = 'text-embedding-v3' # os.environ['EMBED_API_KEY'] = 'your_api_key_here' from hello_agents import HelloAgentsLLM from datetime import datetime import json import time # 导入 CodebaseMaintainer import sys sys.path.append('.') from codebase_maintainer import CodebaseMaintainer def day_1_exploration(maintainer): """第一天: 探索代码库(Agentic 方式) 在这个阶段,我们只给 Agent 高层次的目标, Agent 会自主决定: - 使用哪些 shell 命令探索代码库 - 查看哪些文件 - 是否记录笔记 """ print("\n" + "=" * 80) print("第一天: 探索代码库(Agent 自主探索)") print("=" * 80 + "\n") # 1. 初步探索 - Agent 自主决定如何探索 print("### 1. 初步探索项目结构 ###") print("💡 提示:Agent 会自主决定使用哪些命令(如 find, ls, cat)\n") response = maintainer.explore() print(f"\n助手总结:\n{response[:500]}...\n") # 2. 深入分析某个模块 - Agent 自主决定分析方法 print("### 2. 分析数据处理模块 ###") print("💡 提示:Agent 会自主决定如何分析这个文件\n") response = maintainer.run("请查看 data_processor.py 文件,分析其代码设计") print(f"\n助手总结:\n{response[:500]}...\n") # 模拟时间流逝 time.sleep(1) def day_2_analysis(maintainer): """第二天: 分析代码质量(Agentic 方式) Agent 会自主决定: - 使用什么方法分析代码质量(grep TODO? 统计行数? 检查复杂度?) - 是否需要创建笔记记录问题 - 如何组织分析结果 """ print("\n" + "=" * 80) print("第二天: 分析代码质量(Agent 自主分析)") print("=" * 80 + "\n") # 1. 整体质量分析 - Agent 自主决定分析方法 print("### 1. 分析代码质量 ###") print("💡 提示:Agent 会自主决定如何分析(如 grep TODO, wc -l, 复杂度分析)\n") response = maintainer.analyze() print(f"\n助手总结:\n{response[:500]}...\n") # 2. 查看具体问题 - Agent 自主深入分析 print("### 2. 分析 API 客户端代码 ###") print("💡 提示:Agent 会自主决定如何分析这个文件的质量\n") response = maintainer.run( "请分析 api_client.py 的代码质量,特别是错误处理部分,给出改进建议" ) print(f"\n助手总结:\n{response[:500]}...\n") # 模拟时间流逝 time.sleep(1) def day_3_planning(maintainer): """第三天: 规划重构任务(Agentic 方式) Agent 会自主决定: - 回顾哪些历史笔记 - 如何组织任务规划 - 是否需要创建新的笔记 - 如何安排优先级 """ print("\n" + "=" * 80) print("第三天: 规划重构任务(Agent 自主规划)") print("=" * 80 + "\n") # 1. 回顾进度 - Agent 自主查看历史笔记并规划 print("### 1. 回顾当前进度并规划下一步 ###") print("💡 提示:Agent 会自主查看历史笔记,分析当前进度,并制定计划\n") response = maintainer.plan_next_steps() print(f"\n助手总结:\n{response[:500]}...\n") # 2. 询问 Agent 创建详细计划(Agent 会自主决定是否使用 NoteTool) print("### 2. 让 Agent 创建详细的重构计划 ###") print("💡 提示:Agent 会自主决定如何创建和组织重构计划\n") response = maintainer.run( "请基于我们的分析,创建一个详细的本周重构计划。" "计划应该包括:目标、具体任务清单、时间安排和风险。" "请使用 NoteTool 创建一个 task_state 类型的笔记来记录这个计划。" ) print(f"\n助手总结:\n{response[:500]}...\n") # 模拟时间流逝 time.sleep(1) def week_later_review(maintainer): """一周后: 检查进度""" print("\n" + "=" * 80) print("一周后: 检查进度") print("=" * 80 + "\n") # 1. 查看笔记摘要 print("### 1. 笔记摘要 ###") summary = maintainer.note_tool.run({"action": "summary"}) print("📊 笔记摘要:") print(json.dumps(summary, indent=2, ensure_ascii=False)) print() # 2. 生成完整报告 print("### 2. 会话报告 ###") report = maintainer.generate_report() print("\n📄 会话报告:") print(json.dumps(report, indent=2, ensure_ascii=False)) def demonstrate_cross_session_continuity(): """演示跨会话的连贯性""" print("\n" + "=" * 80) print("演示跨会话的连贯性") print("=" * 80 + "\n") # 第一次会话 print("### 第一次会话 (session_1) ###") maintainer_1 = CodebaseMaintainer( project_name="demo_codebase", #实际使用的时候替换代码路径 codebase_path="/Users/suntao/Documents/GitHub/hello-agents/code/chapter9/codebase", llm=HelloAgentsLLM() ) # 创建一些笔记 maintainer_1.create_note( title="代码质量问题", content="发现多处 TODO 注释需要实现,特别是数据验证和错误处理部分", note_type="blocker", tags=["quality", "urgent"] ) stats_1 = maintainer_1.get_stats() print(f"会话1统计: {stats_1['activity']}\n") # 模拟会话结束 time.sleep(1) # 第二次会话 (新的会话ID,但笔记被保留) print("### 第二次会话 (session_2) ###") maintainer_2 = CodebaseMaintainer( project_name="demo_codebase", # 同一个项目 #实际使用的时候替换代码路径 codebase_path="/Users/suntao/Documents/GitHub/hello-agents/code/chapter9/codebase", llm=HelloAgentsLLM() ) # 检索之前的笔记 response = maintainer_2.run( "我们之前发现了什么代码质量问题?现在应该优先处理哪些?" ) print(f"\n助手回答:\n{response[:300]}...\n") stats_2 = maintainer_2.get_stats() print(f"会话2统计: {stats_2['activity']}\n") # 展示笔记摘要 summary = maintainer_2.note_tool.run({"action": "summary"}) print("📊 跨会话笔记摘要:") print(json.dumps(summary, indent=2, ensure_ascii=False)) def demonstrate_tool_synergy(): """演示三大工具的协同(Agentic 方式) 在这个演示中: - 我们不再手动调用工具 - 而是让 Agent 自主决定使用哪些工具 - Agent 会根据任务自动协同使用多个工具 """ print("\n" + "=" * 80) print("演示三大工具的协同(Agent 自主协调)") print("=" * 80 + "\n") maintainer = CodebaseMaintainer( project_name="synergy_demo", #实际使用的时候替换代码路径 codebase_path="/Users/suntao/Documents/GitHub/hello-agents/code/chapter9/codebase", llm=HelloAgentsLLM() ) # Agent 自主分析并记录 print("### Agent 自主分析代码库中的 TODO 项 ###") print("💡 提示:Agent 会自主决定:\n") print(" 1. 使用 TerminalTool 查找 TODO") print(" 2. 使用 NoteTool 记录发现") print(" 3. 使用 MemoryTool 记住关键信息\n") response = maintainer.run( "请分析代码库中的所有 TODO 项,并将发现记录到笔记中。" "然后告诉我应该优先实现哪些功能。" ) print(f"助手回答:\n{response[:500]}...\n") # 展示统计信息 stats = maintainer.get_stats() print("📊 工具使用统计:") print(f" - 工具调用次数: {stats['activity']['tool_calls']}") print(f" - 执行的命令: {stats['activity']['commands_executed']}") print(f" - 创建的笔记: {stats['activity']['notes_created']}") def main(): """主函数""" print("=" * 80) print("CodebaseMaintainer 三天工作流演示(Agentic 版本)") print("=" * 80) print("\n✨ 核心特性:Agent 自主决策") print("💡 使用我们在 chapter9 创建的示例代码库") print("📁 代码库路径: ./codebase") print("📦 包含文件: data_processor.py, api_client.py, utils.py, models.py") print("\n🔧 Agent 可用工具:") print(" - TerminalTool: 执行 shell 命令") print(" - NoteTool: 创建和管理笔记") print(" - MemoryTool: 记忆管理") print("\n⚡ Agent 会自主决定:") print(" - 使用哪些工具") print(" - 执行什么命令") print(" - 如何组织信息\n") # 初始化助手 maintainer = CodebaseMaintainer( project_name="demo_codebase", #实际使用的时候替换代码路径 codebase_path="/Users/suntao/Documents/GitHub/hello-agents/code/chapter9/codebase", llm=HelloAgentsLLM(provider="deepseek",model="deepseek-chat",api_key="sk-1264257bc4114a73998498ad1436f8f0",base_url="https://api.deepseek.com") ) # 执行三天工作流 day_1_exploration(maintainer) day_2_analysis(maintainer) day_3_planning(maintainer) week_later_review(maintainer) # 额外演示 print("\n\n" + "=" * 80) print("额外演示") print("=" * 80) demonstrate_cross_session_continuity() demonstrate_tool_synergy() print("\n" + "=" * 80) print("完整演示结束!") print("=" * 80) if __name__ == "__main__": main()